"El éxito es la habilidad de ir de fallo en fallo sin perder el entusiasmo." ¿Sir Winston Churchill?
15 agosto 2012
Cuento de verano: Un sysadmin, un programador y una cache
19 enero 2010
Expresión regular para recoger un valor númerico
Dado el texto:
<POPULARITY URL="INSERTA_AQUI_TU_URL/" TEXT="775477"/>
necesitaba conseguir el último número, en este caso: 775477
La siguiente expresión regular funcionaba bien para cualquier nombre de dominio:
POPULARITY[^\d]*(\d+)
Test online para expresiones regulares
¿Pero qué ocurre si introducimos un dominio con números?, por ejemplo: 11870.com
pues que nos devuelve el propio dominio 11870, al coincidir con la expresión regular anterior. Para que funcione también con nombres de dominio con números, necesitamos modificarla ligeramente.
Expresión regular antes:
POPULARITY[^\d]*(\d+)
POPULARITY: Coincide con el literal POPULARITY
POPULARITY[^\d]: Coincide el literal POPULARITY más un espacio
[...]: Coincide cualquier caracter simple de una clase carácter.
^: coincide al comienzo de la cadena
\d: coincide con un dígito decimal.
POPULARITY[^\d]*: Coincide con "POPULARITY URL="
*: Coincide 0 o más ocurrencias de la expresión regular anterior.
(\d+): Coincide con uno o más digitos decimales.
Expresión regular después:
(modificada para que funcione con dominios numéricos).
<POPULARITY.*TEXT="(\d+)"\/>
¿Conoceis alguna forma alternativa o más sencilla?
25 noviembre 2009
¿Cómo aprender a programar?
Código de Google OS.
--------------------------------------------------------------------------------------
GOOGLE_ACCOUNTS_URL = 'https://www.google.com/accounts'
LOGIN_SOURCE = 'test_harness'
class CookieCollectorRedirectHandler(urllib2.HTTPRedirectHandler):
def __init__(self):
self.__cookie_headers = []
@property
def cookie_headers(self):
return self.__cookie_headers
def http_error_302(self, req, fp, code, msg, headers):
self.__cookie_headers.extend(fp.info().getallmatchingheaders('Set-Cookie'))
result = urllib2.HTTPRedirectHandler.http_error_302(self, req, fp,
code, msg, headers)
return result
def Authenticate(email, password):
opener = urllib2.build_opener()
payload = urllib.urlencode({'Email': email,
'Passwd': password,
'PersistentCookie': 'true',
'accountType' : 'HOSTED_OR_GOOGLE',
'source' : LOGIN_SOURCE})
request = urllib2.Request(GOOGLE_ACCOUNTS_URL + '/ClientLogin', payload)
response = opener.open(request)
data = response.read().rstrip()
# Convert the SID=xxx\nLSID=yyy\n response into a dict.
l = [p.split('=') for p in data.split('\n')]
cookies = dict((i[0], i[1]) for i in l)
payload = urllib.urlencode({'SID': cookies['SID'],
'LSID': cookies['LSID'],
'source': LOGIN_SOURCE,
'service': 'gaia'})
request = urllib2.Request(GOOGLE_ACCOUNTS_URL + '/IssueAuthToken', payload)
response = opener.open(request)
--------------------------------------------------------------------------------------
class PamClient {
public:
/*
* Struct representing the username / password. This is assumed to
* be passed to the callback function
*/
struct UserCredentials {
std::string username;
std::string password;
};
/*
* Calls pam_start and initializes the pam environment
*/
explicit PamClient(UserCredentials* user_credentials);
/*
* Calls pam_end and frees memory
*/
virtual ~PamClient();
/*
* Starts the authentication loop. This initiates the call to the
* pam library and back to the conversation callback before returning
* Returns true on success, false on error
*/
bool Authenticate();
/*
* Sets the credentials obtained from authenticate and starts a session
* with the pam library
*/
bool StartSession();
Y sobre todo, ten paciencia.
Relacionado.
31 marzo 2009
Aprende COBOL y afronta la crisis con garantías
Larry Wall
El perfil de programador actual de COBOL en la mayoría de ocasiones está muy lejos de aquellos viejos dinosaurios, actualmente es el modelo web y la integración con modelos de arquitectura SOA lo que se está demandando para integrar COBOL en la web actual. Hoy día es posible realizar desarrollos web 2.0 en COBOL.
El 'problema' es que para las grandes compañías y gobiernos que durante decadas han sustentado sus procesos de negocio sobre este lenguaje es simplemente más sencillo y fiable mantenerlo que migrar. Sólo algunas grandes compañías se atreven a reemplazar algunas de sus antiguas aplicaciones COBOL con software actual. Pero gran parte de ellas lo mantienen y necesitan adaptarlo a las necesidades actuales, por ello, actualmente existe una gran demanda de programadores COBOL, tal, que nadie hubiera podido imaginar este escenario en el actual 2009, tiempos de la web semántica.
Simplemente haz la prueba y sorpréndete. Elige tu portal favorito de empleo nacional o internacional y busca "COBOL", en ocasiones verás más resultados que para ASP, PHP o C++
¿Increible?, NO, una oportunidad para afrontar la crisis
The Case for continued COBOL education
Is your next language COBOL
21 diciembre 2008
Los 7 grandes mitos de la programación
- La programación es una de las habilidades técnicas más difíciles
- Es una habilidad que requiere de algún extraño talento
- Lo hacen chicos jóvenes socialmente ineptos y en total aislamiento, casi siempre de noche.
- En gran parte sirve para producir videojuegos muy violentos.
- Es una habilidad que requiere el dominio de matemáticas avanzadas.
- Es una habilidad completamente diferente de el pensamiento diario.
- Es algo que no ayuda a la gente.
"La programación seria es un deporte de equipo, muestra tus habilidades sociales. El geek gordo y genio semi-oculto en una pila de cajas de pizzas y latas de cola es una criatura mítica, mejor lo enterramos y no lo volvemos a ver." Bjarne Stroustrup
10 diciembre 2008
¿Cómo afecta el cloud computing a los administradores de sistemas?. Nuevas oportunidades

Entonces podemos preguntarnos, ¿donde nos sitúa esto a los administradores de sistemas?
Estamos ante un entorno tecnológico extremadamente cambiante, con un conjunto de nuevas herramientas, y tecnologías que no paran nunca de evolucionar y causan una fragmentación bien percibida en la comunidad mientras todo el mundo discute por cual es "la dirección correcta". ¿Os suena no?, debería, ya que, es exactamente lo que hacemos los administradores de sistemas. El hecho de que las cosas nunca se estanquen es lo que hace que amemos nuestra carrera. Aunque a otros les de vértigo.
19 septiembre 2008
5 gran preguntas a 5 de los grandes programadores
(este es un pequeño resumen de lo que me ha parecido más interesante)
Estrellas invitadas:
Linus Torvalds

Peter Norvig- Director de desarrollo de Google, famoso Lisper, autor de famosos (en algunos circulos al menos) sobre IA. Su página personal.
Guido Van Rossum- El creador del lenguaje Python
Bjarne Stroustrup - El creador de C++ , su página web aquí
James Gosling - El creador del lenguaje Java
PREGUNTAS
1. ¿Cómo aprendiste a programar?
Linus Torvalds: No aprendí a programar en la Universidad. Lo hice leyendo libros y programando (al principio con un Commodore VIC-20 y luego con un Sinclair QL).
Peter Norvig: Realicé cursos en el instituto y en la Universidad, pero siempre sentí que aprendí más por mi cuenta.
Guido Van Rossum: Fuí a la Universidad donde había un gran mainframe y había varios cursos de programación.
Bjarne Stroustrup: En la Universidad (Aarhus y después Cambridge).
James Gosling: Inicialmente yo era autodidacta. Tuve mi primer trabajo de programador antes incluso de ir a la Universidad. Me divertí mucho.
2. ¿Te sirvio de algo la Universidad?
Linus Torvalds: Especialmente pienso que la Universidad fue muy útil. En lugar de ir a una escuela de Ingeniería, fuía a la Universidad de Helsinki, que es muy teórica, por lo que la enseñanza no se centraba mucho en la programación (que era sólo una pequeña parte, y en la que termine trabajando más), la mayoría de los cursos eran sobre conceptos fundamentales y cosas como análisis complejos.
Lo cual puede parecer aburrido e incluso un gasto de esfuerzo muchas veces, pero creo que fue útil, y muchas veces me divertía. Y creo que soy un mejor programador por ello.
Peter Norvig: Creo que aprendía más por mi cuenta.
Guido Van Rossum: Fue muy importante para mí.
Bjarne Stroustrup: Las Universidades me enseñaron mucho que era útil, incluido muchas de las bases de mi futuro trabajo. Además aprendí también programación por dinero, donde la comprensión de los problemas del mundo real, correciones, mantenimiento, entrega a tiempo, etc, era más estresante que en el entorno Universitario.
James Gosling: Estuve en la Universidad hasta que finalicé el PhD.
3. ¿Cual piensas que es la habilidad más importante que todo programador debiera tener?
Linus Torvalds: Es algo que yo llamo "gusto".
Tiendo a juzgar a la gente con la que trabajo no por su eficiencia a la hora de trabajar: mucha gente puede tirar mucho código, sino por como reaccionan al código de otra gente, y obviamente también al tipo de código que escriben y que enfoques toman. Esto me indica si tienen "buen gusto" o no, y el tema es que, una persona sin "buen gusto" a menudo no es muy buena juzgando el código de otra gente y su propio código termina siendo malo.
Pero esta no es la única cosa. Algo que es muy útil, especialmente en un proyecto Open Source es simplemente la habilidad de comunicar bien lo que vas a hacer, y como lo vas a hacer. La habilidad de explicar a los otros "por qué" vas a hacer algo de tal modo, es muy importante, y no todo el mundo tiene esa habilidad.
Peter Norvig: No creo que haya una, pero diré concentracíon.
Guido Van Rossum: Sus cuestiones son un tanto generales y difíciles de contestar. :-) Supongo que ser capaz de cocinar un huevo para desayunar es algo incalculable.
Bjarne Stroustrup: La habilidad para pensar claramente: Un programador tiene que comprender problemas y mostrar soluciones.
James Gosling: Ser capaz de motivarse a si mismo. Para ser realmente bueno, tienes que amar lo que haces.
4. ¿Crees que las matemáticas o física es una destreza importante para un programador?, ¿Por qué?
Linus Torvalds: Personalmente creo que una buena base de matemáticas viene muy bien. No estoy tan seguro que con física también, pero estoy convencido que sabiendo matemáticas y teniendo una buena base ayuda a ser un mejor programador. Ya sea solamente porque los modelos mentales son similares.
Peter Norvig: Sí. Muchas de las ideas son inherentemente matemáticas: inducción, recursión, lógica, etc.
Guido Van Rossum: Matemáticas, sí (alguna parte; No me importan las ecuaciones diferenciales, pero la álgebra y lógica son importantes). La física, no creo excepto que es siempre útil interesarse por muchas cosas.
Bjarne Stroustrup: Depende del programador y de las tareas de programación. Algunas partes de matemáticas son frecuentemente útiles, la física menos que ella, pero aprender física es una de las mejores maneras de aprender matemáticas prácticas.
James Gosling: Sí. Te enseñan lógica y dedución. Y a tener un ojo análitico. Y no hay nada que sustituya a las matemáticas cuando se trata de analizar los algoritmos.
5. ¿Cual crees que sera la próxima gran innovación en programación?
Linus Torvalds: No creo que veamos un "gran salto". Hemos visto un montón de herramientas que nos facilitan las tareas diarias - con los lenguajes de alto nivel y quizás la integración de bases de datos simples en los lenguajes serán una de ellas. Pero la mayoría de lo que se ha comentado publicamente ha sido de un uso muy limitado.
Peter Norvig: Procesamiento distribuido a larga escala.
Bjarne Stroustrup: No lo se, no me gustan las suposiciones.
James Gosling: Los dos temas por los que estoy ocupado ahora son la copia con paralelismo y complejidad.
26 diciembre 2007
Los mejores programas hechos en C++ según su Inventor
¿Cuál ha sido el mejor y peor programa realizado en C++?
B.S: El mejor Google!, ¿puedes recordar el mundo antes de Google? (después de todo solo hace 6 años). Lo que me gusta de Google es su rendimiento bajo severas restricciones de recursos. Posee unos de los más sencillos e ingeniosos algoritmos de paralelización y computación distribuida.
Tambien hay sistemas-embebidos que me gustan como por ejemplo los análisis de escena y autonomía de movimiento de la Mars Rovers. Procesamiento de imágenes en Photoshop...
El peor... Lo siento, no voy a poner en verguenza a nadie nombrando su trabajo, es tan tentador.. pero no lo haré.
Entrevista completa.
Escribe el resto del post aqui
16 diciembre 2007
Receta para el éxito en programación
Son los mejores consejos que he oido para iniciarse en la programación, personalmente me quedo con este consejo:
"The best kind of learning is learning by doing. To put it more technically, "the maximal level of performance for individuals in a given domain is not attained automatically as a function of extended experience, but the level of performance can be increased even by highly experienced individuals as a result of deliberate efforts to improve." (p. 366) and "the most effective learning requires a well-defined task with an appropriate difficulty level for the particular individual, informative feedback, and opportunities for repetition and corrections of errors"
Y esta anécdota:
"One of the best programmers I ever hired had only a High School degree; he's produced a lot of great software, has his own news group, and made enough in stock options to buy his own nightclub.
Peter Norvig
Director of Research

