Barra de Progreso Infinitas.

Ventana con barra de progreso infinita

Estaba dando una de mis recurrentes revisiones al ClubDelphi. Cuando me encontré con un hilo en dónde un colega pedía un sugerencia para medir mediante un TProgressBar el proceso de conexión al servidor de Base de datos. A cómo ya sabrán algunos, medir cuánto tardará en establecerse una conexión, es cómo tratar de determinar el movimiento de las partículas cuánticas.

Por eso, le he sugerido cambiar de paradigma y utilizar una barra de progreso infinita (tienen varios nombres, pero así las conozco yo). Nunca había intentado hacer una, pero dando una pequeña hojeada a MSDN, veo que no es tan difícil de conseguirla con Delphi. A continuación el código necesario:

procedure TForm1.FormCreate(Sender: TObject);
var
    CS: Cardinal;
begin
    CS := GetWindowLong(Self.ProgressBar1.Handle, GWL_STYLE);
    CS := CS or PBS_MARQUEE;
    SetWindowLong(Self.ProgressBar1.Handle, GWL_STYLE, CS);
    SendMessage(Self.ProgressBar1.Handle, PBM_SETMARQUEE, Integer(True), 0);
end;

Para utilizar el código anterior, debes agregar la unidad CommCtrl a la sección de Uses de tu unidad. Es esa unidad está definida las constantes PBM_SETMARQUEE y PBS_MARQUEE.
Referencias:

http://msdn.microsoft.com/en-us/library/windows/desktop/bb760816(v=vs.85).aspx

http://msdn.microsoft.com/en-us/library/windows/desktop/bb760820(v=vs.85).aspx#PBS_MARQUEE

http://msdn.microsoft.com/en-us/library/windows/desktop/bb760842(v=vs.85).aspx

PD: El código requiere de la versión 6 de los Common Controls de Windows. Por lo que sólo se ejecutará en Windows XP y posteriores. Además, requiere que tu aplicación tenga activo los temas visuales.

[ACTUALIZACIÓN]: A cómo oportunamente apunta Román, Delphi 7 no trae definidas las constantes PBM_SETMARQUEE y PBS_MARQUEE. Así que hay que declararlas.

const
  PBS_MARQUEE = $08;
  PBM_SETMARQUEE = WM_USER+10;
Etiquetado ,

Sayonara Delphi

Esta es una despedida oficial por mi parte al desarrollo Delphi. He meditado durante el fin de semana el estado actual de la industria y he llegado a la conclusión que seguir desarrollando (por el momento) aplicaciones Win32 no tiene sentido. Comparto la opinión del director de Valve que Windows 8 es un desastre para una industria ya de por si golpeada.

Pero no es precisamente Windows 8 el causante de mi decisión. Es el nuevo paradigma, la nube, imposible de ignorar, el que me ha forzado a tomar la decisión. Confieso que desde hace meses he estado haciendo EXCLUSIVAMENTE desarrollos para la Web y después de todo este tiempo me he convencido de no querer volver a desarrollar usando Delphi.

Delphi es un gran lenguage y herramienta. Disfruté moldear y hackear cosas con él. Creo que Delphi hace divertido el desarrollo para Win32. Pero de la diversión no se come y pensando en mi futuro he decidido irme 100% a la nube.

Por supuesto que volar hacia la nube no implica necesariamente dejar el desarrollo nativo. Pero por el momento, mis proyectos actuales corren perfectamente en un explorador. Por mi parte, desarrollar versiones nativas de mis aplicaciones es un esfuerzo innecesario.

Por eso, en el futuro cercano no pienso desarrollar para tabletas (iOS, Android, WinRT). Creo que, dependiendo del caso, desarrollar para una tableta puede ser contraproducente, inclusive podría ser como ponerte la soga en el cuello dependiendo del caso. En este sentido, se me vienen las ganas de trolear el estado actual de la industria del Software, pero hacerlo ahora no tiene sentido.

A Delphi le debo mucho. Aprendí muchas cosas de él. Y siempre le haré el honor con que mis desarrollos estén influenciados por su genial estructura, la VCL.

Tampoco estoy diciendo que a partir de ahora no escribiré una línea más en Delphi. Simplemente, no haré nada serio con él. Talvez sólo travesear cosas. Puede ser que uno que otro día haga una pequeña unidad con alguna utilidad. Pero nada más que eso. Sinceramente, ya no me veo desarrollando un nuevo proyecto completo con Delphi.

