<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-8440730375727994573</id><updated>2011-07-31T01:09:39.917-07:00</updated><title type='text'>Persistent Object</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://persistentobject.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8440730375727994573/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://persistentobject.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Rene Flores</name><uri>http://www.blogger.com/profile/14824376932972599596</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://4.bp.blogspot.com/_HI3aCbIDUfY/SU7k5ZPauuI/AAAAAAAAAAk/Ft3zdbKZPJA/S220/blogger.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>9</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-8440730375727994573.post-5662313206089082257</id><published>2009-01-28T03:12:00.000-08:00</published><updated>2009-01-30T09:36:32.122-08:00</updated><title type='text'>How did you sleep ? - 1</title><content type='html'>Impressing my admired writter  &lt;a style="font-weight: bold;" href="http://es.wikipedia.org/wiki/Germ%C3%A1n_Dehesa"&gt;Germán Dehesa&lt;/a&gt; I'm going to lend his article's bottomline in the mexican newpaper Reforma, there, he remid us very important things that we don't have to forget, because many times we have a very shortime memory.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;A &lt;span style="font-weight: bold;"&gt;FULL MONTH&lt;/span&gt; has passed since the notice we had about Visual FiveWin, and we don´t have any news regarding it, ...... So far, the new Version 9.01 has been released with nothing more than more "buttons with bitmaps".....&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I hate to have reason....&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8440730375727994573-5662313206089082257?l=persistentobject.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://persistentobject.blogspot.com/feeds/5662313206089082257/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://persistentobject.blogspot.com/2009/01/que-tal-durmio-1.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8440730375727994573/posts/default/5662313206089082257'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8440730375727994573/posts/default/5662313206089082257'/><link rel='alternate' type='text/html' href='http://persistentobject.blogspot.com/2009/01/que-tal-durmio-1.html' title='How did you sleep ? - 1'/><author><name>Rene Flores</name><uri>http://www.blogger.com/profile/14824376932972599596</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://4.bp.blogspot.com/_HI3aCbIDUfY/SU7k5ZPauuI/AAAAAAAAAAk/Ft3zdbKZPJA/S220/blogger.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8440730375727994573.post-9210429669214529482</id><published>2009-01-19T00:00:00.000-08:00</published><updated>2009-01-19T00:00:02.267-08:00</updated><title type='text'>Visual FiveWin, Do you really need it ?</title><content type='html'>Maybe what I'm going to write here today doesn't like to many people, but, that's why I'm here.&lt;br /&gt;&lt;br /&gt;I've been following FiveTech's new project: Visual FiveWin, I've downloaded it, tested a little bit, and after reviewing it I think that call it "alpha release" is to be very optimistic (a lot), I would call it "pre-release alpha", it's still many nights, many research hours and many many maaaaany programming lines away to approach to sutff that products already have, such &lt;a style="font-weight: bold;" href="http://www.xharbour.com/index_vxh.asp?page=products_vxh_home_new&amp;amp;show_h=1"&gt;Visual xHarbour&lt;/a&gt; for example, for not to mention &lt;a style="font-weight: bold;" href="http://www.xailer.com/"&gt;Xailer&lt;/a&gt;, Visual xHarbour is an advanced work in progress but it's still far away of what Xailer has to offer actually, under this circumstances Visual FiveWin  has a long way to run.&lt;br /&gt;&lt;br /&gt;I' aware that  to build an IDE (Integrated Development Enviroment)  it's not a piece of cake nor a single programmer work, Xailer's team took over two years to have a working product, Visual xHarbour has taken the same amount of time and it's not ready yet, &lt;a href="http://www.alaskasoftware.com/products/xpp/formdes.shtm"&gt;&lt;span style="font-weight: bold;"&gt;Visual XBase++&lt;/span&gt;&lt;/a&gt;, almost 3 years in the oven and we haven't seen so much about it, some screenshots but that's all.&lt;br /&gt;&lt;br /&gt;To build an IDE requires a lot of commitment and dedication, not of a lot of programmers but  those should be highly skilled ones, I'm sorry if someone feels offended, but many of those FiveWin heads have already gone away.&lt;br /&gt;&lt;br /&gt;On the other hand, everybody knows how Antonio works, he starts working hard in a project, gives it all, makes some impresive stuff and after 2 months or less he gets bored and leaves it aside until he feels "the call" again, to mention: FiveWin Pocket PC, after FiveWin Harbour one of the most advanced products, useable, but still with a lot of lacks, FiveLinux, I don't really know how many people is using it and if the final applications are stable enough, what about FiveMac ?, knock knock, is someone out there doing something with FiveMac ?, by the way, does FiveTech has something really useable for Macintosh ?&lt;br /&gt;&lt;br /&gt;That's why I suppose that Visual FiveWin is an Open Source project (at least that says in Google Code, remember what happened in 2003 with the attempt to release FiveWin to Open Source) , I understand that without the collaboration of other programmers, Antonio, working alone, has a very hard way to go, please notice, I don't doubt about AL's programming skills, but I hardly believe that working alone, he could deliver a working IDE in a reasonable time.&lt;br /&gt;&lt;br /&gt;Now the question is..... Does FiveWin really needs an IDE ? or FiveTech has already noticed that EVERYBODY is going the IDE way (&lt;a style="font-weight: bold;" href="http://www.ciber-tec.com/xailer.htm"&gt;Xailer&lt;/a&gt;, &lt;a style="font-weight: bold;" href="http://www.harbourminigui.com/index.php?option=com_content&amp;amp;task=view&amp;amp;id=17&amp;amp;Itemid=30"&gt;MiniGUI&lt;/a&gt;, &lt;a style="font-weight: bold;" href="http://www.xharbour.com/index_vxh.asp?page=products_vxh_home_new&amp;amp;show_h=1"&gt;Visual xHarbour&lt;/a&gt;, &lt;a style="font-weight: bold;" href="http://www.c3compiler.com/"&gt;C3&lt;/a&gt;  and even the same &lt;a style="font-weight: bold;" href="http://www.alaskasoftware.com/products/xpp/formdes.shtm"&gt;Xbase++&lt;/a&gt;), and they don't want to be left away.&lt;br /&gt;&lt;br /&gt;Some time ago the IDE was not necesary, in Antonio's own words, and translated from his comments in the FiveWin's forum:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-style: italic;" class="postbody"&gt;FiveWin's working model is the same of Clipper's:&lt;br /&gt;&lt;br /&gt;* You can use the source code editor you want.&lt;br /&gt;* You can use a BAT or make file, or any make tool available for compiling.&lt;br /&gt;* Even it's based in object oriented programming, you are not forced to work with objects, but you can use xbase commands in a comfortable way.&lt;br /&gt;* The PRG files are available, there's no hidden files which  you cannot have access to.&lt;br /&gt;* It's "lineal" programming, not "thousand doors" programming such VB style.&lt;br /&gt;&lt;br /&gt;Think for a moment that this basic rules have made of Clipper a standard. CA-Visual Objects, for example tried to change these rules and look where is the product and the IDE today. The same happened to Visual dBase and Borland threw it away.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;Translated from &lt;a style="font-weight: bold;" href="http://www.fivetechsoft.com/forums/viewtopic.php?t=3722"&gt;FiveWin's forums&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;But today things are different, it' necesary to go the IDE way and sacrify FiveWin's advantages, as you will read later on, in order to have an IDE.... be careful, what happened to CA-Visual Objects or Visual dBase may happen again.&lt;br /&gt;&lt;br /&gt;Two years ago I wrote an article in the Spanish blog about this, the final question wasn't if FiveWin needs and IDE the real question was if the FiveWin programmer was ready to use an IDE, is the FiveWin programmer going to change ?, what's the price to pay for ?&lt;br /&gt;&lt;br /&gt;In our Xailer training we have noticed that it's easier to understand how the IDE works for the Clipper or (x)Harbour programmer that have never used FiveWin, same happens to the programmers comming from other visual enviroments such Visual Basic or Visual FoxPro, the FiveWin programmer has more difficult to understand the new programming style since they want to solve the problems the FiveWin's way. Myself, in my first attemps with Xailer used to work with dbf tables "by hand" (USE, APPEND, REPLACE, etc) until I discovered the DataControls, or used to write the source code myself to define a data browser, when Xailer has powerful tools to visually design a browse faster and effortless with the same final result.&lt;br /&gt;&lt;br /&gt;Some years ago, the pretext to keep using FiveWin was the supposed "total control" of all the aspects of the application programming, but of course, If you have to write ALL the application, with the single help of a resource editor such PellesC or Workshop, the programmer has all the control (until some "internal" or class fails), but.... in this times, when we have to work faster and deliver results in less time, how pratical is to be wasting such valuable time writing and writing lines and more lines of code when you have tools that do the job for you ?.&lt;br /&gt;&lt;br /&gt;Current FiveWin users that would want to use Visual FiveWin should be aware of:&lt;br /&gt;&lt;br /&gt;The programming style is QUITE different and the way to organize the application also is, then you have to change the way you think in order to use the IDE and get the most of it.&lt;br /&gt;&lt;br /&gt;Your current working applications made with FiveWin will not be able to be used with Visual FiveWin, then you will have two kind of applications: the "hand written" ones and the "visually designed" ones, you can, of course, to share programming routines between both, but these routines will be only "blind process" I mean, those that don't have a display output.&lt;br /&gt;&lt;br /&gt;For sure the IDE will not generate command-based code, I mean, you will not find a DEFINE WINDOW ..... instead of that, you will find hundreds of things like; TWindow():New(....), so, object oriented programming will be a NEED. This is an interesting point, in my personal experience with more than 5 years teaching FiveWin I've noticed that more than the 50% of the FiveWin programmers don't have any idea of what OOP is,  another great percentage uses it, but they don't really know what they are doing, they only "copy-paste" what they read in the newsgroups, if a oBrw:Refresh() solves the problem, good for it, add such line in the code, what does it ?, where it comes from ?, who cares !, solves the problem. Just a very little percentage has been brave enough to go into the deep of the product to modify current classes and even less FiveWin programmers are able to write their own classes. All the IDEs I know are 100% Object Oriented, if the most of the FiveWin programmers don't know how to work with OOP, how do they pretend to use an IDE ?&lt;br /&gt;&lt;br /&gt;What about those programmers with old versions of FiveWin ?, which ones ?, the ones of Harbour or the ones of xHarbour ?&lt;br /&gt;&lt;br /&gt;And this is a huge problem from the begining, what compiler are you using ?, Harbour or xHarbour ?, which version ?, because it's clear that every FiveWin programmer has his own (x)Harbour release, In my personal case I have 3 different releases of xHarbour installed on my computer, the one that works with Xailer, the one for console mode applications to be used with XEdit, and the one I use to support my legacy FiveWin applications. So, the IDE is going to work with which compiler version ?. This is not a problem for other IDEs, C3 uses it's own compiler, Xailer uses its own distribution of the Open Source xHarbour, and Visual xHarbour works with the xHarbor.com compiler release.&lt;br /&gt;&lt;br /&gt;Problem apart are the the FiveWin's libraries, migration from release 2.xx to a 7.xx or 8.xx release may be a real headache, because many classes have change form one version to another or they work in a different way, more functions and controls are added, etc..... to provide compatibility with previous releases will be a real nightmare, to be honest, If I were FiveTech, I would forget about backward compatibility, what for ?, just for testing porpuses ?, what if I make some enhacement supported by an old version that does't work with the newer versions ?, just imagine, if we have 4 releases of FiveWin every year, to support 3 years of previous releases you will need 12 versions of the IDE, not to mention the compiler: Harbour or xHarbour, who is going to keep updated the source code for every single version ?, it's complicated if not impossible.&lt;br /&gt;&lt;br /&gt;There's still a lot of work to do to have something useful, but I wonder:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;If my current working programs will not work with Visual FiveWin.&lt;/li&gt;&lt;li&gt;If I have to change my programming style and way of programming.&lt;/li&gt;&lt;li&gt;If I have to learn Object Oriented Programming&lt;/li&gt;&lt;li&gt;If Visual FiveWin will not be compatible with my current (x)Harbour version or with my current FiveWin libraries.&lt;/li&gt;&lt;li&gt;If I have to change all those things...&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;Why not to use a tool designed to be an IDE ? I mean, if you have to rebuild the full application because it will not work with Visual FiveWin, If you have to learn new stuff (OOP), and if there's no a release date of an stable version, why not to start the change today ?, actually you have 2 good options already available: Xailer and Visual xHarbour.&lt;br /&gt;&lt;br /&gt;I'm not pesimistic, but I think FiveWin is comming late to the (x)Harbour IDE party, let's wait to see if there's enough party for it, because it can be the last to come and the first to go, but, thus my wise grandma use to say... give it time.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8440730375727994573-9210429669214529482?l=persistentobject.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://persistentobject.blogspot.com/feeds/9210429669214529482/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://persistentobject.blogspot.com/2009/01/visual-fivewin-do-you-really-need-it.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8440730375727994573/posts/default/9210429669214529482'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8440730375727994573/posts/default/9210429669214529482'/><link rel='alternate' type='text/html' href='http://persistentobject.blogspot.com/2009/01/visual-fivewin-do-you-really-need-it.html' title='Visual FiveWin, Do you really need it ?'/><author><name>Rene Flores</name><uri>http://www.blogger.com/profile/14824376932972599596</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://4.bp.blogspot.com/_HI3aCbIDUfY/SU7k5ZPauuI/AAAAAAAAAAk/Ft3zdbKZPJA/S220/blogger.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8440730375727994573.post-2272860490115938722</id><published>2009-01-12T00:00:00.001-08:00</published><updated>2009-01-12T00:00:01.049-08:00</updated><title type='text'>Increase your programming productivity by using two monitors</title><content type='html'>During the last 10 years, since I could afford one, my personal programming computer has been a portable computer, a notebook or laptop, because of my job as a consultant I'm "on the move" very often.&lt;br /&gt;&lt;br /&gt;However not all the time I'm skiping around the world, belive it or not, I spend many hours working in our headquarters, and there I have external wireless keyboard and mouse connected to my laptop:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.ciber-tec.d2g.com/objeto/mskeybd.jpg" /&gt;&lt;br /&gt;My choice has always been the ergonomic Microsoft hardware, expensive, very expensive, but worth the price, the quality is great (better than Internet Explorer), if you haven't tried on of these "twisted" keyboards, and you spend more than 10 hours hiting keys, you don't really know what you have been missing, the first two days you feel strange, but after that you cannot live without them.&lt;br /&gt;&lt;br /&gt;Back in the age of the CRT monitors, I used to have an external monitor also, for two reasons: first, to give a little rest to the laptop screen, and second because some years ago, the monitors used to have a little more resolution than the laptop screen, that you could use, of course, if the laptop's external monitor adapter supported it.&lt;br /&gt;&lt;br /&gt;Many years I worked at 1024 x 768 in the lap's screen and at 1240 x 900 in the external monitor, it used to be very comfortable, the laptop screen and keyboard are used only when I'm away traveling or in Sunday's afternoon when looking for personal stuff in EBay.&lt;br /&gt;&lt;br /&gt;The last year we moved to a new office, so I wanted a high-tech facility and specially for myself, I wanted something like this:&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.ciber-tec.d2g.com/objeto/seven1.jpg" /&gt;&lt;br /&gt;&lt;br /&gt;No, It's not Bill Gates' office, nor Steve Jobs',  nor Tony Stark's (Iron Man), it's not the control center of NASA, it's the HomeOffice (yes ! you read it, it's a HOME OFFICE), and belongs to &lt;a style="font-weight: bold;" href="http://www.stefandidak.com/office/" target="_blank"&gt;Stefan Didak&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;First time I saw it I told myself.... I want one of those..., but, after reading in Stefan's web why he uses 7 screens, how he has conneted them, and what he uses them for, I noticed that 7 screens were too much for me, so my first attemp was with two monitors only.&lt;br /&gt;&lt;br /&gt;But... don't you already have two screens ?, the one of the laptop and the external monitor ?, yes of course, but I wanted  A HUGE secreen, if you noticed, in the previous image, the first 3 upper screens share the same wall paper, this means that those 3 screens work as a single one.&lt;br /&gt;&lt;br /&gt;WOW !, and how do you do that ?&lt;br /&gt;&lt;br /&gt;That's what I wanted to know, so I went to ask to the Google oracle, and I found some video adapters with "DUAL" output, this means that a single card has two output connections for the screens, my problem is that I always use a laptop, so, another solution had to be found, and I found it in a hardware device of  &lt;a href="http://www.matrox.com/"&gt;MATROX&lt;/a&gt; designed to be used with portable computers: the DualHead 2 Go&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.ciber-tec.d2g.com/objeto/DualHead2Go.jpg" /&gt;&lt;br /&gt;&lt;br /&gt;This little black box, takes the video signal of your laptop, and split it into two external screens and with the laptop screen you are done, you have 3 working screens attached to your computer.&lt;br /&gt;&lt;br /&gt;Please notice: the dual monitor works as a single screen, the wall paper covers the two screens and the Windows' menu bar also does it, the screen resolution is the sum of both, so, if every single screen has a resolution of 1240 x 900 the dual monitor is 2480 x 900, more pixels for your money !!!.&lt;br /&gt;&lt;br /&gt;The dual screen becomes the main screen, the secondary "extended" screen is now the laptop's screen, you can use it or not, if you need more working space.&lt;br /&gt;&lt;br /&gt;To turn off the laptop screen, simply close it and work only with the lap as a CPU.&lt;br /&gt;&lt;br /&gt;A great solution for only $ 179.00 USD, the price of the DualHead2Go in its analogic version, it comes with all the stuff needed to be working in 5 minutes after unpack it, after this great first experience I think I'm going to buy the digital version, for only $ 250.00 USD which supports higher resolutions.&lt;br /&gt;&lt;br /&gt;Size does matter, so if you want it bigger then you can use a........ not a pill, stop thinking on that.... you can use a TripleHead2Go, which works for desktop or portable computers, this how Flight Simulator 3 looks like in 3 screens using this device:&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.ciber-tec.d2g.com/objeto/3head2go.jpg" /&gt;&lt;br /&gt;Then I had to buy new screens, thus my laptop's is a 17 inches wide screen, I bought a couple of ACER X193W 19 inches Widescreen monitors, with a max resolution of 1240 x 900, I bought both in a Mercado Libre (Ebay Mexico) auction for only 240.00 USD BOTH, and because this invention has worked better than I expected, I plan to change them this year for two 24 inches screens.&lt;br /&gt;&lt;br /&gt;Two screens over your desk take A LOT of space, so I decided "to rise" them over the desk to make more space and to work in a more comfortable way. I used a two screen VESA compatible support, like this:&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.ciber-tec.d2g.com/objeto/soporte.jpg" /&gt;&lt;br /&gt;&lt;br /&gt;The support attaches to the desk without any problem at all, you can modify the high to make them more comfortable, thanks to this, I earned about half a square meter for only $ 90.00 usd.&lt;br /&gt;&lt;br /&gt;Ok, so far so good, but until now all have been expenses, where's the so named productivity?&lt;br /&gt;&lt;br /&gt;The productivity comes when you start working with them, for example, I want to see how my Windows and Web applications look AT THE SAME TIME, so, I have my huge screen working and looks like this:&lt;br /&gt;&lt;br /&gt;Picture of two monitors showing two application screens:&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.ciber-tec.d2g.com/objeto/dual01.jpg" /&gt;&lt;br /&gt;&lt;br /&gt;If I make a Print-Screen of the full desktop, then I have a giant desktop that looks like this:&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.ciber-tec.d2g.com/objeto/dualchica1.jpg" /&gt;&lt;br /&gt;&lt;br /&gt;Working with MS Office is a breeze, using Word you can view 2, 3, o 4 sheets in your document at the same time, and as you can see in the next picture, with Excel you can have visible from column A to column AC:&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.ciber-tec.d2g.com/objeto/dual02.jpg" /&gt;&lt;br /&gt;&lt;br /&gt;If you Print-Screen, you get this:&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.ciber-tec.d2g.com/objeto/dualchica2.jpg" /&gt;&lt;br /&gt;&lt;br /&gt;Working with Xailer is great, you can view the IDE in a single screen and the form designer in other, or you can see the debugger screen in one monitor and the running program in other, this is quite good and save you a lot of time.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.ciber-tec.d2g.com/objeto/dual03.jpg" /&gt;&lt;br /&gt;&lt;br /&gt;The Print-Screen is this:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.ciber-tec.d2g.com/objeto/dualchica3.jpg" /&gt;&lt;br /&gt;&lt;br /&gt;Where is the save of time ?, well, you can view and work with 2, 3 or any number of applications you want at the same time:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.ciber-tec.d2g.com/objeto/dualgrande4.jpg" /&gt;&lt;br /&gt;&lt;br /&gt;For example, you can check your email while you are surfing the internet at the same time, if you need to share information between two applications with two monitors is easier, avoiding you thousands of Alt+Tab.&lt;br /&gt;&lt;br /&gt;Advantages:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Increase the viewing area.&lt;/li&gt;&lt;li&gt;The productivity increases at least in a 20% or more, assured.&lt;/li&gt;&lt;li&gt;You can perform 2 or more tasks at the same time, by having every application maximized in a single screen.&lt;/li&gt;&lt;li&gt;In some cases this could be less expensive than a single monitor with the same viewing area.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Disadvantages:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;The use of a dual monitor can takes a lot of space in your desk, but you can solve it using a support, and instead of losing space, you earn more.&lt;/li&gt;&lt;li&gt;Two monitors consume more energy (but if Stefan Didak doesn't care about it, I don't do it either).&lt;/li&gt;&lt;li&gt;It can be expensive, because you need extra hardware to make the dual monitor to work.&lt;/li&gt;&lt;li&gt;It also implies cervical micro movements, that may cause neckache (no simptoms until now).&lt;/li&gt;&lt;/ul&gt;I'm very happy with my current configuration, a huge dual screen monitor, and if needed, a third one, the next step si to buy bigger monitors 22 or 24 inches.&lt;br /&gt;&lt;br /&gt;Now I work faster and more comfortable.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8440730375727994573-2272860490115938722?l=persistentobject.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://persistentobject.blogspot.com/feeds/2272860490115938722/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://persistentobject.blogspot.com/2009/01/increase-your-programming-productivity.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8440730375727994573/posts/default/2272860490115938722'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8440730375727994573/posts/default/2272860490115938722'/><link rel='alternate' type='text/html' href='http://persistentobject.blogspot.com/2009/01/increase-your-programming-productivity.html' title='Increase your programming productivity by using two monitors'/><author><name>Rene Flores</name><uri>http://www.blogger.com/profile/14824376932972599596</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://4.bp.blogspot.com/_HI3aCbIDUfY/SU7k5ZPauuI/AAAAAAAAAAk/Ft3zdbKZPJA/S220/blogger.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8440730375727994573.post-219718903661442460</id><published>2009-01-07T00:00:00.000-08:00</published><updated>2009-01-07T00:00:01.610-08:00</updated><title type='text'>It's time to get Funcky.... again</title><content type='html'>&lt;div class="post-body entry-content"&gt; In the old Clipper times, one of the most appreciated libraries for Clipper was Funcky.&lt;br /&gt;&lt;br /&gt;For sure, Funcky was one of the most complete function libraries with more than 1000 different functios for almost everything. The time has passed and about 5 years ago, Funcky's author, Dirk Lesko, created a new version of Funcky for Windows programming languages.&lt;br /&gt;&lt;br /&gt;Release 6.0 of Funcky is the result of 2 years of development, it's not longer a LIB, now is a COM component that you can use via OLE form any programming language: C++, Visual Basic, Delphi, Visual Objects, etc.&lt;br /&gt;&lt;br /&gt;(x)Harbour is not a very well known programming language yet (only by us), and if you visit the &lt;a style="font-weight: bold;" href="http://www.funcky.com/"&gt;Funcky's web page&lt;/a&gt;, you will see that (x)Harbour is not mentioned in the list of the compatible programming languages, but thinking that there's a Funcky version for Borland C++, is not difficult to imagine that you can use it with xHarbour.&lt;br /&gt;&lt;br /&gt;Funcky 6.0 includes a LIB file to be linked to a Borland C++ application, to use it with xHarbour you need to wrap all the functions, but the best and easier way to use Funcky in your xHarbour applications is via OLE.&lt;br /&gt;&lt;br /&gt;Funcky works not only for graphical Windows applications, you can use it also for your xHarbour console based applications or with Web based applications.&lt;br /&gt;&lt;br /&gt;Funcky has A BUNCH of functions (in fact, they are "methods" of the Funcky object) for A LOT of stuff, some functions are quite useful, some other are just for fun, but it's interesting to look at them. Funcky has several objects in the complete library, to use them is very easy:&lt;br /&gt;&lt;br /&gt;oFuncky := TOleAuto():New("Funcky")&lt;br /&gt;&lt;br /&gt;or&lt;br /&gt;&lt;br /&gt;oFuncky := CreateObject("Funcky")&lt;br /&gt;&lt;br /&gt;And you are done !, all the functions are "encapsulated" into the oFuncky variable, for example, if we want to get a list of all the storage units of your computer (drives, hard disk, memory cards, mapped drives, etc.) we will use the method: &lt;em&gt;AllDrives()&lt;/em&gt;, like this  :&lt;br /&gt;&lt;br /&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;cDrives := oFuncky:AllDrives()&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;And this method will return a string with all the letters of the current active storage units ("a: c: d: w:" for example), the Funcky object alone has over 400 methods to do a lot of stuff, the manual is self explained and documents all the features of the library.&lt;br /&gt;&lt;br /&gt;But Funcky is only one object, inside the component there's also another 30 specialized objects, with their owns methods, events and datas. There's an object for any programming task you can imagine.&lt;br /&gt;&lt;br /&gt;Let's do something more complex, for example to get the trace route to an IP address, to do so, we can use an FunckyTraceRoute object, like this:&lt;br /&gt;&lt;br /&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;oFunckyTrace := TOleAuto():New("FUNCkyTraceRoute") &lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;nTotal = 0&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;aTrace := {}&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;oFunckyTrace:FindFirst("ciber-tec.com")&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;DO WHILE oFunckyTrace:Found()&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;   AADD(aTrace,oFunckyTrace:Name+" "+ALLTRIM(STR(oFunckyTrace:RTT))+" ms") &lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;   oFunckyTrace:FindNext()&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;ENDDO&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;Achoice(0,0,50,50,aTrace)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Want a list of all the printers installed in your computer ?, then we use the FunckyFindPrinter object, now in the xHarbour way:&lt;br /&gt;&lt;br /&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;aPrinters := {}&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:Courier New;font-size:85%;"  &gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;WITH OBJECT oFunckyPrinters := TOleAuto():New("FUNCkyFindPrinter")&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;&lt;br /&gt;:FindFirst()&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;DO WHILE :Found()&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;&lt;br /&gt;AADD(aPrinters, :Name())&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;   :FindNext()&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;&lt;br /&gt;ENDDO&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;END WITH&lt;br /&gt;&lt;br /&gt;AChoice (0,0,50,05,aPrinters)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;As you may noticed, to use Funcky is very easy, the documentation is very useful, complete and comes with samples for all the methods, it comes in a Windows help file so you can read it any time you need it. There's no an xHarbour specific documentation, but you can use the samples of Visual Basic or Delphi with minor fixes.&lt;br /&gt;&lt;br /&gt;One of the main advantages of Funcky is that the values used as parameters to the methods, and the values returned by them are only of 3 data types: Logical, Character or Numeric, so you don't need to struggle with "C" data types such bytes, chars, longs, doubles, etc.&lt;br /&gt;&lt;br /&gt;I've written a little sample of how to use Funcky with FiveWin, you can download it&lt;strong&gt;&lt;a href="http://www.ciber-tec.d2g.com/funckydemo.zip"&gt; clicking here&lt;/a&gt;&lt;/strong&gt;, source code is included and the EXE file also, in case you don't have a way to recompile it, but be aware that you will need to have Funcky installed in your computer.&lt;br /&gt;&lt;br /&gt;Funcky is a COM component so you will have to install and register it in all the computers that use your program.&lt;br /&gt;&lt;br /&gt;If you don't have Funcky, you can download a "lite" version from &lt;a style="font-weight: bold;" href="http://www.funcky.com/"&gt;www.funcky.com&lt;/a&gt;, this lite version is not the full featured one, but has A LOT of nice useful functions such e-mail sending and others you can use and distribute for free in all your programs.&lt;br /&gt;&lt;br /&gt;The full product is available for 349.00 USD, if you still have you old Funcky for Clipper version, you only pay 149.00 USD, to be honest, worth the price.&lt;br /&gt;&lt;/div&gt;&lt;span class="post-timestamp"&gt;&lt;a class="timestamp-link" href="http://objetopersistente.blogspot.com/2005/03/its-time-to-get-funcky-again.html" rel="bookmark" title="permanent link"&gt;&lt;abbr class="published" title="2005-03-29T18:05:00-06:00"&gt;&lt;/abbr&gt;&lt;/a&gt; &lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8440730375727994573-219718903661442460?l=persistentobject.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://persistentobject.blogspot.com/feeds/219718903661442460/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://persistentobject.blogspot.com/2009/01/its-time-to-get-funcky-again.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8440730375727994573/posts/default/219718903661442460'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8440730375727994573/posts/default/219718903661442460'/><link rel='alternate' type='text/html' href='http://persistentobject.blogspot.com/2009/01/its-time-to-get-funcky-again.html' title='It&apos;s time to get Funcky.... again'/><author><name>Rene Flores</name><uri>http://www.blogger.com/profile/14824376932972599596</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://4.bp.blogspot.com/_HI3aCbIDUfY/SU7k5ZPauuI/AAAAAAAAAAk/Ft3zdbKZPJA/S220/blogger.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8440730375727994573.post-5195508596101443888</id><published>2009-01-05T14:04:00.000-08:00</published><updated>2009-01-05T14:55:38.003-08:00</updated><title type='text'>New Xailer 2.0 beta 2 now available.</title><content type='html'>Today the &lt;a href="http://www.ciber-tec.com/xailereng.htm"&gt;&lt;span style="font-weight: bold;"&gt;Xailer&lt;/span&gt;&lt;/a&gt; Team has released what may could be the production version of the brand New &lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;Xailer 2.0&lt;/span&gt;&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;This new beta release is fully functional, and really works quite good, I took a project of an application now in production, compiled with the previous Xailer 1.98 with over 20 .PRG files and it compiled and ran as expected under the 2.0 beta. Compiling and linking process were faster (20.1 seconds to compile and link the entire application) because of the new &lt;a style="font-weight: bold;" href="http://xailer.info/eng/?p=33"&gt;"multithreating" compilation system&lt;/a&gt; included in the new Xailer 2.0 and in xEdit also.&lt;br /&gt;&lt;br /&gt;One of the most remarkable features of this beta is its ability to create DLL files with code and resources that work with Xailer made applications, this can be very useful specially if you have your own shared routines, you don't need to include the source code of your common functions nor to link a .LIB file either, please notice that this kind of DLL can only be used by Xailer applications because the runtime is in the EXE.&lt;br /&gt;&lt;br /&gt;I personally liked the new HTML exportation feature, now included in the TRichEdit class I will use it in my masive e-emailing program, now I can send messages with plain text and with HTML also, edited with  the same mailing application.&lt;br /&gt;&lt;br /&gt;Some other things are coming soon, for example the visual report designer which is in a very advanced stage, I suppose it'll be ready for the final release, which will be released sooner than you think, and when I say sooner it'll be really sooner.&lt;br /&gt;&lt;br /&gt;The Xailer 2.0 beta is now ready to download, but to try it you must be a current Xailer's 1.98 user and you suscription to the support and updates service must be active also.&lt;br /&gt;&lt;br /&gt;More information about this new release and to download this new release, please visit &lt;a style="font-weight: bold;" href="http://xailer.info/eng/?p=37"&gt;Xailer's blog&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;But wait a minute.... today is a holidays in the most of the Spanish speaking countries, today is the &lt;a style="font-weight: bold;" href="http://en.wikipedia.org/wiki/Biblical_Magi"&gt;Three Wise Men day&lt;/a&gt;, in the very latin tradition, this magicians comming form middle east used to bring presents to the good guys, so be attent, the wise men will bring a GREAT SURPRISE to all the Xailer and non Xailer's users very soon, keep in touch.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8440730375727994573-5195508596101443888?l=persistentobject.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://persistentobject.blogspot.com/feeds/5195508596101443888/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://persistentobject.blogspot.com/2009/01/new-xailer-20-beta-2-now-available.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8440730375727994573/posts/default/5195508596101443888'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8440730375727994573/posts/default/5195508596101443888'/><link rel='alternate' type='text/html' href='http://persistentobject.blogspot.com/2009/01/new-xailer-20-beta-2-now-available.html' title='New Xailer 2.0 beta 2 now available.'/><author><name>Rene Flores</name><uri>http://www.blogger.com/profile/14824376932972599596</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://4.bp.blogspot.com/_HI3aCbIDUfY/SU7k5ZPauuI/AAAAAAAAAAk/Ft3zdbKZPJA/S220/blogger.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8440730375727994573.post-4378581066522229063</id><published>2009-01-03T14:35:00.000-08:00</published><updated>2009-01-04T13:24:16.154-08:00</updated><title type='text'>Raiders of the Lost Services</title><content type='html'>Several days ago, a good friend of mine, placed a question in a newsgroup about getting access to the Windows Services installed in his computer. His question was simple: He just wanted to know if certain service, installed by himself, were running or not, and in case it wasn't running, he wanted to start it, but using his own source code without the need to run the SERVICES program in the Control Panel.&lt;br /&gt;&lt;br /&gt;He found some answers, but no really "THE" answer.&lt;br /&gt;&lt;br /&gt;Then I remembered that other friend of mine, Rafa Carmona (a.k.a. TheFull), had posted a very interesting sample in the Xailer's news group about how to access to the Windows Services using the WMI (Windows Management Instrumentation), which is, simplifying, a Windows API to handle different components of the Operating System using OLE.&lt;br /&gt;&lt;br /&gt;Reviewing the Xailer's sample, I noticed how easy is to gain access to a bunch of the Operating System features, and even manipulate them, like the services themselves.&lt;br /&gt;&lt;br /&gt;Let's see a simple example, you may wish to download a more complex sample later on, keep reading.&lt;br /&gt;&lt;br /&gt;To connect to WMI you have to create an OLE object first, and in xHarbour you do it like this:&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;oWMI := CreateObject ("wbemScripting.SwbemLocator")&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This just creates the object, now we have to "connect" to it:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;oWMICon := oWMI:ConnectServer()&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;WMI is a HUGE interface, there are several interesting objects in the system, a full reference and documentatio can be found in the MSDN (Microsoft Developer's Network), I'll save you from wasting time looking into MSDN for the docs, simply &lt;a style="font-weight: bold;" href="http://msdn.microsoft.com/en-us/library/aa394582%28VS.85%29.aspx"&gt;click here&lt;/a&gt; and you will be redirected to the WMI docs in the MSDN.&lt;br /&gt;&lt;br /&gt;The next step is to select the service we want, in our case, we want the "handling services" service, so we get all the services installed in our computer with a simply SQL query, something like this:&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;oServices := oWMICon:ExecQuery("Select * from Win32_Service")&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;That easy !, this query will return in oServices an array with "service objects", every object returned has its own methods and data that you can handle to get the results you want.&lt;br /&gt;&lt;br /&gt;Let's play with them For example to get a list of the current installed services and their current state, we can do something like this:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;For each objService in oServicios&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;? objService:DisplayName +": "+objService:State&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Next&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;You can also start, stop, resume and pause services using the :StartService(), :StopService(), :ResumeService() or :PauseService() methods, and of course you can create your own services and delete current ones with :CreateService() and :DeleteService(), the complete reference to methos and classes is available &lt;a href="http://msdn.microsoft.com/en-us/library/aa394418%28VS.85%29.aspx"&gt;&lt;span style="font-weight: bold;"&gt;clicking here&lt;/span&gt;&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Here is a more interesting sample: Let's suppose we want to start the Advantage Database Server service if it's stopped, then we can do something like this:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;oWMI := CreateObject ("wbemScripting.SwbemLocator")&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;oWMICon := oWMI:ConnectServer()&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;oADSServ := oWMICon:ExecQuery("Select * from Win32_Service where DisplayName = 'Advantage Database Server'")&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;IF oADSServ:State == "Stopped"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;oADSServ:StartService()&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;ENDIF&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Rafa has written a very interesting sample in Xailer, simply &lt;a style="font-weight: bold;" href="http://www.ciber-tec.d2g.com/objeto/servicios.zip"&gt;click aquí&lt;/a&gt; to get it. If you don't have or don't want to install Xailer to take a look at it, don't worry I have included also the EXE file, the Xailer proyect and of course, the source code in PRG files is included in the ZIP file.&lt;br /&gt;&lt;br /&gt;Thanks Rafa for such a great sample !!!!&lt;br /&gt;&lt;br /&gt;And Thanks to Mel Smith for helping with the right translation !!!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8440730375727994573-4378581066522229063?l=persistentobject.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://persistentobject.blogspot.com/feeds/4378581066522229063/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://persistentobject.blogspot.com/2009/01/raiders-of-lost-services.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8440730375727994573/posts/default/4378581066522229063'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8440730375727994573/posts/default/4378581066522229063'/><link rel='alternate' type='text/html' href='http://persistentobject.blogspot.com/2009/01/raiders-of-lost-services.html' title='Raiders of the Lost Services'/><author><name>Rene Flores</name><uri>http://www.blogger.com/profile/14824376932972599596</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://4.bp.blogspot.com/_HI3aCbIDUfY/SU7k5ZPauuI/AAAAAAAAAAk/Ft3zdbKZPJA/S220/blogger.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8440730375727994573.post-4146269576653029726</id><published>2008-12-31T19:00:00.000-08:00</published><updated>2009-01-01T23:09:04.706-08:00</updated><title type='text'>Xailer OpenHouse now in Madrid, Spain</title><content type='html'>You may already know that monthly we are organizing an "Open House" to show all the &lt;a style="font-weight: bold;" href="http://www.ciber-tec.com/xailereng.htm"&gt;Xailer's &lt;/a&gt;capabilities in our headquarters in Mexico City.&lt;br /&gt;&lt;br /&gt;An OpenHouse is a meeting of programmer pals to show what we, and other current Xailer's users are doing.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.ciber-tec.d2g.com/objeto/oh1.jpg" /&gt;&lt;br /&gt;&lt;span style="font-size:78%;"&gt;In our class room, talking about programming&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;We open our office and invite you to visit us, see our hardware, servers, how we work and what are we currently doing and  to talk about programming.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.ciber-tec.d2g.com/objeto/oh2.jpg" /&gt;&lt;br /&gt;&lt;span style="font-size:78%;"&gt;Softdrinks, sandwiches, and other programmer's food is offered to the assitants&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The goal of the OpenHouse is also to discuss about better programming techniques, talk about interesting tools that we can use, and share some knowledge about Xbase programming.&lt;br /&gt;&lt;br /&gt;Many users have asked us about to offer the Open House in other cities (I know Mexico is very far far away of the rest of the world) so,  the Xailer Team, based in &lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;MADRID, Spain&lt;/span&gt;&lt;/span&gt; (I know that Madrid is also far away of some countries in the world, but at least, it's in Europe) will offer an OpenHouse in Madrid for all of the programmers interested in Xailer.&lt;br /&gt;&lt;br /&gt;The OpenHouse is A FREE EVENT, cost nothing to you, and you will have the oportunity to meet the Xailer's authors in person and learn directly from them what you can do with this powerful Integrated Developement Enviroment for xHarbour.&lt;br /&gt;&lt;br /&gt;The OpenHouse will be held in the second half of January (I don't know the exact date), but if you want to assist, please inquire for more information to &lt;a href="mailto:sales@xailer.com"&gt;sales@xailer.com&lt;/a&gt; or &lt;a href="mailto:ventas@xailer.com"&gt;ventas@xailer.com&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Come and enjoy of a great weekend in Madrid, attend to the Open House in the morning and then have a great night enjoying Madrid "movida", it's a lot of fun specially in weekend nights with great places to have a typical spanish dinner and then go for a drink.&lt;br /&gt;&lt;br /&gt;I also will be in Spain in  the second half of January, but I'm not sure I'm able to assist to the OpenHouse because I'll be in a Xailer training in other city (San Sebastian) from January 22 to February 1.&lt;br /&gt;&lt;br /&gt;So you are invited and we I'd like to see you see you there.&lt;br /&gt;&lt;br /&gt;By the way, the January's Open House in Mexico will be on January 10th, Saturday, from 11 am until the last programmer want to go.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8440730375727994573-4146269576653029726?l=persistentobject.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://persistentobject.blogspot.com/feeds/4146269576653029726/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://persistentobject.blogspot.com/2008/12/xailer-openhouse-now-in-madrid-spain.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8440730375727994573/posts/default/4146269576653029726'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8440730375727994573/posts/default/4146269576653029726'/><link rel='alternate' type='text/html' href='http://persistentobject.blogspot.com/2008/12/xailer-openhouse-now-in-madrid-spain.html' title='Xailer OpenHouse now in Madrid, Spain'/><author><name>Rene Flores</name><uri>http://www.blogger.com/profile/14824376932972599596</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://4.bp.blogspot.com/_HI3aCbIDUfY/SU7k5ZPauuI/AAAAAAAAAAk/Ft3zdbKZPJA/S220/blogger.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8440730375727994573.post-8288733690134198458</id><published>2008-12-31T03:35:00.000-08:00</published><updated>2008-12-31T18:56:14.228-08:00</updated><title type='text'>xHarbour's DateTime data types</title><content type='html'>One of the most valuable features of our loved CA-Clipper is, no doubt, its ability to work with date data types, using this feature you can add or substract days to a given date, or even get the difference in days between two dates with a single substract operation.&lt;br /&gt;&lt;br /&gt;In those days this feature was really appreciated and it's still in our days.&lt;br /&gt;&lt;br /&gt;But times change, and today we can use xHarbour along with ADO (Activex Data Objects) and using both we can have access to a different SQL based databases, this comes with some "issues" regarding data handling that may be, by reading this article, I can help you to solve.&lt;br /&gt;&lt;br /&gt;Most of the SQL tables support fields with the typical Xbase data types (character, numeric, logical, date and memo), but also they support other data types such float, integer, char, string, and the reason to publish this article: &lt;span style="font-weight: bold;"&gt;DateTime&lt;/span&gt; data types.&lt;br /&gt;&lt;br /&gt;A DateTime field stores exactly that, a field with two elements merged: the date and the time.&lt;br /&gt;&lt;br /&gt;xHarbour provides of a full support to DateTime data types, we must be a little bit careful using them, but the truth is that to understand the concept is very easy.&lt;br /&gt;&lt;br /&gt;Sintax:&lt;br /&gt;&lt;br /&gt;A DateTime requires a special format which is:&lt;br /&gt;&lt;br /&gt;{^ YYYY/MM/DD  HH:MM:SS.CCC [AM|PM] }&lt;br /&gt;&lt;br /&gt;The information goes between {} signs and after the first { comes a ^ symbol.&lt;br /&gt;&lt;br /&gt;In these data types, the date ALWAYS comes first, the format must always be: YEAR-MONTH-DAY, the year always must be indicated with 4 digits, 2 more digits are used for the month and 2 for the day, the separator always is "/" (slash) no other separator can be used, the format of the date in the DateTime variable is always the same, regardless the format stablished using SET DATE or SET EPOCH, these "sets" commands only affect the DATE data types.&lt;br /&gt;&lt;br /&gt;After the date, comes the time, a blank space is used as a separator between them; the time format is HOUR-MINUTE-SECOND-MILISECOND, seconds can be expressed also with 3 digits decimals for the miliseconds.&lt;br /&gt;&lt;br /&gt;Time data can be used in 12 and 24 hours formats adding AM or PM, if you use the 24 hours format, then the time can be expressed like: 13:50 and no PM is required, otherwise, if you use the 12 hours format you must indicate AM for morning times and PM for afternoon times: 1:50 PM.&lt;br /&gt;&lt;br /&gt;Now let's see the "curiosities" about this kind of data type:&lt;br /&gt;&lt;br /&gt;You can remove the date part or the time part when writting a DateTime, and then, default values are used to "complete" the missing parts, if you remove the date, xHarbour will use 1899/12/30 as the default date, this is not a random given value, where does it come from ?, it's defined by Microsoft as the starting date for the OCX/ActiveX controls (which means that this kind of controls cannot older dates).&lt;br /&gt;&lt;br /&gt;If you remove the time, the defaul value is 00:00:00: midnight of the given date.&lt;br /&gt;&lt;br /&gt;DateTime values work  as date ones, you can add days, hours, minutes and seconds, and also, you can get the difference of days, hours, minutes, etc between two DateTime values.&lt;br /&gt;&lt;br /&gt;To use DateTime data types in a data table, the field has to be defined as "T" type (supported by the most of the SQL based databases and Advantage Database Server), the value can be stored directly into the field without a previous convert operation. For example, if you are using ADO to handle a SQL table with xHarbour you can use something like this:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;oRs:Fields("dtetme"):Value := {^ 2008/01/24 21:30}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;As well as there's a DATE() function, which returns the current computer's date, and a function TIME() which returns the current time, xHarbour has the function DATETIME() that does exactly what you are thinking: returns the computer's date and time as a DateTime data type, so you can do things like these:&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;dtToday := DATETIME() &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Remember Clipper's CTOD() and DTOC() functions, used to convert from Character to Date and Date to Character ?, well in xHarbour we have something similar: CTOT() (Character to DateTime) and TOTC() (DateTime to Character):&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;dtDate := CTOT("2008/01/24 01:50 PM")&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;cDateTime := TOTC(DATETIME()) // returns: "2008/01/24 21:30"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;What comes now may be helpful for you:&lt;br /&gt;&lt;br /&gt;One of the greatest headaches of the Clipper Programmer is that they don't know the difference between DTOC() and DTOS() functions, so they have problems when indexing DBF files using a date field as the index key, same can happen to DateTime data.&lt;br /&gt;&lt;br /&gt;DTOC() returns a date as a charater WITH THE FORMAT GIVEN IN SET DATE COMMAND, this means that:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;SET DATE BRITISH&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;cDate1 := DTOC(DATE())&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;? cDate1  // "24/01/08"&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;SET DATE FRENCH&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;cDate2 := DTOC(DATE())&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt; ? cDate2 // "24-01-08"&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;SET DATE ANSI&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;cDate3 := DTOC(DATE())&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt; ? cDate3 // "08:01:24"&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;SET DATE AMERICAN&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;cDate4 := DTOC(DATE())&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt; ? cDate4 // "01/24/08"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;You always get a formated character string acording to the SET DATE given, this is not a valid index key because if you forget to SET the DATE to the right format in your application, or other program uses the same data table and doesn't have the right SET DATE, you will have difficults to find the records in the table, getting wrong results.&lt;br /&gt;&lt;br /&gt;The right way to create an index under a date field is using the DTOS() function, which returns a character string with the date IN SAME TABLE'S STORED FORMAT.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;SET DATE BRITISH&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;cDate1 := DTOS(DATE())&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;?cDate1 // "20080124"&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;SET DATE ANSI&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;cDate2 := DTOS(DATE())&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;?cDate2 // "20080124"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;SET DATE FORMAT AA-DD-MM&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;cDate3 := DTOS(DATE())&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;?cDate3 // "20080124&lt;/span&gt;"&lt;br /&gt;&lt;br /&gt;No, it's not a mistake, DTOS always returns the date in the format YYYYMMDD, this is the format used to store dates in a DBF table, and that's why the Date fields are 8 positions long, because 4 digits are used for the year (century included), 2 for the month, and 2 more for the day, separators ARE NOT STORED (sorry if you thought other thing), separators are given by the SET DATE command.&lt;br /&gt;&lt;br /&gt;Back to the DateTime world, xHarbour has similar functions: TTOS() and STOT()&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;cDT := TTOS(DATETIME()) // returns: "20080124212900"&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;dtDateTim := STOT("20080417231530") // returns {^ 2008/04/17 23:15:30}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;And finally some interesting samples of operations between DateTime values, taken from &lt;a style="font-weight: bold;" href="http://www.xharbour.com/xhdn/referenceguide/"&gt;xHarbour manual&lt;/a&gt; (a must to have, buy your copy today !).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;PROCEDURE Main&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;LOCAL d1, d2, nDiff&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;SET CENTURY ON      &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt; SET TIME FORMAT TO "hh:mm:ss.ccc"&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;? DateTime()                      // returns: {^ 2008/01/24 21:37:55}&lt;br /&gt;? {ˆ 2007/04/26}                  // returns: 04/26/2007&lt;br /&gt;? {ˆ 05:30:12.345}                // returns: 12/30/1899 05:30:12.345&lt;br /&gt;? {ˆ 05:30:12.345 PM}             // returns: 12/30/1999 17:30:12.345&lt;br /&gt;&lt;br /&gt;** Empty values&lt;br /&gt;&lt;br /&gt;? d1 := {ˆ 0/0/0 }                // returns:   /  /&lt;br /&gt;? Empty( d )                      // returns: .T. &lt;br /&gt;&lt;br /&gt;** Operations&lt;br /&gt;&lt;br /&gt;? d1 := {ˆ 2007/04/26 18:30:00 } //returns: 04/26/2007 18:30:00.000&lt;br /&gt;? d2 := StoD("20070426") // returns: 04/26/2007&lt;br /&gt;? nDiff := d1-d2, "days"          // returns: 0.77 días&lt;br /&gt;? TString( nDiff*86400 )          // returns: 18:30:00 &lt;br /&gt;&lt;br /&gt;** Adding 2 days to a DateTime&lt;br /&gt;? d1 + 2                          // returns: 04/28/2007 18:30:00.000 &lt;br /&gt;&lt;br /&gt;** Adding 2 hours to aDateTime&lt;br /&gt;? d1 + 2/24                       // returns: 04/26/2007 20:30:00.000 &lt;br /&gt;&lt;br /&gt;** Adding 2 minutes to a DateTime&lt;br /&gt;? d1 + 2/(24*60)                  // returns: 04/26/2007 18:32:00.000&lt;br /&gt;&lt;br /&gt;** Adding 2 seconds to a DateTime&lt;br /&gt;? d1 + 2/(24*3600)                // returns: 04/26/2007 18:30:02.000&lt;br /&gt;&lt;br /&gt;RETURN &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Before you start asking, the answer is YES: ALL this stuff can be used in xHarbour console mode, Xailer and MiniGUI, in FiveWin only works if you are using xHarbour, not Harbour (DateTime are not supported yet, as far as I know).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8440730375727994573-8288733690134198458?l=persistentobject.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://persistentobject.blogspot.com/feeds/8288733690134198458/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://persistentobject.blogspot.com/2008/12/xharbours-datetime-data-types.html#comment-form' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8440730375727994573/posts/default/8288733690134198458'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8440730375727994573/posts/default/8288733690134198458'/><link rel='alternate' type='text/html' href='http://persistentobject.blogspot.com/2008/12/xharbours-datetime-data-types.html' title='xHarbour&apos;s DateTime data types'/><author><name>Rene Flores</name><uri>http://www.blogger.com/profile/14824376932972599596</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://4.bp.blogspot.com/_HI3aCbIDUfY/SU7k5ZPauuI/AAAAAAAAAAk/Ft3zdbKZPJA/S220/blogger.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8440730375727994573.post-4360382069181111380</id><published>2008-12-30T11:10:00.000-08:00</published><updated>2008-12-30T11:10:34.050-08:00</updated><title type='text'>Welcome to Persistent Object !!!!!</title><content type='html'>Hi !!!!, happy new year 2009,  and welcome to Persistent Object.&lt;br /&gt;&lt;br /&gt;This blog is the english version of &lt;a style="font-weight: bold;" href="http://www.objetopersistente.blogspot.com/"&gt;Objeto Persistente&lt;/a&gt;,  my other blog in Spanish language in which I've been blogging about Xbase Technologies since 2005.&lt;br /&gt;&lt;br /&gt;During the last 3 years the Spanish blog has had over 160 thousand visitors (around 4000 monthly) but during these last months I've noticed that A LOT of non spanish-speakers have come to visit my blog interested in the topics covered there, so, I've decided to start this new year with an English version of the same blog.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;But... who am I anyway ?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Well I'm basically an Xbase programmer, focused mainly in CA-Clipper and (x)Harbour, but I've been working also with Xbase++, Visual FoxPro and other Xbase languages.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Are you kind of a Guru or Advisor or something like that ?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Well, I'm far away to be called a &lt;span style="font-style: italic;"&gt;guru,&lt;/span&gt; I think on myself as a "highly skilled programmer" or as a "Clippersaurus" if you prefer.&lt;br /&gt;&lt;br /&gt;I've been working with Xbase tech over 20 years now, first with Clipper, today with Xailer and (x)Harbour. I have been speaker  in more than 1000 seminars and training series for Clipper, FiveWin, Xailer and (x)Harbour in countries such United States, Italy, India, Spain, Mexico, Panama, Colombia, Venzuela, Chile, Argentina and Bolivia.&lt;br /&gt;&lt;br /&gt;My company is an Xbase Consulting firm since 1994 and we use Xbase for all our current projects, in fact, today we have over 10 active consulting projects running in different countries (Spain and Mexico mostly) for different companies, private and goverment, our customers are from single programmers, midsize companies or big ones such Ford, Bayer, Gedas, Honda, Zurich Insurance, Buenavista Entertainment and others.&lt;br /&gt;&lt;br /&gt;All our projects are handle with Xbase language: We do windows programming with Xailer (we used to work with FiveWin, but not any more), we do Web programming with (x)Harbour, and we do client-server projects with Advantage Database Server or with any ADO-enable SQL DataBase.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;What you will find here ?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Well, a little bit of everything, some stuff about Xbase technologies, programming tips, some gossips about our programming world, reviews of nice and useful programming tools you can use in your daily work with (x)Harbour among other things.&lt;br /&gt;&lt;br /&gt;Many of the articles you will find here have been already published in the Spanish blog, some are very "hot topics" and all of you are invited to post your comments, good or bad, but in a mutual respect enviroment, I want to hear about you and what you think about my posts.&lt;br /&gt;&lt;br /&gt;You will find a weekly articles (I hope), I'll do my best to have something interesting every week and I'd like you to come very often and check what's new, don't forget to sindicate this site so you will always know whenever there's something new.&lt;br /&gt;&lt;br /&gt;Having said that.... it's time to begin.... thanks for reading and welcome again to PERSISTENT OBJECT !!!!!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8440730375727994573-4360382069181111380?l=persistentobject.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://persistentobject.blogspot.com/feeds/4360382069181111380/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://persistentobject.blogspot.com/2008/12/welcome-to-persistent-object.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8440730375727994573/posts/default/4360382069181111380'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8440730375727994573/posts/default/4360382069181111380'/><link rel='alternate' type='text/html' href='http://persistentobject.blogspot.com/2008/12/welcome-to-persistent-object.html' title='Welcome to Persistent Object !!!!!'/><author><name>Rene Flores</name><uri>http://www.blogger.com/profile/14824376932972599596</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://4.bp.blogspot.com/_HI3aCbIDUfY/SU7k5ZPauuI/AAAAAAAAAAk/Ft3zdbKZPJA/S220/blogger.jpg'/></author><thr:total>0</thr:total></entry></feed>
