lunes, 7 de julio de 2008

Informáticos vs Programadores

Alien [blackhat4all@gmail.com]

Antes de proseguir con este artículo me gustaría hacer algunos viajes en el tiempo para que entiendan mejor a lo que me quiero referir y las consecuencias que esto puede traer.

Década del 80

Época en que los informáticos que habían eran tan pocos que se podían contar con los dedos de una mano. 5 años de carrera bastante compleja debían enfrentar los que algún día quisieran llegar a ser informáticos, o trabajar al menos fungiendo una función similar. Ser un informático en los años 80 implicaba por lo general cierta habilidad con el teclado, puesto que por aquel entonces los ordenadores que más habitualmente se veían en los centros de trabajo (en caso que hubiese alguno) eran televisores caribe con un teclado inteligente y por lo general con solo dos lenguajes de programación: C y Basic. Un informático en aquel entonces por obligación debía saber programar al menos en uno de estos lenguajes y además, conocer un poco más sobre la máquina que tenía delante, ya que era el responsable de arreglar cualquier dificultad que esta presentara. Por lo general era difícil encontrar a las 10:20 am a un informático llamando a Copextel para reportar un problema, por complejo que fuera. (Daba gusto vivir en aquella época.)

Década del 90

Empiezan a proliferar con más libertad las computadoras, ya podemos verlas en escuelas secundarias y primarias e incluso al final de este tiempo ya podemos ver algunos modelos que corren bajo sistemas operativos con un ambiente visual. No obstante, la carrera de Ingeniería informática sigue siendo un camino difícil de atravesar para muchos y los pocos que llegan a terminarla, se pueden considerar como buenos ingenieros que, a pesar de tener o no trabajo como tales, conocen y dominan los contenidos impartidos.

Quinquenio 2000-2005

Por razones que no me corresponde a mí tocar en este artículo, se empiezan a crear centros para insertar a los estudiantes principalmente de preuniversitarios y egresados de secundarias a estudiar carreras relacionadas con la computación. A pesar de ser muy buena idea esta de hacer que esta carrera sea más accesible, según mi criterio no creo que el método utilizado haya sido el correcto. Jóvenes de todo el país, muchas veces sin ningún conocimiento sobre ordenadores, se alistaban para, en poco tiempo, ejercer como maestros de computación, o hacer papeles de similar importancia.

Esto trajo como consecuencia que muchos de los jóvenes que en estos cursos se alistaban, al no tener una base lo suficientemente sólida o no mostrar el interés que esta carrera requiere, terminaran siendo puros maniquíes, personas con un conocimiento muy, muy, muy bajo para el nivel que según sus títulos ellos tenían.

Y es quizás esta la peor parte del caso, durante ese tiempo muchos salieron graduados con títulos muy honoríficos y conocimientos muy bajos, lo que, sumado al poco personal realmente calificado para trabajar frente a ordenadores que existía en el país, trajo como consecuencia que los centros de trabajos se alimentaran de estas escuela que, en lugar de egresar informáticos o técnicos en computadora, realmente lo que hacían era graduar a personas con conocimiento similares a los que adquiere un operador de microcomputadoras en un joven club luego de 6 meses de clases.

Recta final: 2005-2008

Los centros de los que hablé en los párrafos anteriores continuaron reproduciéndose por todo el país. Haciendo cada vez más y más “ingenieros Informáticos” mientras que para estos existen cada vez menos y menos puestos de trabajo.

Pero no es esta la mayor diferencia con respecto a los años 80. El caso más grave es que con el desarrollo de la computación ha venido el desarrollo de los programas y por supuesto el desarrollo de los lenguajes de programación. Un “Ingeniero Informático” (hagan valer las comillas) de hoy en día no sabe muchas veces que es MS-DOS porque jamás se han visto en la necesidad de abrir la consola, con llamar a Copextel y decirles que la máquina no enciende resuelven el problema; y de los que lo saben, estoy casi seguro que más del 70% ignoran que quieren decir las siglas. Un “Ingeniero Informático” de hoy en día no sabe que diablos es el POST que ejecuta la máquina al inicio, el Himen.sys, jamás ha oído hablar del system.ini en win2000 y para que hablar de palabras mayores como Snifer.

Hoy en día Informático es cualquiera: mi vecino, el vecino de mi vecino, el primo del vecino de mi vecino, la novia del primo del vecino de mi vecino…

Y duele saber que, cuando se le revisa la cartuchera de CDs a un “Informático”, en más del 80% de los casos, 10 de los 12 Cd que tiene son de juegos, música o videos de regueton, 1 es de algún programa que le dieron la semana anterior y aún no ha tenido tiempo de probar y el otro es de algún Windows UE.

¿Futuro?

