Archivo

Archivo para la categoría ‘Aplicación’

#FunWithDelphi: La foto del día

martes, 31 de enero de 2017 2 comentarios

NASA_DelphiBueno, pues ya está publicada la mía!! Y si todavía no os habéis animado os animo a que lo hagáis.

Desde hace unos días está en marcha la competición #FunWithDelphi que ha promovido Embarcadero y que se basa en la API de la NASA.

La descripción completa de la competición la tenéis en estos links; Esta entrada de Marco Cantú, y esta otra donde se explican algunos detalles más técnicos.

Y las reglas y los pasos prácticos a seguir, en este otro enlace:
https://community.embarcadero.com/competitions/14-fun-with-delphi-nasa-api-mash-up

Al final de la página también tenéis la lista de las publicadas hasta ahora, con las opciones para acceder a ellas y votar.

Básicamente, se trata de hacer una aplicación que utilice la API de la NASA y que muestre características de las últimas versiones de RAD Studio. Cualquier plataforma disponible y con el único límite de la imaginación.

Os muestro un vídeo de la mía en funcionamiento (Windows + Android)

Link al video (https://www.youtube.com/watch?v=CBqpnR6hwlo)

Y os dejo algunas imágenes:

Se puede descargar el binario para windows desde el repositorio de github. El código completo de la aplicación lo publicaré en el blog y en el repositorio, una vez que acabe la competición

Sólo me queda esperar que os guste y si es así que la votéis.

Un saludo.

Hablando del tiempo… (OpenWeatherMap) 1/2

viernes, 4 de diciembre de 2015 13 comentarios

clima_gdeHace unos días pensaba en un tema para una nueva entrada del blog.
No tenía ideas, así que como solemos hacer aquí cuando no tenemos de qué hablar, se me ocurrió “hablar del tiempo”… (gracias a Javi desde aquí, que me fue realmente el que me puso en la pista del tema ;-) ).

Pues ya está, decidido, hablemos del tiempo.

Tenía en mente escribir sobre algunas de las novedades de las últimas versiones de RAD Studio y utilizaremos el tema para realizar algunas pruebas y demostrar cómo funcionan. Para ellos y para hablar del tiempo, vamos a utilizar en la entrada OpenWeatherMap.

¿Qué es OpenWeatherMap?

Según la web se describe como, “un servicio que provee de datos del tiempo de más de 200.000 ciudades y de todas las ubicaciones geográficas que se encuentra disponible en la web OpenWeatherMap.org y también a través de API. La idea del servicio está inspirada en OpenStreetMap y Wikipedia que ofrecen la información gratuita y disponible para todo el mundo.”

 APY Key

OpenWeatherMap es un servicuio gratuito y para poder trabajar con él, deberemos crear una cuenta y así acceder a una API Key, que es obligatoria a la hora de realizar peticiones a la web.

Para esta entrada y los ejemplos de código he dado de alta una cuenta gratuíta y he obtenido la siguiente API Key:

278857e8dee51f914026df21d0d40c19

_________________________________________________________________
NOTA (21/01/2021):
Algún usuario del blog ha utilizado esta clave, en lugar de para hacer pruebas, para otros temas, de manera que desde la página de OpenWeatherMap me han informado de un tráfico excesivamente alto y de que se bloqueará esta APIKey cuando lo exceda. Siento que para los que accedéis al blog esta deje de funcionar (a ratos). Si queréis hacer pruebas debréis crear vuestra propia clave.
Desgraciadamente a veces intento facilitar las cosas a los que accedéis a estas entradas, pero hay quien prefiere no seguir las reglas y usar el camino fácil.
_________________________________________________________________

AVISO: Para seguir esta entrada y probar los ejemplos, podéis usar esta clave, pero si váis a programar aplicaciones o vuestros propios ejemplos, os aconsejo que déis de alta vuestra propia cuenta y obtengáis vuestra clave, pues en cualquier momento ésta puede dejar de estar activa.

