Embarcadero MVP.
Analista y Programador de Sistemas Informáticos.
Estudios de Informática (Ingeniería Técnica Superior) en la UPC (Universidad Politécnica de Barcelona).
Llevo utilizando Delphi desde su versión 3. Especialista en diseño de componentes, Bases de Datos, Frameworks de Persistencia, Integración Continua, Desarrollo móvil,…
Hace bastante tiempo (cuando estábamos en la facultad) con mis amigos, nos acostumbramos a visitar la web de “la foto del día”. Había y sigue habiendo webs de muchas temáticas, pero una de las más conocidas en aquella época era la de la NASA. Las fotos de este tipo que hoy son más habituales, entonces era difícil encontrarlas (con aquella calidad).
Actualmente la URL para acceder a “la foto del día” es esta.
Embarcadero MVP.
Analista y Programador de Sistemas Informáticos.
Estudios de Informática (Ingeniería Técnica Superior) en la UPC (Universidad Politécnica de Barcelona).
Llevo utilizando Delphi desde su versión 3. Especialista en diseño de componentes, Bases de Datos, Frameworks de Persistencia, Integración Continua, Desarrollo móvil,…
Pues eso, tal y como reza el título, yo ya tengo el mío. :-D
No hace muchos días, de la mano de Danysoft (partner oficial de Embarcadero en España), se publicó el último libro de Francisco Charte; «Programación de aplicaciones Delphi con acceso a Bases de Datos». Pues ayer ya llegó mi copia.
No puedo opiniar todavía en profundidad, pues apenas lo he ojeado por encima, pero la verdad es que tiene una pinta fantástica.
Está centrado en la librería de acceso a datos que viene actualmente con las versiones de delphi, FireDAC y que nos da acceso multiplataforma a las Bases de Datos más utilizadas en el mercado. Más que las explicaciones que yo pueda dar, os recomiendo que reviséis el índice completo del libro que se puede descargar en PDF desde aquí.
Personalmente me han llamado la atención algunos puntos, pero que supongo que a vosotros os pueden interesar muchos otros de los que se tratan:
Aplicaciones con Interbase embebido
Bases de Datos en memoria con FireDAC
Bases de Datos y Unicode
Servicios REST
Todo lo refrente a multiplataforma
Configuración de FireDAC
Personalmente no he trabajado casi nada con FireDAC (en lo que se refiere a proyectos «en serio») así que aunque imagino que en su mayor parte se utilizan de forma similar a otras librerías de acceso a datos, siempre está bien tener un punto de referencia para llegar un poco más allá y profundizar un poco.
Si alguien tiene opiniones y comentarios sobre el libro y desea expresarlos, pues sois libres de participar y dar vuestra opinión aquí.
Embarcadero MVP.
Analista y Programador de Sistemas Informáticos.
Estudios de Informática (Ingeniería Técnica Superior) en la UPC (Universidad Politécnica de Barcelona).
Llevo utilizando Delphi desde su versión 3. Especialista en diseño de componentes, Bases de Datos, Frameworks de Persistencia, Integración Continua, Desarrollo móvil,…
Para complementar la entrada anterior (Hablando del tiempo… (OpenWeatherMap) 1/2) y «acabarla» me queda publicar el desarrollo móvil correspondiente a la aplicación que vimos anteriormente.
Como ya os comenté en la entrada anterior, el código a utilizar es prácticamente el mismo que hemos utilizado en las aplicaciones para windows (VCL). La mayor diferencia que me he encontrado en el tratamiento de la respuesta JSON que obtenemos del servidor.
Para versiones antiguas de Delphi, podéis utilizar si lo necesitáis la misma librería que ya he recomendado aquí otras veces. Se trata de lkJSON que podéis encontrar en Sourceforge.
En las nuevas versiones de Delphi ya está disponible la unit System.JSON, con lo necesario para no utilizar librerías externas.
function TForm1.ParseTiempoCiudadesHist(AObjResp: TlkJSONobject;var ATiempoProxHoras: TTiempoProxHoras):Boolean;var
i, j, num, index:integer;
oHorasList, OWList:TlkJSONlist;
oHora, oCoord, oMain, oWind, oWeather:TlkJSONobject;
Str:String;begin// ini
Result :=False;// Si no está asignado salimos..ifnotAssigned(AobjResp)thenbegin
Exit;end;// Si hay error no parseamosif IsErrorResponse(AObjResp, errCode, ErrMsg)thenbegin
Exit;end;// proteccion para el parseotry// cod. devuelto (datos principales
ATiempoProxHoras.Cod:= errCode;
num := AObjResp.IndexOfName('count');if(num <>-1)thenbegin
num := GetAsInteger(AObjResp.Field['count'].Value);end;// si no hay ciudadesif(num =0)thenbegin
MessageDlg('No hay ninguna ciudad que coincida con ese código [nombre,pais].', mtWarning,[mbOK],0);
Exit;end;// Lista de horas (Lista)
TlkJSONBase(oHorasList):= AObjResp.Field['list'];// array de elementosSetLength(ATiempoProxHoras.TiempoHora, oHorasList.Count);// Quedarse con el primier elemento de la lista...for i :=0to(oHorasList.Count-1)dobegin// datos de la primera ciudad
TlkJSONBase(oHora):= oHorasList.Child[i];// datos básicos
ATiempoProxHoras.TiempoHora[i].dt_text:= GetAsString(oHora.Field['dt_txt'].Value);// convertir fecha-Hora
Str := ATiempoProxHoras.TiempoHora[i].dt_text;
ATiempoProxHoras.TiempoHora[i].dt:= EncodeDateTime(StrToIntdef(Copy(Str,1,4),0),StrToIntdef(Copy(Str,6,2),0),StrToIntdef(Copy(Str,9,2),0),StrToIntdef(Copy(Str,12,2),0),StrToIntdef(Copy(Str,15,2),0),StrToIntdef(Copy(Str,18,2),0),0);// Load Main
TlkJSONBase(oMain):= oHora.Field['main'];
ATiempoProxHoras.TiempoHora[i].Main.temp:= GetAsFloat(oMain.Field['temp'].Value);
ATiempoProxHoras.TiempoHora[i].Main.tempmin:= GetAsFloat(oMain.Field['temp_min'].Value);
ATiempoProxHoras.TiempoHora[i].Main.tempmax:= GetAsFloat(oMain.Field['temp_max'].Value);
ATiempoProxHoras.TiempoHora[i].Main.pressure:= GetAsFloat(oMain.Field['pressure'].Value);
ATiempoProxHoras.TiempoHora[i].Main.humidity:= GetAsInteger(oMain.Field['humidity'].Value);// Load weather
TlkJSONBase(OWList):= oHora.Field['weather'];
TlkJSONBase(oWeather):= oWList.Child[0];
ATiempoProxHoras.TiempoHora[i].Weather.id:= GetAsInteger(oWeather.Field['id'].Value);
ATiempoProxHoras.TiempoHora[i].Weather.main:= GetAsString(oWeather.Field['main'].Value);
ATiempoProxHoras.TiempoHora[i].Weather.desc:= GetAsString(oWeather.Field['description'].Value);
ATiempoProxHoras.TiempoHora[i].Weather.icon:= GetAsString(oWeather.Field['icon'].Value);end;
Result :=True;except// si hay error, FALSe
Result :=False;end;end;
function TForm1.ParseTiempoCiudadesHist(AObjResp: TlkJSONobject; var ATiempoProxHoras: TTiempoProxHoras): Boolean;
var
i, j, num, index:integer;
oHorasList, OWList:TlkJSONlist;
oHora, oCoord, oMain, oWind, oWeather:TlkJSONobject;
Str:String;
begin
// ini
Result := False;
// Si no está asignado salimos..
if not Assigned(AobjResp) then begin
Exit;
end;
// Si hay error no parseamos
if IsErrorResponse(AObjResp, errCode, ErrMsg) then begin
Exit;
end;
// proteccion para el parseo
try
// cod. devuelto (datos principales
ATiempoProxHoras.Cod := errCode;
num := AObjResp.IndexOfName('count');
if (num <> -1) then begin
num := GetAsInteger(AObjResp.Field['count'].Value);
end;
// si no hay ciudades
if (num = 0) then begin
MessageDlg('No hay ninguna ciudad que coincida con ese código [nombre,pais].', mtWarning, [mbOK], 0);
Exit;
end;
// Lista de horas (Lista)
TlkJSONBase(oHorasList) := AObjResp.Field['list'];
// array de elementos
SetLength(ATiempoProxHoras.TiempoHora, oHorasList.Count);
// Quedarse con el primier elemento de la lista...
for i := 0 to (oHorasList.Count - 1) do begin
// datos de la primera ciudad
TlkJSONBase(oHora) := oHorasList.Child[i];
// datos básicos
ATiempoProxHoras.TiempoHora[i].dt_text := GetAsString(oHora.Field['dt_txt'].Value);
// convertir fecha-Hora
Str := ATiempoProxHoras.TiempoHora[i].dt_text;
ATiempoProxHoras.TiempoHora[i].dt := EncodeDateTime(
StrToIntdef(Copy(Str, 1, 4), 0),
StrToIntdef(Copy(Str, 6, 2), 0),
StrToIntdef(Copy(Str, 9, 2), 0),
StrToIntdef(Copy(Str, 12, 2), 0),
StrToIntdef(Copy(Str, 15, 2), 0),
StrToIntdef(Copy(Str, 18, 2), 0), 0);
// Load Main
TlkJSONBase(oMain) := oHora.Field['main'];
ATiempoProxHoras.TiempoHora[i].Main.temp := GetAsFloat(oMain.Field['temp'].Value);
ATiempoProxHoras.TiempoHora[i].Main.tempmin := GetAsFloat(oMain.Field['temp_min'].Value);
ATiempoProxHoras.TiempoHora[i].Main.tempmax := GetAsFloat(oMain.Field['temp_max'].Value);
ATiempoProxHoras.TiempoHora[i].Main.pressure := GetAsFloat(oMain.Field['pressure'].Value);
ATiempoProxHoras.TiempoHora[i].Main.humidity := GetAsInteger(oMain.Field['humidity'].Value);
// Load weather
TlkJSONBase(OWList) := oHora.Field['weather'];
TlkJSONBase(oWeather) := oWList.Child[0];
ATiempoProxHoras.TiempoHora[i].Weather.id := GetAsInteger(oWeather.Field['id'].Value);
ATiempoProxHoras.TiempoHora[i].Weather.main := GetAsString(oWeather.Field['main'].Value);
ATiempoProxHoras.TiempoHora[i].Weather.desc := GetAsString(oWeather.Field['description'].Value);
ATiempoProxHoras.TiempoHora[i].Weather.icon := GetAsString(oWeather.Field['icon'].Value);
end;
Result := True;
except
// si hay error, FALSe
Result := False;
end;
end;
Embarcadero MVP.
Analista y Programador de Sistemas Informáticos.
Estudios de Informática (Ingeniería Técnica Superior) en la UPC (Universidad Politécnica de Barcelona).
Llevo utilizando Delphi desde su versión 3. Especialista en diseño de componentes, Bases de Datos, Frameworks de Persistencia, Integración Continua, Desarrollo móvil,…
Vale la pena revisarlas, porque algunas son muy interesantes. Hay un poco de todo, de carácter general, técnicas, algunas más “offtopic” y otras referentes a partners y componentes comerciales.
Embarcadero MVP.
Analista y Programador de Sistemas Informáticos.
Estudios de Informática (Ingeniería Técnica Superior) en la UPC (Universidad Politécnica de Barcelona).
Llevo utilizando Delphi desde su versión 3. Especialista en diseño de componentes, Bases de Datos, Frameworks de Persistencia, Integración Continua, Desarrollo móvil,…
El próximo mes de Febrero se celebra el 20 aniversario de Delphi, concretamente el 14 de Febrero (no haré comentarios cursis sobre temas “románticos”, dado el día ;-D ).
Se celebra además a lo grande!
Desde el 9 al 13 de Febrero se celebrará la “#DelphiWeek”. Sesiones online donde se realizarán diferentes eventos; Según la agenda podremos disfrutar de:
Entrevistas
“Code Battles”. Batallas de código
Delphi Games
Funside of Delphi
Virtual Office Tours
Day in the Life survey
Global celebration of all things Delphi
Supongo que durante los próximos días iremos conociendo más detalles de los diferentes eventos.
Embarcadero MVP.
Analista y Programador de Sistemas Informáticos.
Estudios de Informática (Ingeniería Técnica Superior) en la UPC (Universidad Politécnica de Barcelona).
Llevo utilizando Delphi desde su versión 3. Especialista en diseño de componentes, Bases de Datos, Frameworks de Persistencia, Integración Continua, Desarrollo móvil,…
Antes de nada, Feliz Año Nuevo a los que visitáis este Blog. Espero que este año 2015 sea mucho mejor que el anterior.
Quiero empezar este año nuevo con una buena noticia (o al menos a mi me lo parece) y es la que reza en el título de la entrada.
No se si muchos de vosotros conocéis Blaize Pascal Magazine. Se trata de una revista que se publica bajo suscripción ya hace unos años y que trata todos los temas y entornos relacionados con Object Pascal. Delphi, Lazarus, Oxygene, FreePascal,…
Desde hace un tiempo se está haciendo un esfuerzo (y me consta por la persona que lo lleva) por parte de la revista para poder publicarla de forma asidua es castellano. Prueba de ellos son los primeros números (1, 2 y 3) que corresponden a las publicaciones en inglés (30, 31 y 32) que ya han visto la luz en nuestro idioma. En este sentido os recomiendo leer la Editorial de los números 2 y 3 donde están las líneas maestra de lo que pretenden los editores de la revista.
Todas ellas se han publicado completas en castellano de forma gratuita.
Creo que es una buena noticia para la comunidad hispana de Delphi. No son muchas las publicaciones y libros de los que disponemos en nuestro idioma y el hecho de que se amplíe ese abanico siempre es bueno.
Veremos si la gente se anima y el proyecto sigue adelante.
Embarcadero MVP.
Analista y Programador de Sistemas Informáticos.
Estudios de Informática (Ingeniería Técnica Superior) en la UPC (Universidad Politécnica de Barcelona).
Llevo utilizando Delphi desde su versión 3. Especialista en diseño de componentes, Bases de Datos, Frameworks de Persistencia, Integración Continua, Desarrollo móvil,…
Desde aquí mi enhorabuena al grupo de facebook, Delphi Solidario.
Originalmente empezó como un proyecto personal de Salvador Jover (Delphi Basico), pero ha transcendido de una iniciativa puntual a ser un referente para muchos usuarios. En concreto para 888 que actualmente son los miembros con los que cuenta.
Creo que esa cifra merece este referencia. ;-)
Un saludo.
NOTA: Acabo de dejar la entrada anticuada, pues al finalizarla acabo de dar de alta al usuario 889.
Embarcadero MVP.
Analista y Programador de Sistemas Informáticos.
Estudios de Informática (Ingeniería Técnica Superior) en la UPC (Universidad Politécnica de Barcelona).
Llevo utilizando Delphi desde su versión 3. Especialista en diseño de componentes, Bases de Datos, Frameworks de Persistencia, Integración Continua, Desarrollo móvil,…
El tema de Tethering, del que ya he hablado antes en el blog (Tethering, operaciones básicas), se incorporó a la versión XE6 de RAD Studio. Hasta ese momento podíamos utilizar esta característica para conectar aplicaciones y dispositivos utilizando Wifi.
Para esta nueva versión XE7 se a añadido la posibilidad de conexión mediante Bluetooth.
Además, a las características ya existentes de conexión wifi, se han añadido opciones para poder filtrar o discriminar los dispositivos a los que nos vamos a conectar a partir de máscaras para la IP o para la subred.
Como ya he comentado anteriormente, el Tethering es una característica que podemos utilizar (aunque se haya introducido en las últimas versiones de Delphi) no sólo en aplicaciones FireMonkey (tanto móviles como de escritorio) sino también, en aplicaciones ”antiguas” diseñadas con la VCL.
INTRODUCCIÓN
La idea de esta entrada es repasar más ampliamente en las características de Tethering, de las que ya hablé anteriormente, y profundizar en las posibilidades de esta tecnología, utilizando un proyecto más complejo y completo que el que vimos en la introducción.
Para ello utilizaremos 2 aplicaciones diferentes. Una basada en la VCL y otra desarrollada con Firemonkey para dispositivos móviles.
Embarcadero MVP.
Analista y Programador de Sistemas Informáticos.
Estudios de Informática (Ingeniería Técnica Superior) en la UPC (Universidad Politécnica de Barcelona).
Llevo utilizando Delphi desde su versión 3. Especialista en diseño de componentes, Bases de Datos, Frameworks de Persistencia, Integración Continua, Desarrollo móvil,…
Hace unos días en la presentación en Barcelona del nuevo XE7 ya pudimos ver algunos ejemplares recién salidos de la imprenta, aun cuando todavía no se había realizado el anuncio oficial por parte de Danysoft.
A los pocos días ya estaba disponible para su compra.
Pues tal y como reza el título, yo ya tengo el mío! ;-)
Personalmente creo que es un libro/manual indispensable para todos aquellos que empiecen a trabajar con alguna de las últimas versiones de Delphi y estén pensando en introducirse en el mundo del desarrollo móvil.
En los últimos años y con la publicación de las últimas versiones de Delphi (RADStudio), una de las grandes «solicitudes» que hemos hecho a embarcadero desde la comunidad de usuarios es que mejoren la documentación.
Las cosas cambian, antiguamente teníamos la ayuda (F1) y el manual que venía con el producto. Actualmente seguimos teniendo la ayuda (F1), pero también muchas otras fuentes de información «nuevas»; Tenemos la DocWiki, los canales de EmbarcaderoTech en youtube, bastantes Blogs de MVP donde se publican ejemplos y vídeos, los repositorios de código, facebook, twitter,… pero muchos de nosotros seguimos echando en falta un manual. Si, un manual de los de «papel»; De esos que puedes ojear y leer tranquilamente cuando te sientas un rato (sin un ordenador delante).
Este manual viene a cubrir justo ese hueco y por eso creo que es un complemento perfecto a toda la información que nos aporta la web.
No me voy a extender en el contenido, ya que la mejor manera de conocerlo es consultar el índice, aunque en general me parece bastante acertado.
Os dejo el link de la página de Danysoft, distribuidor oficial en la península de Embarcadero y los responsables de que podamos disponer de este libro en castellano (recalco esto, porque me parece un lujo). Ahí podéis leer, como he dicho, el índice completo de contenidos, leer la descripción completa y solicitarlo/comprarlo entre otras cosas.
Os adjunto un par de fotos, tal cual me llegó ayer. Reconozco que todavía no lo he empezado a leerlo, sólo «ojeado», aunque la firma de Charte ya es una garantía.
Embarcadero MVP.
Analista y Programador de Sistemas Informáticos.
Estudios de Informática (Ingeniería Técnica Superior) en la UPC (Universidad Politécnica de Barcelona).
Llevo utilizando Delphi desde su versión 3. Especialista en diseño de componentes, Bases de Datos, Frameworks de Persistencia, Integración Continua, Desarrollo móvil,…