En caso de quedarnos de brazos cruzados, veo un futuro tan negro que realmente no lo veo. Los reales Informáticos de los años 80, que en aquel tiempo tenían 25-30 años, dentro de 5 años (2013), estarán jubilados o cerca de hacerlo. En 5 años la mayoría de las empresas estarán trabajando con “Informáticos” graduados del 2000 en adelante, sin saber que están dándole cabida a “Hacker” innatos, que son capaces de eliminar la base de datos de la empresa por la sencilla razón de que no se les quiere abrir con el Word para leerla. (No estoy exagerando, conozco cada casos que…)

Y claro que hay excepciones, siempre las hay. Siempre hay muchos que se gradúan y no dejan de aprender, no dejan de profundizar, de hacerse preguntas, de indagar en campos ya conocidos o no explorados por ellos. Siempre está el que graduado o aún estudiante, Informático o pescador, gusta de ir un poco más allá, de aprender más y más.

Ese siempre va a existir, ese y muchos como ese, pero serán los mejores y por lo tanto los que tendrán la posibilidad de escoger donde y como trabajar: Empresas de importación de productos, Firmas, Corporaciones, etc; lo que deja una pregunta en el aire: ¿Qué pasará con empresas, instituciones o sectores como Educación, Salud Pública o Servicios Comunales, etc?

¿Entonces?

Siendo así, veo apremiante marcar una diferencia entre el Informático y el “Informático”. Veo apremiante poder diferenciar de alguna forma a quien se pasó 5 o 6 años quemándose las pestañas, yendo a estudiar a altas horas de la noche a una casa de estudio, levantándose de madrugada para repasar ante un examen de quien se pasó el mismo tiempo barqueando, yendo a la escuela por obligación de sus padres o a buscar “jevitas”.

Evidentemente ambos no tendrán el mismo conocimiento jamás (a menos que el primero realmente no de para la carrera y el segundo sea un genio indudable de este milenio). Es muy importante que al llegar a un centro de trabajo se sepa quien puede o no llevar a cabo la tarea que allí se desarrolle.

Ojala y esto sea leído por “alguien” que en lugar de censurar se dedique a pensar y podamos escuchar o leer en la presa algún día:

“Se graduaron 1000 nuevos programadores en el municipio de…“

Continuar leyendo

Indicador de línea telefónica en uso

Neuromante [luisgarcell@hab.unaicc.cu]

Este práctico y diminuto circuito permite saber el estado en que se encuentra una línea telefónica. De encontrarse libre (aparato colgado) se ilumina el indicador verde, de lo contrario (aparato en uso) se enciende el colorado.


Como se aprecia a primera vista, el circuito se alimenta completamente de la red telefónica, dado que su capacidad de suministro sobra para el manejo de un led y sus componentes pasivos adjuntos. Primeramente se obtiene una polarización de la línea por medio del puente rectificador de entrada. El led verde se enciende al estar la línea telefónica desocupada, cuando la tensión de base supera los 40v (fijado por las resistencias de 56K y 4K7) haciendo conducir masa a través de su transistor. Asimismo éste transistor descarga a masa la base del transistor que maneja el led colorado, haciendo que este permanezca apagado. Al descolgar un teléfono se produce en la línea una caída de tensión, llegando ésta a unos 18v. Esta tensión no es suficiente para romper la base del transistor del led verde, pero si es más que suficiente para iluminar el led colorado, el que queda habilitado por el transistor abierto del led verde.

CONEXION: Este dispositivo se conecta a la línea telefónica como si de otro aparato telefónico se tratase. No requiere fuente de alimentación ni mantenimiento o control alguno.

USOS: Dado que este simple circuito es muy versátil puede ser empleado para:
• Verificar la pinchadura de la línea
• Evitar que al descolgar un teléfono el módem se interrumpa.
• Prevenir la pérdida de Faxes al descolgar cualquier aparato durante una recepción
• Adosándole un temporizador se puede llevar un control horario de uso de la línea
• Grabar conversaciones sólo cuando éstas se producen
• Chequear visualmente cuando un auricular queda mal colgado
• Y muchas otras funciones más

Continuar leyendo

