Curso de Xailer. Vídeo 9. Repasando POO.

Ya está subido el vídeo nº 9 del curso de Xailer donde damos un repaso a la POO con Harbour.

Anuncios

Xailer y los ComboBox. El fin de la desesperación.

Después de todo el día buscando la forma de echar  a andar un  TDBComboBox de Xailer con un DataSet de MySQL, he terminado “retocando” la clase TComboBox de esta forma:

CLASS TComboBox from XComboBox
   DATA oDataSet

   METHOD isEmpty() INLINE empty( ::aItems )
   METHOD setValue( value )
   METHOD setItem( dataSearch, item )
   METHOD getItem()

END CLASS

METHOD setValue( value ) CLASS TComboBox

   ::oDataSet:goTop()
   while !::oDataSet:eof()
      ::AddItem( ::oDataSet:FieldGetByName(value) )
      ::oDataSet:skip()
   end
   ::nIndex := 1

RETURN nil

METHOD setItem( dataSearch, item ) CLASS TComboBox

   local n := 1

   ::nIndex := 1
   ::oDataSet:goTop()
   while !::oDataSet:eof()
      if ::oDataSet:FieldGetByName(dataSearch) == item
         ::nIndex := n
      end if
      n++
      ::oDataSet:skip()
   end

RETURN nil

METHOD getItem() CLASS TComboBox
   ::oDataSet:goto( ::nIndex )
RETURN ::oDataSet

INFORMACION de datas y métodos:

  • oDataSet -> Data que contiene el dataset que se desea controlar.
  • isEmpty() -> Método que retorna .t. si el combobox está vacío.
  • setvalue( value ) -> Método que indica que FIELD del DataSource se va a usar para mostrar en el comboBox. Asigna el FIELD y carga el comboBox.
  • setItem( dataSearch, item ) -> Método que sirve para colocar el combobox en la posicion indicada en dataSearch -> FIELD por el que se buscará el dato y item -> Valor del dato.
  • getItem() -> Método para seleccionar el Dataset actual. Devuelve el DataSet de la fila seleccionada en el comboBox.

Me ofrezco para formación/colaboración en proyectos tecnológicos

Ofrezco toda mi experiencia profesional en programación y desarrollos tecnológicos para formación personalizada on-line y colaboración en proyetos.

Con mis más de 20 años de experiencia en el desarrollo de software y mi amplio conocimiento de lenguajes como:

  • Harbour / Xailer
  • Java
  • Android
  • PHP
  • Python
  • C++,C
  • POO

bases de datos:

  • MySQL
  • SQLite
  • MS SQL Server
  • Oracle

sistemas operativos:

  • Windows
  • Windows Server
  • Linux
  • Linux Server (Apache, MySQL, PHP, Python)

desarrollo web con:

  • Bootstrap
  • AngularJS
  • DJango
  • HTML5
  • CSS3

y creación de dispositivos con:

  • Arduino
  • Raspberry Pi

me da la oportunidad de porder ofrecer a la comunidad toda mi ayuda tanto en formación personalizada on-line como colaboración en proyectos tecnológicos de cualquier clase.

Si estás interesado, ponte en contacto conmigo por privado o deja un comentario en este mensaje.

IMPORTANTE: He impartido cursos de POO con Xailer a varias personas que han quedado muy satisfechos. También he impartido cursos de como empezar con Xailer y crear tu primera aplicación funcional. He creado procesos en Python de lado del servidor que realizan tareas de sincronizar una aplicación de gestión con Prestashop; o sistemas webservices en PHP para conectar controladoras basadas en Ardunino con un servidor remoto y obtener datos de una base de datos.

Primeras horas con Windows 10. Nada nuevo bajo el sol.

Ayer se me actualizó el equipo de Windows 8.1 a Windows 10. A parte de cambios en la visualización, algunas “mejoras” en el menú inicio (aunque lq misma horrible sensación de haber sido diseñado por alguien con menos gusto que yo) y que va algo más lento en este I3, no he notado nada _importante_ que justifique el cambio.

Los números de 2014.

Los duendes de las estadísticas de WordPress.com prepararon un informe sobre el año 2014 de este blog.

Aquí hay un extracto:

Un tren subterráneo de la ciudad de Nueva York transporta 1.200 personas. Este blog fue visto alrededor de 5.600 veces en 2014. Si fuera un tren de NY, le tomaría cerca de 5 viajes transportar tantas personas.

Haz click para ver el reporte completo.

Prestashop y la mala ingeniería de software.

Por un motivo o por otro, no viene al caso, me tuve que poner a destripar Prestashop, si, esa aplicación web que sirve para montar tiendas on-line. que tantos seguidores tiene y que según dicen funciona estupendamente….

