domingo, 1 de junio de 2014

Consejos para generar código C/C++ de calidad

Navegando por los archivos de mi portátil, hoy encontré un post para desarrolladores de C/C++ que escribí allá por 2004. El post comenzaba de esta manera...

Con los años irás aprendiendo que ser un buen desarrollador de software del lenguaje C/C++ no es solo aprender el lenguaje de programación y escribir lineas de código que compilen y hagan alguna tarea predefinida. Aprender a escribir código compilable es solo el comienzo del camino.


El código fuente de una aplicación debe escribirse siguiendo unos principios de ingeniería que generalmente se aprenden durante la época de estudiante en la Universidad y se asimilan con los años de experiencia. Un código fuente bien escrito es una auténtica obra de ingeniería.

Pero algunos desarrolladores (inexpertos o , incompetentes, da lo mismo), nunca aprenderán a usar los principios básicos de ingeniería, convirtiendo sus códigos fuentes en "obras de arte" caóticas, chapuceras y desordenadas, que solo ellos entienden (y algunos que, sin tener mucha idea, admiran).

Quizás su código funcione, y haga lo esperado. Pero nos olvidamos que su código fuente deberá ser mantenido, probablemente por nuevos desarrolladores que no lo han implementado, y no entienden esa "obra de arte" realizada por sus caóticos predecesores. Pobrecitos desarrolladores, los que vengan por detrás...

De la experiencia adquirida con los años, quiero compartir con vosotros una lista de consejos prácticos que seguro os serán de utilidad para mejorar la calidad de vuestros desarrollos, y facilitarán la vida a los pobrecitos desarrolladores que algún día tendrán que mantener vuestro código. Aunque solo sea por ellos, hagamos bien las cosas...
 
Consejos como analista
  • Exige que tu entrada como analista sea una especificación formal de los requisitos funcionales del sistema.
  • Cualquier diseño es mejor que ninguno.
  • Diferencia con claridad el interfaz publico del interfaz privado
  • Mantén tus clases/módulos desacoplados y usa interfaces públicos bien definidos para comunicarlos.
  • Un buen diseño permite entender la solución propuesta mirando unicamente ficheros de cabecera .h
  • Cuando necesites abrir los ficheros fuentes (.c o .cpp) para entender la solución propuesta, rediseña.
  • La información solo es útil cuando esta bien ordenada.
Consejos como desarrollador
  • Tus principales herramientas como desarrollador son dos: papel y lápiz.
  • El teclado es el medio para codificar tus ideas sobre papel en el código fuente de tu aplicación.
  • Documenta los prototipos de tus funciones en el fichero de cabeceras .h
  • Haz pruebas unitarias de todas tus clases/módulos y mantenlas siempre actualizadas.
  • Haz tu propia guía de estilo y acostúmbrate a usarla.
  • Lee código de otros desarrolladores mejores que tu y actualiza tu guía de estilo con lo que aprendas.
  • Usa alguna herramienta de control de versiones como Subversion o Git.
  • Refactoriza tu código con frecuencia.
  • La mejor solución es siempre la mas sencilla, pero no por ello la mas fácil de encontrar.
  • Los buenos programadores encuentran siempre la mejor solución (lo difícil es hacerlo fácil).
  • Los malos programadores hacen justo lo contrario (lo fácil lo hacen complicado).
... Han pasado 10 años desde que escribí este post.

Tras leerlo, lo primero que me vino a la cabeza es que los años pasan muy rápido (tenía 27 cuando lo escribí, y voy camino de los 38). Lo siguiente que pensé es que sigo pensando exactamente lo mismo que hace 10 años. ¿Desarrolladores que generen código de calidad? Contados con los dedos de una mano.


martes, 11 de marzo de 2014

Endianismo (Little Endian vs Big Endian)

=== Introducción ===

El endianismo es un concepto que hace referencia a como la arquitectura de un procesador mapea un valor escalar en una secuencia de bytes en memoria. Existen dos maneras distintas de mapear un valor escalar en memoria, y se conocen con estos nombres:

    * Big Endian
    * Little Endian

En este post explicamos como funciona cada una de ellas. Pero para poder explicar la diferencia entre Little y Big Endian, primero hay que entender los conceptos LSB y MSB, que paso a explicar a continuación:


=== LSB vs MSB ===