Terminator (Kill 'Em All) (Parte 2)

JKS [jksware@gmail.com]

LINUX IS NOT UNIX

En sistemas operativos modernos se cuenta, de hecho, con abstracciones un poco más complicadas. Apuntadores, llamadas a DLL, semáforos, memoria virtual, memoria compartida e hilos de ejecución son algunos de los términos empleados por diseñadores de sistemas y programadores de aplicaciones de usuario para hacer más fluida la utilización de los recursos, cada vez mayores, que poseen las computadoras.


Un proceso se crea de la siguiente manera: El sistema operativo es cargado en memoria y se le entrega el control total de la máquina. Es también encargado de decir el cuándo y el cómo de absolutamente todo lo que sucede. A su vez, provee una plataforma para que los desarrolladores de aplicaciones de usuarios no tengan que preocuparse por que se les acaba la memoria virtual ni como o qué tipo de monitor está usando el usuario. El kernel empieza entonces a crear procesos a los que nombra hijos. Estos procesos hijos serán los encargados de interactuar en la plataforma brindada por el sistema a los usuarios. A la vez, cada proceso puede llamar a otro proceso, como cuando usted hace doble clic en el escritorio y “llama” a una aplicación como la calculadora. En ese momento, si está utilizando Windows como SO, todo lo que hace el Explorer escondido en background, es decirle al kernel que empiece a correr determinado programa. Este programa será un nuevo hijo del kernel. Dependiendo del caso – se ve mucho en programas instaladores – el propio programa será el que creará el nuevo proceso, y una vez que el padre se haya terminado, el hijo automáticamente también finalizará. De esa forma se crea un árbol de procesos, que puede ser observado gráficamente si contamos con un manejador de procesos avanzados, como los que se incluyen en cualquier distribución de Linux o los que se adquieren de terceros en Windows.

Process Explorer – una herramienta manejadora de procesos que no embarca con el
sistema operativo de Microsoft – muestra un árbol de procesos en ejecución en Windows XP con
sus respectivos Process Identifier (PID).

En realidad, un hilo de ejecución difiere en términos generales de un proceso. Mientras que un proceso – esto siempre dependiendo del SO a analizar – comprende una independencia bastante amplia del resto del sistema, un hilo no; para acceder al espacio reservado de memoria de un proceso hay que lidiar con el kernel del sistema – o con el antivirus en caso de que el primero no sea lo suficientemente cuidadoso – para que este sea el “mediador” y se encargue de tramitar cualquier solicitud a realizar. En la otra mano, el hilo de ejecución no es más que un hijo de un proceso que no tiene mucha identidad propia, los hilos comparten casi todo excepto tiempo y los registros de procesador: espacio de memoria (por tanto constantes y variables globales declaradas y demás), y lo que es más importante, no necesitan de la aprobación del kernel para realizar llamadas a procedimientos que queden dentro de las fronteras del proceso que les dio lugar.

En términos generales, un proceso contendrá cuantos hilos requiera, siempre y cuando la cantidad de memoria virtual y la prioridad asignada se lo permitan. Un proceso es, a grandes rasgos, un hilo con su propio espacio de memoria y un tratamiento diferenciado con respecto al resto de las “tareas” del sistema.

HYPER-THREADING Y MULTITHREADING

Hasta hace sólo unos años atrás, las únicas computadoras que tenían más de una “cabeza pensante” (CPU) eran las súper-computadoras gigantescas como las de laboratorios de experimentación de IBM y los gigantescos clústeres de PCs de los datacenters de web del mundo, mientras que el resto de los usuarios normales de debían conformarse con una sola CPU, al punto que Microsoft decidió cobrar una licencia adicional si el sistema Windows NT era instalado en computadoras con más de un procesador.

La tecnología de computadoras para usuarios personales hasta entonces no abarcaba universalmente varios micros, al menos hasta la llegada de la tecnología Intel que permitía dos microprocesadores Pentium III bajo la misma carcasa. Se trataba de dos CPU encapsulados totalmente aparte y funcionando a la vez en una sola placa madre con características especiales. De ahí que el Windows 2000 ya soportara más de un micro, tanto por su edición Server como Workstation, aunque por aquel tiempo dichos PIII no abundaran en el mercado, excepto para usuarios avanzados y que tuvieran, definitivamente, prosperidad económica.

Algún tiempo después Intel, siempre a la vanguardia en cuanto a tecnología de silicio, liberó una versión de Pentium IV con una tecnología bastante peculiar. Se trataba de la era del P4 Hyperthreading que permitía, según los comerciales de la época, casi duplicar la velocidad de cálculo y ejecución de muchos programas, mediante la fabricación doble de muchos – y no todos ni los más caros – componentes internos de la micro-arquitectura del procesador.

Administrador de Tareas de Windows XP, en el que se aprecia dos núcleos de procesador
ejecutando un juego bastante consumidor de recursos, en la que la carga de instrucciones no
está bien balanceada entre el primero y segundo núcleo.

IMPLEMENTANDO UN HILO

A pesar de que los sistemas operativos facilitan, por no decir que proveen, todo lo necesario para implementar un hilo, muchos lenguajes multiplataforma necesitan de una buena estructura de código y de varias lecturas del API para poder crear hilos dentro de la aplicación. Es algo natural que, a pesar de que sea bastante parecido el manejo de hilos en distintos sistemas como el Linux o el Windows – que a su vez copian bastante de sus antecesores, UNIX y DOS respectivamente – se necesite de una especialización en cuanto a la programación de hilos para cada sistema para el que se quiera programar. Esta es, sin duda, una de las principales limitantes a la hora de diseñar una aplicación multiplataforma totalmente funcional.

Existen, sin embargo, algunos compiladores que facilitan la tarea de la implementación de hilos de ejecución en nuestros programas. Entre ellas se encuentra, por suerte – y pesar de ser tan fuertemente criticado en muchas otras áreas – los compiladores de Borland, para uno de los cuáles tengo la dicha de ser debugger.

2 ^ 2 != 4

El caso es que el mercado de software no estaba preparado – y no podemos decir con convicción de que aún está en 2008, al menos el mercado de usuarios residenciales – para utilizar a plena capacidad dos o más procesadores. Ni siquiera los sistemas operativos como Windows se encuentran totalmente dispuestos a correr programas comunes como hojas de datos con más de un procesador con el objetivo de aumentar la capacidad de manejo de datos. Los programas corren, eso sí, pero no todos al doble de velocidad, incluso algunos lo hacen a menor velocidad. La explicación, bastante sencilla: los programas y la plataforma operativa no distribuyen uniformemente la carga de instrucciones entre ambos procesadores, de manera que uno trabajaba a plena capacidad, mientras que el otro toma – muchas veces – una siesta. Se demostró, incluso, que no existe mucha diferencia de rendimiento en la ejecución de una suite ofimática entre una PC mono-procesador y otro multiprocesador – como lo demuestran los diversos videos del estilo P4 No-Hyperthreading 3.6 GHz vs P4 Hyperthreading 3.0 GHz de Tom´s Hardware que aun conservo.

Todo lo que ha hecho Intel – junto con AMD, IBM y Apple – desde que se llegó a la barrera de 45 nm de encapsulado ha sido aumentar el número de núcleos por procesador – de 1 a 2, de 2 a 4, en saltos de potencias de 2 – y ya está pensando, en un futuro cercano, “sacar” al mercado el micro de 8 núcleos y no mucho más allá el de 32.

Y es que – y aquí es donde quizá me trague estas palabras en un par de años – ya han llegado al límite de transistores, y por ende frecuencia y velocidad permisibles por las leyes físicas intrínsecas que rigen la tecnología de fabricación. Moore, ex-presidente de Intel – ¡qué coincidencia! – va a tener que violar su fórmula sagrada de la duplicación del número de transistores por microprocesador cada 18 meses.

Continuar leyendo

CIA Commander

L1nk [l1nk.darck@gmail.com]

Esta es una rápida guía para comenzar a utilizar el CIA, y aunque los fines de este programa es el de restaurar sistemas caídos o defectuosos, puede ser utilizado con otros fines los cuales quedan de parte del usuario. Nos tantee les pido que sean cuidadosos con los cambios que realicen utilizando esta aplicación.

Este es una aplicación muy original aplicable en NT/2000/Xp, sencilla y muy útil si es que se trata de tener todos los privilegios de la PC sin contar con el pass administrativo. Se ejecuta al inicio del sistema mediante un disquete de arranque si la BIOS del PC victima tiene disponible el buteo de disquetes de lo contrario debemos considerar cambiar la configuración de la misma para activarlo. Para ello hay una forma muy sencilla de lograr lo en caso de que nos hayan puesto contraseña en el BIOS: “esta consiste en colocar una flash o medio extraíble antes de l arranque de la PC y presionar F8 (el menú de booteo) veréis que se le activan todas las opciones de booteo de la BIOS, esto sucede porque al reconocer un nuevo medio extraíble el BIOS reinicia su menú de booteo para poder incluir a este entre las opciones”

Una vez cargado el programa escogemos la partición donde se encuentra instalado Windows y accedemos a ella activándosenos un menú con las 4 opciones principales del Programa.:File Manager, User Manager, Registry Editor y Reboot para salir del sistema.

Puedes apoyarte en las teclas: page-up y page-down para subir y bajar por los directorios y el Tab. Para cambiar de panel.

1) File Manager: Aquí podrás acceder a los directorios y archivos de PC, copiar, mover, editar y borrar los mismos, el acceso es pleno y sin restricciones, permite ver archivos ocultos incluyendo los del Hide Folder y otros programas utilizados para ocultar carpetas:
F1 - Ayuda
F2 - Información sobre el archivo seleccionado
F3 - Editar
F4 - Nuevo Directorio
F5 - Copiar el directorio o archivo seleccionado
F6 - Cambiar nombre
F8 - Eliminar directorio seleccionado
F9 - Copiar archivo seleccionado a l disquete
F10 – Volver al Menu Principal

