lunes, 11 de junio de 2007

Desfragmentación

charlie_mtp

Seguro muchos de nosotros alguna vez hemos liado con la desfragmentación del disco duro, memoria RAM o simplemente hemos oído hablar de ello. Pues bien, esa fue la idea al escribir este documento: informarnos más acerca de cómo funciona, y espero que sea el primero de una serie de artículos relacionados con el manejo de archivos (principalmente Windows) en disco duro y memoria.

La fragmentación es un problema que surge debido al ordenamiento interno de los datos en algunos sistemas de archivos. Ocurre a menudo en el sistema operativo Windows, aunque también afecta a otras plataformas en una escala mucho menor. También se produce fragmentación dentro de la memoria de la computadora (memoria RAM) cuando se asignan los procesos a los diferentes bloques de memoria. Existen dos tipos de fragmentación:

Fragmentación interna::

Los discos duros tienen un tamaño mínimo de bloque, que es llamado clúster. Este tamaño varía según el sistema de archivos y el tamaño total de la partición. Por eso se sugiere no disponer de un gran tamaño de partición en los discos nuevos donde la capacidad es muy importante (el tamaño será tocado en otro artículo más adelante). Por ejemplo, si nuestro clúster es de 16 Kb (16 384 bytes), por más que un archivo ocupe menos, en nuestro disco ocupará 16 Kb. Esto sugiere una pérdida de ese espacio que dice utilizar, pero no utiliza. Por eso, en nuestro ejemplo, un archivo de 3 Kb ocupará en nuestro disco lo mismo que uno de 10 Kb, o sea, 16 Kb. Esa pérdida de espacio se denomina fragmentación interna y no se corrige con el desfragmentador, sino disminuyendo el tamaño de la partición.

Fragmentación EXTERNA::

Este tipo de fragmentación aparece como consecuencia de las distintas políticas de ajuste de bloques que tiene un sistema de ficheros, o al utilizar asignaciones dinámicas de bloques en el caso de la memoria. En el sistema de ficheros, la sucesiva creación y eliminación de ficheros de distintos tamaños puede conducir al aislamiento de los bloques libres de un disco y, dependiendo de la política de ajuste, su no elección para futuros ficheros. En la memoria del sistema, la fragmentación se produce cuando los procesos asignados han ocupado posiciones no contiguas de memoria dejando demasiados bloques libres de pequeño tamaño, en los que no "caben" nuevos procesos.

En sistemas de ficheros la desfragmentación trata de resolver este problema, alineando los bloques de datos contiguos y juntando los bloques libres, produciendo así fragmentos mayores que sí serán elegidos para futuros ficheros. En la memoria principal se soluciona compactando los procesos para que éstos ocupen posiciones contiguas y dejar los bloques libres juntos, o también se soluciona con la paginación de memoria (este es otro tema que pienso tomar más adelante).

Desfragmentación::

Este proceso consta de ordenar los trozos de información distribuida a través de todo el disco, para mejorar la velocidad de acceso y distribuir de mejor forma el espacio libre del dispositivo. Como este proceso reorganiza partes de archivos, requiere de suficiente memoria para realizar los movimientos de dichos trozos de información. Al mover en forma física la información, la estructura lógica no sufre alteraciones.

Aspectos de la desfragmentación::

En Windows, la presencia de archivos inmovibles del sistema o que el desfragmentador no moverá para simplificar su tarea (sobre todo con el archivo de intercambio o swap file), puede impedir un buen porcentaje de desfragmentación en el disco.

Ciertos sistemas de archivos son más susceptibles a cambios por desfragmentación que otros. Por ejemplo, una partición del tipo FAT se fragmenta más rápido que una de partición del tipo NTFS, ambos propios del sistema Windows. Todo lo contrario ocurre en muchos sistemas de archivos del tipo Unix que no requieren desfragmentaciones en general, debido a que buscan que la fragmentación se mantenga en un punto donde no sea necesario desfragmentar, mediante el uso de nodos de posición.

Utilidades::

Los programas de desfragmentación, por lo general, vienen incorporados al sistema operativo (excepto en Windows NT 4). También existen aplicaciones externas, los cuales poseen opciones más avanzadas que los propuestos por los fabricantes del sistema operativo.
El desfragmentador más conocido es el DEFRAG, que es usado en MS-DOS y en las plataformas de Windows. Puede ser encontrado en las versiones de Windows en Inicio » Programas » Accesorios » Herramientas de Sistema.

Continuar leyendo

lunes, 4 de junio de 2007

e-volución: ¿un futuro superior?

ZorphDark [blackhat4all@gmail.com]

En la década de 1980, tras un largo período de investigaciones, se logró exponer en las pantallas de rayos catódicos imágenes realistas que representaban nuestro mundo. La creación de potentes tarjetas gráficas, la reproducción de sonido digital de alta calidad y el desarrollo de la velocidad de los procesamientos digitales, permitieron la introducción y el progreso de la multimedia en todas las computadoras personales. Esto conllevó a impresionantes mejoras en la concepción y el diseño de sistemas operativos y programas dotados de una interfaz gráfica, además del perfeccionamiento de los videojuegos y aplicaciones que requerían del uso de imágenes y sonido.

El acceso a la computación por parte de un creciente grupo de personas no especializadas en la materia fue posible gracias a esa “explosión” gráfica. Este incremento de usuarios se hizo notar aún más con la aparición de la Web en 1989 y la desenfrenada expansión de Internet en los años 90. El objetivo del desarrollo de la informática y las nuevas tecnologías cambiaba repentinamente su rumbo. Con su corta edad y su escasa madurez, éstas comenzaban a intervenir en todas las esferas de la economía y en gran parte de las sociedades desarrolladas de una forma acelerada.

El nuevo mundo