La explicación completa de cómo utilizar el valor de la «API KEY» lo tenéis en este link.

Leer más…

Categories: Aplicación, Delphi, OOP, REST Tags:

Obtener información de una canción

martes, 13 de mayo de 2014 4 comentarios

images (2)El tema de esta entrada ha surgido a partir de la necesidad de obtener esta información de una canción, para un programa  que en breve os presentaré en otra entrada del blog.
Esta parte no tiene que ver directamente con el tema de esa entrada, pero sí me ha parecido interesante y tal vez útil para otras personas, así que me he decidido a publicar estas líneas al respecto, ya que en la otra no tiene cabida.

El problema es sencillo; A partir de los datos básicos de un tema musical (título y/o artista) necesito obtener algo de información de esa canción. En mi caso me interesaba el título del álbum y una caratula (aunque se puede obtener más).

Hay varios servicios en Internet que os ofrecen la posibilidad de acceder a esta información.

http://www.lastfm.es/api

http://www.freecovers.net/api/

https://www.apple.com/itunes/affiliates/resources/documentation/itunes-store-web-service-search-api.html

images (3) En esta ocasión me he decantado por iTunes, por la facilidad de uso y porque no hace falta registrarse. Hay algunos otros cuya utilización es gratuita, pero requieren un registro y el uso de una APIKey. En este caso, por simple sencillez, me he decantado por este. Además, ya me ofrece (con creces) los datos que para este ejemplo estaba buscando.

En esta página podeís acceder a la información de la API para realizar búsquedas en iTunes.

Como podéis ver es bastante sencilla de utilizar.

Leer más…

Categories: Aplicación, Delphi, Threads Tags: , , ,

(5/5) Publicación en AppStore (Google Play) paso a paso.

miércoles, 5 de febrero de 2014 16 comentarios

Aquí comenzamos la que será la última entrada de esta serie, completando el "ciclo de vida" de este desarrollo, con la publicación de la aplicación en la “tienda” de Google (Google Play). Tal vez para el ejemplo que estamos tratando no sea el “final lógico”, pues recordemos que trabajamos sobre el supuesto de que la aplicación es para una empresa. En ese caso la distribución podría ser de forma “interna” y no tendría sentido publicarla para todos los usuarios de Google Play.  Pero me váis a permitir que en este caso me tome esta “licencia” y aprovecharé así esta aplicación para documentar este último paso.

Recordemos lo que hemos visto hasta ahora, y aprovecho para actualizar los links en el resto de las entradas.

“ROADMAP” DE LAS ENTRADAS

Hay una serie de pasos que necesitaremos completar, antes de poder publicar nuestra aplicación. En las pruebas normales del día a día tal vez no sean todos necesarios, pero una vez que vamos a publicar la aplicación deberíamos completarlos.

Leer más…

(3/5) Generación de un cliente (WebService) en Delphi.

martes, 28 de enero de 2014 92 comentarios

En las dos entradas anteriores de esta serie, hemos planteado el problema y hemos visto cómo generar un WebService en PHP que nos permita acceder a nuestra Base de Datos. Una vez completada la parte Servidor, vamos a comenzar a desarrollar las aplicaciones cliente que van a consumir los datos.

“ROADMAP” DE LAS ENTRADAS

Siguiendo con nuestra “hoja de ruta”, vamos a desarrollar varios clientes de escritorio en Windows, utilizando diferentes alternativas y posibilidades de las que disponemos.

web-service-overview-1

CLIENTE 1: Delphi6 + Indy + LkJSON

Nuestra primera opción va a ser una aplicación (creada en Delphi 6) que acceda al primer webservice que hemos creado aquí y para ello utilizaremos las librerías Indy.

Leer más…

(2/5) Generación del Webservice en PHP.

lunes, 27 de enero de 2014 13 comentarios

imagesContinuando en el lugar dónde nos quedamos en la primera entrada, vamos a pasar al siguiente punto. La generación del Servidor.

