<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Shared Thoughts</title>
	<atom:link href="http://pcfworks.com/blog/feed/" rel="self" type="application/rss+xml" />
	<link>http://pcfworks.com/blog</link>
	<description>news and views, technical and personal.</description>
	<lastBuildDate>Thu, 26 Jan 2012 12:10:53 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Reverse Engineering a MySQL Database</title>
		<link>http://pcfworks.com/blog/reverse-engineering-a-mysql-database/</link>
		<comments>http://pcfworks.com/blog/reverse-engineering-a-mysql-database/#comments</comments>
		<pubDate>Thu, 26 Jan 2012 12:10:53 +0000</pubDate>
		<dc:creator>Phillip Flores</dc:creator>
				<category><![CDATA[Database]]></category>
		<category><![CDATA[Tips and Tricks]]></category>

		<guid isPermaLink="false">http://pcfworks.com/blog/?p=292</guid>
		<description><![CDATA[<p>The other day a friend of mine asked me to help him in his task of getting a student enrolment register off the ground. The initial idea was to develop it in Microsoft Access and after some discussion it seemed that a web-based application might be the better option.</p> <p>I...]]></description>
			<content:encoded><![CDATA[<p>The other day a friend of mine asked me to help him in his task of getting a student enrolment register off the ground. The initial idea was to develop it in Microsoft Access and after some discussion it seemed that a web-based application might be the better option.</p>
<p>I got hold of the requirements and using pen and paper did a rough draft of the different entities and their relationships. When I was satisfied with what I have designed I then proceeded to design the MySQL tables. I thought that because it will be a web application then the database most likely will be MySQL.</p>
<p>Using the phpMyAdmin I designed the tables as I saw fit. Then it occurred to me that I need to show the database schema to my friend. I can use several programs to create the database schema until it occurred to me that <a title="MySQL Workbench" href="http://www.mysql.com/products/workbench/" target="_blank">MySQL Workbench</a> has such a function.</p>
<p>What does one do? Download and install which I did.</p>
<p>When you first start MySQL Workbench it will show you this:</p>
<p><a href="http://pcfworks.com/blog/wp-content/uploads/2012/01/mysql-wb-main.jpg"><img class="aligncenter size-full wp-image-294" title="MySQL Workbench Main Window" src="http://pcfworks.com/blog/wp-content/uploads/2012/01/mysql-wb-main.jpg" alt="" width="400" height="281" /></a></p>
<p>Click on the option Create <em><strong>Create EER Model From Existing Database</strong></em>. The following window appears:</p>
<p><a href="http://pcfworks.com/blog/wp-content/uploads/2012/01/create-eer-1.jpg"><img class="aligncenter size-full wp-image-298" title="create eer 1" src="http://pcfworks.com/blog/wp-content/uploads/2012/01/create-eer-1.jpg" alt="" width="400" height="300" /></a></p>
<p>Click on the Next button and the next window appears. Make sure that you have checked both Connect to DBMS and Retrieve Schema List from Database options:</p>
<p><a href="http://pcfworks.com/blog/wp-content/uploads/2012/01/create-eer-2.jpg"><img class="aligncenter size-full wp-image-300" title="create eer 2" src="http://pcfworks.com/blog/wp-content/uploads/2012/01/create-eer-2.jpg" alt="" width="400" height="300" /></a></p>
<p>Click on the next button. Another window appears and shows a list of all databases currently available. Select the one that you want to generate the entity relationship diagram for.</p>
<p><a href="http://pcfworks.com/blog/wp-content/uploads/2012/01/create-eer-3.jpg"><img class="aligncenter size-full wp-image-301" title="create eer 3" src="http://pcfworks.com/blog/wp-content/uploads/2012/01/create-eer-3.jpg" alt="" width="400" height="300" /></a></p>
<p>When you click next MySQL Workbench will proceed with retrieving the details of the database.</p>
<p><a href="http://pcfworks.com/blog/wp-content/uploads/2012/01/create-eer-4.jpg"><img class="aligncenter size-full wp-image-304" title="create eer 4" src="http://pcfworks.com/blog/wp-content/uploads/2012/01/create-eer-4.jpg" alt="" width="400" height="300" /></a></p>
<p>Click next. There might be a situation where your database has a lot of tables and you are not interested in reverse engineering all of them. Click on the filter button to select only the tables you want to work on.</p>
<p><a href="http://pcfworks.com/blog/wp-content/uploads/2012/01/create-eer-5.jpg"><img class="aligncenter size-full wp-image-305" title="create eer 5" src="http://pcfworks.com/blog/wp-content/uploads/2012/01/create-eer-5.jpg" alt="" width="400" height="300" /></a></p>
<p><a href="http://pcfworks.com/blog/wp-content/uploads/2012/01/create-eer-6.jpg"><img class="aligncenter size-full wp-image-306" title="create eer 6" src="http://pcfworks.com/blog/wp-content/uploads/2012/01/create-eer-6.jpg" alt="" width="400" height="300" /></a></p>
<p>The entities that you do not want included in the process are moved to the right side (counter intuitive if you&#8217;d ask me) and the ones remaining on the left hand side are processed. Click on the execute button to start the reverse engineering process.</p>
<p><a href="http://pcfworks.com/blog/wp-content/uploads/2012/01/create-eer-7.jpg"><img class="aligncenter size-full wp-image-307" title="create eer 7" src="http://pcfworks.com/blog/wp-content/uploads/2012/01/create-eer-7.jpg" alt="" width="400" height="300" /></a></p>
<p>Click on next and then finish to end.</p>
<p>You then go to the generated EER diagram and establish the different relationship types between the entities you have selected earlier. Here is the final product of my exercise.</p>
<p><a href="http://pcfworks.com/blog/wp-content/uploads/2012/01/create-eer-8.jpg"><img class="aligncenter size-full wp-image-313" title="create eer 8" src="http://pcfworks.com/blog/wp-content/uploads/2012/01/create-eer-8.jpg" alt="" width="400" height="381" /></a></p>
<p>I then exported this diagram to a single page pdf document and sent it to my friend. Now all I have to to is explain the diagram to him. Oh well&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://pcfworks.com/blog/reverse-engineering-a-mysql-database/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Caring About the Customer</title>
		<link>http://pcfworks.com/blog/caring-about-the-customer/</link>
		<comments>http://pcfworks.com/blog/caring-about-the-customer/#comments</comments>
		<pubDate>Sat, 14 Jan 2012 11:57:11 +0000</pubDate>
		<dc:creator>Phillip Flores</dc:creator>
				<category><![CDATA[Clients]]></category>
		<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://pcfworks.com/blog/?p=264</guid>
		<description><![CDATA[<p>Gary Vaynerchuck (@garyvee)  twitted &#8220;Here’s the catch: caring about the customer is a mindset, not a tactic.&#8221; I couldn&#8217;t agree more. There used to be a time when businesses trumpeted that they offered great customer service and they only way people found out about this was to actually experience it themselves....]]></description>
			<content:encoded><![CDATA[<div id="attachment_269" class="wp-caption aligncenter" style="width: 335px"><a href="http://pcfworks.com/blog/wp-content/uploads/2012/01/customer-service.jpg"><img class="size-full wp-image-269" title="Customer Service" src="http://pcfworks.com/blog/wp-content/uploads/2012/01/customer-service.jpg" alt="" width="325" height="326" /></a><p class="wp-caption-text">Photo Credit: pauldunay.com</p></div>
<p>Gary Vaynerchuck (@garyvee)  twitted <em>&#8220;Here’s the catch: caring about the customer is a mindset, not a tactic.&#8221;</em> I couldn&#8217;t agree more. There used to be a time when businesses trumpeted that they offered great customer service and they only way people found out about this was to actually experience it themselves. Nowadays businesses cannot easily claim they offer great customer service because smart phones and internet enabled devices and the pervasive use of social media have made it quite easy to either confirm or refute such claims.</p>
<p>Caring about the customer I think is one of the best way to increase the value of the business and it is also a cost effective means of achieving it. It is an effect or result of living the virtue or good habit of justice which pertains to giving each person what is due to him or her. First and foremost, what is due to any person is that they be treated as a human being / as a person without regard to race, creed, religion, appearance, etc. This means that one cannot be disrespectful to anyone just because he or she belongs to the lower class (from society&#8217;s point of view).</p>
<p>We all have been a customer of a business at one time or another. How was your experience? Was it a non-event? I am sure that you can recall without much effort those businesses that treated you roughly or with less respect that what you would expect and those businesses that made you feel special.</p>
<p>Before a businesses can start caring for its customers it must first care for its employees. I think a company that does not care for its employees will not (probably only with a great deal of effort) take care of its customers. If a company has a culture of treating its employees well the employees themselves will without much effort treat its customers well because it will be part of the company&#8217;s DNA.</p>
<p>In sense the caring of the customer mindset is the result or a result of the mindset that is cultured and fostered within the company. Customers do not require much. All they want is that they be treated well and listened to and their &#8216;pain&#8217; lessened or solved. What are some things that a company can do to foster this caring attitude among its employees? Here are some suggestions:</p>
<ul>
<li><strong>Take care of the little things</strong> e.g. availability of office supplies. I think it is a crime to let your employees buy their own office supplies like pens and pads. This also extends to the amenities.  My favourite is this&#8230;a company that does not keep its office environment clean (including the bathrooms) does not care for its employees.</li>
<li><strong>Concern for your employees&#8217; family</strong>. Any person with family problem(s) hanging over his head will not be able to perform 100%. Little detail of finding out the wedding anniversary of the married members of the company or the birthday of their family members is a good start.</li>
<li><strong>Treat everyone nice</strong>  i.e. do not make anyone the subject of a joke (even if he is the mail room guy).</li>
<li><strong>Be generous in giving out positive comments and encouragement</strong> i.e. everyone wants to be told once in a while that they&#8217;ve done a good job.</li>
<li><strong>Give in.</strong> Sometimes this is the best thing that each one can do especially if it pertains to things that really do not matter.</li>
</ul>
<div>I am sure you can come up with better ones than these but this is the start. Finally, a good thing to do when you get to work is to have a goal of doing something nice for someone before the days ends (it doesn&#8217;t matter who). It is even better if your &#8216;target&#8217; person does not even realise you are doing something nice for him or her.</div>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://pcfworks.com/blog/caring-about-the-customer/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How Much Does a WordPress Website Cost?</title>
		<link>http://pcfworks.com/blog/how-much-does-a-website-cost/</link>
		<comments>http://pcfworks.com/blog/how-much-does-a-website-cost/#comments</comments>
		<pubDate>Thu, 12 Jan 2012 01:22:14 +0000</pubDate>
		<dc:creator>Phillip Flores</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://pcfworks.com/blog/?p=246</guid>
		<description><![CDATA[<p>Photo Credit:</p> <p>I regularly look at a local job listing site for freelancing jobs (software development / web design and development) and have read more often than not like the following lines:</p> <p>&#8220;I need a website site for my business. Please send some samples of your work and a quote&#8230;&#8221;</p>...]]></description>
			<content:encoded><![CDATA[<div class="column  wpb_text_column full-width last"><div class="wpb_wrapper">
<p><a href="http://pcfworks.com/blog/wp-content/uploads/2012/01/wordpress-logo-stacked-rgb.jpg"><img class="size-full wp-image-256" title="Wordpress Logo" src="http://pcfworks.com/blog/wp-content/uploads/2012/01/wordpress-logo-stacked-rgb.jpg" alt="" width="300" height="186" /></a>Photo Credit:</p>
<p>I regularly look at a local job listing site for freelancing jobs (software development / web design and development) and have read more often than not like the following lines:</p>
<p><em>&#8220;I need a website site for my business. Please send some samples of your work and a quote&#8230;&#8221;</em></p>
<p><em>&#8220;I looking for someone to help create me a website. Security installation, alarm, intercom, CCTV. I Just need somone who can create me a website for my security business but i dont really want to pay thousands of dollars.&#8221;</em></p>
<p>It is quite obvious that the people who posted these ads have no idea at all on what is required to get a website up and running and it is not fair to put the blame on them as being cheapskates.</p>
<p>You are doing yourself a disservice if you simply quote an amount that has worked for you in the past e.g. $450.00 for the site without even getting more information of what is required. Oftentimes, your original idea of the cost can change dramatically after speaking with the prospective client about what they want. It is not only the cost the needs consideration but the total amount of time required to finish the task as well. The problem too is that WordPress site are quite easy to setup but what takes most of the time are the little thing needs to give it polish.</p>
<p>Here is a brief list of questions that you may as (it is by no means exhaustive):</p>
<ul>
<li>Are you going to provide the content in a format suitable for the web or would you need help in copywriting?</li>
<li>Do you have a domain name for this website? If not, do you want us/me to register it for you?</li>
<li>Do you have a hosting provider for this website?</li>
<li>When do you need this website by? Are your working on a rush schedule that may require additional resources?</li>
<li>Do you have suitable images available or do you need me/us to source the images or provide photography for you?</li>
<li>Do you need to collect information from your site&#8217;s visitors?</li>
<li>Do you need any e-commerce functionality such as carts, customer accounts, payment processing, integration with PayPal etc.?</li>
<li>Do you need to integrate video and if so, does that video need to be encoded for multiple devices?</li>
<li>Do you want the website to be mobile enabled?</li>
</ul>
<div>
<p>As you can see there are a lot of questions that you can ask before you can estimate the cost of setting up the site.</p>
<p>So next time when you see an advertisement from someone requesting a website or from a referral please make a list of questions and ask them. Only after analysing the responses to your questions you can start thinking of how much to charge. Do not deceive yourself by thinking that the job is simple and can be done very easily and quickly because experience shows that normally this is not the case.</p>
</div>
<p>&nbsp;</p>
</div></div> <div class="vc_clear"></div>
]]></content:encoded>
			<wfw:commentRss>http://pcfworks.com/blog/how-much-does-a-website-cost/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>A Tofu Incident</title>
		<link>http://pcfworks.com/blog/a-tofu-incident/</link>
		<comments>http://pcfworks.com/blog/a-tofu-incident/#comments</comments>
		<pubDate>Tue, 10 Jan 2012 09:21:43 +0000</pubDate>
		<dc:creator>Phillip Flores</dc:creator>
				<category><![CDATA[Clients]]></category>
		<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://pcfworks.com/blog/?p=206</guid>
		<description><![CDATA[<p>&#160;</p> <p>Today, I had lunch at a Thai restaurant. Why I am writing to you about this? Well, because an incident happened in the restaurant that illustrates how not to handle a customer complaint.</p> <p>To continue, I was quietly eating my lunch, reading tweets I received when I heard someone...]]></description>
			<content:encoded><![CDATA[<p>&nbsp;</p>
<div id="attachment_209" class="wp-caption alignright" style="width: 310px"><a href="http://pcfworks.com/blog/wp-content/uploads/2012/01/tofu-basil.jpg"><img class="size-medium wp-image-209  " style="border-image: initial; border-width: 2px; border-color: black; border-style: solid;" title="Tofu and Basil Dish" src="http://pcfworks.com/blog/wp-content/uploads/2012/01/tofu-basil-300x280.jpg" alt="" width="300" height="280" /></a><p class="wp-caption-text">Photo Credit: shiokfood.com</p></div>
<p>Today, I had lunch at a Thai restaurant. Why I am writing to you about this? Well, because an incident happened in the restaurant that illustrates how not to handle a customer complaint.</p>
<p>To continue, I was quietly eating my lunch, reading tweets I received when I heard someone calling for the waiteress.</p>
<p>&#8220;Excuse me.&#8221;</p>
<p>The waitress approached the customer and she began to complain that there were only three pieces of tofu in the lunch she ordered. I couldn&#8217;t believe what I was hearing. Are there really people out there that count how many pieces of tofu they get with their meal? Seriously. (I suppose if you love tofu you would.)</p>
<p>The startled waitress tried to explain why she only got three pieces. At this point I was trying hard not to listen to the conversation (she was seated at a table not very far from where I was) but to no avail as her voice was quite loud. The menu was presented to her showing that if she did choose the other dish she would have had more tofu. She ended by asking if customers only got three pieces of tofu.</p>
<p>A few more words from the customer and the waitress offered to replace her lunch with a new one in order to placate her but she mentioned she did not want a replacement, all she wanted was more tofu.</p>
<p>At this point I finished my lunch, stood up, paid, and left. I assumed that she did get her tofu.</p>
<p>As I was walking back to the office I thought about this incident and the restaurant could have handled the situation much better by giving in to her request rather than explaining to her why she only had three pieces of tofu. If she got the additional tofu immediately she would have had a bad experience turned good and would have a pleasant memory of the incident.</p>
<p>The lesson from this incident is that it is always better to make a client feel special; that they end up feeling or thinking that you gave a bit more that what was really necessary. Doing this makes it easier for you to ask for a referral if you so wish because they will feel obliged to return the favour which is really what you want if you want to grow your business.</p>
]]></content:encoded>
			<wfw:commentRss>http://pcfworks.com/blog/a-tofu-incident/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Welcome 2012</title>
		<link>http://pcfworks.com/blog/welcome-2012/</link>
		<comments>http://pcfworks.com/blog/welcome-2012/#comments</comments>
		<pubDate>Sun, 01 Jan 2012 06:55:17 +0000</pubDate>
		<dc:creator>Phillip Flores</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://pcfworks.com/blog/?p=194</guid>
		<description><![CDATA[<p>One of the first question asked at the beginning of the year is &#8220;What is your New Year&#8217;s resolution?&#8221;. It is a good question to be asked at this moment because the beginning of the year is a major milestone. New challenges and opportunities will be coming and there will...]]></description>
			<content:encoded><![CDATA[<div id="attachment_222" class="wp-caption aligncenter" style="width: 540px"><a href="http://pcfworks.com/blog/wp-content/uploads/2012/01/new-year-2012.jpg"><img class="size-full wp-image-222" title="New Year Fireworks" src="http://pcfworks.com/blog/wp-content/uploads/2012/01/new-year-2012.jpg" alt="" width="530" height="359" /></a><p class="wp-caption-text">Photo Credit: whatsupjozi.com</p></div>
<p>One of the first question asked at the beginning of the year is &#8220;What is your New Year&#8217;s resolution?&#8221;. It is a good question to be asked at this moment because the beginning of the year is a major milestone. New challenges and opportunities will be coming and there will be successes and failures as well as joys and sorrows. But, going back to the question, what will be your resolution for this 2012?</p>
<p>Formulating resolutions are good. The problem is that they are either:</p>
<ul>
<li>too generic e.g. I will lose weight.</li>
<li>too difficult (in theory it looks easy but in practice it is not) e.g. I will lose more weight.</li>
<li>too easy (practically there is no challenge in achieving the result) e.g. I will eat one ice cream cone instead of two.</li>
<li>too many resolutions all at once</li>
</ul>
<p>It is also worth noting that it is always easy to start but difficult to finish or even to travel through the journey of making the resolution a reality. When this happens the resolution is discontinued and one goes his or her merry way.</p>
<p>Here are some suggestions that you may consider in formulating your yearly resolution:</p>
<ul>
<li>make them achievable i.e. reduce the resolution into manageable chunks e.g. I will lose weight this year can be reformulated as I will have less fizzy drinks or less ice cream or cake or I will use the car less and walk more.</li>
<li>check them regularly i.e. what happens at times is that the resolution is formulated and then left in the desk drawer. If you constantly remind yourself of what needs to be done you are more likely to stay on course.</li>
<li>do not hesitate to alter or adjust the resolution. Sometimes what you formulate at the beginning of the year is not exactly what you want to achieve, go ahead and change it.</li>
<li>the most important of all is to put the effort to achieve it because along the way and to be open to setbacks. As long as there is constant effort and determination you will be successful.</li>
<li>try to have one or two resolutions you are trying to fulfil at any given time.</li>
</ul>
<p>One area that is always ripe for having resolutions is the acquisition of a virtue (a good habit) or the elimination of a vice (a good habit). I&#8217;ve always found it better to focus on the positive rather than on the negative. Fortunately, when you try to acquire a specific virtue you implicitly acquire or improve on the associated virtues; this also occurs in the elimination of a vice. For example, if you want to grow in the virtue of punctuality i.e. being on time for meetings, appointments, dinner at home, etc. You need to put in place things that will help you to be punctual e.g. having a clock or reminder that is visible and audible (if need be), to have a list of things to do because otherwise procrastination appears in the picture, and other related strategies. These related activities also help you develop other virtues. It&#8217;s a win-win situation.</p>
<p>Here are some suggestions that you may consider:</p>
<ul>
<li>to have dinner with the family more often</li>
<li>to go out of my way to help someone at least once a month</li>
<li>to sleep on time</li>
<li>to wake up on time</li>
<li>not to sleep in during weekends</li>
<li>to be more cheerful and less grumpy (especially at home)</li>
</ul>
<p>and I am sure you can think of better ones than these.</p>
<p>Here&#8217;s wishing you a Happy New Year and may you be able to fulfil your resolution or resolutions.</p>
]]></content:encoded>
			<wfw:commentRss>http://pcfworks.com/blog/welcome-2012/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Delphi Tip &#8211; Parsing a Delimited String</title>
		<link>http://pcfworks.com/blog/delphi-tip-parsing-a-delimited-string/</link>
		<comments>http://pcfworks.com/blog/delphi-tip-parsing-a-delimited-string/#comments</comments>
		<pubDate>Tue, 04 Oct 2011 10:27:56 +0000</pubDate>
		<dc:creator>Phillip Flores</dc:creator>
				<category><![CDATA[Delphi]]></category>
		<category><![CDATA[Tips and Tricks]]></category>

		<guid isPermaLink="false">http://pcfworks.com/blog/?p=173</guid>
		<description><![CDATA[<p>It is amazing that after so many years of using Delphi I still discover new things that amaze me and one of them is a feature of the TStringList component.</p> <p>I usually used this component to either separate or generate a comma delimited string (depending on what I need at...]]></description>
			<content:encoded><![CDATA[<p>It is amazing that after so many years of using Delphi I still discover new things that amaze me and one of them is a feature of the TStringList component.</p>
<p>I usually used this component to either separate or generate a comma delimited string (depending on what I need at the current moment).</p>
<p>The other day I was looking at a program that had a method that parsed the output of a credit card reader. The developer of the program decided to use a combination of the <em>Pos</em> and <em>Copy</em> functions whereby he was scanning for the position of a specific delimiter (in this case it was the &#8216;~&#8217; character) and then using this value copy the appropriate substring. There is nothing wrong with this process. It then occurred to me that maybe I can use the TStringList component.</p>
<p>The question I had was can I specify a different delimiter (the default delimiter is the space or comma). Looking through the properties of the component I came across the &#8216;Delimiter&#8217; property. This meant that I can specify a different delimiter.</p>
<p>I wrote a little program that accepted a string with several delimiter characters (in this case I used the &#8216;~&#8217;) and then then displayed the output when the user clicks on a button e.g.</p>
<p>Here is the first try:</p>
<p><a href="http://pcfworks.com/blog/wp-content/uploads/2011/10/Delimiter-Test_2011-10-04_20-53-26.jpg"><img class="aligncenter size-full wp-image-175" title="Delimiter Test 1" src="http://pcfworks.com/blog/wp-content/uploads/2011/10/Delimiter-Test_2011-10-04_20-53-26.jpg" alt="" width="448" height="259" /></a>Here is the code:</p>
<pre>procedure TForm1.Button1Click(Sender: TObject);
var
  InputLine : TStringList;
begin
  InputLine := TStringList.Create;

  InputLine.Delimiter := '~';
  InputLine.Text := Edit1.Text;

  Memo1.Lines.AddStrings(InputLine);

  FreeAndNil(InputLine);

end;</pre>
<p>It seemed that the parsing did not work and it is because of the Text property being used. Changing the line:</p>
<pre>InputLine.Text := Edit1.Text;</pre>
<p>to</p>
<pre>InputLine.DelimitedText := Edit1.Text;</pre>
<p>did the trick. Here is how it looks now:</p>
<p><a href="http://pcfworks.com/blog/wp-content/uploads/2011/10/Delimiter-Test_2011-10-04_21-13-32.jpg"><img class="aligncenter size-full wp-image-177" title="Delimiter Test 2" src="http://pcfworks.com/blog/wp-content/uploads/2011/10/Delimiter-Test_2011-10-04_21-13-32.jpg" alt="" width="448" height="259" /></a></p>
<p>Knowing how to parse a string with a different delimiter from a comma or space makes it much easier to handle input from different types of input devices.</p>
<p>The other interesting thing is that it can also handle the reverse process i.e. having separate words or text being combined into a single string with a specified delimiter character. Like so:</p>
<p><a href="http://pcfworks.com/blog/wp-content/uploads/2011/10/Delimiter-Test_2011-10-04_21-21-19.jpg"><img class="aligncenter size-full wp-image-178" title="Delimiter Test 3" src="http://pcfworks.com/blog/wp-content/uploads/2011/10/Delimiter-Test_2011-10-04_21-21-19.jpg" alt="" width="448" height="257" /></a>Clicking on button 2 results in the following:</p>
<p><a href="http://pcfworks.com/blog/wp-content/uploads/2011/10/Delimiter-Test_2011-10-04_21-25-08.jpg"><img class="aligncenter size-full wp-image-179" title="Delimiter Test 4" src="http://pcfworks.com/blog/wp-content/uploads/2011/10/Delimiter-Test_2011-10-04_21-25-08.jpg" alt="" width="448" height="257" /></a>The code for this is:</p>
<pre>procedure TForm1.Button2Click(Sender: TObject);
var
  InputLine : TStringList;
begin
  InputLine := TStringList.Create;

  InputLine.Delimiter := '~';
  InputLine.AddStrings(Memo1.lines);

  Edit1.Text := InputLine.DelimitedText;
  FreeAndNil(InputLine);
end;</pre>
]]></content:encoded>
			<wfw:commentRss>http://pcfworks.com/blog/delphi-tip-parsing-a-delimited-string/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Another Way of Checking for Changes in UI in Delphi</title>
		<link>http://pcfworks.com/blog/another-way-of-checking-for-changes-in-ui-in-delphi/</link>
		<comments>http://pcfworks.com/blog/another-way-of-checking-for-changes-in-ui-in-delphi/#comments</comments>
		<pubDate>Wed, 28 Sep 2011 11:46:53 +0000</pubDate>
		<dc:creator>Phillip Flores</dc:creator>
				<category><![CDATA[Delphi]]></category>
		<category><![CDATA[Tips and Tricks]]></category>

		<guid isPermaLink="false">http://pcfworks.com/blog/?p=156</guid>
		<description><![CDATA[<p>I use Delphi to develop software. My work title is Senior Software Engineer (aka Programmer with a lot of years of experience writing code). Recently I have been working on an Options module for a desktop application, you know the part of the application that enables the user customise the...]]></description>
			<content:encoded><![CDATA[<p>I use Delphi to develop software. My work title is Senior Software Engineer (aka Programmer with a lot of years of experience writing code). Recently I have been working on an Options module for a desktop application, you know the part of the application that enables the user customise the application to their heart&#8217;s content (not really but it seems to give that impression). I use an XML file to store these values in (if you want to know I am using <a title="OmniXML for Delphi" href="http://www.omnixml.com/" target="_blank">OmniXML</a> for it).</p>
<p><a href="http://pcfworks.com/blog/wp-content/uploads/2011/09/Application-Options_2011-09-28_21-33-56.jpg"><img class="aligncenter size-full wp-image-167" title="Application Options_2011-09-28_21-33-56" src="http://pcfworks.com/blog/wp-content/uploads/2011/09/Application-Options_2011-09-28_21-33-56.jpg" alt="" width="530" height="470" /></a></p>
<p>I recently came across a simpler way of checking if any of options changed values. I check the changes so I can enable the <em>Save</em> button or display a message to the user if he tries to close the window without saving the changes.</p>
<p>I used to check for the change when the user moves from one option to the other. This is not an issue if there are a few options but it gets a bit hairy when there are a lot. The new solution makes use of a TTimer component. I set the time interval to something short e.g. 500 msecs. This means that when the elapsed time reaches 500 msecs the TTimer&#8217;s Timer event fires. It is within this event that I call the <em>CheckForUpdates</em> method. Here is the code:</p>
<p><a href="http://pcfworks.com/blog/wp-content/uploads/2011/09/2011-09-28_213810.jpg"><img class="aligncenter size-full wp-image-169" title="2011-09-28_213810" src="http://pcfworks.com/blog/wp-content/uploads/2011/09/2011-09-28_213810.jpg" alt="" width="480" height="426" /></a></p>
<pre>//------------------------------------------------------------------------------
procedure TOptionsForm.JvTimer1Timer(Sender: TObject);
//------------------------------------------------------------------------------
begin
  if fChanged = False then
    CheckForChanges
  else
    JvTimer1.Enabled := False;
end;</pre>
<p>The <em>CheckForChanges</em> method contains the code that compares the current values of the options to the ones in the Options form e.g.</p>
<pre>//------------------------------------------------------------------------------
procedure TOptionsForm.CheckForChanges;
//------------------------------------------------------------------------------
begin
  if fChanged = True then
    Exit;

  if cbConfirmExit.Checked &lt;&gt; fProgramOptions.ConfirmExit then
    fChanged := True;

  if rgTabPosition.ItemIndex &lt;&gt; fProgramOptions.TabPosition then
    fChanged := True;

  SetButtons(fChanged);
end;</pre>
<p>Note that the checking for the changes does not happen when at least one option gets changed. With this technique the process of checking for the changes to the different options has become easier.</p>
]]></content:encoded>
			<wfw:commentRss>http://pcfworks.com/blog/another-way-of-checking-for-changes-in-ui-in-delphi/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How Much Do You Charge?</title>
		<link>http://pcfworks.com/blog/how-much-do-you-charge/</link>
		<comments>http://pcfworks.com/blog/how-much-do-you-charge/#comments</comments>
		<pubDate>Tue, 27 Sep 2011 12:48:43 +0000</pubDate>
		<dc:creator>Phillip Flores</dc:creator>
				<category><![CDATA[Clients]]></category>

		<guid isPermaLink="false">http://pcfworks.com/blog/?p=153</guid>
		<description><![CDATA[<p></p> <p>A few days ago I responded to a &#8220;WordPress Developer Wanted&#8221; advertisement that appeared in a local freelancing website. The advertisement contained the following: &#8220;I am looking for a developer with wordpress knowledge.&#8221;. I sent an email indicating that I did have the skill and knowledge he/she was looking...]]></description>
			<content:encoded><![CDATA[<p><a href="http://pcfworks.com/blog/wp-content/uploads/2011/09/us-dollars.jpg"><img class="aligncenter size-full wp-image-161" title="$100.00 Bills" src="http://pcfworks.com/blog/wp-content/uploads/2011/09/us-dollars.jpg" alt="" width="410" height="310" /></a></p>
<p>A few days ago I responded to a &#8220;WordPress Developer Wanted&#8221; advertisement that appeared in a local freelancing website. The advertisement contained the following: <em>&#8220;I am looking for a developer with wordpress knowledge.&#8221;</em>. I sent an email indicating that I did have the skill and knowledge he/she was looking for. Within five (5) minutes I received a reply which contained six words:</p>
<p><em>Hi what is your hourly rate?</em></p>
<p>Whoa! What immediately came to my mind was that she (I did find out in the reply) was shopping around for the most affordable rate (cheapest?). For a brief moment I was tempted to quote a really ridiculous rate but in the end I sent my reply quoting her hourly rate.</p>
<p>Silence.</p>
<p>I have not heard from her since and I am assuming that she found somebody that had a rate that fit her budget. Enough said.</p>
]]></content:encoded>
			<wfw:commentRss>http://pcfworks.com/blog/how-much-do-you-charge/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Desktop Apps Are Dead! Long Live the Desktop App</title>
		<link>http://pcfworks.com/blog/desktop-apps-are-dead-long-live-the-desktop-app/</link>
		<comments>http://pcfworks.com/blog/desktop-apps-are-dead-long-live-the-desktop-app/#comments</comments>
		<pubDate>Tue, 06 Sep 2011 14:07:05 +0000</pubDate>
		<dc:creator>Phillip Flores</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[VeriTime Info]]></category>

		<guid isPermaLink="false">http://pcfworks.com/blog/?p=126</guid>
		<description><![CDATA[<p>Use Google to search for the phrase &#8216;are desktop apps dead&#8217; you will have about over 146,000,000 results.  Pretty impressive. What does this mean? It means that every man and his dog has an opinion on the matter and that includes me. I am writing this post entry because I...]]></description>
			<content:encoded><![CDATA[<p>Use Google to search for the phrase <em>&#8216;are desktop apps dead&#8217;</em> you will have about over 146,000,000 results.  Pretty impressive. What does this mean? It means that every man and his dog has an opinion on the matter and that includes me. I am writing this post entry because I received an email from a user of my time tracking application, <a title="PCFWorks" href="http://www.pcfworks.com" target="_blank">VeriTime</a> asking if VeriTime caters for more than one user i.e. one or more users saving their timesheet data to the same shared database. Unfortunately, at this point in time VeriTime is still only available in single user mode.</p>
<p>I nearly suggested that there are quite a number of web-based time tracking applications that even allow you to have a version for your smartphone but I didn&#8217;t. This got me thinking that there are still people out there who would rather have their data in their own computers rather than in some hard disk somewhere in the world (of which they have no direct control or information if someone is looking their data). Is this a good thing? Maybe, I do not really know.</p>
<p>Where am I going with this? Well, this little email exchange got me thinking whether or not I should resurrect the idea of developing a network version (i.e. multi user) of VeriTime. It may seem a waste of time because of the large number of web-based time tracking applications out there with features that try to cover almost all of the things that a user may want or wish for. Heck, even I have started looking at these web-based apps.</p>
<p>At its current state it will not take a lot of work to enable VeriTime to be multi user, I can simply change the way VeriTime accesses the database (from local access to network access) but doing it this way will lack features that users expect from a multi user / networked software. I need to add the following features:</p>
<ul>
<li>user management &#8211; the ability to add and remove users (maybe not that critical for a small company)</li>
<li>list time entries according to the user</li>
<li>additional instructions on how to install the database server (Firebird)</li>
<li>time sheet reports per user and also for the entire organisation</li>
</ul>
<p>The question that I need to answer is this exercise going to increase my VeriTime registration rate or not? Should I just do it for the challenge/love of coding or for money? If you were in my shoes what would you do?</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://pcfworks.com/blog/desktop-apps-are-dead-long-live-the-desktop-app/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Quality in Work</title>
		<link>http://pcfworks.com/blog/quality-in-work/</link>
		<comments>http://pcfworks.com/blog/quality-in-work/#comments</comments>
		<pubDate>Sun, 28 Aug 2011 11:17:07 +0000</pubDate>
		<dc:creator>Phillip Flores</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://pcfworks.com/blog/?p=101</guid>
		<description><![CDATA[<p>I came across this statement that is attributed to Steve Jobs (he does not need any introduction, I think even aliens in other planets would know who he is):</p> <p>“When you’re a carpenter making a beautiful chest of drawers, you’re not going to use a piece of plywood on the...]]></description>
			<content:encoded><![CDATA[<p><a href="http://pcfworks.com/blog/wp-content/uploads/2011/08/macbook-air_2.jpg"><img class="aligncenter size-full wp-image-105" title="MacBook Air" src="http://pcfworks.com/blog/wp-content/uploads/2011/08/macbook-air_2.jpg" alt="" width="440" height="330" /></a>I came across this statement that is attributed to Steve Jobs (he does not need any introduction, I think even aliens in other planets would know who he is):</p>
<p><em>“When you’re a carpenter making a beautiful chest of drawers, you’re not going to use a piece of plywood on the back, even though it faces the wall and nobody will ever see it. You’ll know it’s there, so you’re going to use a beautiful piece of wood on the back. For you to sleep well at night, the aesthetic, the quality, has to be carried all the way through.” – Steve Jobs</em></p>
<p>This mindset of his can bee seen in the quality of the products that Apple has produced. Not only in their products but even in the way they present the Apple stores; the packaging of the different product items; even the bag they use to put the things people bought. And because of this, people do not mind paying premium price for their stuff. I suppose people can sniff and notice quality if they see one and the tricky part is the challenge of maintaining this high level of quality day in day out or in today&#8217;s corporate speak 24 x 7 x 365.</p>
<p>As I commented in the blog post where I found this attributed statement, the builders of the great basilicas during the Renaissance period were not the cutting-corners kind of workers. One can see that they took great care in doing their work well even though whatever they were building / making will be placed in a part of the edifice that no one will ever notice or even see e.g. at the top of the cupola of the basilica.</p>
<p>It is quite sad to see nowadays that in the rush to be on the market first or to make a quick profit products of inferior quality are constantly being produced. I am not saying that everyone is guilty of this but rather the virtue of trying to done one&#8217;s work well, whatever that may be, is become rarer and rarer.</p>
<p>What are some strategies that one can employ to be able to do their work really well i.e. with outstanding quality?</p>
<p><strong>Knowledge</strong></p>
<p>One has to have a good grasp of the subject matter he or she is working on. Take the example of a husband who is not a plumber but tries to fix a leaking faucet illustrates this point. It may take him half a day to do the job while a competent plumber will do it in an hour or less.</p>
<p>In some cases one is presented with a task that is slightly foreign and the proper attitude would be to find out more about the task as well as consulting those people who have work on similar tasks in the past. To pretend that one has the knowledge but clearly has not is doing himself a great disservice and his client or employer as well.</p>
<p><strong>Focus</strong></p>
<p>You cannot do a job really well if you do not put all your attention to it. Some may argue that nowadays multitasking is the thing but here is the challenge: I think that the work will be done better if full attention is given to it. Of course, appropriate breaks in between the task are also necessary but only long enough to be able to continue till the end.</p>
<p>Prior to starting remove any form of distraction that you think may be in your way e.g. if really necessary turn off the mobile phone or only take phone calls or really urgent nature; do not work on your emails during this time, again only very important emails should catch your attention.</p>
<p><strong>Perseverance</strong></p>
<p>I also term this as lasting the distance. It is a very human to have the energy and vitality present when starting a task or project or endeavour. As time goes on the energy, enthusiasm, and desire start waning and then the initially exciting task becomes like a ball-and-chain that one has to drag along the road. There will be crests and troughs in your work and you just have to ride them. Well-timed breaks can help one persevere throug a task. If you are that kind of person then by all means have your breaks but just make sure that they do not become distractions (see focus above).</p>
<p>I am sure there are other habits that will come into play when trying to produce work of appreciable quality but start concentrating on these three (3) things and if you keep at it your work will improve in quality.</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://pcfworks.com/blog/quality-in-work/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

