lunes, 3 de marzo de 2008

C# para contar (parte 1)

CHenry [chenry@hha.sld.cu]

Ahora otras características de C# que lo ponen hoy como uno de los sugerentes lenguajes en mi opinión.
Ahí va…

Manejo de memoria.

La dirección de memoria manual les exige a diseñadores que manejen la asignación y eliminación de bloques de memoria. C# proporciona la dirección de memoria automática para que los diseñadores se liberen de esta pesada tarea. En la inmensa mayoría de los casos, esta dirección de memoria automática aumenta la calidad del código y refuerza la productividad del diseñador.

Para diseñadores que deseen llevar el manejo de memoria C# proporciona la habilidad de escribir código "inseguro" (unsafe). En este código puede trabajarse directamente con punteros, y se las arregla para impedir que el recolector de basura elimine los objetos. El código inseguro debe marcarse claramente en el código con el modificador inseguro (unsafe), para que este código no sea usado accidentalmente. El compilador y la herramienta de ejecución aseguran que  este código no pueda hacerse pasar por código seguro.

using System;
class Test
{
  unsafe static void WriteLocations(byte[] arr)
  {
    fixed (byte *p_arr = arr)
    {
      byte *p_elem = p_arr;
      for (int i = 0; i < arr.Length; i++)
      {
        byte value = *p_elem;
        string addr = int.Format((int) p_elem, "X");
        Console.WriteLine("arr[{0}] at 0x{1} is {2}", i,  addr, value);
        p_elem++;
      }
    }
  }
  static void Main()
  {
    byte[] arr = new byte[] {1, 2, 3, 4, 5};
    WriteLocations(arr);
  }
}

El ejemplo muestra que un método ”unsafe” nombrado WriteLocations. Una posible salida del programa es:
arr[0] at 0x8E0360 is 1
arr[1] at 0x8E0361 is 2
arr[2] at 0x8E0362 is 3
arr[3] at 0x8E0363 is 4
arr[4] at 0x8E0364 is 5

Tipos.

C# tiene dos clases de tipos: por valor y por referencia. En los tipos por valor se incluyen los tipos simples (char, int, y float), los enumerativos(enum types, vienen de C++) y las estructuras (struct types, también de C++).

Los tipos por referencias incluyen clases(class types), interfaces(interfaces types), delegates (delegate types) y arreglos(array types).

Los tipos por valor difieren de los tipos por referencia en que las variables de los tipos por valor contienen sus datos directamente, mientras que las variables de los tipos por referencia almacenan una referencia a un dato. Con tipos por referencia es posible que dos variables tengan una referencia a un mismo dato, y cualquier cambio que se haga en uno de ellos se efectuara también en el otro. Con los tipos por valor, cada variables tiene su propia copia de los datos, y si se efectúan cambios en uno no se afecta el otro.
Nota: Seria igual a C++ y Java.

Tipos definidos:

Tipo

Descripción

Ejemplo

Object Tipo base de todos los tipos. object o = new Stack();
String

Secuencia de caracteres Unicode.

string s = "Hello";

Sbyte

8-bit, positivos y negativos

sbyte val = 12;

Short

16-bit, positivos y negativos

short val = 12;

Int

32-bit, positivos y negativos.

int val = 12;

long

64-bit, positivos y negativos.

long val1 = 12;
long val2 = 34L;

byte

8-bit, positivos.

byte val1 = 12;
byte val2 = 34U;

Ushort

16-bit, positivos.

ushort val1 = 12;
ushort val2 = 34U;

Uint

32-bit, positivos.

uint val1 = 12;
uint val2 = 34U;

Ulong

64-bit, positivos.

ulong val1 = 12;
ulong val2 = 34U;
ulong val3 = 56L;
ulong val4 = 78UL;

Float

Tipo real de simple precision.

float value = 1.23F;

Double

Tipo real de doble precision.

double val1 = 1.23
double val2 = 4.56D;

Bool

Valores true o false.

bool value = true;

char

Valores carácter Unicode.

char value = 'h';

decimal< Tipo decimal preciso con 28 cifras significativas decimal value = 1.23M;



Operadores:

Categoría

Operadores

Primarios

(x)x.y f(x) a[x] x++ x—New

Typeof sizeof

Checked unchecked

Unarios

+ - ! ++ x –x (T)x

