.programador freelance autónomo: web, aplicaciones, software de gestión

Nacido en Donostia - San Sebastián (Guipúzcoa, España) el 19 de Octubre de 1974, mostré desde temprana edad un gran interés hacia la programación de software, el cuál se materializó con aquel entrañable Spectrum 48k tan popular en su época.

Como analista programador autónomo con más de once años de experiencia en el sector, ofrezco mis servicios a empresas y profesionales que requieran un trato transparente y honesto, y desarrollos de software adaptados a sus necesidades, tanto aplicaciones de escritorio y programas de gestión, como todo tipo de desarrollos web, ya sean páginas corporativas y comercio electrónico, o sitios institucionales accesibles, o cualquier herramienta online personalizada para el cliente.

Menos clientes y satisfechos, antes que más pero insatisfechos, es mi filosofía de trabajo. Facturo mis honorarios por horas, a un precio muy razonable.

Una amplia experiencia con PHP y Javascript, me avalan para cualquier proyecto en internet, siendo no obstante nada desdeñable mi experiencia con ASP en el pasado.
Para aplicaciones y software empresarial en cambio, tras años de desarrollo en Visual Basic, desarrollaré en Java de aquí en adelante dada la versatilidad, robustez y soporte de este lenguaje.

No lo dudes, cualquier consulta o solicitud de presupuesto, será gustosamente atendida a través del formulario disponible en esta misma página, o en el número de teléfono (+34) 687 770 998.

Aviso: los números ocultos son automáticamente rechazados por mi teléfono.

Recibe un cordial saludo,


Héctor Ayestarán

Artículos

22/04/2012 - Instalando UML en NetBeans 7

Sin duda unos de los mejores IDEs gratuitos en la actualidad, más estable y con una configuración bastante más amigable que la de Eclipse, disponible para Java, PHP, Javascript y C, NetBeans nos proporciona todo lo que un desarrollador necesita para trabajar a nivel profesional.
La versión 7 incorporá ciertas mejoras respecto a la 6, pero también carece de algunos plugins, tales como UML o Visual Web Pack, que muchos desarrolladores echan en falta.

Como instalar el UML para la versión 6.7.1 (beta) en nuestro NetBeans 7.x: Y listo. Ya tendremos UML en nuestro NetBeans 7.x.


10/02/2012 - Funciones obsoletas a partir de PHP 5.3

Alguno que otro habrá recibido ya una llamada del cliente informándole de que su web ha dejado de funcionar a raíz de un cambio de hosting. Y es que a partir de la versión 5.3 algunas funciones se han quedado obsoletas.
Podemos ver la lista en el siguiente enlace: http://php.net/manual/es/migration53.deprecated.php

La gran tarea consistirá en sustituir estas funciones por otro código, en todos los proyectos viejos en los que las hayamos utilizado.
Para facilitar la tarea utilizaremos expresiones regulares y la funcionalidad de buscar y reemplazar de nuestro editor de código.
A continuación os dejo una serie de expresiones para poder corregir algunas funciones, las cuales han sido testeadas en Eclipse:

09/02/2012 - Prototipos en Javascript

Los prototipos nos permiten implementar nuevos miembros, o reimplementar los existentes, en las clases nativas de Javascript, tales como String, Number, Array u Object. Esto sin duda simplificará nuestro código y lo hará más elegante.

La sintaxis es bien sencilla, se inicia la expresión con el nombre de la clase seguido de un punto y la palabra reservada prototype.
Veamos un ejemplo en donde implementaremos dos nuevos métodos en la clase String, esa de la cual creamos implícitamente una instancia cada vez que creamos una variable de tipo string:

Como podemos observar, en este caso la palabra reservada this nos devuelve el propio valor de la variable desde la cual invocamos el prototipo. No debemos confundirlo con el this de las clases instanciables que implementamos habitualmente.


06/12/2010 - Orientando a objetos con Javascript

Posiblemente el lenguaje más plástico actualmente en la palestra, JavaScript se corona como herramienta indispensable a la hora de enriquecer nuestro sitio web con efectos y utilidades que aproximan nuestra experiencia de navegación a las aplicaciones de escritorio a las que estamos acostumbrados.
En este artículo veremos cómo implementar clases estáticas e instanciables, así como sus miembros públicos y privados.

Empezaremos por las clases estáticas, las cuales pueden implementarse de dos maneras: declarándolas como de tipo Object, o mediante un par de llaves, llamado por algunos desarrolladores "objeto".
Todos los miembros de una clase estática serán públicos.

Veamos un ejemplo utilizando Object:

Implementemos la misma clase utilizando un par de llaves:

Es el turno ahora de las clases instanciables.

Una de las cosas que llaman la atención en JavaScript son los constructores de clase, los cuales contienen dentro de sí la implementación de todos los miembros de instancia de esa clase. Los miembros estáticos quedarían fuera, declarados siempre junto a, y separados por un punto de, el nombre de la clase, que debe coincidir con el nombre del constructor.

Los miembros de instancia podrán ser públicos o privados. Utilizaremos la palabra reservada this para los públicos, y var para los privados. En el caso de no utilizar ninguno, por defecto serán privados.
Al igual que en las clases estáticas, los miembros estáticos serán todos públicos.

A continuación un ejemplo de clase instanciable:


En el próximo artículo hablaré de prototipos, o la manera de implementar nuevos miembros en las clases de la API de JavaScript. Como todo en la vida, tienen su función y contexto.


24/07/2009 - Incrustando Flash en una aplicación de escritorio

