domingo, 28 de julio de 2013

Porque Aprender Assembler

Primero una consideración, si estas leyendo este post es probable que tengas alguna motivación adicional para aprender el lenguaje ensamblador que podría ser tienes algún curso de ensamblador en la universidad, queres impresionar a tu novia mostrandole tu "leetness", o no tenes novia y simplemente queres aprender ensamblador (supongo que han de haber otras razones...).
 
Razones para aprender ensamblador
  • Tiene cierta belleza realizar programas con un tamaño muy pequeño y muy rápidos
  • Se tiene un mayor conocimiento de las computadoras así no te pones tan extrañado cuando ves un mensaje tipo:
 "The instruction at "0x00ccd2cd" referenced memory at "0x00000000", The memory could not be "written" "
  • Es un reto, y si sos de las personas que disfrutan de un buen desafío aprender ensamblador requiere cierto conocimiento de como funciona a bajo nivel el ordenador, el direccionamiento de la memoria, registros de CPU, uso de segmentos.
  • Los programadores con experiencia en ensamblador suelen producir un código mas rápido en lenguajes de alto nivel.
  • Los si programás en ensamblador vas a ser mas disciplinado (si no tenes cuidado de lo que escribís tu programa va a morir de forma muy dolorosa).
  • Es divertido
  • Software de calidad puede ser escrito en ensamblador, sino preguntenle a Steve Gibson creador de Spinrite.
  • Nikolaus Wirth y su "El software se ralentiza mas deprisa de lo que se acelera el hardware", o que la computadora que envió al hombre a la luna el Apolo Guidance Computer tenia 64Kbyte de memoria (muy poquita memoria) y operaba a 0.043Mhz (muy poquita capacidad de procesamiento). Un cliente de twitter utiliza mas memoria que la utilizada para enviar a un hombre a la luna y mas recursos de procesamiento son utilizados en el conjunto de maquinas que se encargan de la transmisión de un tweet que los que se utilizaron para enviar a un hombre a la Luna! solo para que alguien inmortalice el estado de su estomago twitteando "tengo hambre" oh!, la humanidad!.
Para que vas a utilizar ensamblador

  • Para hacer demos!

  • Programar drivers para dispositivos, si te gusta la electronica y te inventas algún dispositivo interesante vas a tener que utilizar C o ensamblador para controlarlo desde la PC.
  • Optimizar ciertas segmentos de codigo en lenguajes de alto nivel.
  • Divertirse, hay proyectos muy interesantes escritos completamente en ensamblador como MenuetOS
Para que no vas a utilizar ensamblador
  • Programarte un "Crisis" por completo.
  • Crear aplicaciones multiplataformas porque los programas en ensamblador varían de un Sistema Operativo a otro y de una Arquitectura de Hardware a otra.
  • Sustituir a un lenguaje de alto nivel como java o .net
En conclusión programar en ensamblador te concede un vasto poder sin embargo no es para los débiles de mente, para forjar programitas para gobernarlos a todos se requiere mucha experiencia, en estos tiempos en que las plataformas móviles y el desarrollo web están en auge, puede que pareza un poco pasado de moda  y hablando desarrollo web luego hablamos sobre asm.js.

Recursos recomendados

  • El projecto MASM32: que incluye una gran cantidad de librerias optimizadas para el desarrollo de aplicaciones de forma mas rapida y sus archivos de ayuda como masm32.chm donde está la historia del proyecto y una introducción al uso de las librerias y el archivo masmlib.chm donde esta referencia de las librerias.
  • El libro The INTEL Microprocessors de Barry B. Brey es un buen libro sobre programación en ensamblador aunque un poco veterano es facil encontrar en internet.
  • Un buen editor de  texto yo recomiendo Vim.

viernes, 14 de septiembre de 2012

De Grid Computing

Un concepto interesante en informática es el de Grid computing, computación distribuida, computación en rejilla o en malla a continuación vemos el porque.

De forma sencilla el grid computing consiste en que una computadora central envía datos e instrucciones sobre que hacer con estos datos a otras computadoras, para que estas ejecuten las instrucciones sobre los datos dados y devuelvan como resultado información útil.