Multiplicativos

* / %
Aditivos

+ -

Shift

<< >>

Relacionales

< > <= >= is

Igualdad desigualdad

== !==

Lógico AND

&

Lógico XOR

^

Lógico OR

|

Condicional AND

&&

Condicional OR

||

Condicional

?:

Asignación

=  *=  /=  %=  +=  -=  <<=  >>=  &=  ^=  |=

Arreglos.

•             Unidimensionales
using System;
class Test
{
  static void Main()
  {
    int[] arr = new int[5];
    for (int i = 0; i < arr.Length; i++)
    arr[i] = i * i;
  }
}

•             Multidimensionales rectangulares:
using System;
class Test
{
  static void Main()
  {
    int[,] a2 = new int[,] {{1,2,3}, {4,5,6}};
    int[,,] a3 = new int[10, 20, 30];
  }
}

•             Multidimensionales rasgados:
using System;
class Test
{
  static void Main()
  {
    int[][] j2 = new int[3][];
    j2[0] = new int[] {1,2,3};
    j2[1] = new int[] {1,2,3,4,5,6};
    j2[2] = new int[] {1,2,3,4,5,6,7,8,9};
  }
}

Este ejemplo no es valido.
class Test
{
  static void F(int[] arr) {}
  static void Main()
  {
    F({1, 2, 3});
  }
}


Este ejemplo si es valido.
class Test
{
  static void F(int[] arr) {}
  static void Main()
  {
    F(new int[] {1, 2, 3});
  }
}


Sistema de unificación de tipos:

Todos los tipos en C# pueden ser tratados como objetos, pues todos derivan de Object.

Ejemplos
using System;
class Test
{
  static void Main()
  {
    Console.WriteLine(3.ToString());
  }
}

Continuar leyendo

¿Qué son los delitos informáticos?

TWIN [twinsc@gmail.com]

De manera general la gente cree que cometer un delito es hacer cualquier cosa que este prohibida en la ley, lo cual no es cierto. Delito es toda acción u omisión socialmente peligrosa, prohibida por la ley bajo la conminación de una sanción penal; por lo que solo serán delitos aquellas conductas descritas en la parte Especial del Código Penal. Vender la casa, tener una antena parabólica y demás, no son delitos; lo cual no quiere decir que estén permitidos, simplemente están regulados por otras ramas del Derecho.

La clasificación de los delitos en informáticos como una nueva categoría jurídico-penal me parece poco relevante, no sucede como con el caso de los llamados delitos ambientales, en estos el apellido está referido a un bien jurídico propio que necesita de protección: el medio ambiente; mientras que en los delitos informáticos se hace referencia al medio material en que se comete el delito.

Las nuevas tecnologías de la información han creado un espacio virtual regido por reglas diferentes, un mundo donde el espacio y el tiempo adquieren matices distintos, un lugar en que los humanos interactúan, y por tanto, pueden cometer delitos. La verdadera importancia de la clasificación de los delitos en informáticos radica, desde mi punto de vista, en que en este ciberespacio los métodos tradicionales para la detección e investigación del delito no resultan eficaces, y debe ser tarea de los especialistas en temas informáticos suplir esta necesidad.
. . .
El que, con el propósito de obtener para sí o para otro, una ventaja o un beneficio patrimonial ilegítimo, y empleando cualquier ardid o engaño que induzca a error a la víctima, determine a éste a realizar o abstenerse de realizar un acto en detrimento de sus bienes o de los de un tercero, incurre en sanción…

De esta manera define el Código Penal Cubano el delito de estafa, que se podría considerar como uno de los que más se cometen utilizando los medios informáticos. Como se puede apreciar, lo mismo vendiendo entradas falsas de un concierto de Carlos Varela en la puerta del Karl Marx, que a través de un sitio web, se está cometiendo el delito.

Lo antes expuesto no quiere decir que al Código Penal no necesite modificaciones, puede que en un futuro cercano sea necesario regular conductas que se realicen por medio de los ordenadores, pero estas serán esencialmente para proteger bienes jurídicos como los derechos individuales, los derechos patrimoniales, la economía nacional, la seguridad del estado, etc.