2) User Manager: Aquí el CIA trabaja directamente con los archivo WinNT y la SAM del Equipo. Por lo que estaremos en directo con las cuentas de usuarios del equipo, este método tiene un truco para llegar a las cuentas del equipo, al acceder a la opción User Manager, buscamos el directorio Windows y sobre el presionamos la tecla espaciadora y se : nos activa el menú de administración de cuentas, nuestro principal objetivo.:

Vista previa de la aplicaión

En el recuadro verde aparecerán una pequeña descripción del usuario seleccionado la cual nos informa si esta protegido por contraseña, habilitado o no, nombre y grupo al que pertenece, así como la fecha de su último acceso al sistema y apoyándonos en las siguientes funciones podrás hacer cambios en los mismos:
F1 - Ayuda
F2 - Salvar la contraseña en un disquete, después podrás crackearla utilizando el CIA CommanderPWD.EXE
F3 – Cambiar la contraseña del usuario seleccionado
F6 – Restaurar la contraseña guardada en el disquete
F10 - Volver al Menú Principal

“Ahora, espero que hayan notado el poder que nos da esta operación, aquí podemos fácilmente llegar a una máquina guardar la contraseña del administrado en nuestro disquete, poner la nuestra acceder a la PC asegurarnos la estancia en ella y volver a dejar todo como estaba restaurando la contraseña del admón., sin que jamás se note que pasamos por allí.”

