HTC Dream, jugando con Android

August 11, 2009 by Roger Carhuatocto

Por fin tengo un móvil ANDROID, después de unas horas de trasteo, lo he desbloqueado, le he actualizado la firmaware, la radio y ya estoy trabajando con el Android SDK desde Eclipse.

Alba y el Android

Alba y el Android

Mi primera impresión es que como entorno de desarrollo, Google Android es equiparable a entornos de Microsoft, iPhone y Nokia.

Hay algunas cosas que mejorar, pero eso es cuestión de tiempo y cuestión de que los usuarios-técnicos conozcan esta plataforma.

Desde el punto de vista de usuario final, el teléfono/GPS/GPRS/3G/2G/WIFI/Bluetooth es muy completo. La batería se agota con un uso intensivo de WIFI, BT, 3G, esto es normal.

Por otro lado, he tenido que actualizar el S.O. de la versión 1.1 que Movistar tiene por defecto a la versión 1.5 (Cupcake) ya que sin esto no podría sincronizar Google App (mi dominio @acme) con el móvil (Contacts y Calendar).

De todas maneras, si el dispositivo no tiene la aplicación que necesitas, puedes descargarla gratis o comprarla (desde 1 a 10 euros) desde Android Market.

La abundancia de aplicaciones estriba en la facilidad para desarrollarlas (son aplicaciones Java), existe un SDK, emulador, debugger, acceso a Shell, acceso en modo root si lo necesitas, etc.

Actualmente estoy trabajando con cuestiones de firma digital (autenticación/validación/creación de firma de certificados X.509 desde Browser de Android), en ningún momento siento que estoy trabajando con el móvil. Ya os iré comentando de mis avances.

Os dejo con mi configuración y algunos links.

Liberación de terminal:

http://androidapps.es/2009/08/08/como-liberar-nuestros-terminales-android/

S.O./ROM/Firmware:

- AndroidApps v1.0 (Basada en la versión 3.6.5 de la ROM CyanogenMod)

A su vez, CyanogenMod está basada en la oficial Android Cupcake (versión 1.5), se mejora la estabilidad, tiene agregado el teclado de HTC (HTC_IME), APNs (Las tres grandes estan, las OMVs sin confirmar) y otras apps: Teeter, Quickoffice, SpareParts, Superuser y Terminal Emulator.

Radio:

http://member.america.htc.com/download/RomCode/ADP/ota-radio-2_22_19_26I.zip

Recovery Boot:

http://android.smartphonefrance.info/download/recoveryBoot.rar

Agur!

Alfresco ECM, una plataforma de gestión de contenidos

August 7, 2009 by Roger Carhuatocto

Mi primer contacto con Alfresco fue en el 2004, fue un compañero de batallas que me lo recomendó de mi ex centro de trabajo, al ver que era una solución versátil de gestión de contenidos web y que estaba alineado a la filosofía FOSS, pues se convirtió en nuestra herramienta de facto para todos nuestros proyectos. Aunque la curva de aprendizaje era muy pronunciada, a nivel comercial se vendian muchos proyectos, evidentemente acompañado de un preventa. Es así, que la empresa donde trabajaba se convirtió en referencia en Cataluña.

La barrera de entrada a este negocio es muy baja, actualmente, hay muchos players, pequeñas integradoras open source, medianos y grandes integradores, hay firmas especializadas en formación de Alfresco, también competidores de Alfresco, en fin, la tendencia de que Alfresco sea una “commodity” se acentúa, ante ello, Alfresco ECM ha evolucionado.

Soluciones verticales con Alfresco

Soluciones verticales con Alfresco

Creo que una estrategia comercial en donde haya mucha formación-consultoría especializada permitirá hacer más negocio, creo que es simple, hay que capitalizar estas nuevas funcionalidades. Por ejemplo, he participado en junio y julio del 2009 en varios proyectos con Alfresco a través de formación-consultoría especializada, esto también lo podría hacer una consultora-integradora. Como indico, únicamente hay que capitalizar estas nuevas funcionalidades: Alfresco Surf, Share, Studio, Implementación de Sharepoint Protocol, framework de desarrollo al que llaman WebScripts (FreeMarker/JSON, RESTful, JavaScript), uso de Flex para RIA, CMIS para interoperabilidad, etc.