28 julio 2007
Antes de construir el futuro, tienes que conocer el pasado
Un libro de programación en linux de 1998, puede enseñarte entresijos que nunca imaginaste.
- Linux utiliza mecanismos tradicionales de Unix para los permisos de usuarios y grupos. Un proceso activo tiene asociados un uid y gid, pero se vio la necesidad de crear un mecanismo adicional para las restricciones de múltiples proyectos con accesos a miembros de diferentes grupos. Nacen los grupos suplementales.
La constante NGROUP disponible en
Ahora entiendo porque siendo miembro de más de 40 grupos en samba, algunos permisos bien dados fallaban.
- ¿Porque un usuario normal puede cambiarse su password
En ese libro encontraras la respuesta a muchas de las preguntas tan básicas pero necesarias de un sistema GNU/Linux.
19 julio 2007
¿Qué hay de malo en la programación de los 80?
No hay nada malo en la programación de los 80, al contrario, era brillante (salvo casos), lo único que hoy estamos en el 2007, programemos entonces acorde a nuestros tiempos y la tecnología actual. Es lo que se deduce de las notas de la arquitectura de varnish.
Algunos citas extraidas.
"Hoy día los ordenadores no tienen dos tipos de memoria como antes."
"¿Qué ocurre cuando la complicada administración de memoria de squid entra en lucha con la complicada administración de memoria del kernel?, lo mismo que en una Guerra Civil, nadie consigue nada."
"La memoria virtual sirve de apoyo a un programa cuando los datos no caben en la memoria física, pero la gente todavía no cae en ello."
16 julio 2007
Las 2 herramientas más poderosas y sencillas para desarrollar software en GNU/Linux
Con esas dos utilidades/scripts podrás hacer frente a grandes proyectos Open Source sin necesidad de usar pesados entornos gráficos de desarrollo.
04 febrero 2007
Sumérgete en Python

Sin duda, un buen libro para todos aquellos que quieran empezar con este lenguaje todoterreno, un "Debe Leerse" que además:
- Está disponible online íntegramente.
- En castellano.
- Y en múltiples formatos para su descarga.
Últimamente no tengo mucho tiempo para leer un libro normal, con normal me refiero a algo que no sea técnico, entre los libros sencillos de las clases de inglés, papers técnicos de autoestudio para dar de comer a esas ansias de conocimiento, y ejercicio para mantener todo en orden... ¿demasiado geek?