Mucho antes de haber sido discutida seriamente por los políticos, psicólogos, sociólogos y filósofos, la “nueva era” de la información y las comunicaciones se adentraba con gran fuerza en el quehacer y en el pensar de muchas personas. La nueva generación y una parte importante de los adultos, comenzó a ver el ciberespacio como algo interesante, eficaz, e incluso, como una vía de escape a los problemas cotidianos.

Tras un caudal de estudios e investigaciones a lo largo de muchos siglos por tratar de esclarecer materialmente el mundo que nos rodea, muchos hombres de ciencia, precursores de las tecnologías actuales, nos han dejado el problemático legado de asimilar un nuevo mundo, muy diferente a las concepciones físicas con que se ha interpretado el nuestro. Nos encontramos ahora ante un universo colmado de sorpresas e interrogantes. Con el paso del tiempo, la ciencia ha adquirido nuevas dimensiones: a los científicos que intentan interpretar el mundo real, se le suman aquellos que se convierten en creadores y programadores de nuevos espacios dentro de un vasto territorio poco explotado en relación con sus dimensiones y sus riquezas tecnológicas y filosóficas.

La otra cara…

El problema está en que las nuevas tecnologías se desarrollan mucho más rápido que la conciencia humana. La informática y las redes han permitido un considerable desarrollo de la economía, la educación, la medicina y las comunicaciones, pero ¿hasta dónde? Esta revolución de finales del siglo XX ha sido tan silenciosa como apresurada. Muchos futuristas fanatizan con la idea de que estamos ante una nueva civilización, llena de esplendor y de maravillas, y otros muestran el pesimismo de terminar con una guerra devastadora contra máquinas dotadas de gran inteligencia artificial. La respuesta no está en profetizar, sino en el uso que se le dé a ese potencial tecnológico. Nuestro futuro depende del abandono de los pensamientos con fines bélicos y económicos, que ponen en juego nuestro destino y el fruto de los brillantes logros y descubrimientos a lo largo de la historia de la humanidad.

También es una realidad de que hay que conllevar este desarrollo con el de los países subdesarrollados, que carecen incluso de una energía eléctrica y telefonía que satisfaga las demandas. Se debería pensar seriamente en gastar menos recursos en robots militares y asignar más en ayuda de los que no tienen con qué alimentarse. Pero aún así, en medio de esa desigualdad, hay centenares de logros científicos que ocurren a diario que no se pueden obviar. La puesta en práctica de muchos de ellos puede ser tan dañina como una guerra, por estar financiados por entidades y gobiernos con intereses contrarios al desarrollo de la humanidad. Hay que tener muy en cuenta el uso que se le dé a la inteligencia artificial, a la química y a la genética. Vivimos una etapa muy interesante, donde el hombre ha pasado del modo de interpretación al de creación, y cualquiera de esos novedosos inventos puede acarrear un desastre global. El hombre actual se orienta mucho a lo nuevo, lo desconocido… ¿podrán la ciencia y las tecnologías ayudarnos a corregir el mundo en que nos encontramos? Depende de nosotros, de nuestras ideas y de nuestro esfuerzo.

Creando nuevas entidades

A la par de los biólogos en su afán de creación de organismos genéticamente modificados en el mundo real, los programadores se encuentran inmersos en el desarrollo de otro tipo de entidades, que se diferencian principalmente por no existir físicamente. Se pone en juego nuestra visión material del mundo y nuestro papel como “simples humanos” y no como “dioses”. El esfuerzo de los genetistas y de los cibernéticos continúa siendo un dilema, no sólo por su eficacia, sino, por su lugar en la evolución del hombre y en su futuro inmediato. Concebir clones y organismos al gusto propio de uno es tan interesante y riesgoso como la implementación de inteligencia en entidades mecánicas o virtuales.

Nos alejamos de los tiempos en que los dibujos de paisajes, el cine, las imágenes digitales realistas y las animaciones con efectos especiales eran un arte asombroso. Estamos ahora frente a creaciones artísticas de mayor magnitud. Dejamos de ser espectadores de una obra para convertirnos en creadores de un mundo inimaginable en la actualidad. Con el desarrollo científico-técnico, nuestro espíritu creativo se ha desarrollado aún más, al punto de concebir un ser mitológico y hacerlo realidad en pantallas catódicas, de plasma o en un holograma.

La interactividad de la multimedia ha abierto un portal que nos acerca cada día más a la dimensión de lo “no real” de los bits. El hecho de poder conversar con softwares inteligentes y poder resolver complicados problemas lógico-matemáticos ha brindado un gran impulso a nuestra imaginación, hasta el punto de hacer realidad nuestros pensamientos. La ciencia-ficción es incapaz de predecir hasta donde podrá llegar nuestro ingenio. Este es nuestro presente. ¿Qué será del futuro? ¿Qué sucederá cuando seamos capaces de crear una realidad virtual en la cual podamos adentrarnos y programar nuestro entorno? ¿Qué ocurrirá cuando la ciencia y la biología permitan la incorporación de “mejoras” en nuestro organismo? ¿Qué pasará cuando podamos intervenir en nuestro destino? ¿Nos convertiremos en nuestros propios dioses? Quizás esto no sea un sueño.

Inteligencia artificial ¿hasta qué punto?

Es difícil imaginar que el hombre, que aún no conoce los misterios de su cerebro y la metodología de sus pensamientos, pueda concebir una máquina que iguale su potencial. Algunos creen que para el 2020 podamos tanto viajar a Marte como conversar con una computadora “humanizada”. ¿Qué hay de fantasía o realidad en esto último? Si bien mucho esfuerzo y recursos económicos y financieros podrían poner los pies de un astronauta sobre las arenas de nuestro planeta cercano, la “inteligencia definitiva” del software de un cyborg está un poco distante de cumplirse. El sistema binario no brinda capacidades de cálculo suficientes como para interpretar la lógica de los sentimientos, las decisiones personales y el comportamiento propio de un ser humano. Sería muy difícil e incluso imposible representar nuestro mundo y las más variadas ideas con fórmulas matemáticas.

