Aserciones II: Teoría

En el tema recién expuesto de Aserciones no se ha hecho análisis profundo de la teoría detrás. Sin embargo, no está demás dar la interpretación de un estricto profesor de Teoría de Programación Orientada a Objetos (Medardo Rodríguez, por demás excelente profesor). Así que aquí les va el mismo tema (en catarsis)

Busquemos principios conceptuales en todo lo que hagamos:

  • Las restricciones son predicados que deben cumplirse para todo t elemento de T (conjunto con dominio tiempo)
  • Definamos predicado como «P: X -> {true,false}», X es una relación determinada de objetos (valores). Por ejemplo, los parámetros de una función.
  • En las precondiciones, postcondiciones, y los «assert» tradicionales; T tiene cardinalidad igual a 1.
  • Las precondiciones y postcondiciones más comunes (no las únicas) son las que definen respectivamente a T={instante de la llamada de una función} y T={instante en que una función termina}. Llevan esos nombres porque se refieren a un cuerpo dinámico cualquiera y se usa precondición si se aplica en el instante anterior o posterior al cuerpo.
  • En las invariantes, T es un conjunto acotado con cardinalidad > 1.
  • Los «assert» tradicionales se puede aplicar en cualquier instante casi siempre con una semántica a determinar por el contexto (ésta podría ser una precondición, una postcondición o la evaluación de una invariante para cualquier t elemento de su T.
  • En teoría de programación hay muchos usos de las restricciones, no sólo los de Eiffel. En la lógica de Floyd-Hoare sobre las «Bases axiomáticas de la programación de computadoras» se usan para definir la correctitud (cómo se dice eso en español) de los programas estructurados o algorítmicos. Ver http://en.wikipedia.org/wiki/Loop_invariant.
  • Las clases pueden definir invariantes donde la relación X es una de sus facetas (una faceta es un subconjunto de los atributos de un objeto cuyas fronteras lógicas están bien definidas).

Hay que dejar claro que cuando se habla de «Invariantes de Clases» se refieren a las definiciones, porque las invariantes siempre están en el plano de los objetos.

¿Como les quedó el ojo?  ;-)

El fingidor

El poeta es un fingidor
finge tan completamente
que hasta finge que es dolor
el dolor que en verdad siente

Fernando Pessoa

Aserciones

Estoy recuperando algunos de los correos de una lista de un curso de Python al que asistí hace ya un tiempo. Y como mi interés por Python en estos días ha crecido, pues aquí expongo algunos temas que me resultaron de gran interés. Servirán además como base de muestra de los conocimientos que voy adquiriendo, y como reto, para que aquellos que hayan ya pasado por algunos de estos temas, discutan sobre el mismo, y todo redunde en una mejor comprensión. Pues nada... esto es un pequeño bocadillo acerca de aserciones en Python.

Aserciones

Las aserciones son condiciones que pueden clasificarse en precondiciones, postcondiciones e invariantes. Las precondiciones y las postcondiciones  están asociadas a las funciones de las clases y las invariantes se aplican a toda la clase.

Una precondición debe cumplirse como requisito para ejecutar la función a la que esta asociada, mientras que de una postcondición podría decirse algo así «si esta función se ejecutó correctamente, entonces debería cumplirse esto otro» y las invariantes debe cumplirse en todo momento del trabajo de la clase.

Una cosa si debe quedar claro, las aserciones no sustituyen las instrucciones if..then , ni las excepciones, ni otras instrucciones de control de datos. pueden existir problemas que no tienen porque ser controladas por las aserciones y que deben ser tratadas.

Hay muchos problemas que se van de la mano del programador y/o de la computadora. Las  precondiciones/postcondiciones dicen: «si tus datos cumplen esto, y la función se ejecuta sin problemas, entonces yo te garantizo esto otro». Es decir, si hay resultados, entonces serán correctos. (Un caso en que no hay resultado, por ejemplo, podría ocurrir si estoy leyendo de la red y se cae la red).

Mininova cierra y se buscan alternativas

Para aquellos que gustan de descargas por torrent, se encontraba siempre disponible uno de los mejores trackers de la red P2P. Pero ahora se “convierte” a la fe de las más estricta y férrea legalidad. ¿Qué hacer ahora cuando deseamos buscar contenido que no aparece en otros sitios?

