<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-5559420436957233395</id><updated>2012-02-16T11:20:56.685-08:00</updated><title type='text'>Computer world</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://gayya2010.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5559420436957233395/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://gayya2010.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Gayan Dasanayake</name><uri>http://www.blogger.com/profile/10444221085033740181</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>3</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-5559420436957233395.post-1433724709278078000</id><published>2008-01-27T17:38:00.000-08:00</published><updated>2008-01-27T17:39:15.618-08:00</updated><title type='text'>What is Oracle Maximum Availability Architecture?</title><content type='html'>&lt;p&gt;&lt;b&gt;&lt;span style="font-size: 14pt; font-family: Arial;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;span style="font-size: 14pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="font-size: 10pt; font-family: Arial;"&gt;Oracle Maximum Availability Architecture (MAA) is Oracle's best practices blueprint based on proven Oracle high availability technologies and recommendations. The goal of MAA is to achieve the optimal high availability architecture at the lowest cost and complexity.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;b&gt;&lt;span style="font-size: 14pt; font-family: Arial;"&gt;&lt;/span&gt;&lt;/b&gt; &lt;p&gt;&lt;b&gt;&lt;span style="font-size: 14pt; font-family: Arial;"&gt;&lt;/span&gt;&lt;/b&gt;&lt;span style="font-size: 14pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-size: 10pt; font-family: Arial;"&gt;MAA defines HA best practices for a comprehensive set of Oracle products - Oracle Database, Oracle Application Server, Oracle Applications and Grid Control.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: 10pt; font-family: Arial;"&gt;MAA considers various business SLAs to make these best practices as widely applicable as possible.&lt;/span&gt; &lt;/li&gt;&lt;li&gt;&lt;span style="font-size: 10pt; font-family: Arial;"&gt;MAA leverages database grid servers with commodity servers and storage grid with resilient low cost storage to provide highly resilient, lower cost infrastructure.&lt;br /&gt;&lt;/span&gt; &lt;/li&gt;&lt;li&gt;&lt;span style="font-size: 10pt; font-family: Arial;"&gt;MAA evolves with new Oracle versions and features.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt; &lt;/li&gt;&lt;li&gt;&lt;span style="font-size: 10pt; font-family: Arial;"&gt;MAA is hardware and OS independent.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;b&gt;&lt;span style="font-size: 14pt; font-family: Arial;"&gt;MAA Demonstrations&lt;/span&gt;&lt;/b&gt;&lt;span style="font-size: 14pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;span style="font-size: 10pt; font-family: Arial;"&gt;&lt;a target="_blank" href="http://www.oracle.com/technology/deploy/availability/demonstrations.html"&gt;MAA demonstrations&lt;/a&gt; quickly illustrate the unique levels of high availability, data protection and enhanced quality of service provided by the Oracle Maximum Availability Architecture.&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;b&gt;&lt;span style="font-size: 14pt; font-family: Arial;"&gt;&lt;a name="BestPracticePubs"&gt;&lt;/a&gt;MAA Best Practice Publications&lt;/span&gt;&lt;/b&gt;&lt;span style="font-size: 14pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="font-size: 10pt; font-family: Arial;"&gt;MAA publications consist of a series of architectural, configuration and operational HA best practice blueprints using Oracle technologies. For example, the following diagram represents an HA architecture involving the Oracle Database and Oracle Application Server.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: center;"&gt;&lt;img alt="" src="http://www.oracle.com/technology/deploy/availability/images/maaoverview.gif" style="width: 653px; height: 521px;" /&gt;&lt;br /&gt;&lt;/div&gt;&lt;p&gt;&lt;span style="font-size: 10pt; font-family: Arial;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="font-style: italic; text-align: center;"&gt;&lt;span style="font-size: 10pt; font-family: Arial;"&gt;Example of an HA Configuration using MAA Best Practices&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="font-size: 10pt; font-family: Arial;"&gt;&lt;br /&gt;This architecture involves identically configured primary and secondary sites. The primary site contains multiple application servers and a production database using Oracle Real Application Clusters (RAC) to protect from host and instance failures. The secondary site also contains similarly configured application servers, and a physical standby database kept synchronized with the primary database by Oracle Data Guard.  Clients are initially routed to the primary site. If a severe outage affects the primary site, Data Guard quickly fails over the production database role to the standby database, after which clients are directed to the new primary database to resume processing.&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: Arial;"&gt; The Active Data Guard Option with Real-Time Query (Oracle Database 11g) enables the physical standby database to be open-read only while apply is active; enhancing primary database performance by offloading overhead from ad-hoc queries and reporting to the synchronized standby database at the secondary site.&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="font-size: 10pt; font-family: Arial;"&gt;The various HA best practice publications are grouped under the following categories:&lt;/span&gt;&lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5559420436957233395-1433724709278078000?l=gayya2010.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gayya2010.blogspot.com/feeds/1433724709278078000/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5559420436957233395&amp;postID=1433724709278078000' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5559420436957233395/posts/default/1433724709278078000'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5559420436957233395/posts/default/1433724709278078000'/><link rel='alternate' type='text/html' href='http://gayya2010.blogspot.com/2008/01/what-is-oracle-maximum-availability.html' title='What is Oracle Maximum Availability Architecture?'/><author><name>Gayan Dasanayake</name><uri>http://www.blogger.com/profile/10444221085033740181</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5559420436957233395.post-3467032726520345845</id><published>2007-12-04T19:22:00.000-08:00</published><updated>2007-12-04T19:45:57.511-08:00</updated><title type='text'>THE FACTORY PATTERN</title><content type='html'>One type of pattern that we see again and again in OO programs is the&lt;br /&gt;Factory pattern or class. A Factory pattern is one that returns an instance of&lt;br /&gt;one of several possible classes depending on the data provided to it. Usually&lt;br /&gt;all of the classes it returns have a common parent class and common methods,&lt;br /&gt;but each of them performs a task differently and is optimized for different&lt;br /&gt;kinds of data.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;How a Factory Works&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Sample Code&lt;br /&gt;Let's consider a simple case where we could use a Factory class. Suppose we&lt;br /&gt;have an entry form and we want to allow the user to enter his name either as&lt;br /&gt;“firstname lastname” or as “lastname, firstname”. We’ll make the further&lt;br /&gt;simplifying assumption that we will always be able to decide the name order&lt;br /&gt;by whether there is a comma between the last and first name.&lt;br /&gt;3&lt;br /&gt;This is a pretty simple sort of decision to make, and you could make it with a&lt;br /&gt;simple if statement in a single class, but let’s use it here to illustrate how a&lt;br /&gt;factory works and what it can produce. We’ll start by defining a simple base&lt;br /&gt;class that takes a String and splits it (somehow) into two names:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;class Namer {&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;//a simple class to take a string apart into two names&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;protected String last;            //store last name here&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;protected String first;            //store first name here&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;public String getFirst() {&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;return first;                            //return first name&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;public String getLast() {&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;return last;                            //return last name&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;In this base class we don’t actually do anything, but we do provide&lt;br /&gt;implementations of the getFirst and getLast methods. We’ll store the split&lt;br /&gt;first and last names in the Strings first and last, and, since the derived classes&lt;br /&gt;will need access to these variables, we’ll make them protected.&lt;br /&gt;The Two Derived Classes&lt;br /&gt;Now we can write two very simple derived classes that split the name into&lt;br /&gt;two parts in the constructor. In the FirstFirst class, we assume that everything&lt;br /&gt;before the last space is part of the first name: &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;class FirstFirst extends Namer {                  //split first last&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;   public FirstFirst(String s) {&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;       int i = s.lastIndexOf(" ");                 //find sep space&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;       if (i &gt; 0) {&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;                                                                  //left is first name&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;        first = s.substring(0, i).trim();&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;                                                              //right is last name&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;               last =s.substring(i+1).trim();&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;         }&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;        else {&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;         first = “”; // put all in last name&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;        last = s; // if no space&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;    }&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;  }&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;And, in the LastFirst class, we assume that a comma delimits the last name.&lt;br /&gt;In both classes, we also provide error recovery in case the space or comma&lt;br /&gt;does not exist.&lt;br /&gt;&lt;br /&gt;class LastFirst extends Namer {          //split last, first&lt;br /&gt;      public LastFirst(String s) {&lt;br /&gt;           int i = s.indexOf(","); //find comma&lt;br /&gt;           if (i &gt; 0) {&lt;br /&gt;         //left is last name&lt;br /&gt;         last = s.substring(0, i).trim();&lt;br /&gt;         //right is first name&lt;br /&gt;         first = s.substring(i + 1).trim();&lt;br /&gt;         }&lt;br /&gt;            else {&lt;br /&gt;          last = s; // put all in last name&lt;br /&gt;          first = ""; // if no comma&lt;br /&gt;         }&lt;br /&gt;     }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Building the Factory&lt;br /&gt;Now our Factory class is extremely simple. We just test for the existence of a&lt;br /&gt;comma and then return an instance of one class or the other:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;class NameFactory {&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;        //returns an instance of LastFirst or FirstFirst&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;         //depending on whether a comma is found&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;         public Namer getNamer(String entry) {&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;          int i = entry.indexOf(","); //comma determines name&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;         order&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;          if (i&gt;0)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;         return new LastFirst(entry); //return one class&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;         else&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;         return new FirstFirst(entry); //or the other&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;   }&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Using the Factory&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;You type in a name and then click on the Compute button, and the divided&lt;br /&gt;name appears in the text fields below. The crux of this program is the&lt;br /&gt;compute method that fetches the text, obtains an instance of a Namer class&lt;br /&gt;and displays the results.&lt;br /&gt;In our constructor for the program, we initialize an instance of the factory&lt;br /&gt;class with&lt;br /&gt;&lt;br /&gt;NameFactory nfactory = new NameFactory();&lt;br /&gt;&lt;br /&gt;Then, when we process the button action event, we call the computeName&lt;br /&gt;method, which calls the getNamer factory method and then calls the first and&lt;br /&gt;last name methods of the class instance it returns:&lt;br /&gt;&lt;br /&gt;private void computeName() {&lt;br /&gt;//send the text to the factory and get a class back&lt;br /&gt;namer = nfactory.getNamer(entryField.getText());&lt;br /&gt;//compute the first and last names&lt;br /&gt;//using the returned class&lt;br /&gt;txFirstName.setText(namer.getFirst());&lt;br /&gt;txLastName.setText(namer.getLast());&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;And that’s the fundamental principle of Factory patterns. You create an&lt;br /&gt;abstraction which decides which of several possible classes to return and&lt;br /&gt;returns one. Then you call the methods of that class instance without ever&lt;br /&gt;knowing which derived class you are actually using. This approach keeps the&lt;br /&gt;issues of data dependence separated from the classes’ useful methods. You&lt;br /&gt;will find the complete code for Namer.java&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5559420436957233395-3467032726520345845?l=gayya2010.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gayya2010.blogspot.com/feeds/3467032726520345845/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5559420436957233395&amp;postID=3467032726520345845' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5559420436957233395/posts/default/3467032726520345845'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5559420436957233395/posts/default/3467032726520345845'/><link rel='alternate' type='text/html' href='http://gayya2010.blogspot.com/2007/12/factory-pattern.html' title='THE FACTORY PATTERN'/><author><name>Gayan Dasanayake</name><uri>http://www.blogger.com/profile/10444221085033740181</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5559420436957233395.post-6429497369049262029</id><published>2007-11-01T11:01:00.000-07:00</published><updated>2007-11-01T11:31:28.020-07:00</updated><title type='text'>Simple MP3 Player for Pocket PC</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_twcnBQs83Jc/RyoYPP6o5tI/AAAAAAAAAAw/DaYdDB0aWtI/s1600-h/Simple_MP3_Player_for_PPC.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://bp0.blogger.com/_twcnBQs83Jc/RyoYPP6o5tI/AAAAAAAAAAw/DaYdDB0aWtI/s320/Simple_MP3_Player_for_PPC.png" alt="" id="BLOGGER_PHOTO_ID_5127937775964317394" border="0" /&gt;&lt;/a&gt;When I was asked to create an audio guide based on Pocket PC technology and MP3 sound tracks, I had no clue where to go and how to achieve this. So, I went for a little net-surfing and what I found was a neat library: FMOD Sound System from Firelight Technologies. They propose a more-than-complete set of functions, enabling you to create just about any sound recording/playing application, for desktops and Pocket PCs. You can read more about it here. Download the API and see for yourself! (You're just another WinAmp away...)&lt;br /&gt;&lt;p&gt;&lt;br /&gt;For my system, I needed of course, a CE version of their DLL. If you are developing in C++ for CE then it's all right. If you are coding in .NET, then start the troubles.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Without even going into the definitions, one could realize at least the difficulties of communicating from managed code to unmanaged code. Actually it's the opposite way around that gives you headaches. On Pocket PCs, as well as normal desktop apps, it is possible to directly call a DLL function right from the .NET code, using the correct DLLImport attributes, like in this example&lt;br /&gt;&lt;br /&gt;Talking back is much harder, especially when it can occur any time, i.e. with event firing. I must admit that I have not succeeded in having the fmodce.dll talk back to my .NET CF app. This is a shame because it would allow the application to get event callbacks from that DLL, thus enabling the application to control the stream even more. A number of good coders on FMOD's forum have posted some hints, but none of them helped me out. The only event I was asking for, in this simple app was the "End of track" event. Well, I finally worked around this problem, which you can read later on.&lt;/p&gt;&lt;a href="http://www.codeproject.com/netcf/Simple_MP3_Player_for_PPC/Simple_MP3_Player_for_PPC_demo.zip"&gt;Download project here&lt;br /&gt;&lt;/a&gt;&lt;p style="text-align: left;"&gt;&lt;span id="intelliTXT"&gt;&lt;h2&gt;Compact Framework version&lt;/h2&gt; &lt;p&gt;Some good CodeProject contributors pointed out that my code wasn't working on Compact Framework 2.0. This behavior has nothing to do with FMOD's library, but that is due to a bug in .NET CF 1.0. In my code, I use a condense of what I could find on the net, to get a pointer to the stream&lt;/p&gt;&lt;p&gt;&lt;span id="intelliTXT"&gt;What you need to know is that, in .NET CF 1.0, the function &lt;code&gt;AddrOfPinnedObject&lt;/code&gt; does not return the address of the pinned object, but the address is shifted by 4 bytes, which corresponds to the size of the pointer itself. So to retrieve the correct address, you must point 4 bytes further! Look in the net for the &lt;code&gt;AddrOfPinnedObject&lt;/code&gt; function and you'll get plenty of details. This workaround is not necessary in .NET CF 2.0 because the bug has been fixed in this version, so our bug-fix needs to be conditional. One more thing: the bug fix mentioned above is not a good bug-fix in fact, because although .NET CF 2.0 doesn't have this problem anymore, it might be solved as well in later releases of .NET CF 1.x (as Service Packs). Should this happen, the code above wouldn't work anymore. The only good way then, would be to allocate the needed memory yourself, and create your own pointer to that chunk of memory, as shown &lt;a href="http://msdn.microsoft.com/smartclient/understanding/netcf/FAQ/default.aspx" target="_blank"&gt;here (MSDN site)&lt;/a&gt; (par. 6.14). So the perfect way - free from version check - would be.&lt;/span&gt;&lt;/p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.codeproject.com/netcf/Simple_MP3_Player_for_PPC/Simple_MP3_Player_for_PPC_demo.zip"&gt;&lt;span id="intelliTXT"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt; &lt;a href="http://www.codeproject.com/netcf/Simple_MP3_Player_for_PPC/Simple_MP3_Player_for_PPC_demo.zip"&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5559420436957233395-6429497369049262029?l=gayya2010.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gayya2010.blogspot.com/feeds/6429497369049262029/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5559420436957233395&amp;postID=6429497369049262029' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5559420436957233395/posts/default/6429497369049262029'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5559420436957233395/posts/default/6429497369049262029'/><link rel='alternate' type='text/html' href='http://gayya2010.blogspot.com/2007/11/when-i-was-asked-to-create-audio-guide.html' title='Simple MP3 Player for Pocket PC'/><author><name>Gayan Dasanayake</name><uri>http://www.blogger.com/profile/10444221085033740181</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp0.blogger.com/_twcnBQs83Jc/RyoYPP6o5tI/AAAAAAAAAAw/DaYdDB0aWtI/s72-c/Simple_MP3_Player_for_PPC.png' height='72' width='72'/><thr:total>1</thr:total></entry></feed>