Primero explicar computación distribuida es dividir un problema y mandarle a diferentes computadoras/ordenadores también denominados nodos de la rejilla o grid.

Para explicarlo de forma sencilla digamos que yo he hecho un programa distribuido para resolver un problema tenemos Juan y Pedro que tienen sus computadoras les he dicho instalen mi programa en sus computadoras para ayudarme a resolver el problema entonces el nodo principal (mi computadora para decir algo) envía los datos crudos del problema y también las instrucciones a los ordenadores de Juan y Pedro, esos ordenadores procesan los datos con las instrucciones que se les han enviado y envían los resultados al nodo principal.

Algo interesante también es que los nodos no necesariamente tienen que ser PC's, puede ser todo dispositivo que se conecte a internet y para el cual se pueda hacer un programa cliente (esto en teoría significa que bien podrías utilizar un teléfono android como nodo del grid, aunque por supuesto habrían consideraciones que hacer como que tan útil sería por lo de que los teléfonos trabajan con baterías)

Bueno imaginémonos que necesitamos un problema para el cual se necesita una gran cantidad de poder de procesamiento que aquello del core i7 no basta ni varios pares de estos microprocesadores, digamos que se trate de un problema que pueda ser dividido en varias partes vamos a poner ejemplo hipotético y un tanto absurdo.

Un problema de calcular el cuadrado de los números del 1 al 1000, para que alguien querría hacer esto? bueno... para generar números aleatorios o algo por el estilo, y si, fácilmente se puede hacer utilizando la computadora mas lenta que tengamos a disposición, pero solo es para ejemplificar.

Ahora normalmente le dirías al la computadora que comience con el primer numero luego el siguiente y te saldría algo como lo siguiente:

1² = 1
2² = 4
3² = 9
.
.
.
1000² = 1000000

Ahora en computación distribuida lo que podrías hacer es lo siguiente, decir, a un nodo enviaré los números del 1 al 300 a otro enviare los números del 301 al 700 al nodo 2 y 701 al 1000. Junto a los números también ir de enviar instrucciones.

Así que los nodos luego de recibir datos e instrucciones se ponen a trabajar, al terminar de procesar los datos con las instrucciones dadas, estos nodos me envían los resultados luego con los resultados puedo hacer lo que yo quiera.

Con este ejemplo he tratado de dar a entender el conceptos, en la practica se pueden tratar diversos problemas desde buscar vida extraterrestre (seti@home) hasta romper contraseñas por medio de fuerza bruta (password cracking) en la practica asi que voy a mencionar alguna de sus aplicaciones algunas de las mas interesantes.

Hay empresas que crean software especializado y orientado hacia el grid computing como el boinc
Recuerdo que Digsby (un cliente de mensajería instantánea muy bueno y gratuito) tenia hace cierto tiempo un modulo que se llamaba "Digsby Research Module" lo que hacia este modulo era que cuando uno no utilizaba la computadora comenzaba a funcionar como nodo del grid utilizando el poder de cpu y la memoria ram de los ordenadores en donde esta opción estaba activada.

A mi me pareció una forma muy interesante de financiar el programa para mantenerlo gratuito, sin embargo a muchos usuarios no les gustó la idea (bueno, si tienes tu computadora encendida en la noche mientras se hacen algunas descargas el consumo de energia en realidad iba a salir caro).

Según el wiki del modulo, los tipos de proyectos en los cuales se puede utilizar al menos los que son sin fines de lucro son: Help Conquer Cancer, Discovering Dengue Drugs, FightAIDS@Home, y The Clean Energy Project asi como las aplicaciones comerciales que incluyen: descubrimiento de drogas farmacéuticas, predicciones sobre la economía e indexado web.

También mencionaba el proyecto SETI@home que es probablemente uno de los proyectos que mas suenan en la web a pesar de su aparente falta de éxito, una de las cosas mas interesantes es que debido a este proyecto se ha desarrollado boinc