A pesar de ello, el cómputo con ADN en cuatro estados, la mecánica cuántica, el procesamiento holográfico y los híbridos neurodigitales -que combinan neuronas vivas con chips-, nos alejan de nuestras fronteras y muestras nuevos horizontes dignos de explorar. La velocidad de procesamiento y la capacidad de almacenamiento de las computadoras actuales con la ayuda de la lógica de un cerebro humano sería suficiente para superarnos en todo sentido. ¿Será posible esto? ¿Hasta qué punto?

e-volución: Evolución Electrónica

La instauración de un procesamiento no lineal y multifuncional podría acercarnos un poco al sueño de compartir nuestro mundo con máquinas realmente útiles y autónomas, que tracen metas y tomen decisiones por sí mismas. De este modo nos acercamos a otro problema bien descrito en los libros de ciencia-ficción. Es necesario enfatizar en que nuestra evolución debe ir por encima de la evolución electrónica. De hecho, es hora de que se elabore un esquema de análisis crítico capaz de tener en cuenta los nuevos desafíos que nos impone la ciencia y la técnica, para poder darles un sentido, y de esa forma, ayudarnos a nosotros mismos a trazar un camino seguro por el cual transitar.

La solución no está en frenar o luchar contra la evolución de la ciencia y la tecnología, la creación de robots inteligentes y de organismos genéticamente modificados. Esa no es la vía. Hay que desarrollar libremente el fenómeno Internet, la creación de softwares libres y el intercambio científico sin intereses de otro tipo que no sean el perfeccionamiento del hombre dentro de la sociedad y la naturaleza en que se desenvuelve. Cualquier intento de censura cerrará puertas que no se volverán a abrir o se abrirán del modo incorrecto. Hay que cultivar en todas las personas en las que recaiga el peso de la creación del nuevo mundo (ya sean programadores, políticos, filósofos, económicos, artistas, etc.) una concepción humanista de sus pensamientos.

El ciberespacio, en vez de globalizar el mundo en una idea monopolizadora, entrará a medida que su desarrollo lo permita, en cada una de las culturas e ideologías del planeta, para que la interpretación de la vida y la historia humana tenga lugar en sus más variadas concepciones. La llamada brecha digital es un factor que debe eliminarse para la diversificación de las culturas en Internet. El libre acceso a la información fomentará el desarrollo del “nuevo” y el “viejo” mundo, enriquecerá las mentes más enajenadas y contribuirá en gran medida a la evolución del intelecto humano. Tanto como nadie debe perder en este proceso de cambios el “instinto de lo real”, nadie se debe quedar atrás en la revolución de las tecnologías e información. Debemos estar dispuestos a entrar en este universo de información y conocimientos inagotables con mucha precaución, preparación y deseos de lograr para la especie humana un futuro superior.

Para saber más...

Continuar leyendo

Introducción a .NET

Krlo [blackhat4all@gmail.com]

.NET es un proyecto de Microsoft para crear una nueva plataforma de desarrollo de software. Microsoft intenta desarrollar una estrategia horizontal que integre todos sus productos, desde el sistema operativo hasta las herramientas de mercado. Esta tecnología es una respuesta a la tecnología Java de Sun Microsystems, para acaparar el creciente mercado de los negocios en el mundo Web. Microsoft anunció la iniciativa de .NET en Julio del 2000. Ya en Abril del 2003, la versión 1.1 de .NET Framework estaba en nuestras vidas, y para siempre.

Bases

Para aprovechar al máximo las ventajas de .NET, es imprescindible conocer cómo funciona y qué brinda.
El Framework es la base de toda la plataforma, es la infraestructura que reúne un conjunto de lenguajes, herramientas y servicios que simplifican el desarrollo de aplicaciones. Algunas biografías incluyen el ASP.NET.

1. El conjunto de lenguajes de programación: C# (nació con .NET, sin duda el paradigma de esta tecnología), Visual Basic, Delphi (Object Pascal), C++, J#, Perl, Python, Fortran y Cobol.NET.

2. La Biblioteca de Clases Base o BCL: Se clasifica en tres grupos claves: ASP.NET y Servicios Web XML, Windows Forms y ADO.NET. Su función es brindar los servicios necesarios para realizar las operaciones básicas involucradas en el desarrollo de aplicaciones, entre otras la interacción con los dispositivos periféricos, manejo de datos (ADO.NET), administración de componentes web (aquí es donde entra ASP.NET), herramientas de gráficos (GDI+), operaciones aritméticas, interacción con el API Win32,... Prácticamente todo lo necesario para trabajar lo brinda la BCL.

3. El Common Language Runtime (CLR): El componente más importante del framework es el CLR (motor común de ejecución). Si eres programador de Java, piensa en el CLR de .NET como el equivalente del Java Virtual Machine (JVM). Si no conoces Java piensa en el CLR como el corazón y el alma de la arquitectura .NET. A un alto nivel, el CLR activa los objetos, realiza chequeos de seguridad sobre ellos, los coloca fuera de la memoria y destruye los no referenciados (Garbage Collection).

Cómo se crean aplicaciones.

1. Elegir un compilador: .NET ya soporta más de 20 lenguajes, cada uno con un compilador particular, aunque todos con un fin común como veremos después. Elegir un lenguaje no es tan difícil, el mayor peso lo da nuestros gustos y la experiencia que tengamos con alguno de ellos. Se recomienda utilizar uno o dos para obtener mayores beneficios del CLR.