La tecnología shockwave nos brinda una excelente oportunidad de enriquecer nuestras aplicaciones de escritorio.
En el ejemplo adjunto veremos como incrustar un documento SWF dentro de un formulario de Visual Basic mediante el objeto ShockwaveFlash, y también como comunicar ambos a través de un socket mediante los objetos Winsock por un lado y XMLSocket por otro.

Descargar ejemplo


19/04/2009 - Problema con formato de fechas en ASP

Tarde o temprano a todos aquellos que hayan desarrollado en ASP les ocurrirá: La configuración regional respecto a las fechas diferirá del servidor de desarrollo al de producción, y parte de la aplicación dejará de funcionar.

¿Cómo detectar de manera rápida si tenemos las fechas en formato anglosajón o no? Os dejo el codiguito necesario.



27/03/2009 - Problema liberando el buffer de salida con PHP 4

Hace poco, desarrollando una herramienta de envío de boletines, a la hora de ir mostrando los envíos desde un iframe en tiempo de ejecución, me econtré que ni la función flush() ni la función ob_flush() funcionaban.

Bueno, pues al final resulta que para que funcionen y liberen el buffer, hay que invocar a ambas. Os dejo una muestra:



18/10/2008 - Serializando datos con JSON

Sin duda JSON se trata de una excelente opción a la hora de transferir datos entre cliente y servidor. Olvidaros de andar generando y parseando XML. JSON nos ofrece la posiblidad de serializar y deserializar una gran variedad de estructuras de datos con una sola sentencia. Lo mejor de todo es que está disponible para multitud de lenguajes.

En el ejemplo adjunto veremos como transferir y serializar datos entre ActionScript 1 y PHP 4. Debéis colocar el fichero json.php en vuestro directorio de publicación web.

Descargar ejemplo


06/09/2008 - Ejemplo simple de herencias con PHP 5

PHP5 nos brinda una arquitectura de clases bastante más estructurada, seria y moderna que su antecesor PHP4. Al margen de polémicas respecto a cual de las dos versiones es la mejor, en este artículo explicaremos como aprovechar el potencial de las clases de PHP5.
Declararemos tres clases: Abuelo, Padre e Hijo. Padre heredará de Abuelo, e Hijo de Padre y por tanto de Abuelo.

Abuelo es una clase abstracta, con lo cual no puede instanciarse, sus métodos deberían terminar de implementarse en las clases derivadas.
Abuelo.sVar1 es un campo público y estático, será heredado por Padre e Hijo y podrá ser invocado desde el exterior tanto desde instancias como estáticamente.
Abuelo.Metodo1() es un miembro abstracto, por lo tanto sólo lo declaramos. Terminará de implementarse en Padre mediante el modificador 'final'.
Abuelo.Metodo2() es un miembro protegido, es heredado por Padre e Hijo, pero su acceso es privado. Lo mismo para Abuelo.Metodo1().

Padre.sVar2 es un campo privado, no podrá ser heredado, y no podrá ser invocado ni desde el exterior ni desde clases derivadas.
El constructor de Padre es un miembro protegido, lo cual nos impide crear instancias de Padre y obliga a que los miembros de Padre, desde el exterior, sean invocados estáticamente.
Al contrario que los campos, los métodos pueden ser invocados estáticamente aunque no hayan sido declarados como estáticos.
En el constructor de Padre, vemos que inicializamos el campo $sVar1 tanto de manera estática como desde instancia. Podremos acceder a ambos valores según como lo invoquemos.

Hijo es una clase final, no podrá tener clases derivadas.
En el constructor de Hijo vemos que invocamos estáticamente al constructor de Padre, si no lo hiciáramos, el campo $sVar1 no se inicializaría y no obtendríamos el valor deseado al invocarlo.

Veamos el código:



24/07/2008 - Coloreando filas en un TDBGrid según criterio

Seguro que alguna vez trabajando con el TrueDB Grid nos hemos encontrado con la necesidad de dar un color diferente a determinados registros. En este ejemplo mostraré cómo hacerlo con Visual Basic.

Lo primero que debemos hacer, antes de cargar el grid ya sea con un Adodc o un Recordset, es poblar un array a partir del mismo origen de datos, indicando mediante true o false, si el registro correspondiente tendrá o no el color alternativo.
Esto nos permitirá mediante el evento FetchCellStyle colorear dichos registros a la vez que se vaya cargando el grid. El argumento Bookmark nos permitirá vincular los registros con el array.

Importante: Los campo que queramos colorear deberán tener el atributo FetchStyle activado-> TDBGrid1.Columns("NombreDeCampo").FetchStyle = dbgFetchCellStyleColumn

He aquí una muestra de cómo será el código del evento:



12/07/2008 - Oleada de ataques contra servidores SQL Server

Recientemente se están produciendo ataques contra multitud de servidores SQL Server. Para calibrar la magnitud del ataque, basta con buscar <script src=http://www.pingadw.com/b.js></script> en cualquier buscador y observar la cantidad de resultados que se obtienen.

Dicho ataque se trata de una inyección de Transact SQL, transformado a hexadecimal en su gran parte para burlar controles. He aquí una muestra:

Lo cual es equivalente a ejecutar:

Como podemos observar, recorre todas las tablas y campos varchar de la bbdd, anexando a los valores de dichos campos una llamada a un documento JS que en realidad no existe.

El ataque en sí no es destructivo pero sí muy molesto, ya que ralentiza enormemente la carga de un sitio web. Ya lo sabéis, proteged bien vuestros formularios!

Logotipo de nivel de accesibilidad doble-A Logotipo de XHTML Logotipo de CSS