Alfresco no sólo es un WCM/CMS clásico, es una plataforma donde se puede construir aplicaciones verticales pero siempre alrededor del “contenido” (en su máximo significado: asset?).

En fin, nos espera un restorno de vacaciones con muchas “movidas”.

Saludos!.

La Ley de Parkinson

July 15, 2008 by Roger Carhuatocto

Interesante reflexión y tan obvia que muchos de nosotros la ignoramos.

Leyendo el blog de Didac Lee, encontré este post (dialogo) que habla sobre el poco tiempo que tenemos y del cual nos quejamos. En el fondo es que no tenemos claro nuestras prioridades y no sabemos delegar.

Os invito a leerlo: ¿Te falta tiempo? ¿o es que no tienes claras tus prioridades? :-)

Defeat Parkinsons Law!

Defeat Parkinson's Law!

Esto es en cierta forma “normal”, considerando como normal cualquier comportamiento pensado o no por un ser humano. La Ley de Parkinson explica este comportamiento “normal”.

Las tres leyes fundamentales de Parkinson son:
1º. “El trabajo crece hasta llenar el tiempo de que se dispone para su realización”.
2º. “Los gastos aumentan hasta cubrir todos los ingresos”.
3º. “El tiempo dedicado a cualquier tema de la agenda es inversamente proporcional a su importancia”.

Estas tres leyes, al igual que otras que Parkinson formuló, como la ley de la dilación o el arte de perder el tiempo y la ley de la ocupación de los espacios vacíos: por mucho espacio que haya en una oficina siempre hará falta, son leyes extraídas de la experiencia cotidiana, mediante las cuales, al tiempo que se describe o pone de manifiesto una determinada realidad, se denuncia la falta de eficiencia del trabajo administrativo. [De Wikipedia]

Por otro lado, para los que conocen el PMBOK (Project Management body of Knowledge),

La Ley de Parkinson también sirve como referencia a la hora de valorar/estimar esfuerzos en las tareas de un proyecto, interpretádola y llevándola a PM significa que si le asignamos a un recurso una cantidad de tiempo para realizar un cierto trabajo, terminará utilizando todo el tiempo del que dispone, independientemente de si necesitaba o no todo ese tiempo para realizarlo.

Hay que tenerlo muy presente. :)

Adeu!.

My first UMPC, The XO-1 OLPC

July 1, 2008 by Roger Carhuatocto

Yes, I could get a XO-1 and am very impressed by the quality Ultra mobile PC (UMPC).

My XO-1 OLPC

XO-1 is well thought out in every way:

  • Is secure, the Bitfrost approach gives a holistic security, from delivery of PC, first boot, authentication for childs, etc.
  • Is usable, with Sugar all software applications (aka Activities) does easy to learn.
  • Is mobile, has mesh wireless support, is no necessary get internet because its mobile ad-hoc networking is used to allow many machines to share Internet access from one connection. It has low-power consumption.
  • Is Freee/Open Source device, inclusive the Firmware/Bios is FOS, except the WIFI driver for mesh purposes.

The specs of my XO-1 are:

  • CPU: 433 MHz AMD Geode LX-700 at 0.8 watts, with integrated graphics controller
  • Display dual-mode 19.1 cm/7.5″ diagonal TFT LCD 1200×900 (200 dpi).
  • 256 MB of Dual (DDR266) 133 MHz DRAM.
  • 1024 kB (1 MB) flash ROM with open-source Open Firmware.
  • 1024 MB of SLC NAND flash memory.
  • Operating system: Fedora-based (Linux)
  • Connectivity: 802.11b/g /s wireless LAN, 3 USB 2.0 ports and MMC/SD card slot
  • Input: Keyboard (water proof), Touchpad, Microphone, built-in video Camera (640×480; 30 FPS)
  • Weight: LiFeP battery: 1.45 kg [3.2 pounds]; NiMH battery: 1.58 kg [3.5 pounds]

There are some things that should improve, for example:

  • There is not a Video-out port
  • Sound card is of poor quality
  • The touch-pad has a pointer jumper, this is a bug reported

Whatever, the XO-1’s are fine for the purposes they were designed, for the childs and learning.

I hope to continue my research and soon I will post other comment about of XO-1 overclocking and hacking.

Ah, the booting of my XO-1 took 80 seconds aprox. You can see it in this video:

Regards!

La Evolución de un Programador