3) Registry Editor: Aquí se puede navegar por la estructura del registro de la PC, haciendo cambios más profundos en los que al sistema operativo comprende. Podremos hacer arrancar junto con el sistema al programa que deseemos o simplemente hacerlo pasar por uno de los procesos de inicio del sistema operativo.

4) Reinicia el Ordenador.

Nota: Es bueno aclarar que una ves activa la opción de la barra espaciadora sobre el directorio Windows esta mantiene su efecto hasta el próximo reinicio de la máquina.

Continuar leyendo

PC = "Todo Ventajas"

Yordan [truano@infomed.sld.cu]

En ocasiones he estado entablando un tema de conversación referente a las computadoras con personas que no dominan demasiado el tema y ha surgido esta pregunta “¿Y para que deseo yo una computadora en mi casa?, ¿Que uso le puedo dar?” y aunque muchos se digan ¡Elemental Watson!, no crean, aun existen una gran variedad de personas que no están conscientes de que tener una PC en casa ya es mas una necesidad que un lujo, con todos los favorables cambios que está experimentando el país en estos momentos, ha surgido uno en particular que viene a beneficiar mucho el desarrollo de la cultura informática en Cuba, ya existen muchas tiendas con ofertas considerablemente buenas en la venta de computadoras para el cliente común, si bien es cierto que no es un precio asequible a todos los cubanos, al menos hay que reconocer que un buen porciento de la población ahora podrá trazarse la meta de adquirir uno de estos equipos, previendo esta estampida de nuevos poseedores de los equipos que diariamente manipulamos, les traigo este articulo donde explico la mayor parte de las ventajas de tener una PC en casa.


Para comenzar diremos que la informática por ser una ciencia tan amplia, con tantas sub ramas por decirlo de alguna manera, despierta muchísimo interés en todo aquel que se acerca por primera ves a ella, enseguida te identificas con alguna de sus ramas y la sed de conocimientos se hace cada ves mayor, esto no escapa al alcance de los niños, los cuales por tener una mente libre de problemas y preocupaciones, son como esponjas adquiriendo conocimientos, entonces podemos traducir lo anterior como (PC en casa = Niño genio).

Cuando adquieres una PC de escritorio, son muchísimas las mejoras y cambios que le puedes hacer, hasta llegar a convertirla en un centro multimedia para el hogar, me explico, compramos una tarjeta de video exportadora, compramos un sistema de sonido 5.1 (teatro en casa), conectamos la tarjeta exportadora a nuestro TV y… BINGO tenemos una sala de video con la mejor calidad, ya que podemos seleccionar en la PC las películas, videos musicales, series, documentales, etc, y los estaremos disfrutando en el TV de nuestra casa con una calidad de sonido por encima de la media, la calidad final dependería del tamaño de nuestro TV y de la calidad del sistema de audio 5.1 que  compremos.

Para aquellas personas que no tienen TV, o que tengan la PC en el cuarto, existe la posibilidad de comprar una tarjeta sintonizadora de televisión y radio, con lo cual estaríamos convirtiendo nuestra computadora en un televisor, una buena manera de poder decirle a la mujer “ve tranquila a mirar a los bomberos de la novela” y nosotros quedarnos disfrutando de la pelota, así resolvemos la clásica pelea marido-mujer por la programación.

Para que mencionar el hecho de que una buena y bien equipada PC sustituye cualquier consola de juegos, desde el antiguo “family” hasta los actuales “Xbox 360”, entonces por todo lo antes expuesto podemos llegar a la conclusión de que (PC en casa = Entretenimiento asegurado).

Cuantas veces nos atrasamos en nuestro trabajo, porque hay momentos en que el tiempo no alcanza, entonces vamos acumulando papeles y tareas que luego tenemos que llegar tarde a casa porque hay que acabarlas, aahh pero si en casa tenemos una PC con los programas correctos instalados, entonces podemos llevarnos el atraso a casa y terminar las tareas en el calor del hogar, quizás con una buena taza de café caliente o un vaso de batido según el gusto.