Aquí les dejo una lista de los algunos trackers que pueden sustituir a Mininova en su función.

  1. Vertor
  2. SeedPeer
  3. Torrentreactor
  4. Alive Torrents
  5. KickassTorrents
  6. BTjunkie
  7. isoHunt (muy recomendado)
  8. yourBitTorrent
  9. The Pirate Bay
  10. Fulldls
  11. EZTV
  12. UKNova
  13. TorrentBytes
  14. Legal Torrents
  15. Linux Tracker
  16. Monova
  17. YouTorrent
  18. ExtraTorrents
  19. Torrentz
  20. Torrentzap
  21. FlixFlux
  22. ShareReactor

En imágenes: Temporada 1-Episodio 1

En imágenes es una serie de artículos en los que se plasma sitios, sucesos, ideas… y todo … en imágenes.

En este episodio les presento algunos parajes de La Habana, Cuba, de las década de los '50.

image001[6] image002[1] image003[2] image004[2]    image005[3] image006[2] image007[1] image008[1] image009[1]

Diseño de software

Hay dos formas de diseñar software: la primera es hacerlo tan simple
que obviamente no hay deficiencias y la segunda es hacerlo tan
complicado que no hay deficiencias obvias. La primera forma es mucho
mejor y más difícil

C.A.R. Hoare

Inconformidades con Python

logo

Uno de los lenguajes que más me ha encantado con sólo ver el "Hola Mundo", es Python. Todas las cosas que ofrece me parecen tan naturales en el lenguaje ideal que todo pedimos una vez al Señor.
Una de las cosas que más me llamó la atención fue la propuesta de rapidez a la vez que flexibilidad, y junto a todo multiplataforma.
Y es en este punto donde quiero centrarme, ya que en recientes trabajos he tenido que implementar ciertas bibliotecas en las que existen grandes diferencias de funcionamiento entre una y otra plataforma. Por ejemplo un método que nos devuelva información acerca de los discos lógicos de la PC, es una sencillez para los sistemas unix-like. Sin embargo para Windows no existe nada estándar al respecto ¿Qué hacer?
En fórums y listas de discusiones, las argumentaciones sobre el tema van desde hacer la solución dependiente de la plataforma, hasta la creación de un entorno de sistemas de ficheros virtuales que encapsule toda funcionalidad de este tipo.
Me pregunto ahora si en verdad es tan multiplataforma, cuando muchas funciones útiles tienen limitantes similares.
Les dejo algunos enlaces para los que se enfrentan al problema de ejemplo:

http://code.google.com/p/pyfilesystem/

http://timgolden.me.uk/python/wmi_cookbook.html

Asimilación

day019 En una organización X vuelve a estudiarse la posibilidad de la implantación de una metodología de trabajo que optimice el desarrollo de software... Vaya que optimice... que haga efectiva tanta fuerza de trabajo puesta en función de una actividad. Pero resulta que esta tarea no es de las más fáciles en el mundo actual; un mundo en el que la palabra "organigrama" tiene tanto poder de convencimiento.

Pues es que en las organizaciones en las que más entusiasmo se observa por las nuevas formas de hacer, existe cierta estructura jerárquica sobre la que se han concedido determinados beneficios que minan cualquier intento en hacer de esta un mecanismo efectivo (que ni siquiera eficiente). Es pues imprescindible el estudio de las causas que provocan que la asimilación de cualquier metodología, proceso o pseudo-proceso sea un martirio y finalmente un despropósito para la propia organización y sus miembros.

Veamos que una buena parte de estas organizaciones poseen estructuras jerárquicas totalmente verticalizadas, con cuatro o cinco niveles de dirección; contando, sin embargo, con menos de 80 trabajadores que estén vinculados directamente con la actividad de la organización y otros 120 como equipo de soporte en el que se incluyen todas las áreas que cubren la logística, técnica y control. Estas estructuras muchas veces crecen cada vez más con la promesa de que cambios profundos traerán mejores resultados en la gestión. Pero, este crecimiento a una mayor verticalización del organigrama... ¿Será beneficioso? ¿Para quién?

Ahora se nos da LA MISIÓN de evangelizar la organización hacia una cultura del logro (pura abstracción burocrática). Para esto, como snobs de nuestro tiempo, buscamos la metodología de moda, con una combinación letal, aquella que más bombo pero menos conocedores tenga. De tal forma que en nuestro puesto de CME (Chief Methodology Evangelist)... nuestras decisiones sean más alabadas que criticadas. Un reto de la asimilación es mapear una gestión de roles, como proponen muchas metodologías, con el organigrama, y concretar así el ansiado cambio. Los miembros de la jerarquía al sentirse aún con poder, pero poco a poco excluidos, minarán el proceso (claro mecanismo de supervivencia en un mundo en el que han quedado atrás). Otros tratarán de camuflarse bajo alardes de flexibilidad imponiendo criterios que echarán por la borda todo intento de éxito.