Por último compañeros, los animo a embarcarse en la nube, en el desarrollo Web como parte de nuestra evolución. Cuando vienes de Delphi es un poco complicado y confuso todas esas mezclas de Python/PHP/Ruby – Javascript – CSS – HTML, etc. Con Delphi nos acostumbramos a utilizar un solo lenguaje para hacerlo todo. Creo que es ésa costumbre la que nos reciente la primera vez que nos encontramos con la Web. Pero al final del día, es una experiencia gratificante personal y profesionalmente. Te sorprenderá la facilidad con la que lograrás cosas muy difíciles de hacer si utilizaras exclusivamente Delphi.

Fue un placer haber intercambiado experiencias y código Delphi con todos ustedes compañeros. Con esta transición profesional también me paso a Linux oficialmente (Ubuntu y su maravilloso Unity). Sayonara Windows! :)

Saludos,
Christopher

Una semana histórica contra el Copyright

Termina la tercer semana del dos mil doce. Una dio por mucho… para mucho…

Todo empezó con las fuertes palabras de Rupert Murdoch en las que por medio de Twitter acusó a Google de ser «el mayor pirata de Internet». La respuesta no se hizo esperar. Google con palabras muy diplomáticas le dijó simplemente a Murdoch que estaba desubicado y talvez loco. Tras las palabras de Murdoch se oyeron las de la industria y la del senador Smith secundando a Murdoch. Smith -El propulsor inicial de SOPA- dejó entrever que con SOPA hasta podría cerrar a Google si fuese necesario. Nada nuevo. Cualquiera que no tenga una pared de frente sabe que esta legislación junto a PIPA, más que combatir la piratería lo que busca es darle poder a las grandes corporaciones de cerrar páginas web a su libre discreción pues serán juez y parte. Algo nuevo: Google adquiere un nuevo enemigo. La industria de cine y musical.

Es oportuno mencionar el anuncio hecho en esta semana por la Casa Blanca en contra de SOPA. Aunque no se sabe si esta postura será permanentemente ya que algunos estudios de Holywood han dicho publicamente que no apoyaran financiermente la campaña de reelección del Presidente Obama. Estas circunstancias podrían «doblarle el brazo» a Obama según algunos. Pero yo sinceramente creo que si la Casa Blanca tomó esta decisión es porque analizó muy bien esta y demás situaciones. A cómo decía el Chapulín: «Todos mis movimientos están fríamente calculados…» ya sea para obtener apoyo del sector de la tecnología o tener una carta para negociar con la industria.

El hecho de más importancia de la semana fue sin duda alguna el sucedido el miércoles. Hablo de la protesta de Wikipedia, Reddit, Google y miles de sitios más de Internet. Hecho que hizo que la población en general se diera cuenta de la amenaza de SOPA. Aunque no  se ha ganado la batalla he de destacar algo loable de este día. A cómo dije, el público en general no geekie ya es consciente y se opone a esta detestable ley. Desde el miércoles en mi «News Feed» de Facebook mis contactos, aparte de banalidades, ahora también comentan o comparten artículos, fotos o vídeos acerca de lo desastrosa que sería esta ley para el Internet. Lo destacable del miércoles es: Se demostró que la industria de la cultura, además de ya haber perdido el monopolio de la distribución y cultura, también ha perdido el poder mediático al que estaban acostumbrados. Sin duda, es de ahí que debe nacer la furia de Murdoch. JA!

Hubiese querido terminar allí. Pero los acontecimientos no me dejan. No puedo terminar esta nota sin mencionar a MegaUpload. Sitio que sin previo aviso a los propietarios y usuarios del servicio fue tomado por el FBI. Según entiendo de leyes, esto no debió hacerse así. El caso de MegaUpload conmocionó a medio mundo virtual. Quedará por comprobarse si son culpables o no los propietarios del servicio. Pero que hallan cerrado MegaUpload no es lo importante. Sin SOPA, desde hace varios años se vienen cerrando Webs. Que tal con SOPA?