2. Compilar el código a Lenguaje Intermedio de Microsoft (MSIL): Toda aplicación en .NET está compuesta por ensamblados, toda DLL o EXE es un ensamblado. Los mismos, además de un manifiesto, metadatos y recursos, contienen código intermedio (IL). El IL es común a todos los lenguajes, y todos los lenguajes se convierten a IL. ¿Cómo se logra esto?
El Common Type System (CTS) es un conjunto de reglas para declarar, usar y administrar tipos. Establece una plataforma que permite integración de lenguajes, seguridad en los tipos y un alto rendimiento de ejecución de código. Los tipos creados en .NET deben cumplir las reglas del CTS.
El Common Languague Specification (CLS) es un convenio entre los diseñadores de lenguajes y los diseñadores de .NET Framework. Está formado por un subconjunto del CTS y un conjunto de reglas y restricciones que posibilitan a un compilador, agregar un lenguaje a la plataforma .NET. Todos los lenguajes no tienen reglas iguales. Por ejemplo, C++ es case-sensitive, y VB.NET no. Con el objetivo de que todos vayan por la misma línea, Microsoft publicó el CLS.
Todo esto posibilita crear una clase Vehículo en Visual C++, implementar un auto en C# y un avión en VB, ambos herederos de Vehículo. Para completar podemos crear el ConductorDeVehículo en Java #. Polimorfismo entre lenguajes!!!.

3. Compilar MSIL en código nativo: En tiempo de ejecución, un compilador Just-In-Time (JIT), componente del CLR, convierte MSIL en código nativo. Durante esta compilación, el código debe pasar un proceso de comprobación que examina el MSIL y los metadatos para averiguar si el código garantiza la seguridad de tipos. El JIT es muy interesante, sólo compila a código nativo cada parte del IL una sola vez. La primera vez que se necesita un método se compila y se guarda, la próxima sólo se busca lo anteriormente compilado y se ejecuta este. En parte, por eso se denomina Justo a Tiempo, en el momento preciso compila lo únicamente necesario, si un método de la aplicación nunca se requiere en ejecución, nunca se compila, y se hace sólo una vez.

4. Ejecutar el código: El CLR proporciona la infraestructura que permite que la ejecución tenga lugar, así como una amplia gama de servicios que se pueden utilizar durante la ejecución. El CLR tiene los siguientes componentes:

El Execution Engine es el componte encargado de dirigir toda la ejecución de los programas, usa los demás componentes del CLR para cargar y descargar código, verificar el IL, manejar la memoria, mantener la seguridad de tipos, manejo de excepciones y la colocación y liberación de objetos. El último paso es realizado por el Garbage Collector, sin duda una herramienta vital, pues nos aísla de tener que pensar en liberar memoria como en C++.

Las ventajas más importantes que proporciona .Net Framework son:

  • Código administrado: El CLR realiza un control automático del código para que éste sea seguro, es decir, controla los recursos del sistema para que la aplicación se ejecute correctamente.
  • Interoperabilidad multilenguaje: El código puede ser escrito en cualquier lenguaje compatible con .NET, ya que siempre se compila en código intermedio (MSIL).
  • Compilación just-in-time: El JIT compila el código intermedio (MSIL) generando el código máquina propio de la plataforma, sea Windows o Mac. Se aumenta así el rendimiento de la aplicación al ser específico para cada plataforma.
  • Garbage collector: El CLR proporciona un sistema automático de administración de memoria denominado recolector de basura. El CLR es el encargado de detectar cuándo el programa deja de utilizar la memoria y la libera automáticamente.
  • Seguridad de acceso al código: Se puede especificar que una pieza de código tenga permisos de lectura de archivos pero no de escritura. Es posible aplicar distintos niveles de seguridad al código, de forma que se puede ejecutar código procedente del Web sin tener que preocuparse si esto va a estropear el sistema escribiendo o cambiando donde no debe.

Futuro de la tecnología:

El .NET Framework 3.0 es el nuevo modelo de programación para Windows. Combina la funcionalidad de sus anteriores con cuatro nuevas tecnologías, que empezaremos a oír cuando tengamos en Cuba una mayor proliferación del Vista. En la figura podemos apreciarlas en azul oscuro:

  • Windows Presentation Foundation (WPF o Avalon): Provee a los desarrolladores y diseñadores de un modelo de programación unificado para crear aplicaciones Windows que mezclan la UI con contenido multimedia. Podemos dividir el proceso en el diseño y las funcionalidades, para unirlos en el resultado final.
  • Windows Communication Foundation (WCF o Indigo): Es el modelo de programación unificado de Microsoft para la construcción de aplicaciones orientadas a servicios en código manejado. Extiende el .NET Framework, permitiendo a los desarrolladores construir Web Services seguros y fiables.
  • Windows Workflow Foundation (WF o WinOE): Windows Workflow Foundation es el modelo de programación unificado de Microsoft para un desarrollo rápido de aplicación orientadas a procesos empresariales.
  • Windows CardSpace (WCS, antes "InfoCard"): Windows CardSpace permite a los usuarios identificarse digitalmente de una manera sencilla y familiar.

Conclusiones

En .NET el programador se puede concentrar en resolver el problema, no tiene que complicarse en cuestiones como manejo de memoria o integridad de sus objetos. Para ello existe el Garbage Collector y un fuerte sistema de tipos. Por cuestiones de espacio no puedo abordar el sistema de tipos de .Net, o en los ensamblados y sus metadatos. Mi idea era definir muchas cuestiones de esta tecnología sin profundizar en detalles. Pretendo hacer otro artículo sobre ensamblados, metadatos y Reflection, para no dejar el tema aquí.

Para saber más...

Continuar leyendo

¿Por qué?

Alien [blackhat4all@gmail.com]

Hola, primeramente mis saludos a todos aquellos que han seguido la revista desde sus inicios y, en especial, a los que de una forma u otra han colaborado enviando artículos, críticas o sugerencias.