“ROADMAP” DE LAS ENTRADAS

Antes de comenzar a generar código, necesitamos generar la Base de Datos, de esta forma podremos ir realizando pruebas sobre ella.
Para la creación de la tabla de «usuario» podéis utilizar la siguiente sentencia:

 

CREATE TABLE IF NOT EXISTS `agenda` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`nombre` VARCHAR(30) NOT NULL,
`apellidos` VARCHAR(40) NOT NULL,
`telefono` VARCHAR(9) NOT NULL,
`extension` INT(11) DEFAULT NULL,
`departamento` VARCHAR(15) DEFAULT NULL,
`interno` INT(11) NOT NULL,
`email` VARCHAR(40) DEFAULT NULL,
PRIMARY KEY (`id`)

Leer más…

(1/5) Aplicación de acceso a datos (Introducción)

miércoles, 22 de enero de 2014 10 comentarios

estructEsta entrada y las siguientes, como otras del blog, viene «provocada» por una inquietud o un problema con el que me he encontrado. A raíz de eso y de la necesidad de solventarlo ha surgido esta solución; Seguramente no es la única, y me gustaría que me propusierais otras diferentes (sobre el mismo escenario) si las tenéis. Espero esta que os propongo sea útil a otros programadores en situaciones similares.

Mi intención es dividir todo el proceso (por lo extenso) en varias entradas sucesivas. Os adjunto el «Roadmap» (que suena como muy serio  ;-D ) del proceso completo y a medida que vaya completando los pasos, iré actualizando los links en todas ellas.

“ROADMAP” DE LAS ENTRADAS

Leer más…

Interbase/Firebird Control Center (v 1.0 beta)

viernes, 3 de enero de 2014 5 comentarios

Desde un tiempo acá he vuelto a trabajar con Interbase/Firebird de forma indistinta, por necesidades de trabajo.
Hace unos días, revisando documentación y webs sobre FB, me encontré con la herramienta gratuita, Firebird Control Center de Achim Kalwa.

