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??

Protestant work ethic

June 13, 2008 by Roger Carhuatocto

 

By Wikipedia:

The Protestant work ethic, sometimes called the Puritan work ethic, is a Calvinist value emphasizing the necessity of constant labor in a person’s calling as a sign of personal salvation. Protestants beginning with Martin Luther had reconceptualised work as a duty in the world for the benefit of the individual and society as a whole. The Catholic idea of good works was transformed into an obligation to work diligently as a sign of grace.

http://en.wikipedia.org/wiki/Protestant_work_ethic

Hacker Ethic

June 13, 2008 by Roger Carhuatocto

Six years ago I read the “The Hacker Ethic and the Spirit of Information Age” book, by Pekka Himanen (this book is a collaborative work between Pekka Himanen, Linus Torvalds and Manuel Castells -philosopher, hacker and sociologist, respectively) and understood that Hacker Ethic is a new is a new morality that defies the Protestant work ethic, outlined nearly a century ago Max Weber in “The protrestant ethic and the spirit of capitalism” articuled.

Hacker Ethic Book

Now, Pekka Himanen articulates how hackers represent a new, opposing spirit for the information age. Underlying hackers’ technical creations are the hacker values that produced them and that challenge us all.

The Hacker Ethic values promote passionate and freely rhythmed work; the belief that individuals can create great things by joining forces in imaginative ways; and the need to maintain our existing ethical ideals, such as privacy and equality, in our new, increasingly technologized society

If you want to read this book, you could googlear …