Los que acostumbran a leer mis escritos (que pienso que la mayoría sean aquellos que posean cuentas de Infomed), se habrán dado cuenta que casi siempre hablo sobre cómo optimizar las conexiones, cómo acelerar la descarga de archivos, etc. Quisiera hacerles entender que mi objetivo con estas cosas no es desacreditar ni echar por tierra el trabajo que realizan los que se encargan de mantener la red en funcionamiento; por el contrario, aunque a veces desee que un rayo me parta el MÓDEM en dos (en sentido figurado, claro está), estoy satisfecho (entre comillas), con el servicio que nos brindan, reconozco que es uno de los servidores que más personas atiende en el país, y que se esfuerzan por dar lo mejor de sí para mantener esta isla conectada las 24 horas. Sólo que soy de los que piensan que no hay nada de malo en tratar de sacarle el mayor provecho al servicio que nos brindan. Todos los que están leyendo esto es porque de alguna forma tiene un PC, y aunque esté corriendo a 5 Ghz, con 2 Gb Ram y 300 Gb de HDD, siempre van a tratar de, en la medida de sus posibilidades, de mantenerla lo más cuidada posible, instalar sólo las cosas necesarias, etc.

Tampoco soy de los que escriben para hacer preguntas, trato de resolver mis problemas yo mismo. Si no sé cómo funciona algo, lo primero que hago antes de salir a preguntar, es “cacharrear”. Creo que esa es la forma más instructiva de aprender. Además, todo sabemos que como se cultiva la computación es con muchas “horas nalgas”. Pero también, al igual que ustedes, yo tengo preguntas que hacer, y si alguien de los que está leyendo esto sabe las respuestas, por favor, que me escriba.

Normalmente Infomed está conectado a la verdadera Red de Redes. Supongo que por ésto el país esté pagando, ya que es un servicio que se presta y bla bla bla...; pero una vez conectado, los nodos de Infomed funcionan como puntos de acceso, es decir, los usuarios que pertenecen a dicha red hacen peticiones de servicios e Infomed a su vez se los pide a Internet, y el resultado los reenvía a nosotros. Para que tengan una idea de cómo funciona, piensen que el resto del mundo habla un idioma, aquí en Cuba se habla otro e Infomed es un traductor. La pregunta entonces está clara, ¿por qué Infomed se niega a brindar acceso a ciertas páginas? o, para seguir con el ejemplo, ¿por qué se niega a traducir ciertas palabras?

Estoy conciente que hay muchos lugares en Intenet a los que es mejor no entrar, ya sea por su contenido pornográfico, o por cosas más bien relacionadas con política y asuntos de los que prefiero no comentar, aunque, como dice el dicho, para gustos se han hecho los colores. Pero alguien, por favor, me puede decir ¿qué tiene de malo la web del programador?.

Para los que no tuvieron (y digo “tuvieron”, porque ya no tendrán) la posibilidad de entrar a dicho sitio, les comentaré que era una página donde personas conocedoras de distintos lenguajes de programación exponían sus códigos -algo muy importante para los que se iniciaban en la programación.

Yo, personalmente, no veo mal a los “traductores” que por respeto a sus clientes se nieguen a “traducir” palabras que puedan ofender a algún oído, pero ¿por qué no querer traducir palabras como Aprender, Conocer, Saber, Educarse, Cultivarse, Formarse, ....? La lista sería inmensa.

En publicaciones anteriores, por estas mismas razones se expuso una corta lista de sitios alternativos a los que entrar, lugares desde los cuales se podían hacer amistades, buscar información, etc. Y realmente no pensé que tuviera que llegar al punto de escribir un artículo sobre esto, pero es que cada día que pasa, son más las restricciones, y ya está empezándome a cansar el mensaje de: Access Denied.

Pienso que todavía nos falta mucho -muchísimo- por llegar a tener una red de la cual podamos aprender. No digo que no limitemos algunos sitios, porque no me gustaría que si tuviese un hijo, estuviera mirando a las 3:00 am una página de Playboy, viendo por el monitor métodos de tortura o fotos de mutilaciones. Pero sí me agradaría que al despertarme a las 6:00 am, él estuviera sentado frente a la máquina, tratando de optimizar un código que vio en una página de programación. Si es así, quizás hasta le prepare el desayuno, y en la noche siguiente nos desvelemos los dos.

Para saber más...

Continuar leyendo

Correos anónimos en clientes e-mail

Alien [blackhat4all@gmail.com]

Durante mucho tiempo las personas han utilizado programas para enviar correos anónimos. En esta misma revista, inclusive, hace dos semanas atrás se mostraba cómo utilizar el servicio de Telnet para dichos fines. Ahora, en este artículo, yo invito un poco a la reflexión: ¿cómo funciona el servicio de correo postal?

Bien, a la hora de enviar un correo a una dirección determinada a través de la oficina postal, es obligatorio poner el remitente. Esto es algo muy lógico, ya que quien recibirá la correspondencia, está en todo el derecho de saber quién se la envía, sólo que la oficina postal no se encargará de chequear si la dirección puesta por el remitente es verdadera o no, sólo le interesa que haya algo escrito en ese campo y que las normativas que requiere la oficina postal para el envío de correspondencia se hayan cumplido (que esté un tipo de sello, que se haya pagado por el servicio, etc. [no sé, yo realmente nunca he pasado un correo postal]).

El correo anónimo se envía utilizando el mismo principio, es decir, por ejemplo, si una persona tiene una cuenta de Infomed y quiere en determinado momento pasar un correo, al servidor de Infomed no le interesa saber el nombre de la persona, lo único que requiere como datos reales, es la dirección a la cual va destinada el correo, y saber que el correo que se está enviando pertenece a su dominio (infomed.sld.cu).