La podéis encontrar para descarga en su Web (http://www.achim-kalwa.de/fbcc.phtml), junto con una explicación del funcionamiento y algunas notas sobre capacidades, instalación,…
Es una herramienta sencilla (nada sofisticada), pero útil y simple (suficiente en la mayoría de los casos).

Leer más…

Testeando XE2 (aplicación FireMonkey…)

miércoles, 9 de noviembre de 2011 9 comentarios

Hace unas semanas comencé a “trastear» con XE2, con FireMonkey, con los liveBindings, estilos y algunas características más…  Estuve posteando aquí las primeras impresiones y los resultados de esas  primeras pruebas.

En esas entradas he realizado un primer acercamiento a estas tecnologías, he dado un repaso y he testeado por encima algunas de sus características. La idea ahora, es ir un poco más allá.

He leído en algunos foros opiniones sobre que FireMonkey está «a medias» o «incompleto». Respeto esas opiniones, pero personalmente no estoy de acuerdo. Creo (y aquí es donde puede estar el error ) que se compara a FireMonkey con la VCL y las características que posee esta. Desde ese punto de vista sí puede parecer que  «le faltan cosas» y eso puede dar una sensación de que es una tecnología inacabada.

Pienso que el objetivo final de FireMokey no es, llegar a conseguir todas las características con las que cuenta la VCL. Es algo totalmente nuevo que avanza en una dirección paralela, algunas cosas tendrá sentido «adoptarlas» y otras no, pero a mi entender eso es «añadir» no «completar».

Hace tiempo publiqué en el blog un pequeño ejemplo de cómo cargar ficheros  GPX  (alternativa generando KML) procedentes de dispositivos GPS y visualizar esos tracks o rutas en una Aplicación  Delphi. Me he decidido por intentar realizar esta pequeña aplicación utilizando FireMonkey.


TActionList, ¿dónde está?

Lo primero que me he encontrado, aunque en realidad ya lo había visto en las primeras pruebas, es que no puedo utilizar un TActionList.  Este componente no está en la paleta donde debería estar o donde uno esperaría encontrarlo. Una cosa que sorprende es que los componentes estandard de FireMonkey sí poseen la propiedad Action para poder asignar un elemento. No es que sea imprescindible, pero es muy cómodo.

Lo siguiente que me planteo es la importación de datos desde un fichero GPX. En su día la hice utilizando el XMLmapper, pues los ficheros GPX son en realidad ficheros XML. Me propongo utilizar el mismo modelo utilizado anteriormente;  Importar el fichero GPX a un TClientDataset para getionarlo después de forma local.

TXMLTransformProvider, ¿dónde está?

Al igual que me ha pasado anteriormente, coloco un TClientDataset y cuando voy a colocar el TXMLTransformProvider no está donde esperaba encontrarlo.

He realizado un par de pruebas y lo más curioso es que creando y configurando el componente «a mano» funciona perfectamente. Con un código como este y configurando los campos apropiados en diseño el componente funciona perfectamente, importa los datos e incluso se pueden configurar LiveBindings para mostrar el resultado en un Grid.

  XMLTransform := TXMLTransformProvider.Create(nil);
  XMLTransform.TransformRead.TransformationFile :=
    'd:\Ficheros GPX\GPX_To_DP.xtr';
  XMLTransform.XMLDataFile :=
    'd:\Ficheros GPX\Ruta3.gpx';
  ClientDataSet1.SetProvider(XMLTransform);
  ClientDataSet1.Active := True;

Una vez activado el componente la importación se realiza sin problemas.

He dejado de lado esta cuestión por ahora; Tal vez más adelante me detenga para probar más cosas, pero para seguir adelante he realizado la importación de datos «manualmente», de forma que una vez conseguidos los datos en el TClientDataSet y puedo continuar a tratarlos.

El siguiente paso es colocar los elementos en el formulario, tal como van a ir distribuidos. Una cosa a la que hay que acostumbrarse es que los componentes de FireMonkey no poseen la propiedad

Anchors, que tan útil nos es utilizando componentes de la VCL. A cambio podemos ver que la propiedad Align posee una cantidad de valores superior que nos permite realizar más cosas. En este caso utilizamos la propiedad Align y la propiedad Padding para ir fijando los controles al formulario tal y como deseamos.

Se trata de conseguir lo mismo, pero por un camino diferente…

Una vez que los componentes básicos ya están colocados necesito plasmar en pantalla una serie de coordenadas. Para ello he escogido el componente TPath. La idea es que permite representar una serie de puntos que forman una línea o camino.
La potencia y la velocidad llaman la atención, pero también la sencillez.

 

Basta con soltar el componente en pantalla y utilizando la propiedad Data, colocar lo siguiente para conseguir una imagen (o path) como el que veis más abajo (se puede hacer en diseño utilizando un pequeño formulario de edición):

M 0,2 L 1,2 L 1,5 L 2,5 L 2,2 L 3,2 L 1.5 0 L 0,2

Si lo pensáis un poco, no son más que coordenadas precedidas por el tipo de «unión» o «elemento» que queremos utilizar entre ellas; la Primera M se refiere a MOVER, las L se refieren a LINEA.

Es así de sencillo y así de potente.

Un código como este, os podéis imaginar lo que dará como resultado:

for I := -360 to 360 do begin
    n := DegToRad(i);
    res := Sin(n);
    //res := Sin(n) * Sin(n);
    //res := Tan(n);
    if (Str = '') then begin
      Str := 'M ' + FloatToStrF(n, ffFixed, 35, 10) +
              ' ' + FloatToStrF(res, ffFixed, 35, 10);
    end
    else begin
      Str := Str + ',' + 'L ' + FloatToStrF(n, ffFixed, 35, 10) +
             ' ' + FloatToStrF(res, ffFixed, 35, 10);
    end;
  end;
  Path1.Data.Data := Str;

Con esto más o menos ya está todo completo. Los componente básicos ya están escogidos.

He utilizado LiveBindings para poder mostrar los datos en de las coordenadas en un TStringGrid; También he aplicado un estilo visual a la aplicación y por último una par de animaciones para dar más vistosidad a la visualización del track.

La conclusión que saco, es que  sí se pueden hacer aplicaciones con FireMonkey, lo que pasa que tal vez en algunos aspectos debamos pensar las cosas con otro enfoque o hacerlas de otra manera. Seguramente está en los planes de Embarcadero (eso espero) ampliar sus funcionalidades y el número de componentes.

Por último comentar que me he quedado con la ganas de poder compilar la aplicación y generarla para iOS, pero por ahora, no dispongo de los medios para hacerlo. Sobre todo me queda la duda de qué hubiera pasado con una aplicación, de un programador como yo con «visión de Windows», al compilarla en MAC.

¿Algun error? ¿Algun problema? ¿Warinigs? ¿Algun elemento que no puedo utilizar?  ¿?¿?¿?

Si alguien se anima a hacerlo, le agradecería que nos comunicara el resultado y me enviara alguna pantallita.   ;-)