Lo reconozco... todo lo que les expongo, constituye quizás el peor de los escenarios; pero es que el poder que se alcanza con un arte milenario tantas veces aprendido, es difícil dejarlo ir por la mera adaptación al cambio (sobrevalorado... dicen).

;-)

Los Grupos del Mundial de Fútbol 2010

Así quedaron los grupos del Mundial después del sorteo

Grupo A
Grupo B
Grupo C
Grupo D
Sudáfrica
Argentina
Inglaterra
Alemania
México
Nigeria
Estados Unidos
Australia
Uruguay
Corea del Sur
Argelia
Serbia
Francia
Grecia
Eslovenia
Ghana

Grupo E
Grupo F
Grupo G
Grupo H
Holanda
Italia
Brasil
España
Dinamarca
Paraguay
Corea del Norte
Suiza
Japón
Nueva Zelanda
Costa de Marfil
Honduras
Camerún
Eslovaquia
Portugal
Chile

Si quiere conocer un poco más acerca de las ciudades que serán sede del mundial, revise nuestra serie acerca de las sedes:

Messi recibe al Balón de Oro

messi

Dedico el Balón de Oro a mis compañeros, comparto este trofeo con ellos. Estoy muy contento de ser no solo el primer argentino que lo gana, sino también el primero formado en la cantera del Barcelona. Gracias a mi familia, a mis amigos y especialmente a mis hermanos, que siempre están ahí para mí

Así agradecía Messi la entrega del Balón de Oro, en la que ha arrasado con las estadísticas. Es el que más porcentaje ha alcanzada jamás en la votación con 473 puntos, más del doble que su principal contrincante Cristiano Ronaldo (233 puntos).

Este chamaco el lo máximo; desde que salió por primera vez en los grandes escenarios, todos los amantes del fútbol lo seguían por su increíble velocidad y habilidad para descolocar cualquier defensa.

Esperamos muchos más de él en esta campaña, y los seguidores de Argentina de seguro lo ven como su carta más segura frente al Mundial que se avecina.

¡¡¡Felicidades!!!

Mundial de Fútbol Sudáfrica 2010. Las sedes: III parte y final

logo

Este es el último artículo de una serie que recorrió las sedes del próximo Mundial de Fútbol (Ver 1ra parte, 2da parte). Aquí les entregamos las últimas tres ciudades que tendrán actividad futbolística. … ;-)

Rustenburg

Situada en la sabana de Bushveld, es una región roca en minerales que cuenta con dos de las minas de platino más grandes del mundo. El estadio Royal Bafokeng es el más pequeño de los que presenta Sudáfrica para el Mundial, con cabida para 42.000 espectadores.

Polokwane

Esta ciudad, donde se encuentra el baobab, el árbol más grande de África, tiene frontera con tres países del continente: Botsuana, Zimbabue y Mozambique. Está considerada como un lugar de mitos y leyendas dado que ha sido habitada por varias tribus indígenas a lo largo de su historia. En el estadio de la ciudad, el Meter Mokaba, uno de los cinco que se han construido con motivo del Mundial, es en el que debutó Drogba como internacional y tiene una capacidad de 45.000 asientos.

Nelspruit

Rodeada de grandes reservas naturales, acantilados y cataratas, fue fundada por la familia Nel a principios del siglo XX. El estadio de la ciudad es el Mbombela, que significa en "siswati", una de las lenguas oficiales de la zona, “muchas personas juntas en un lugar pequeño”. Albergará partidos de la primera fase y de los octavos de final y tiene capacidad para 46.000 espectadores.

Mundial de Fútbol Sudáfrica 2010. Las sedes: II parte

logo

Esta es la segunda entrega de las sedes del Mundial de Fútbol Sudáfrica 2010 (Ver 1ra parte). Una pequeña explicación de la ciudad y del estadio sede de los partidos. ¡Disfruten de la previa del primer mundial en el Continente Negro!   ;-)

Pretoria

Es la capital de Sudáfrica y es donde residen innumerables embajadas. Aquí se celebró el llamado "juicio de la traición de Rivonia" (1963-1964), que dictó el encarcelamiento de Nelson Mandela, entre otros. Es uno de los focos futbolísticos del país y de su cantera han salido algunos de los mejores jugadores de Sudáfrica. El estadio de la ciudad es el Loftus Versfeld, uno de los más antiguos del país y en el que Sudáfrica logró la primera victoria ante un equipo europeo, Suecia (1-0). Tiene capacidad para 50.000 espectadores.