¿Por qué utilizar programas para el envío de correspondencia anónima, si nosotros mismos podemos hacerlo? En mi caso, y no pienso que sea muy especial, uso como gestor de correo el Mozilla Thunderbird. A través de él puedo crear cuentas de correo (todas las que quiera). Supongamos que es la primera vez que creo mi cuenta, así que me dirijo a las opciones que me permiten crearla:

  • Especifico el nombre que quiero que tenga dicha cuenta.
  • Mi servidor de correo entrante (pop3.sld.cu)
  • Mi servidor de correo saliente (smtp.sld.cu)
  • Le indico cuál es mi dirección de correo electrónico.
  • Finalizar.

Esos más o menos -a grandes rasgos- son los pasos para crear una cuenta de correo en la mayoría de los gestores de correo, y no está mal, sólo que así hemos creado una cuenta de correo válida, y nuestro objetivo es crear una cuenta de correo que no exista. Para eso solo debemos modificar el último campo. ¿Por qué...? Sucede que cuando un correo pasa por Infomed, lo primero que hace el servidor es verificar que sea él quien debe enviarlo y, para esto, utiliza toda la cadena de caracteres que va después de la arroba (@). Si, por ejemplo, creamos desde Infomed una cuenta de nombre fulano@mengano.com, nunca se llegará a enviar, puesto que dará error al hacer la comparación:

@infomed.sld.cu != @mengano.com

Si queremos crear una cuenta que podamos utilizar, debemos hacerla manteniendo fija la cadena de texto tras la @, por ejemplo, cuenta_falsa@infomed.sld.cu.

Este articulo se complicaría demasiado si empiezo a poner ejemplo de cómo utilizar luego dicha cuenta en cada gestor de correos por separado. Pero en mi caso, cuando creo un mensaje nuevo, sólo tengo que decirle que no va a ser cuenta_real@servidor.cu quien va a hacer el envío, sino cuenta_falsa@servidor.cu.

Por esta vía es mucho más práctico que utilizando otros programas con el mismo fin, ya que no dejaríamos de usar el gestor de correo al que estamos acostumbrados, podríamos enviar archivos adjuntos (no todos los programas de envío de correo anónimo lo permiten), se puede personalizar más creando una plantilla con determinadas características, etc.

Entre las desventajas que tiene el hacerlo de esta forma, es que cada vez que demos en recibir correos, se intentará recibir también lo que esté en el buzón de cuenta_falsa@servidor.cu, pero como la cuenta no existe, dará un error. Esto se solucionaría de diversas maneras: se le puede decir que no reciba todos los correos, sino solamente los de cuenta_real@servidor.cu, o creando sólo la cuenta falsa cuando lo necesitemos, y luego borrándola... eso ya queda en sus manos.

Las posibilidades de dar con la dirección real de la persona que envía un correo anónimo son muy bajas, pero existen. Se pudiera hacer si el mensaje se edita con algún editor de texto sencillo. En una línea determinada mostrará la dirección IP de la persona que envió el correo, el servidor por el cual pasó, y la hora de salida. Con estos datos se le puede pedir al servidor la lista de todas las IP y números de teléfonos (en caso de que la cuenta estuvieran anclada) que a esa hora se conectaron y, conociendo el teléfono pueden dar fácilmente con tu cuenta real y con tu dirección física. Pero eso dejémoslo para los que trabajan para la NASA.

Para saber más...

Continuar leyendo

Notas para un mejor uso de HyperTerminal

ZorphDark [blackhat4all@gmail.com]

A pesar de ser una de las herramientas menos potentes de su tipo, HyperTerminal se ha convertido en los últimos años en el terminal de comunicaciones más utilizado por usuarios de computadoras personales. ¿El motivo? Pues, como es de esperar, el gigante azul compró una licencia a Hilgraeve para distribuir en el lanzamiento de Windows 95 una versión reducida del HyperACCESS. Denominada HyperTerminal, pasó a formar parte del grupo Comunicaciones de sus Accesorios hasta la salida de Windows XP en el 2001. Posteriormente, sólo se incluyó en los Service Packs que distribuyó Microsoft para parchear los "pequeños" errores y problemas de seguridad de dicha versión de su sistema operativo insigne.

La mayor parte de las personas no ha tenido la necesidad de "descubrir" este programa, ya que los navegadores se han encargado de arrebatarle la popularidad impuesta en el mercado de los terminales. Se puede confirmar esto preguntándole a cualquier usuario de Windows qué es un terminal. Puede que de entre millones de negativas haya algún que otro veterano de los años '80 con una respuesta convincente. Pues con la secesión de los BBS -debido a la explosión web de la década pasada-, los terminales de comunicaciones cesaron de jugar un papel importante en las redes para darle cabida a las primeras versiones de Mosaic, Netscape, Mozilla e Internet Explorer. Tales utilidades permitían descargar, a través de una interfaz gráfica, contenido multimedia e hipertextual desde servidores de información. De la misma forma, los clientes de mensajería instantánea habían superado el simple envío y recepción de los mensajes de texto plano. Estos factores, entre otros de carácter tecnológico, desplazaron al olvido aquellas aplicaciones de fondo negro y caracteres grises.

A pesar de esto, muchos de nosotros al no tener acceso a nuestros servidores de Internet, necesitamos recurrir a los legados obsoletos de las redes de aquella era. Ante la inexplicable ausencia o escasez de ADSL, fibras ópticas, servicios inalámbricos o PLC en nuestro país, el HyperTerminal se convierte en una solución para transferir binarios y textos de forma sincrónica a otra computadora utilizando el bitraje que nos proporcionan las líneas telefónicas de ETECSA.