Bueno las ventajas son claras:
  • Se posee de increíble poder de procesamiento, suena exagerado pero ha veces se puede considerar el uso de instalaciones dedicadas para computar un problema y esto implicaría muchos costos como espacio, mantenimientos de los equipos e instalaciones.
  • Escalabilidad, con esto nos referimos a que si se necesita mas potencia no necesariamente hay que invertir mas en infraestructura física, sino conseguir mas clientes o nodos, un poco adelante explicaré como funcionan algunas empresas que básicamente venden poder de procesamiento de computación distribuida.
  • Redundancia, es posible que alguno o mas de alguno de los nodos por problemas de hardware arroje resultados incorrectos, para resolver este problema se puede enviar la misma información a mas de un nodo y luego comparar resultados.
  • Ubiquidad ya he mencionado la capacidad de funcionar ordenadores con distintas configuraciones como sistemas operativos, capacidades o especificaciones de hardware y en diferentes tipos de redes

Desventajas, a pesar de que es muy útil e interesante la computación distribuida tienen algunos problemas.

  • No es aplicable a todos los problemas, hay problemas que no pueden ser tratados bajo el paradigma de computación distribuida por ejemplo aplicaciones en tiempo real como videojuegos.
  • Es compleja: Es necesario replantear los problemas para que su resolución utilizando el grid sea viable, esto implica un esfuerzo extra en análisis, también las consideraciones técnicas como lenguajes de programación a utilizar y plataformas en las que una aplicación de este tipo puede ejecutarse así como la infraestructura del nodo central y también la de red.
  • Es heterogénea: Al poder ser ejecutada desde una gran cantidad de dispositivos, también es necesario considerar la capacidad de procesamiento, cantidad de memoria, velocidad de la red en la que se encuentra el nodo para la asignación de trabajo.
  • La red, uno de los pilares fundamentales del grid es precisamente la red, tanto la del nodo principal como la de los clientes, en el caso del nodo principal el problema consiste en que siempre se necesitaría una enorme cantidad de ancho de banda y en el caso de los nodos la inestabilidad de la red para cada uno de los nodos hace que pueda ser difícil estimar el tiempo total que puede tardarse en enviar y/o recibir los datos.



lunes, 9 de abril de 2012

La pesadilla de las interfaces gráficas en Linux

Yo me bajé Linux Mint para recién adquirida laptop, quería algo simple algo sencillo que cualquiera de mis hermanos pudiese utilizar y se viera bonito y sí, Linux Mint tiene todo eso hasta que quise cambiar la apariencia del sistema es decir utilizar otro tema, cosa que con GNOME 2 era como dar un clic, algo que en Windows es igual... pero busque y busque y no hubo forma sencilla (es GNOME shell debería ser mas sencillo que GNOME 2) pero no lo logré...

Hace años también probé este entorno de escritorio KDE el entorno mas visualmente impresionante que conozco ahora la razón por la que no utilizo ni GNOME shell ni KDE es realmente sencilla KDE es inestable y pesado (aún si es estable ahora sigue siendo pesado) y GNOME shell está verde eso fue de lo que mas me pude dar cuenta al probar Linux Mint y Unity realmente no estoy seguro de la diferencia entre Unity y GNOME shell,los 2 entornos me parecen demasiado inestables digo esto porque la PC se congelaba al hacer alt tab en ocasiones así que voy a esperar a que ambos proyectos maduren (me gustan las cosas estables es la razón principal por la cual utilizo GNU/Linux en lugar de Windows).

Ubuntu Unity un poco tablet pero le sobra el desktop
Bonito, pero Pesado



 La solución, pues como me gustan las cosas estables y si son ligeras mucho que mejor, utilizo XFCE un proyecto muy maduro ya es increíblemente estable y fácil de utilizar la distribución Xubuntu como siempre al ser parte de Ubuntu tiene una gran base de usuarios que es importante que una distribución tenga (y en retrospectiva no entiendo el porque de Linux Mint pero si me parece un excelente proyecto).


Perfecto o casi

