<?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'><id>tag:blogger.com,1999:blog-10113675</id><updated>2009-10-05T03:29:05.842-07:00</updated><title type='text'>Esteban's Blog (A Software Developer Management process blog)</title><subtitle type='html'>A blog dedicated to Software Development, specially on CodeGear Delphi, Microsoft C# and Sun's Java.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://blogs.epachsoft.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10113675/posts/default'/><link rel='alternate' type='text/html' href='http://blogs.epachsoft.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/10113675/posts/default?start-index=26&amp;max-results=25'/><author><name>Esteban Pacheco</name><uri>http://www.blogger.com/profile/13637053045278905458</uri><email>noreply@blogger.com</email></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>120</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-10113675.post-3446514068120624639</id><published>2009-10-03T17:27:00.000-07:00</published><updated>2009-10-03T17:47:05.359-07:00</updated><title type='text'>Lost your ethernet cards on your VM?</title><content type='html'>This tip may help you.&lt;br /&gt;&lt;br /&gt;We use virtualization A LOT on our environments, as a symbol of trust to this concept we only have half of our web production servers as real machines, the other half is virtualized.&lt;br /&gt;&lt;br /&gt;A common issue we found is that after installing SP2 on a Windows 2003 Ent/Standard installation or simply after installing certain security updates on Windows 2003 Ent/Standard R2 installations we lost sometimes the ethernet cards of the Virtual Machines (VM).&lt;br /&gt;&lt;br /&gt;Well, the solution is quite simple, this problem usually only happens when you have not installed the client VMware tools, after installing them and restarting the Virtual machine you will be back in business.&lt;br /&gt;&lt;br /&gt;Strange? yup.  Drove me nuts a couple of times.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10113675-3446514068120624639?l=blogs.epachsoft.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blogs.epachsoft.com/feeds/3446514068120624639/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=10113675&amp;postID=3446514068120624639' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10113675/posts/default/3446514068120624639'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10113675/posts/default/3446514068120624639'/><link rel='alternate' type='text/html' href='http://blogs.epachsoft.com/2009/10/lost-your-ethernet-cards-on-your-vm.html' title='Lost your ethernet cards on your VM?'/><author><name>Esteban Pacheco</name><uri>http://www.blogger.com/profile/13637053045278905458</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='06273409846319894677'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10113675.post-6173467568075837246</id><published>2009-09-29T00:01:00.000-07:00</published><updated>2009-09-30T10:41:19.788-07:00</updated><title type='text'>Squeezing a Cabinet file.</title><content type='html'>As part of our applications automatic update process we transfer a CAB file to the client side that contains the required updates. &lt;br /&gt;&lt;br /&gt;Lately we've being using certain components that are increasing the "weight" of our applications to the point that it is becoming a bit slow to transfer these cab files.   The immediate solution to this situation was to review the compression rate of the CAB files to compensate for the additional weight of the applications.  &lt;br /&gt;&lt;br /&gt;The interesting part of this "simple" procedure was to look at the command line help of the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;makecab&lt;/span&gt;.&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;exe&lt;/span&gt;, around four lines and none of them telling us what we could do to help us on this topic.  Nothing that some searching and reading can not fix, so if anyone ever has the need of adjusting its CAB compression ratio here it is the solution:&lt;br /&gt;&lt;br /&gt;The CAB format allows you to use three compression methods: Deflate, Quantum and &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;LZX&lt;/span&gt;.  Obviously we pick the always effective &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;LZX&lt;/span&gt; algorithm, which you can enable by using this command:&lt;br /&gt;&lt;br /&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;MAKECAB&lt;/span&gt;.&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_5"&gt;exe&lt;/span&gt; /D &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_6"&gt;CompressionType&lt;/span&gt;=&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_7"&gt;LZX&lt;/span&gt; /D &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_8"&gt;CompressionMemory&lt;/span&gt;=21 /L ..\Output File1 File2.CAB&lt;br /&gt;&lt;br /&gt;Where File1 is the file you want to compress and File2.cab is the resulting file.  "/L" indicates an output directory.  &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_9"&gt;CompressionMemory&lt;/span&gt; is the level of compression under the algorithm in question, 21 seems to be the highest.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10113675-6173467568075837246?l=blogs.epachsoft.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blogs.epachsoft.com/feeds/6173467568075837246/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=10113675&amp;postID=6173467568075837246' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10113675/posts/default/6173467568075837246'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10113675/posts/default/6173467568075837246'/><link rel='alternate' type='text/html' href='http://blogs.epachsoft.com/2009/09/squeezing-cabinet-file.html' title='Squeezing a Cabinet file.'/><author><name>Esteban Pacheco</name><uri>http://www.blogger.com/profile/13637053045278905458</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='06273409846319894677'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10113675.post-2488421750051662751</id><published>2009-09-27T21:55:00.001-07:00</published><updated>2009-09-27T22:04:30.729-07:00</updated><title type='text'>There is a business opportunity EVERYWHERE.</title><content type='html'>It is a matter of "simply" finding them. &lt;br /&gt;&lt;br /&gt;If there is a need, there is an opportunity.  Native cross platform? for me opportunity! 64 bits? semi-opportunity, for some it is very needed, for some others is just a way of showing management that our cool language and IDE supports the latest trends and we are as "fast" as any managed 64 bits and actually "faster" because we are native. (You must understand that's for management, so, save all the technical no no argument, that is why is on quotations.)&lt;br /&gt;&lt;br /&gt;The latest example of a good opportunity, and someone going after it is &lt;a href="http://www.captcha-bypass.com"&gt;this&lt;/a&gt; website that &lt;span class=""&gt;&lt;/span&gt;&lt;a href="https://forums.embarcadero.com/profile.jspa?userID=3480"&gt;Eko Indriyawan&lt;/a&gt; one of our community members post on the Delphi forums.&lt;br /&gt;&lt;br /&gt;It looks legit and actually from a technical point of view gets me thinking on the implementation they used to build it.  I'm pretty sure tons of spamming companies will give it a try.  It will mean a quick cash flow for the creators which probably will die soon after, but will get someone making good money for a bit.&lt;br /&gt;&lt;br /&gt;ahh so nice, the beautiful process of finding opportunities keeps going...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10113675-2488421750051662751?l=blogs.epachsoft.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blogs.epachsoft.com/feeds/2488421750051662751/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=10113675&amp;postID=2488421750051662751' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10113675/posts/default/2488421750051662751'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10113675/posts/default/2488421750051662751'/><link rel='alternate' type='text/html' href='http://blogs.epachsoft.com/2009/09/there-is-business-opportunity.html' title='There is a business opportunity EVERYWHERE.'/><author><name>Esteban Pacheco</name><uri>http://www.blogger.com/profile/13637053045278905458</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='06273409846319894677'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10113675.post-2929251943696662795</id><published>2009-08-31T12:46:00.001-07:00</published><updated>2009-08-31T12:48:39.059-07:00</updated><title type='text'>DevExpress now officially supporting Delphi 2010.</title><content type='html'>Well, they were quick to deliver and now it is official.  DevExpress is supporting Delphi 2010 and it is available for download to all their license holders.&lt;br /&gt;&lt;br /&gt;The new Express Install, v1.46 includes full support for Delphi 2010 and C++ Builder 2010 to the following VCL components:&lt;br /&gt;&lt;br /&gt;ExpressQuantumGrid v6&lt;br /&gt;ExpressQuantumTreeList v5&lt;br /&gt;ExpressVerticalGrid&lt;br /&gt;ExpressPivotGrid v2&lt;br /&gt;ExpressScheduler v3&lt;br /&gt;ExpressBars v6 and Docking Library&lt;br /&gt;ExpressNavBar v2&lt;br /&gt;ExpressEditors Library&lt;br /&gt;ExpressSkins Library&lt;br /&gt;ExpressSpreadSheet&lt;br /&gt;ExpressLayout Control&lt;br /&gt;ExpressPageControl&lt;br /&gt;ExpressDBTree&lt;br /&gt;ExpressFlowChart&lt;br /&gt;ExpressOrgChart&lt;br /&gt;ExpressSpellChecker&lt;br /&gt;ExpressPrinting System v3&lt;br /&gt;&lt;br /&gt;Very good news indeed, Enjoy!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10113675-2929251943696662795?l=blogs.epachsoft.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blogs.epachsoft.com/feeds/2929251943696662795/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=10113675&amp;postID=2929251943696662795' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10113675/posts/default/2929251943696662795'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10113675/posts/default/2929251943696662795'/><link rel='alternate' type='text/html' href='http://blogs.epachsoft.com/2009/08/devexpress-now-officially-supporting.html' title='DevExpress now officially supporting Delphi 2010.'/><author><name>Esteban Pacheco</name><uri>http://www.blogger.com/profile/13637053045278905458</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='06273409846319894677'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10113675.post-8145951680580062011</id><published>2009-05-14T10:04:00.000-07:00</published><updated>2009-05-14T10:08:07.552-07:00</updated><title type='text'>Follow Delphi Live!</title><content type='html'>If you were one of the unlucky (like me) that could not assist to Delphi Live, follow the instant updates from lots of Delphi developers that are having a great time at it, this is the link at &lt;a href="http://search.twitter.com/search?q=delphilive"&gt;Twitter&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Nick Hodges is coming up next with an update on the Delphi Roadmap, so, what can be more exciting than that!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;GOGO Delphi!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10113675-8145951680580062011?l=blogs.epachsoft.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blogs.epachsoft.com/feeds/8145951680580062011/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=10113675&amp;postID=8145951680580062011' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10113675/posts/default/8145951680580062011'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10113675/posts/default/8145951680580062011'/><link rel='alternate' type='text/html' href='http://blogs.epachsoft.com/2009/05/follow-delphi-live.html' title='Follow Delphi Live!'/><author><name>Esteban Pacheco</name><uri>http://www.blogger.com/profile/13637053045278905458</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='06273409846319894677'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10113675.post-1222203704381535004</id><published>2009-04-06T17:50:00.000-07:00</published><updated>2009-04-06T17:56:12.041-07:00</updated><title type='text'>Time for new looks...</title><content type='html'>Well,&lt;br /&gt;&lt;br /&gt;Lately we've seen a lot of websites changing their look to get into the web 2.0 fashion, and my favorite resource center for all Delphi related data is no exception.  The ultra fast and cool, Delphi made FullTextSearch.com (Tamarack) has a new address and look in &lt;a href="http://www.codenewsfast.com/"&gt;http://www.codenewsfast.com/&lt;/a&gt; under the umbrella of HREF Tools.&lt;br /&gt;&lt;br /&gt;Congratulations, can't wait to see the benefits of migrating to Delphi 2009 in the months to come!.&lt;br /&gt;&lt;br /&gt;If you were not using this full text search engine for the Delphi and C++ Builder community and third party newsgroups, it is time you do it.  Go and check it out!.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10113675-1222203704381535004?l=blogs.epachsoft.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blogs.epachsoft.com/feeds/1222203704381535004/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=10113675&amp;postID=1222203704381535004' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10113675/posts/default/1222203704381535004'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10113675/posts/default/1222203704381535004'/><link rel='alternate' type='text/html' href='http://blogs.epachsoft.com/2009/04/time-for-new-looks.html' title='Time for new looks...'/><author><name>Esteban Pacheco</name><uri>http://www.blogger.com/profile/13637053045278905458</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='06273409846319894677'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10113675.post-8945466859992041882</id><published>2009-03-24T14:41:00.001-07:00</published><updated>2009-03-24T14:48:45.939-07:00</updated><title type='text'>The future in our fingertips...</title><content type='html'>So, we loved the BlackBerry and what they did with that little ball on their keypad.  Then Apple came and show us how amazing it is to use our fingertips on screen touch technology, in the meanwhile Microsoft amazed us with their Microsoft Surface, but what is next?&lt;br /&gt;&lt;br /&gt;After I saw &lt;a href="http://www.ted.com/index.php/talks/pattie_maes_demos_the_sixth_sense.html"&gt;this video&lt;/a&gt;, I just laughed and enjoyed the fact that we live in very exciting times, StarTrek,  StarWars and more getting closer to our time.  Once reality came back to my senses, I went back to my Delphi 2009 and kept working on creating the coolest systems I can, with the language I love.&lt;br /&gt;&lt;br /&gt;Enjoy these times and enjoy life.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10113675-8945466859992041882?l=blogs.epachsoft.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blogs.epachsoft.com/feeds/8945466859992041882/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=10113675&amp;postID=8945466859992041882' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10113675/posts/default/8945466859992041882'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10113675/posts/default/8945466859992041882'/><link rel='alternate' type='text/html' href='http://blogs.epachsoft.com/2009/03/future-in-our-fingertips.html' title='The future in our fingertips...'/><author><name>Esteban Pacheco</name><uri>http://www.blogger.com/profile/13637053045278905458</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='06273409846319894677'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10113675.post-5107831843506851698</id><published>2008-09-04T21:37:00.000-07:00</published><updated>2008-09-04T21:38:55.811-07:00</updated><title type='text'>You gotta love the TIOBE headline for September.</title><content type='html'>Want to find out what it is?&lt;br /&gt;&lt;br /&gt;Go and check it &lt;a href="http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html"&gt;out!&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10113675-5107831843506851698?l=blogs.epachsoft.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blogs.epachsoft.com/feeds/5107831843506851698/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=10113675&amp;postID=5107831843506851698' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10113675/posts/default/5107831843506851698'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10113675/posts/default/5107831843506851698'/><link rel='alternate' type='text/html' href='http://blogs.epachsoft.com/2008/09/you-gotta-love-tiobe-headline-for.html' title='You gotta love the TIOBE headline for September.'/><author><name>Esteban Pacheco</name><uri>http://www.blogger.com/profile/13637053045278905458</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='06273409846319894677'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10113675.post-2092221121671187807</id><published>2008-09-02T19:58:00.000-07:00</published><updated>2008-09-02T20:59:05.830-07:00</updated><title type='text'>Credit Card number validator for Delphi</title><content type='html'>We are implementing parts of a global electronic payment solution and one of the mandatory features was to verify credit card numbers.  This is done using the &lt;a href="http://en.wikipedia.org/wiki/Luhn_algorithm"&gt;Luhn algorithm&lt;/a&gt;.   I was expecting to find a wide variety of implementations on our sexy Delphi language but to my surprise there were very few hits on my search.&lt;br /&gt;&lt;br /&gt;So, for others that may needed, I'm including this small routine that validates the credit card number (not the card secure code, nor the expiration date).  There are several implementations on the web that based on the card prefix digits you can determine the kind of card you are looking at (VISA, MC, Dinners, etc.)  That kind of inferences are not reliable for a global solution so the decision was made to drop that auto detection.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;/blockquote&gt;&lt;blockquote style="font-family: courier new;"&gt;&lt;span style="font-size:85%;"&gt;function ValidateCreditCardNumber(CreditCardNumber:string):boolean;&lt;br /&gt;&lt;br /&gt;Const&lt;br /&gt; DigitsAllowed = ['0'..'9'];&lt;br /&gt; MaxCCSize = 19;&lt;br /&gt; MinCCSize = 13;&lt;br /&gt;&lt;br /&gt; var&lt;br /&gt;  i : integer;&lt;br /&gt;  CleanCardNumber: string;&lt;br /&gt;  digit: Integer;&lt;br /&gt;  CheckSum: Integer; { Holds the value of the operation }&lt;br /&gt;  Flag: Boolean; { used to indicate when ready }&lt;br /&gt;  Counter: Integer; { index counter }&lt;br /&gt;  PartNumber: string; { used to extract each digit of number }&lt;br /&gt;  Number: Integer; { used to convert each digit to integer}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Begin&lt;br /&gt; CleanCardNumber:='';&lt;br /&gt; digit:=0;&lt;br /&gt;&lt;br /&gt; // Remove any non numeric value&lt;br /&gt; for I := 1 to Length(CreditCardNumber) do&lt;br /&gt;  Begin&lt;br /&gt;    if CreditCardNumber[i] in DigitsAllowed then&lt;br /&gt;     CleanCardNumber:= CleanCardNumber + CreditCardNumber[i];&lt;br /&gt;  End;&lt;br /&gt;&lt;br /&gt;// Check for valid card length number&lt;br /&gt; if (Length(CleanCardNumber)&lt;minccsize)&gt;MaxCCSize) then&lt;br /&gt;  Begin&lt;br /&gt;   Result:= False;&lt;br /&gt;   Exit;&lt;br /&gt;  End;&lt;br /&gt;&lt;br /&gt;// get the starting value for our counter&lt;br /&gt;  Counter := Length(CleanCardNumber);&lt;br /&gt;  CheckSum := 0;&lt;br /&gt;  PartNumber := '';&lt;br /&gt;  Number := 0;&lt;br /&gt;  Flag := false;&lt;br /&gt;&lt;br /&gt;  while (Counter &gt;= 1) do&lt;br /&gt;  begin&lt;br /&gt;    // get the current digit&lt;br /&gt;    PartNumber := Copy(CleanCardNumber, Counter, 1);&lt;br /&gt;    Number := StrToInt(PartNumber); // convert to integer&lt;br /&gt;    if (Flag) then // only do every other digit&lt;br /&gt;    begin&lt;br /&gt;      Number := Number * 2;&lt;br /&gt;      if (Number &gt;= 10) then&lt;br /&gt;        Number := Number - 9;&lt;br /&gt;    end;&lt;br /&gt;    CheckSum := CheckSum + Number;&lt;br /&gt;&lt;br /&gt;    Flag := not (Flag);&lt;br /&gt;&lt;br /&gt;    Counter := Counter - 1;&lt;br /&gt;  end;&lt;br /&gt;&lt;br /&gt;  result := ((CheckSum mod 10) = 0);&lt;br /&gt;&lt;br /&gt;End;&lt;/span&gt;&lt;/blockquote&gt;&lt;br /&gt;This implementation is based on a 1996 VB Code migration from Shawn Wilson.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10113675-2092221121671187807?l=blogs.epachsoft.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blogs.epachsoft.com/feeds/2092221121671187807/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=10113675&amp;postID=2092221121671187807' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10113675/posts/default/2092221121671187807'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10113675/posts/default/2092221121671187807'/><link rel='alternate' type='text/html' href='http://blogs.epachsoft.com/2008/09/credit-card-number-validator-for-delphi.html' title='Credit Card number validator for Delphi'/><author><name>Esteban Pacheco</name><uri>http://www.blogger.com/profile/13637053045278905458</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='06273409846319894677'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10113675.post-667839084911873632</id><published>2008-07-17T09:40:00.000-07:00</published><updated>2008-07-17T15:39:27.522-07:00</updated><title type='text'>Tiburón swimming in Lake Ontario.</title><content type='html'>For the first time, a &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;Tiburón&lt;/span&gt; was found last night swimming around the North York Public Library and people is wondering if they are coming out from Lake Ontario.&lt;br /&gt;&lt;br /&gt;But, such a thing seems to be untrue.  All points out that our visitor came from Silicon Valley.&lt;br /&gt;&lt;br /&gt;     Yup!, we had the pleasure to listen to no other than legend &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;CodeGear&lt;/span&gt; developer David &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;Intersimone&lt;/span&gt; and Anders &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;Ohlsson&lt;/span&gt; (&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;geesh&lt;/span&gt;, hope i got his lastname right).  They gave us a good talk about CodeGear, Embarcadero and tour of &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_5"&gt;Tiburón&lt;/span&gt;, called now &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_6"&gt;officialy&lt;/span&gt; "Delphi 2009".&lt;br /&gt;&lt;br /&gt;    The highly expected Unicode support is everywhere and it seems that the guys put lots of effort on achieving a high degree of backwards compatibility, which is as usual, a fantastic tradition that thankfully Delphi has never lost.&lt;br /&gt;&lt;br /&gt;Lots of new classes to help us on this transition, some new enhancements to the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_7"&gt;VCL&lt;/span&gt; (some cool new components there) which you probably already saw on all the blog posts that &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_8"&gt;CodeGear&lt;/span&gt; is generating now.&lt;br /&gt;&lt;br /&gt;BUT, now lets talk about those hidden gems that we could see while they were demoing stuff, for example, a new little &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_9"&gt;category&lt;/span&gt; to the component tool palette, something called "Ribbon Components", yup, they didn't mention it, they didn't demo them, but it was there.  So, no &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_10"&gt;NDA&lt;/span&gt; violation here, nor there, merely healthy speculation.&lt;br /&gt;&lt;br /&gt;Also I noticed two more categories, and I am extremely happy about them, because it means that we are finally getting some love on the &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_11"&gt;middle tier&lt;/span&gt; area.  It seems to be part of the announced improvements to &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_12"&gt;DataSnap&lt;/span&gt;, a "Data Snap Client" and "Data Snap Server" categories, instead of the typical single "&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_13"&gt;DataSnap&lt;/span&gt;" group.  What is in there, no idea, but hey, i like the hint.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Anyway, it was a great time, a great experience, Delphi is getting better.  The guys seemed to be pump about the future, and so are we.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Oh, and did I mention that we are hiring? :)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="text-decoration: underline;"&gt;&lt;/span&gt;&lt;a id="Bloggers__ct8_Hyperlink1" class="blogname" name="Hyperlink1" title="The Hacker\'s Corner" href="http://blogs.codegear.com/ao/"&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10113675-667839084911873632?l=blogs.epachsoft.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blogs.epachsoft.com/feeds/667839084911873632/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=10113675&amp;postID=667839084911873632' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10113675/posts/default/667839084911873632'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10113675/posts/default/667839084911873632'/><link rel='alternate' type='text/html' href='http://blogs.epachsoft.com/2008/07/tiburn-swimming-in-lake-ontario.html' title='Tiburón swimming in Lake Ontario.'/><author><name>Esteban Pacheco</name><uri>http://www.blogger.com/profile/13637053045278905458</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='06273409846319894677'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10113675.post-7104080490609570006</id><published>2008-04-29T22:12:00.000-07:00</published><updated>2008-04-29T22:37:08.243-07:00</updated><title type='text'>How to create a Web Server Control in ASP.Net with Delphi 2007</title><content type='html'>We were presented with the challenge of creating our own server controls.  After some research on the web, we found very few examples regarding how to do this, even less if they are specifically targeted to Delphi.Net 2007.&lt;br /&gt;&lt;br /&gt;  So, in order to help the next fellow Delphi developer that is presented with similar situations, it is our objective to publish small articles on every new item that we face in our development process as a contribution to the new Spirit of Delphi that is growing in the community.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;Special thanks to &lt;span style="font-weight: bold;"&gt;Feryal Badili&lt;/span&gt; for putting this article together.  :)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Here is the step-by-step instruction on how to create a simple server control in Delphi 2007.&lt;br /&gt;&lt;br /&gt;Well, there are two ways to create web components in Delphi:&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;1)&lt;/span&gt; You can go to 'File-New-Other-Delphi for .NET Projects' and choose 'Web Control Library'.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;2)&lt;/span&gt; OR, you can go to 'File-New-Other-Delphi for .NET Projects' and choose 'Package'. Then in project manager panel, right click on 'Contains' folder and select 'Add new-Other-Delphi for .NET Projects-New ASP.NET Files' and select 'Web Custom Control'. You may want to use this approach if you would like to have multiple controls in the same package.&lt;br /&gt;&lt;br /&gt;The general recommendation is to use the first method to create a web custom control for the first time, it is a lot easier in the long run, believe me.&lt;br /&gt;&lt;br /&gt;Delphi will generate the source code for a very simple web control. Let's just try to understand it:&lt;br /&gt;&lt;br /&gt;The default name for the file is 'WebControl1.pas' . It is a Delphi unit file and the unit name is really your namespace. You need to remember that because you're going to need it later when you are using the control in your web page!&lt;br /&gt;&lt;br /&gt;Under 'Type' section of the code, you will see the following lines:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;span style="font-family:courier new;"&gt;[DefaultProperty('Text'),&lt;/span&gt; &lt;!--{0}:MyWebControl1--&gt;&lt;span style="font-family:courier new;"&gt;   ToolboxData('&lt;{0}:MyWebControl1 runat=server&gt;')]&lt;/span&gt; &lt;span style="font-family:courier new;"&gt;  MyWebControl1 = class(System.Web.UI.WebControls.WebControl)&lt;/span&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;Well, what does it mean?&lt;br /&gt;Your class MyWebControl1 is derived from System.Web.UI.WebControls.WebControl.&lt;br /&gt;&lt;br /&gt;  If your control renders a user interface (UI) element or any other visible element on the client, you should derive your control from System.Web.UI.WebControls.WebControl (or a derived class).&lt;br /&gt;&lt;br /&gt;  If your control renders an element that is not visible in the client browser, such as a hidden element or a meta element, derive your control from System.Web.UI.Control. The WebControl class derives from Control and adds style-related properties such as Font, Forecolor, and BackColor.&lt;br /&gt;&lt;br /&gt;  In addition, a control that derives from WebControl participates in the themes features of ASP.NET without any extra work on your part.  If your control extends the functionality of an existing control, such as the Button, Label, or Image controls, you can derive from that control.&lt;br /&gt;If you are going to have multiple visual controls in your server component and you wish to inherit the basic functionality of the parent controls, you need to derive your class from CompositeControl class:&lt;br /&gt;&lt;blockquote face="courier new"&gt;MyWebControl1 = class(System.Web.UI.WebControls.CompositeControl)&lt;/blockquote&gt;To learn more about composite controls, see:&lt;br /&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/3257x3ea%28VS.80%29.aspx"&gt;http://msdn2.microsoft.com/en-us/library/3257x3ea(VS.80).aspx&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The code inside brackets that is generated on top of your class definition is attributes that apply to your class. To learn more about these attributes, see the following link:&lt;br /&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/ms178658%28VS.80%29.aspx"&gt;http://msdn2.microsoft.com/en-us/library/ms178658(VS.80).aspx&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The code generated by Delphi adds a property called 'Text' to your component . Since this property is published, you will be able to see it in the "IntelliSense" or "Code Completion" and object inspector when you use this component in a web page.&lt;br /&gt;&lt;br /&gt;As you can see, this property also has some attributes:&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Bindable:&lt;/span&gt; set it to true if your property can be data bound.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Category:&lt;/span&gt; In object inspector,  this property will appear under the category(group) that you define.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;DefaultValue:&lt;/span&gt; Obviously, this is the default value of your property.&lt;br /&gt;&lt;br /&gt;You need to define these attributes for each and every property that you want to publish for your component. Also pay attention to the field definition for your property.&lt;br /&gt;&lt;br /&gt;Next step is to add your own child controls and render the server control. In order to do that, you need to implement the following procedures:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;span style="font-family:courier new;"&gt;    procedure CreateChildControls(); override;&lt;/span&gt; &lt;span style="font-family:courier new;"&gt;    procedure RenderContents(Output: HtmlTextWriter); override;&lt;/span&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;Here is an example of simple server control that includes only one control (TextBox) and adds one property named 'ShowTime' to the control.&lt;br /&gt;&lt;br /&gt;You can use this component in both Visual studio or Delphi .NET.&lt;br /&gt;&lt;br /&gt;&lt;blockquote style="font-family: courier new;"&gt;&lt;span style="font-size:85%;"&gt;unit WebControl1;&lt;br /&gt;// To create a more advanced Web Control that supports live data at&lt;br /&gt;// design time, see instructions in the readme file located in the&lt;br /&gt;// 'BDS\5.0\Source\DotNet\dbwebcontrols' directory&lt;br /&gt;//&lt;br /&gt;&lt;br /&gt;interface&lt;br /&gt;&lt;br /&gt;uses&lt;br /&gt;system.web,&lt;br /&gt;System.Web.UI,&lt;br /&gt;System.Web.UI.WebControls,&lt;br /&gt;System.ComponentModel,&lt;br /&gt;system.Drawing,&lt;br /&gt;System.Data,&lt;br /&gt;system.security.Permissions;&lt;br /&gt;&lt;br /&gt;type&lt;br /&gt;/// &lt;summary&gt;&lt;br /&gt;/// Summary description for the component&lt;br /&gt;/// &lt;/summary&gt;&lt;br /&gt;&lt;br /&gt;[&lt;br /&gt;  AspNetHostingPermission(SecurityAction.Demand,&lt;br /&gt;      Level = AspNetHostingPermissionLevel.Minimal),&lt;br /&gt;  AspNetHostingPermission(SecurityAction.InheritanceDemand,&lt;br /&gt;      Level=AspNetHostingPermissionLevel.Minimal),&lt;br /&gt;  DefaultProperty('ShowTime'),&lt;br /&gt;  ToolboxData('&lt;{0}:OpenItems runat=server&gt;&lt;!--{0}:OpenItems--&gt;')&lt;br /&gt;]&lt;br /&gt;OpenItems = class(System.Web.UI.WebControls.CompositeControl)&lt;br /&gt;strict private&lt;br /&gt;  IsError : boolean;&lt;br /&gt;&lt;br /&gt;  msgBox  : textBox;&lt;br /&gt;  FShowTime: boolean;&lt;br /&gt;&lt;br /&gt;strict protected&lt;br /&gt;  procedure RecreateChildControls(); override;&lt;br /&gt;protected&lt;br /&gt;  procedure RenderContents(Output: HtmlTextWriter); override;&lt;br /&gt;  procedure CreateChildControls(); override;&lt;br /&gt;public&lt;br /&gt;  constructor Create;&lt;br /&gt;published&lt;br /&gt;  [Bindable(false),&lt;br /&gt;   Category('Behavior'),&lt;br /&gt;   DefaultValue(false),&lt;br /&gt;   Description('Show the Date and Time')&lt;br /&gt;  ]&lt;br /&gt;  property  ShowTime : boolean read FShowTime write FShowTime;&lt;br /&gt;end;&lt;br /&gt;&lt;br /&gt;implementation&lt;br /&gt;uses SysUtils;&lt;br /&gt;&lt;br /&gt;/// &lt;summary&gt;&lt;br /&gt;/// Define a public parameterless constructor needed by web controls.&lt;br /&gt;/// &lt;/summary&gt;&lt;br /&gt;constructor OpenItems.Create;&lt;br /&gt;begin&lt;br /&gt;inherited;&lt;br /&gt;isError := false;&lt;br /&gt;end;&lt;br /&gt;&lt;br /&gt;procedure OpenItems.RecreateChildControls();&lt;br /&gt;begin&lt;br /&gt;try&lt;br /&gt;  EnsureChildControls();&lt;br /&gt;except&lt;br /&gt;  IsError := false;&lt;br /&gt;end;&lt;br /&gt;end;&lt;br /&gt;&lt;br /&gt;procedure OpenItems.CreateChildControls();&lt;br /&gt;&lt;br /&gt;begin&lt;br /&gt;  try&lt;br /&gt;&lt;br /&gt;    Controls.Clear();&lt;br /&gt;&lt;br /&gt;    // Create a text box&lt;br /&gt;    msgBox := TextBox.Create;&lt;br /&gt;&lt;br /&gt;    if ShowTime then&lt;br /&gt;      msgBox.Text := DateTimeToStr(Now)&lt;br /&gt;    else&lt;br /&gt;      msgBox.Text := DateToStr(Now);&lt;br /&gt;&lt;br /&gt;    msgBox.BorderStyle := System.Web.UI.WebControls.BorderStyle(1); // Sets border style to 'None'&lt;br /&gt;    msgBox.ForeColor   := System.Drawing.Color.get_Red;&lt;br /&gt;    msgBox.Style.Item['position'] := 'reletive';&lt;br /&gt;    self.Controls.Add(msgBox);&lt;br /&gt;  except&lt;br /&gt;    IsError := false;&lt;br /&gt;  end;&lt;br /&gt;&lt;br /&gt;end;&lt;br /&gt;&lt;br /&gt;/// &lt;summary&gt;&lt;br /&gt;/// Render this control to the output parameter specified, preserving&lt;br /&gt;/// cosmetic attribute output generation inherited from standard&lt;br /&gt;/// WebControl.&lt;br /&gt;/// &lt;/summary&gt;&lt;br /&gt;///&lt;/span&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;blockquote style="font-family: courier new;"&gt;{$REGION 'Render override'}&lt;br /&gt;procedure OpenItems.RenderContents(Output: HtmlTextWriter);&lt;br /&gt;begin&lt;br /&gt;&lt;br /&gt;if not IsError then&lt;br /&gt;begin&lt;br /&gt;  // There was no error so far, render all components&lt;br /&gt;  try&lt;br /&gt;    AddAttributesToRender(output);&lt;br /&gt;&lt;br /&gt;    Output.AddAttribute(HtmlTextWriterAttribute.Cellpadding,'1', false);&lt;br /&gt;&lt;br /&gt;    Output.RenderBeginTag(HtmlTextWriterTag.Table);&lt;br /&gt;    // The table will be very useful when you have multiple visual controls&lt;br /&gt;    // included in your component&lt;br /&gt;&lt;br /&gt;    Output.RenderBeginTag(HtmlTextWriterTag.Tr);&lt;br /&gt;    Output.RenderBeginTag(HtmlTextWriterTag.Td);&lt;br /&gt;    msgBox.RenderControl(output);&lt;br /&gt;    Output.RenderEndTag(); // end td&lt;br /&gt;    Output.RenderEndTag(); // end tr&lt;br /&gt;&lt;br /&gt;    Output.RenderEndTag();&lt;br /&gt;&lt;br /&gt;  except&lt;br /&gt;    // An error happened, just show a message&lt;br /&gt;    Output.Write(' '+ 'Unable to create the components');&lt;br /&gt;  end;&lt;br /&gt;&lt;br /&gt;end else begin&lt;br /&gt;  // An error happened, just show a message&lt;br /&gt;  Output.Write(' '+ 'Unable to create the components');&lt;br /&gt;end;&lt;br /&gt;&lt;br /&gt;end;&lt;br /&gt;&lt;br /&gt;{$ENDREGION}&lt;br /&gt;&lt;br /&gt;end.&lt;br /&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10113675-7104080490609570006?l=blogs.epachsoft.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blogs.epachsoft.com/feeds/7104080490609570006/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=10113675&amp;postID=7104080490609570006' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10113675/posts/default/7104080490609570006'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10113675/posts/default/7104080490609570006'/><link rel='alternate' type='text/html' href='http://blogs.epachsoft.com/2008/04/how-to-create-web-server-control-in.html' title='How to create a Web Server Control in ASP.Net with Delphi 2007'/><author><name>Esteban Pacheco</name><uri>http://www.blogger.com/profile/13637053045278905458</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='06273409846319894677'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10113675.post-2801211962458370544</id><published>2008-04-21T21:13:00.001-07:00</published><updated>2008-04-23T06:41:56.233-07:00</updated><title type='text'>Creating extended stored procedures on Delphi.</title><content type='html'>&lt;div style="text-align: justify;"&gt;Well, originally we were going to implement a sexy Delphi.Net CLR Based Stored procedure now that we are using MSSQL 2005 and hearing all the good things about this highly publicized feature.  Sadly, we hit the wall after initial testings showed us the big amount of limitations on the assemblies that we could use and all the exceptions we must made to make it work on MSSQL 2005.  For example:&lt;br /&gt;&lt;br /&gt;* First,  you need to enable CLR on the database. (Thats ok.)&lt;br /&gt;* Classes must be public and static. (Makes it harder, but we can manage it)&lt;br /&gt;* Avoid namespaces with anything that is not the list of "safe" name spaces approved by Microsoft. (mmm)&lt;br /&gt;* "Safe" assembly is simply a way of saying "non-microsoft built" assembly.  You have a couple more "modes" on how to install your assembly on MSSQL, but as you can read below (MSSQL Online help), it gets touchy, and probably complicated. (yeah, I tried it, got ugly)&lt;br /&gt;&lt;br /&gt;“&lt;span style=";font-family:courier new;font-size:85%;"  &gt;To create an EXTERNAL_ACCESS or UNSAFE assembly in SQL Server, one of the following two conditions must be met:&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;The assembly is strong name signed or Authenticode signed with a certificate. This strong name (or certificate) is created inside SQL Server as an asymmetric key (or certificate), and has a corresponding login with EXTERNAL ACCESS ASSEMBLY permission (for external access assemblies) or UNSAFE ASSEMBLY permission (for unsafe assemblies).&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;The database owner (DBO) has EXTERNAL ACCESS ASSEMBLY (for EXTERNAL ACCESS assemblies) or UNSAFE ASSEMBLY (for UNSAFE assemblies) permission, and the database has the &lt;/span&gt;&lt;a id="ctl00_rs1_mainContentContainer_ctl20" href="http://msdn2.microsoft.com/en-us/library/ms187861.aspx"&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;TRUSTWORTHY Database Property&lt;/span&gt;&lt;/a&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt; set to ON. “&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;* MSSQL will complaing about the CodeGear assemblies being unsafe, some tweaking is necessary.&lt;br /&gt;&lt;br /&gt;* Third party assemblies are not welcome on MSSQL. i.e. RemObjects.&lt;br /&gt;&lt;br /&gt;Well, in summary, after playing with it, adding our assemblies required a lot of code trimming and removing any namespace that has any reference to anything visual (makes sense) even if it is not being used at all.  Finally, the detail that just finish helping us to dropped the idea was that we don't have the source code for those "extra" assemblies (RemObjects) that we required and the amount of trimming just got out of control.&lt;br /&gt;&lt;br /&gt;With one option out we went back to the drawing board with the plan to extend and update an old implementation of "Old School" extended stored procedures, as soon as I open that old project I realized why I never liked working with it, parsing the parameters, checking their types, defining data columns to return a proper record set was simply a big painful and slow process.&lt;br /&gt;&lt;br /&gt;Thankfully, I was able to find in the vault of memories a great presentation by Berend de Boer made in Inprise DevCon '99 where he explains the general steps to implement them and even  included a great piece of source code of the mighty "TSQLXProc" object that simply takes over the painful implementation and takes it to the Delphi way.  After that finding Berend's website was easy.&lt;br /&gt;&lt;br /&gt;For anyone needing this, check this &lt;a href="http://www.berenddeboer.net/delphi/index.html#xp"&gt;link&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;My Kudos to Berend,&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10113675-2801211962458370544?l=blogs.epachsoft.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blogs.epachsoft.com/feeds/2801211962458370544/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=10113675&amp;postID=2801211962458370544' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10113675/posts/default/2801211962458370544'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10113675/posts/default/2801211962458370544'/><link rel='alternate' type='text/html' href='http://blogs.epachsoft.com/2008/04/creating-extended-stored-procedures-on.html' title='Creating extended stored procedures on Delphi.'/><author><name>Esteban Pacheco</name><uri>http://www.blogger.com/profile/13637053045278905458</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='06273409846319894677'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10113675.post-4611636687567031753</id><published>2008-04-21T20:58:00.001-07:00</published><updated>2008-04-21T21:04:57.093-07:00</updated><title type='text'>EVERY DAY TIPS: Manually deleting a windows service</title><content type='html'>There I was playing with setting up subversion server running as a Windows Service until I made a tragic mistake and I get to the point of needing to remove the service that I just recently installed.&lt;br /&gt;&lt;br /&gt;Ok, fine, as a good Delphi guy, I went looking for that sexy graphic console (Service Manager) that will give me the all mighty power to delete the service, but, I hit a wall after realizing that such an option was disabled for me.&lt;br /&gt;&lt;br /&gt;So, after googling a bit I found two nice options.&lt;br /&gt;&lt;br /&gt;1. If you remember the exact name of the service (not the description), you can use the sc command:&lt;br /&gt;C:\&gt;sc delete "service name"&lt;br /&gt;&lt;br /&gt;If you don't know it, then you can go straight to the registry, find your guy and delete it.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;&lt;/span&gt;&lt;/code&gt;You indeed will need to restart the computer to see these changes fully reflected.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10113675-4611636687567031753?l=blogs.epachsoft.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blogs.epachsoft.com/feeds/4611636687567031753/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=10113675&amp;postID=4611636687567031753' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10113675/posts/default/4611636687567031753'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10113675/posts/default/4611636687567031753'/><link rel='alternate' type='text/html' href='http://blogs.epachsoft.com/2008/04/every-day-tips-manually-deleting.html' title='EVERY DAY TIPS: Manually deleting a windows service'/><author><name>Esteban Pacheco</name><uri>http://www.blogger.com/profile/13637053045278905458</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='06273409846319894677'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10113675.post-3141934598062921020</id><published>2008-04-14T18:50:00.000-07:00</published><updated>2008-04-14T18:53:02.021-07:00</updated><title type='text'>Delphi for PHP 2 en Español</title><content type='html'>Well, great news for my mother language!  We have now &lt;a href="http://blogs.codegear.com/andreanolanusse/2008/04/14/delphi-para-php-2-en-espanol/"&gt;Delphi for PHP in Spanish!&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Yup, just after the official release we are now getting the news of a translation on the Cervantes language.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10113675-3141934598062921020?l=blogs.epachsoft.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blogs.epachsoft.com/feeds/3141934598062921020/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=10113675&amp;postID=3141934598062921020' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10113675/posts/default/3141934598062921020'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10113675/posts/default/3141934598062921020'/><link rel='alternate' type='text/html' href='http://blogs.epachsoft.com/2008/04/delphi-for-php-2-en-espaol.html' title='Delphi for PHP 2 en Español'/><author><name>Esteban Pacheco</name><uri>http://www.blogger.com/profile/13637053045278905458</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='06273409846319894677'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10113675.post-4324550796825389769</id><published>2008-01-01T18:38:00.000-08:00</published><updated>2008-01-02T07:36:28.155-08:00</updated><title type='text'>Truncating your transaction log.</title><content type='html'>First, HAPPY NEW YEAR GUYS!!&lt;br /&gt;&lt;br /&gt;Now, some actual blogging...&lt;br /&gt;&lt;br /&gt;Here I was, trying to restore our metadata only database into a production server, getting constantly an error messaging saying that it was waaay to big for the available space.  Well, my concern was that the entire back up of the database was only 6MB, and the database itself only contains tables with very basic data.&lt;br /&gt;&lt;br /&gt;What is worst, the space available on that production drive was 14GB, so gosh, it simply didn't make any sense.  Well, after reviewing the original metadata-only database I realized that our constant adding, updating and deleting of structures made our transaction log simply huge. (40gb)&lt;br /&gt;&lt;br /&gt;So, after some reading I found this nice recipe to cut down the fat of your log database:&lt;br /&gt;&lt;br /&gt;First, backup your existing log file by running&lt;br /&gt;&lt;pre class="code"&gt;BACKUP LOG &lt;databasename&gt; TO DISK = '&lt;backupfile&gt;'&lt;/backupfile&gt;&lt;/databasename&gt;&lt;/pre&gt;&lt;br /&gt;Now, shrink the transaction log, executing this&lt;br /&gt;&lt;pre class="code"&gt;DBCC SHRINKFILE (&lt;filename&gt;, &lt;targetsize&gt;) WITH NO_INFOMSGS&lt;br /&gt;&lt;br /&gt;&lt;/targetsize&gt;&lt;/filename&gt;&lt;/pre&gt;File name is the transaction log filename and target size you wanted to be, don't be too demanding on the shrinking, but as a hint, I ended up making mine only 1MB cause we don't need a log on our metadata db. :)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Update:&lt;br /&gt;My apologies, the database in question is MSSQL 2005.  Thanks for the feedback.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10113675-4324550796825389769?l=blogs.epachsoft.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blogs.epachsoft.com/feeds/4324550796825389769/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=10113675&amp;postID=4324550796825389769' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10113675/posts/default/4324550796825389769'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10113675/posts/default/4324550796825389769'/><link rel='alternate' type='text/html' href='http://blogs.epachsoft.com/2008/01/truncating-your-transaction-log.html' title='Truncating your transaction log.'/><author><name>Esteban Pacheco</name><uri>http://www.blogger.com/profile/13637053045278905458</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='06273409846319894677'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10113675.post-8496130342442758989</id><published>2007-11-15T20:33:00.000-08:00</published><updated>2007-11-15T20:36:03.935-08:00</updated><title type='text'>Help Update 1 for Delphi 2007 available.</title><content type='html'>Another great sign of constant improvement of my favorite IDE.&lt;br /&gt;&lt;br /&gt;If you have not get an information dialog from your installation just go to Programs\Code Gear RAD Studio\Check for updates.&lt;br /&gt;&lt;br /&gt;You can go &lt;a href="http://dn.codegear.com/article/37134/"&gt;here&lt;/a&gt; to read the install and Release notes, straight from CodeGear.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10113675-8496130342442758989?l=blogs.epachsoft.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blogs.epachsoft.com/feeds/8496130342442758989/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=10113675&amp;postID=8496130342442758989' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10113675/posts/default/8496130342442758989'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10113675/posts/default/8496130342442758989'/><link rel='alternate' type='text/html' href='http://blogs.epachsoft.com/2007/11/help-update-1-for-delphi-2007-available.html' title='Help Update 1 for Delphi 2007 available.'/><author><name>Esteban Pacheco</name><uri>http://www.blogger.com/profile/13637053045278905458</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='06273409846319894677'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10113675.post-289046582446096392</id><published>2007-10-23T14:24:00.000-07:00</published><updated>2007-10-23T19:23:39.790-07:00</updated><title type='text'>Migrating from ADO to dbExpress...</title><content type='html'>I finally started.&lt;br /&gt;&lt;br /&gt;After holding the migration for a long time I am doing it, the reason? well, CodeGear has a renew effort on working on dbExpress, and its latest version dbExpress 4 is a great example of it, with good performance, great connectivity with WIN32 and .Net, support for BlackFish SQL, code included and completely rewritten in Delphi, and lots of improvements on D2007 to work with it like a new SQL Query Editor.&lt;br /&gt;&lt;br /&gt;My initial testings always showed a better performance with dbExpress than ADO, now add the fact that ADO is being discontinued by MS in benefit of ADO.Net, the choice was a lot easier.&lt;br /&gt;&lt;br /&gt;But, what I did to migrate thousands and thousands of components?  Well it wasn't easy, there was no way I could do it in the form designer, it will simply take years.&lt;br /&gt;&lt;br /&gt;So just go, open your Data Module, switch to code view, and Find/Replace the following:&lt;br /&gt;&lt;br /&gt;1. Replace Connection with SQLConnection.&lt;br /&gt;2. Replace TADOQuery for TSQLQuery.&lt;br /&gt;3. Replace TADOStoredProc for TSQLStoredProc.&lt;br /&gt;4. Replace TADODataSet for TSQLDataSet.&lt;br /&gt;5. Parameters for Params.&lt;br /&gt;6. CmdStoredProc for ctStoredProc.&lt;br /&gt;7. Direction for ParamType.&lt;br /&gt;8. pdOutput for ptOutput.&lt;br /&gt;9. pdInput for ptInput.&lt;br /&gt;10. Add under every dataset that uses SQLConnection, Schema = "dbo" or whatever your schema is.&lt;br /&gt;11. Remove every parameter item called "@RETURN_VALUE".&lt;br /&gt;12. Replace TDateTimeField for TSQLTimeStampField.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Geesh, thats what I remember, I will add more to the list if I hit more rocks on the road.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10113675-289046582446096392?l=blogs.epachsoft.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blogs.epachsoft.com/feeds/289046582446096392/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=10113675&amp;postID=289046582446096392' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10113675/posts/default/289046582446096392'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10113675/posts/default/289046582446096392'/><link rel='alternate' type='text/html' href='http://blogs.epachsoft.com/2007/10/migrating-from-ado-to-dbexpress.html' title='Migrating from ADO to dbExpress...'/><author><name>Esteban Pacheco</name><uri>http://www.blogger.com/profile/13637053045278905458</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='06273409846319894677'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10113675.post-2430799431863396471</id><published>2007-09-27T19:40:00.002-07:00</published><updated>2007-09-27T19:48:21.405-07:00</updated><title type='text'>Consolas fonts.</title><content type='html'>Well, I was reading the &lt;a href="http://www.codegear.com/"&gt;CodeGear&lt;/a&gt;'s &lt;a href="http://dev.newswhat.com/th/borland.public.delphi.non-technical.html"&gt;non-technical newsgroups&lt;/a&gt;, and found an interesting conversation regarding what kind of font you use on your development IDE, among the recommendations there was the new &lt;a href="http://en.wikipedia.org/wiki/Consolas"&gt;Consolas&lt;/a&gt; Font from Microsoft.  Well, I surrender to temptation, &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=22e69ae4-7e40-4807-8a86-b3d36fab68d3&amp;amp;displaylang=en"&gt;downloaded&lt;/a&gt; the font, set it up on my RAD Studio 2007 and expected to see something cool in front of me, but.... nothing happened, tried several times, and nothing happened, the IDE didn't recognize the font, nothing changed.&lt;br /&gt;&lt;br /&gt;Luckily I did my googling and found out &lt;a href="http://www.microsoft.com/typography/ClearTypePowerToy.mspx"&gt;this&lt;/a&gt; nice tool, that avoided me the trouble to attempt to configure the font from the &lt;a href="http://support.microsoft.com/default.aspx?scid=kb;EN-US;Q247815"&gt;command prompt&lt;/a&gt; .&lt;br /&gt;&lt;br /&gt;Well, I did it, restarted my sexy IDE and yahoooo!! I have a nice sexy font.  I must admit I like it, it will take a while to feel fully comfortable with it, but i think is here to stay.&lt;br /&gt;&lt;br /&gt;Try it! you may like it too.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10113675-2430799431863396471?l=blogs.epachsoft.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blogs.epachsoft.com/feeds/2430799431863396471/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=10113675&amp;postID=2430799431863396471' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10113675/posts/default/2430799431863396471'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10113675/posts/default/2430799431863396471'/><link rel='alternate' type='text/html' href='http://blogs.epachsoft.com/2007/09/consolas-fonts.html' title='Consolas fonts.'/><author><name>Esteban Pacheco</name><uri>http://www.blogger.com/profile/13637053045278905458</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='06273409846319894677'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10113675.post-4585546465762215258</id><published>2007-08-12T21:29:00.000-07:00</published><updated>2007-08-12T21:32:33.685-07:00</updated><title type='text'>Restarting your application.</title><content type='html'>We are creating a project to automatically update our different modules.  That usually implies an application restart, lots of ideas went around, a service that does that, a batch file, or another program working as a proxy of the original one, but, hey, I found &lt;a href="http://delphi.about.com/cs/adptips2001/a/bltip0601_2.htm"&gt;this &lt;/a&gt;G R E A T  article from Zarko Gajic who is always giving amazing tips with Delphi on how to do it in a VERY easy way.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Enjoy!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10113675-4585546465762215258?l=blogs.epachsoft.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blogs.epachsoft.com/feeds/4585546465762215258/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=10113675&amp;postID=4585546465762215258' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10113675/posts/default/4585546465762215258'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10113675/posts/default/4585546465762215258'/><link rel='alternate' type='text/html' href='http://blogs.epachsoft.com/2007/08/restarting-your-application.html' title='Restarting your application.'/><author><name>Esteban Pacheco</name><uri>http://www.blogger.com/profile/13637053045278905458</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='06273409846319894677'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10113675.post-5577555743875625640</id><published>2007-08-04T17:55:00.000-07:00</published><updated>2007-08-04T20:16:02.367-07:00</updated><title type='text'>The overload directive.</title><content type='html'>Well, it is fairly common to use the Delphi's overload directive to create a method with different sets of parameters in an object.&lt;br /&gt;&lt;br /&gt;What I wasn't aware is that it actually works on functions or procedures that are not part of an object.   That is cool.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10113675-5577555743875625640?l=blogs.epachsoft.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blogs.epachsoft.com/feeds/5577555743875625640/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=10113675&amp;postID=5577555743875625640' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10113675/posts/default/5577555743875625640'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10113675/posts/default/5577555743875625640'/><link rel='alternate' type='text/html' href='http://blogs.epachsoft.com/2007/08/overload-directive.html' title='The overload directive.'/><author><name>Esteban Pacheco</name><uri>http://www.blogger.com/profile/13637053045278905458</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='06273409846319894677'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10113675.post-7782641443975013817</id><published>2007-08-02T00:53:00.000-07:00</published><updated>2007-08-02T01:14:30.354-07:00</updated><title type='text'>RemObjects and DataSnap.</title><content type='html'>I'm using a mix of Delphi's RemObjects SDK and DataSnap on our middletier, and we have implemented session management on all the services and in all the DataSnap remote modules.&lt;br /&gt;&lt;br /&gt;Thanks to RO, that can be easily done on the DataSnap modules by turning on the RequiresSession property of the RODataSnapModule.  Now the only problem with this is during design time, once it is on you will not be allowed to connect to your DataSnap datasetproviders without first logging in.  So, as you can read that is a problem.&lt;br /&gt;&lt;br /&gt;The solution? We added a command line parameter to our application server that simply controls if we want to require a session or not in our services or datamodules.  Once that flag is set, we just use it as an indication while we are creating the service/datamodule.&lt;br /&gt;&lt;br /&gt;Soon, I will post the results of a LETHAL combination, KbmMW, RO and DataSnap in a single SUPER POWERFUL MIDDLETIER MILKSHAKE.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10113675-7782641443975013817?l=blogs.epachsoft.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blogs.epachsoft.com/feeds/7782641443975013817/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=10113675&amp;postID=7782641443975013817' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10113675/posts/default/7782641443975013817'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10113675/posts/default/7782641443975013817'/><link rel='alternate' type='text/html' href='http://blogs.epachsoft.com/2007/08/remobjects-and-datasnap.html' title='RemObjects and DataSnap.'/><author><name>Esteban Pacheco</name><uri>http://www.blogger.com/profile/13637053045278905458</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='06273409846319894677'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10113675.post-5144588751335157982</id><published>2007-07-31T20:51:00.001-07:00</published><updated>2007-07-31T20:55:00.327-07:00</updated><title type='text'>Developer Day en Español!!</title><content type='html'>Hi guys,&lt;br /&gt;&lt;br /&gt;CodeGear is hosting "Developer Days en Español" a nice gathering of great developers with the spanish speaking Delphi community.&lt;br /&gt;&lt;br /&gt;There is a wide variety of sessions including Delphi, Interbase, PHP and Java.&lt;br /&gt;&lt;br /&gt;It is only for 2 days, today was the first session and it was great.  An average of 300+ guys were listening online to the different sessions, in my opinion a great success.&lt;br /&gt;&lt;br /&gt;So if you want to check it out, &lt;a href="http://dn.codegear.com/es/article/36740/"&gt;this&lt;/a&gt; is the website.&lt;br /&gt;&lt;br /&gt;Enjoy!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10113675-5144588751335157982?l=blogs.epachsoft.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blogs.epachsoft.com/feeds/5144588751335157982/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=10113675&amp;postID=5144588751335157982' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10113675/posts/default/5144588751335157982'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10113675/posts/default/5144588751335157982'/><link rel='alternate' type='text/html' href='http://blogs.epachsoft.com/2007/07/developer-day-en-espaol.html' title='Developer Day en Español!!'/><author><name>Esteban Pacheco</name><uri>http://www.blogger.com/profile/13637053045278905458</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='06273409846319894677'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10113675.post-6593262711099052086</id><published>2007-07-29T22:57:00.000-07:00</published><updated>2007-07-29T23:05:28.316-07:00</updated><title type='text'>A nice surprise on Delpih 2007...</title><content type='html'>I was creating a "Lost Connection" dialog box for our rich client applications and as a distraction I was browsing around through thousands of nice icons on the internet, when I finally selected the icon that i wanted, I realized that it was (as almost every nice icon now days) a .png file.&lt;br /&gt;&lt;br /&gt;Big disappointment I said, cause my mighty Delphi doesn't support that in a native way, I need to use a open source component, (actually there are tons of them, but I don't have the time for that) so I will have to convert it to that ugly bitmap thing. Oh well, i did and when I was getting ready to upload the image, sweet surprise!&lt;br /&gt;&lt;br /&gt;TImage supports now gifs, cur, pcx, ani, png, gif, jpg, jpeg, bmp, ico, emf, wmf. I don't know if that is something new, but for sure it wasn't on Delphi 7 :P.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Love my D2007.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10113675-6593262711099052086?l=blogs.epachsoft.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blogs.epachsoft.com/feeds/6593262711099052086/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=10113675&amp;postID=6593262711099052086' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10113675/posts/default/6593262711099052086'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10113675/posts/default/6593262711099052086'/><link rel='alternate' type='text/html' href='http://blogs.epachsoft.com/2007/07/nice-surprise-on-delpih-2007.html' title='A nice surprise on Delpih 2007...'/><author><name>Esteban Pacheco</name><uri>http://www.blogger.com/profile/13637053045278905458</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='06273409846319894677'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10113675.post-3284145925884101702</id><published>2007-07-22T18:35:00.000-07:00</published><updated>2007-07-22T20:24:53.496-07:00</updated><title type='text'>Visual Studio launch in 2008....</title><content type='html'>Latest news said that Visual Studio will see the light in a joint launch with MSSQL Server 2008 and Windows Server 2008 in Los Angeles on February 27th, 2008.&lt;br /&gt;&lt;br /&gt;But, it will be released officially by the end of this year.&lt;br /&gt;&lt;br /&gt;CodeGear Studio will be out around September.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10113675-3284145925884101702?l=blogs.epachsoft.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blogs.epachsoft.com/feeds/3284145925884101702/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=10113675&amp;postID=3284145925884101702' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10113675/posts/default/3284145925884101702'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10113675/posts/default/3284145925884101702'/><link rel='alternate' type='text/html' href='http://blogs.epachsoft.com/2007/07/visual-studio-launch-in-2008.html' title='Visual Studio launch in 2008....'/><author><name>Esteban Pacheco</name><uri>http://www.blogger.com/profile/13637053045278905458</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='06273409846319894677'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10113675.post-3621025911858826848</id><published>2007-07-08T17:02:00.000-07:00</published><updated>2007-07-14T22:16:15.822-07:00</updated><title type='text'>Database scalability with MSSQL 2005</title><content type='html'>Some news from the battlefront...&lt;br /&gt;&lt;br /&gt;We are expecting at least a 75% increase of our internet traffic, db transactions, network and database activity in general so our entire company is working hard on getting ready to manage this incoming wave.&lt;br /&gt;&lt;br /&gt;Regrettably, life is not always good and the core of the business is setup around a system using a typical client/server architecture where each workstation creates a connection to the database and to make it worst, establishes server side cursors to fetch all data they need.&lt;br /&gt;&lt;br /&gt;Now on the other hand, the website is driven by old school ASP pages, using adHoc Queries or direct stored procedure calls to the already beat up database.  Finally, it is important to mention that this is running on ODBC connections.&lt;br /&gt;&lt;br /&gt;End result?, chaos, in high traffic moments the entire network slows down and all the applications switch to a slow silent death walk to a total IT crisis.  There is no caching techniques, no business layer, basically no middle tier... all the opposite things to what I'm used to deal with, and that is why it is my mission to turn this around and take over the world. (moooooahahaha)&lt;br /&gt;&lt;br /&gt;Well, the mission is simple, we can't change much in short time, so we need to make this system work as good as possible.  So, my first task is to provide a list of recommendations towards the deployment of our new database servers running MSSQL 2005.&lt;br /&gt;&lt;br /&gt;Yup, we are migrating from MSSQL 2000 to MSSQL 2005, people will think that it is a simply straight import/export, but special considerations need to be made when dealing with the databases collation which has completly change from one version to the other one and to the famous "compatibility modes".  Keeping an imported database in Compatibility mode 80 (MSSQL 2000) may save you headaches but will offer you little in terms of all the good new toys and performance tricks that you can apply on compatibility mode 90 (MSSQL 2005).&lt;br /&gt;&lt;br /&gt;Bellow is a summary of my initial recommendations aimed to the physical database storage design aspect that you should follow when dealing with a situation like the described above:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Server side cursors implies lots of memory usage on the database.  So, increase memory on the database server, the more the better.  Make sure your database is using it, by checking the database memory limit.  (special attention to the 3gb limit on the non Enterprise versions of MSSQL)&lt;/li&gt;&lt;li&gt;Multiple core machine? well, you will not use them if you don't separate that big nasty .mdf file into multiple .ndfs, what is the recipe? the number of data files within a single file group should equal the number of CPU cores.&lt;/li&gt;&lt;li&gt;For optimized I/O parallelism, use 64 Kb or 25 Kb strip size when defining the RAID configuration.&lt;/li&gt;&lt;li&gt;Use manual file growth database options.  Automatic is only for development (ja! you didn't knowt that did ya?)&lt;/li&gt;&lt;li&gt;Increased size of “tempdb” and monitor space usage, adjusting accordingly. The recommended level of available space is 20%.  All your temp tables and indexes are created there so, keep that guy with enough space, if you are using the default size that is only 8MB, and that is basically 8 floppies, so be nice, put some more space there.&lt;/li&gt;&lt;/ol&gt;Alright, so that should buy us some time to concentrate on the next stage, database optimizations.  Until the next post.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10113675-3621025911858826848?l=blogs.epachsoft.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blogs.epachsoft.com/feeds/3621025911858826848/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=10113675&amp;postID=3621025911858826848' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10113675/posts/default/3621025911858826848'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10113675/posts/default/3621025911858826848'/><link rel='alternate' type='text/html' href='http://blogs.epachsoft.com/2007/07/database-scalability-with-mssql-2005.html' title='Database scalability with MSSQL 2005'/><author><name>Esteban Pacheco</name><uri>http://www.blogger.com/profile/13637053045278905458</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='06273409846319894677'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></entry></feed>