De la misma forma si tenemos instalada la enciclopedia “Encarta”, la enciclopedia “Todo sobre Cuba”, o si tenemos acceso online a “Wikipedia”, entonces nuestros hijos podrán hacer trabajo investigativo para realizar las tareas escolares, así como ampliar su cultura en todos los sentidos, ya que son herramientas muy completas, de esta forma llegamos a la conclusión de que (PC en casa = Problemas académicos y laborales resueltos).

Teniendo una computadora casera tenemos la ventaja de instalarle un modem, conseguirnos una cuenta de acceso y un correo, entonces nos podemos comunicar con el mundo entero, ya no habrá un familiar o amigo lo suficientemente lejos como para no saber de el, el método de comunicación por email (correo electrónico), es muchísimo mas barato que el teléfono, podemos leer la mayoría de los periódicos en su versión digital, informarnos de lo que sucede a nuestro alrededor sin tener necesidad de estar suscrito al Granma o al Juventud Rebelde, en la mayoría de los países (y espero que llegue el momento de tener el mismo nivel de desarrollo) podemos hacer compras online, sentados en nuestra computadora seleccionamos y pagamos el articulo en el cual estamos interesados , llegado este momento no caben dudas de que (PC en casa = Comunicación con el mundo garantizada).

Existen muchísimas otras ventajas que nos obligan a dejar de ver la PC particular como un lujo y comenzar a pensar que necesitamos una a nuestro lado para hacernos la vida mas fácil en todos los sentidos, por ponerles un pequeño ejemplo, hace solo unos días llegó un amigo con unas huevas de pescado y mi madre no tenía idea de cómo hacerlas, me bastaron 10 minutos para conseguir por internet como 15 recetas diferentes de cómo hacer las huevas, resumen, nunca pensé que unas frituras de huevas fuesen tan exquisitas.

Espero como siempre que mi artículo les sirva para ampliar sus conocimientos, y recuerden los que leyeron estas líneas conociendo todas las ventajas que yo nombré, que también hay que darle espacio a los que aún no saben.

Continuar leyendo

Sobrecarga de funciones y operadores en C++ (Parte 2)

CHenry [chenry@lab.matcom.uh.cu]

Sobrecarga de operadores binarios
Los operadores binarios se pueden sobrecargar pasando a la función dos argumentos. El primer argumento es el operando izquierdo del operador sobrecargado y el segundo argumento es el operando derecho. Suponiendo dos objetos x e y de una clase c, se define un operador binario + sobrecargado. Entonces x + y se puede interpretar como operator+(x,y) o como x.operator+(y)


Un operador binario puede, por consiguiente, ser definido:
- como un amigo de dos argumentos
- como una función miembro de un argumento (caso más frecuente)
- nunca los dos a la vez

Sobrecarga de un operador binario como función miembro
El siguiente ejemplo muestra cómo sobrecargar un operador binario como una función miembro:
class binario