Para concluir que las interfaces gráficas cambien y evolucionen con el pasar del tiempo es una cosa buena porque con nuevos dispositivos no se pueden utilizar las mismas cosas (Windows XP en una tablet por ejemplo...) lo que no es bueno es olvidar que por ejemplo una tablet no es una PC de escritorio por tanto hacer una interfaz que funcione tanto en tablets como para escritorio podría no ser una decisión tan sabia, una interfaz realmente optimizada para un dispositivo con pantalla táctil es mejor que una medio optimizada para el escritorio y medio optimizada para una tablet.

Digo Pueden funcionar mejor ambas cosas, pero no mezclándolas.
 
Siéntete libre de copiar, imprimir crear trabajos derivados de este sitio, compartir y si quieres indicar la fuente de este articulo.

sábado, 9 de julio de 2011

La menospreciación de la seguridad informatica en America Latina


Los países tercermundistas, siempre están atrasados tanto económicamente como tecnológicamente con respecto a los países de primer mundo debido a esto y a la falta de educación en el área tecnológica (así como en diversas áreas) el problema que surge debido a la seguridad informática se vuelve bastante grave si, en países como Estados Unidos, España o Alemania por nombrar algunos las amenazas informáticas si que son una amenaza seria y son tomadas en cuenta, por ejemplo al tener políticas tanto en empresas como en instituciones gubernamentales, en países como El Salvador (y no estoy haciendo una comparación) esto pocas veces se tiene en cuenta.

Si bien hay una preocupación por la seguridad es mas por la seguridad física de las cosas, no olvidemos que en muchas partes de América Latina la delincuencia es un problema muy común sin embargo contra esa delincuencia se toman medidas de alguna forma, el problema es que la tecnología avanza y si bien es mas lento dicho avance en países tercermundistas existe, no olvidemos a la nueva generación de nativos digitales y el enorme crecimiento que ahora ha tenido Internet.

Si bien la educación formal era antes algo mas bien necesario para posibles ciber criminales ahora toda la información se puede encontrar en la red y no faltarán aquellos que por frustración o falta de oportunidades dediquen sus esfuerzos a lograr una forma mas lucrativa aunque no siempre licita de usar la tecnología, sabemos que existen personas que tienen una facilidad al hacer uso de la tecnología (un recordatorio es no criminalizar a los jovenes el talento puede ser aprovechado para bien).

No es bueno creer que los "hackers" mas peligrosos son los que salen en las noticias, de hecho a los que nunca atrapan porque no comenten muchos errores esos si que preocupan.

Para poner un ejemplo sobre como debe de preocuparnos esto, existe un kit para interceptar comunicaciones en una red GSM, es decir que la seguridad que creemos tener cuando hablamos con los celulares es cuando menos cuestionable, es difícil imaginar las aplicaciones que por ejemplo un narcotraficante u otro criminal con suficientes recursos podría darle a dicha tecnología si se pusiera manos a la obra.

Evidentemente debemos estar conscientes usuarios como empresas sobre la importancia que tiene la seguridad informática, desde las políticas manejo de la información (que información es sensible y no debería de estar disponible públicamente así como entrenamiento del personal para evitar ataques de ingeniería social), hasta que software como antivirus, firewalls y otro software de protección se utilizarán.

viernes, 1 de julio de 2011

IV Congreso Centroamericano para la computación y el desarrollo COMPDES 2011

Otro evento del que debes estar pendiente si eres estudiante o profesional en el área de informática es este IV Congreso Centroamericano para la computación y el desarrollo COMPDES 2011 se realizará en la Sede central de la Universidad de El Salvador, tendrán conferencias, talleres  sobre temas de actualidad informática.

¿Cuando es este congreso?
Del 27 al 29 de julio de 2011.

¿Cuanto cuesta?
Hasta 5 días antes del evento.
5$ para estudiantes de la UES.
10$ para estudiantes de otras instituciones o universidades.
25$ para profesionales.

El día del evento

8$ para estudiantes de la UES.
15$ para estudiantes de otras instituciones o universidades.
40$ para profesionales.

No se ustedes pero yo me apunto!.
Y aquí les dejo el afiche





Mas información en http://www.ues.edu.sv/content/congreso-informatica?size=_original