Así por ejemplo, infectar con algún programa malicioso un ordenador ajeno, una conducta que no era posible antes de la era informática, pudiera, en dependencia del fin del autor, afectar la intimidad, los derechos patrimoniales o incluso la seguridad del estado, por lo que estas nuevas conductas deben plantear la necesidad de una revisión de los delitos y categorías penales para adecuarlas a los nuevos tiempos.
. . .
Desde que leí el artículo “Delito Informático” de Alien, en el número 38 de esta revista, me propuse escribir algo complementario del mismo, desde el punto de visto de alguien que sabe un poco menos de Informática y quizás un poquito más de Derecho. En este artículo el autor hace algunas reflexiones interesantes a las que quisiera referirme.

Primero hace un análisis acertado de casos en que se podría caer en un error al pensar que constituyen un delito informático, criticando -o mejor- definiendo con mayor exactitud lo que se podría entender como delito informático, sin embargo en esta oportunidad me referiré a un par de puntos en los que no coincido con el autor.

No es para nada ilegal que alguien sin autorización penetre al sistema, puesto que una de las tareas que realiza, o debe realizar un administrador de sistemas, es asegurar el servidor que administra.

No se puede justificar una acción con el deber que tenga otro de evitarlo, pues entonces sería lícito entrar a cualquier propiedad bajo la vigilancia de un custodio, o dar muerte a alguien porque su guardaespaldas tiene el deber de protegerlo. Tampoco la falta de protección por imprudencia o negligencia justifica la acción de atacarlo, o ¿acaso qué deje la puerta de mi casa sin seguro justifica el hecho de que alguien robe?

Visto desde el punto de vista informático, quien cumple la función de portero es el administrador, que es en definitiva quien tiene potestad para decidir quien, como, por donde y cuando entra cada persona.

En la analogía planteada el informático cumple efectivamente la función de portero, pero ni este, ni el portero, son los que tienen la potestad de decidir quién, como, por donde, ni cuando entra cada persona; en ambos casos simplemente cumplen una orden de un superior o reglas preestablecidas.
. . .
El tema del hacking es polémico, si bien es cierto de que todos tienen derecho a investigar, a superarse, a imponerse retos; los propietarios de los servidores y usuarios en general tienen derecho a que se les respete su propiedad, su privacidad y que se utilicen sus servicios de la manera estipulada en el contrato con sus clientes.

Siguiendo con las analogías: así como todos tienen derecho a caminar y visitar cualquier lugar que deseen, el propietario tiene derecho a que solo puedan entrar en su vivienda quienes y cuando determine. Imagínense los inconvenientes y peligros que traería tener que permitir que cualquiera, cuando quisiera y como quisiera pudiera entrar en nuestras casas, ¿por qué entonces permitir que entren en nuestros ordenadores?

Si bien es cierto que la simple intrusión no genera daño, si crea una situación de peligro que el Derecho no debe permitir, lo cual no es contrario a pensar que un acceso a nuestro ordenador, aún sin autorización, que se realice de buena fe y con el propósito de prevenirnos de posibles ataques sea lícito.

Continuar leyendo

Cómo tener una PC con mejor desempeño

Yordan Pérez [truano@infomed.sld.cu]

Generalidades

Lo primero que tenemos que saber, es que en la informática también existen leyes generales que no podemos pasar por alto, una de las que mas tiene que ver con este articulo es la que dice: “Todos los dispositivos en una computadora trabajarán a la velocidad del mas lento” esto de cumple al pie de la letra.

Puertos IDE

Si tenemos un Disco Duro cuya velocidad de transferencia se eleva a 133 Mhz y nuestra motherboard es capaz de soportar dicha velocidad, pero a la vez la cinta que comunica estos dos dispositivos es de 40 hilos, jamás tendremos el rendimiento que pudiésemos tener, y tan solo por una cinta, la reducción de rendimiento que se crea es vastamente visible, estaríamos perdiendo una velocidad notable por algo tan sencillo y barato como lo es una cinta de 80 hilos, continuando con la idea de las cintas y los puertos IDE, también tenemos otra forma de evitarnos conflictos y ganar en rendimiento, cuando solo tenemos en la PC (lo mas general) un Disco Duro y una Torre de CD/DVD, es mejor tener a cada uno de estos dispositivos por separados, me explico, la motherboard traería dos puertos IDE que la controladora administra por separados, en el IDE 1 pondríamos una cinta de 80 hilos directa al Disco Duro, en el IDE 2 otra cinta de 80 hilos que valla conectada a la Torre de CD/DVD, de esta manera todo el ancho de banda de la cinta se dedicará a cada uno de los dispositivos, nos evitamos los conflictos de jumpéo, etc. Para aquellos que tienen 2 torres de CD/DVD, ejemplo quemador y lector, es altamente recomendable ponerlos en IDE separados, así se evitan conflictos a la hora de quemar “al vuelo” siempre sería preferible dejar el quemador solo y poner el lector como esclavo en el IDE primario con el Disco Duro, una ultima idea, traten de poner todos los tornillos a las torres de CD, cuando están leyendo un disco por obligación generan vibraciones y causan problemas a la hora de leer algún CD o DVD que no esté en perfecto estado.