June 18, 2008 by Roger Carhuatocto

En el año 2001, en un foro encontré un post bastante divertido, se trataba de la Evolución de un Programador y cómo éste evolucionaba también el clásico programa llamado Hola Mundo.

HTML coder

Para los no informáticos, Hola Mundo es el primer programa que realiza cualquier informático que inicia en esta profesión.

Con la Evolución de un Programador podéis ver quienes son los mejores programadores.

Big programmer

En fin, os dejo con la evolución del Hola Mundo, espero que algunos Managers, Comerciales no se ofendan. ;)

Task is to write a program that prints “Hello World” on the
screen…make sure you see the last few attempts (Dilbert).

High School/Jr.High
==================

10 PRINT “HELLO WORLD”
20 END

First year in College
====================
program Hello(input, output)
begin
writeln(‘Hello World’)
end.

Senior year in College
=====================
(defun hello
(print
(cons ‘Hello (list ‘World))))

New professional
===============
#include

void main(void)
{
char *message[] = {“Hello “, “World”};
int i;

for(i = 0; i < 2; ++i)
printf(“%s”, message[i]);
printf(“\n”);
}

Seasoned professional
====================
#include
#include

class string
{
private:
int size;
char *ptr;

public:
string() : size(0), ptr(new char(”)) {}

string(const string &s) : size(s.size)
{
ptr = new char[size + 1];
strcpy(ptr, s.ptr);
}

~string()
{
delete [] ptr;
}

friend ostream &operator <<(ostream &, const string &);

string &operator=(const char *);
};

ostream &operator<<(ostream &stream, const string &s)
{
return(stream << s.ptr);
}

string &string::operator=(const char *chrs)
{
if (this != &chrs)
{
delete [] ptr;
size = strlen(chrs);
ptr = new char[size + 1];
strcpy(ptr, chrs);
}
return(*this);
}

int main()
{
string str;

str = “Hello World”;
cout << str << endl;

return(0);
}

Master Programmer :-) )
================
[
uuid(2573F8F4-CFEE-101A-9A9F-00AA00342820)
]

library LHello
{
// bring in the master library
importlib(“actimp.tlb”);
importlib(“actexp.tlb”);

// bring in my interfaces
#include “pshlo.idl”

[
uuid(2573F8F5-CFEE-101A-9A9F-00AA00342820)
]
cotype THello
{
interface IHello;
interface IPersistFile;
};
};

[
exe,
uuid(2573F890-CFEE-101A-9A9F-00AA00342820)
]
module CHelloLib
{
// some code related header files
importheader();
importheader( );
importheader();
importheader(“pshlo.h”);
importheader(“shlo.hxx”);
importheader(“mycls.hxx”);

// needed typelibs
importlib(“actimp.tlb”);
importlib(“actexp.tlb”);
importlib(“thlo.tlb”);

[
uuid(2573F891-CFEE-101A-9A9F-00AA00342820),
aggregatable
]
coclass CHello
{
cotype THello;
};
};

#include “ipfix.hxx”

extern HANDLE hEvent;

class CHello : public CHelloBase
{
public:
IPFIX(CLSID_CHello);

CHello(IUnknown *pUnk);
~CHello();

HRESULT __stdcall PrintSz(LPWSTR pwszString);

private:
static int cObjRef;
};

#include
#include
#include
#include
#include “thlo.h”
#include “pshlo.h”
#include “shlo.hxx”
#include “mycls.hxx”

int CHello::cObjRef = 0;

CHello::CHello(IUnknown *pUnk) : CHelloBase(pUnk)
{
cObjRef++;
return;
}

HRESULT __stdcall CHello::PrintSz(LPWSTR pwszString)
{
printf(“%ws\n”, pwszString);
return(ResultFromScode(S_OK));
}

CHello::~CHello(void)
{
// when the object count goes to zero, stop the server
cObjRef–;
if( cObjRef == 0 )
PulseEvent(hEvent);

return;
}

#include
#include
#include “pshlo.h”
#include “shlo.hxx”
#include “mycls.hxx”

HANDLE hEvent;