Os dejo los enlaces al código fuente y al ejecutable (este último comprimido con UPX) junto con algunos ficheros GPX que podéis usar para las pruebas.

<Descargar el código fuente>

<Descargar binario – EXE>

[wpfilebase tag=file id=1 /]

[wpfilebase tag=file id=2 /]

NOTA: Acabo de corregir un par de errores en el código y añadida la DLL (midas.dll) porque quien no la tenga no podrá ejecutar la demo (gracias Rafa).

Como siempre los comentarios, sugerencias, críticas y demás son bienvenidos.

Un saludo y hasta la próxima.

Categories: Aplicación, Delphi, FireMonkey, XE2 Tags: ,

TrackInfo pasa a ser IBPIndex (v.1.5b)

jueves, 30 de junio de 2011 4 comentarios

images

Ya hace un tiempo que publiqué la aplicación Trackinfo, dedicada a trabajar con tracks y rutas procedentes de dispositivos GPS. Entre las cosas que hace, está la de mostrar el índice IBP de las rutas con las que trabajamos.

 

¿Qué es el IBPIndex?

Pues el índice IPB, es un valor que se genera a partir de los datos del Track/Ruta (enfocado a  bicicleta de montaña o carretera) y que “valora” la dificultad de esa ruta. Para ello calcula infinidad de datos de la ruta (velocidades, tiempos, alturas, porcentajes de desnivel,…) y a partir de ellos genera un índice; Ese es el IBPIndex de la ruta.

Si queréis leer más sobre la descripción del IBPIndex, o sobre el proceso de cálculo, podéis consultar estos links.

La web de IBPIndex ya cuenta con algunos años de historia, y hace poco han llegado a los 500.000 track analizados (¡¡que se dice pronto!!). Es muy conocida en los foros y ambientes de ciclismo.

 

¿Porqué este cambio?sample_IBP

Bueno, como ya os he dicho, la aplicación hace uso de la Web IBPIndex (además de otras cosas), que es la que realmente calcula el índice. La aplicación es gratuita y a la gente de IBPIndex les ha gustado y me han propuesto, que la aplicación “pase a formar parte de la web” (por decirlo así).

Así que a partir de la próxima versión (1.5b –que estará disponible en breve-) el cambio será efectivo. A partir de ahora podéis encontrar nuevas versiones y seguir las novedades desde la web de IBPIndex o desde aquí mismo:

http://www.ibpIndex.com
http://neftali.clubdelphi.com/IBPIndex

 

Como siempre, se admiten sugerencias, comentarios, críticas,… y además sabéis que siempre son bienvenidas.

Si alguien está interesado en colaborar en el proyecto de alguna forma, también puede contactar conmigo (traducciones, código,…)

informatica_1

;-D

 

Un saludo.

Categories: Aplicación, Programación Tags: , , ,