Lo importante que destaco de este asunto de MegaUpload es algo que se ha dicho y pedido miles de veces. Falta de leyes para regular los servicios de Internet. Y no estoy hablando que necesitamos SOPA o cosas similares, sino algo que proteja a los usuarios. Por ejemplo, en este caso de MegaUpload, sus usuarios están en la incertidumbre sobre que pasará con sus archivos ya que no hay una ley que los proteja. Al no existir una ley queda a libre discreción del FBI lo que hace con ellos. Lo más probable es que los pierdan muchos opinan.

Basados en el caso de MegaUpload, algunos son de la opinión que este incidente demuestra que la nube no es confiable como medio de almacenamiento. A cómo dije anteriormente en un comentario en el ClubDelphi, yo no creo que la nube sea el problema. De hecho creo que la nube es el lugar más seguro para guardar tus datos al igual que un banco lo es para tu dinero. El problema que hay es que no existen leyes para regular los servicios de la nube a cómo se regulan los bancos por ejemplo. Los mayoría de gobiernos están más preocupados en defender de la tecnología a las grandes corporaciones que defender al usuario de los abusos de la tecnología. Esta última idea se encarna en el caso de MegaUpload. Con la toma del sitio se garantizó proteger los intereses de Holywood porque la ley que así lo dice. Pero quién defiende a los usuarios de MegaUpload? Nadie! porque no existe ley que los proteja.

Saludos a todos y ajolá los acontecimientos ocurridos en esta semana, más de pasar al recuerdo, hagan que se tomen medidas de cambio por el bien de los usuarios y el Internet.

Etiquetado , , , , , ,

Un atardecer en el mar

Atardecer en el mar

Siempre he pensado que pocas escenas en la vida son más bellas que un atardecer en la playa. Cuando vivimos en un ciudad rodeados de cemento no podemos observar los maravilloso que es el mundo. Tal vez esa sea una de las razones por las que ahora muchas personas no le encuentran un sentido a la vida. Pero estas escenas a mí me muestran que hay cosas lindas allí afuera esperando ser observadas. Cosas que te dicen que estás aquí porque eres parte de algo más grande y maravilloso y que estás aquí para disfrutar ser parte de ese «algo» maravillo.

Esta foto la tomé la tarde l 25 de diciembre de 2011, a 30Km de mi localidad. Me siento dichoso de vivir tan cerca del mar.

Etiquetado , ,

Detestable #SOPA

Image

Internet no es anarquía, Internet es libertad y una verdadera democracía…

…. donde en gran medida, el usuario promedio y las corporaciones son iguales. Dónde una persona promedio puede desarrollar innovaciones sin ser capitalista. Internet empodera a las personas. Internet restituye los derechos de igualdad entre todos. Todos y muchos más beneficios es los que nos quieren robar las corporaciones al apoyar a SOPA y similares leyes en nombre de la protección de la propiedad intelectual (que ahora catalogan como derecho humano).. JA… JA… JA…

Indy y sus problemas con acentos y otras letras

Hace un par de semanas trabajando en un nuevo proyecto en dónde por primera vez utilizo en gran medida los componente INDY encontré un problema muy grave al enviar datos al servidor. Los caracteres fuera de la tabla ASCII[áski] se perdían. O sea los caracteres cómo

Ñ, Á, É, Ö, Ü,

etc. Pasé días buscando en la red el origen y solución a este problema. Entre todo lo que busqué y leí, lamentablemente lo único que me sirvió es saber que en las nuevas versiones de éstos componentes el problemas ya estaba resuelto. Sigue leyendo

Etiquetado , ,

Microsoft y Nokia, alguien no sabe hacer software

Ya han pasado dos semanas de la noticia que Nokia y Microsoft han unido fuerzas para ayudarse mutuamente en disimular sus respectivos «Talón de Aquiles».  Después de la bulla causada en la red por el acontecimiento, quisiera compartir lo que leí entre líneas: ¡Nokia no sabe hacer software!

Lo anterior lo digo por todo lo que he visto de esta compañía en los últimos años. Sin duda hay grandes ingenieros en su plantilla, pero no de solo buenos ingenieros de hace un buen software. Veo a Symbian, un sistema operativo que deja mucho que desear, que es un asco literalmente. Pero no solo por Symbian, sino realmente lo digo por lo desastroso que lo han hecho con Meego. Un sistema que lleva ya casi un par de años en desarrollo y no han podido hacer algo con él. Me pregunto cuánto tiempo le tomó a Apple hacer la primera versión de iOS o cuánto a Google lanzar Android en su primera versión (auque fuese mediocre). Es allí donde está el meollo del asunto. Es allí donde falla Nokia. Desde mi punto de vista, en no saber hacer o terminar un S.O.