Lo primero que me puse a mirar fue, por supuesto, la base de datos de prestashop, que, al márgen de ser un galimatías de tablas (tablas y más tablas), parece creada por un novato en el diseño de bases de datos que ha ido añadiendo cosas sin ton ni son. A parte del galimatías de tablas lo que más me sorprende es la falta total de las mínimas reglas de integridas referencial.

Más tarde, después de darme por vencido en el intento de descifrar el esquema de datos, me puse a mirar el código fuente. Bueno, no está mal, pero tal como demuestra la base de datos, su creador no parece haberse sentado a diseñar una aplicación informática, sino que más bien lo que ha hecho ha sido adaptar aquel legendario PHP-nuke para convertirlo en una tienda y al mismo tiempo añadir módulos y más módulos PHP.

A mi modo de ver, Prestashop puede funcionar muy bien, presentar una solución para una tienda virtual y disponer de muchos seguidores y enamorados, pero su código fuente y su base de datos demuestran un pésimo diseño por parte de su autor. No me extraña ver foros de Prestashop donde la gente se queja de que no pueden añadir productos, que les aparecen extraños errores y mucho más que puede ser consultado a través del WWW.

Me viene de paso a la memoria, que si bien lo que es la tienda es más o menos intuitiva para los usuarios, la parte de administración es otro gran desafío para las personas que tienen que mantener la tienda en funcionamiento, ¡qué cantidad de apartados, datos y complicaciones!.

Y ya no te digo nada si quieres comunicar prestashop con cualquier otra aplicación, por aquello de que la gestión la tienes en un programa de escritorio que funciona bastante bien y necesitas mantener el stock de la tienda y los pedidos sincronizados.

En fin, que detrás de la apariencia que da, Prestashop adolece del mínimo nivel necesario para considerarse ingeniería de software.

(Versiones de Prestashop vistas: 1.4, 1.5 y 1.6)

Listas doblemente enlazadas en Arduino

Algunas veces nos encontramos con la necesidad de tener la información que leemos de una base de datos o que nos entrega cierto dispositivo en forma de lista. He visto algunas implementaciones de otros usuarios de Arduino y la verdad, a mi no me han llegado a convencer del todo, por lo que he desarrollado mi propia clase para usar listas doblemente enlazadas  (listas que se pueden recorrer en uno u otro sentido).

Aquí dejo un resumen de las características:

NewList.h — Versión 1.0

Librería para usar listas doblemente enlazadas en Arduino (1.0.5 o superior).
Creada por: José Alfonso Suárez Moreno (joseasuarez@gmail.com).
Fecha: 21.ABR.2014

Uso:

NewList<tipo> lista;

<tipo> es el tipo de dato a usar en la lista. Desde un tipo primitivo como int, char, long… hasta un objetoo una estructura. Los símbolos <> son necesarios.

Métodos:

  • ~NewList()> Destructor.
  • add() -> Añade un nuevo elemento al final de la lista.
  • insert() -> Inserta un nuevo elemento delante del actual.
  • goFirst() -> Se posiciona al principio de la lista.
  • goLast() -> Se posiciona al final de la lista.
  • goTo(int n) -> Se posiciona en la posición n. La primera posición es 0.Si el valor es mayor que el número de elementos-1 se posiciona en el último.
  • search(tipo v) -> Busca el valor v en la lista. Debe ser del mismo tipo que el declarado al crear el objeto. Devuelve el valor. Si no lo encuentra se posiciona en el último elemento.
  • goPrevious() -> Se posiciona en el elemento anterior al actual.
  • goNext() -> Se posiciona en el elemento siguiente al actual.
  • isFirst() -> Indica si está posicionado en el primer elemento. (true/false).
  • isLast() -> Indica si está posicionado en el último elemento. (true/false).
  • isEmpty() -> Indica si la lista está vacía. (true/false).
  • getCurrent() -> Devuelve el elemento actual.
  • get(int n) -> Devuelve el elemento n. La primera posición es 0. Si el valor es mayor que el número de elementos-1 se posiciona en el último.
  • hasPrevious() -> Indica si hay un elemento dealante del actual. (true/false).
  • hasNext() -> Indica si hay un elemento detrás del actual.

TO-DO:

  • erase(int n) -> Eliminar el elemento n.
  • eraseCurrent() -> Eliminar el elemento actual.
  • eraseValue(tipo v) -> Eliminar el elemento que tenga el valor v (del mismo tipo que el especificado al crear la lista).

 

Enlace de descarga: listas doblemente enlazadas en Arduino.