Nota: es un error decir “cinta de 80 pines” en realidad ambas cintas son de 40 pines, lo que cambia es la cantidad de hilos, las antiguas son de 40 pines con 40 hilos, las actuales con doble ancho de banda son 40 pines con 80 hilos.

Memorias RAM

Vamos ahora a dedicarle un pedazo a las memorias RAM, aquí lo primero a tener en cuenta es tratar de que las memorias que tengamos sean lo mas rápidas posible y por supuesto que la board también soporte esas velocidades, después de tener las mas rápidas que podamos usar o conseguir, otro aspecto a tener en cuenta es distribuir el trabajo, tendremos mas rendimiento usando 2 memorias de 256 mb cada una que teniendo 1 memoria de 512 mb, para los board que soportan dual-channel por lo normal traen 4 slot para memorias, 2 color azul y 2 color negro (los colores pueden variar) y tan solo tenemos 2 memorias, para usar el dual-channel tendremos que poner las memorias siempre en el mismo color, asi como también las memorias deben ser como mínimo a 400 mhz de velocidad de transferencia, de otra forma no se activa dicho servicio, otro detalle a tener en cuenta, para aquellos que cuenten con 1 Gb o mas de memoria, Windows es tan……. Que a veces no sabe auto configurarse para aprovechar al máximo el hardware que controla, entonces tenemos que meter las manos nosotros mismos, Windows “siempre” utiliza una parte del disco duro como memoria virtual, el acceso al Disco duro es muchísimo mas lento que a las memorias RAM, para aquellos que como dije, tengan al menos 1GB de memoria sería altamente recomendable deshabilitar el archivo de paginación o memoria virtual de Windows, ¿Cómo se hace? Ok presten atención:

Click derecho sobre MI PC/Propiedades/Opciones Avanzadas/Rendimiento/Configuración/Opciones Avanzadas/ Memoria Virtual/Cambiar
Estando ahí, seleccionamos la opción “Sin Archivo de Paginación” y hacemos click en aceptar, vuelvo y repito que solo es para aquellos que tengan al menos 1GB de RAM, a partir de ese momento Windows ejecutará todo sobre la RAM y ganaremos muchísimo en rendimiento.

Modem Externos