Al ejecutar la aplicación, un cuadro de diálogo nos permite nombrar y seleccionar el icono que va a representar la conexión que queremos establecer con un equipo remoto. Luego escribimos los detalles del número telefónico al que está conectado el módem de dicho equipo, seleccionamos el módem desde el cual queremos iniciar la comunicación y, presionando el botón Marcar, enviamos a ese dispositivo la señal necesaria para que comience a realizar su labor. Si la otra computadora está configurada para recibir llamadas entrantes (activando la opción Llamar » Esperar una llamada), tras un timbre telefónico que indica que se estableció la comunicación, ambos módems estarán listos para comenzar la modulación de las señales entrantes y salientes. Hasta que finalice la llamada, ambos usuarios podrán escribir en tiempo real en la pantalla de la terminal; opción válida para los que no tienen acceso a algún IRC o desean tener una conversación privada. Para tener éxito en esta última opción se debe utilizar cualquier método de encriptación sencillo como ROT-13. Los caracteres entrantes se pueden guardar directamente en un archivo de texto especificado en Transferir » Capturar texto. Para imprimirlos, se debe activar la opción Transferir » Capturar en impresora.

Si nos conectamos desde una computadora portátil, podemos establecer ubicaciones y reglas de marcado específicas para cada punto de comunicación. En caso de efectuar llamadas locales, es recomendable desactivar la opción Utilizar código de país o región y código de área en la opción Modificar del cuadro de diálogo Conectar.

Realmente es preferible tener una conversación hablada que escrita (disculpen los chateros), pero el HyperTerminal tiene una ventaja de la que carece nuestra telefonía fija: la transmisión de datos. Para aprovechar correctamente la computadora, el módem y el teléfono que algunos tenemos en los hogares, y dejar de lamentarnos por no tener acceso a una cuenta de correo electrónico o a un servidor FTP, acudiremos a Transferir » Enviar archivo... y seleccionamos el nombre de fichero y el protocolo que utilizaremos para enviarlo. Es aconsejable utilizar Zmodem, puesto que está diseñado para manejar transferencias de datos mayores que los demás protocolos con una menor tasa de errores. Además, cuenta con una característica denominada checkpoint restart (se activa seleccionando la opción Zmodem con recuperación de errores), que permite que cualquier transmisión interrumpida -algo bastante común- pueda continuar desde el último punto de comprobación válido. Los archivos recibidos se almacenan por defecto en %UserProfile%, pero mediante Transferir » Recibir archivo... podemos seleccionar otra carpeta donde colocarlos en cada sesión de comunicación.

Cada conexión efectuada tiene una configuración única, que consta de un número de teléfono (o de host, véase más adelante), configuración específica de puerto y de comprobaciones de paridad. Dichas conexiones pueden guardarse en un archivo de extensión HT, para ser reutilizadas en otra ocasión, constituyendo una gran ventaja si se utiliza frecuentemente el HyperTerminal con equipos remotos fijos.

HyperTerminal puede obrar como una alternativa al Cliente Telnet de Microsoft -el predeterminado del sistema-, que se ejecuta mediante el comando telnet. De esta forma puede interactuar con un servidor Telnet si se tienen privilegios de administración. Para efectuar una conexión mediante TCP/IP, en la ventana Conectar a se debe seleccionar la opción Conectar usando TCP/IP (Winsock) y escribir la dirección y el puerto del host al que se desea llamar. Los parámetros de inicialización pueden ser pasados al programa desde la línea de comandos o dentro de un archivo de procesamiento por lotes batch (.BAT). HyperTerminal se encuentra en %ProgramFiles%\Windows NT\hypertrm.exe y la sintaxis para esta tarea es la siguiente:

hypertrm.exe/t <dirección telnet>[:<puerto>]

Como cualquier otra terminal de comunicaciones, HyperTerminal está directamente vinculado a los módems instalados en el sistema operativo. Cualquier comando AT estándar que se escriba en la terminal recibirá una respuesta del módem predeterminado. Por ejemplo, si escribimos ate1 se visualizará OK si este dispositivo funciona correctamente y ERROR en caso de que no se detecte módem alguno. Si tecleamos ati0 o ati3, se mostrarán la descripción del módem. De todas formas, hay un método más eficiente para realizar consultas a un módem: en Panel de Control » Opciones de teléfono y módem, ficha Módem, botón Propiedades, ficha Diagnóstico y botón Consultar módem.

Para saber más...

Continuar leyendo

Comentando C# con XML

Krlo [blackhat4all@gmail.com]

Aunque muchos de nosotros no acostumbramos a comentar nuestro código, porque creemos que no vale la pena o nos dejamos arrastrar por la haraganería, estamos conscientes que un programa no comentado es un problema colosal a la hora del mantenimiento. En Microsoft, se refieren a comentar como una Best Practice para el desarrollo de cualquier tipo de aplicación. Por tal motivo, el lenguaje insignia de su plataforma .NET incorpora desde su primera versión en Visual Studio .NET 2003, la facilidad de que su IDE se relacione directamente con un estilo particular de comentar código. Por supuesto, estamos hablando de C# y la documentación XML.

Aunque para nada son obsoletos los // y /**/, los comentarios XML son usados por el IDE para describirnos, en tiempo real, las características de los métodos u objetos comentados cuando en un futuro los estemos utilizando. Recuerden, por ejemplo, como siempre que usamos un objeto X y escribimos un punto a continuación de su identificador (x.), enseguida nos muestra una lista de las opciones disponibles, como sus métodos, y de estos su tipo de retorno, descripción, parámetros, etc. Esto sucede porque dichos métodos fueron comentados con XML. En la siguiente imagen podemos llevarnos mejor la idea:

Creando comentarios XML:

Con XML podemos comentar: clases, delegados, interfaces, campos, eventos, propiedades y métodos. La manera de trabajar con todos es, antes de su definición, teclear tres ´/´ (///) y aparecerá, en dependencia del caso, una estructura en XML a completar.

Para el caso de un método string Califica(int nota){}, aparecerá:

///<summary>
///Este método califica en Excelente, Muy Bien, Bien…
///</summary>
///<param name="nota">Nota cuantitativa del estudiante</param>
/// <returns>Nota cualitativa</returns>
public string Califica(int nota)

Seguro se dan cuenta de para qué se utilizan etiquetas como summary, param y returns. Vamos a ver como nos clasifica José Antonio González Seco en su libro "El lenguaje de programación C#", muchas de ellas:

Etiquetas de uso genérico
Éstas se utilizan para cualquier objeto que tratemos de comentar:

  • <summary>: Su contenido se utiliza para indicar un resumen sobre el significado del elemento al que precede. Cuando utilizamos el operador . para acceder a algún miembro de un objeto se mostrará esta información.
  • <remarks>: Su contenido indica una explicación detallada sobre el elemento al que precede. Se recomienda usar <remarks> para dar una explicación detallada de los tipos de datos y <summary> para dar una resumida de cada uno de sus miembros.
  • <example>: Su contenido es un ejemplo sobre cómo usar el elemento al que precede.
  • <seealso>: Se usa para indicar un elemento cuya documentación guarda alguna relación con la del elemento al que precede.
  • <permission>: Se utiliza para indicar qué permiso necesita un elemento para poder funcionar.

Etiquetas relativas a métodos
Además de las etiquetas de uso general ya vistas, en las definiciones de métodos se pueden usar las siguientes:

  • <param>: Permite documentar el significado de un parámetro de un método.
  • <paramref>: Se usa para referenciar a parámetros de métodos. No tiene contenido y el nombre del parámetro referenciado se indica en su atributo name.
  • <returns>: Permite documentar el significado del valor de retorno de un método.

Etiquetas relativas a propiedades
El uso más habitual de una propiedad consiste en controlar la forma en que se accede a un campo privado, por lo que ésta se comporta como si almacenase un valor. Mediante el contenido de la etiqueta <value> es posible describir el significado de ese valor:

/// <value>Edad de la persona representada</value>
public int Edad{
  set { edad = (value<0)? 0:value }
  get { return edad; }
}

Etiquetas relativas a excepciones
Para documentar el significado de un tipo defindo como excepción, puede incluirse un resumen sobre el mismo como contenido de una etiqueta de documentación <exception> que preceda a su definición. El atributo cref de ésta suele usarse para indicar la clase de la que deriva la excepción definida. Por ejemplo:

<exception cref="System.Exception">
/// Excepción creada para cuando se reproduzca reggaeton.
/// </exception>
class MusicException: Exception
{}

Etiquetas relativas a formato
Para mejorar la forma de expresar el contenido (simple pacotilla) de las etiquetas de documentación que se utilicen, es posible incluir en ellas las siguientes etiquetas de formato:

  • <see>:Se utiliza para indicar hipervínculos a otros elementos de la documentación generada. Nos puede interesar relacionar un objetivo con otro ya comentado.
  • <code> y <c>: Ambas etiquetas se usan para delimitar textos han de ser considerarse fragmentos de código fuente.
  • <para>: Se usa para delimitar párrafos dentro del texto contenido en otras etiquetas. Como <p></p> en HTML.
  • <list>: Se utiliza para incluir listas y tablas como contenido de otras etiquetas.

Generar un archivo XML sobre la solucion comentada:

Podemos crear archivos XML que se compilen al mismo tiempo de la compilación del código. Estos archivos son difícil de entender, por lo que hay que agregarle al comienzo una línea que especifíque la hoja de estilo con que se quiere publicar.

<?xml:stylesheet href="<ficheroXSL>" type="text/xsl"?>

Si no sabemos crear hojas de estilo XSL, podemos generar reportes web con Visual Studio como veremos más adelante. Para crear un archivo XML sobre la documentación cuando se compile la solución:

VS 2003: View » Property Pages » Configuration Properties » Build » XML Documentation File. En el diálogo que aparece especificar el nombre de la documentación en XML.

VS 2005: Project » Application Properties » Build » Output » XML Docum. File. Al igual que en el caso anterior, indicar dónde quieres el archivo y con qué nombre.

Generar Reporte Web de Comentarios:

Visual Studio .NET permite generar automáticamente un reporte en formato HTML de todos los comentarios XML que fueron colocados en el proyecto o solución; si la solución tiene más de un proyecto se documentarán todas las clases con sus respectivos métodos y miembros clasificadas de acuerdo a sus respectivos proyectos.

Para utilizar esta herramienta en VS 2003 apuntamos al menú de Herramientas (Tools), y seleccionamos la opción Generar Reporte Web de Comentarios (Build Comment Web Pages), tal como se muestra en la siguiente figura:

Aparecerá un cuadro de diálogo que nos presentará dos opciones:
• Realizar los comentarios de toda la solución.
• Realizar los comentarios de los proyectos seleccionados.

La lista de proyectos se encuentra bajo estas dos opciones, donde se puede seleccionar los proyectos a los cuales se aplicará la generación de los Comentarios Web. Luego de esto podemos seleccionar la carpeta de destino del archivo de Comentarios Web, el mismo que puede ser añadido a los Favoritos de Internet Explorer para poder acceder a él directamente. Dejaremos las opciones predeterminadas.

Realizando este artículo, traté de generar un reporte en VS 2005 y no encontré la manera. Por lo menos no aparece explícitamente. Si algún lector ha resuelto este inconveniente, por favor, tire algunos strings para BlackHat con la solución.

Conclusiones:

Como pudimos ver, es posible crear la documentación de nuestro proyecto de forma automática, sólo completando las etiquetas del XML. El hecho que la misma se genera a partir de los fuentes permite hacer ambas cosas a la vez, programar y documentar. Si eso no fuera un fuerte motivo, utilizar las bondades del IntelliSense del IDE, a la hora de usar métodos, clases o variables nos compromete aún más con la idea.

Para saber más...

Continuar leyendo