int _cdecl main( int argc, char * argv[])
{
ULONG ulRef;
DWORD dwRegistration;
CHelloCF *pCF = new CHelloCF();

hEvent = CreateEvent(NULL, FALSE, FALSE, NULL);

// Initialize the OLE libraries
CoInitializeEx(NULL, COINIT_MULTITHREADED);
CoRegisterClassObject(CLSID_CHello, pCF, CLSCTX_LOCAL_SERVER,
REGCLS_MULTIPLEUSE, &dwRegistration);

// wait on an event to stop
WaitForSingleObject(hEvent, INFINITE);

// revoke and release the class object
CoRevokeClassObject(dwRegistration);
ulRef = pCF-Release();

// Tell OLE we are going away.
CoUninitialize();

return(0);
}

extern CLSID CLSID_CHello;
extern UUID LIBID_CHelloLib;

CLSID CLSID_CHello = { /* 2573F891-CFEE-101A-9A9F-00AA00342820 */
0×2573F891,
0xCFEE,
0×101A,
{ 0×9A, 0×9F, 0×00, 0xAA, 0×00, 0×34, 0×28, 0×20 }
};

UUID LIBID_CHelloLib = { /* 2573F890-CFEE-101A-9A9F-00AA00342820 */
0×2573F890,
0xCFEE,
0×101A,
{ 0×9A, 0×9F, 0×00, 0xAA, 0×00, 0×34, 0×28, 0×20 }
};

#include
#include
#include
#include
#include
#include “pshlo.h”
#include “shlo.hxx”
#include “clsid.h”

int _cdecl main( int argc, char * argv[])
{
HRESULT hRslt;
IHello *pHello;
ULONG ulCnt;
IMoniker * pmk;
WCHAR wcsT[_MAX_PATH];
WCHAR wcsPath[2 * _MAX_PATH];

// get object path
wcsPath[0] = ”;
wcsT[0] = ”;
if( argc 1) {
mbstowcs(wcsPath, argv[1], strlen(argv[1]) + 1);
wcsupr(wcsPath);
}
else {
fprintf(stderr, “Object path must be specified\n”);
return(1);
}

// get print string
if(argc 2)
mbstowcs(wcsT, argv[2], strlen(argv[2]) + 1);
else
wcscpy(wcsT, L”Hello World”);

printf(“Linking to object %ws\n”, wcsPath);
printf(“Text String %ws\n”, wcsT);

// Initialize the OLE libraries
hRslt = CoInitializeEx(NULL, COINIT_MULTITHREADED);
if(SUCCEEDED(hRslt)) {
hRslt = CreateFileMoniker(wcsPath, &pmk);
if(SUCCEEDED(hRslt)
hRslt = BindMoniker(pmk, 0, IID_IHello, (void **)&pHello);
if(SUCCEEDED(hRslt)) {
// print a string out
pHello- PrintSz(wcsT);

Sleep(2000);
ulCnt = pHello- Release();
}
else
printf(“Failure to connect, status: %lx”, hRslt);
// Tell OLE we are going away.
CoUninitialize();
}

return(0);
}

Apprentice Hacker
==================
#!/usr/local/bin/perl
$msg=”Hello, world.\n”;
if ($#ARGV = 0) {
while(defined($arg=shift(@ARGV))) {
$outfilename = $arg;
open(FILE, ” ” . $outfilename) || die “Can’t write $arg: $!\n”;
print (FILE $msg);
close(FILE) || die “Can’t close $arg: $!\n”;
}
} else {
print ($msg);
}
1;

Experienced Hacker
==================
#include
#define S “Hello, World\n”
main(){exit(printf(S) == strlen(S) ? 0 : 1);}

Seasoned Hacker
==================
% cc -o a.out ~/src/misc/hw/hw.c
% a.out

Guru Hacker
==================
% cat
Hello, world.
^^D

New Manager
==================
10 PRINT “HELLO WORLD”
20 END

Middle Manager
==================
mail -s “Hello, world.” bob@b12
Bob, could you please write me a program that prints “Hello,
world.”?
I need it by tomorrow.
^^D

Senior Manager
==================
% zmail jim
I need a “Hello, world.” program by this afternoon.

Chief Executive
==================
% letter
letter: Command not found.
% mail
To: ^^X ^^F ^^C
% help mail
help: Command not found.
% damn!
!: Event unrecognized
% logout

[From: http://lists.xml.org/archives/xml-dev/199712/msg00322.html]

Os animáis a realizar un port a otra plataforma o lenguaje de programación?. Python, Ruby, PHP, Java, eh??