<?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-36856108</id><updated>2011-10-30T23:22:17.835-03:00</updated><category term='software de gestión'/><title type='text'>PuertoSur</title><subtitle type='html'>Comentarios sobre programación xBase y temas relacionados</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://puertosur.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36856108/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://puertosur.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Gustavo Valentin</name><uri>http://www.blogger.com/profile/01677653510781195786</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://1.bp.blogspot.com/_Rp8ZPcn5YCY/SmjNi6ZntgI/AAAAAAAAABU/glIo1ybb410/S220/Castromonte+cartel+foto+chica.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>57</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-36856108.post-331479776668227159</id><published>2009-07-31T08:33:00.002-03:00</published><updated>2009-07-31T08:48:19.961-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='software de gestión'/><title type='text'>Estudio de mercado</title><content type='html'>Siendo que la mayoría de nosotros hace software de gestión les copio un interesante estudio sobre quien es quien como proveedor de software:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.evaluandoerp.com/nota-576-Quien-es-quien-como-proveedor-de-software.html"&gt;http://www.evaluandoerp.com/nota-576-Quien-es-quien-como-proveedor-de-software.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Fuente: &lt;a href="http://www.evaluandoerp.com"&gt;Evaluando ERP&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36856108-331479776668227159?l=puertosur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://puertosur.blogspot.com/feeds/331479776668227159/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36856108&amp;postID=331479776668227159' title='1 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36856108/posts/default/331479776668227159'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36856108/posts/default/331479776668227159'/><link rel='alternate' type='text/html' href='http://puertosur.blogspot.com/2009/07/estudio-de-mercado.html' title='Estudio de mercado'/><author><name>Gustavo Valentin</name><uri>http://www.blogger.com/profile/01677653510781195786</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://1.bp.blogspot.com/_Rp8ZPcn5YCY/SmjNi6ZntgI/AAAAAAAAABU/glIo1ybb410/S220/Castromonte+cartel+foto+chica.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36856108.post-1747111716093857987</id><published>2008-12-06T00:47:00.001-02:00</published><updated>2008-12-06T01:37:49.234-02:00</updated><title type='text'>Multihilos en xHarbour - Parte VII</title><content type='html'>Consideraciones acerca del rendimiento en multihilos.&lt;br /&gt;&lt;br /&gt;Comentaba en una de las primeras entregas, que para acceder a recursos compartidos, había que usar un mutex. También comenté que el mutex genera una gran penalidad en la ejecución porque en algunos casos tiene un costo similar o superior al tiempo de ejecución del código que se quiere resguardar.&lt;br /&gt;Por esta razón, lo mejor es trabajar sin mutex, claro, siempre que sea posible.&lt;br /&gt;Pero teniendo en mente esto, en algunos casos podríamos idear un código que pueda no usar mutex.&lt;br /&gt;Hay algunos casos en donde no es necesario poner un mutex para actualizar las variables, con la ventaja de ganar imporante cantidad de ciclos de reloj.&lt;br /&gt;&lt;br /&gt;Uno de estos casos es cuando una variable no compleja es modificada desde un solo thread y los demas threads solamente consultan.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;--------&lt;br /&gt;Static lSalir := .f.&lt;br /&gt;Func Main()&lt;br /&gt;? "Presione una tecla"&lt;br /&gt;StartThread(@Hilo())&lt;br /&gt;while !lSalir&lt;br /&gt;&amp;nbsp;&amp;nbsp;inkey(0)&lt;br /&gt;enddo&lt;br /&gt;lSalir := .t.&lt;br /&gt;Return nil&lt;br /&gt;&lt;br /&gt;Proc Hilo()&lt;br /&gt;Local nPaso:=1,cPasos:="-/|\"&lt;br /&gt;while !lSalir // Sin mutex&lt;br /&gt;&amp;nbsp;&amp;nbsp;@1,70 say cPasos[nPaso]&lt;br /&gt;&amp;nbsp;&amp;nbsp;if ++nPaso &gt; 4&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;nPaso := 1&lt;br /&gt;&amp;nbsp;&amp;nbsp;endif&lt;br /&gt;&amp;nbsp;&amp;nbsp;HB_ThreadSleep(100)&lt;br /&gt;enddo&lt;br /&gt;Return&lt;br /&gt;--------------&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Otro de los casos es cuando las modificaciones no tienen dependencias entre si.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;Func Main()&lt;br /&gt;Local aArray[1000]&lt;br /&gt;Afill(aArray,10)&lt;br /&gt;StartThread(@Process(), aArray,;&lt;br /&gt;&amp;nbsp;&amp;nbsp;1, Int(Len(aArray)/2))&lt;br /&gt;StartThread(@Process(), aArray,;&lt;br /&gt;&amp;nbsp;&amp;nbsp;Int(Len(aArray)/2)+1, Len(aArray)-Int(Len(aArray)/2))&lt;br /&gt;&lt;br /&gt;Proc Process( aArray, nStart. nCount )&lt;br /&gt;do while nCount &gt; 0&lt;br /&gt;&amp;nbsp;&amp;nbsp;aArray[ nStart ] *= 1.10&lt;br /&gt;&amp;nbsp;&amp;nbsp;nStart ++&lt;br /&gt;&amp;nbsp;&amp;nbsp;nCount--&lt;br /&gt;enddo&lt;br /&gt;Return&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Sin embargo, a pesar de que lógicamente la ejecución esta separada, internamente tienen puntos en comun. Esto es así porque los tipos de datos complejos tienen un contador de referencias que hace que los hilos deban turnarse para modificar el contador.&lt;br /&gt;El siguiente código es mas óptimo porque cambia el contador menor cantidad de veces.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;Proc Process( aArray, nStart, nCount )&lt;br /&gt;Local n&lt;br /&gt;For each n in aArray From nStart To nCount&lt;br /&gt;&amp;nbsp;&amp;nbsp;n *= 1.10&lt;br /&gt;Next&lt;br /&gt;Return n&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Cuando un código que se ejecuta en 2 o mas hilos bloquean alternadamente un recurso, se dice que es un codigo ping-pong.&lt;br /&gt;El bloqueo puede ser implicito (internos a nivel procesador) o explicito (usando funciones de bloqueo)&lt;br /&gt;El problema del código ping-pong es que funciona tanto o mas lento que el mismo código en forma serial.&lt;br /&gt;&lt;br /&gt;Otras formas de código ping-pong.&lt;br /&gt;Supongamos que necesitamos obtener un promedio de los valores guardados en un array.&lt;br /&gt;La forma serial seria acumular la suma y mantener un contador.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;Func Process( aArray, nStart, nCount )&lt;br /&gt;Local n&lt;br /&gt;For each n in aArray from nStart to nCount&lt;br /&gt;&amp;nbsp;&amp;nbsp;s_nSuma += n&lt;br /&gt;&amp;nbsp;&amp;nbsp;s_nCount ++&lt;br /&gt;Next&lt;br /&gt;Return &lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Para hacer la misma tarea en forma paralela podríamos proteger los acumuladores con un mutex.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;Func Process( aArray, nStart, nCount )&lt;br /&gt;Local n&lt;br /&gt;For each n in aArray from nStart to nCount&lt;br /&gt;&amp;nbsp;&amp;nbsp;hb_mutexLock( mtx )&lt;br /&gt;&amp;nbsp;&amp;nbsp;s_nSuma += n&lt;br /&gt;&amp;nbsp;&amp;nbsp;s_nCount ++&lt;br /&gt;&amp;nbsp;&amp;nbsp;hb_mutexUnlock( mtx )&lt;br /&gt;Next&lt;br /&gt;Return &lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Sin embargo este es el tipico ejemplo de un codigo ping-pong. Para evitar este problema el mejor código es:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;Func Process( aArray, nStart, nCount )&lt;br /&gt;Local n, nSuma:=0, nCount:=0&lt;br /&gt;For each n in aArray from nStart to nCount&lt;br /&gt;&amp;nbsp;&amp;nbsp;nSuma += n&lt;br /&gt;&amp;nbsp;&amp;nbsp;nCount ++&lt;br /&gt;&amp;nbsp;&amp;nbsp;Next&lt;br /&gt;hb_mutexLock( mtx )&lt;br /&gt;s_nSuma += nSuma&lt;br /&gt;s_nCount += nCount&lt;br /&gt;hb_mutexUnlock( mtx )&lt;br /&gt;Return &lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;De esta forma se bloquea el mutex una sola vez y se evita el efecto ping-pong.&lt;br /&gt;&lt;br /&gt;Efecto ping-pong relacionado con xHarbour.&lt;br /&gt;Todos los datos complejos tienen un contador de referencias que se incrementa y decrementa con cada uso. Si el dato es compartido y usado simultáneamente por varios hilos, produce que los hilos deban turnarse para cambiar el contador y es eso lo que produce el efecto ping-pong. Por lo tanto, es conveniente minimizar los datos complejos compartidos. &lt;br /&gt;Recordemos que los datos complejos son :&lt;br /&gt;Array, objetos, codeblock, hash, punteros, strings.&lt;br /&gt;&lt;br /&gt;En lugar de hacer:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;Procedure Paralelo( aArray, nStart, nCount, bBlock )&lt;br /&gt;Local nPos :=Ascan(aArray,bBlock,nStart,nCount)&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Es mejor hacer:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;Procedure Paralelo( aArray, nStart, nCount, cBlock)&lt;br /&gt;Local nPos, bBlock&lt;br /&gt;bBlock:=&amp;(cBlock)&lt;br /&gt;nPos:=Ascan(aArray,bBlock,nStart,nCount)&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;En definitiva, le código para multihilos implica una cuidadosa planificación para no caer en códigos ineficientes que tengan la misma e incluso peor performance que la ejecución en serie, con el consiguiente desperdicio de recursos.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36856108-1747111716093857987?l=puertosur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://puertosur.blogspot.com/feeds/1747111716093857987/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36856108&amp;postID=1747111716093857987' title='1 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36856108/posts/default/1747111716093857987'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36856108/posts/default/1747111716093857987'/><link rel='alternate' type='text/html' href='http://puertosur.blogspot.com/2008/12/multihilos-en-xharbour-parte-vii.html' title='Multihilos en xHarbour - Parte VII'/><author><name>Walter Negro</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36856108.post-1010964889600623541</id><published>2008-09-04T01:36:00.005-03:00</published><updated>2008-09-07T23:21:26.606-03:00</updated><title type='text'>Multihilos en xHarbour - Parte VI</title><content type='html'>&lt;div style="text-align: justify;"&gt;En estas primeras entregas sobre los multihilos de xHarbour, he hablado de funciones para crear un nuevo hilo, para sincronizar ejecuciones y para sincronizar accesos a recursos.&lt;br /&gt;&lt;br /&gt;Sin embargo, puede suceder que tengamos un hilo al que necesitamos finalizar su ejecución porque no se comporta como esperábamos.&lt;br /&gt;Para eso existen 2 funciones. &lt;span style="font-weight: bold;"&gt;Stopthread&lt;/span&gt; y &lt;span style="font-weight: bold;"&gt;Killthread&lt;/span&gt;.&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Además, junto con Stopthread, existe una función para sincronizar la finalización del thread con el thread que lo está finalizando.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;Stopthread&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Sirve para detener la ejecución de un thread de forma amigable, marcando al thread para que se cierre cuando llegue a uno de los puntos de control.&lt;br /&gt;&lt;/div&gt;Los puntos de interrupción son:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;antes y después de un acceso a disco.&lt;/li&gt;&lt;li&gt;antes y después de acceso a TCP/IP.&lt;/li&gt;&lt;li&gt;antes y después de llamadas a bloqueos.&lt;/li&gt;&lt;li&gt;cada vez que finaliza la ejecución de una función PRG, codebloc o macro.&lt;/li&gt;&lt;li&gt;cada 5000 ejecuciones de PCODE dentro de un mismo PRG.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Un thread no puede ser detenido amigablemente cuando esta:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;esperando por un mutex.&lt;/li&gt;&lt;li&gt;esperando por conexión o datos de TCP/IP.&lt;/li&gt;&lt;li&gt;mientras ejecuta funciones de C o de PRG compilado en C nativo, que quedan en un loop infinito o muy largo.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;Killthread&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;En general hay que evitar el uso de esta función, siempre hay que tratar de finalizar los threads amigablemente.&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Windows en su documentación indica que se evite su uso porque puede dejar incluso registros del kernel en estado incorrecto si al matar el thread el proceso esta ejecutando una función en modo kernel.&lt;br /&gt;También la documentación dice que si el thread tiene un bloqueo, este podría no ser desbloqueado o no ser avisados otros threads de que el mutex esta disponible.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Nos encontramos ante la disyuntiva de matar o no a un thread que no responde.&lt;br /&gt;Si no lo matamos, no podremos finalizar la ejecución.&lt;br /&gt;Si lo matamos, quizás tampoco podamos finalizarla.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Por este motivo, la función Killthread inicialmente marca al thread que se le indica para que se cierre amigablemente, si ya esta marcado entonces sí se lo mata.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;En conclusión. Hay que tratar por todos los medios de detener los threads amigablemente, para esto es necesario diseñar el código pensando en incluir puntos de interrupción o de control, si fuera necesario, para ayudar a finalizar el/los threads por las buenas.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Jointhread&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Esta función se complementa con Stopthread permitiendo sincronizar la finalización del thread.&lt;br /&gt;Se usa para esperar a que el thread indicado termine su ejecución.&lt;br /&gt;&lt;br /&gt;Ejemplo:&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;Procedure Main()&lt;br /&gt;Local thThread&lt;br /&gt;&lt;br /&gt;cls&lt;br /&gt;@8,10 say "Presione una tecla para parar el hilo"&lt;br /&gt;thThread := StartThread( @Work() )&lt;br /&gt;StartThread( @Join(), thThread )&lt;br /&gt;&lt;br /&gt;inkey(0)&lt;br /&gt;StopThread( thThread )&lt;br /&gt;WaitForThreads()&lt;br /&gt;Return&lt;br /&gt;&lt;br /&gt;Procedure Work()&lt;br /&gt;Local aStat := "\|/-", nStat := 1&lt;br /&gt;do while .t.&lt;br /&gt;&amp;nbsp;&amp;nbsp;DevOut( "Trabajando ... "+aStat[nStat],,10,10)&lt;br /&gt;&amp;nbsp;&amp;nbsp;if ++nStat &gt; 4&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;nStat := 1&lt;br /&gt;&amp;nbsp;&amp;nbsp;endif&lt;br /&gt;enddo&lt;br /&gt;return&lt;br /&gt;&lt;br /&gt;Procedure Join( thThread )&lt;br /&gt;DevOut("Esperando que finalize el thread de trabajo",,12,10)&lt;br /&gt;JoinThread( thThread )&lt;br /&gt;DevOut("El thread de trabajo ha finalizado correctamente",,12,10)&lt;br /&gt;return&lt;br /&gt;&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36856108-1010964889600623541?l=puertosur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://puertosur.blogspot.com/feeds/1010964889600623541/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36856108&amp;postID=1010964889600623541' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36856108/posts/default/1010964889600623541'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36856108/posts/default/1010964889600623541'/><link rel='alternate' type='text/html' href='http://puertosur.blogspot.com/2008/09/multihilos-en-xharbour-parte-vi_04.html' title='Multihilos en xHarbour - Parte VI'/><author><name>Walter Negro</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36856108.post-2582951722572667938</id><published>2008-09-01T08:22:00.001-03:00</published><updated>2008-09-01T08:32:50.857-03:00</updated><title type='text'>Sobre la Reunión del 30 de Agosto 2008</title><content type='html'>En primer lugar agradecer el aliento y los comentarios recibidos. Tambien la presencia de todos los que se pudieron acercarce, en especial a aquellos que llegaron de lejos o de países vecinos.&lt;br /&gt; &lt;br /&gt;Tuvimos un ambiente de total camaradería y literaltemte nos encerramos en la reunión, a tal punto que ni siquiera fuimos a almorzar (de 9 a 19). Es que había mucho interes.&lt;br /&gt;&lt;br /&gt;Respecto de los temas tratados, en orden de presentación fueron:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Paradigmas: una charla de Gustavo Valentin acerca de los paradigmas y como afectan la forma en que programamos.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Objetos: Walter explicó los conceptos básicos de objetos partiendo de un mini programa que no los tenía y llevandolo en una serie de modificaciones a uno que sí los tenía.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Impresoras Fiscales: Walter y Gustavo contaron que es y como funciona una impresora fiscal, la forma de comunicación y los programas que ellos utilizan. Luego se generó un debate entre los que estan necesitados de implementar impresora fiscal en sus programas y, con la donación de código por parte de softmagic quedaron en realizar una clase tanto para epson como para hasar.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Hash: si bien no estaba en la agenda de la reunión surgió espontaneamente. Walter nos explicó como inicializar un hash y luego se generó un debate sobre los diferente lugares donde utilizarlo. Fué la frutilla del postre.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Se habló de hacer la reunión mas seguido.&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36856108-2582951722572667938?l=puertosur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://puertosur.blogspot.com/feeds/2582951722572667938/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36856108&amp;postID=2582951722572667938' title='3 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36856108/posts/default/2582951722572667938'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36856108/posts/default/2582951722572667938'/><link rel='alternate' type='text/html' href='http://puertosur.blogspot.com/2008/09/sobre-la-reunin-del-30-de-agosto-2008.html' title='Sobre la Reunión del 30 de Agosto 2008'/><author><name>Gustavo Valentin</name><uri>http://www.blogger.com/profile/01677653510781195786</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://1.bp.blogspot.com/_Rp8ZPcn5YCY/SmjNi6ZntgI/AAAAAAAAABU/glIo1ybb410/S220/Castromonte+cartel+foto+chica.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36856108.post-2207698731385362123</id><published>2008-08-08T00:34:00.001-03:00</published><updated>2008-08-08T00:44:02.726-03:00</updated><title type='text'>Multihilos en xHarbour - Parte V</title><content type='html'>Funciones CRITICAL&lt;br /&gt;Una funcion marcada como critical tiene un mutex interno que automáticamente se activa y desactiva al ingresar y salir de dicha función.&lt;br /&gt;La ventaja es que no hay que crear un mutex para hacer esta tarea, lo cual reduce y simplifica el código.&lt;br /&gt;La desventaja es que bloquea a una sola función.&lt;br /&gt;&lt;br /&gt;Pueden existir muchas funciones CRITICAL ejecutandose en paralelo, pero un sólo thread por vez ejecutara cada una de ellas.&lt;br /&gt;&lt;br /&gt;Forma de uso:&lt;br /&gt;&lt;br /&gt;CRITICAL FUNCTION SoloUno()&lt;br /&gt;CRITICAL PROCEDURE SoloUno()&lt;br /&gt;CRITICAL STATIC FUNCTION SoloUno()&lt;br /&gt;CRITICAL STATIC PROCEDURE SoloUno()&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;br /&gt;// No superar 32768 porque HB_Random() solo genera&lt;br /&gt;// hasta 32768 numeros diferentes&lt;br /&gt;&lt;br /&gt;#define MAXVALUE 30000&lt;br /&gt;&lt;br /&gt;//#define PARALELO&lt;br /&gt;&lt;br /&gt;Static nCount := 0, lWork := .t.&lt;br /&gt;Static nTime, lEnd := .f.&lt;br /&gt;&lt;br /&gt;Function Main()&lt;br /&gt;Local aValues := Array(MAXVALUE)&lt;br /&gt;cls&lt;br /&gt;StartThread(@generate(),aValues)&lt;br /&gt;StartThread(@generate(),aValues)&lt;br /&gt;StartThread(@process())&lt;br /&gt;DevOut("Presione una tecla para finalizar...",,5,0)&lt;br /&gt;do while lEnd .and. inkey(0.1) == 0&lt;br /&gt;&amp;nbsp;&amp;nbsp;lWork := .f.&lt;br /&gt;enddo&lt;br /&gt;WaitForThreads()&lt;br /&gt;If lEnd&lt;br /&gt;&amp;nbsp;&amp;nbsp;Devout("Tiempo de trabajo="+str(nTime),,8,0)&lt;br /&gt;Endif&lt;br /&gt;Return nil&lt;br /&gt;&lt;br /&gt;Procedure Generate(aValues)&lt;br /&gt;Local nValue, lRet&lt;br /&gt;Do While lWork&lt;br /&gt;&amp;nbsp;&amp;nbsp;nValue := Int(HB_Random(0,MAXVALUE))+1&lt;br /&gt;#ifdef PARALELO&lt;br /&gt;&amp;nbsp;&amp;nbsp;If aValues[nValue] == nil&lt;br /&gt;#endif&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;lRet := AddUnique(aValues,nValue)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;If lRet&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Exit&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Endif&lt;br /&gt;#ifdef PARALELO&lt;br /&gt;&amp;nbsp;&amp;nbsp;ElseIf nCount == MAXVALUE&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Exit&lt;br /&gt;&amp;nbsp;&amp;nbsp;Endif&lt;br /&gt;#endif&lt;br /&gt;Enddo&lt;br /&gt;Return&lt;br /&gt;&lt;br /&gt;Critical Function AddUnique(aValues,nValue)&lt;br /&gt;If nCount == 0&lt;br /&gt;&amp;nbsp;&amp;nbsp;nTime := Seconds()&lt;br /&gt;Endif&lt;br /&gt;If aValues[nValue] == nil&lt;br /&gt;&amp;nbsp;&amp;nbsp;++nCount&lt;br /&gt;&amp;nbsp;&amp;nbsp;aValues[nValue] := nCount&lt;br /&gt;Endif&lt;br /&gt;If nCount == MAXVALUE&lt;br /&gt;&amp;nbsp;&amp;nbsp;If !lEnd&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;nTime := Seconds()-nTime&lt;br /&gt;&amp;nbsp;&amp;nbsp;Endif&lt;br /&gt;&amp;nbsp;&amp;nbsp;lEnd := .t.&lt;br /&gt;&amp;nbsp;&amp;nbsp;Return .t.&lt;br /&gt;Endif&lt;br /&gt;Return .f.&lt;br /&gt;&lt;br /&gt;Procedure Process(nThread)&lt;br /&gt;Local cPaso := "\|/-", nPaso := 1&lt;br /&gt;do while nCount &lt; MAXVALUE .and. lWork&lt;br /&gt;&amp;nbsp;&amp;nbsp;DevOut(nCount,,7,0)&lt;br /&gt;&amp;nbsp;&amp;nbsp;DevOut(cPaso[nPaso],,7,15)&lt;br /&gt;&amp;nbsp;&amp;nbsp;If ++nPaso &gt; 4&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;nPaso := 1&lt;br /&gt;&amp;nbsp;&amp;nbsp;Endif&lt;br /&gt;&amp;nbsp;&amp;nbsp;ThreadSleep(100)&lt;br /&gt;enddo&lt;br /&gt;DevOut(nCount,,7,0)&lt;br /&gt;Return&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;El código del ejemplo tiene 2 modos de funcionamiento.&lt;br /&gt;El modo 1 es tal como está escrito.&lt;br /&gt;El modo 2 es "des-comentando" la línea #define PARALELO&lt;br /&gt;&lt;br /&gt;En el modo 1, realiza lo siguiente:&lt;br /&gt;Unos hilos en paralelo, generan unos números aleatorios y luego llaman a una función que controla si dicho número está cargado en un array.&lt;br /&gt;Si no está, lo carga. Si ya existe, lo descarta.&lt;br /&gt;Cuando el array está completo, cambia el estado de la bandera lEnd para que finalice el programa.&lt;br /&gt;&lt;br /&gt;En el modo 2, realiza lo siguiente:&lt;br /&gt;El proceso es similar, solo que cada hilo controla por su lado, si el número generado ya existe. Si no existe, llama a la función para que lo cargue. Si ya existe, lo descarta y vuelve a calcular otro número.&lt;br /&gt;Puede darse el caso que el hilo 1 calcula un número y detecta que el número no existe y llama a la función, pero el hilo 2 pudo haber calculado el mismo número y haberse anticipado en la llamada a la función AddUnique, pero esto no es problema ya que cuando el hilo 1 llame a la función, el número será descartado sin problemas como en el modo 1.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_hleagWa32-M/SJrkfIubKLI/AAAAAAAAAAM/2YHTWkdA2i8/s1600-h/ScreenShot005.bmp"&gt;&lt;img style="margin: 0pt 0px 10px 10px; clear: both; cursor: pointer; width: 355px; height: 342px;" src="http://4.bp.blogspot.com/_hleagWa32-M/SJrkfIubKLI/AAAAAAAAAAM/2YHTWkdA2i8/s320/ScreenShot005.bmp" alt="" id="BLOGGER_PHOTO_ID_5231745140713531570" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: left; clear: both;"&gt;&lt;br /&gt;Muestra el uso del procesador en modo 1.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_hleagWa32-M/SJrk1oPmEgI/AAAAAAAAAAU/pzucslFO0-c/s1600-h/ScreenShot006.bmp"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; clear: both; cursor: pointer; width: 355px; height: 342px;" src="http://1.bp.blogspot.com/_hleagWa32-M/SJrk1oPmEgI/AAAAAAAAAAU/pzucslFO0-c/s320/ScreenShot006.bmp" alt="" id="BLOGGER_PHOTO_ID_5231745527131279874" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: left; clear: both;"&gt;&lt;br /&gt;Muestra el uso del procesador en modo 2.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Si en un procesador multicore, se nota que el modo 2 se ejecuta más rápidamente, ya que los 2 hilos pueden estar en forma paralela averiguando si el número obtenido existe o no en el array, y solo en el caso de no existir llamará a la función AddUnique para que lo agregue.&lt;br /&gt;Si bien la ejecución es bastante rápida, podemos concluir que en el modo 2, inicialmente el uso de los 2 cores (uno por cada hilo) es de un 60%, pero a medida que se va llenando el array, el uso tiende al 100%.&lt;br /&gt;Cómo es esto?&lt;br /&gt;El hilo 1, calcula un número, lo busca en el array y no existe, asi que llama a AddUnique. Por su parte, el hilo 2, calcula otro número, lo busca en el array y tampoco existe, asi que tambien llama a AddUnique.&lt;br /&gt;El tema es que los hilos deben turnarse para ejecutar AddUnique, ya que es una función CRITICAL.&lt;br /&gt;Pero a medida que crece la densidad de uso del array, los números aleatorios comienzan a duplicarse y la tasa de encontrados aumenta y por consiguiente, aumenta los reintentos (volver a calcular el número aleatorio). Cada hilo por su cuenta reintenta varias veces la búsqueda hasta encontrar un número que no existe.&lt;br /&gt;Pero debido a que los hilos no se están turnando, hacen más trabajo en menos tiempo y permite terminar la tarea antes.&lt;br /&gt;&lt;br /&gt;En el modo 1, los hilos siempre se están turnando, con lo cual el uso del procesador permanece constante en un 60% durante todo el proceso. Al hacer menos trabajo en el mismo tiempo, la tarea demora más en terminarse.&lt;br /&gt;&lt;br /&gt;Con estas explicaciones me estoy adelantando a temas que voy a tocar en próximas entregas, pero bien viene la reseña.&lt;br /&gt;Al trabajar con mutex es importante saber cuando y cuanto proteger para evitar ser "sobreprotectores" y tener un código que funcione lentamente.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36856108-2207698731385362123?l=puertosur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://puertosur.blogspot.com/feeds/2207698731385362123/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36856108&amp;postID=2207698731385362123' title='2 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36856108/posts/default/2207698731385362123'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36856108/posts/default/2207698731385362123'/><link rel='alternate' type='text/html' href='http://puertosur.blogspot.com/2008/07/multihilos-en-xharbour-parte-v.html' title='Multihilos en xHarbour - Parte V'/><author><name>Walter Negro</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_hleagWa32-M/SJrkfIubKLI/AAAAAAAAAAM/2YHTWkdA2i8/s72-c/ScreenShot005.bmp' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36856108.post-8596195934518381895</id><published>2008-07-09T17:26:00.000-03:00</published><updated>2008-07-09T17:41:55.787-03:00</updated><title type='text'>LetoDB rdd cliente servidor para xHarbour</title><content type='html'>Desde la soleada Mallorca leemos una muy interesante nota de BielSys (Gabriel Maimó "Biel") acerca de un proyecto Open Source de Alexander Kresin.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://bielsys.blogspot.com/2008/07/letodb-rdd-cliente-servidor-para.html"&gt;http://bielsys.blogspot.com/2008/07/letodb-rdd-cliente-servidor-para.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Gracias BielSys, muy interesante tu &lt;a href="http://bielsys.blogspot.com/"&gt;blog&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36856108-8596195934518381895?l=puertosur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://puertosur.blogspot.com/feeds/8596195934518381895/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36856108&amp;postID=8596195934518381895' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36856108/posts/default/8596195934518381895'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36856108/posts/default/8596195934518381895'/><link rel='alternate' type='text/html' href='http://puertosur.blogspot.com/2008/07/letodb-rdd-cliente-servidor-para.html' title='LetoDB rdd cliente servidor para xHarbour'/><author><name>Gustavo Valentin</name><uri>http://www.blogger.com/profile/01677653510781195786</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://1.bp.blogspot.com/_Rp8ZPcn5YCY/SmjNi6ZntgI/AAAAAAAAABU/glIo1ybb410/S220/Castromonte+cartel+foto+chica.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36856108.post-87535596089595029</id><published>2008-07-09T00:50:00.002-03:00</published><updated>2008-07-09T01:18:33.738-03:00</updated><title type='text'>Multihilos en xHarbour - Parte IV</title><content type='html'>&lt;div style="text-align: justify;"&gt;En las entregas anteriores vimos como ejecutar varios hilos simultáneamente, lanzandolos uno a uno.&lt;br /&gt;En esta oportunidad veremos un tema un poco más avanzado pero muy útil, los avisos o mensajes entre hilos.&lt;br /&gt;&lt;br /&gt;Supongamos que estamos lanzando hilos para ejecutar un juego de una carrera.&lt;br /&gt;Creamos un código que irá mostrando el avance de cada participante y un mutex nos permitirá identificar el orden de llegada de cada uno de ellos.&lt;br /&gt;&lt;br /&gt;Lo primero que se nos ocurre es lanzarlos tal como vimos anteriormente y nos resulta un código como el del &lt;span style="font-style: italic;"&gt;ejemplo 1&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;span style="font-weight: bold;"&gt;NOTA:&lt;/span&gt; Los ejemplos contienen código que permite mostrar una velocidad pareja de ejecución independiente del procesador donde se ejecute, con el fin de facilitar&lt;br /&gt;la visualización de la explicación.&lt;br /&gt;De todas formas, debido a que el tiempo de ejecución es considerablemente alto (del orden de algunos segundos) una cantidad de cores menor a la cantidad de hilos a ejecutar, puede hacer que el ejemplo no siempre muestre el resultado que busco mostrar a pesar de algunas compensaciones de tiempo para evitarlo.&lt;/blockquote&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;Static mtxGano&lt;br /&gt;Static nGanador := 0, nPuesto := 1&lt;br /&gt;&lt;br /&gt;Function Main()&lt;br /&gt;Local nSec := Seconds() + 0.5, n&lt;br /&gt;Local nCount := 0&lt;br /&gt;&lt;br /&gt;cls&lt;br /&gt;mtxGano := HB_MutexCreate()&lt;br /&gt;do while Seconds() &lt; nSec&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;nCount++&lt;br /&gt;enddo&lt;br /&gt;&lt;br /&gt;For n := 1 To 5&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;ThreadSleep(200) // Simula hacer otras tareas&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;StartThread(@listos_ya(),n,int(nCount/50))&lt;br /&gt;Next&lt;br /&gt;WaitForThreads()&lt;br /&gt;&lt;br /&gt;Procedure listos_ya( nHilo, nCount )&lt;br /&gt;Local nMax := nCount * 60, nPos := 1, n&lt;br /&gt;&lt;br /&gt;For n := 0 to nMax&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;if n % nCount == 0&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;DevOut(Replicate("-",nPos-1),,nHilo+5,1)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;DevOut(chr(2),,nHilo+5,nPos)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;nPos++&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;endif&lt;br /&gt;Next&lt;br /&gt;DevOut(Replicate("-",nPos-1),,nHilo+5,1)&lt;br /&gt;DevOut(chr(2),,nHilo+5,nPos)&lt;br /&gt;&lt;br /&gt;HB_MutexLock(mtxGano)&lt;br /&gt;If nGanador == 0&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;nGanador := nHilo&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;DevOut("GANADOR",,nHilo+5,65)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;nPuesto ++&lt;br /&gt;Else&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;DevOut(str(nPuesto,1,0)+" lugar",,nHilo+5,65)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;nPuesto++&lt;br /&gt;Endif&lt;br /&gt;HB_MutexUnlock(mtxGano)&lt;br /&gt;Return&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Ejemplo 1&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Este ejemplo nos muestra una clara tendencia a que el jugador 1 gane la carrera.&lt;br /&gt;Lo cual no es muy conveniente si estamos diseñando un juego.&lt;br /&gt;&lt;br /&gt;Con lo cual necesitamos sincronizar el arranque.&lt;br /&gt;Quizás lo visto en la entrega de Mutex nos sirva para mejorar el código, así que modificamos el código anterior para que cada hilo tenga un mutex y queden todos a la espera de la señal de arranque y nos queda algo como el &lt;span style="font-style: italic;"&gt;ejemplo 2&lt;/span&gt;.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;Static mtxGano&lt;br /&gt;Static nGanador := 0, nPuesto := 1&lt;br /&gt;&lt;br /&gt;Function Main()&lt;br /&gt;Local nSec := Seconds() + 0.5, n&lt;br /&gt;Local nCount := 0, aMutex := {}&lt;br /&gt;&lt;br /&gt;cls&lt;br /&gt;mtxGano := HB_MutexCreate()&lt;br /&gt;do while Seconds() &lt; nSec&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;nCount++&lt;br /&gt;enddo&lt;br /&gt;&lt;br /&gt;For n := 1 To 5&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;aadd(aMutex,HB_MutexCreate())&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;HB_MutexLock( aMutex[-1] )&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;StartThread(@listos_ya(),n,int(nCount/50),aMutex[-1])&lt;br /&gt;Next&lt;br /&gt;For n := 1 To 5&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;ThreadSleep(100) // Simula hacer otras tareas&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;HB_MutexUnlock(aMutex[n])&lt;br /&gt;Next&lt;br /&gt;WaitForThreads()&lt;br /&gt;&lt;br /&gt;Procedure listos_ya( nHilo, nCount, mtxSincro )&lt;br /&gt;Local nMax := nCount * 60, nPos := 1, n&lt;br /&gt;HB_MutexLock(mtxSincro)&lt;br /&gt;HB_MutexUnlock(mtxSincro)&lt;br /&gt;For n := 0 to nMax&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;if n % nCount == 0&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;DevOut(Replicate("-",nPos-1),,nHilo+5,1)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;DevOut(chr(2),,nHilo+5,nPos)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;nPos++&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;endif&lt;br /&gt;Next&lt;br /&gt;DevOut(Replicate("-",nPos-1),,nHilo+5,1)&lt;br /&gt;DevOut(chr(2),,nHilo+5,nPos)&lt;br /&gt;&lt;br /&gt;HB_MutexLock(mtxGano)&lt;br /&gt;If nGanador == 0&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;nGanador := nHilo&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;DevOut("GANADOR",,nHilo+5,65)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;nPuesto ++&lt;br /&gt;Else&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;DevOut(str(nPuesto,1,0)+" lugar",,nHilo+5,65)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;nPuesto++&lt;br /&gt;Endif&lt;br /&gt;HB_MutexUnlock(mtxGano)&lt;br /&gt;Return&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Ejemplo 2&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Si bien nuestros sentidos nos muestran una carrera más pareja, la realidad es que si tenemos una cantidad de cores mayor a la cantidad de hilos de ejecución, pasaría lo mismo que en el &lt;span style="font-style:italic;"&gt;ejemplo 1&lt;/span&gt;.&lt;br /&gt;Esto es así porque nuestro código es previsible y siempre pone en marcha los hilos en un orden prestablecido.&lt;br /&gt;Cuanto mayor sea la cantidad de hilos, mayor será la diferencia entre la orden de arranque para el primer hilo y la orden de arranque para el último hilo.&lt;br /&gt;&lt;br /&gt;Para sincronizar el arranque de uno o varios hilos, tenemos otra utilidad de la entidad Mutex. La pareja suscripción/notificación.&lt;br /&gt;La idea de funcionamiento es que uno o varios hilos se inscriben o suscriben para recibir la orden o notificación de arraque.&lt;br /&gt;Esta orden o notificación puede ser global o individual.&lt;br /&gt;En el &lt;span style="font-style: italic;"&gt;ejemplo 3&lt;/span&gt; tenemos el código de la carrera que pondrá a todos los hilos a disposición del sistema operativo para que este los ponga en funcionamiento cuando existan los recursos necesarios para hacerlo.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;Static mtxGano&lt;br /&gt;Static nGanador := 0, nPuesto := 1&lt;br /&gt;&lt;br /&gt;Function Main()&lt;br /&gt;Local nSec := Seconds() + 0.5, n&lt;br /&gt;Local nCount := 0, mtxSincro := HB_MutexCreate()&lt;br /&gt;&lt;br /&gt;cls&lt;br /&gt;mtxGano := HB_MutexCreate()&lt;br /&gt;do while Seconds() &lt; nSec&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;nCount++&lt;br /&gt;enddo&lt;br /&gt;&lt;br /&gt;For n := 1 To 5&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;StartThread(@listos_ya(),n,int(nCount/50),mtxSincro)&lt;br /&gt;Next&lt;br /&gt;ThreadSleep(200) // Simula hacer otras tareas&lt;br /&gt;NotifyAll(mtxSincro)&lt;br /&gt;WaitForThreads()&lt;br /&gt;&lt;br /&gt;Procedure listos_ya( nHilo, nCount, mtxSincro )&lt;br /&gt;Local nMax := nCount * 60, nPos := 1, n&lt;br /&gt;Subscribe(mtxSincro)&lt;br /&gt;For n := 0 to nMax&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;if n % nCount == 0&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;DevOut(Replicate("-",nPos-1),,nHilo+5,1)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;DevOut(chr(2),,nHilo+5,nPos)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;nPos++&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;endif&lt;br /&gt;Next&lt;br /&gt;DevOut(Replicate("-",nPos-1),,nHilo+5,1)&lt;br /&gt;DevOut(chr(2),,nHilo+5,nPos)&lt;br /&gt;&lt;br /&gt;HB_MutexLock(mtxGano)&lt;br /&gt;If nGanador == 0&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;nGanador := nHilo&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;DevOut("GANADOR",,nHilo+5,65)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;nPuesto ++&lt;br /&gt;Else&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;DevOut(str(nPuesto,1,0)+" lugar",,nHilo+5,65)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;nPuesto++&lt;br /&gt;Endif&lt;br /&gt;HB_MutexUnlock(mtxGano)&lt;br /&gt;Return&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;Ejemplo 3&lt;br /&gt;&lt;br /&gt;Las funciones de notificación y suscripción son las siguientes:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Subscribe( mutex, [timeout], [@event] ) -&gt; info&lt;/span&gt;&lt;br /&gt;&lt;blockquote&gt;Inscribe al thread para ser avisado de una notificación.&lt;br /&gt;Si hay notificaciones pendientes, sale inmediatamente, si no, queda bloqueado a la espera de una notificación.&lt;br /&gt;Se puede indicar un tiempo de espera, luego del cual se desbloqueará a pesar de no recibir ninguna notificación.&lt;br /&gt;El thread que notifica, puede enviar una información en el momento de notificar la cual será recibida como valor de retorno de la función de suscripción.&lt;br /&gt;Cuando se especifica un timeout, para saber si hubo o no notificación, se puede especificar un tercer parámetro por referencia, que retornará un valor lógico verdadero si ocurrió la notificación y falso en caso de finalizar por timeout.&lt;/blockquote&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;SubscribeNow( mutex, [timeout], [@event] ) -&gt; info&lt;/span&gt;&lt;br /&gt;&lt;blockquote&gt;El funcionamiento es similar a la función Subscribe(), la única diferencia es que antes de comenzar, borra cualquier notificación pendiente.&lt;/blockquote&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Notify( mutex, [info] )&lt;/span&gt;&lt;br /&gt;&lt;blockquote&gt;Emite una notificación. Si hay uno o más threads esperando, alguno de ellos es notificado y sale del estado de espera. Los demás threads suscriptos siguen esperando. No hay relación entre el orden de suscripción y el orden de notificación.&lt;br /&gt;Si no hubiera threads en espera, la suscripción queda pendiente en una cola y se van asignando por orden a los threads que se vayan suscribiendo.&lt;br /&gt;Es posible enviar información al thread que espera la suscripción, usando el segundo parámetro de la función.&lt;/blockquote&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;NotifyAll( mutex, [info] )&lt;/span&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;&lt;blockquote&gt;Emite una notificación a todos los threads que esten en espera.&lt;br /&gt;Si no hay threads en espera es como si nunca se hubiera ejecutado la función, no se agregan ni quitan notificaciones que esten en cola.&lt;br /&gt;Es posible enviar información al thread que espera la suscripción, usando el segundo parámetro de la función.&lt;/blockquote&gt;&lt;/div&gt;  &lt;br /&gt;&lt;div style="text-align: justify;"&gt;Las suscripciones y notificaciones evitan que un proceso tenga que quedar en un loop preguntando cada cierto tiempo por alguna condición.&lt;br /&gt;Si el loop es muy rápido consumirá mucho procesador, si el loop es muy lento se estaría reaccionando tardíamente a un cambio de estado.&lt;br /&gt;Cuando un thread entra en suscripción y no hay notificaciones pendientes, se queda en un estado de espera sin consumir procesador.&lt;br /&gt;&lt;br /&gt;Se les ocurren otras posibildades de uso de estas funciones ?&lt;br /&gt;Espero sus comentarios.&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36856108-87535596089595029?l=puertosur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://puertosur.blogspot.com/feeds/87535596089595029/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36856108&amp;postID=87535596089595029' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36856108/posts/default/87535596089595029'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36856108/posts/default/87535596089595029'/><link rel='alternate' type='text/html' href='http://puertosur.blogspot.com/2008/07/multihilos-en-xharbour-parte-iv.html' title='Multihilos en xHarbour - Parte IV'/><author><name>Walter Negro</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36856108.post-8488858987254658043</id><published>2008-06-30T23:23:00.000-03:00</published><updated>2008-07-01T00:14:38.600-03:00</updated><title type='text'>Multihilos en xHarbour - Parte III</title><content type='html'>En la anterior entrega, vimos los problemas que ocurren cuando se incrementan o decrementan variables desde 2 o más hilos y no se protegen con un mutex.&lt;br /&gt;&lt;br /&gt;Si ejecutan el último ejemplo de la &lt;a href="http://puertosur.blogspot.com/2008/06/multihilos-en-xharbour-parte-ii.html"&gt;entrega anterior&lt;/a&gt;, pero sin ejecutar la función ThreadSleep(10), casi con seguridad tendrán el siguiente error interno: &lt;span style="font-style:italic;"&gt;Premature Pointer Release detected&lt;/span&gt;&lt;br /&gt;El error ocurre mucho más frecuentemente con procesadores multicore porque verdaderamente están ejecutando el código en paralelo.&lt;br /&gt;&lt;br /&gt;¿A qué se debe? Se debe justamente a que los contadores de referencia del puntero que mantiene al Mutex, se desincronizan porque no se actualizan correctamente, tal como se vió en el primer ejemplo de la última entrega.&lt;br /&gt;&lt;br /&gt;¿Cómo solucionar este problema? Desde el 28/6/08 el CVS de xHarbour tiene la corrección aplicada y también en la &lt;a href="http://puertosur.blogspot.com/2008/06/xharbour-10-de-puertosur.html"&gt;distribución xHarbour 1.0 de PuertoSur&lt;/a&gt; tiene el problema corregido en todos los casos.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36856108-8488858987254658043?l=puertosur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://puertosur.blogspot.com/feeds/8488858987254658043/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36856108&amp;postID=8488858987254658043' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36856108/posts/default/8488858987254658043'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36856108/posts/default/8488858987254658043'/><link rel='alternate' type='text/html' href='http://puertosur.blogspot.com/2008/06/multihilos-en-xharbour-parte-iii.html' title='Multihilos en xHarbour - Parte III'/><author><name>Walter Negro</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36856108.post-7201806170723060888</id><published>2008-06-24T23:34:00.000-03:00</published><updated>2008-06-24T23:41:46.996-03:00</updated><title type='text'>xHarbour 1.0 de PuertoSUR</title><content type='html'>Muchos lo han pedido y ya está disponible la distribución de xHarbour de PuertoSUR de la versión 1.0.&lt;br /&gt;En estos momentos están disponibles para bajar las siguientes compilaciones:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.puertosur.org/descargas/xHarbourSetup-bcc32-fw24.exe"&gt;xHarbour 1.0 compatible con FWH 2.4 para Borland 5.5&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.puertosur.org/descargas/xHarbourSetup-bcc32-fw25.exe"&gt;xHarbour 1.0 compatible con FWH 2.5/2.6 para Borland 5.5&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.puertosur.org/descargas/xHarbourSetup-bcc32-fw27.exe"&gt;xHarbour 1.0 compatible con FWH 2.7 y sup para Borland 5.5&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Esta distribución como anteriores, se provee en forma de instalador que busca la ubicación del compilador de Borland, lo configura y configura los archivos para compilar y enlazar aplicaciones simples.&lt;br /&gt;&lt;br /&gt;La distribución incluye junto con las librerías de xHarbour, algunas librerías de contribuciones y algunas librerías extras, además de algunos arreglos posteriores a la liberación:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;rddads.lib&lt;/span&gt; compatible con Advantage 8.x&lt;br /&gt;&lt;span style="font-style:italic;"&gt;mysql3.lib&lt;/span&gt; compatible con MySql 3.x&lt;br /&gt;&lt;span style="font-style:italic;"&gt;mysql5.lib&lt;/span&gt; compatible con MySql 5.x&lt;br /&gt;&lt;span style="font-style:italic;"&gt;hbcomm.lib&lt;/span&gt; librería de comunicaciones serie con funciones compatibles en parámetros y funcionalidad a las de FW, para paliar la falta de esta funcionalidad en algunas versiones de FWH.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36856108-7201806170723060888?l=puertosur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://puertosur.blogspot.com/feeds/7201806170723060888/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36856108&amp;postID=7201806170723060888' title='3 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36856108/posts/default/7201806170723060888'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36856108/posts/default/7201806170723060888'/><link rel='alternate' type='text/html' href='http://puertosur.blogspot.com/2008/06/xharbour-10-de-puertosur.html' title='xHarbour 1.0 de PuertoSUR'/><author><name>Walter Negro</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36856108.post-4777892653041069602</id><published>2008-06-22T22:31:00.000-03:00</published><updated>2008-06-23T01:44:33.402-03:00</updated><title type='text'>Multihilos en xHarbour - Parte II</title><content type='html'>&lt;span style="font-weight:bold;"&gt;El acceso a recursos compartidos&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;En la entrega anterior vimos como poner en marcha un hilo paralelo de ejecución, dando lugar a la ejecución multihilo.&lt;br /&gt;&lt;br /&gt;En esta oportunidad, veremos una de las problemáticas más comunes de la programación multihilo. El acceso a recursos compartidos.&lt;br /&gt;&lt;br /&gt;¿Qué es un recurso? Cualquier cosa que se pueda leer, escribir y/o ejecutar. Una variable, un archivo, un alias, una función, un socket, etc.&lt;br /&gt;&lt;br /&gt;Cualquier programador de xBase que haya hecho programas multiusuario sabe que para poder modificar un registro, primero debe bloquearlo.&lt;br /&gt;Supongo que la mayoría sabe por qué hay que bloquearlo y no me refiero &lt;span style="font-style:italic;"&gt;"a que si no da error de registro no bloqueado"&lt;/span&gt;.&lt;br /&gt;La razón de bloquear el registro es para que dos o más usuarios no puedan modificar el mismo registro al mismo tiempo.&lt;br /&gt;&lt;br /&gt;Esta protección a nivel de recursos en general se realiza usando la entidad Mutex.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;HB_MutexCreate()&lt;/span&gt; es la función que permite crear una entidad Mutex.&lt;br /&gt;El Valtype() de una variable que contiene un Mutex es P, o sea, un puntero.&lt;br /&gt;&lt;br /&gt;Un Mutex sirve para varias cosas, pero en esta entrega veremos el uso más común, que es como semáforo.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;HB_MutexLock()&lt;/span&gt; es la función que marca el Mutex como bloqueado por el thread que llamó a la función.&lt;br /&gt;Esta función retorna solamente cuando obtuvo el bloqueo del Mutex.&lt;br /&gt;&lt;br /&gt;Mientras un hilo bloquee un Mutex y cualquier otro hilo que intente bloquear el mismo Mutex, quedará bloqueado y en estado de espera a que se desbloquee el Mutex.&lt;br /&gt;Cuando el Mutex esté disponible, sólo uno de los hilos obtendrá acceso al Mutex, mientras que los demás seguirán esperando.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;HB_MutexUnlock()&lt;/span&gt; es la función que desbloquea el Mutex y lo deja disponible para que otro hilo lo pueda bloquear.&lt;br /&gt;&lt;br /&gt;Además de estas dos funciones, que son las más usadas, existen otras.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;HB_MutextryLock()&lt;/span&gt; es la función intenta bloquear el Mutex y si lo logra, retorna .T. o un .F. en caso contrario.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;HB_MutexTimeOutLock()&lt;/span&gt; es la función que intenta bloquear el Mutex durante un tiempo que se indica como segundo parámetro. Retorna .T. si logra el bloqueo y .F. en caso contrario.&lt;br /&gt;&lt;br /&gt;El ejemplo más trivial para usar un Mutex es como protección en la actualización de un contador. Más de uno se preguntará por qué hay que bloquear si solamente queremos incrementar?&lt;br /&gt;El tema es que el proceso de incrementar requiere de 3 pasos. Leer, incrementar, grabar. Entonces, podría suceder que dos procesos leyeran simultaneamente y luego al grabar, el contador solamente se habría incrementado una vez en lugar de 2 veces.&lt;br /&gt;&lt;br /&gt;Veamos un ejemplo que podamos probar para ver más claramente el asunto:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;Static lFinalizar := .f.&lt;br /&gt;Static nGlobalCounter := 0&lt;br /&gt;Static aResult[2]&lt;br /&gt;&lt;br /&gt;Function Main()&lt;br /&gt;cls&lt;br /&gt;StartThread(@mostrar())&lt;br /&gt;StartThread(@enparalelo(),1)&lt;br /&gt;StartThread(@enparalelo(),2)&lt;br /&gt;DevOut("Presione una tecla para finalizar o espere 5 segundos",,1,0)&lt;br /&gt;inkey(5)&lt;br /&gt;lFinalizar := .t.&lt;br /&gt;WaitForThreads()&lt;br /&gt;cls&lt;br /&gt;@2,0 say "Thread 1 - LocalCounter="+str(aResult[1])&lt;br /&gt;@3,0 say "Thread 2 - LocalCounter="+str(aResult[2])&lt;br /&gt;@4,0 say "Total                   "+str(aResult[1]+aResult[2])&lt;br /&gt;@6,0 say "          GlobalCounter="+str(nGlobalCounter)&lt;br /&gt;@8,0 say "Diferencia              "+str(aResult[1]+aResult[2]-nGlobalCounter)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Procedure enparalelo( nId )&lt;br /&gt;Local nLocalCounter := 0&lt;br /&gt;Local nLinea := GetThreadId()&lt;br /&gt;do while !lFinalizar&lt;br /&gt;&amp;nbsp;&amp;nbsp;nLocalCounter++&lt;br /&gt;&amp;nbsp;&amp;nbsp;nGlobalCounter++&lt;br /&gt;&amp;nbsp;&amp;nbsp;ThreadSleep(10)&lt;br /&gt;enddo&lt;br /&gt;aResult[nId] := nLocalCounter&lt;br /&gt;Return&lt;br /&gt;&lt;br /&gt;Procedure mostrar()&lt;br /&gt;Local nStatus := 1, cStatus := "|/-\"&lt;br /&gt;Local nLinea := GetThreadId()&lt;br /&gt;do while !lFinalizar&lt;br /&gt;&amp;nbsp;&amp;nbsp;DevOut(nGlobalCounter,,nLinea,10)&lt;br /&gt;&amp;nbsp;&amp;nbsp;ThreadSleep(500)&lt;br /&gt;enddo&lt;br /&gt;Return&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;La diferencia debería ser 0 (cero), pero no siempre es así. Esto muestra por qué es necesario proteger la variable al modificar su valor.&lt;br /&gt;El código correcto es:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;Static lFinalizar := .f.&lt;br /&gt;Static nGlobalCounter := 0&lt;br /&gt;Static aResult[2]&lt;br /&gt;&lt;br /&gt;Function Main()&lt;br /&gt;Local mtxCounter&lt;br /&gt;cls&lt;br /&gt;&lt;br /&gt;mtxCounter := HB_MutexCreate()&lt;br /&gt;&lt;br /&gt;StartThread(@mostrar(),mtxCounter)&lt;br /&gt;StartThread(@enparalelo(),1,mtxCounter)&lt;br /&gt;StartThread(@enparalelo(),2,mtxCounter)&lt;br /&gt;DevOut("Presione una tecla para finalizar o espere 5 segundos",,1,0)&lt;br /&gt;inkey(5)&lt;br /&gt;lFinalizar := .t.&lt;br /&gt;WaitForThreads()&lt;br /&gt;cls&lt;br /&gt;@2,0 say "Thread 1 - LocalCounter="+str(aResult[1])&lt;br /&gt;@3,0 say "Thread 2 - LocalCounter="+str(aResult[2])&lt;br /&gt;@4,0 say "Total                   "+str(aResult[1]+aResult[2])&lt;br /&gt;@6,0 say "          GlobalCounter="+str(nGlobalCounter)&lt;br /&gt;@8,0 say "Diferencia              "+str(aResult[1]+aResult[2]-nGlobalCounter)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Procedure enparalelo( nId, mtxCounter )&lt;br /&gt;Local nLocalCounter := 0&lt;br /&gt;Local nLinea := GetThreadId()&lt;br /&gt;do while !lFinalizar&lt;br /&gt;&amp;nbsp;&amp;nbsp;nLocalCounter++&lt;br /&gt;&amp;nbsp;&amp;nbsp;HB_MutexLock(mtxCounter)&lt;br /&gt;&amp;nbsp;&amp;nbsp;nGlobalCounter++&lt;br /&gt;&amp;nbsp;&amp;nbsp;HB_MutexUnlock(mtxCounter)&lt;br /&gt;&amp;nbsp;&amp;nbsp;ThreadSleep(10)&lt;br /&gt;enddo&lt;br /&gt;aResult[nId] := nLocalCounter&lt;br /&gt;Return&lt;br /&gt;&lt;br /&gt;Procedure mostrar(mtxCounter)&lt;br /&gt;Local nStatus := 1, cStatus := "|/-\"&lt;br /&gt;Local nLinea := GetThreadId()&lt;br /&gt;do while !lFinalizar&lt;br /&gt;&amp;nbsp;&amp;nbsp;DevOut(nGlobalCounter,,nLinea,10)&lt;br /&gt;&amp;nbsp;&amp;nbsp;ThreadSleep(500)&lt;br /&gt;enddo&lt;br /&gt;Return&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Un ejemplo más complejo es el de una clase que implemente una pila o cola. Es totalmente necesario que mientras un hilo intenta agregar o quitar un elemento, otro hilo no pueda ni agregar ni quitar elementos. Por lo tanto la actualización del array que mantiene la pila o cola, debe estar protegido por un mutex.&lt;br /&gt;&lt;br /&gt;En la próxima entrega, más usos de la entidad Mutex.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36856108-4777892653041069602?l=puertosur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://puertosur.blogspot.com/feeds/4777892653041069602/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36856108&amp;postID=4777892653041069602' title='1 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36856108/posts/default/4777892653041069602'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36856108/posts/default/4777892653041069602'/><link rel='alternate' type='text/html' href='http://puertosur.blogspot.com/2008/06/multihilos-en-xharbour-parte-ii.html' title='Multihilos en xHarbour - Parte II'/><author><name>Walter Negro</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36856108.post-6836836947338224544</id><published>2008-06-11T23:37:00.000-03:00</published><updated>2008-06-12T02:07:03.387-03:00</updated><title type='text'>Multihilos en xHarbour - como compilar</title><content type='html'>Como compilar los ejemplos:&lt;br /&gt;&lt;br /&gt;Los ejemplos que encontrarán en estas notas son sencillos y se podrán compilar con el archivo \xharbour\tests\bldtest.bat de la siguiente forma:&lt;br /&gt;&lt;br /&gt;c:\xharbour\tests&gt; bldtest.bat /mt test1.prg&lt;br /&gt;&lt;br /&gt;Por default el archivo .bat está preparado para usar el compilador de Borland.&lt;br /&gt;Para usar otro compilador será necesario establecer algunas variables de entorno.&lt;br /&gt;&lt;br /&gt;También pueden crear un archivo xcomp.bat con las siguientes lineas y que permite compilar con el compilador de Borland.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;//------------------------------------------------&lt;br /&gt;@harbour %1 /n %2 %3 %4 %5 %6 %7 %8 %9&lt;br /&gt;@bcc32 -tWM -I\xharbour\include -L\xharbour\lib -5 -O2 -d %1.c debug.lib vmmt.lib rtlmt.lib gtwin.lib lang.lib rddmt.lib macromt.lib ppmt.lib dbfntxmt.lib common.lib codepage.lib pcrepos.lib sixcdxmt.lib dbffptmt.lib hbsixmt.lib&lt;br /&gt;&lt;br /&gt;//------------------------------------------------&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Hay que tener en cuenta que las líneas del archivo son solamente 2, las que comienzan con el caracter @.&lt;br /&gt;&lt;br /&gt;Luego de construir el archivo .bat, podrán compilar de la siguiente forma:&lt;br /&gt;&lt;br /&gt;x:\xharbour\tests&gt; xcomp test1&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36856108-6836836947338224544?l=puertosur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://puertosur.blogspot.com/feeds/6836836947338224544/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36856108&amp;postID=6836836947338224544' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36856108/posts/default/6836836947338224544'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36856108/posts/default/6836836947338224544'/><link rel='alternate' type='text/html' href='http://puertosur.blogspot.com/2008/06/multihilos-en-xharbour-como-compilar.html' title='Multihilos en xHarbour - como compilar'/><author><name>Walter Negro</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36856108.post-8327987259127833910</id><published>2008-06-02T23:06:00.007-03:00</published><updated>2008-06-03T15:26:20.993-03:00</updated><title type='text'>Multihilos en xHarbour - Parte I</title><content type='html'>Como toda cosa nueva, como todo cambio, siempre cuesta y siempre genera incertidumbre.&lt;br /&gt;Crear programas multihilos es un cambio respecto de la programación habitual, pero la verdad, es que la teoria de los multihilos es muy simple.&lt;br /&gt;&lt;br /&gt;Usar multihilos es tan simple de usar como el SQL.&lt;br /&gt;El SQL tiene 7 comandos.&lt;br /&gt;Para usar multihilos es suficiente con conocer cerca de 10 instrucciones.&lt;br /&gt;&lt;br /&gt;¿Tan simple es?&lt;br /&gt;Bueno, la respuesta es un poco más compleja que un Si o un No.&lt;br /&gt;&lt;br /&gt;Si nos guiamos por la cantidad de instrucciones/funciones a usar, y por la sencilla explicación de lo que hace cada una de ellas, contestaría que Si.&lt;br /&gt;&lt;br /&gt;Pero. ¿Es posible medir la simplicidad de la programación por la cantidad de instrucciones que posee?&lt;br /&gt;&lt;br /&gt;Yo, como muchos, creo que la programación es un arte como lo es la pintura. Ahora, si es tan simple combinar colores, ¿por qué yo no soy un pintor? ¿Por qué no pagarían ni 10 centavos por una "obra" mía?&lt;br /&gt;&lt;br /&gt;Nuestra diseñadora gráfica me contestaría que no es suficiente con saber combinar. También hay que saber cómo combinar los colores (y tener buen gusto, algo que no es mi fuerte).&lt;br /&gt;&lt;br /&gt;Ahh, así que no es suficiente con conocer 5, 7 o 10 instrucciones, también es necesario saber cómo y cuándo usarlas y cada una de sus opciones.&lt;br /&gt;&lt;br /&gt;Al igual que los corredores profesionales de autos, no solo saben manejar muy bien, también conocen de mecánica y de aerodinámica, y además, horas y horas de prácticas para conocer los límites del auto.&lt;br /&gt;&lt;br /&gt;Un programador debe conocer las instrucciones, cuándo aplicarlas y cómo combinarlas, pero en la alta competencia no es suficiente.&lt;br /&gt;Además debe conocer pormenores del motor de ejecución y pormenores del sistema operativo.&lt;br /&gt;Eso se aplica tanto al SQL como a los multihilos.&lt;br /&gt;&lt;br /&gt;Quizás esta introducción no es muy amigable, pero es la realidad. La teoría es sencilla, pero la práctica algunas veces se complica, pero con práctica y buenas normas de programación para multihilos, se podrá salir adelante.&lt;br /&gt;&lt;br /&gt;Pero mejor, vayamos a los multihilos que es el tema.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Primera ejecución de una función en paralelo&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;La ejecución de una rutina en paralelo con otra es muy sencilla. Sólo es suficiente con poner StartThread( @enparalelo() ) para que la función enparalelo() comience a ejecutarse.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;//-----------------------------------------------&lt;br /&gt;Static lFinalizar := .f.&lt;br /&gt;&lt;br /&gt;Function Main()&lt;br /&gt;cls&lt;br /&gt;StartThread(@enparalelo())&lt;br /&gt;DevOut("Presione una tecla para finalizar",,1,0)&lt;br /&gt;inkey(0)&lt;br /&gt;&lt;br /&gt;Procedure enparalelo()&lt;br /&gt;Local nStatus := 1, cStatus := "|/-\"&lt;br /&gt;Local nLinea := GetThreadId()&lt;br /&gt;do while !lFinalizar&lt;br /&gt;&amp;nbsp;&amp;nbsp;DevOut(cStatus[nStatus],,nLinea,10)&lt;br /&gt;&amp;nbsp;&amp;nbsp;if ++nStatus &gt; 3&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;nStatus := 1&lt;br /&gt;&amp;nbsp;&amp;nbsp;endif&lt;br /&gt;&amp;nbsp;&amp;nbsp;ThreadSleep(500)&lt;br /&gt;enddo&lt;br /&gt;Return&lt;br /&gt;//-----------------------------------------------&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;De la misma forma, si ejecutamos 2 veces StartThread(), estaremos haciendo que se ejecuten 2 hilos.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;Function Main()&lt;br /&gt;cls&lt;br /&gt;StartThread(@enparalelo())&lt;br /&gt;StartThread(@enparalelo())&lt;br /&gt;DevOut("Presione una tecla para finalizar",,1,0)&lt;br /&gt;inkey(0)&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Es posible pasar parámetros al thread? Si.&lt;br /&gt;&lt;br /&gt;StartThread(@enparalelo(),xParam1,xParam2,...)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Resumiendo, estas son las opciones de ejecución para lanzar threads.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;// usando puntero a la funcion (puede ser publica o estatica)&lt;/span&gt;&lt;br /&gt;StartThread(@funcion(),&lt;parametros,...&gt;)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;// usando el nombre de la funcion (debe ser publica)&lt;/span&gt;&lt;br /&gt;StartThread("funcion",&lt;parametros,...&gt;)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;// usando el nombre del metodo&lt;/span&gt;&lt;br /&gt;StartThread(objeto,"metodo",&lt;parametros,...&gt;)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;// usando el puntero al metodo&lt;/span&gt;&lt;br /&gt;StartThread(objeto,__ObjPtr(objeto,"metodo"),&lt;parametros,...&gt;)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;// usando un codeblock&lt;/span&gt;&lt;br /&gt;StartThread(codeblock,&lt;parametros,...&gt;)&lt;br /&gt;&lt;br /&gt;Antes de finalizar esta primera entrega, voy a dar una lista de las funciones que se usan en multihilos y de las cuales veremos sus usos, comportamientos, casos de uso y advertencias de uso.&lt;br /&gt;&lt;br /&gt;HB_MutexCreate&lt;br /&gt;HB_MutexLock&lt;br /&gt;HB_MutexUnlock&lt;br /&gt;HB_MutexTryLock&lt;br /&gt;HB_MutexTimeOutLock&lt;br /&gt;&lt;br /&gt;Subscribe&lt;br /&gt;SubscribeNow&lt;br /&gt;Notify&lt;br /&gt;NotifyAll&lt;br /&gt;&lt;br /&gt;StopThread&lt;br /&gt;JoinThread&lt;br /&gt;KillThread&lt;br /&gt;WaitForAllThreads&lt;br /&gt;GetThreadId&lt;br /&gt;&lt;br /&gt;Hasta la próxima&lt;/parametros,...&gt;&lt;/parametros,...&gt;&lt;/parametros,...&gt;&lt;/parametros,...&gt;&lt;/parametros,...&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36856108-8327987259127833910?l=puertosur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://puertosur.blogspot.com/feeds/8327987259127833910/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36856108&amp;postID=8327987259127833910' title='7 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36856108/posts/default/8327987259127833910'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36856108/posts/default/8327987259127833910'/><link rel='alternate' type='text/html' href='http://puertosur.blogspot.com/2008/06/multihilos-en-xharbour-parte-i.html' title='Multihilos en xHarbour - Parte I'/><author><name>Walter Negro</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36856108.post-2840946616274424543</id><published>2008-04-13T22:17:00.000-03:00</published><updated>2008-04-14T00:00:02.348-03:00</updated><title type='text'>Monopolio o No-Monopolio, esa es la cuestión</title><content type='html'>Comencé a pensar en este artículo hace un tiempo, pero ahora tengo la necesidad de terminar de escribirlo.&lt;br /&gt;&lt;br /&gt;El movimiento del software libre ya tiene unos cuantos años y una gran cantidad de adeptos y simpatizantes.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Software libre vs Software propietario, es la cuestión?&lt;/span&gt;&lt;br /&gt;Hoy muchos artículos en revistas y blogs discuten acerca de dos supuestas posiciones antagónicas. Sofware libre vs Software propietario.&lt;br /&gt;Los partidarios del software libre enarbolan fuertemente la bandera de la libertad, incluso a costa de coartar algunas libertades.&lt;br /&gt;Por otra parte los creadores de software propietario defienden sus creaciones y sus empresas y detrás de ellas su esfuerzo (pocas veces las grandes empresas se meten en estas discusiones).&lt;br /&gt;&lt;br /&gt;Pero, llegan a alguna conclusión válida estas discusiones? o son peleas filosóficas?&lt;br /&gt;Yo creo que son discusiones sin sentido, simplemente porque ambos bandos tienen una parte de la verdad y porque ambos pueden convivir.&lt;br /&gt;Entonces, quién se beneficia? Los beneficiados son unos pocos y quizás hasta les interese estas discusiones, porque hace quitar la atención de la verdadera discusión.&lt;br /&gt;&lt;br /&gt;La verdadera discusión debería ser: hasta cuando los gobiernos permitirán y alimentarán los monopolios?&lt;br /&gt;Hasta cuando nosotros mismos alimentaremos y permitiremos los monopolios?&lt;br /&gt;&lt;br /&gt;Sabemos que los monopolios son malos, pero como estamos siendo afectados?&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Cómo nos afectan los monopolios ?&lt;/span&gt;&lt;br /&gt;Los monopolios afectan todo lo que los rodea y cuando se trata de algo muy metido en la sociedad, afecta a toda la sociedad.&lt;br /&gt;Hoy en día Microsoft está afectando a toda la sociedad, y si no se lo controla, Google podría llegar a hacer algo similar con internet, lo cual podría ser peor ya que internet es multiplataforma.&lt;br /&gt;&lt;br /&gt;Un monopolio es como un virus y muy comparable con el virus del HIV.&lt;br /&gt;Lo primero que afecta un monopolio es la competencia y busca por todos los medios combatir cualquier intento de surgimiento de una competencia.&lt;br /&gt;&lt;br /&gt;Inicialmente no afecta a los consumidores y hasta parece bueno o tonto.&lt;br /&gt;(los CD de Windows no tienen protección anticopia y hasta se consiguen los generadores de claves para instalar el producto)&lt;br /&gt;&lt;br /&gt;Un monopolio, puede no poner precios altos y hasta regalar productos, pero el fin es simplemente matar la competencia (Netscape vs Explorer)&lt;br /&gt;&lt;br /&gt;Cuando tiene a los consumidores totalmente dependientes y sin amenazas que combatir, comienza el proceso de ahogamiento de los mismos consumidores tal como una boa constrictora lo hace con su presa.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;El proceso de ahogamiento de un monopolio&lt;/span&gt;&lt;br /&gt;El proceso comienza con los canales de venta y los contratos abusivos que limitan la instalación de programas en computadoras nuevas.&lt;br /&gt;O los contratos con otras empresas para impedir el desarrollo de productos.&lt;br /&gt;(que pasó con Kylix y Corel Linux).&lt;br /&gt;&lt;br /&gt;Paralelamente comienza a verse el principio de tratar al usuario de inepto, incluido al administrador del sistema.&lt;br /&gt;Claro, crearon un producto que hasta un dummy podría usar y ahora creen que todos son unos dummys a los que hay que decirles que pueden y que no pueden hacer con el sistema.&lt;br /&gt;(Ej: Esta carpeta contiene archivos que mantienen el sistema en correcto funcionamiento.&lt;br /&gt;No debería modificar su contenido)&lt;br /&gt;&lt;br /&gt;El siguiente nivel de estrangulamiento es dictaminar como deben crear sus productos las compañías de hardware para permitirles el soporte en la siguiente versión del sistema operativo. Incluyendo cláusulas de no publicación de cierta información técnica del producto y de no publicación de drivers para soporte de un sistema operativo vigente.&lt;br /&gt;( Cómo puede ser que existan:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Notebooks con sistemas de disco no estándares sin drivers para Windows XP.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Placas de video de última generación con características que sólo pueden usarse bajo Windows Vista y si se quiere utilizar con otro sistema operativo, esas características no estarán disponibles. Un nuevo modelo de drivers hace necesario tener un driver para cada modelo de tarjeta lo cual aumenta el costo de desarrollo y testeo, y eso lo pagan tanto los usuarios de Windows Vista como los usuarios de otros sistemas operativos.&lt;br /&gt;Las nuevas características sólo se podrán usar bajo Windows Vista y siempre y cuando éste se los permita.&lt;br /&gt;Y para coartar aún más las libertades del usuario, al momento de utilizar ciertas características avanzadas, algunos dispositivos podrán ser desactivados bajo criterio y decisión del sistema operativo.&lt;br /&gt;No era mejor que el hardware se comunicara con el hardware y el proceso de autorización y autenticación fuera independiente del sistema operativo? No claro, porque esto abriría la competencia.&lt;/li&gt;&lt;/ul&gt;)&lt;br /&gt;&lt;br /&gt;A estas alturas tenemos:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;usuarios dependientes de sus computadoras pero que no pueden utilizar muchas de sus características.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Tenemos usuarios que compran notebooks nuevas con el logo de Windows Vista Capable sin embargo no son capaces de mostrar nada mejor que un Windows XP y funcionar peor que con un Windows XP y sin posibilidad de instalar Windows XP bajo la amenaza de perder la garantía !!!!&lt;/li&gt;&lt;/ul&gt;Como puede existir una cláusula de esta naturaleza? Como puede el fabricante del hardware decirme que tal programa no puedo instalarlo en esa computadora?&lt;br /&gt;Alguien compraría un auto con la cláusula "Si bien este auto posee 4 asientos, el cargar más de 2 personas invalida la garantía sobre el motor".&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Los afectados&lt;/span&gt;&lt;br /&gt;En algunas notebooks modernas, no impiden que instale Linux, impiden que instale Windows XP al no proveer los drivers. (Al momento de escribir estas líneas Windows XP es un producto vigente y con soporte de la misma forma que Windows Vsita)&lt;br /&gt;Y quién otra que la misma Microsoft puede estar interesada en que no puedas usar Windows XP?&lt;br /&gt;Y quién es el único afectado? &lt;span style="font-weight: bold;"&gt;el usuario&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Otros afectados son los desarrolladores.&lt;br /&gt;Microsoft en su sed de abarcar todo, intenta establecer que el único lenguaje válido para hacer programas para Windows Vista y posteriores sea algún lenguaje podado-recortado-adaptado para funcionar bajo la plataforma .NET&lt;br /&gt;&lt;br /&gt;Y como los viejos desarrolladores son un poco reacios, hay que apuntar a los futuros desarrolladores.&lt;br /&gt;Pero para que estos futuros desarrolladores no usen más que .NET, se instalan nuevos centros de cómputos con servers y máquinas de última generación en cada facultad en donde se enseñe programación, para que se use .NET, con profesores adeptos a .NET y nada de profesores que enseñen a pensar, solo profesores que enseñen .NET.&lt;br /&gt;Pero TAN es malo .NET? no, .NET no es malo en si mismo, es mala la práctica monopólica de intentar imponer .NET como único sistema para utilizar las características de un sistema operativo.&lt;br /&gt;Y esto sólo es posible gracias al monopolio.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Y esto no termina acá...&lt;/span&gt;&lt;br /&gt;Y como si todo esto fuera poco y para seguir mostrando otra vuelta más de la boa constrictora.&lt;br /&gt;En estos días, contra todo pronóstico coherente y con abrumadoras y nauseabundas prácticas de&lt;br /&gt;corrupción y monopolio, Microsoft logró aprobar un estandar ISO para intercambio de documentos cuando ya existe un estandar ISO para esa función.&lt;br /&gt;&lt;span style="font-style: italic;"&gt;ATENCION: Los siguientes link pueden contener detalles de prácticas monopólicas no apto para cardíacos.&lt;br /&gt;&lt;/span&gt;&lt;a href="http://barrapunto.com/article.pl?sid=08/04/02/1047257"&gt;http://barrapunto.com/article.pl?sid=08/04/02/1047257&lt;/a&gt;&lt;span style="font-style: italic;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;a href="http://www.openxml.info/index.php?option=com_content&amp;amp;task=view&amp;amp;id=27&amp;amp;Itemid=7"&gt;http://www.openxml.info/index.php?option=com_content&amp;amp;task=view&amp;amp;id=27&amp;amp;Itemid=7&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Moraleja&lt;/span&gt;&lt;br /&gt;Las empresas están para ganar plata, pero cuando la forma de ganar plata se realiza por prácticas anticompetitivas los gobiernos y/o la justicia deberían poner coto a esas prácticas.&lt;br /&gt;Cuando esto no ocurre, los afectados somos nosotros mismos.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36856108-2840946616274424543?l=puertosur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://puertosur.blogspot.com/feeds/2840946616274424543/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36856108&amp;postID=2840946616274424543' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36856108/posts/default/2840946616274424543'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36856108/posts/default/2840946616274424543'/><link rel='alternate' type='text/html' href='http://puertosur.blogspot.com/2008/04/monopolio-o-no-monopolio-esa-es-la.html' title='Monopolio o No-Monopolio, esa es la cuestión'/><author><name>Walter Negro</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36856108.post-3189202847097698569</id><published>2008-03-04T16:44:00.001-02:00</published><updated>2008-03-04T17:07:41.586-02:00</updated><title type='text'>Advantage Database Server 9</title><content type='html'>Texto de un mail recibido desde &lt;a href="http://www.abox.com/buscar.asp?texto=advantage"&gt;Abox&lt;/a&gt;:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;SYBASE iANYWHERE Anuncia&lt;p&gt;&lt;center&gt;ADVANTAGE DATABASE SERVER 9&lt;/center&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Advantage lanza al mercado su nueva versión 9. Esta marcará el final del ciclo de vida de las versiones antiguas de Advantage data Server. &lt;b&gt;&lt;u&gt;A partir del 30 de marzo de 2008, las versiones 5,6, y 7.x no se les dará soporte técnico&lt;/b&gt;&lt;/u&gt;. Para continuar con el apoyo los usuarios de la versión 7.x de Advantage pueden comprar las actualizaciones de las versiones más recientes (versiones admitidas, Advantage 8 o 9.)&lt;br /&gt;&lt;br /&gt;Por un período de transición de 6 meses después del lanzamiento de Advantage 9, los clientes pueden comprar nuevas licencias de Advantage 9 y también puede recibir un duplicado de Advantage 8 para ser utilizados de conformidad con los términos del acuerdo a la licencia de software. Este período de transición se ha diseñado para permitir que los usuarios actuales puedan integrar plenamente la versión 9 sin interrumpir los ciclos de liberación los cuales se hubieran planeado previamente. Después de este período de transición, los clientes todavía pueden comprar las versiones antiguas de Advantage, pero no tendrán derecho a nuevas versiones sin la compra de la actualización adecuada. Actualizaciones de estas licencias se pueden comprar en cualquier momento y en los precios vigentes.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Que hay de nuevo en la versión 9 de Advantage&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Mejoras en el soporte de FoxPro: Advantage 9 soportara la versión de Visual FoxPro 9.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;64-bit en servidores Windows y Linux Advantage Database Server ha sido adaptado para funcionar como aplicación nativa de 64-bit en la versiones de x64 de Windows y Linux.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;SQL Debugger: Un SQL debugger ha sido añadido a la versión 9 de Advantage Data Architect, Permitiendo a los desarrolladores depurar scripts SQL, procedimientos almacenados, disparadores, y funciones definidas por el usuario..&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Notificaciones de Eventos : las notificaciones de eventos es un mecanismo que permite al servidor notificar proactivamente a los clientes de que un evento que les interesa se ha producido.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;New Default User Groups: admin, public, debug, backup&lt;br /&gt;&lt;/li&gt;&lt;li&gt;TDataSet Descendant Version Switching Utility&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Dynamic Server Configuration&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Optimized Replication Functionality and Enhancements&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;Para ver información mas detallada de las novedades de la versión 9, pueden ir a la &lt;a href="http://devzone.advantagedatabase.com/dz/content.aspx?key=15"&gt;zona de desarrolladores de Advantage&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Download&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;La versión de Advantage 9 esta disponible para &lt;a href="http://devzone.advantagedatabase.com/dz/content.aspx?key=20&amp;Release=11"&gt;descarga&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36856108-3189202847097698569?l=puertosur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://puertosur.blogspot.com/feeds/3189202847097698569/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36856108&amp;postID=3189202847097698569' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36856108/posts/default/3189202847097698569'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36856108/posts/default/3189202847097698569'/><link rel='alternate' type='text/html' href='http://puertosur.blogspot.com/2008/03/advantage-database-server-9.html' title='Advantage Database Server 9'/><author><name>Gustavo Valentin</name><uri>http://www.blogger.com/profile/01677653510781195786</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://1.bp.blogspot.com/_Rp8ZPcn5YCY/SmjNi6ZntgI/AAAAAAAAABU/glIo1ybb410/S220/Castromonte+cartel+foto+chica.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36856108.post-6405170206575691950</id><published>2008-02-06T19:42:00.000-02:00</published><updated>2008-02-06T20:06:34.850-02:00</updated><title type='text'>Comentarios sobre software de gestión</title><content type='html'>Un link de un blog con temas interesantes para los que estamos en el negocio de desarrollar software de gestión:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.evaluandoerp.blogspot.com/"&gt;http://www.evaluandoerp.blogspot.com/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;La definición en Wikipedia: &lt;a href="http://es.wikipedia.org/wiki/Planificaci%C3%B3n_de_Recursos_Empresariales"&gt;http://es.wikipedia.org/wiki/Planificación_de_Recursos_Empresariales&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36856108-6405170206575691950?l=puertosur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://puertosur.blogspot.com/feeds/6405170206575691950/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36856108&amp;postID=6405170206575691950' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36856108/posts/default/6405170206575691950'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36856108/posts/default/6405170206575691950'/><link rel='alternate' type='text/html' href='http://puertosur.blogspot.com/2008/02/comentarios-sobre-software-de-gestin.html' title='Comentarios sobre software de gestión'/><author><name>Gustavo Valentin</name><uri>http://www.blogger.com/profile/01677653510781195786</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://1.bp.blogspot.com/_Rp8ZPcn5YCY/SmjNi6ZntgI/AAAAAAAAABU/glIo1ybb410/S220/Castromonte+cartel+foto+chica.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36856108.post-7769152866526571500</id><published>2008-01-21T12:47:00.000-02:00</published><updated>2008-01-21T13:06:49.837-02:00</updated><title type='text'>Sun compra MySQL y Oracle Bea Systems</title><content type='html'>Luego del primer impacto de la crisis inmobiliaria en EEUU (con sus ecos en todo el mundo) que dejó a todos estáticos parece que los capitales finalmente se van a inclinar por las inversiones tecnológicas.&lt;br /&gt;&lt;br /&gt;La semana pasada se conocieron dos &lt;a href="http://www.cincodias.com/articulo/empresas/Oracle/Sun/retoman/compras/seguir/creciendo/cdssec/20080117cdscdiemp_30/Tes/"&gt;compras importantes&lt;/a&gt; por parte de Sun, quien compró  MySQL AB, la base de datos de código abierto mas difundida del planeta y Oracle quien compró Bea Systems, un fabricante de software middleware (programas que corren encima de la base de datos, principalmente relacionados con Java).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36856108-7769152866526571500?l=puertosur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://puertosur.blogspot.com/feeds/7769152866526571500/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36856108&amp;postID=7769152866526571500' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36856108/posts/default/7769152866526571500'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36856108/posts/default/7769152866526571500'/><link rel='alternate' type='text/html' href='http://puertosur.blogspot.com/2008/01/sun-compra-mysql-y-oracle-bea-systems.html' title='Sun compra MySQL y Oracle Bea Systems'/><author><name>Gustavo Valentin</name><uri>http://www.blogger.com/profile/01677653510781195786</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://1.bp.blogspot.com/_Rp8ZPcn5YCY/SmjNi6ZntgI/AAAAAAAAABU/glIo1ybb410/S220/Castromonte+cartel+foto+chica.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36856108.post-6659660774068501718</id><published>2007-11-10T19:35:00.001-03:00</published><updated>2007-11-10T19:50:40.820-03:00</updated><title type='text'>Visto en el foro en ingles de FiveTechSoft</title><content type='html'>&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Fué anunciada la versión 7.11 de FiveWin para Harbour/xHarbour:&lt;br /&gt;&lt;a href="http://fivetechsoft.com/forums/viewtopic.php?t=8720"&gt;http://fivetechsoft.com/forums/viewtopic.php?t=8720&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Sin respuesta el acceso a web services (cri cri cri):&lt;br /&gt;&lt;a href="http://fivetechsoft.com/forums/viewtopic.php?t=8650"&gt;http://fivetechsoft.com/forums/viewtopic.php?t=8650&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Nuevo menu y button bar estilo Office 2007. Excelentes, muy vistosos:&lt;br /&gt;&lt;a href="http://fivetechsoft.com/forums/viewtopic.php?t=8496"&gt;http://fivetechsoft.com/forums/viewtopic.php?t=8496&lt;/a&gt;&lt;br /&gt;&lt;a href="http://fivetechsoft.com/forums/viewtopic.php?t=8426"&gt;http://fivetechsoft.com/forums/viewtopic.php?t=8426&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Tambien nueva clase tOutLook2003:&lt;br /&gt;&lt;a href="http://fivetechsoft.com/forums/viewtopic.php?t=8101"&gt;http://fivetechsoft.com/forums/viewtopic.php?t=8101&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;VRMM es un nuevo programa para diseñar formularios y generar programas fuente para Fivewin, miniGui y hwGui. Tienen una versión free y otra paga:&lt;br /&gt;&lt;a href="http://www.vrmm.com.br/"&gt;http://www.vrmm.com.br/&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.viaopen.com/vcoral_us.html"&gt;ViaOpen&lt;/a&gt; anunció un nuevo control Ribbon Bar:&lt;br /&gt;&lt;a href="http://fivetechsoft.com/forums/viewtopic.php?t=8500"&gt;http://fivetechsoft.com/forums/viewtopic.php?t=8500&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Trick para usar metafile en el clipboard:&lt;br /&gt;&lt;a href="http://fivetechsoft.com/forums/viewtopic.php?t=8020"&gt;http://fivetechsoft.com/forums/viewtopic.php?t=8020&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;En un thread sobre .net Rick Lipkin nos recuerda su interesante post sobre Ado:&lt;br /&gt;&lt;a href="http://fivetechsoft.com/forums/viewtopic.php?t=6691&amp;highlight=ado"&gt;http://fivetechsoft.com/forums/viewtopic.php?t=6691&amp;highlight=ado&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36856108-6659660774068501718?l=puertosur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://puertosur.blogspot.com/feeds/6659660774068501718/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36856108&amp;postID=6659660774068501718' title='1 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36856108/posts/default/6659660774068501718'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36856108/posts/default/6659660774068501718'/><link rel='alternate' type='text/html' href='http://puertosur.blogspot.com/2007/11/visto-en-el-foro-en-ingles-de.html' title='Visto en el foro en ingles de FiveTechSoft'/><author><name>Gustavo Valentin</name><uri>http://www.blogger.com/profile/01677653510781195786</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://1.bp.blogspot.com/_Rp8ZPcn5YCY/SmjNi6ZntgI/AAAAAAAAABU/glIo1ybb410/S220/Castromonte+cartel+foto+chica.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36856108.post-3221295264240606813</id><published>2007-10-03T21:44:00.000-03:00</published><updated>2007-10-03T21:45:29.990-03:00</updated><title type='text'>Eligen a las siete maravillas del mundo tecnológico</title><content type='html'>Una publicación especializada realizó la lista, en donde se encuentran inventos bien conocidos por el hombre y otros que vale la pena conocer. La nómina completa&lt;br /&gt;La publicación CIO realizó una lista con las que, a su entender, son las siete maravillas del mundo tecnológico. Si bien no acudió a la votación para elaborarla, pide a sus lectores que den su opinión sobre cuál debería ser la octava maravilla.&lt;br /&gt;La lista:&lt;br /&gt;1-La computadora más cercana al Polo Norte, propiedad de la Marina de los EEUU, se llevó el primer lugar. La máquina ofrece imágenes en vivo entre los meses de abril y octubre y contribuye de sobremanera en investigaciones que se realizan allí. &lt;br /&gt;&lt;br /&gt;2-La computadora más alejada de la Tierra, en la sonda Voyager 1, tiene el segundo lugar. Actualmente a 4.000 millones de kilómetros, es el objeto de fabricación humana que más lejos viajó.&lt;br /&gt;&lt;br /&gt;3-Uno de los misterios mejor guardados por Google ocupa el tercer lugar: su centro de datos. En él trabajan entre 100 y 200 personas y se estima que ocupa unos 30 acres. Allí se almacenan 2 petabytes y sólo dos periodistas lograron ingresar. Su sistema de ventilación tiene el tamaño de un edificio de cuatro pisos.&lt;br /&gt;&lt;br /&gt;4-El cuarto lugar lo ocupa el más grande programa de colaboración científica: el E-SciencE II (EGEE-II). Se trata de cientos de computadoras al servicio de investigaciones que van desde la geología hasta la química. Allí analizan por ejemplo acontecimientos alrededor del Big Bang. Son 45 los países que participan del programa.&lt;br /&gt;&lt;br /&gt;5-IBM y la BlueGen/L están en el quinto lugar. La supercomputadora ayuda a científicos a resolver complicados problemas y consume la misma energía que un motor de 200 caballos de fuerza.&lt;br /&gt;&lt;br /&gt;6-La Ultra Mobile PC 02 de OQO tiene el sexto lugar. Esta mini computadora es capaz de utilizar el Windows Vista. Un desarrollo que lleva al extremo el concepto de portabilidad.&lt;br /&gt;&lt;br /&gt;7-El último lugar de la lista de CIO se lo llevó Linux, el sistema operativo gratuito que es sinónimo de Software Libre en nuestros días.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36856108-3221295264240606813?l=puertosur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://puertosur.blogspot.com/feeds/3221295264240606813/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36856108&amp;postID=3221295264240606813' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36856108/posts/default/3221295264240606813'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36856108/posts/default/3221295264240606813'/><link rel='alternate' type='text/html' href='http://puertosur.blogspot.com/2007/10/eligen-las-siete-maravillas-del-mundo.html' title='Eligen a las siete maravillas del mundo tecnológico'/><author><name>Cristian Galinelli</name><uri>http://www.blogger.com/profile/04427307135523155514</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36856108.post-293936066633473028</id><published>2007-09-29T06:49:00.000-03:00</published><updated>2007-09-29T06:53:53.892-03:00</updated><title type='text'>Transacciones y operaciones atómicas</title><content type='html'>El capítulo del manual de MySQL dedicado a las transacciones y a las operaciones atómicas tiene una descripción muy interesante acerca de ambos métodos para grabar datos.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://dev.mysql.com/doc/refman/5.0/es/ansi-diff-transactions.html"&gt;Link al capítulo.&lt;/a&gt;&lt;br /&gt;&lt;a href="http://dev.mysql.com/doc/refman/5.0/es/"&gt;Link al manual.&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36856108-293936066633473028?l=puertosur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://puertosur.blogspot.com/feeds/293936066633473028/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36856108&amp;postID=293936066633473028' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36856108/posts/default/293936066633473028'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36856108/posts/default/293936066633473028'/><link rel='alternate' type='text/html' href='http://puertosur.blogspot.com/2007/09/transacciones-y-operaciones-atmicas.html' title='Transacciones y operaciones atómicas'/><author><name>Gustavo Valentin</name><uri>http://www.blogger.com/profile/01677653510781195786</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://1.bp.blogspot.com/_Rp8ZPcn5YCY/SmjNi6ZntgI/AAAAAAAAABU/glIo1ybb410/S220/Castromonte+cartel+foto+chica.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36856108.post-191120495195970020</id><published>2007-08-13T19:58:00.000-03:00</published><updated>2007-08-13T20:18:02.317-03:00</updated><title type='text'>SCO: ¿fin de una parodia?</title><content type='html'>De acuerdo a una &lt;a href="http://arstechnica.com/news.ars/post/20070812-sco-never-owned-unix-copyrights-owes-novell-95-percent-of-unix-royalties.html"&gt;nota publicada en el site arstechnica&lt;/a&gt; el juez que sigue el caso de SCO determinó que nunca poseyó los derechos sobre Unix y en cambio si le pertenecen a Novel en un 95%&lt;br /&gt;Recordemos que SCO le inició hace unos pocos años un juicio millonario a IBM por el uso que este le estaba dando a Linux alegando que poseia los derechos sobre Unix y que IBM estaba incrustando codigo Unix dentro de Linux. Esto desato una ola de temores en las grandes compañias ya que podían ser litigadas por utilizar Linux y por consiguiente siguieron comprando software cerrado (no open-source).&lt;br /&gt;La medida del juez provoca la caida de la demanda de SCO y la probable presentación en bancarrota ya que desde que se inició la demanda nunca tuvo un ejercicio con ganancia salvo las 2 ventas que le hizo a Microsoft y a Sun (ganancias que no liquidó correctamente a Novel).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36856108-191120495195970020?l=puertosur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://puertosur.blogspot.com/feeds/191120495195970020/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36856108&amp;postID=191120495195970020' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36856108/posts/default/191120495195970020'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36856108/posts/default/191120495195970020'/><link rel='alternate' type='text/html' href='http://puertosur.blogspot.com/2007/08/sco-fin-de-una-parodia.html' title='SCO: ¿fin de una parodia?'/><author><name>Gustavo Valentin</name><uri>http://www.blogger.com/profile/01677653510781195786</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://1.bp.blogspot.com/_Rp8ZPcn5YCY/SmjNi6ZntgI/AAAAAAAAABU/glIo1ybb410/S220/Castromonte+cartel+foto+chica.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36856108.post-3801141257314809467</id><published>2007-07-10T12:14:00.001-03:00</published><updated>2007-07-10T12:14:53.518-03:00</updated><title type='text'>SOA</title><content type='html'>Quizas para algunos programadores esto suena a ciencia ficción, pero los sistemas orientados a servicios (&lt;a href="http://es.wikipedia.org/wiki/SOA"&gt;http://es.wikipedia.org/wiki/SOA&lt;/a&gt;) llegaron para quedarse y de alguna u otra manera tendremos que lidiar con ellos.&lt;br /&gt;&lt;br /&gt;El concepto es simple, cuando se necesita una información que se posee o un proceso que no se tiene, simplemente se lo pide a algún servidor que sea capaz de proveerlo y se gestiona la data obtenida como cualquier otra que ya se posea. Por ejemplo los datos del tiempo o chequear la sintaxis de un texto. La forma de intercambio es con archivos XML, que son muy parecidos a los html (los que se utilizan en las páginas web) pero con un formato mas estricto.&lt;br /&gt;&lt;br /&gt;Pero no todo es color de rosa, se requiere un correcto análisis antes de implementarlo o corremos el riesgo de fallar como lo comenta esta &lt;a href="http://www.siliconnews.es/es/silicon/special-report/2007/06/27/implementar-soa-buenas-pr"&gt;nota de siliconnews&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36856108-3801141257314809467?l=puertosur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://puertosur.blogspot.com/feeds/3801141257314809467/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36856108&amp;postID=3801141257314809467' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36856108/posts/default/3801141257314809467'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36856108/posts/default/3801141257314809467'/><link rel='alternate' type='text/html' href='http://puertosur.blogspot.com/2007/07/soa.html' title='SOA'/><author><name>Gustavo Valentin</name><uri>http://www.blogger.com/profile/01677653510781195786</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://1.bp.blogspot.com/_Rp8ZPcn5YCY/SmjNi6ZntgI/AAAAAAAAABU/glIo1ybb410/S220/Castromonte+cartel+foto+chica.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36856108.post-4161076433819017930</id><published>2007-05-19T18:09:00.000-03:00</published><updated>2007-05-19T18:21:07.021-03:00</updated><title type='text'>OpenDocument: estándar internacional ISO 26300</title><content type='html'>La medianoche del pasado día lunes 1 de mayo en Ginebra fue histórica, porque por primera vez para la humanidad se aprobó como estándar de derecho un formato electrónico ofimático y documental que cuenta con implementaciones en productivo y que además es abierto y libre.&lt;br /&gt;&lt;br /&gt;Significativo es que ningún país votó en contro (incluida España). Esa unanimidad acelerará 6 meses la publicación definitiva pase a que aún quedan un par de retoques burocráticos para que su publicación se oficialice. Pero lo importante es que ya está asegurado: Habemos Estandar. Y todo eso se ha logrado con gran esfuerzo por parte de los asociados a la Alianza ODF, a la Sociedad OpenDocument y a OASIS, y muy a pesar de las presiones en contra ejercidas por cierto monopolio informático que a toda costa pretende imponer su formato alternativo, "no tan abierto" y aún en desarrllo...&lt;br /&gt;&lt;br /&gt;Ahora, brindemos, démosle la máxima difusión... y todo el mundo a usar y exigir ISO 26300.&lt;br /&gt;&lt;br /&gt;Así, las implicaciones de este nuevo estándar oficial serán variadas y muy importantes:&lt;br /&gt;&lt;br /&gt;La principal de ellas es que a partir de su publicación definitiva, esperada para agosto de este año (aproximadamente), cualquier ciudadano podrá dirigirse oficialmente a sus administraciones públicas usando el formato especificado por es estándar oficial ISO/IEC 26300 (OASIS OpenDocument).&lt;br /&gt;&lt;br /&gt;Obviamente, esas administraciones estarán obligadas a poder leer ese formato para así responder adecuadamente a la comunicación oficial de su administración.&lt;br /&gt;&lt;br /&gt;Por otra parte, el hecho de que este formato sea oficial, internacional y de derecho, implica que ya nunca más se nos podrá obligar a los ciudadanos, en entornos públicos, a remitir nuestra documentación en formatos cerrados y propietarios. Porque claro, ahora, sí existe una alternativa estándar oficial y con implementación en productivo. Por otro lado, cualquier ciudadano podrá exigir que no se le obligue a adquirir un producto de una empresa concreta a la hora de poder leer un documento remitido por una administración pública. Se podrá exigir a esa administración que remita, o incluso que publique, dicho documento en formato ISO 19005 (PDF/A) o en formato ISO 26300 (OASIS OpenDocument).&lt;br /&gt;&lt;br /&gt;En resumen, se puede comprobar que la presión civil puede incluso obligar a las administraciones públicas a instalar en sus computadoras, o incluso a migrar para mayor practicidad, aplicaciones informáticas que soporten los dos estándares citados.&lt;br /&gt;&lt;br /&gt;En el caso de ISO 19005 las administraciones lo tienen relativamente fácil, pues la aplicación más extendida, Acrobad Reader, es capaz de leer el PDF/A. También lo hacen aplicaciones alternativas como Xpdf, Evince y otras.&lt;br /&gt;&lt;br /&gt;En el caso del nuevo ISO 26300 la cosa se complica algo más, pues el fabricante de la aplicación ofimática más difundida, Microsoft con su MS Office, se niega a soportar el estámdar oficial OpenDocument. Por suerte, como veremos, la capacidad de expandir su uso de OpenDocument no se ve tan cohartada por esto.&lt;br /&gt;&lt;br /&gt;Por otro lado, y ante la negativa del lider del mercado,la fundación OpenDocument norteamericana acaba de confirmar que ya dispone de un plug-in para instalar en MS Office y que permitirá leer, modificar y escribir documentos en formato OpenDocument desde la popular suite ofimática.&lt;br /&gt;&lt;br /&gt;Este plug-in, por supuesto, facilitará mucho la adopción del nuevo estándar por aquellas administraciones públicas que ya han decidido hacerlo como norma. También facilitará enormemente las migraciones a las aplicaciones que sí siguen la normativa estándar, pues este plugin permite exportar (traducir) los documentos de los formatos .doc .xls y .ppt de la popular suite Microsoft, al formato OpenDocument oficial.&lt;br /&gt;&lt;br /&gt;Para más información: &lt;b&gt;estandaresabiertos.org&lt;/b&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36856108-4161076433819017930?l=puertosur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://puertosur.blogspot.com/feeds/4161076433819017930/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36856108&amp;postID=4161076433819017930' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36856108/posts/default/4161076433819017930'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36856108/posts/default/4161076433819017930'/><link rel='alternate' type='text/html' href='http://puertosur.blogspot.com/2007/05/opendocument-estndar-internacional-iso.html' title='OpenDocument: estándar internacional ISO 26300'/><author><name>Cristian Galinelli</name><uri>http://www.blogger.com/profile/04427307135523155514</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36856108.post-5032511281865923463</id><published>2007-05-05T14:58:00.000-03:00</published><updated>2007-05-05T15:18:27.985-03:00</updated><title type='text'>Acceso de datos ADO a todo Vapor y LIBRE!</title><content type='html'>La gente de &lt;a href="http://www.fivetechsoft.com/spanish/index.html"&gt;Fivetech software&lt;/a&gt; y &lt;a href="http://www.viaopen.com"&gt;ViaOpen&lt;/a&gt; anunciaron la disponibilidad de un RDD (replaceable database driver) que permite gestionar tablas a traves de &lt;a href="http://es.wikipedia.org/wiki/ADO"&gt;ADO&lt;/a&gt; con los tradicionales comandos de tablas dbf.&lt;br /&gt;&lt;br /&gt;Es opensource con disponibilidad tanto para Harbour como para xHarbour y si bien esta en estado de desarrollo ya es funcional.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://fivetechsoft.com/forums/viewtopic.php?t=6815&amp;postdays=0&amp;postorder=asc&amp;start=0&amp;sid=5a81cfa1adc8d3b8f1829633d5474c77"&gt;Mas info&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Excelente noticia!!.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36856108-5032511281865923463?l=puertosur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://puertosur.blogspot.com/feeds/5032511281865923463/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36856108&amp;postID=5032511281865923463' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36856108/posts/default/5032511281865923463'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36856108/posts/default/5032511281865923463'/><link rel='alternate' type='text/html' href='http://puertosur.blogspot.com/2007/05/acceso-de-datos-ado-todo-vapor-y-libre.html' title='Acceso de datos ADO a todo Vapor y LIBRE!'/><author><name>Gustavo Valentin</name><uri>http://www.blogger.com/profile/01677653510781195786</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://1.bp.blogspot.com/_Rp8ZPcn5YCY/SmjNi6ZntgI/AAAAAAAAABU/glIo1ybb410/S220/Castromonte+cartel+foto+chica.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36856108.post-7567059213519940309</id><published>2007-05-05T10:01:00.000-03:00</published><updated>2007-05-05T10:12:33.386-03:00</updated><title type='text'>Promoción de Software - Argentina</title><content type='html'>Mario Gonzalez nos pasa un link de la "Agencia Nacional de Promoción Científica y Tecnológica" donde hablan del Fonsoft, un fondo fiduciario para el financiamiento de:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;proyectos de investigación y desarrollo&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;programas para la capacitación de recursos humanos&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;programas para la mejora en la calidad del software&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;programas de asistencia para nuevos emprendimientos&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;Link: &lt;a href="http://www.agencia.secyt.gov.ar/fonsoft.php"&gt;http://www.agencia.secyt.gov.ar/fonsoft.php&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36856108-7567059213519940309?l=puertosur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://puertosur.blogspot.com/feeds/7567059213519940309/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36856108&amp;postID=7567059213519940309' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36856108/posts/default/7567059213519940309'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36856108/posts/default/7567059213519940309'/><link rel='alternate' type='text/html' href='http://puertosur.blogspot.com/2007/05/promocin-de-software-argentina.html' title='Promoción de Software - Argentina'/><author><name>Gustavo Valentin</name><uri>http://www.blogger.com/profile/01677653510781195786</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://1.bp.blogspot.com/_Rp8ZPcn5YCY/SmjNi6ZntgI/AAAAAAAAABU/glIo1ybb410/S220/Castromonte+cartel+foto+chica.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36856108.post-3337287966468446535</id><published>2007-04-27T08:07:00.000-03:00</published><updated>2007-04-27T08:17:52.194-03:00</updated><title type='text'>El glorioso Clipper</title><content type='html'>El magazine digital &lt;a href="http://www.simplexit.com.ar/index-home.html"&gt;Simplex&lt;/a&gt; en su número 2.19 publica una &lt;a href="http://www.simplexit.com.ar/editorial/simplex/notas/numero19/6560781c-57c7-4c43-a8b7-17be4a8960d6.articulo-compuesto/index-detalle.html?produccion=editorial/simplex/notas/numero19/092f59cd-88b6-4afd-b631-d173a8a4b99b.produccion-contenidos"&gt;nota&lt;/a&gt; de William Morris donde nos cuenta la historia de clipper y dbase.&lt;br /&gt;&lt;br /&gt;Desde este blog le enviamos un agradecimiento por la nota y comentarle que no nos den por muertos, que clipper hoy se hace llamar de varias formas pero que esta vivo y manteniendo el paso.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36856108-3337287966468446535?l=puertosur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://puertosur.blogspot.com/feeds/3337287966468446535/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36856108&amp;postID=3337287966468446535' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36856108/posts/default/3337287966468446535'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36856108/posts/default/3337287966468446535'/><link rel='alternate' type='text/html' href='http://puertosur.blogspot.com/2007/04/el-glorioso-clipper.html' title='El glorioso Clipper'/><author><name>Gustavo Valentin</name><uri>http://www.blogger.com/profile/01677653510781195786</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://1.bp.blogspot.com/_Rp8ZPcn5YCY/SmjNi6ZntgI/AAAAAAAAABU/glIo1ybb410/S220/Castromonte+cartel+foto+chica.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36856108.post-86865389721214393</id><published>2007-04-16T19:33:00.000-03:00</published><updated>2007-04-16T19:51:47.263-03:00</updated><title type='text'>Impacto revelado en Brasil</title><content type='html'>Finalmente se develó la incógnita que planteamos el 24 de Marzo sobre la presentación de un producto basado en xHarbour que era uno de los secretos mejor guardados del mercado.&lt;br /&gt;&lt;br /&gt;El producto se llama CoreBuilder y básicamente es un ide basado en Java y xHarbour que a traves de un lenguaje de modelado de datos produce aplicaciones que pueden ser ejecutadas tanto en linux como en windows como en navegadores web.&lt;br /&gt;&lt;br /&gt;Si bien el &lt;a href="http://www.core-builder.com.br"&gt;sitio web&lt;/a&gt; esta en portugues es bastante claro definiendo los alcances y los precios (licencia de uso para cada programador y costo para cada terminal accediendo la aplicación). A este respecto puede parecer elevado pero viendo las prestaciones y el tiempo que se ahorra es para tener en cuenta.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36856108-86865389721214393?l=puertosur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://puertosur.blogspot.com/feeds/86865389721214393/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36856108&amp;postID=86865389721214393' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36856108/posts/default/86865389721214393'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36856108/posts/default/86865389721214393'/><link rel='alternate' type='text/html' href='http://puertosur.blogspot.com/2007/04/impacto-revelado-en-brasil.html' title='Impacto revelado en Brasil'/><author><name>Gustavo Valentin</name><uri>http://www.blogger.com/profile/01677653510781195786</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://1.bp.blogspot.com/_Rp8ZPcn5YCY/SmjNi6ZntgI/AAAAAAAAABU/glIo1ybb410/S220/Castromonte+cartel+foto+chica.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36856108.post-6816343729016257416</id><published>2007-04-13T19:24:00.000-03:00</published><updated>2007-04-13T19:29:36.362-03:00</updated><title type='text'>Discurso de Steve Jobs en la Universidad de Stanford</title><content type='html'>Un video emotivo que refleja el espíritu de los que estamos en esto.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://video.google.com/videoplay?docid=3014637678488153340%20"&gt;Discurso de Steve Jobs en la Universidad de Stanford&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36856108-6816343729016257416?l=puertosur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://puertosur.blogspot.com/feeds/6816343729016257416/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36856108&amp;postID=6816343729016257416' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36856108/posts/default/6816343729016257416'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36856108/posts/default/6816343729016257416'/><link rel='alternate' type='text/html' href='http://puertosur.blogspot.com/2007/04/discurso-de-steve-jobs-en-la.html' title='Discurso de Steve Jobs en la Universidad de Stanford'/><author><name>Gustavo Valentin</name><uri>http://www.blogger.com/profile/01677653510781195786</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://1.bp.blogspot.com/_Rp8ZPcn5YCY/SmjNi6ZntgI/AAAAAAAAABU/glIo1ybb410/S220/Castromonte+cartel+foto+chica.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36856108.post-3319989170359724646</id><published>2007-04-05T15:02:00.000-03:00</published><updated>2007-04-05T15:30:50.718-03:00</updated><title type='text'>DateTime en xHarbour ?</title><content type='html'>xHarbour tendrá a partir de la próxima versión oficial, soporte para manejo del tipo de datos FechaHora o DateTime.&lt;br /&gt;Como todo cambio importante, posiblemente tenga algunas modificaciones hasta que se llegue a un código y funcionamiento que deje conformes a la mayoría de los usuarios.&lt;br /&gt;&lt;br /&gt;En estos momento no es correcto decir un nuevo tipo de datos, porque hasta el momento el soporte para DateTime está incluído en el tipo de datos Date.&lt;br /&gt;&lt;br /&gt;También existirá la posibilidad de escribir una fecha como un valor constante en lugar de tener que recurrir a las funciones ctod() o stod(), con un código simple y sencillo de recordar, de leer y sin ambigüedades.&lt;br /&gt;&lt;br /&gt;DATE: {^2005/04/03}&lt;br /&gt;TIME     :  {^13:02:03.04} y también {^01:02:03.04 PM}&lt;br /&gt;DATETIME :  {^2005/04/03 01:02:03:04}&lt;br /&gt;&lt;br /&gt;&lt;a href="http://cosadenegro.blogspot.com/2005/04/nuevos-tipos-de-datos-en-xharbour.html"&gt;http://cosadenegro.blogspot.com/2005/04/nuevos-tipos-de-datos-en-xharbour.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Aún quedan muchos detalles que pulir y discutir, relacionados con el funcionamiento interno, APIs e intercambio de información con otros sistemas (ej: OLE).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36856108-3319989170359724646?l=puertosur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://puertosur.blogspot.com/feeds/3319989170359724646/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36856108&amp;postID=3319989170359724646' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36856108/posts/default/3319989170359724646'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36856108/posts/default/3319989170359724646'/><link rel='alternate' type='text/html' href='http://puertosur.blogspot.com/2007/04/datetime-en-xharbour.html' title='DateTime en xHarbour ?'/><author><name>Walter Negro</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36856108.post-5618699394238572496</id><published>2007-03-24T11:35:00.000-03:00</published><updated>2007-03-24T11:49:33.417-03:00</updated><title type='text'>Noticia de Impacto desde BRASIL</title><content type='html'>Parece que hay un nuevo producto basado en xHarbour que va a ser presentado en Brasil, prometen tener tantas cosas que mejor publicar la traducción de la noticia (publicada en el foro de xharbour):&lt;br /&gt;&lt;br /&gt;&lt;font color="0000FF"&gt;&lt;i&gt;Hola gente.&lt;br /&gt;&lt;br /&gt;El día 5 de abril tendremos un seminario gratuito sobre xBase &amp; cia incluyendo la presencia de Ron Pinkas (en Brasil) donde estaremos presentando una herramienta totalmente inédita y revolucionaria.&lt;br /&gt;&lt;br /&gt;Incontables usuarios vienen pidiendo a lo largo de los años una solución para:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Interface gráfica Linux que realmente funcione&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Mantener el mismo código fuente para las interfaces gráficas Windows y Linux&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Migración automática de las aplicaciones hacia la web sin necesidad de reescribir nada&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;Todo eso ahora es realidad. Es uno de los secretos mejor guardados del mercado que ahora será revelado de primera mano para todos ustedes.&lt;br /&gt;&lt;br /&gt;Este nuevo producto, cuyos detalles serán divulgados en el evento, posee las siguientes características:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Ambiente de desarrollo de aplicaciones de gestión de negocios en modo gráfico, tres capas&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Versiones Windows y Linux (gráfico), sin requerir GTK u otros trucos&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Diseñador visual de altísima productividad (puede crear completas pantallas de registros, tipo padrón, que corren en Windows o Linux, en modo gráfico, con pocos clicks), tornando su migración extremamente rápida!&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Migración instantanea hacia la WEB de todas las pantallas diseñadas, sin retoques ni recodificación, pudiendo ser ejecutadas por usuarios remotos a traves de cualquier browser sin necesidad de instalar nada en la terminal&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Totalmente en Portugues&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Programación 100% xBase (xHarbour)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Acesso a todas las bases de datos SQL a traves de SQLRDD&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Rutinas de acceso a ECF y TEF listas&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Bajo costo&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Nadie precisará ser cobayo. Apenas ustedes lean este email existen mas de diez mil usuarios accediendo a sistemas escritos con esta herramienta aquí en Brasil.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Con la presencia especial de Ron Pinkas, que estará en Brasil especialmente para el evento. Venga a conocer al padre de xHarbour personalmente!&lt;br /&gt;&lt;br /&gt;El evento se realizará el día 05 de abril de 2007, en el centro "Spazio JK" en la ciudad de San Pablo, desde las 14:00 hasta las 16:00.&lt;br /&gt;&lt;br /&gt;Dirección: Av. Presidente Juscelino Kubitschek, 1726&lt;br /&gt;Barrio de Itaim Bibi, Ciudad de San Pablo, Brasil&lt;br /&gt;&lt;br /&gt;Para inscribirse acceda a la siguiente página web:&lt;br /&gt;&lt;br /&gt;&lt;a href="www.xharbour.com.br/evento_05abr2007.htm"&gt;www.xharbour.com.br/evento_05abr2007.htm&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Saludos,&lt;br /&gt;&lt;br /&gt;Marcelo Lombardo&lt;br /&gt;&lt;a href="www.xharbour.com.br"&gt;www.xharbour.com.br&lt;/a&gt;&lt;/i&gt;&lt;br /&gt;&lt;/font&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36856108-5618699394238572496?l=puertosur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://puertosur.blogspot.com/feeds/5618699394238572496/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36856108&amp;postID=5618699394238572496' title='2 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36856108/posts/default/5618699394238572496'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36856108/posts/default/5618699394238572496'/><link rel='alternate' type='text/html' href='http://puertosur.blogspot.com/2007/03/noticia-de-impacto-desde-brasil.html' title='Noticia de Impacto desde BRASIL'/><author><name>Gustavo Valentin</name><uri>http://www.blogger.com/profile/01677653510781195786</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://1.bp.blogspot.com/_Rp8ZPcn5YCY/SmjNi6ZntgI/AAAAAAAAABU/glIo1ybb410/S220/Castromonte+cartel+foto+chica.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36856108.post-8636949175841148915</id><published>2007-03-14T22:43:00.000-03:00</published><updated>2007-03-14T22:55:54.241-03:00</updated><title type='text'>FOXPRO con los días contados</title><content type='html'>De acuerdo a una nota publicada en &lt;a href="http://www.eweek.com/article2/0,1895,2103695,00.asp?kc=EWEWEMNL031407EP35E"&gt;eweek&lt;/a&gt; y comentada en el foro en ingles de &lt;a href="http://fivetechsoft.com/forums/viewtopic.php?t=6325"&gt;fivetech&lt;/a&gt; Microsoft no va a liberar mas versiones mas alla de la 9 pero continuará dandole soporte hasta 2010 y soporte extendido hasta 2015.&lt;br /&gt;&lt;br /&gt;Le costó unos años pero finalmente lo logró.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36856108-8636949175841148915?l=puertosur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://puertosur.blogspot.com/feeds/8636949175841148915/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36856108&amp;postID=8636949175841148915' title='1 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36856108/posts/default/8636949175841148915'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36856108/posts/default/8636949175841148915'/><link rel='alternate' type='text/html' href='http://puertosur.blogspot.com/2007/03/foxpro-con-los-das-contados.html' title='FOXPRO con los días contados'/><author><name>Gustavo Valentin</name><uri>http://www.blogger.com/profile/01677653510781195786</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://1.bp.blogspot.com/_Rp8ZPcn5YCY/SmjNi6ZntgI/AAAAAAAAABU/glIo1ybb410/S220/Castromonte+cartel+foto+chica.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36856108.post-1348396344886319443</id><published>2007-02-21T09:51:00.000-03:00</published><updated>2007-02-21T11:33:07.246-03:00</updated><title type='text'>Las News de xHarbour quedarán "readonly"</title><content type='html'>El 11 de febrero Patrick Mast anunció que a partir del 20 de febrero las News de xHarbour.org, en todos sus lenguajes, que estan hosteadas sobre servidores de xHarbour.com, quedarán en estado de solo lectura.&lt;br /&gt;En el mismo mensaje, se anuncia la creación de un foro público hosteado en UseNet de nombre comp.lang.xharbour.&lt;br /&gt;&lt;br /&gt;Lamentablemente muy pocos proveedores de internet del mundo permiten la conexión con la red UseNet ya que tiene un mantenimiento elevado, consumo de ancho de banda elevado y según ellos es tecnología "vieja".&lt;br /&gt;&lt;br /&gt;Lo cierto es que muchos foros de UseNet son usados para compartir fotos, MP3 y hasta películas, lo cual no hace más que darles la razón a los ISP.&lt;br /&gt;&lt;br /&gt;Existen varias formas de conectarse a las news de UseNet:&lt;br /&gt;&lt;br /&gt;Via web:&lt;br /&gt;&lt;a href="http://groups.google.com"&gt;Google Groups&lt;/a&gt; solo para leer, porque a pesar de tener el botón, no postea los mensajes, ni siquiera como usuario registrado en Google.&lt;br /&gt;&lt;br /&gt;Via NNTP (news)&lt;br /&gt;&lt;a href="news://news2.homelinux.org/comp.lang.xharbour"&gt;news://news2.homelinux.org/comp.lang.xharbour&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Este servidor de news tiene una demora de cerca de 2hs desde que se postea el mensaje hasta que está disponible en el foro de UseNet.&lt;br /&gt;Luego, si alguien contesta enseguida, es posible que la respuesta no esté hasta después de 2hs más, así que eso daría una demora de 4hs mínima desde que se postea hasta que se recibe la respuesta.&lt;br /&gt;&lt;br /&gt;Mantendremos informados acerca de otras posibilidades de conexión.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36856108-1348396344886319443?l=puertosur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://puertosur.blogspot.com/feeds/1348396344886319443/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36856108&amp;postID=1348396344886319443' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36856108/posts/default/1348396344886319443'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36856108/posts/default/1348396344886319443'/><link rel='alternate' type='text/html' href='http://puertosur.blogspot.com/2007/02/las-news-de-xharbour-quedarn-readonly.html' title='Las News de xHarbour quedarán &quot;readonly&quot;'/><author><name>Walter Negro</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36856108.post-7724474067642210689</id><published>2007-02-19T14:44:00.000-03:00</published><updated>2007-02-19T14:57:47.356-03:00</updated><title type='text'>nueva versión de ourXdbu</title><content type='html'>Miguel Angel Marchuet Frutos ha liberado la versión 1.0.19.2 de ourXdbu, un editor de tablas con soporte de múltiples formatos:&lt;br /&gt;&lt;br /&gt;&lt;UL&gt;&lt;LI&gt;XHarbour RDD - DBFNTX&lt;br /&gt;&lt;/LI&gt;&lt;LI&gt;XHarbour RDD - DBFCDX&lt;br /&gt;&lt;/LI&gt;&lt;LI&gt;XHarbour RDD - SIXCDX&lt;br /&gt;&lt;/LI&gt;&lt;LI&gt;XHarbour RDD - DBFBLOB&lt;br /&gt;&lt;/LI&gt;&lt;LI&gt;XHarbour RDD - DELIM&lt;br /&gt;&lt;/LI&gt;&lt;LI&gt;Advantage RDD - DBFCDX&lt;br /&gt;&lt;/LI&gt;&lt;LI&gt;Visual FoxPro Tables&lt;br /&gt;&lt;/LI&gt;&lt;LI&gt;FoxPro VFP Tables&lt;br /&gt;&lt;/LI&gt;&lt;LI&gt;Microsoft OLEDB Provider for Visual FoxPro&lt;br /&gt;&lt;/LI&gt;&lt;LI&gt;Microsoft Jet 4.0 OLE DB Provider - Access&lt;br /&gt;&lt;/LI&gt;&lt;LI&gt;Microsoft Jet 3.51 OLE DB Provider - Access&lt;br /&gt;&lt;/LI&gt;&lt;LI&gt;Microsoft Jet 4.0 OLE DB Provider - Excel&lt;br /&gt;&lt;/LI&gt;&lt;LI&gt;Microsoft Jet 4.0 OLE DB Provider - Paradox 5.x&lt;br /&gt;&lt;/LI&gt;&lt;LI&gt;Microsoft Jet 4.0 OLE DB Provider - Paradox 4.x&lt;br /&gt;&lt;/LI&gt;&lt;LI&gt;Microsoft Jet 4.0 OLE DB Provider - Paradox 3.x&lt;br /&gt;&lt;/LI&gt;&lt;LI&gt;Microsoft OLEDB Provider for Oracle&lt;br /&gt;&lt;/LI&gt;&lt;LI&gt;Microsoft OLEDB Provider for SQL Server&lt;br /&gt;&lt;/LI&gt;&lt;LI&gt;MySql&lt;br /&gt;&lt;/LI&gt;&lt;LI&gt;IBM Informix OLEDB Provider&lt;br /&gt;&lt;/LI&gt;&lt;LI&gt;DBF Foxpro OLEDB&lt;br /&gt;&lt;/LI&gt;&lt;LI&gt;IBM Client Access OLEDB provider&lt;br /&gt;&lt;/LI&gt;&lt;LI&gt;ODBC - PostgreSQL&lt;br /&gt;&lt;/LI&gt;&lt;LI&gt;ODBC - IBPhoenix Open Source&lt;br /&gt;&lt;/LI&gt;&lt;LI&gt;Data Link connection (UDL)&lt;br /&gt;&lt;/LI&gt;&lt;LI&gt;User&lt;/LI&gt;&lt;/UL&gt;&lt;br /&gt;&lt;br /&gt;El programa admite selección de múltiples registros asi como copiar y pegar en diferentes tipos de tablas. Tambien el autor asegura que la próxima version va a estar completada con DTS (data transformation service).&lt;br /&gt;&lt;br /&gt;Links:&lt;br /&gt;&lt;a href="http://www.xharbour.com/xHC/index.asp?page=xhc_download_detail.asp&amp;type=dl&amp;id=78&amp;show_i=7&amp;show_sub=1"&gt;Download y comentarios (en ingles)&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.marchuet.net/"&gt;sitio del autor&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Por último no se olviden de los &lt;a href="http://www.marchuet.net/contenidos/ourxdbudonativos.html"&gt;donativos&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36856108-7724474067642210689?l=puertosur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://puertosur.blogspot.com/feeds/7724474067642210689/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36856108&amp;postID=7724474067642210689' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36856108/posts/default/7724474067642210689'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36856108/posts/default/7724474067642210689'/><link rel='alternate' type='text/html' href='http://puertosur.blogspot.com/2007/02/nueva-versin-de-ourxdbu.html' title='nueva versión de ourXdbu'/><author><name>Gustavo Valentin</name><uri>http://www.blogger.com/profile/01677653510781195786</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://1.bp.blogspot.com/_Rp8ZPcn5YCY/SmjNi6ZntgI/AAAAAAAAABU/glIo1ybb410/S220/Castromonte+cartel+foto+chica.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36856108.post-3093442608738684794</id><published>2007-02-08T15:10:00.000-03:00</published><updated>2007-02-06T01:10:48.230-03:00</updated><title type='text'>Nace la GPE Phone Edition</title><content type='html'>Miembros del proyecto open source &lt;a href="http://gpe.linuxtogo.org/"&gt;GPE&lt;/a&gt; (GPE Palmtop Environment) &lt;a href="http://projects.linuxtogo.org/plugins/scmsvn/viewcvs.php/trunk/marketing/GPEPE-announce-en.txt?rev=560&amp;#038;root=gpephone&amp;#038;view=markup"&gt;han anunciado hoy&lt;/a&gt; un nuevo proyecto derivado con el fin de crear un entorno para teléfonos móviles basado completamente en software libre, la &lt;a href="http://gpephone.linuxtogo.org/"&gt;GPE Phone Edition&lt;/a&gt;. La GPE Phone Edition es un proyecto de código abierto, basado en los desarrollos del proyecto GPE añadiendo los componentes necesarios para el uso en teléfonos móviles. Se puede encontrar el código fuente completo en &lt;a href="http://www.linuxtogo.org/"&gt;LinuxToGo&lt;/a&gt;, una pagina dedicada al desarrollo con Linux en dispositivos moviles. Una buena noticia que viene pocos días después del &lt;a href="http://barrapunto.com/mainpage/07/01/26/1131231.shtml?tid=70"&gt;anuncio&lt;/a&gt; de la &lt;a href="http://www.limofoundation.org/"&gt;LiMo Foundation&lt;/a&gt; de estar trabajando en un entorno de desarrollo para teléfonos móviles basado en Linux.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36856108-3093442608738684794?l=puertosur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://puertosur.blogspot.com/feeds/3093442608738684794/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36856108&amp;postID=3093442608738684794' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36856108/posts/default/3093442608738684794'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36856108/posts/default/3093442608738684794'/><link rel='alternate' type='text/html' href='http://puertosur.blogspot.com/2007/02/nace-la-gpe-phone-edition.html' title='Nace la GPE Phone Edition'/><author><name>Cristian Galinelli</name><uri>http://www.blogger.com/profile/04427307135523155514</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36856108.post-1513055573978854528</id><published>2007-02-06T01:08:00.000-03:00</published><updated>2007-02-06T01:10:48.466-03:00</updated><title type='text'>PDF será un estándar de uso libre y gratuito</title><content type='html'>Mediante un comunicado firmado por Kevin Lynch, arquitecto de software de la compañía, Adobe reveló sus planes para que su Formato de Documento Portable (PDF) sea declarado un estándar abierto, gratuito y de uso libre. El comunicado fue anunciado un día antes de la presentación del XPS, un nuevo formato de características similares al PDF que ofrecerá Microsoft con el Windows Vista.&lt;br /&gt;&lt;br /&gt;La empresa diseñadora de software Adobe aceptó que su PDF sea transformado en estándar abierto y de uso libre por la Organización Internacional de Estandarización (ISO). Así lo dio a entender mediante un comunicado, el arquitecto de software de compañía, Kevin Lynch. Ante la llegada al mercado del formato XPS de Microsoft, presente en la nueva versión de Office 2007, la estandarización para el uso libre y abierto del PDF, se identifica a priori, como una estrategia de Adobe para que su formato no pierda terreno.Desde 1995 Adobe participa en grupos de funcionamiento que desarrollan las especificaciones técnicas para la publicación de la ISO y ha trabajado para entregar subconjuntos especializados de PDF como estándares para las industrias. Actualmente, PDF for Archive (PDF/A) y PDF for Exchange (PDF/X) son estándares ISO, y PDF for Engineering (PDF/E) y PDF for Universal Access (PDF/UA) están en vías de serlo. La intención es estandarizar completamente todos los subconjuntos especializados de PDF. &lt;br /&gt;&lt;br /&gt;“Al incrementarse la necesidad de formatos abiertos por parte de gobiernos y organizaciones, mantener la especificación PDF por una organización externa y participativa ayudará a continuar la conducción de la innovación y a expandir el rico ecosistema del PDF desarrollado durante los últimos 15 años”, manifestó Lynch en el comunicado.&lt;br /&gt;&lt;br /&gt;El PDF de Adobe apareció en 1993 y rápidamente se convirtió en estándar de la industria gráfica editorial gracias a sus opciones de seguridad, facilidad de transporte e impresión. Las críticas que recibía el formato se referían a las limitaciones en su manejo: los documentos PDF sólo podían ser leídos por Adobe Acrobat Reader y creados por Adobe Acrobat. El alto costo de este último programa, hasta la aparición de versiones gratuitas para descarga, era el punto que mayor inconformismo generaba.&lt;br /&gt;&lt;br /&gt;La nueva competencia del PDF de Adobe, el formato XPS de Microsoft, a diferencia de éste, no necesita ser manualmente descargado e instalado para su utilización ya que el Window Vista lo traerá incorporado como una aplicación permanente y podrá ser visualizado de manera instantánea. Microsoft asegura que el XPS tiene licencia libre y abierta para su uso y no demandará a nadie que saque provecho de ello.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36856108-1513055573978854528?l=puertosur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://puertosur.blogspot.com/feeds/1513055573978854528/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36856108&amp;postID=1513055573978854528' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36856108/posts/default/1513055573978854528'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36856108/posts/default/1513055573978854528'/><link rel='alternate' type='text/html' href='http://puertosur.blogspot.com/2007/02/pdf-ser-un-estndar-de-uso-libre-y.html' title='PDF será un estándar de uso libre y gratuito'/><author><name>Cristian Galinelli</name><uri>http://www.blogger.com/profile/04427307135523155514</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36856108.post-6573826299611418822</id><published>2007-01-26T10:57:00.000-03:00</published><updated>2007-01-26T11:01:19.359-03:00</updated><title type='text'>Estado del HD</title><content type='html'>Una interesante utilidad freeware para analizar el disco rígido:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.hdtune.com/"&gt;HD Tune&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Favor dejar cualquier comentario que cosideren al respecto.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36856108-6573826299611418822?l=puertosur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://puertosur.blogspot.com/feeds/6573826299611418822/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36856108&amp;postID=6573826299611418822' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36856108/posts/default/6573826299611418822'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36856108/posts/default/6573826299611418822'/><link rel='alternate' type='text/html' href='http://puertosur.blogspot.com/2007/01/estado-del-hd.html' title='Estado del HD'/><author><name>Gustavo Valentin</name><uri>http://www.blogger.com/profile/01677653510781195786</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://1.bp.blogspot.com/_Rp8ZPcn5YCY/SmjNi6ZntgI/AAAAAAAAABU/glIo1ybb410/S220/Castromonte+cartel+foto+chica.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36856108.post-1126700025161353921</id><published>2007-01-24T20:08:00.000-03:00</published><updated>2007-01-24T20:12:33.265-03:00</updated><title type='text'>Paco Garcia y Canal Five</title><content type='html'>Le envié un mail a Paco Garcia, el creador de los controles Five para que nos cuente que pasó con su web, sus reconocidos productos y como encara el futuro. &lt;br /&gt;&lt;br /&gt;Esta es su emotiva respuesta: &lt;br /&gt;&lt;br /&gt;&lt;I&gt;Pues ha ido pasando un poco de todo. Yo tengo mi trabajo principal en una empresa española que se llama "Grupo Sp" en la actualidad Sage. Trabajo de 9 a 7 y en realidad me queda poco tiempo. Como sobre el ordenador y llego a casa a las 9 momento en el que aprovecho para estar un poco con la familia cenar y por fin... programar.&lt;br /&gt;&lt;br /&gt;He pasado mucho tiempo de mi vida fivewinera detrás de hacer un IDE. Empece en la época de Mail Simons (uno de los primeros distribuidores de Fivewin) con un ide FiveRec hecho con mucha fuerza bruta. Vendi 3 :) y consegui un ordenador por el trabajo realizado que me dio Benito Martinez (Mail Simons). Me quedó las ganas de intentarlo. He pasado mucho tiempo asociandome con gente que me ayudara hasta hace 2 años que iniciamos otro compañero y yo VCode. Un ide hecho en C++ que tenia una pinta preciosa. Mi trabajo me absorvia y no hubo manera. Hubo que decidir: el trabajo que me da de comer o CanalFive. Al final... decidí comer y abandoné VCode. Hay que saber en la vida cuando algo no puede ser. Decidí quedarme con los controles y cree vTaskBar. Opté por no hacer publicidad y quitar la página. Los controles que vendiera los vendería por el "boca a boca". No fué mal. Uno se ha ido haciendo un nombre y los clientes a los que se trata bien no te olvidan.&lt;br /&gt;&lt;br /&gt;Todo iba mas o menos cuando la vida me zarandeo de lado a lado. Me encontraron un cancer de tiroides y mi universo se tambaleo. Bueno, algo de mí me abandono, concretamente el tiroides el cual me extirparon e igual que vino el susto, se fue. Aqui estoy sano y salvo pero un año y pico se pasó como por arte de magia.&lt;br /&gt;&lt;br /&gt;Con el nuevo soplo de vida llego nueva fuerza, nuevos controles y nueva ilusión. Un día se me ocurrio decir a Rene que me vendiera vTaskBar en Mexico y se fué desencadenando todo. Rene saco fotos de todo lo que le había ido enseñando particularmente y a la gente le gustó. Y le gustó mucho mucho mucho.&lt;br /&gt;&lt;br /&gt;Un día me llamó Linares ofreciendome la posibilidad de distribuir mis controles desde Fivetech. Genial pensé. Empezamos a negociar y al final la cosa no salió. Tan amigos. Pero el tema me animó y aqui sigo, lleno de ilusión. Voy a volver a abrir la página www.canalfive.com y a intentar dar a mis clientes la importancia que se merecen. Un nuevo foro de soporte para que los clientes tengan un sitio centralizado de consultas. Otro foro público para conocimiento de los productos y posiblemente un blog.&lt;br /&gt;&lt;br /&gt;En esas estamos.&lt;br /&gt;&lt;br /&gt;Como proyectos futuros tengo la intención de migrar mis controles a Xailer y a Freewin. También e mirado MiniGui pero creo que tardaré más en hacerme con esa forma de programar. Sobre todo ir creciendo y mejorando mis controles y diversificando. Mi primer y gran amor, Fivewin. Pero no solo de pan vive el hombre. Para mi es un reto ser capaz de programar controles en otros GUIs. Animo a programadores que sean capaces de realizar controles si quieren que CanalFive se los comercialice. Seria un placer. También animo a los distribuidores que quieran vender controles de CanalFive a contactar conmigo. Distribuidores, si. Exclusividad no. Eso es lo que pienso.&lt;br /&gt;&lt;br /&gt;Pues no hay nada mas Gustavo. Un charlar contigo y con tus escuchantes.&lt;br /&gt;&lt;br /&gt;Como dicen por ahi...&lt;br /&gt;&lt;br /&gt;Digitalmente tuyo.&lt;br /&gt;&lt;br /&gt;Paco García&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/I&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36856108-1126700025161353921?l=puertosur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://puertosur.blogspot.com/feeds/1126700025161353921/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36856108&amp;postID=1126700025161353921' title='1 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36856108/posts/default/1126700025161353921'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36856108/posts/default/1126700025161353921'/><link rel='alternate' type='text/html' href='http://puertosur.blogspot.com/2007/01/paco-garcia-y-canal-five_24.html' title='Paco Garcia y Canal Five'/><author><name>Gustavo Valentin</name><uri>http://www.blogger.com/profile/01677653510781195786</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://1.bp.blogspot.com/_Rp8ZPcn5YCY/SmjNi6ZntgI/AAAAAAAAABU/glIo1ybb410/S220/Castromonte+cartel+foto+chica.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36856108.post-8469095060062567570</id><published>2007-01-21T23:45:00.000-03:00</published><updated>2007-01-22T00:52:03.603-03:00</updated><title type='text'>Harbour y xHarbour en la revista Users Linux</title><content type='html'>Tengo en mis manos la revista &lt;a href="http://www.tectimes.com/magazines/linux/lnx029/"&gt;&lt;span style="font-weight: bold;"&gt;Users Linux 29&lt;/span&gt;&lt;/a&gt; y con la agradable sorpresa de una nota relacionada con xBase.&lt;br /&gt;Marcelo Poli, el redactor de la nota, (será el mismo Marcelo Poli que está en la traducción del Mozilla para Argentina? investigaré).&lt;br /&gt;La nota cuenta un poco de historia del xBase y hace un panorama de las opciones para utilizar xBase principalmente en Linux, desde emuladores de DOS, hasta compiladores nativos para la plataforma como &lt;span style="font-weight: bold;"&gt;Clip, Harbour, xHarbour &lt;/span&gt;y otros.&lt;br /&gt;Si bien la nota es corta, se observa un buen conocimiento al menos de las características básicas de las distintas alternativas.&lt;br /&gt;Lástima que no hayan puesto links, quizas la falta de espacio haya sido determinante, pero al menos permitirá despertar la búsqueda de los interesados.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36856108-8469095060062567570?l=puertosur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://puertosur.blogspot.com/feeds/8469095060062567570/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36856108&amp;postID=8469095060062567570' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36856108/posts/default/8469095060062567570'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36856108/posts/default/8469095060062567570'/><link rel='alternate' type='text/html' href='http://puertosur.blogspot.com/2007/01/tengo-en-mis-manos-la-revista-users.html' title='Harbour y xHarbour en la revista Users Linux'/><author><name>Walter Negro</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36856108.post-3031300952182018473</id><published>2007-01-18T19:06:00.000-03:00</published><updated>2007-01-18T19:08:41.520-03:00</updated><title type='text'>FiveWin para harbour v. 7.01</title><content type='html'>Liberado para los usuarios de FTDN:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://fivetechsoft.com/forums/viewtopic.php?t=5655"&gt;http://fivetechsoft.com/forums/viewtopic.php?t=5655&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36856108-3031300952182018473?l=puertosur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://puertosur.blogspot.com/feeds/3031300952182018473/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36856108&amp;postID=3031300952182018473' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36856108/posts/default/3031300952182018473'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36856108/posts/default/3031300952182018473'/><link rel='alternate' type='text/html' href='http://puertosur.blogspot.com/2007/01/fivewin-para-harbour-v-701.html' title='FiveWin para harbour v. 7.01'/><author><name>Gustavo Valentin</name><uri>http://www.blogger.com/profile/01677653510781195786</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://1.bp.blogspot.com/_Rp8ZPcn5YCY/SmjNi6ZntgI/AAAAAAAAABU/glIo1ybb410/S220/Castromonte+cartel+foto+chica.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36856108.post-3522933172065787252</id><published>2007-01-13T10:17:00.000-03:00</published><updated>2007-01-13T11:25:22.077-03:00</updated><title type='text'>Acelerando el Acrobat Reader</title><content type='html'>Si alguna vez les pasó que el Acrobat reader (el lector de archivos PDF) les tarda mucho en cargar aquí les paso un link que me acercó nuestro comun amigo Mario Gonzalez desde el calor del Chaco:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.hispazone.com/Detalle.asp?IdPrograma=369"&gt;Adobe Reader SpeedUp 1.36&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;También pueden ir al &lt;a href="http://www.tnk-bootblock.co.uk/software/"&gt;sitio del autor&lt;/a&gt; (en ingles) donde en la sección software van a encontrar otros programas interesantes.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36856108-3522933172065787252?l=puertosur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://puertosur.blogspot.com/feeds/3522933172065787252/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36856108&amp;postID=3522933172065787252' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36856108/posts/default/3522933172065787252'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36856108/posts/default/3522933172065787252'/><link rel='alternate' type='text/html' href='http://puertosur.blogspot.com/2007/01/acelerando-el-acrobat-reader.html' title='Acelerando el Acrobat Reader'/><author><name>Gustavo Valentin</name><uri>http://www.blogger.com/profile/01677653510781195786</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://1.bp.blogspot.com/_Rp8ZPcn5YCY/SmjNi6ZntgI/AAAAAAAAABU/glIo1ybb410/S220/Castromonte+cartel+foto+chica.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36856108.post-5316766538158451295</id><published>2007-01-13T10:03:00.000-03:00</published><updated>2007-01-13T10:17:34.073-03:00</updated><title type='text'>Una buena y una mala: Dbf Web Server</title><content type='html'>La buena:&lt;br /&gt;Parece que hay un nuevo producto que, como su título lo describe, permite conectar las dbf a traves de la web. &lt;br /&gt;&lt;br /&gt;La mala:&lt;br /&gt;Viene con la documentación en ¡ruso!, sí, con caracteres cirílicos.&lt;br /&gt;&lt;br /&gt;El autor es Anatoliy Shevelev y aquí van los links:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://ixbase.info"&gt;home page del autor (en ruso)&lt;/a&gt;&lt;br /&gt;&lt;a href="http://ixbase.info"&gt;download del producto&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.xharbour.com/xhc/index.asp?page=xhc_download_detail.asp&amp;type=dl&amp;id=109&amp;show_i=7&amp;show_sub=1"&gt;página en xHarbour.com&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Esperemos que algún alma caritativa lo traduzca al ingles o al español. &lt;br /&gt;&lt;br /&gt;Me pregunto si será así como se sienten los que no entienden español y nos ven escribir en los foros de ingles en castellano.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36856108-5316766538158451295?l=puertosur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://puertosur.blogspot.com/feeds/5316766538158451295/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36856108&amp;postID=5316766538158451295' title='1 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36856108/posts/default/5316766538158451295'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36856108/posts/default/5316766538158451295'/><link rel='alternate' type='text/html' href='http://puertosur.blogspot.com/2007/01/una-buena-y-una-mala-dbf-web-server.html' title='Una buena y una mala: Dbf Web Server'/><author><name>Gustavo Valentin</name><uri>http://www.blogger.com/profile/01677653510781195786</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://1.bp.blogspot.com/_Rp8ZPcn5YCY/SmjNi6ZntgI/AAAAAAAAABU/glIo1ybb410/S220/Castromonte+cartel+foto+chica.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36856108.post-2005565219482024686</id><published>2007-01-01T19:15:00.000-03:00</published><updated>2007-01-02T11:10:19.826-03:00</updated><title type='text'>Y el mundo sigue andando.....</title><content type='html'>En general lo que sucede alrededor nuestro nos impacta de una u otra manera. Aqui van una serie de articulos (algunos en ingles) y comentarios interesantes:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Windows Vista y mas allá&lt;/b&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;Es un &lt;a href="http://jameskyton.wordpress.com/2006/12/29/beyond-windows-vista-fiji-and-vienna/"&gt;artículo&lt;/a&gt; en ingles acerca del nuevo Windows Vista, qué trae, qué dejaron en el tintero y como será el próximo sistema operativo de Microsoft cuyo nombre código es Vienna.&lt;br&gt;&lt;br /&gt;Aunque hay otra gente que piensa lo contrario y predice que este será un "suicidio histórico" por las restricciones que impondrá segun lo refleja un artículo de &lt;a href="http://www.itsitio.com/?idxpagina=655&amp;destacada=1&amp;idxcomunidad=281&amp;idxnota=55362&amp;cambioComunidad=281"&gt;ITSitio&lt;/a&gt; y tambien en &lt;a href="http://es.theinquirer.net/2006/12/26/las_especificaciones_de_seguri.html"&gt;theInquirer en español&lt;/a&gt;.&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Lo mas buscado del 2006&lt;/b&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;En &lt;a href="http://www.google.com/intl/en/press/zeitgeist2006.html"&gt;Google Zeitgeist&lt;/a&gt;, publicaron lo mas buscado del 2006. Interesante aunque muy focalizado al mercado de estados unidos.&lt;BR&gt;&lt;br /&gt;Los de &lt;a href="http://f1.buzz.re2.yahoo.com/topsearches2006/categories/"&gt;Yahoo&lt;/a&gt; no se quedaron atras y tambien hicieron lo mismo. Lástima que no me dá la inteligencia para entederlo.&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Reconocimiento de caras&lt;/b&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;Si bien hay caras y caras, ahora parece que hay un &lt;a href="http://polarrose.com/"&gt;plug-in&lt;/a&gt; para Firefox que permite reconocer las caras en cada foto que vemos en el navegador.&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Entrepreneur&lt;/b&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;&lt;a href="http://www.materiabiz.com/mbz/index.vsp"&gt;MateriaBiz&lt;/a&gt; es un sitio dedicado a los emprendedores y a las empresas en general que contiene material muy interesante a la hora de plantearnos como manejamos nuestro negocio.&lt;br /&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36856108-2005565219482024686?l=puertosur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://puertosur.blogspot.com/feeds/2005565219482024686/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36856108&amp;postID=2005565219482024686' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36856108/posts/default/2005565219482024686'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36856108/posts/default/2005565219482024686'/><link rel='alternate' type='text/html' href='http://puertosur.blogspot.com/2007/01/windows-vista-y-mas-all.html' title='Y el mundo sigue andando.....'/><author><name>Gustavo Valentin</name><uri>http://www.blogger.com/profile/01677653510781195786</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://1.bp.blogspot.com/_Rp8ZPcn5YCY/SmjNi6ZntgI/AAAAAAAAABU/glIo1ybb410/S220/Castromonte+cartel+foto+chica.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36856108.post-3691806153255202070</id><published>2007-01-01T17:52:00.000-03:00</published><updated>2007-01-01T18:10:59.479-03:00</updated><title type='text'>HMG 1.2 Extended Build 29a - Publicado</title><content type='html'>Se ha liberado "The Harbour MiniGUI 1.2 Extended (Build 29a) New Year Edition" en los siguientes links:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://hmgextended.com/files/CONTRIB/hmgexsetup_29a.zip"&gt;Setup&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://hmgextended.com/files/CONTRIB/hmgexsetup_29a_lite.zip"&gt;Lite build&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://hmgextended.com/files/HMGS-IDE/ide.zip"&gt;Updated Ide 0.3.7 pack&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;Al igual que la ultima versión de fivewin, esta tiene solo una nueva función [&lt;i&gt;GetComputerName()&lt;/i&gt;], varias correciones y algunos ejemplos nuevos de uso.&lt;br /&gt;&lt;br /&gt;Publicado en el foro de harbour minigui (&lt;a href="http://tech.groups.yahoo.com/group/harbourminigui/"&gt;http://tech.groups.yahoo.com/group/harbourminigui/&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;Harbour MiniGUI Extended es una version ampliada del Harbour MiniGUI de Roberto Lopez y es liderada por Grigory Filatov.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36856108-3691806153255202070?l=puertosur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://puertosur.blogspot.com/feeds/3691806153255202070/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36856108&amp;postID=3691806153255202070' title='1 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36856108/posts/default/3691806153255202070'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36856108/posts/default/3691806153255202070'/><link rel='alternate' type='text/html' href='http://puertosur.blogspot.com/2007/01/hmg-12-extended-build-29a-publicado.html' title='HMG 1.2 Extended Build 29a - Publicado'/><author><name>Gustavo Valentin</name><uri>http://www.blogger.com/profile/01677653510781195786</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://1.bp.blogspot.com/_Rp8ZPcn5YCY/SmjNi6ZntgI/AAAAAAAAABU/glIo1ybb410/S220/Castromonte+cartel+foto+chica.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36856108.post-8172570297230847377</id><published>2006-12-30T19:03:00.000-03:00</published><updated>2006-12-30T19:10:43.393-03:00</updated><title type='text'>FiveWin para harbour v. 6.12</title><content type='html'>Utilizando la nueva nomenclatura para la numeración de versiones fivetech anunció la publicación de una nueva versión.&lt;br /&gt;&lt;br /&gt;Contiene solo una nueva función [&lt;i&gt;isInternet()&lt;/i&gt;] siendo el resto correcciones de cosas que andaban mal.&lt;br /&gt;&lt;br /&gt;Link a los detalles: &lt;a href="http://fivetechsoft.com/forums/viewtopic.php?t=5377"&gt;http://fivetechsoft.com/forums/viewtopic.php?t=5377&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36856108-8172570297230847377?l=puertosur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://puertosur.blogspot.com/feeds/8172570297230847377/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36856108&amp;postID=8172570297230847377' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36856108/posts/default/8172570297230847377'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36856108/posts/default/8172570297230847377'/><link rel='alternate' type='text/html' href='http://puertosur.blogspot.com/2006/12/fivewin-para-harbour-v-612.html' title='FiveWin para harbour v. 6.12'/><author><name>Gustavo Valentin</name><uri>http://www.blogger.com/profile/01677653510781195786</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://1.bp.blogspot.com/_Rp8ZPcn5YCY/SmjNi6ZntgI/AAAAAAAAABU/glIo1ybb410/S220/Castromonte+cartel+foto+chica.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36856108.post-116682629990172743</id><published>2006-12-22T19:13:00.000-03:00</published><updated>2006-12-22T19:24:59.906-03:00</updated><title type='text'>DBU para varios tipos de archivos</title><content type='html'>Miguel Angel Marchuet acaba de liberar la version 1.0.18 de ourXDBU, un editor de tablas que soporta multiples formatos:&lt;br /&gt;&lt;UL&gt;&lt;LI&gt;DBFNTX&lt;br /&gt;&lt;/LI&gt;&lt;LI&gt;DBFCDX&lt;br /&gt;&lt;/LI&gt;&lt;LI&gt;DBFBLOB&lt;br /&gt;&lt;/LI&gt;&lt;LI&gt;Paradox 3.x, 4.x, 5.x&lt;br /&gt;&lt;/LI&gt;&lt;LI&gt;Visual FoxPro Tables&lt;br /&gt;&lt;/LI&gt;&lt;LI&gt;FoxPro VFP Tables&lt;br /&gt;&lt;/LI&gt;&lt;LI&gt;Microsoft Jet 4.0 OLE DB Provider - Visual FoxPro&lt;br /&gt;&lt;/LI&gt;&lt;LI&gt;Microsoft Jet 4.0 OLE DB Provider - Access&lt;br /&gt;&lt;/LI&gt;&lt;LI&gt;Microsoft Jet 3.51 OLE DB Provider - Access&lt;br /&gt;&lt;/LI&gt;&lt;LI&gt;Microsoft Jet 4.0 OLE DB Provider - Excel&lt;br /&gt;&lt;/LI&gt;&lt;LI&gt;Microsoft OLEDB Provider for Oracle&lt;br /&gt;&lt;/LI&gt;&lt;LI&gt;Microsoft OLEDB Provider for SQL Server&lt;br /&gt;&lt;/LI&gt;&lt;LI&gt;MySql&lt;br /&gt;&lt;/LI&gt;&lt;LI&gt;IBM Informix OLEDB Provider&lt;br /&gt;&lt;/LI&gt;&lt;LI&gt;DBF Foxpro OLEDB&lt;br /&gt;&lt;/LI&gt;&lt;LI&gt;IBM Client Access OLEDB provider&lt;br /&gt;&lt;/LI&gt;&lt;LI&gt;Data Link connection (UDL)&lt;/LI&gt;&lt;/UL&gt;&lt;br /&gt;&lt;br /&gt;Links:&lt;br /&gt;&lt;a href="http://www.xharbour.com/xHC/index.asp?page=xhc_download_detail.asp&amp;type=dl&amp;id=78&amp;show_i=7&amp;show_sub=1"&gt;Download y comentarios (en ingles)&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.marchuet.net/"&gt;sitio del autor&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36856108-116682629990172743?l=puertosur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://puertosur.blogspot.com/feeds/116682629990172743/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36856108&amp;postID=116682629990172743' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36856108/posts/default/116682629990172743'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36856108/posts/default/116682629990172743'/><link rel='alternate' type='text/html' href='http://puertosur.blogspot.com/2006/12/dbu-para-varios-tipos-de-archivos.html' title='DBU para varios tipos de archivos'/><author><name>Gustavo Valentin</name><uri>http://www.blogger.com/profile/01677653510781195786</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://1.bp.blogspot.com/_Rp8ZPcn5YCY/SmjNi6ZntgI/AAAAAAAAABU/glIo1ybb410/S220/Castromonte+cartel+foto+chica.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36856108.post-116671270483445068</id><published>2006-12-21T11:37:00.000-03:00</published><updated>2006-12-21T11:51:44.840-03:00</updated><title type='text'>OZ Software acaba de publicar xaScript</title><content type='html'>Es una herramienta que le permite leer y ejecutar código fuente xHarbour desde dentro de sus programas. Links:&lt;br /&gt;&lt;a href="http://www.xailer.com/"&gt;info&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.xailer.com/files/xascript.exe"&gt;demo&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36856108-116671270483445068?l=puertosur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://puertosur.blogspot.com/feeds/116671270483445068/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36856108&amp;postID=116671270483445068' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36856108/posts/default/116671270483445068'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36856108/posts/default/116671270483445068'/><link rel='alternate' type='text/html' href='http://puertosur.blogspot.com/2006/12/oz-software-acaba-de-publicar-xascript.html' title='OZ Software acaba de publicar xaScript'/><author><name>Gustavo Valentin</name><uri>http://www.blogger.com/profile/01677653510781195786</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://1.bp.blogspot.com/_Rp8ZPcn5YCY/SmjNi6ZntgI/AAAAAAAAABU/glIo1ybb410/S220/Castromonte+cartel+foto+chica.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36856108.post-116671163474635834</id><published>2006-12-21T11:23:00.000-03:00</published><updated>2006-12-21T11:33:54.753-03:00</updated><title type='text'>MySQL empotrado con Eagle1</title><content type='html'>Manuel Expósito nos cuenta en su blog "&lt;a href="http://lacolinadelloco.blogia.com/"&gt;La Colina del Loco&lt;/a&gt;" acerca de las posibilidades de utilizar su Eagle1 como sistema empotrado con MySQL.&lt;br /&gt;&lt;br /&gt;Segun nos explica un sistema empotrado es aquel donde en la misma maquina reside la aplicación y el motor de base de datos salteando de esta manera la capa de comunicación tcp/ip.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36856108-116671163474635834?l=puertosur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://puertosur.blogspot.com/feeds/116671163474635834/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36856108&amp;postID=116671163474635834' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36856108/posts/default/116671163474635834'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36856108/posts/default/116671163474635834'/><link rel='alternate' type='text/html' href='http://puertosur.blogspot.com/2006/12/mysql-empotrado-con-eagle1.html' title='MySQL empotrado con Eagle1'/><author><name>Gustavo Valentin</name><uri>http://www.blogger.com/profile/01677653510781195786</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://1.bp.blogspot.com/_Rp8ZPcn5YCY/SmjNi6ZntgI/AAAAAAAAABU/glIo1ybb410/S220/Castromonte+cartel+foto+chica.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36856108.post-116657929771353403</id><published>2006-12-19T22:45:00.000-03:00</published><updated>2006-12-19T23:08:49.040-03:00</updated><title type='text'>FiveWin cambia la forma de numerar versiones</title><content type='html'>Publicado en los forums de fivetech por su autor:&lt;br /&gt;&lt;blockquote&gt;&lt;I&gt;&lt;br /&gt;Hemos estado considerando el cambiar el sistema de numeración de versiones que usa FiveWin y usar el mismo que usa Ubuntu Linux:&lt;br /&gt;&lt;br /&gt;El año y el mes, por ejemplo: el próximo build será 6.12 significando que se publica en diciembre del 2006. Por ejemplo: El próximo año en febrero, será: 7.02. Y así cada mes y cada año.&lt;br /&gt;&lt;br /&gt;De esta forma no tenemos que preguntar a los usuarios las fechas de las librerías que usan. El número de versión de FW/FWH/FWPPC significará el año y el mes. &lt;br /&gt;&lt;/i&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;a href="http://fivetechsoft.com/forums"&gt;http://fivetechsoft.com/forums&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36856108-116657929771353403?l=puertosur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://puertosur.blogspot.com/feeds/116657929771353403/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36856108&amp;postID=116657929771353403' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36856108/posts/default/116657929771353403'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36856108/posts/default/116657929771353403'/><link rel='alternate' type='text/html' href='http://puertosur.blogspot.com/2006/12/fivewin-cambia-la-forma-de-numerar.html' title='FiveWin cambia la forma de numerar versiones'/><author><name>Gustavo Valentin</name><uri>http://www.blogger.com/profile/01677653510781195786</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://1.bp.blogspot.com/_Rp8ZPcn5YCY/SmjNi6ZntgI/AAAAAAAAABU/glIo1ybb410/S220/Castromonte+cartel+foto+chica.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36856108.post-116613721689798939</id><published>2006-12-14T19:01:00.000-03:00</published><updated>2006-12-14T20:00:17.343-03:00</updated><title type='text'>Nueva versión de Eagle1 para MySQL</title><content type='html'>Manuel Expósito anunció la disponibilidad de la versión 5.02 de su librería de acceso a MySQL.&lt;br /&gt;&lt;br /&gt;De acuerdo a su propia definición:&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;Eagle1 es una jerarquía de clases para la gestión y manejo de las Bases de Datos MySQL desde entornos de programación xBase C3, Harbour, xHarbour en los sistemas operativos Windows y Linux con independencia del IDE o GUI que se use.&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;Mas info en &lt;a href="http://es.groups.yahoo.com/group/eagle1/"&gt;http://es.groups.yahoo.com/group/eagle1/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36856108-116613721689798939?l=puertosur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://puertosur.blogspot.com/feeds/116613721689798939/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36856108&amp;postID=116613721689798939' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36856108/posts/default/116613721689798939'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36856108/posts/default/116613721689798939'/><link rel='alternate' type='text/html' href='http://puertosur.blogspot.com/2006/12/nueva-versin-de-eagle1-para-mysql.html' title='Nueva versión de Eagle1 para MySQL'/><author><name>Gustavo Valentin</name><uri>http://www.blogger.com/profile/01677653510781195786</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://1.bp.blogspot.com/_Rp8ZPcn5YCY/SmjNi6ZntgI/AAAAAAAAABU/glIo1ybb410/S220/Castromonte+cartel+foto+chica.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36856108.post-116501254523769917</id><published>2006-12-01T19:24:00.000-03:00</published><updated>2006-12-01T19:35:45.246-03:00</updated><title type='text'>Nueva versión de Xailer</title><content type='html'>Se ha publicado la versión 1.2a de Xailer que algunos correcciones sobre la versión 1.2.&lt;br /&gt;&lt;br /&gt;Más información acerca de las novedades y correcciones en:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.xailer.com"&gt;http://www.xailer.com&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;y en el blog de Xailer en:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://xailer.info/esp/"&gt;http://xailer.info/esp/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Enlace para descargar la versión 1.2a completa:&lt;br /&gt;&lt;a href="http://www.xailer.com/files/xailer.exe"&gt;http://www.xailer.com/files/xailer.exe&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Enlace para descargar la actualización si ya tene instalada la versión 1.2:&lt;br /&gt;&lt;a href="http://www.xailer.com/files/xailer.exe"&gt;http://www.xailer.com/files/xailer.exe&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36856108-116501254523769917?l=puertosur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://puertosur.blogspot.com/feeds/116501254523769917/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36856108&amp;postID=116501254523769917' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36856108/posts/default/116501254523769917'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36856108/posts/default/116501254523769917'/><link rel='alternate' type='text/html' href='http://puertosur.blogspot.com/2006/12/nueva-versin-de-xailer.html' title='Nueva versión de Xailer'/><author><name>Walter Negro</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36856108.post-116494599154251176</id><published>2006-12-01T00:57:00.000-03:00</published><updated>2006-12-01T19:01:19.683-03:00</updated><title type='text'>Release de noviembre de ooHG</title><content type='html'>Se ha liberado la release de noviembre del proyecto ooHG, que es el proyecto de un MiniGUI utilizando programación orientada a objeto.&lt;br /&gt;&lt;br /&gt;Es posible obtener los archivos de este proyecto en la siguiente dirección:&lt;br /&gt;&lt;pre wrap=""&gt;&lt;a class="moz-txt-link-freetext" href="http://sourceforge.net/projects/oohg"&gt;http://sourceforge.net/projects/oohg&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36856108-116494599154251176?l=puertosur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://puertosur.blogspot.com/feeds/116494599154251176/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36856108&amp;postID=116494599154251176' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36856108/posts/default/116494599154251176'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36856108/posts/default/116494599154251176'/><link rel='alternate' type='text/html' href='http://puertosur.blogspot.com/2006/12/release-de-noviembre-de-oohg.html' title='Release de noviembre de ooHG'/><author><name>Walter Negro</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36856108.post-116492150735380113</id><published>2006-11-30T17:53:00.000-03:00</published><updated>2006-11-30T18:21:14.106-03:00</updated><title type='text'>Encuentro al ritmo del samba</title><content type='html'>El pasado 25 de Noviembre de 2006 se realizó en la ciudad de Guarulhos (San Pablo, Brasil) el IV Encuentro de desarrolladores de Fivewin.&lt;br /&gt;&lt;br /&gt;Fué organizado por el representante de Fivewin en Brasil y tuvo una concurrencia cercana al centenar de personas. Hubo mucha camaradería, algo de cerveza al final y algunos atrasos debido a problemas en los vuelos.&lt;br /&gt;&lt;br /&gt;Las charlas presentadas fueron las siguientes:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Desarrollando una aplicación con Five Pocket:&lt;br /&gt;Un recorrido práctico sobre como crear una aplicación. &lt;br /&gt;Disertante: Sr.Valdecir.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Develando los "secretos" de las clases: &lt;br /&gt;Conceptos basicos sobre OOP, trabajos con clases, funcionalidades, ejemplos clasicos, clases nativas de FW. &lt;br /&gt;Disertante: Sr.Vailton Renato.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;VT Builder -  Generador de Progamas: &lt;br /&gt;Es una herramienta para la generación rápida de programas que puede utilizar tanto DBF como MySql, pantallas a traves del compilador Pelles C, etc.. &lt;br /&gt;Disertante: Sr. José Carlos Eonner.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Daruma - Presentación de soluciones y productos: &lt;br /&gt;Se presentó un ejemplo desarrollado por "Luiz Augusto" utilizando por primera vez Fivewin/xHarbour y otro ejemplo de una terminal de ventas. &lt;br /&gt;Disertante: Sr.Claudenir.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Migrando de DBF a MySql: &lt;br /&gt;Se vió como instalar una base de datos, la correspondencia de campos, los índices, los utilitarios, como hacer transaccciones, acceso de datos remoto y consejos sobre cuando utilizar dbf y cuando MySQL. &lt;br /&gt;Disertante: Sr.José Carlos Eonner.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Programación Web en FWH/xHarbour - Conceptos y Herramientas: &lt;br /&gt;Conceptos básicos y diferencias entre el desktop e internet, persistencia de datos, herramientas de programación web, navegadores, xDev Studio para Internet, controles (radio button, etc.), eventos, acceso a bases de datos, preguntas varias y seguridad en internet. &lt;br /&gt;Disertante: Sr. Vailton Renato.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Fivewin/xHarbour: &lt;br /&gt;Presentación del señor Gilmer orientada a los participantes que no conocian FWH como herramienta de desarrollo de aplicaciones de 32 bits.&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;Enviamos desde PuertoSUR un caluroso saludo a toda esa "torcida" que mantiene vivo al xBase.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36856108-116492150735380113?l=puertosur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://puertosur.blogspot.com/feeds/116492150735380113/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36856108&amp;postID=116492150735380113' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36856108/posts/default/116492150735380113'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36856108/posts/default/116492150735380113'/><link rel='alternate' type='text/html' href='http://puertosur.blogspot.com/2006/11/encuentro-al-ritmo-del-samba.html' title='Encuentro al ritmo del samba'/><author><name>Gustavo Valentin</name><uri>http://www.blogger.com/profile/01677653510781195786</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://1.bp.blogspot.com/_Rp8ZPcn5YCY/SmjNi6ZntgI/AAAAAAAAABU/glIo1ybb410/S220/Castromonte+cartel+foto+chica.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36856108.post-116468719606668085</id><published>2006-11-28T01:07:00.000-03:00</published><updated>2006-11-30T01:07:01.976-03:00</updated><title type='text'>Nueva release de MiniGUI Extended 1.2</title><content type='html'>Gregory filatov ha anunciado la publicación de una nueva release de la versión Extendida de MiniGUI.&lt;br /&gt;&lt;br /&gt;Para bajar el instalador del Build 27 del Harbour MiniGUI 1.2 Extended:&lt;br /&gt;&lt;a href="http://hmgextended.com/files/CONTRIB/hmgexsetup_27.zip"&gt;http://hmgextended.&lt;wbr&gt;com/files/&lt;wbr&gt;CONTRIB/hmgexset&lt;wbr&gt;up_27.zip&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;la versión Lite se puede bajar desde la siguiente dirección:&lt;br /&gt;&lt;a href="http://hmgextended.com/files/CONTRIB/hmgexsetup_27_lite.zip"&gt;http://hmgextended.&lt;wbr&gt;com/files/&lt;wbr&gt;CONTRIB/hmgexset&lt;wbr&gt;up_27_lite.&lt;wbr&gt;zip&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;y la actualización del IDE 0.3.5 (binario+fuentes) se encuentran en:&lt;br /&gt;&lt;a href="http://hmgextended.com/files/HMGS-IDE/ide.zip"&gt;http://hmgextended.&lt;wbr&gt;com/files/&lt;wbr&gt;HMGS-IDE/&lt;wbr&gt;ide.zip&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36856108-116468719606668085?l=puertosur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://puertosur.blogspot.com/feeds/116468719606668085/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36856108&amp;postID=116468719606668085' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36856108/posts/default/116468719606668085'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36856108/posts/default/116468719606668085'/><link rel='alternate' type='text/html' href='http://puertosur.blogspot.com/2006/11/nueva-release-de-minigui-extended-12.html' title='Nueva release de MiniGUI Extended 1.2'/><author><name>Walter Negro</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36856108.post-116446351528446185</id><published>2006-11-25T10:07:00.000-03:00</published><updated>2006-11-25T11:07:43.423-03:00</updated><title type='text'>Dos productos</title><content type='html'>Seguimos con novedades en el mundo xBase, a la excelente implementación de Activex por Oskar Lira ahora sumamos:&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;&lt;b&gt;NTK&lt;/b&gt; (next thecnology kit):&lt;br /&gt;Es una libreria para acceder a aproximadamente 450 funciones del API de Windows. Tambien trae un sistema para acceder a DLLs y su lenguaje es "retrocompatible" con el Clip-4-Win de 16bits.&lt;br /&gt;Los precios arrancan desde €90.- para el pre-release, €290.- incluyendo el final release mas 6 meses de updates y asi sigue agregando productos, soporte y euros.&lt;br /&gt;El sitio esta en Ingles, Frances y Castellano (aunque no todas las páginas estan traducidas, si las mas interesantes), su autor es Jn Dechereux y la empresa SiS-Logiciel.&lt;b&gt;&lt;/b&gt;&lt;br /&gt;&lt;a href="http://ntk.sis-log.com/"&gt;http://ntk.sis-log.com/&lt;/a&gt;&lt;br /&gt;&lt;HR&gt;&lt;br /&gt;&lt;b&gt;Controles CanalFive&lt;/b&gt;&lt;br /&gt;Mediante un join venture entre Cibertec de Mexico (Rene Flores) y CanalFive nos llegan estas librerías que son para ser agregadas a FWH (fivewin con xHarbour) y permiten darle una apariencia mas windows a nuestros programas (TaskBar, ToutlookBar, Office, vTitle).&lt;br /&gt;Segun René, los precios son accesibles: 30€/45 USD para el Time/Date or VTitle, 60€/80 USD para el VTaskBar o el TOutlook Bar o 100€/120 USD para la Office 2007 Toolbar. &lt;i&gt;Conociendo su generosidad damos por descontado que mencionando PuertoSur obtendremos una suculenta bonificación&lt;/i&gt;.&lt;br /&gt;No encontré una página que explique los productos pero sí hay algunas pantallas:&lt;br /&gt;&lt;a href="http://www.ciber-tec.d2g.com/objeto/c53.jpg"&gt;VTASKBAR&lt;/a&gt; ; &lt;a href="http://www.ciber-tec.d2g.com/objeto/c54.jpg"&gt;TOUTLOOKBAR&lt;/a&gt; ; &lt;a href="http://www.ciber-tec.d2g.com/objeto/c55.jpg"&gt;DATE/TIME&lt;/a&gt; ; &lt;a href="http://www.ciber-tec.d2g.com/objeto/c56.jpg"&gt;VTITLE&lt;/a&gt; y &lt;a href="http://www.ciber-tec.d2g.com/objeto/c57.jpg"&gt;Office 2007&lt;/a&gt;&lt;br /&gt;&lt;HR&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;Esto es una muestra saludable de que el lenguaje sigue vivo. Excelente!!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36856108-116446351528446185?l=puertosur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://puertosur.blogspot.com/feeds/116446351528446185/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36856108&amp;postID=116446351528446185' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36856108/posts/default/116446351528446185'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36856108/posts/default/116446351528446185'/><link rel='alternate' type='text/html' href='http://puertosur.blogspot.com/2006/11/dos-productos.html' title='Dos productos'/><author><name>Gustavo Valentin</name><uri>http://www.blogger.com/profile/01677653510781195786</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://1.bp.blogspot.com/_Rp8ZPcn5YCY/SmjNi6ZntgI/AAAAAAAAABU/glIo1ybb410/S220/Castromonte+cartel+foto+chica.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36856108.post-116372016862148067</id><published>2006-11-16T20:17:00.000-03:00</published><updated>2006-11-16T20:36:08.626-03:00</updated><title type='text'>Xailer no se quiere quedar atras...</title><content type='html'>...y muestra todo el poder de los OCX.&lt;br /&gt;&lt;br /&gt;Rene Flores nos muestra en su blog unas capturas de pantalla de una demo de Xailer ejecutando varios tipos de controles OCX.&lt;br /&gt;&lt;br /&gt;Si bien aún no están totalmente integrados al IDE, lo estarán en poco tiempo más.&lt;br /&gt;&lt;br /&gt;Esto le hace muy bien al lenguaje xBase y permitirá una competencia mucho más pareja con otros lenguajes.&lt;br /&gt;&lt;br /&gt;La competencia trae mejoras para los usuarios muy a pesar de algunos otros que quieren controlar y hacer callar el progreso.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36856108-116372016862148067?l=puertosur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://puertosur.blogspot.com/feeds/116372016862148067/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36856108&amp;postID=116372016862148067' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36856108/posts/default/116372016862148067'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36856108/posts/default/116372016862148067'/><link rel='alternate' type='text/html' href='http://puertosur.blogspot.com/2006/11/xailer-no-se-quiere-quedar-atras.html' title='Xailer no se quiere quedar atras...'/><author><name>Walter Negro</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36856108.post-116368881123811203</id><published>2006-11-16T11:35:00.000-03:00</published><updated>2006-11-16T20:15:41.016-03:00</updated><title type='text'>FreeWin en Sourceforge</title><content type='html'>"Oskar" Lira ha recibido la autorización para subir el proyecto FreeWin a Sourceforge en &lt;a href="http://sourceforge.net/projects/freewin/"&gt;http://sourceforge.net/projects/freewin/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;En unos días estará subido al cvs el código completo de FreeWin.&lt;br /&gt;&lt;br /&gt;Más información en &lt;a href="http://oskar.sytes.net/index.php"&gt;http://oskar.sytes.net/index.php&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36856108-116368881123811203?l=puertosur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://puertosur.blogspot.com/feeds/116368881123811203/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36856108&amp;postID=116368881123811203' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36856108/posts/default/116368881123811203'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36856108/posts/default/116368881123811203'/><link rel='alternate' type='text/html' href='http://puertosur.blogspot.com/2006/11/freewin-en-sourceforge.html' title='FreeWin en Sourceforge'/><author><name>Walter Negro</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36856108.post-116345008953528371</id><published>2006-11-13T17:12:00.000-03:00</published><updated>2006-11-13T17:36:44.113-03:00</updated><title type='text'>Censura en foros de Fivetech</title><content type='html'>Otra vez la censura en los foros de Fivetech.&lt;br /&gt;&lt;br /&gt;En esta oportunidad, Willam Morales le informó a un usuario que existía una librería libre para usar ActiveX con xHarbour, lo cual le evitaba al usuario, tener que actualizar la versión de FWH.&lt;br /&gt;Resultado: El mensaje en cuestión fue borrado del foro.&lt;br /&gt;&lt;br /&gt;Lo primero que uno siente es impotencia por este tipo de censura, sin embargo Fivetech está en todo su derecho de quitar mensajes que considera son contrarios a sus intereses.&lt;br /&gt;&lt;br /&gt;Para los usuarios que han sufrido estas censuras les enviamos nuestro apoyo porque también hemos sido censurados incluso antes de la existencia de los foros.&lt;br /&gt;&lt;br /&gt;Para los usuarios que siguen usando esos foros, sepan que al usar un foro privado, no tienen muchos derechos, por eso siempre hemos animado a no usar este tipo de foros e incluso por esa razón no me encontrarán ni posteando ni leyendo mensajes en dicho foro.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36856108-116345008953528371?l=puertosur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://puertosur.blogspot.com/feeds/116345008953528371/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36856108&amp;postID=116345008953528371' title='2 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36856108/posts/default/116345008953528371'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36856108/posts/default/116345008953528371'/><link rel='alternate' type='text/html' href='http://puertosur.blogspot.com/2006/11/censura-en-foros-de-fivetech.html' title='Censura en foros de Fivetech'/><author><name>Walter Negro</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36856108.post-116224295006068486</id><published>2006-10-30T18:06:00.000-03:00</published><updated>2006-10-30T18:15:50.066-03:00</updated><title type='text'>Bienvenidos nuevamente a PuertoSUR</title><content type='html'>Luego de sufrir varios ataques por parte de hackers turcos que borraban todo el contenido del sitio web (www.puertosur.org) decidimos en la última reunión informal del grupo (14/Oct/2006) abrir un blog y postear desde aquí.&lt;br /&gt;&lt;br /&gt;La página del sitio esta redireccionada al blog y en un futuro habilitaremos algun sitio para descarga.&lt;br /&gt;&lt;br /&gt;Saludos y bienvenidos.&lt;br /&gt;&lt;br /&gt;----&lt;br /&gt;Gustavo Valentin&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36856108-116224295006068486?l=puertosur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://puertosur.blogspot.com/feeds/116224295006068486/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36856108&amp;postID=116224295006068486' title='2 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36856108/posts/default/116224295006068486'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36856108/posts/default/116224295006068486'/><link rel='alternate' type='text/html' href='http://puertosur.blogspot.com/2006/10/bienvenidos-nuevamente-puertosur.html' title='Bienvenidos nuevamente a PuertoSUR'/><author><name>Gustavo Valentin</name><uri>http://www.blogger.com/profile/01677653510781195786</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://1.bp.blogspot.com/_Rp8ZPcn5YCY/SmjNi6ZntgI/AAAAAAAAABU/glIo1ybb410/S220/Castromonte+cartel+foto+chica.jpg'/></author><thr:total>2</thr:total></entry></feed>