Como ya se va haciendo común criticar a Windows volvemos a caer en eso de que no aprovecha al máximo lo que se le ofrece, bueno aquí tenemos un problemita que nos resta muchísimo rendimiento en la comunicación entre la PC y un Modem Externo, el puerto serie viene por defecto con una configuración de velocidad de comunicación con los Dispositivos que a el se conectan muuuyy bajo, vamos a cambiar esto y veremos como ganamos muchísimo en rendimiento a la hora de conectarnos y navegar, (nota: esto no acelera la velocidad que te muestran los download managers y otros programas, este truco mejora la velocidad de comunicación entre el modem y la PC pero a la larga incide directamente con la velocidad general de conexión, bueno vayamos al grano:

(Nota: justamente cuando iba a seguir los pasos en mi PC para darles el tour mas apropiadamente me di cuenta que mi PC ya no trae puertos series je je je y producto de esto no los muestra en administrador de dispositivos, pero bueno, trataré de acordarme de todos los pasos con la mayor exactitud posible).
Click derecho sobre MI PC/Propiedades/Hardware/Administrador de Dispositivos/Puertos Series.
Ya en ese lugar seleccionamos el puerto serie y damos click derecho sobre el, seleccionamos propiedades y donde dice velocidad de puerto seleccionamos la mayor, click en aceptar y a disfrutar de nuevas velocidades.

Procesador

No hablaré de la velocidad del mismo, es lógico que debemos hacer lo posible por tener los mas rápidos posibles, hablaré mas bien sobre la caché L2, ya que es casi mas importante que la velocidad misma del CPU, la caché es quien describe hasta cuantas instrucciones puede asimilar un procesador, imaginemos que el CPU es un aeropuerto con capacidad para darle salida y entrada a 100 vuelos diarios, pero las puertas de ese aeropuerto son tan reducidas que solo permiten el paso a los pasajeros de 50 vuelos diarios, se ve tal como suena, jamás se obtendrá el máximo de rendimiento, en el procesador la caché vendrían siendo las puertas de ese aeropuerto, mientras mayor sean mejor se aprovecha la velocidad del micro, lo mismo tenemos con el bus frontal que es la velocidad de comunicación entre el micro y la motherboard, a la hora de escoger un CPU debemos tener en cuenta además de la velocidad, cual es la cache L2 y cual es la velocidad del bus, recomiendo para quienes tienen socket 478 el procesador Intel Pentium 4 HT a 3,2 Ghz con 1 Mb de cache L2 y bus a 800 Mhz, cuando pasas en el 478 de los 3,2 crece demasiado el calor y empeora el rendimiento, una magnifica motherboard para ese micro sería la ASUS P4P800.

Ventilación y Refrigeración

Desgraciadamente en Cuba no tenemos muchas opciones disponibles para escoger como queremos refrigerar nuestra PC, pero todo lo que podamos hacer en este sentido la computadora lo agradecerá con crecimiento de rendimiento y vida útil, voy a tratar de ser realista y contar con lo que podemos adquirir en nuestro país, lo primero es intentar comprar un chasis lo mas grande posible, (un supercase de 5 bahías será suficiente) recomiendo chasis como el MDG que trae una entrada de aire lateral directa al micro, bueno, luego de tener un buen chasis, lo próximo es hacerse de una fuente lo mas potente posible, en la actualidad ya existen hasta de 1000 watts pero con 450 o 500 será suficiente, el próximo paso es fijarnos hasta cuantos Fans (ventiladores) soporta nuestro chasis, por lo general con un chasis como el que recomiendo, podemos poner 2 fans delanteros, 2 fans atrás y uno en la tobera plástica lateral, ahora explico cual sería la mejor forma de ubicarlos, los delanteros y el lateral se pondrían introduciendo aire al chasis y los traseros extrayendo el aire caliente del chasis, también podemos conseguir los tan indispensables fans con disipador para discos duros, por experiencia propia les puedo decir, consigan un soft llamado HDD Termómetro, pruébenlo en un disco duro maxtor sin fan, la temperatura normal del HDD en una habitación sin Aire acondicionado será aproximadamente 55 Grados, sin embargo el mismo soft reporta solo 20-22 si el HDD tiene fan, creo que una diferencia de mas de 30 grados vale la pena invertir en tal disipador, manteniendo la PC lo mas fría posible, tendremos mejor desempeño, un consejo, para que todos esos fans trabajen bien, debemos intentar liberar de obstáculos la corriente de aire, me explico, las cintas IDE y los cables de alimentación entorpecen la corriente de aire, por lo tanto debemos acomodarlos lo mejor posible dentro del chasis para garantizar que no obstruyan el paso del aire, estos chasis tienen por lo normal, una gran capacidad para discos duros, en caso de poseer mas de un disco duro se recomienda dejar suficiente espacio entre ellos para ayudar al enfriamiento de los mismos.
Hasta aquí llegamos por ahora, espero les sirva este articulo, en el no pongo bibliografía ya que no usé nada externo, solo mi experiencia personal a lo largo de 10 años como especialista en Hardware, espero que les guste y les ayude…

Continuar leyendo

¿Por qué Windows se mantiene en la preferencia por encima de Linux?

elprofet@ [sedelisa@uh.cu]

Antes que todo hay que partir desde el punto de vista de cada consumidor de software.
Los fanáticos a Windows (Win) defienden a capa y espada su criterio de que Win es lo mejor y los que trabajamos con GNU/Linux (G/L) hacemos otro tanto por lo que creemos es la solución perfecta para Cuba y el mundo.

Si bien no todos lo sabemos, el gobierno cubano, a través de la Resolución 3390 la cual ha sido ratificada como Ley desde octubre del 2007, apoya el proceso de migración a software libre (SL).
Ahora, donde está el meollo del asunto.
Resulta que la mayor barrera que se ha levantado en contra de G/L en nuestra nación es la de la comodidad.

¡Si no se asombren!

Ha sido la comodidad que brinda el uso de Win y por la cantidad de aplicaciones que para este SO existen en nuestro país, amén de que todo o casi todo este software es "pirata" tanto como las mismas distribuciones de Win que existen en Cuba.

Por otro lado encontramos que G/L es completamente libre y en muchas ocasiones (la mayoría) se adquiere gratis, ya sea por descarga del iso de la distro como por compra On line o solicitud del disco (en el caso de Ubuntu).

Lo que sucede es que ninguno de los usuarios de Win ha tenido que desembolsar lo que realmente cuesta el CD de instalación y mucho menos el del paquete de Office lo cual representaría un coste de casi 800.00$ o más. Una bicoca si tenemos en cuenta lo que costarían los otros programas que se utilizan en el trabajo con este SO.

Aunque si algo bueno posee Win son la cantidad de aplicaciones para el monitoreo y administración de redes en un entorno puramente gráfico lo cual las hace fácil de aprender (son muy intuitivas) no así como en G/L que esta misma faena se realiza en modo consola (para eso utilizamos Nagios), aunque ya existe una herramienta para esto con una interface gráfica.

Si bien ésta, la comodidad que brinda Win, es una razón para no abandonarlo, también no es menos cierto que los programas de estudio de nuestras escuelas siguen estando enfocadas hacia Win y no dan chance a que G/L llegue a ser conocido por todos de alguna manera.
Para que se tenga una idea de esto diré que los estudiantes de técnico medio en informática apenas reciben clases de G/L (conmigo trabajan dos muchachas graduadas que dicen que sólo tuvieron 5 clases de G/L), ¡así nunca!

Como quiera que sea G/L se erige como "la Alternativa Informática para Las Américas" :-) dada su flexibilidad y lo "relativamente" fácil de su manejo. Acoto lo de "relativamente fácil" porque en realidad puede resultarle un poco difícil, sino trabajoso, al que se sumerge por primera vez en el trabajo con las distro de G/L pero eso no es nada, ya que al ir ganando en conocimiento y dominio del trabajo con la distro se llega a la conclusión de que G/L es realmente muy intuitivo en cuanto a su uso y explotación.