Los valores escalares se agrupan en secuencias de varios bytes. Por ejemplo, en la arquitectura x86, un "short int" ocupa 2 bytes, un "unsigned int" ocupa 4 bytes, un "double" ocupa 8 bytes y un "long double" ocupa 16 bytes.

La secuencia de bytes de un valor escalar se ordena en función del peso de sus bytes dentro del escalar. Dos bytes tienen un significado especial en esa ordenación:

    * LSB o byte menos significativo (Less Significant Byte)
    * MSB o byte mas significativo (Most Significant Byte)

El siguiente gráfico representa la secuencia de 8 bytes de un escalar de tipo "double" y la posición de los bytes LSB y del MSB dentro de dicha secuencia.

          7                           0
        +---+---+---+---+---+---+---+---+
        |MSB|   |   |   |   |   |   |LSB|
        +---+---+---+---+---+---+---+---+

Por ejemplo, si tenemos un escalar de tipo "unsigned int", con valor 0x1a2b3c4d, tendremos que el byte de mayor peso (MSB) es 0x1a, y el byte de menor peso (LSB) es 0x4d. El resto de los bytes se ordenan en función de LSB y MSB.



=== Little Endian vs Big Endian ===

Entendida la diferencia entre MSB y LSB, solo queda explicar la diferencia fundamental entre la representación Little Endian y la representación Big Endian, que ya avanzo en el siguiente gráfico:


= Little Endian =

En little-endian, el byte con la dirección de memoria mas baja se corresponde con el byte LSB. Por ejemplo:

    long int v = 0x0A0B0C0D;

    base_addr     = 0x0D // LSB
    base_addr + 1 = 0x0C
    base_addr + 2 = 0x0B
    base_addr + 3 = 0x0A // MSB