{
  int x;
  public:
  binario() {x=0;}
  binario(int a) {x=a;}
  binario operator + (binario &);
  void visualizar() {cout<<x<<endl;
};

binario binario::operator +(binario &a)
{
  binario aux;
  aux.x=x+a.x;
  return aux;
}

void main()
{
  binario primero(2),segundo(4),tercero;
  tercero = primero + segundo;
  tercero.visualizar();
}

La salida del programas es 6.

Sobrecarga de un operador binario como una función amiga
class binario
{
  int x;
  public:
  binario() {x=0;}
  binario(int a) {x=a;}
  friend binario operator + (binario &,binario &);
  void visualizar() {cout<<x<<endl;
};

binario binario::operator +(binario &a,binario &b)
{
  binario aux;
  aux.x=a.x+b.x;
  return aux;
}

void main()
{
  binario primero(2),segundo(4),tercero;
  tercero = primero + segundo;
  tercero.visualizar();
}
La salida del programa será 6.

La función operador binario +() está declarada; debido a que es una función amiga, el sistema no pasa el puntero this implícitamente y, por consiguiente, se debe pasar el objeto binario explícitamente con ambos argumentos. Como consecuencia, el primer argumento de la función miembro se convierte en el operando izquierdo de este operador y el segundo argumento se pasa como operando derecho.

Sobrecargando el operador de llamada a funciones ( )

Uno de los operadores más usuales es el operador de llamada a función y puede ser sobrecargado. La llamada a función se considera como un operador binario
expresión principal (lista de expresiones)

Donde expresión principal es un operando y lista de expresiones (que puede ser vacía) es el otro operando.
La función operador correspondiente es operator() y puede ser definida por el usuario para una clase c sólo mediante una función miembro no estática.
x(i) equivale a x.operator() (i)
x(i,j) equivale a x.operator()(x,y)

Sobrecargando el operador subíndice [ ]

El operador [] se utiliza normalmente como índice de arrays. En realidad este operador realiza una función útil; ocultar la aritmética de punteros. Por ejemplo, si se tiene el siguiente array: char nombre[30]; y se ejecuta una sentencia tal como car = nombre[15]; el operador [] dirige la sentencia de asignación para sumar 15 a la dirección base del array nombre para localizar los datos almacenados en esta posición de memoria.

En C++ se puede sobrecargar este operador y proporciona muchas extensiones útiles al concepto de subíndices de arrays. [] se considera un operador binario porque tiene dos argumentos. En el ejemplo p=x[i]

Los argumentos son x e i. La función operador correspondiente es operator []; ésta puede ser definida para una clase x sólo mediante un función miembro. La expresión x[i] donde x es un objeto de una determinada clase, se interpreta como x.operator[](y).

Sobrecarga de operadores de flujo

Las sentencias de flujos se utilizan para entradas y salidas. Los flujos no son parte de C++, pero se implementan como clases en la biblioteca de C++. Las declaraciones para estas clases se almacenan en el archivo de cabecera iostream.h. En C++ es posible sobrecargar los operadores de flujo de entrada y salida de modo que pueda manipular cualquier sentencia de flujo que incluya cualquier tipo de clase. Como se definen en el archivo de cabecera iostream.h, estos operadores trabajan con todos los tipos predefinidos, tales como int, long, double,char. Sobrecargando estos los operadores de flujo de entrada y salida, estos pueden además manipular cualquier tipo de objetos de clases.
Ejemplo de sobrecarga de los flujos << y >>

class punto
{
  int x,y;
  public:
  punto() {x=y=0;}
  punto (int xx,int yy) { x=xx;y=yy;}
  void fijarx(int xx) { x=xx;}
  void fijary(int yy) {y=yy;}
  int leerx() {return x;}
  int leery() {return y;}
  friend ostream& operator << (ostream& os,const punto &p);
  friend istream& operator >> (istream& is,const punto &p);
};

void main()
{
  punto p;
  cout<<p<<endl;
  p.fijarx(50);
  p.fijary(100);
  cout<<p<<endl;
  cout <<"introducir los valores de x e y\n";
  cin>>p;
  cout<<"se ha introducido"<<p;
}

ostream& operator<<(ostream &os,punto &p)
{
  os <<"x= "<<p.x<<",y= "<<p.y;
  return os;
}

istream& operator>>(istream &is,punto &p)
{
  is >>p.x>>p.y;
  return is;
}
Es posible poner en cascada múltiples objetos en una sentencia de flujo de salida:
punto p1,p2, p3;
cout<<p1<<":"<<p2<<":"<<p3;

No solo necesitamos pensar como programadores, conocer las características de cada lenguaje nos permite elegir la mejor opción para la construcción de un software que cumpla con las expectativas de la comunidad.
Quejas y sugerencias mailto:chenry@lab.matcom.uh.cu

Continuar leyendo

Sobre vulnerabilidades

Neuromante [luisgarcell@hab.unaicc.cu]

Amenaza combinada

Amenaza combinada es una descripción general de programas maliciosos o paquetes de programas maliciosos que combinan la funcionalidad de distintos tipos de malware: virus, gusanos, troyanos y así sucesivamente.
Las aplicaciones, los sistemas operativos y los productos de seguridad se han vuelto más sofisticados. Los creadores de virus han respondido creando programas maliciosos cada vez más complejos.


Un programa malicioso debe cumplir la mayoría de los siguientes criterios, para ser considerado como una amenaza combinada:
Tener más de una carga útil, lanzar un ataque DoS, instalar una puerta trasera, dañar un sistema local, etc. Reproducirse o propagarse de varias formas: vía correo electrónico, canales de IRC, redes de intercambio de archivos, descargarse ellos mismos de sitios web comprometidos, etc. Utilizar múltiples métodos de ataque: infectar archivos exe, modificar más de una clave de registro, modificar archivos HTML, etc.

Sobre ataque DoS

Los ataques de Denegación de Servicio (DoS) están diseñados para dificultar o paralizar completamente el funcionamiento normal de un sitio web, red, servidor u otro recurso. Los piratas informáticos y los creadores de virus utilizan distintos métodos para realizar ataques DoS. Habitualmente los ataques DoS sobrecargan los servidores con solicitudes incesantes hasta que los servidores se vuelven tan lentos que los usuarios regulares se rinden a la frustración o todos los servidores colapsan juntos.

Hoy en día, los piratas informáticos suelen realizar ataques DoS contra compañías por razones ideológicas. Sin embargo, los creadores de virus profesionales se inclinan más a amenazar a los negocios en línea con ataques DoS en un intento de ganar dinero.

Un ataque de Denegación de Servicio Distribuido, o DDoS, difiere del DoS solamente en el método. Un DoS se realiza desde un ordenador o servidor, mientras que un DDoS es un DoS organizado para que suceda simultáneamente desde un gran número de ordenadores o servidores.

Caballos de Troya

Los caballos de Troya son programas maliciosos que dañan al sistema anfitrión al instalarse. La principal diferencia entre los virus, los gusanos y los troyanos es que los troyanos no se reproducen por sí mismos.
Deben su nombre al histórico caballo de Troya usado por los griegos para conquistar Troya, porque los primeros programas 'caballo de Troya' simulaban ser juegos o aplicaciones inocentes, que sin embargo dañaban al sistema anfitrión después de su instalación.

Hoy en día los troyanos están programados para instalarse de forma invisible y realizar actividades destructivas que incluyen el comprometer al sistema anfitrión, también de forma invisible.
Los caballos de Troya se dividen en varias subclases incluyendo puertas traseras, espías de contraseñas, registradores, descargadores y más.

Gusano

Los gusanos son programas de ordenador que se reproducen independientemente, pero no infectan otros archivos. Hoy en día los gusanos utilizan todos los medios disponibles de propagación incluyendo redes locales, Internet, correo electrónico, canales de IRC, redes de intercambio de archivos, teléfonos móviles y otros canales de transporte.

En los últimos años los gusanos han causado estragos en todo el mundo: sobrecargando los canales de Internet y haciendo caer servidores, sirviendo como vehículo para ataques DoS, acarreando troyanos y así sucesivamente.

El término gusano fue acuñado por el escritor de ciencia ficción John Brunner en su novela de 1975 Shockwave Rider. El héroe, un programador talentoso, creó programas de ordenador que se reproducían solos y excavaron un "túnel" en una red mundial.

Especial de Spam... ¿qué es exactamente?

Para que la lucha contra el spam sea efectiva, es necesario darle una definición exacta.
La mayoría de la gente cree que el spam es el correo no solicitado. Sin embargo, esta definición no es del todo correcta y confunde ciertos tipos de correspondencia de negocios legítima con el verdadero spam.

Spam es correo no solicitado anónimo y masivo.
Esta es la descripción que se está usando hoy en los E.E.U.U. y Europa como el fundamento para la creación de una legislación antispam. Pero veamos más de cerca cada componente de la definición:
• Anónimo: el spam real es enviado con direcciones de remitentes falsas o pertenecientes a otras personas para ocultar la identidad del verdadero remitente.
• Envíos masivos: el spam real se envía en cantidades masivas. Los spammers hacen dinero con el pequeño porcentaje de destinatarios que responden. Por eso, para ser efectivo, los envios iniciales tienen que ser de gran volumen.
• No solicitado: las listas de correos, noticias y otros materiales de publicidad que los usuarios han optado por recibir, pueden parecer similares al spam, pero son en realidad correspondencia legítima. En otras palabras, un mismo mensaje de correo puede ser clasificado como spam o como correspondencia legítima dependiendo de si el usuario ha escogido recibirlo o no.

Debemos remarcar que no se han usado las palabras "publicidad" y "comercial" para definir el spam. Muchos mensajes de spam no son de publicidad y no contienen ninguna proposición comercial. Además de ofrecer bienes y servicios, los envíos de spam pueden entrar en las siguientes categorías:
• Mensajes políticos
• Súplicas seudocaritativas
• Estafas financieras
• Cadenas de cartas
• Falso spam usado para propagar programas maliciosos

Mensajes no solicitados, pero que son legítimos

Una proposición comercial legítima, una solicitud de caridad, una invitación enviada personalmente a un destinatario real o una lista de correo pueden ser definidas como correo no solicitado, pero no como spam. Los mensajes legítimos también pueden ser: mensajes de fallas postales, mensajes enviados por equivocación, mensajes de los administradores del sistema o incluso mensajes de viejos amigos que le escriben al destinatario por primera vez. ¿Son no solicitados estos mensajes? Sí. ¿No son deseados? No necesariamente.

ue hacer con el spam

Ya que la correspondencia no solicitada puede ser de interés para el destinatario, un antispam de calidad debe ser capaz de distinguir entre el spam verdadero (no solicitado y masivo) y la correspondencia no solicitada. Este tipo de mensajes debe ser marcado como "posible spam", de tal manera que pueda ser revisado o borrado según la conveniencia del destinatario.

Las compañías deben tener una política respecto al spam, según la cual los administradores deben tener en cuenta las necesidades de los diferentes departamentos. El acceso a diferentes carpetas de correo no solicitado debe ser concedido a diferentes grupos de usuarios basándose en la evaluación de estas necesidades. Por ejemplo, un gerente de viajes puede querer leer los anuncios de viajes, mientras que el departamento de recursos humanos puede querer leer todas las invitaciones a seminarios y talleres de capacitación.

Continuar leyendo