Además, el trabajo con las distro de Linux permite "reciclar" el conocimiento, pues cuando se trabaja en modo consola debemos, en muchas ocasiones, acudir a los conocimientos adquiridos con ya casi desterrado y olvidado MS-DOS puesto que muchos de los comandos (y algunas variaciones de estos) de éste se utilizan en la consola de G/L. A esto se suma la constante retroalimentación de los programadores, colaboradores, traductores y en fin de la totalidad de la comunidad del SL que acude a las listas de distribución y discusión en busca de ayudas y/o documentación sobre algún problema en particular y todo gracias a la enorme comunidad que da soporte  y apoyo a sus miembros de manera "GRATUITA" :-o))) Atención: con G/L no se cumple el dicho que dice que "lo barato sale caro."

Con G/L si tienes un problema al que no le encuentras solución puedes solicitar ayuda sin pena que para eso estamos acá, para ayudarnos unos a otros y esa filosofía o manera de pensar nos convierte en una especie de "filántropos" a la vez que nos cataloga como los "comunistas" de la informática como dijera en una ocasión Bill Gates.

No obstante reconozco que debemos trabajar aun más en el desarrollo de aplicaciones que permitan la migración al SL, sino de una forma masiva al menos de manera discreta.

Por poner un ejemplo, aun no nos hemos concentrado (de manera general) en el desarrollo de Bases de Datos (BD) para el mercado Nacional e Internacional (hasta ahora no tengo conocimiento de que se trabaje en ésta área) y eso es un error que debemos subsanar puesto que las BD son utilizadas en casi (por no decir todas) la mayoría de las empresas del mundo amén de que hasta el presente el mayor uso que le hemos dado a G/L a sido en Servidores.

Resumiendo.