Durban

Situada en la costa oeste del país, es la tercera ciudad más grande y posee el puerto más concurrido de África. Cuenta, además, con la llamada “milla de oro”: cuatro kilómetros de paseo, playa y restaurantes. Su estadio, el Moses Mabhida, será la sede de una de las dos semifinales del Mundial. Ha sido construido específicamente para el campeonato y tiene capacidad para 70.000 espectadores.

Bloemfontein

La ciudad donde nació J.J. Tolkien, autor de la saga de “El señor de los anillos”, es la capital judicial de Sudáfrica y es popular por tener la afición más colorida y animada del país. Su estadio, el Free State (o Vodacom Park), ha sido ampliado para que tenga espacio para 48.000 personas y fue la sede de España en la Copa Confederaciones del 2009.

Servicios de Windows y timers en .Net

Hacer un servicio de Windows usando la plataforma .Net y Visual Studio es realmente sencillo. Como sucede con casi todas las herramientas de desarrollo de Microsoft, … la facilidad tiene su precio. Y es que después de comenzar a codificar un servicio y de hacer las primeras pruebas nos enfrentamos a algunos detalles a tener en cuenta.

Uno de estos es el uso de timers en los servicios de Windows. En .Net tenemos tres tipos de Timers (¡increíble! pero cierto), y su uso se explica en este artículo de MSDN.

La cuestión principal a saber con respecto a Timers y servicios es que en estos no se puede usar el Timer que deriva de la clase de componentes de Windows Forms; se recomienda el uso de System.Timers.Timer.

Otro detalle a tener en cuenta es en qué sistema operativo se va a desplegar. Si va a ser en una de las versiones para servidores de Windows se debe tener en cuenta que la cuenta sobre la que debe operar el servicio debe ser LocalSystem.

Parecen pequeños detalles insignificantes, pero estos fueron los que me hicieron perder una jornada de trabajo. Ya que no dan errores, ni levantan excepciones, simplemente no funcionan. Estos detalles no los encontraran en ningún tutorial, ni manual; sólo se tropezarán con ellos cuando estén en fase de despliegue.

Espero que les ayude… ;-)

Mundial de Fútbol Sudáfrica 2010. Las sedes: I parte

logo

Con esta serie Moropo les brinda un compendio de las ciudades que serán sede de los partidos del Mundial de Fútbol Sudáfrica 2010

Johannesburgo

La ciudad más grande de Sudáfrica es el centro financiero del país, con una gran oferta cultural y multitud de zonas verdes. Alberga a los dos equipos más importantes del país, el Orlando Pirates y el Kaizer Chiefs. Tiene dos estadios: el Soccer City, donde se disputará el partido inaugural, cuatro de la primera ronda, uno de octavos de final, otro de cuartos de final y la final, con cabida para 94.000 espectadores, y el Ellis Park (o Coca-Cola Park), donde se disputó la final de la Copa Confederaciones 2009.

Ciudad del Cabo

Es la capital legislativa de Sudáfrica y la segunda ciudad más grande del país. Es famosa por su puerto, que fue uno de los más importantes de la “ruta de las especias” hacia la India. En ella han nacido grandes futbolistas de la historia de la selección, como Benny McCarthy, Shaun Bartlett, Albert Johannensen y David Julios. El estadio que acogerá los partidos en Ciudad del Cabo será el Green Point, de nueva construcción y situado cerca del mar con capacidad para 70.000 espectadores y en él se disputará una de las semifinales del Mundial.

Puerto Elizabeth

Renombrada como Bahía Nelson Mandela en homenaje al primer presidente democrático de Sudáfrica, que reside en esta ciudad, está situada al sur del país y es uno de sus principales puertos. Está rodeada por 40 kilómetros de playas, lo que la hace un destino turístico preferente dentro del país. En una ciudad en la que no existen equipos de fútbol profesionales, el estadio Nelson Mandela es el primero dedicado en exclusiva al fútbol y construido especialmente para el Mundial y será el escenario del partido por el tercer y cuarto puesto.

El resto de las ciudades en próximos artículos. ;-)

Errores graciosos en Linux/Unix