Los procesadores de Intel (los PC's) son sistemas Little Endian.


= Big Endian =

En big-endian, el byte con la dirección de memoria mas baja se corresponde con el MSB. Por ejemplo:

    long int v = 0x0A0B0C0D;

    base_addr     = 0x0A // MSB
    base_addr + 1 = 0x0B
    base_addr + 2 = 0x0C
    base_addr + 3 = 0x0D // LSB

Los procesadores de Motorola (los MAC's) son sistemas Big Endian.


= Middle Endian =

Los procesadores ARM son capaces de usar tanto Big como Little Endian, es un parámetro que se establece durante la configuración de la cross-toolchain. Por ese motivo, los procesadores ARM se conocen como sistemas Middle Endian.


=== Cierre ===

En esta ocasión redacto este breve post de contenido bastante técnico con el único objetivo de usarlo como recordatorio personal, pues se trata de una cuestión que siempre que la reviso creo tener dominada y cuando pasa un tiempo, vuelvo a confundir el orden correcto de los bytes. Espero que esta sea la definitiva!

Y sobre todo, espero que el post le sirva de ayuda a mas gente para que pueda aclarar esta duda en alguna ocasión.

Espero que lo hayáis disfrutado. Hasta la próxima!!


viernes, 7 de febrero de 2014

Baja de Orange por estafa comercial


Soy cliente de Orange desde hace mas de 6 años. Actualmente tenía contratado con ellos el servicio de ADSL + teléfono fijo. Su servicio de Internet por ADSL funciona bastante bien. Los grandes dolores de cabeza que he tenido con esta compañía siempre han sido por los mismos motivos: errores de facturación. Errores que ellos  siempre alegan a despistes, y siempre lo sienten mucho por las molestias ocasionadas.  Sin embargo, tras años como cliente, he aprendido que esos errores no son casuales, se repiten sistemáticamente, y si no estas muy pendiente del contenido de las facturas, de las fechas en las que se aplican los bonos de descuento, de guardar los números de referencia cuando te aplican un bono de descuento, siempre terminan cobrando de mas, (es curioso, porque en 6 años, nunca de menos!).





Reconozco que llamando por teléfono a atención al cliente, siempre me han atendido correctamente, y me han resuelto los problemas. Desde luego no sin antes perder un par de horas colgado del teléfono, tras varias llamadas a diferentes departamentos, hasta que por fin logras que te atienda la persona adecuada. Horas que pierdes de tu tiempo libre, y que desde luego, nadie te devuelve.

Pero esta vez no ha sido así. Esta vez uno de sus comerciales me ha estafado. Literalmente. Espero que mi experiencia os sirva al menos para que no os tomen el pelo a vosotros del mismo modo que me lo han tomado a mi.



= Antecedentes =

04 de Diciembre de 2013. Cumplo permanencia de 12 meses con la compañía. Busco alternativas mas económicas para cambiar de proveedor. Encuentro una oferta de ONO por 30€ + iva a 20Mb que mejora con creces la oferta que tengo contratada con Orange de 40,95€ (25,95€ cuota + 15€ alquiler de linea) + iva a 6Mb. Decido llamar al departamento de bajas para tramitar la baja, y cambiar posteriormente de operador.


= Descuento del 40% =

Tras negociar con el departamento de bajas, me ofrecieron un descuento del 40% sobre el precio de la cuota de 25,95€ durante 12 meses (10,38€ mensuales de ahorro que vienen a ser 124,56€/año). Puesto que con ese descuento, el precio del servicio  me sale poco mas o menos por el mismo precio que la oferta de ONO (aunque es cierto que ONO ofrece un servicio infinitamente mas rápido), opto por aceptar la permanencia de 12 meses para no perder mas tiempo tramitando la baja con Orange y la posterior alta con ONO.


= La estafa comercial =

30 de Diciembre de 2013. 20 días después de aceptar el descuento del 40%. Me llama una comercial ofreciendo un descuento del 10% sobre el importe de la cuota y un bono de 1000 minutos para llamar gratis de fijo a móviles de cualquier operador.

Le informo de que ya dispongo de un descuento del 40% durante 12 meses, y no quiero tener problemas con incompatibilidades de los descuentos. Que el bono de 1000 minutos no me hace ninguna falta.

La comercial me dice que el descuento del 10% es ACUMULABLE al 40% ya existente, y por tanto el descuento total será del 50%. Le pido documentación por escrito de todo lo que me ha ofrecido, para que me la envíe a casa. Me abre una incidencia anotando mi petición, y me da el numero de referencia. Acepto la oferta: un 50% de descuento en el precio de la cuota durante 12 meses... vendría a pagar 33,84€/mes (iva incluido) por un servicio de ADSL+telefono fijo, y llamadas gratis ilimitadas de fijo a móvil. Entiendo que es una buena oferta.



= La sorpresa =

La documentación solicitada nunca llega a mi casa. Pero si la siguiente factura. Veo que me han desactivado el descuento del 40%, y solo viene aplicado el descuento del 10% y el bono de llamadas de 1000 minutos. Llamo al departamento de atención al cliente. Me informan de que por políticas de empresa, solo se puede tener activo un descuento por cliente, que es el último aplicado(el del 10%). Y que por tanto, el descuento anterior del 40%, se ha perdido. (Ahhh, se siente!!) Me dicen que es imposible volver a activar ese descuento del 40%.



= La discusión =

Tengo una discusión con el comercial que me atiende, le pido la grabación del día que acepté el descuento del 10%, en el que me informaron de que el descuento era acumulado al 40% que ya tenía concedido. El comercial que me atiende dice que no disponen de esa grabación, que no existe y por eso no se pudo enviar a mi casa.

Indignado y con la sensación de estafado, le digo que si no existe grabación, como van a demostrar que yo acepte esa oferta del 10%? Me dicen que la oferta quedo registrada porque hay una incidencia anotada en mi expediente del día que la acepté. Genial. Indefension y abuso de poder total y absoluto.

Con un enfado monumental, le digo al comercial si es que cree que soy gilipollas. Si me hubieran informado de que se iba a desactivar el descuento del 40%, jamas en la vida hubiera aceptado ese 10%.

El comercial que me atiende me dice que el poco mas puede hacer. Me reconoce abiertamente que si hubiera sido informado correctamente, parece obvio que no hubiera aceptado ese descuento del 10%.  Afirma que el comercial que me atendió ofreciendo ese descuento del 10% acumulable, actuó de mala fe, probablemente porque iba a comisión por ventas, y que muchos de los comerciales que han actuado de esa manera han sido despedidos, y ni siquiera siguen trabajando ya en la compañía Orange. Entonces, no soy el  único??? Perfecto, y quien me arregla ahora esto???



= Tramitar la baja del servicio ADSL con Orange =

Puesto que no puede hacer nada mas, cabreado y tras mas de 1 hora al teléfono, solicito la baja inmediata del servicio de Orange.

Para mi sorpresa, la tramitación no puede ser inmediata. Para tramitar la baja (por si le sirve a alguien mas de ayuda), me explican que debo enviar una carta a esta dirección antes de 30 días, o la petición de baja se anula!!

    A la atención de Orange Home
    Apartado de correos 35046
    CP 28080
    Madrid

En la carta debo enviar:

    Fotocopia del DNI por las dos caras
    Numero de teléfono fijo dado de baja
    Motivo de la baja: en mi caso, "Mala venta comercial"
    Numero de referencia de la baja
    Firma

Por supuesto, también me informan que voy a tener que pagar 69,95€ + iva por no cumplir la permanencia del 10% durante 12 meses. Además, tengo que devolver el Router Livebox2 o me cobrarán 50€ adicionales. Les digo que el router se lo voy a devolver, pero que eso de pagar la penalización por permanencia, lo vamos a ver!!

Cuelgo la llamada. En ese momento pienso que enviar toda esta documentación por correo ordinario es un riesgo. Seguro que al final alegan que no llegó la carta, que se perdió, y en 30 días me anulan la petición de baja y me restablecen el servicio. Hacer el envío por correo certificado cuesta dinero, mas dinero!!

Así que vuelvo a llamar para que me den un numero de FAX al que poder enviar toda esta documentación, y así poder agilizar la tramitación de la baja. Consigo este numero de FAX para tramitar las bajas. A quien le pueda servir de ayuda:

    FAX BAJAS ORANGE: 918382701



= ¿Solución a la vista? =

El mismo comercial que atiende mi llamada en la que solicito el numero de FAX me explica que en mi historial de cliente ya han dejado una nota para que el próximo Miércoles día 12 de Febrero (dentro de 5 días) me llamen por teléfono para intentar mediar y solucionar el problema!! Pero de que van estos! No se podía solucionar nada hoy?? Clarooo, clarooo que nooo!!



= Divorcio definitivo =

Hoy a las 19:40h he enviado la documentación a través del FAX indicado, solicitando la baja inmediata de mi servicio de ADSL y linea de teléfono fijo. 

Esta vez el divorcio con Orange va a ser definitivo. Voy a darle una oportunidad a otras compañías de telecomunicaciones mas pequeñas, que probablemente no tengan un servicio ni una infraestructura tan grande, pero para que me roben los ricos, sinceramente, prefiero que lo hagan los pobres.


= Alternativa para contratar ADSL=

Esta oferta de PepePhone por 23,60€/mes (iva incluido) tiene MUY buena pinta:

http://adsl.pepephone.com/ppm_adsl/ppm_adsl/1/home/xweb_adsl.home.html


Es la mitad de lo que pagaba con Orange antes de la promoción del 40% (unos 45€/mes), y unos 10€/mes mas barata que la oferta de Orange con el 40% aplicado.

En su web, PepePhone adjunta esta documentación:

Ventajas del ADSL de Pepephone:

Atención al cliente telefónica gratuita 100% desde España (Mallorca) con agentes dedicados en exclusiva y con permisos para hacer casi todo lo que pidas (relacionado con el servicio eso sí :). Cualquier mejora de tarifa que se pueda hacer en un futuro se aplicará primero a los ya clientes, de forma automática, y aunque no se enteren, y , por supuesto, sin necesidad de enviar un mensajito para "apuntarse gratis a la rebaja". Al no disponer de línea de teléfono, el servicio en el hogar se dedica exclusivamente al ADSL, no siendo necesario instalar microfiltros ni cosas raras, y se evitan los problemas de compartir las dos cosas por el mismo cable. También te ahorras los problemas de las facturas de teléfono ya que todos los meses la factura será exactamente igual que el mes anterior, salvo que baje. Te podrás dar de baja del servicio cuando desees. Si es porque vas a otro operador no tendrás que pagar nada. Si necesitas desactivar la línea pagarás el pequeño coste administrativo de hacerlo a Telefónica indicado más arriba. Si el servicio no te funciona, no lo pagarás. [...]


= Cierre del post =

Seguro que a un monstruo como Orange le hace mucha gracia ver como este tipo de operadores virtuales empiezan a hacerles la competencia. Yo desde aquí recomiendo ya mismo el cambio de compañía. Y también os animo a hacer difusión de este post, para que otras personas no caigan en los mismos errores que yo he cometido.

Si conocéis cualquier compañía de ADSL que mejore la oferta comercial de PepePhone, os animo a que pongáis un comentario en el blog, explicándome las virtudes de dicha compañía. A ver si por lo menos Orange pierde algún que otro cliente gracias a este post y a sus malas prácticas comerciales.


Visitas:

Seguidores