Is it a fake website?

Mostrando entradas con la etiqueta programación. Mostrar todas las entradas
Mostrando entradas con la etiqueta programación. Mostrar todas las entradas

15 agosto 2012

Cuento de verano: Un sysadmin, un programador y una cache


Dos valientes aventureros, Programador y Sysadmin, iniciaron una aventura. Juntos hacían sitios web. Sitios web con servidores web y bases de datos. Usuarios de todos los rincones de Internet hablaban con dichos servidores web y les solicitaban la construcción de páginas web. Los servidores web preguntaban a las bases de datos para disponer del material necesario para mostrar las páginas. El programador codificaba. El sysadmin añadía servidores web y servidores de bases de datos.
Un día el sysadmin se dio cuenta que su base de datos estaba enferma!!, estaba de muy mal genio y muy roja!!.

19 enero 2010

Expresión regular para recoger un valor númerico

Repaso de expresiones regulares.

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?

Lee mucho código, sobre todo actual, para ver como se hace y sigue haciendo todo:


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

El uso de cobol paraliza la mente; por lo tanto, su enseñanza debería considerarse una ofensa criminal.
Edsger Dijkstra


Sabía que odiaría Cobol en el momento que ví que lo usarían para ejecutar en lugar de hacer.
Larry Wall


Cobol es un "débil, pomposo y fofo lenguaje usado por "card wallopers" para realizar cosas aburridas en mainframes dinosaurios.

A pesar de lo mucho y mal que se ha hablado de COBOL, lejos de estar muerto, parece que ahora es el lenguaje del futuro. Cobol no es la última tendencia que verás en la próxima conferencia de la Web 2.0, pero es un elemento clave en la arquitectura software de los sistemas distribuidos modernos, conceptos como XML/metadatos, Web services, SOA, y e-business están actualmente en línea con aplicaciones COBOL para desarrollar aplicaciones de aviación, banca, y seguros por nombrar algunas.

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

Los obstáculos más grandes para aprender a escribir buenos programas son:
  1. La programación es una de las habilidades técnicas más difíciles
  2. Es una habilidad que requiere de algún extraño talento
  3. Lo hacen chicos jóvenes socialmente ineptos y en total aislamiento, casi siempre de noche.
  4. En gran parte sirve para producir videojuegos muy violentos.
  5. Es una habilidad que requiere el dominio de matemáticas avanzadas.
  6. Es una habilidad completamente diferente de el pensamiento diario.
  7. Es algo que no ayuda a la gente.

Extraido de el libro "Programación - Principios y práctica usando C++" qué actualmente está escribiendo Bjarne Stroustroup cómo respuesta al modelo erróneo en que las Ingenierías tratan actualmente a la programación.


"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


Post relacionados:

10 diciembre 2008

¿Cómo afecta el cloud computing a los administradores de sistemas?. Nuevas oportunidades

Iniciativas de cloud computing como AppEngine, Amazon Web Services, BigTable, y similares, proporcionan interfaces centrales para los desarrolladores que les solucionan los típicos problemas de administración de sistemas, y lo están consiguiendo con bastante éxito.

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.

El cloud computing, ese nuevo paradigma en el cual la información es almacenada permanentemente en servidores de Internet y accedida y cacheada en clientes que van desde ordenadores de sobremesa hasta cualquier tipo de sensor pasando por centros de entretenimiento, dispositivos móviles, PDAs, etc, está llevando a los desarrolladores a una convergencia forzada. Los desarrolladores no tienen elección, pero tendrán que comprender como funciona el cloud computing por debajo ya que necesitaran programar herramientas que enlacen con éste.

Por otra parte, es una gran ocasión para que los administradores de sistemas aprovechemos esta oportunidad y poder realizar un trabajo más interesante que el típico de scripts de monitorización, parseadores de logs, tratamiento de información con datos de directorios y similares.

Sí no sabeis programar, aprende, porque un administrador de sistemas necesita saber programar. Elige un lenguaje de propósito general orientado a sistemas para que puedas aprender poco a poco familiarizándote con él; python, ruby o perl son buenas elecciones.

Amplia tus horizontes, ensancha tu mente y sumérgete en la nube.

19 septiembre 2008

5 gran preguntas a 5 de los grandes programadores

Coge las direcciones de correo públicas de respetables programadores y envíales un correo con una pequeña entrevista con preguntas como; ¿como aprendieron a programar?, ¿les sirvio de algo la Universidad?, ¿qué es lo que más valoran de un programador?, ¿sirven de algo las matemáticas o físicas para programar?, ¿cuál será el próximo boom en programación?, eso es lo que hizo Stiff.

(este es un pequeño resumen de lo que me ha parecido más interesante)

Estrellas invitadas:

Linus Torvalds
- Autor del Linux kernel





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.

Guido Van Rossum: Lo siento, no soy una persona con una bola de cristal. Predije el CGI unos 5 años despues de que hubiera sido inventado. :-)

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

Bjarne Stroustrup es el inventor de C++, podeis consultar numerosas entrevistas que se le han hecho desde las cuales podremos sacar nuestras propias conclusiones del panorama actual en relación a la programación y entorno en el que nos movemos. Particularmente me quedo con esta pregunta y respuesta de una de las entrevistas:

¿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

Aprende a programar en diez años, traducido al español por Carlos Rueda, es un conjunto de puntos y pautas que nos marcarán el camino clave para poder empezar a escribir código, detalla perfectamente las instrucciones de como aplicar primer punto del post como colaborar en proyectos open source, es la parte más dura, sí, es cierto, pero también es la que más recompensas te traerá.

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 Google
"

28 julio 2007

Antes de construir el futuro, tienes que conocer el pasado

Esta afirmación tan cierta para conocer la historia del mundo y saber las verdaderas razones de los conflictos actuales de los países, sirve tambien de igual manera en el mundo de la tecnología.

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 especifica a cuantos grupos suplementales puede pertenecer a un proceso, por defecto a 32.
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
pero únicamente el usuario root puede escribir en ese archivo?

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?

"He trabajado muchos años en el kernel de FreeBSD, y rara vez me aventuré en la programación de espacio de usuario, pero cuando alguna vez lo he hecho, invariablemente he encontrado que la gente programa como si todavía estuvieramos en los 80."

Poul-Henning Kamp, Varnish architect and coder.


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

¿Para que complejos entornos de programación aka IDEs para desarrollar código open source si lo puedes gestionar con dos simples y poderosas utilidades?

  1. VIM + CTAGS.

  2. #find . -type f -print | xargs grep lo_que_busques

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?