Previous post: Widget Anatomy The Manifest This is part two of my Widget Anatomy series which will explain the ins and outs of the Widget Framework that is shipping as part of Windows Mobile 6.5. In this Article we will discuss the major challenges of creating a great user experience that not only looks great, but it integrates nicely with the phone and its snappy and fun to use. The dark side of choice dealing with screen DPInessOne of the coolest things about the Windows Mobile ecosystem is that there are many different devices with all shapes and forms for me to pick up the one that matches my lifestyle best. All those choices do have a dark side though, there is a variety of screen resolution/sizes we need to make sure our Widgets work and look great on. The table bellow shows all the supported Resolution/DPIs Windows Mobile 6.5 supports and as you can see it is a big table. Thankfully for widget writing, there really are only two options, one that we will call HiDPI (for 192) and then LoDPI for the rest. The reason is that, in practice, a document designed for 96 DPI (Internet Explorer on the desktop at 100%) will look fine on 96 DPI, 131 DPI and 128 DPI but it will look way too small on a 192 DPI screen. Now that we have reduced the supported DPIs to only two, then the best (and easiest) way to handle this in your widget is as follows: 1) Generate two CSS Style Sheets for your widget. You can call them something like HiDPI.css and LoDPI.css, and the basic rule is, for HiDPI, things should be about twice as big to look the same way as they do on the desktop. 2) Detect the screen resolution at runtime to determine which CSS to load. Here is an example: 1: function applyCSSStyle() { 2: var width = document.documentElement.clientWidth; 3: var cssFile = "css/LoDPI.css"; 4: if (width >= 480) { 5: // The document is wider than 480 pixels 6: // it must be a High DPI device 7: cssFile = "css/HiDPI.css"; 8: } 9: 10: // Add the correct CSS style sheet to the document 11: var headID = document.getElementsByTagName("head")[0]; 12: var cssNode = document.createElement('link'); 13: cssNode.type = 'text/css'; 14: cssNode.rel = 'stylesheet'; 15: cssNode.href = cssFile; 16: cssNode.media = 'screen'; 17: headID.appendChild(cssNode); 18: } 19: 20: function onLoad() { 21: applyCSSStyle(); 22: }How to best utilize those SoftKeysThe Widget API gives you full control over the soft key menu bar, but since we want our widgets to behave as native applications do there are a few guidelines we should try follow: 1. The left soft key should always represent the default action and it should be context sensitive to what the user is supposed to do at that particular step in the User Scenario. 2. The right soft key can be either a menu or a button, when there only are two possible actions you should save the user one click and make it a button that said, if you do this there should be a way for the user to exit the widget somewhere on your UI. Just as a quick reminder, calling widget.menu.append(menuItem) Adds a menu item to the right SoftKey, if it was a button it will turn into a menu with the non configurable label Menu, also, the Exit menu item is added automatically and cant be renamed nor removed. calling widget.menu.setSoftKey(menuItem, widget.menu.rightSoftKeyIndex) removes all menu items from the right SoftKey and turns it into a button. Best practicesThe following are some of the best practices we have found really help greatly widgets be the best they can be:
Next post: Widget Anatomy - Performance the final frontier |
| |
I am posting this on behalf of Jason Grieves who is a Program Manager on the Windows Accessibility Team. He and his colleague Masahiko Kaneko co-authored a book about our engineering process for accessibility. This is a great example of us helping the ecosystem build great software. Our expectations of software are very high (as they should be!). We expect that the software we use will be reliable, secure, and perform well - we expect the software to just work. There are many ways that we experience software, some of us use the traditional input method of keyboard and mouse. I and many other people augment this with accessible solutions such as larger screens, speech recognition, and screen readers. In Windows we consider accessibility just like reliability, performance, and security to be fundamental to all software in the operating system. Our feature teams create their software to meet these and other core requirements, which combine to create an operating system that meets the essential expectations of our users. In Windows 7 we continued the integration of accessibility requirements into our software engineering process. Accessibility, like the other fundamental requirements, has been planned, designed, implemented and tested in Windows 7. In an effort to enable software developers to create accessible Windows applications, we wanted to share our process with the community. We have captured this engineering process in a new book, Engineering Software for Accessibility. The book addresses three basic questions:
We encourage software developers and anyone with an interest in accessible software to get a copy of our book. You can download a free DOC version of the eBook (right-click to download), or order a paper copy from Amazon. You will learn that properly implemented accessibility enables access to Windows applications for users with a variety of capabilities. We are pleased to offer you the ability to follow much of process our engineers used to make Windows 7 the most accessible operating system Microsoft has yet produced! Engineering Software for Accessibility is the latest of several efforts to assist Developers and Testers create accessible solutions. Early in the Windows 7 development cycle we released two accessibility testing tools as open source on CodePlex. UI Accessibility Checker and UI Automation Verify are designed to check the accessibility of applications that implement programmatic access via the MSAA or UI Automation APIs. We look forward to trying you accessible Windows software! |
| |
Version checking is probably one of the most common Application Compatibility issues that both developers and users are facing. This is another post in a series of posts about Getting Ready for Windows 7. As said, this is probably the most common application compatibility issue that users as well as developers face is when an application fails upon checking the operating system version. A lot can go wrong when version checking is misused. A user might experience a silent fail where the application simply fails to load and nothing happens. Or, a user might see a dialog box indicating something to the effect of you must be running Microsoft Windows XP or later when in fact, the computer is running Windows 7. Many other consequences to poor version checking can inconvenience users as well. Applications fail due to version checking for two main reasons:
When an application runs on an "incompatible" (due to poor version checking) version of Windows, it will generally display an error message, but it may also exit silently or behave erratically. Often, if we work around the version checking, the application will run well. End-users and IT professionals may apply a fix to let the application think it is running on an older version of Windows. Working Around The Problem (not really solving the bug) Compatibility mode: Designed for end users (not for developers to not fix their bugs), compatibility mode is an easy way to work around compatibility issues. When enabled, it applies a set of compatibility fixes that provide a runtime environment more compatible with applications written for older versions of Windows. One of those fixes is the "version lie," which makes the version query functions return the operating system version the user chose in the Compatibility tab of the Properties dialog box instead of the actual Windows version. To enable compatibility mode:
Checking for Features Rather Than Version As mentioned previously, checking the operating system version is not the best way to confirm that a specific operating system feature is available. This is because the operating system may have had new features added in a redistributable DLL. Rather than using GetVersionEx to determine the operating system platform or version number, it is more effective to test for the presence of the feature itself. For example, we plan to make the Direct2D and DirectWrite APIs and the Ribbon API available in Windows Vista, so there is no need to block your application from using these APIs when running on Windows Vista. You just need to check if these features are available on the Operation System that you are running. If possible, your application should still run if the feature is unavailable, though with reduced functionality or performance. You can use one of the following techniques to find out if a specific features is available on the given OS. For Win32 developers:
Windows 7 introduces a new timer API - SetWaitableTimerEXProc, which adds one more input variable to the regular SetWaitableTimerProc. The TolerableDelay lets you specific a time tolerance window in which the timer can expire. This is a new in Windows 7, that we will use to demonstrate how to check for feature. // define function pointer type typedef BOOL (WINAPI *SetWaitableTimerExProc)( __in HANDLE hTimer, __in const LARGE_INTEGER *lpDueTime, __in LONG lPeriod, __in PTIMERAPCROUTINE pfnCompletionRoutine, __in LPVOID lpArgToCompletionRoutine, __in PREASON_CONTEXT WakeContext, __in ULONG TolerableDelay ); LARGE_INTEGER liDueTime; liDueTime.QuadPart = 0; nt period = 1000; unsigned int tolerance = 1000; HANDLE hTimer = // Get timer handle REASON_CONTEXT reasonContext = {0}; reasonContext.Version = 0; reasonContext.Flags = POWER_REQUEST_CONTEXT_SIMPLE_STRING; reasonContext.Reason.SimpleReasonString = L"MyTimer"; // Get module handle to a module which is already loaded HMODULE hKernel32Module = GetModuleHandle(_T("kernel32.dll")); if (hKernel32Module == NULL) return FALSE; // Get Address of function SetWaitableTimerExProc pFnSetWaitableTimerEx = (SetWaitableTimerExProc) ::GetProcAddress(hKernel32Module, "SetWaitableTimerEx"); // Check if the function exists if (pFnSetWaitableTimerEx == NULL) return FALSE; // Call function if (!pFnSetWaitableTimerEx(hTimer, &liDueTime, period, NULL, NULL, &reasonContext, tolerance) { // handle error } Alternatively, you may use DLL delayed loading and call functions in a __try...__except block. (For more information, see Linker Support for Delay-Loaded DLLs.) For COM APIs, handle errors returned by CoCreateInstance and QueryInterface.NET framework applications that call Win32 APIs via P/Invoke should handle EntryPointNotFoundException and DllNotFoundException exceptions.
If You Must Check OS Version Number Identifying the current operating system is not the best way to determine whether a particular operating system feature is present. However, if you cant design your application to check for specific feature availability and the only way to ensure compatibility is through version checking, then please consider the following. For native applications, you will need to ensure your application's logic will work with newer versions of Windows. Please DO NOT BLOCK on version change! The following is a Win32 code example that uses GetVersionEx. If the major version is greater than 5 (Windows Vista, Windows Server 2008 R2 and Windows 7), the check passes. If it equals 5, then the minor version should be 1 or greater (Windows XP or Windows Server 2003). #include <windows.h>#include <stdio.h>void main(){ OSVERSIONINFO osvi; BOOL bIsWindowsXPorLater; ZeroMemory(&osvi, sizeof(OSVERSIONINFO)); osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); GetVersionEx(&osvi); bIsWindowsXPorLater = ( (osvi.dwMajorVersion > 5) || ( (osvi.dwMajorVersion == 5) && (osvi.dwMinorVersion >= 1) )); if(bIsWindowsXPorLater) printf("The system meets the requirements.\n"); else printf("The system does not meet the requirements.\n");} However there is a better way to verify the minimum OS version required using VerifiyVersionInfo(). This function compares a set of operating system version requirements to the corresponding values for the currently running version of the system. The following code example uses VerifyVersionInfo to check the operating system version against minimal requirements (Windows XP SP2): #include <windows.h>BOOL Is_WinXP_SP2_or_Later () { OSVERSIONINFOEX osvi; DWORDLONG dwlConditionMask = 0; int op=VER_GREATER_EQUAL; // Initialize the OSVERSIONINFOEX structure. ZeroMemory(&osvi, sizeof(OSVERSIONINFOEX)); osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX); osvi.dwMajorVersion = 5; osvi.dwMinorVersion = 1; osvi.wServicePackMajor = 2; osvi.wServicePackMinor = 0; // Initialize the condition mask. VER_SET_CONDITION( dwlConditionMask, VER_MAJORVERSION, op ); VER_SET_CONDITION( dwlConditionMask, VER_MINORVERSION, op ); VER_SET_CONDITION( dwlConditionMask, VER_SERVICEPACKMAJOR, op ); VER_SET_CONDITION( dwlConditionMask, VER_SERVICEPACKMINOR, op ); // Perform the test. return VerifyVersionInfo( &osvi, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR, dwlConditionMask);} In this code you can see how we use the VerifyVersion with a set of conditions to return TRUE incase we run on any OS grater than Windows XP Service Pack 2.
For .NET Framework developers, use the ==, !=, <=, <, >, >= operators of the Version object returned by Environment.OSVersion.Version: // This code checks if the OS is at least Windows XP if (Environment.OSVersion.Version < new Version(5, 1)) { MessageBox.Show("Windows XP or later required.", "Incompatible Operating System", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } It is highly recommended that you dont check for version at all and try looking to work with features. It will prove valuable for the future Just incase you want to read more, here are some useful links
You can also download a HOL and code sample for this topic. |
| | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
If youve seen the any of the plethora of Windows Mobile 6.5 screen shots, likely youd agree that it looks much better than previous versions. A component of this face lift, is support for PNG files in the Window Mobile 6.5 Start screen. Including a nicely rendered PNG file as your application icon is important to ensure the highest quality user experience across different devices. If you plan to distribute your application via Windows Marketplace for Mobile (and I dont know why you wouldnt) the requirements document requires that you use a 45 x 45, 60 x 60, or 90 x 90 Start screen icon for your application. This post will cover how to use PNG files as icons in the Windows Mobile 6.5 Professional Start screen. For information on creating PNG icons, see my previous post on Creating Custom Icons for Windows Mobile 6.5. The sample code I will be referring to in this post can be found here. Contents:Start Screen: Resolution / DPI and Icon Size Start Screen: Resolution / DPI and Icon SizeThe Start Screen is one of the huge improvements in Windows Mobile 6.5 Professional. This replaces the Start Menu in previous versions. The improvements include: enhanced touch screen navigation (tap, tap and hold, pan, and flick) and more options for organizing and presenting Start menu items. If you are an experienced Windows Mobile developer, you know that depending on the DPI and resolution of the device, the shell extracts the appropriately sized icon from the EXE for display in the Start screen. Windows Mobile 6.5 still supports this; however now it also supports the display of PNG file icons. The shell does not automatically select the size of the PNG icon based on the device DPI. This dynamic selection of the icon is done in a setup dll. (See dynamic setup below.) The table below illustrates the DPI / resolution and icon size relationship.
Registry KeysTo have the Start screen use a PNG file instead of an icon embedded in the EXE, you need to provide the following registry entries: [HKEY_LOCAL_MACHINE\Security\Shell\StartInfo\Start\Phone.lnk] Here are the definitions of the value pair settings:
Security note: This requires creating a registry key underneath HKLM\Security. This is a protected registry location. To write to a protected registry key, the CAB file needs to be signed. This will not be a problem for Marketplace applications, since by definition they are signed. As mentioned, this article only applies to Windows Mobile Professional devices. However, if your use the same CAB for a Standard device installation, you will need to make sure your application is signed privileged, otherwise setup will fail. SetupIn the next two sections, Ill walk through two deployment scenarios, static and dynamic. Static Setup:If you know the resolution of the device your application will be installed onto, you can simply specify the registry key as part of your CAB file configuration. For example, I know my hypothetical application will only be installed on the Touch Pro (480 x 640), so I will use a 90 x 90 PNG file as the Start screen icon. In my Smart Device CAB project, I have added the following registry key: Note: This registry key supports CE strings and .INF file strings. Above %InstallDir% maps to the \Program Files\SMS Intercept directory. My CAB file also includes the AppIcon.png and a shortcut of the same name as the registry key above (SMS Intercept.lnk). See below: Dynamic Setup:Detecting DPI:The preferred way to configure the Start screen icon is dynamically: copying the appropriately sized PNG file based on the DPI of the device. We will use a setup dll to detect the DPI, and copy the appropriate PNG. You may know that WCELOAD (the EXE that process the CAB file) or a DLL that is loaded into its process, will return the same DPI (96) no matter the actual DPI of the device. To workaround this, we launch a very small helper EXE that quickly exits, without UI, and returns the DPI. The SDK sample ResDLL uses this technique as well as demonstrates how to install DPI specific resource DLLs. Here is the code used to detect the DPI: int WINAPI WinMain( HINSTANCE hInstance, Copy DPI specific files:Our dynamic CAB file contains four png files: Based on the DPI detected, we copy the appropriate PNG file to the filename AppIcon.png. AppIcon.png is included in the CAB as a fallback in case our DPI detect logic fails. The unused icons and the DPI detect EXE are deleted. Here is a code snippet from the sample setup dll (SetupDPI) implementing this: wsprintf(szFile,_T("%s\\%s"), pszInstallDir, _T("\\GetRealDPI.EXE")); Create Shortcut:As mentioned, we do the post-processing of the files after the CAB is installed (in the Install_Exit function). That is, because the icon image in the Start screen is created when the shortcut is created (see the cached icons section below), we need to create the shortcut in the setup dll instead of in the CAB file as was done in the static CAB sample. Otherwise, the Start screen will use an icon extracted from the EXE instead of the PNG file. Here is the language independent code that creates the shortcut: // Build lnk filename Note that the dynamic CAB sample does not not contain the file system declaration that creates a shortcut as the static sample CAB does. Cached IconsDuring development, you will likely want to change the PNG file as you experiment will different artwork. You will notice that if you overwrite the PNG file, the Start screen will not use the new image. This is because when the Start screen shortcut is created, the icon image is cached by the shell. Thereafter for better performance, the shell retrieves the image from the cache. The cache is rebuilt a boot time. Here is one possible workaround:
Here is provisioning XML that does this. You can run this using RapiConfig.exe: <wap-provisioningdoc> ConclusionYou should now understand how to configure your CAB file projects to include PNG files as icons in the Windows Mobile 6.5 Start screen.
|
| |
Our friends over in the MDOP team just released the beta version of the Microsoft Application Virtualization (App-V) 4.6 today. We know that many of you are looking at application virtualization in both the context of your existing environment and also as part of your migration planning to Windows 7. Besides some enhancements to the sequencer to simplify the workflow for creating virtual application the team has added the ability to sequence 64 bit applications. As 64 bit computing becomes more common place in the Enterprise this first to market feature removes another challenge in your planning and rollout strategies. Customers who want to get familiar App-V 4.6 Beta can register and download via Microsoft Connect. As always, we want to hear from you. We build great products by including feedback from our customers, so go ahead, test App-V 4.6 and give us feedback via Connect. For customers who are currently using App-V 4.5 CU1 with their 32-bit Windows 7 systems, we will release an update to the 4.5 version of the product. App-V 4.5 SP1 will be available within 90 days of Windows 7 general availability and provide full support for running App-V 4.5 and Windows 7 (32-bit) in production. Enjoy! For more information head over to the MDOP teams blog post here. |
| |
We covered the basics of the Windows 7 Taskbar in Developing for the Windows 7 Taskbar Application ID, and how you can create a Jump List for your application in Developing for the Windows 7 Taskbar Jump into Jump Lists Part 1, Part 2, and Part 3). In this post, we will explore how you can leverage the cool Taskbar functionality of dynamic overlay icons and multi-state progress bars. A central Windows 7 tenet is that the "User Is in Control"; that is, we empower users to take ownership of their desktop looks and functionality. From little things, like allowing users to arrange their Taskbar icons as they see fit, to enabling users to control the number of icons on the Taskbar. Windows 7 removed the System Tray Icon area. By default, almost all the tray icons are concealed. Consequently, it is safe to assume that large number of the notification balloons will also not be visible and most users will not see them. You can read more about the updates to the Notification Area here. To compensate for this lack of notification, Windows 7 Taskbar offers Overlay Icons and Progress Bars. By using overlay icons and progress bars, your application can provide contextual status information to the user in spite of the lack of a System Tray Icon area and even if the applications window does not display. The user doesnt even have to look at the thumbnail or the live preview of your app the Taskbar button itself can reveal whether you have any interesting status updates. This functionality is part of our commitment to provide users with easily accessible information about an application's status without any extra clicking. Overlay Icons The ITaskbarList4 interface, specifically its SetOverlayIcon function, exposes the native overlay functionality. The function takes a window handle, an icon handle, and optional description text, as you can see in the following code snippet. HICON hIcon = NULL; // for IDM_OVERLAY_CLEAR Make sure you obtain ITaskbarList3 *g_pTaskbarList = NULL;as we did before, and CoCreate it: CoCreateInstance(When running the above code in the proper context (you can download the application) the result looks like the following pictures. On the left, you see the application without any overlay icons, and on the right you can see the application with a red icon overlay.
Taskbar.OverlayImage = Doing so allows you to provide an OverlayImage for the taskbar button. The TaskbarDemo project is a WinForms demo, and you can find the above code in the TaskbarDemoMainForm.cs. Its equally easy to provide an extension method that does this to a WPF Window. Note that the only thing that you need to do is get the right icon, which is easy using .NET resources. Progress Bars If you already use a standard progress bar in your applications top level window, the DMW will pick it up and, by default, display its progress as an overlay on top of your application. However, you can programmatically control the progress bar behavior on your applications icon. The native functionality is again found in the ITaskbarList3 interface, this time in the SetProgressState and SetProgressValue functions. The functions are quite self-explanatory. You can set the progress bars state (SetProgressState) to, for example, indeterminate or error, and use SetProgressValue to set the progress value. The following code snippet illustrates how to use these functions: case WM_TIMER: Note that on the first timer tick, we set the progress bar to TBPF_INDETERMINATE, and only after that did we set it to TBPF_NORMAL, which set the progress indicator to grow in size from left to right in proportion to the estimated amount of the operation completed. For managed code, we use the Windows Code Pack API. Much like the native progress bar, the managed code Taskbar class includes a progress bar property (it is in its own a class), which allows you to set current value, max value, and statethe progress bar state. The progress bar states (found in the TaskbarButtonProgressState class) are:
You can find a WinForms demo in the TaskbarDemo project and in the TaskbarDemoMainForm.cs, you can find the UpdateProgressBar function that is called by a timer to update the progress bar. Taskbar.ProgressBar.State = As you can see, the code enables you to choose the state of the progress bar. Changing it to the error state turns the color of the progress bar on the Taskbar Icon to red. The icing on the Taskbar progress bar "cake" is that you get this functionality FOR FREE if you use the standard progress dialog for file operations. (As we advance in this series, youll see that you get lots of functionality for free if you follow the standard guidelines of Windows programming.) For example, if you invoke a file operation using the SHFileOperation API or IFileOperation interface, the Taskbar button progress bar automatically displays the progress information (including errors) of that operation. This is what Windows Explorer does with great success. Original post from Sasha Goldstein |
| |
Hello, my name is Constanze Roman and Im a Community PM with the Windows Mobile Community Team. If youve been curious about porting an iPhone app to the Windows Mobile platform, then I have exciting news for you! We have just published a new technical article on MSDN titled Porting the Amplitude Application from the iPhone to a Windows Mobile Device a Case Study which outlines the real-world experiences of a developer who ported the popular Amplitude application.
Amplitude picks up any sound in a users surroundings through the microphone and then amplifies the sound, rendering it into a rich graphical representation on the device. Amplitude can be used to amplify any sounds, such as human or animal heartbeats, that usually wouldnt be picked up by the human ear. Amplitude provides a cool user interface featuring an oscilloscope that allows users to view and visually quantify, signal voltages, as you can see the volume of the sound that you are listening to. Amplitude is well suited for a porting project because it combines a rich user interface with features such as alpha blending and transparency with specific audio and sound requirements, which makes it challenging to port the app but, at the same time, provides a number of helpful learning experiences. Luke Thompson, a software developer with Gripwire.com, a Seattle-based mobile and social application development company, took on the challenge to find out what it takes to port the iPhone version of Amplitude to a Windows phone. The case study now published on MSDN outlines Thompsons experience, and provides some key takeaways for developers who want to get into the porting business. Thompsons account of his porting experience is especially interesting because it outlines the Community resources he has used to get the information he needs. In his conclusion, Thompson credits the Windows Mobile Developer Community for helping him resolve the issues he encountered along the road, stating that: The large development community, both within Microsoft and outside, and the various whitepapers, blogs, virtual labs, websites, and other online documentation, offered a wealth of information that provided direction and greatly facilitated problem resolution. The only real challenge was assuring total portability between screens, and that was assured by utilizing the concept of aspect ratios. Although Thompson did encounter some roadblocks while porting the Amplitude app to Windows Mobile, he was able to successfully resolve all issues and get the application to work on a HTC Touch Pro phone that runs on a build of the Windows Mobile 6.5 operating system. One of Thompsons main takeaways was that the Visual Studio 2008 Development Environment really made a difference for him because it provided most of what he needed at one place, such as the security certificates (certs.cab) for installing the application on your device. Thompson noted that the MSDN Virtual Labs were especially helpful in getting him started with the development process. When porting the app from the iPhone to Windows Mobile, Thompson had to pay attention to major differences in the OS, such as the fact that the iPhone does not support running applications in the background, while background operation is a requirement for all Windows Mobile applications. Adjusting the screen orientation as well as accommodating phones with keyboards was another area which required additional investigation, which led Thompson to MSDN, which ended up providing a workable solution. Porting the UI posed some challenges, especially since the UI for the Amplitude app on the iPhone makes use of transparencies and alpha blending. Since some of these functionalities are not available in the .NET Compact Framework, Thompson had to look for community resources to find the information he needed to complete this task. When searching for a resource, Thompson discovered the UI Framework, which is posted on Code Gallery and turned out to be a major asset for Thompsons porting efforts. Thompson depended on community content as well to help him port the audio and sound features of the Amplitude app to Windows Mobile. The Code Project turned out to be especially helpful for Thompson efforts, as he found an article that explained how to create a framework for implementing audio effects in C#. Thompsons case study shows, that even though there are some challenges in porting a multimedia-rich application from the iPhone to Windows Mobile, the task can be accomplished, especially with the help of developer-friendly tools like Visual Studio, the richness of community content that is available for Windows Mobile, and last but not least by planning the project ahead and doing all the necessary research in advance. Thompsons experience should save you time as you port your own applications to Windows Mobile. With Windows Marketplace for Mobile getting ready to open its doors to millions of potential new customers, the opportunity is compelling. |
| |
Hello, my name is Loke Uei Tan and I am the Senior Technical Product Manager for the Mobile Developer Experience (DEX) team at Microsoft. I blog regularly on MSDN, and will also post on this team blog from time to time. You can also connect with me on Twitter @wmdev and @lokeuei. Dates: Our first event will be held on 8/19 |
| |
As of today the Windows Mobile Blog has officially joined The Windows Blog. Not only have our bloggers made the transition, but much of the high impact content has been brought forward for your convenience. Windows Mobile RampUp Track Is Now Available On MSDN | MSDN Carry Your Office in Your Pocket #1 | MSDN Windows Mobile Facebook Application Update | MSDN Resolving Common Crashes Seen in Windows Mobile Watson Data | MSDN Samsung’s Web Site for Windows Mobile Developers | MSDN developer.windowsmobile.com | MSDN Windows® Marketplace for Mobile Developer Strategy Announced! | MSDN DreamSpark for Students | MSDN Introducing Windows® Marketplace for Mobile… | MSDN Mobile Manager for Netflix | MSDN Developing Location Aware Applications for Windows Mobile | MSDN New Version of Live Search Mobile | MSDN Survey of Web Browsers for Windows Mobile | MSDN Windows Mobile Development Forum | MSDN Press, Click, Select, or Choose?!? | MSDN |
| |
Do you want to win a free trip to Los Angeles and a free ticket to PDC 2009? Do you think you have what it takes to win $17,777? Do you think you can write an amazing Windows 7 application? Well, if your answer to any of the above question is "Yes!" then say hello to the Code7 Contest. The Code7 contest is where your application design ingenuity gives you the opportunity to get millions of eyes on your work, plus a trip to LA for PDC09, and up to $17,777 in cash! Code7 is a special coding contest for developers. It is a great opportunity to show the world your creativity and coding powers. It is a way for you to cash in on your knowledge and skills. This is not just another standard code contest; this contest gives the finalists the opportunity to present their application at PDC 2009 in LA. The first prize is a real gem: $17,777 in cash, the opportunity to present the application to Microsoft executives at PDC 2009, plus worldwide interest in your application including a massive marketing bump for your application. To enter, you must: Build an original, consumer-oriented client application prototype that runs natively on Windows 7 (for example Win32, WPF, MFC or WinForms not an Air application or just a gadget) and addresses one or more of the following topic categories:
The application must use at least one of the following Windows 7 technology features; however, judging will give more weight to entries that take advantage of more than one of these features:
So if you have being following my blog you have some advantage. The contest has several stages and few rules you need to be aware of:
For the complete contest rules and legal notice, please refer to the RULES section on the Code7 Contest Web site - https://www.code7contest.com/. So, what are you waiting for? Get going and start working on your Windows 7 application! |
Today the Expression Encoder Team has announced Expression Encoder 3. Expression Encoder 3 is part of the upcoming Expression Studio 3 suite and comes packed with new features such as support for H.264 and the new Smooth Streaming technology.
And it also brings another super cool feature: Screen Capture.
Today, screen-casting has become quite popular with bloggers. Screen-casting allows bloggers to share what they are looking at on their PC screen with readers of their blog. Its a great way to show off really neat software experiences that people should see for themselves.
With Expression Encoder 3, they are introducing the Expression Encoder Screen Capture feature. This feature can be launched right from the Start Menu (Ive pinned it to my Taskbar in Windows 7). People can choose a specific region of their screen they want to record (or the whole screen) and choose to record audio from their microphone and video from their webcam too. It records in a special light weight codec developed by Microsoft Research that when recording video, it doesnt use up so much system resources during the capture process. That means the actual recording process doesnt steal so much system resources on your PC that what youre recording doesnt look so hot. After recording, you can import the capture into Expression Encoder for final encoding and publishing (including some awesome new Silverlight templates).
Ive been trying this feature out for the last couple days and it is fantastic. I am definitely planning to do a lot more screen-capture videos with Windows 7 features.
Speaking of Windows 7 features, Expression Encoder utilizes the new Windows Taskbar in Windows 7 with encoding progress being displayed. The first encoding pass appears in yellow, and the second pass appears as green. Pretty slick!
Encoding First Pass:
Encoding Second Pass:
(Screenshots from Expression Encoder Team Blog)
For availability of Expression Encoder 3, keep your eyes on the Silverlight Team Blog for the official Expression Studio 3 announcement. Oh, and you should also check out
For more information on Expression Encoder 3 and the Expression Encoder Screen Capture feature, click here to read the Expression Encoder Teams blog post.
| |
If you are programmer, especialy Java programmer, and you need to implement some of known sorting algorithms in you code, following link can be very helpful. Site I recommend will offer to you one of the cleanest implementations I have found on the net of sorting algorithms codes and their visualization on-line.Here you can find clean Java code examples of The "generic" sorting algorithm, The BozoSort Algorithm, The PermSort Algorithm, The StoogeSort Algorithm, The QMSort Algorithm, The BubbleSort Algorithm, The SelectionSort Algorithm, The CocktailSort Algorithm, The InsertionSort Algorithm, The ShakerSort Algorithm, The ShakerSort 2 Algorithm, The ShellSort Algorithm, The QSort Algorithm, The HeapSort Algorithm, The JSort Algorithm, The MergeSort Algorithm. In the page you can also visually notice the speed of different types of sorting algorithms which can be used in your code. Personally I am a fan of quick sort (QSort) which in some situation can be the fastest algorithm ever. To feel the power of sort algorithm, the power of java code, and much more dramatic demonstration of algorithms click on this link: http://cg.scs.carleton.ca/~morin/misc/sortalg/! |
You may already know that software doesn't just appear on the shelves by magic. If you run a software development company or you are one of employees you already face the problems of software development cycle. That is a product process which start from scratch and continuously change until the real product (confirmed by the stakeholders, customers and clients) arises from middle managers and programmers sweat and night work.
If you are programmer, especialy Java programmer, and you need to implement some of known sorting algorithms in you code, following link can be very helpful. Site I recommend will offer to you one of the cleanest implementations I have found on the net of sorting algorithms codes and their visualization on-line.