Creo que si nos enfocamos en el desarrollo de aplicaciones (por ejemplo BD para el perfil económico, o lo que es lo mismo, BD para los economistas) que sean útiles en el ámbito empresarial y pasamos de ser administradores de redes y usuarios finales de G/L; y si las Instituciones ayudaran un poco más en la tarea de la migración al SL, y si cambiaran un poco el plan de estudios de los estudiantes cubanos, ¡¡¡a Windows le quedaría poco tiempo en Cuba!!!

Yo voto por GNU/Linux ¿y tú? ;-)

Continuar leyendo

Explorando la red (Parte 2)

Asran [asran@isppr.rimed.cu]

Hello! ?

De nuevo acá para cumplir con la comunidad. Bien la semana pasada compartimos algunos comandos sobre redes desde sistemas Windows. Y también prometí lo que ahora les explicaremos.

Explorando el vecindario … net view
Seguramente muchas veces te has preguntado que maquinas están disponibles en tu grupo de trabajo. Pero no tienes herramientas … como lo haces?
Pues bueno tecleas simplemente:

 net  view
Este comando te listara las host activas en el grupo de trabajo. Para los más entendidos es lo mismo que un IP scanner. Bien adentro encontraremos que también sirve para mostrar recursos compartidos.

Con la sintaxis:
 net view  /Workstation:<nombre_del_host>
Mostrara los recursos compartidos de la host especificada.

 net  view  /NetWork:<Dominio>
Mostrara las hosts disponibles del dominio especificado.

Quienes pueden entrar en casa? … net user
Este comando muestra las cuantas de usuarios del ordenador.

Bueno a fin de no ser monótono aquí listo los comandos que pueden ser de interés
Conocer los usuarios de la maquina local -->  net user
Conectarse a un recurso compartido -------->  net use
Conocer estadísticas del Server   ------------>  net stats
Conocer estadísticas de red  ----------------->  net statistics
Manipulación de recursos compartidos ----->  net share

El comando mas importante de todos creo en opinión personal que es
Help y su sintaxis es:

<comando> /?
Ejemplo: dir /?

A riesgo de parecer descortés puedo decir que esta extensa la explicación de estos comandos, pero bueno creo que con esta introducción baste para tener motivos para ponerse a investigar. Recuerda (…) te enseñamos a andar … el camino lo escoges tu y como dijo el poeta:
“ … caminante no hay camino se hace camino al andar …”

Todos somo =’s
You will never walk alone …
I’m here

Continuar leyendo

Código de redundancia cíclica

JKS [jksware@gmail.com]

CHECKSUMS

Lo mismo sea para transmitir datos a través del puerto serie, para hacer zip / unzip de un fichero o para acceder a un CD, está presente en la programación de un controlador de E/S – incluyendo el BIOS – un conjunto de instrucciones capaz de comprobar la integridad de determinado paquete de datos que se desee preservar: un algoritmo de control de errores encargado de la detección de cualquier variación – por ligera que esta sea - con respecto al contenido digital original, provocada por una falla aleatoria vinculada a la transmisión, almacenamiento, lectura o recepción de los mismos, y nunca debido a una intervención inteligente.

Un algoritmo de control de errores utiliza para detectar la corrupción digital un código que tiene determinada afinidad numérica con la información a procesar en cuestión. Para cada contenido digital existe un único código, mientras que diversos contenidos pueden generar el mismo código de comprobación, a menudo llamado checksum o CRC ( Cyclic Redundancy Check ).

A cada contenido corresponde un código, pero a cada código no le corresponde un contenido. Por lo tanto, si llevamos este pensamiento al sistema cartesiano, podemos deducir que los códigos serían representados en el eje X, y los contenidos en el eje Y. Para una función CRC en la que la variable de entrada es X, el eje Y es dependiente a ésa entrada. Sin embargo, X es totalmente independiente.

En otras palabras, si contamos con un buen algoritmo, una sustitución de un único mísero bit en nuestro mensaje puede ser suficiente para variar por completo el código generado, aunque la información sea de varios kbits de longitud – como sucede con la transmisión de información a través del módem o de las redes TCP/IP, en que cada paquete viaja acompañado de un checksum, y cuya comprobación se realiza por hardware y por software, respectivamente.

ALGORITMO DE UN CRC