Estos errores fueron encontrados en viejos grupos de noticias.

  1. FATAL system error #nnnn CAUSE: We should never get here!
  2. OHHHH…. I give up Core dumped
  3. ERROR: A really big FUCK UP has been detected !!
  4. “Keyboard not present, press any key”
  5. “You lied to me when you told me this was a program”
  6. “PROGRAMMER GOOFED . . . YOU SHOULD NEVER SEE THIS MESSAGE”
  7. YOU CAN’T DO THAT!
  8. Man the Lifeboats! Women and children first!
  9. That makes 100 errors; please try again.
  10. You can now delete more, or insert, or whatever.
  11. Sorry, I don’t know how to help in this situation.
  12. Maybe you should try asking a human?
  13. Sorry, I already gave what help I could…
  14. An error might have occurred before I noticed any problems.
  15. If all else fails, read the instructions.
  16. This can’t happen.
  17. I’m broken. Please show this to someone who can fix can fix
  18. I can’t go on meeting you like this.
  19. BAD.
  20. A funny symbol that I can’t read has just been input.  Continue, and I’ll forget that it ever happened.
  21. I suspect you’ve forgotten a `}’, causing me to apply this control sequence to too much text. How can we recover? My plan is to forget the whole thing and hope for the best.
  22. Dimensions can be in units of em, ex, in, pt, pc, cm, mm, dd, cc, bp, or sp; but yours is a new one!
  23. Something Rotten in Denmark, Interp Stack Not ALigned
  24. ILLEGAL ERROR
  25. bad magic number
  26. “very funny”
  27. “Unexpected ‘;’, expecting ‘;’”
  28. You can’t do that in horizontal mode.
  29. Can’t cast a void type to type void (because the ANSI spec. says so, that’s why)
  30. Huh ?
  31. can’t go mucking with a ‘void *’
  32. we already did this function
  33. This label is the target of a goto from outside of the block containing this label AND this block has an automatic variable with an initializer AND your window wasn’t wide enough to read this whole error message
  34. “Your expression has defeated me”
  35. “Your formula has defeated me”
  36. WARNING: 54 - PROGRAM NOT RECURSIVE
  37. Help is not available for you.
  38. Masscomp C compiler:”Insane structure member list”
  39. User Error: An unknown error has occurred in an unidentified program while executing an unimplemented function at an undefined address. Correct error and resubmit.
  40. Liar, Liar! Pants on Fire!
  41. Error: Success

Thunderbird 3 RC2

La tan esperada versión 3 del cliente de mensajería de Mozilla acaba de llegar a un hito importante el Release Candidate 2. A este momento se llega luego de una larga fase de depuraciones en las betas y RC1 anteriores. Pueden consultarse las notas del lanzamiento en este enlace: http://www.mozillamessaging.com/en-US/thunderbird/3.0rc2/releasenotes/

Entre las mejores notables de la versión 3 sobre la 2 de Mozilla Thunderbird se encuentra la utilización del motor de render Gecko 1.9.1.5, brindando mejoras en desempeño, estabilidad y compatibilidad con los estándares web. Podemos hallar además en esta versión una mejorada búsqueda con filtros avanzados y autocompletamiento; además de la tan solicitada funcionalidad soporte de pestañas.

Estas son sólo algunas de las novedades de esta entrega, esperemos que la versión estable no sufra otro atraso como lamentablemente ha sucedido a menudo con este proyecto de Mozilla.

Calcular el checksum en MD5 ó SHA1 de un fichero

Muchas veces necesitamos un identificador único para un fichero, que nos garantice además una diferenciación frente a cambios que se puedan producir en el fichero. Uno de los mecanismos ampliamente utilizados es la creación de un checksum (valor numérico que se calcula usando la información de un fichero). Existen muchos algoritmos matemáticos para esta tarea, pero los más extendidos con MD5 y SHA1.
Aquí les presento una función en C# que les permitirá calcular el checksum MD5 y SHA1 de determinado fichero.
Para MD5:
// Genera hash MD5
protected string GetMD5HashFromFile(string fileName)
{
MD5 md5 = MD5.Create();
StringBuilder sb = new StringBuilder();

using (FileStream fs = File.Open(fileName, FileMode.Open))
foreach (byte b in md5.ComputeHash(fs))
sb.Append(b.ToString("x2").ToLower());
return sb.ToString();
}
Para SHA1:
// Genera hash SHA1
protected string GetSHA1HashFromFile(string fileName)
{
SHA1 sha1 = SHA1.Create();
StringBuilder sb = new StringBuilder();

using (FileStream fs = File.Open(fileName, FileMode.Open))
foreach (byte b in sha1.ComputeHash(fs))
sb.Append(b.ToString("x2").ToLower());
return sb.ToString();
}
Recuerden siempre poner en uso las bibliotecas criptográficas de .Net
using System;
using System.Security.Cryptography;
using System.IO;