Su estrategia de negocios deja ver que la solución de Windows Phone es temporal, que en cuanto tengan listo a Meego lo empezaran a usar. Pero además dejan a interpretar que el desarrollo de este sistema estara relegado a un pequeño departamento en la compañía. Entonces me pregunto: Cuánto tiempo ha de pasar para que una versión decente de este S.O. vea la luz? No sé, pero así a como veo a esa compañía tan poco flexible me parece que será en una década…

Etiquetado , , ,

Podría crearse algo regular sin escribir código?

Esta leyendo un artículo de la Smashing Magazine, pero me llamó la atención el siguiente anuncio de Adobe, que por ser yo un programador me pareció muy perculiar.

Adobe Dreamweaver + Business Catalyst - Build dynamic websites without programming

Dreamweaver + Business Catalyst – Haz websites dinámicos sin programar

Lo primero que se me vino a la mente fue: ¿Realmente se podrá hacer un sitio web dinámico sin escribir una sola linea de código? En realidad sí es posible. Pero la verdad es que nunca podrás hacer algo medianamente bueno sin echarte a teipiar código. Entonces se me vino a la mente otra pregunta: ¿A qué mercado está dirigido esta publicidad? Pensé: quizás a los malos programadores tal vez, o a las personas que les gusta hacer todo por si mismos y lo que quieren hacer es algo básico y creen que pueden prescindir de un programador para la tarea. Los últimos los entiendo, aunque creo que es más barato pedirle a un programador que te programe algo sencillo, que invertir en la licencia de una herramienta como ésta.

Pero lo que realmente me llama la atención del anuncio, es la probabilidad que existan programadores a los que ya no les guste programar. Tal vez serán aquellos programadores que nacieron atraídos por el boom del punto com, o tal vez «programadores» que nunca tuvieron la aptitud para serlo. No sé cómo un programador puede llamarse programador sino le gusta programar, sería como si un pintor no le gustase pintar. Alguien así no sería un verdadero pintor. Muchos nos iniciamos en esta arte por mero gusto, iniciamos programando como un pasa tiempo. Nos encanta tanto que lo haríamos gratuitamente -ese entusiasmo es el motor del software libre-.

En lo personal admiro el código bellamente escrito cómo si de una obra de arte se tratase , me deleita. Aún utilizando Dreamweaver siempre uso la vista dividida (código HTML y WYSIWYG) trabajando el 85% del tiempo en el código. Me siento en mi mundo, me siento que soy capaz de expresar libremente mis ideas, me siento en el control total.

Esa es mi opinión, no sé que opinarán ustedes al respecto.

Saludos.

Etiquetado , , , ,

Mejorando el evento OnBeforePaint

¡Hola nuevamente a todos! Lamentablemente he tenido un poco desatendido el blog por unos largos meses. Pero ahora vuelvo con la intensión de liberar una ligera modificación hecha al código de  JVLC. La licencia Mozilla me obliga a liberar mis aportaciones y/o modificaciones hechas a un código liberado originalmente con esta licencia. Es por esta razón que siendo un ciudadano muy respetuoso de la ley hago la público mi código. Sinceramente no solo lo hago porque la licencia me obliga, sino porque espero que otros desarrollares se beneficien de esta pequeña, pero muy útil modificación.

Primero quiero hacer una breve reseña sobre el origen de esta modificación. Resulta que últimamente me he vuelto un poco paranoico con la cuestión del Custom Drawing en el DBGrid. Es por eso que llegué a la necesidad de querer pintar toda la apariencia, no sólo de una simple celda, sino la de un Grid entero. En mi búsqueda de una solución eficiente y sencilla, trabajando con el componente TJvDBGrid me encontré con el evento «OnBeforePaint«. Me pareció una genial idea que alguien halla incluido tan útil evento a este componente. Lamentablemente, parece que a la persona que se le ocurrió esta idea no pensó en algunas posibilidades más que se le podrían dar a este evento, pues simplemente era un evento de tipo TNotifyEvent. En mi caso, lo que necesitaba era cancelar el pintado normal del DBGrid y proceder a mi manera si se daba el caso. Sin embargo, el evento tal y como estaba no me permitía cancelar el pintado normal que inevitablemente siempre ocurriría después. Es por la gracia y libertad del código abierto que pude indagar en el código fuente de dicho componente y modificar la declaración e implementación del evento OnBeforePaint.