Desde el punto de vista práctico la implementación de un algoritmo de comprobación de redundancia cíclica puede ser bastante fácil, en dependencia del objetivo para el cual se desee, y no requiere de grandes conocimientos de álgebra ni cálculo, sino de simples conocimientos de programación linear.

Pero cuando se mira con un carácter más analítico, pasa algo parecido a lo que sucede con los algoritmos de encriptación, que no se puede a simple vista apreciar cuán buenos son o cuán duraderos ante las desavenencias del tiempo pueden ser, a no ser que se prueben en la cotidianidad. Por ejemplo, del CRC-32 están listados en Wikipedia varios estándares que utiliza cada uno diferentes polinomios – que no son más que el juego de bases y exponenciales con que se basa cada algoritmo – cada uno estandarizado en una cuestión determinada en la que otro, muy parecido, falló en hacer bien o con facilidad en un área de la técnica en cuestión.

De aquí se podría pensar que si son transmitidos ambos el contenido digital y el checksum de CRC anexado, y se realiza satisfactoriamente la comprobación es que los datos no han sido modificados. Incorrecto. CRC no es un estándar de encriptación, sino que su utilidad reside exclusivamente en la comprobación de corrupción ocasionada por fenómenos espontáneos, y no por la mano del hombre. Los criptosistemas emplean además de un checksum otro código llamado firma digital, el cual es estampado sobre el mensaje a transmitir, y que guarda relación con el par de claves de un sistema de Claves Públicas, que sí garantiza la seguridad en cuanto a intervención humana se trata ( para leer más acerca de criptosistemas vea Pretty Good Privacy en BlackHat 43) .

La base para los algoritmos de CRC, se basa en separar el contenido digital en paquetes de bits manejables por la máquina – dígase 32 bits – para después pasar ser divididos por el polinomio dado – que debe tener un orden de igual cantidad a la longitud del paquete – por el algoritmo con el cual se trabaje. Se desea obtener de esta división el resto y no el cociente – ya que no se trata de una operación común y corriente en el sistema decimal – y se alcanza mediante el acceso directo a operaciones lógicas en lenguaje ensamblador.

El resto a obtener de la primera operación tendrá un dígito menos que el divisor, por lo que se le agregará el bit correspondiente del dividendo y por supuesto, como el dividendo es mucho más largo – ya que posee el contenido digital propiamente dicho – tras la primera operación lógica XOR se obtiene un resto que es dividido nuevamente por el divisor, a semejanza de una operación normal. La división con resto continúa hasta que se complete la totalidad del mensaje. El resto de la última operación es el checksum del algoritmo. Si cuando se obtenga el mensaje este número ha variado, entonces algo anda mal, y los datos probablemente estén corruptos.

La elección de un buen divisor es el cuerpo de un algoritmo de CRC. Si no se trabaja conscientemente y se elijen números al azar no se contará con la seguridad necesaria. Existen reglas para lograr ése objetivo, pero esas se las dejamos a los matemáticos.

Actualmente se trabaja por hace compatibles estos sistemas de comprobación de checksums con los últimos procesadores de 32 y 64 bits – recordemos que la teoría de la información de la cual surgieron todos estos algoritmos es mucho más vieja y datan de los sesentas – y se hace énfasis en generar tablas que aligeren la carga de trabajo mediante el procesamiento previo del cálculo de los restos de las instrucciones, ya que en la actualidad se cuenta con mucho más espacio en caché y memoria operativa para realizar dichas operaciones.

CHECKSUM = OK

Existen otras muchas técnicas no expuestas aquí que cumplen más o menos igual las funciones, pero la base en todas es la misma, la detección de cambios sencillos que aparejen grandes cambios en el código a generar. Se puede hacer un estudio mucho más detallado de lo que pasa aquí, si te interesa el tema escríbeme a jksware@gmail.com y prometo mandarte un par de documentos muy interesantes debatiendo acerca del uso de algoritmos más sofisticados para generar cheksums con un altísimo rendimiento.

Así que cuando un disco te “de bateo” cuando trates de copiar algo del mismo, o el WinRAR no te deje abrir un fichero comprimido que bajaste porque genera un error de checksum, ya sabes cómo es que la máquina eventualmente se va a dar cuenta del problema, casi cuando está punto de quemarse el lector o derretirse el micro, para evitar mayores complicaciones.

Continuar leyendo