Lo que hice fue lo siguiente:

1. Declare un nuevo tipo de evento llamado TJvBeforePaintEvent, que sería una extención del tipo TNotifyEvent, pero que contendría un último parámetro DoDefaultDrawing que cuando sea devuelto como False detendrá la consecutiva pintada estándar del Grid.:

TJvBeforePaintEvent = procedure(Sender: TJvDBGrid; var DoDefaultDrawing: Boolean) of object;

2. Cambié el tipo de la variable de FOnBeforePaint y propiedad OnBeforeEvent de la clase TJvDBGrid para que fuera del nuevo tipo TJvBeforePaintEvent .

TJvDBGrid = class(TJvExDBGrid, IJvDataControl)
    .....
    FOnBeforePaint: TJvBeforePaintEvent;
    .....
    property OnBeforePaint: TJvBeforePaintEvent read FOnBeforePaint write FOnBeforePaint;

3. El último paso fue cambiar ligeramente la implementación del procedimiento Paint de la clase TJvDBGrid para que hiciera uso del nuevo parámetro DoDefaultDrawing en TJvBeforePaintEvent.

procedure TJvDBGrid.Paint;
var
    DoDefaultDrawing: Boolean;
begin
    DoDefaultDrawing := True;
if Assigned(FOnBeforePaint) then
 FOnBeforePaint(Self, DoDefaultDrawing);
if not DoDefaultDrawing then
 exit;

.....

Esta simple modificación me ha permitido, en mi caso, darle más funcionalidades al DBGrid. Por ejemplo, pintar unas breves instrucciones en el formulario dónde está la rejilla. O pintar un mejor mensaje cuando por ejemplo no hay registros en la consulta realizada, por ejemplo:

En donde dice «Ningún registro coincide con su búsqueda…» pareciera algún tipo de TPaintBox, pero en realidad es un TJvDBGrid que ocupa casi todo el formulario. El texto y el degradado mostrado lo pinto en el evento OnBeforePaint con la ayuda de la modificación que os he expuesto. Esta es la ventana donde se muestran los registros de pacientes para un sistema que he estado desarrollando llamado Biolab.

Etiquetado , , ,

Alguien sabe un poco de usabilidad?

¿Qué malo hay en el anterior mensaje?

De casualidad hace poco entré en el brainstorm de Ubuntu. En donde se discutía una posible solución para manejar el problema de conflictos de IP. Me encontré con esta pequeña sugerencia que me llamó mucho la atención. A este punto, cualquiera con un pequeño conocimiento de usabilidad se daría cuenta del problema de esta «sugerencia». Sino se han dado cuenta aún, déjenme decirles lo siguiente: ¿Está bien identificar por la dirección MAC una interfaz de red? NOOOOOOOOO. Un usuario promedio no es un técnico en computadoras, de hecho muchos técnicos no comprenden bien que es una MAC (no, no es la de Apple). Entonces, ¿no sé porque diablos poner este tipo de mensajes cuando se quiere informar al usuario? Lo que se hace es frustrar al usuario.  Me sorprende que al momento de escribir esta entrada, está solución esté en cuarto lugar.

El primer lugar es esta:

¿ alguien me puede explicar que es «mi subnet» y que significa ese icono?

Irónicamente, las sugerencias menos botadas creo que son las mejores. Dejar que el sistema simplemente repare este error. Sólo busca un dirección IP que esté disponible y ya! Si el usuario tiene una dirección estática, no vallas a cambiarla, solo notificalo, pero con un mensaje entendible por cualquier usuario. Es muy probable que el usuario que halla configurado una dirección IP estática tenga conocimientos técnicos y podrá resolver el problema.

Son este es el tipo de cosas que le dan la fama de Linux de díficil. Si de verdad canonical tiene trabajando expertos en usabilidad -no estoy seguro que sean tan expertos- espero que no vallan a «pifiarse» implementando algún mensaje de estos.

Etiquetado , ,