"our dreams of freedom have changed the world everybody lives in"

Posts tagged "Programación":

10 ene. 2013

Descomposición de un fichero .c en varios ficheros

En la última clase de teoría que ayer impartí de la asignatura "Fundamentos de Programación I" correspondiente al Grado en Ingeniería de las Tecnologías de Telecomunicación, mostré como descomponer en varios ficheros un código fuente en C, evitando los típicos errores de "doble inclusión" que se producen si no se hace uso de las directivas oportunas del preprocesador.

Los errores que pretendemos solucionar son estos (o similares):

$ gcc -W -Wall -o descompuesto-mal principal.c rellena.c imprime.c In file included from principal.c:4: imprime.h:15: error: redefinición de `struct articulo' imprime.h:18: error: redefinición de la definición de tipo 'ARTICULO' rellena.h:18: error: la declaración previa de 'ARTICULO' estaba aquí imprime.h:20: error: redefinición de la definición de tipo 'TABLA' rellena.h:20: error: la declaración previa de 'TABLA' estaba aquí

Tras descomprimir el fichero adjunto a este post, encontrarás tres directorios:

Puedes comparar el código descompuesto con el código completo y observar cómo se ha llevado a cabo el proceso.

Obviamente, también puedes detectar el error de "redefinición" que muestran los mensajes del compilador y cómo se soluciona.

Si tienes alguna duda o comentario házmelos llegar por aquí.

Espero que te resulte útil.

Archivos adjuntos

Tags: Programación
21 may. 2012

Comenzando con Python

Python Python

ACTUALIZADO el 24-11-2012. Ver final del artículo.

Algunos de mis alumnos más inquietos y, por tanto, más prometedores me han preguntado en las últimas semanas si conocía el lenguaje Python y si podía ayudarles a comenzar con su aprendizaje. Conozco la existencia de Python pero no he escrito ni una sola línea en ese lenguaje, por lo que las posibles referencias para el aprendizaje que puedo compartir son nulas.

Quizá la ventaja más significativa respecto a ellos en este sentido sea mi edad, que me ha ido permitiendo tejer una red de contactos con la suficiente autoridad sobre diferentes materias a los que puedo recurrir en estas ocasiones. Así, mi buen "ciberamigo", Juan Lupión, del que tanto he aprendido sobre estos mundos de tecnología, me escribió este interesante párrafo:

De Python hay un par de recursos magníficos que yo conozca, el clásico "Dive Into Python" (http://www.diveintopython.net/) y el más moderno pero igualmente molón "Learn Python the Hard Way" (http://learnpythonthehardway.org/book/) Para tirar a partir de ahí, supongo que lo mejor es intentar hacer un proyectito en Python con Django o algo parecido y tirar de Stack Overflow y comunidad.

Esta mañana en el desayuno, igualmente, he contrastado con mi buen amigo Paco si en Udacity estaban viendo Python en alguno de los cursos, y me ha confirmado que se utiliza en este: CS253: Web Application Engineering y que muy probablemente en estos otros dos: CS101: Building a Search Engine y CS262: Programming Languages. Aunque todos están empezados ya, estad atentos a posibles reediciones. Si podéis, os recomiendo el CS253.

Y por último, como tenía que aportar algo propio a esta historia :-) he acudido a mi indiscutible editorial para este tipo de contenidos: lenguajes de programación y administración de sistemas, y he encontrado toda una página dedicada a Python. Gracias, O'Reilly.

Ahora sólo queda que estas referencias os sean útiles y que os animéis a compartir en los comentarios de esta entrada aquellas que vosotros mismos detectéis, exploréis y creáis que merecen la pena ser recomendadas. Me gustaría que esta entrada del blog fuera un punto de encuentro de personas interesadas en este lenguaje.

Para mí es imposible sacar un gramo de tiempo ahora, pero este verano, cuando las tardes me sean liberadas, recorreré este post con ganas de devorar toda la comida que me ofrezcáis.

ACTUALIZACIÓN del 24-11-2012

Otro buen libro para aprender que estado siguiendo durante el curso ofrecido por Coursera (Learn to Program: The Fundamentals) es este: Practical Programming: An Introduction to Computer Science Using Python.

Para serviros.

Dejar comentario.

Comentarios

Python (mortificador 21/05/2012 - 23:10)

Python es, sin duda, el lenguaje de moda. A pesar de ser interpretado es bastante eficiente, tiene librerías prácticamente para cualquier cosa (no obstante, es Google quien está detrás de muchas de ellas) y es fácil de aprender.

Si vienes de C, verás muchas similitudes en ciertas cosas (y es que Python está escrito en C) y hay una librería (que yo descubrí después de pasar horas sufriendo mientras migraba proyectos de C a python) llamada ctypes que te facilitará mucho la vida si quieres pasar algo de C a python. Y si quieres aprender programación orientada a objetos, Python es un buen lenguaje para empezar.

Como ejemplo, hace un par de años escribí un pequeño sniffer en python (según vayáis cambiando los comentarios y el código hará una cosa u otra, tal y como lo pongo muestra el tráfico HTTP, o más bien, el tráfico de origen/destino el puerto 80). Podéis ejecutarlo para ver como es capaz de mostrar el tráfico en tiempo real sin problemas (y a todos los niveles, incluido el de enlace). Es necesario ejecutarlo como root.

http://bit.ly/KEfXCf

Saludos!

Tags: Programación
28 nov. 2011

Normas de asistencia a las tutorías online

Aún no está programada la siguiente tutoría online **

Hazme llegar tus dudas para dotarla de contenido interesante. Puedes utilizar la dirección de correo electrónico que aparece aquí o el formulario de contacto de este sitio web. Permanece atento a esta página o al twitter.

PRÓXIMA TUTORÍA: 24 de enero de 2012 a las 20:30 horas. Duración: 45 minutos. TEMAS

  • - - - - - - - - -
  • Por qué se utiliza #ifndef #define y #undef
  • Utilización de typedef sobre una estructura
  • Lectura y escritura en ficheros
  • Utilización de fscanf
  • Compilación separada y make
  • Reserva dinámica de memoria
  • Trabajaremos con una tabla de estructuras reservada dinámicamente
  • Conceptos básicos/fundamentales del gdb

A continuación describo las normas de asistencia a las tutorías online que organizaré durante el curso.

1.- En un principio, y debido a los límites de capacidad de la plataforma, sólo podrán asistir a las tutorías online aquellos alumnos pertenecientes a mi grupo de teoría. En un futuro valoraré la oportunidad de abrirlas al resto de interesados. He valorado la posibilidad de que asista todo aquel que aparezca en las listas de la asignatura, ya esté en mi clase de teoría o no. El límite lo impondrá la plataforma: se respetará el orden de inscripción a través del formulario de registro. Una vez se alcance el límite no se admitirán más inscripciones.

2.- El permiso de acceso a la plataforma será controlado contrastando los datos del proceso de registro con la lista de clase. Es por eso muy importante que te registres con tu nombre y apellidos, así como con un correo electrónico válido donde se te irá informando, en inglés, de los pasos para completar el proceso hasta la asistencia a la tutoría online. A los alumnos que no se adapten a este requisito no les será permitida la asistencia.

3.- El proceso de registro puedes llevarlo a cabo pulsando aquí. Este enlace sólo está disponible si hay una "tutoría online" anunciada. Si la hay, aparece en un bloque de fondo gris y letras azules al principio de esta página.

4.- Es importante que asistas a la tutoría utilizando el navegador Firefox como herramienta: las pruebas que he realizado han sido mejores con él.

5.- Si es la primera vez que asistes intenta ajustar la pantalla que yo comparto a la tuya. Para eso, durante los primeros instantes de la tutoría online, tendrás que situar el ratón en la parte inferior de la zona de "mi pantalla" (la que transmito hacia ti) en tu navegador, aparecerá un cuadrado con flechas interiores hacia los vértices, pulsándolo se ajustará "mi pantalla" a tu ventana. También aparecerá una lupa con la que puedes ampliar la zona visible o dejarla tal cual es emitida (siempre que tengáis una pantalla suficientemente grande os recomiendo esta última opción).

6.- Al principio de la sesión explicaré todo esto de nuevo. Permanece atento y tras ajustar la pantalla intenta tocar lo menos posible tu software.

7.- Si deseas intervenir hazlo por chat. El "chat" estará deshabilitado por defecto para evitar distracciones durante mi explicación. Tras cada explicación lo habilitaré y todo aquel que tenga una duda podrá lanzarla simplemente escribiendo en la ventana de chat.

8.- Al final de la sesión, cuando yo me despida, NO CIERRES EL NAVEGADOR, por favor. Se presentará automáticamente una encuesta para intentar conocer tu opinión. La plataforma no permite realizar esta encuesta de forma anónima (¡lástima!). Te ruego que participes en ella pues así me ayudas.

Si deseas hacerme algún comentario sobre este tema, ahora o en cualquier momento al margen de la tutoría, puedes hacerlo pulsando en el enlace que aparece a continuación. Valoro mucho todas las críticas constructivas, los ánimos, etc. Todo es mejorable y lucharé por conseguirlo.

Espero que te sea útil.

Dejar comentario.

Comentarios

Yo con mucha suerte a las (Jose Carlos 28/11/2011 - 21:29)

Yo con mucha suerte a las 8.20 esoty en mi casa. Mi pre gunta es, una vez pasadas las 8 podemos entrar cuando queramos no?

Genial iniciativa, a ver qué (Julio 29/11/2011 - 00:24)

Genial iniciativa, a ver qué tal sale!

Inténtalo… (Godo 29/11/2011 - 10:54)

…y vemos qué pasa. Creo que mientras la sesión esté activa es posible entrar. Si tienes algún problema coméntamelo por aquí. Y si has podido entrar, también. Así vamos aprendiendo todos.

La siguiente vez intentamos fijar mejor la hora de inicio para evitar problemas.

Aprovecho también para dar las gracias a Julio, siguiente comentario que aparece, por su opinión.

Salud.

Tags: Programación
23 ene. 2010

Última vulnerabilidad de Internet Explorer y consecuencias

La última vulnerabilidad conocida de Internet Explorer ha supuesto un gran revuelo en todo el ciberespacio, y en parte del espacio real terrestre. No ha sido por ser especialmente maligna (que lo es, pero ya antes ha habido varias de este tipo) sino porque:

a) Microsoft conocía el fallo desde hace cinco meses (en algunas fuentes aparece "desde agosto" y en otras "desde septiembre") y no ha sacado hasta hace un par de días (21-01-2010) un parche que lo corrija.

b) Ha sido utilizada para atacar a varios gigantes de la red (Google y Yahoo) y de la informática (adobe), provocando en el primero un cambio de política en China.

c) Alemania y Francia, y posteriormente Australia, recomiendan el uso de navegadores alternativos a Internet Explorer, con el consiguiente daño al producto de Microsoft frente al impresionante disparo de descargas de opera y firefox.

Y todo esto por un puntero "dislocado" ;-), según leo en esta notica de Genbeta. Por eso insistimos tanto a nuestros alumnos, cuando estamos enseñando a programar en C, del especial cuidado que hay que tener con el uso de punteros: se han de hacer apuntar sólo a aquellos datos que queremos tratar y a NULL cuando ya no se utilicen. Soy consciente, claro está, de que todo es mucho más complejo, pero creo que sirve como ejemplo de concepto para aquellos que comienzan a conocer los "secretos de la programación" en una asignatura de primero de carrera.

¡Ay de esta insegura ciencia!

Y de los que trabajamos con ella }:-)

Dejar comentario.

Tags: Programación Seguridad
06 oct. 2006

GNU/Linux en cualquier parte

Hace una semana, más o menos, descubrí este proyecto: Damn Small Linux (dsl), el cual me ha parecido alucinante.

Es un sistema GNU/Linux que cabe en cualquier Memoria USB ya que tan solo ocupa 50MB. Existen varias posibilidades de uso: desde la instalación en disco duro hasta arrancar desde un Live CD o, y aquí es donde comencé a alucinar, un "Live USB".

¿Qué significa esto último? Pues que es posible llevarte un pequeño GNU/Linux instalado en un lápiz USB, y arrancar desde él cualquier ordenador moderno que lo permita (¡OJO! Esto ha de soportarlo la BIOS). Sin embargo, si aún nos parece difícil encontrar este tipo de BIOS, no pasa nada: podemos optar por instalar en el USB un sistema GNU/Linux embebido (dsl-3.0.1-embedded) que, haciendo uso del emulador de PC qemu, nos permitirá arrancar una máquina virtual GNU/Linux tanto en windows (se incluye qemu para windows en la imagen de dsl embebida que descargamos) como en GNU/Linux (se incluye también, obviamente, qemu para GNU/Linux). Así, independientemente del ordenador que nos encontremos para trabajar, siempre tendremos nuestro GNU/Linux, con nuestra configuración, nuestras aplicaciones preferidas, nuestros ficheros, etc.

Es justo lo que estaba buscando para mis clases en la universidad: necesitaba disponer de un editor lo más parecido al emacs posible, y del compilador gcc. Son las herramientas que utilizamos para intentar enseñar "Fundamentos de Programación" en lenguaje C.

Para que el sistema base de la distribución sólo ocupe 50MB, los desarrolladores han creado un repositorio de aplicaciones que se instalan como si de "plugins" o "extensiones" se tratara. Es decir, una vez arrancado el sistema GNU/Linux base, uno puede acceder al repositorio (sí, detecta nuestra tarjeta de red y hace NAT) y descargar e instalar desde allí lo que necesite. Claro está: en el repositorio encontré tanto el gcc como un editor que emula a emacs: zile.

Pero el editor "zile" no me gustó demasiado: emulaba las asociaciones de teclas pero no sangraba el código de forma automática (esto es fundamental para cumplir sin esfuerzo las "normas de estilo" y tender a elaborar un código fácil de seguir). Entonces me acordé de jed, otro editor que en su día utilicé en la ESI, que emula al emacs y que soporta muchos modos (con el correspondiente coloreado de la sintaxis, sangrado, etc.).

A continuación podéis ver la descripción que acompaña al paquete "jed" de mi inseparable Debian (Por cierto, Damn Small Linux está basada en Debian - otra razón por la que la escogí - y una vez instalada podría migrar a ésta).

Descripción del editor jed:

Package: jed

Priority: optional

Section: editors

Installed-Size: 292

Maintainer: Debian JED Group 
Architecture: i386

Version: 0.99.18-6

Provides: info-browser, mail-reader, editor

Depends: libc6 (>= 2.3.6-6), libgpmg1 (>= 1.19.6-1), libslang2 (>= 2.0.6-3), jed-common (>= 0.99.18-6)

Filename: pool/main/j/jed/jed_0.99.18-6_i386.deb

Size: 116272

MD5sum: 867a1d445d5e110df0326d48f88262cd

SHA1: 77da91a7bfd006b41ca66bb1b1fdb4506d9c16f3

SHA256: 6522b7fa42e995607c4cd738c0f8d239fb7da1cc1e7fe3f47613952487e531a8

Description: editor for programmers (textmode version)

 Jed is a small, fast (faster startup than bash) and powerful text editor.

 .

 Completely customizable with prepared emulation modes for Emacs, CUA

 (similar to KDE/Gnome/Openoffice), Borland-IDE, Brief, and EDT. Extensible

 in the S-Lang scripting language (with a syntax resembling C).

 .

 Editing functions: folding support; rectangular cut/paste; regular

 expression search/replace; incremental searches; search/replace across

 multiple files; multiple windows; multiple buffers; ...

 .

 Tools: directory editor (dired); info (browse GNU info files); mail;

 rmail; ispell; shell mode; ...

 .

 Special modes (syntax highlight, indention, compile, ...) for

 Basic, C, C++, DCL, FORTRAN, IDL, Java, NROFF, Pascal,

 Perl, PHP, PostScript, Python, SH.

 Modes for markup languages include HTML and (La)TeX (with AUC-TeX style

 editing and BibTeX)

 .

 Additional tools and modes can be found in the jed-extra package.

 .

  Homepage: http://www.jedsoft.org/jed/

Tag: devel::editor, interface::text-mode, role::sw:application, use::editing, works-with::text

Sin embargo, no existía una extensión de este editor para esta "microdistribución" :-(.

En fin, me reté a mi mismo y… ¡tachán! Mi primera "semicontribución" al software libre: jed-0.99-18.tar.gz (enviada a los desarrolladores de "dsl" para que la incorporen al "área testing" del repositorio).

Ya podemos disponer de nuestro querido entorno de programación C en cualquier parte (anytime-anywhere). A falta del depurador: gdb. Todo se andará.

Espero que le encontréis alguna utilidad.

No dejo de sorprenderme. ¡Qué alegría! ;-)

Dejar comentario.

Tags: GNU/Linux I+D+i Programación
12 jul. 2006

Mi primer artículo

Mundo Linux

Después de tan largo periodo de silencio (diferentes tareas me han abrumado este último mes), me complace haceros partícipes de este nuevo hito conseguido: en el último número de Mundo Linux han publicado mi primer artículo en prensa técnica.

Hacía tiempo que quería participar en esta forma de divulgar el conocimiento. Siempre he sido un gran aficionado a las revistas de informática, programación, etc. Comencé hace muchos años, de niño, leyendo el "Microhobby". Aún recuerdo con gran cariño su curso de "Basic" que me ayudó a hacer mis primeros pinitos con mi ZX Spectrum de 48K y teclitas azules de goma (gracias, Reyes Magos).

Después recuerdo que leí "PC World" y "PC Actual", ambas siguen editándose hoy en día, aunque con fuerte contenido de publicidad y escasa prospección técnica (algunos análisis de productos con mucha mano del fabricante, a mi parecer). Quizá la prensa rosa del mundo de la informática.

En mi busca de contenido técnico, y de saber aplicado, me suscribí durante un par de años (comenzando con el número 1 de ambas revistas) a "Programación Actual" y "Sólo Linux", ambas editadas por "Prensa Técnica" y creo que hoy desaparecidas… De esta época, años 1998 y 1999 aproximadamente, recuerdo artículos de gran nivel técnico que atesoraban cierta profundidad y muchas ganas de querer hacer cosas nuevas.

En la actualidad pienso que se escribe demasiado. Pocas veces se aporta algo nuevo, algo distinto a lo que te informa una página de manual de una determinada herramienta, poca integración, trucos o diferentes formas de acometer una determinada tarea comparando y sopesando cuál de ellas es más apropiada para conseguir un determinado fin. Ventajas e inconvenientes.

Mi reto, pues, era conseguir ese algo distinto que he comentado en el párrafo anterior. Sólo los lectores podrán decidir si lo he conseguido.

Es mi primer artículo.

Y es mi primera portada, y mi primera editorial dedicada.

Os dejo aquí la introducción del mismo:

La idea de elaborar este artículo se me ocurrió cuando mi portátil no 

era capaz de conectar a Internet justo cuando arrancaba, 

independientemente de la localización donde se encontrara, y así 

comenzar a actualizar los paquetes de mi sistema operativo (Debian 

GNU/Linux), ir descargando el correo electrónico, los feeds RSS, etc. 

Uno tiene la costumbre de aprovechar el tiempo de arranque para, 

alejado del ordenador, ir haciendo otras cosas... y al volver, 

encontrárselo todo preparado para comenzar a trabajar.

Para lograr dicho objetivo iremos recorriendo las siguientes materias:

* Instalación de los drivers apropiados para nuestra tarjeta de red inalámbrica.

* Estudio de las herramientas de configuración de red.

* Breve presentación práctica de conceptos de programación en shell (scripting).

Terminaremos juntándolo todo en nuestro programa de autoconfiguración y

viendo algunas herramientas de monitorización del interfaz de red WiFI

que nos ayuden a detectar si se ha apagado el punto de acceso, si nos 

hemos alejado demasiado de él, en definitiva, si hay problemas en la 

señal que recibimos, etc.

Muchas gracias a todos los que me habéis ayudado a desenvolverme en este mundo de las nuevas tecnologías: los que me habéis resuelto un "bug", los que me habéis enseñado una nueva herramienta, los que me ayudásteis con las X de GNU/Linux, con un nuevo lenguaje de programación… Y, especialmente, muchas gracias a los que más cerca tengo, por padecerme, y aún así, seguir animándome.

…¡corred al quiosco que se agota! :-)

Espero vuestras críticas para seguir aprendiendo.

Actualización (28/07/06): Añado este enlace a "Retroinformatica.net - ZX Spectrum", que nos permite ver aquella pequeña maravilla (vía Yogur Griego).

Actualizado el 10 de abril de 2011 A continuación os dejos el artículo en pdf.

Archivos adjuntos

Comentarios

Enhorabuena, genio! (José Ignacio 13/07/2006 - 17:43)

Enhorabuena, genio!

No sólo por conseguir una portada de revista, sino porque el artículo me parece realmente útil. Una portada debe ser muy muy muy emocionante, ¿qué se siente al saber que miles de personas leen (incluso pagando por ello) algo que tú has escrito? La verdad es que te lo mereces. No tengo ni idea de lo que sentirás cada vez que pases por un kiosko y la veas, pero seguro que algo bueno. Y dentro de poco este blog será una herramienta tan práctica y consultada como el mismísimo google, ya verás…

Ahora que ya eres famoso, ¿seguirás juntándote con nosotros? ;)

Un abrazo, José Ignacio.

PD: Esta noche no llegues tarde :P


Dime cuánto tiempo queda, qué hago, aparte del vago, finjo estar de acuerdo, es un milagro que siga estando cuerdo

Gracias, y sí (Godo 14/07/2006 - 22:29)

Hola José Ignacio.

Siempre presto y veloz, muchas gracias por tus comentarios.

Respecto a lo de genio: si lo fuera no trabajaría tanto, por lo que creo que no lo soy.

Respecto a lo que siento cuando paso por un quiosco y veo la portada: sonrío, y pienso que un pequeño cachito de mi está siendo útil a alguien, en algún lugar… es como si me expandiera. Es agradable.

Respecto a lo de ser famoso :-o y al cambio de juntas ;-), a las pruebas me remito: no cambiaré mientras me sigáis invitando a buena música, noches de estrellas y johnniecola.

Y sí, lo siento, volví a llegar tarde aunque lo suficientemente temprano para no perderme nada (ni el comienzo) de la función.

Lo dicho, muchas gracias y espero que lo disfrutes…

Felicidades (vecinos 16/07/2006 - 20:21)

FELICIDADES POR ESTA GRAN SEMANA QUE HAS TENIDO. Aunque ya lo hemos hecho personalmente, también queremos que quede constancia en tu bitácora (para que veas que la utilizamos más que antes).

Bueno, lo dicho, sigue así y llegaras lejos.

Un fuerte abrazo de tu vecino y un gran beso de tu vecina.

Orgullosa :-) (Pili Cantautora 17/07/2006 - 08:26)

Enhorabuena Godito! tampoco quería yo dejar escapar la oportunidad de felicitarte por tu reciente publicación en éste nuestro rinconcito… No sabes lo orgullosa que estoy de tí ;) me alegro muchísimo de que puedas ver los frutos de tu trabajo, del que te llena de verdad… Como ya te he comentado recientemente, cada vez estoy más picada con el tema linux. En breve voy a tener portátil nuevo (al final me he lanzao :)) y voy a hacerme una partición con linux para así poder cacharrear. Ya te mantendré informado de mis avances y castañazos… un beso muy fuerte!

Felicidades : ) (Adrián 17/07/2006 - 13:26)

Gran artículo seguro.

Yo estuve enganchado al tema del 'estudio' del WiFi antes de los exámenes y quise hacerme un script de estos. Lo dejé aparcado porque no conseguía automatizar la búsqueda del gateway para los AP abiertos pero sin servicio DHCP - ¿haces un artículo de ampliación? ; ) Ahora me he comprado un router FON por 5 euros, si me da por flashearlo podré hacer pruebas legales X) Así puedo depurar desde dos lados.

Hablando de depurar, ahora me ha dado por el cracking… Ya que el año que viene me toca aprender ensamblador (aunque sea de Motorola) pues aprovecho. He redescubierto GDB, ¡qué grande!

Lo dicho, a comprarse la revista.

Ánimo, espero ver pronto uno de tus artículos en SET o en el phrack (decían que iban a volver con nueva política).

Gracias por las felicitaciones (Godo 28/07/2006 - 19:59)

Con esta respuesta quiero dar las gracias a todos los que me habéis felicitado por la publicación de mi primer artículo. Perdonad que no lo haya hecho de inmediato respondiendo a cada uno de vuestros comentarios… intento así no resultar pesado con las respuestas.

A mis vecinos: Muchas gracias por vuestra paciencia y dedicación. No sé si llegaré lejos pero, al menos, sigo caminando. Creo que esto es lo importante. Encantado de veros más frecuentemente por aquí, espero que os guste, saquéis algunas conclusiones útiles… y os quedéis.

A Pili Cantautora: Gracias por tus felicitaciones (por tus descubrimientos "concertiles", por estar por aquí…) Y sí, nunca es tarde para comenzar con GNU/Linux (me ha costado… pero al final no has podido resistirte ;-) ).

A Adrian: ¿Cómo sabías que no he cubierto en mi artículo "automatizar la búsqueda del gateway para los AP abiertos pero sin servicio DHCP - ¿haces un artículo de ampliación? ; )", si aún no habías comprado la revista? ;-) Espero que hayas podido conseguirla, me comentan algunos amigos que no la pueden encontrar… Respecto a lo de publicar en SET (no la conozco, ¿nos dejas las URL?) o phrack creo que no lo conseguiré pues sus contenidos están más relacionados con "crackear" (no "hackear") y nunca he sido muy devoto de esas técnicas. Sin embargo, sí que he seguido estas publicaciones algunas veces, buscando información de seguridad que me ha sido útil en mi trabajo… Respecto a conseguir un script que haga lo que quieres, creo que la única forma sería haciendo capturas de tráfico, analizarlo y obtener una conclusión sobre el default gateway… Tampoco entiendo que sentido tiene dejar un AP en estas condiciones: ni cerrado ni abierto ¿? Espero seguir contando contigo por aquí, Adrián. Por cierto ¿tú tienes blog?

Lo dicho, muchas gracias a todos.

Tags: GNU/Linux Programación Publicaciones
07 abr. 2006

Programando en C con KNOPPIX

Aquí encontraréis un Live CD basado en Debian GNU/Linux que os puede ayudar a dar vuestros primeros pasos en este sistema operativo (GNU/Linux) y en esta excelente distribución (Debian).

Un Live CD es un sistema operativo instalado en un CD, desde el cual podemos arrancar nuestra máquina (seleccionando la opción apropiada en la BIOS, muchas veces viene por defecto) sin tener que realizar ninguna partición/instalación en nuestro disco duro. Así evitamos perder la información que este alberga si ocurre algún fallo, si somos inexpertos en materia de particiones/instalaciones, etc. La desventaja: el rendimiento es muy bajo, pero aún se puede trabajar.

Conseguimos así una herramienta muy útil para reconocer nuestro hardware y estudiar la compatibilidad de éste con GNU/Linux, para realizar los primeros pasos en un entorno de programación y, si conseguimos dominarlo (¡cuidado!), podemos incluso hacer particiones (qtparted) y copias de seguridad de las mismas (partimage), instalarlo en el disco duro, etc.

Podéis descargar el CD desde aquí (versión 4.0.2 disponible a fecha 07/04/06), y podéis encontrar una lista de mirrors aquí desde donde descargar las últimas versiones del CD y del DVD. ¡OJO! Este archivo ha de ser "tostado" en el CD (o DVD según el caso) utilizando la opción de "grabar imagen" de los programas de grabación. No sirve si lo copiamos tal y como está al CD (si no entendéis lo que estoy diciendo aquí, pedirle ayuda a algún amigo).

En este otro artículo, en la primera alternativa comentada, destacaba el uso de las siguientes herramientas para lograr un entorno de programación C en GNU/Linux: emacs, gcc, gdb y make. Todas ellas están incluidas en esta distribución, además incluye las páginas de manual de las distintas funciones de librería de C, por ejemplo: man fgets.

En fin, espero que os ayude a descubrir un nuevo modo de diversión y aprendizaje.

Libertad y conocimiento.

Actualización [11-10-2006]: Hay una nueva versión del Live CD de Knoppix disponible. Es la 5.0.1, y puede ser descargada desde aquí. ¡OJO! En esta versión no han incluido al editor emacs, si a zile, que lo emula (para mi gusto demasiado básico pues en la configuración estándar ni colorea ni "sangra" bien el código). ¿Por qué no habrán incluido a jed que si lo hace? Os recomiendo que utilicéis la versión anterior (4.0.2) descrita más arriba, y sólo si os da problemas con vuestro hardware lo intentéis con esta última (5.0.1). Si tenemos un DVD en lugar de un CD podemos utilizar esta versión arrancable desde el DVD, donde sí se incluye a nuestro querido editor emacs.

Dejar comentario.

Tags: GNU/Linux Programación
11 dic. 2005

¿Soy un hacker?

Uno tiene la costumbre, y el entrenamiento, de intentar perderse los menos detalles posibles. El emblema que preside esta página: hermann-uwe, la cual visito desde hace mucho tiempo, me intrigaba. Cuanto más tiempo transcurría sin saber su verdadero significado mayor era la intriga. Hoy he podido leer a placer…

Este emblema es el elegido por la comunidad hacker para, entre otras cosas, fortalecer las señas de identidad de la misma. Es curioso el uso, y la justificación de éste, propuesto por su creador, Eric Steven Raymond.

¿Quién puede usarlo? Según el autor del mismo, aquel que se sienta identificado por la cultura hacker, aunque no sea uno de ellos.

¿Y cuál es la cultura hacker? Para responder a esta pregunta tenía que leerme el pequeño documento en el que este mismo autor intenta explicar: "Como llegar a ser un hacker".

La conclusión que he obtenido es la siguiente: ser un hacker es la unión de dos cosas, la primera es mantener una determinada actitud ante la vida, la segunda consiste en desarrollar una serie de habilidades. Tanto más hacker se es cuanto más avancemos en cada una de ellas, y cuanto mejor sea la mezcla de ambas en nosotros.

¿En qué consiste el desarrollo de la "actitud vital"? 1.- Los hackers creen en la libertad y en la ayuda mutua. Los hacker resuelven problemas y crean soluciones útiles para la humanidad (entre ellas lo que hoy todo el mundo conoce como Internet). 2.- Los hackers piensan que Ninguno de estos problemas a los que se enfrentan debería resolverse dos veces partiendo desde cero, para lo cual es imprescindible la comunicación y el compartir la "sabiduría". Esto no quiere decir que no existan mejores soluciones que otras, precisamente para utilizar esta palabra es necesario poder conocer y comparar. 3.- El aburrimiento y el trabajo tedioso (repetitivo) son malos. Luchar contra esto, automatizando todo lo que se pueda esas "tediosas" tareas, es una de las principales metas del hacker. 4.- El hacker AMA LA LIBERTAD, por ello lucha contra las actitudes autoritarias. Esto no significa que esté contra toda autoridad y contra todo sistema. 5.- El hacker cree en el desarrollo de habilidades (en el documento les llaman "competences"==competencias), en el aprendizaje, fundamentándose éste en la inteligencia, práctica, dedicación y trabajo duro.

¿Cuáles son las habilidades a desarrollar? 1.- Aprender a programar en varios lenguajes ("It's best, actually, to learn all five of Python, C/C++, Java, Perl, and LISP"). 2.- Conseguir un sistema operativo "tipo" UNIX y aprender a usarlo (evidentemente, en el amplio sentido de la palabra usarlo: ser capaz de utilizar toda su funcionalidad). 3.- Comprender los fundamentos de la WEB y saber crearla. Propone el conocimiento de las especificaciones actuales de HTML y, más concretamente, XHTML. Incluso apunta que el inicio del "no programador" a través de uno de estos lenguajes podría ser conveniente: son más fáciles de aprender y ayudan a "ir creándose" una forma de pensar. 4.- Conseguir un buen nivel de inglés. No por ser el idioma del imperio (que lo es) sino porque los mayores desarrollos técnicos, y por tanto la mayor cantidad de literatura, se han venido produciendo en ese idioma (una curiosidad que apunta para respaldar este punto es el caso de Linus, parece ser que comentó el código fuente del kernel que creó en su día ya en inglés… así podría compartirlo con más gente).

Bien, pues todo este conjunto de actitud y habilidad es condición necesaria pero no suficiente: sólo se es hacker cuando los demás te atribuyen esa condición.

Uno, a esta edad, se conoce lo suficientemente bien para saber que no es un hacker y que, muy probablemente, nunca llegará a serlo. Pero igualmente, uno reconoce encontrar en ese pequeño cachito que ha ido descubriendo de sí mismo ciertas coincidencias con, al menos, la "actitud vital" del hacker.

Por todo esto, a partir de hoy, habrá un "guiño" a esa "manera de vivir" en la cabecera de este sitio web.

Para profundizar en esta historia os recomiendo seguir los enlaces existentes en toda la página, leer y pensar. Yo me quedo pendiente de seguir investigando si todo esto tiene algo que ver con el humanismo. A priori se me antoja una evolución del mismo.

Salud, y disfrutad de vuestros sueños.

Dejar comentario.

Comentarios

Humanismo (Juan Fernando 10/02/2006 - 22:31)

(Enviado por Juan Fernando (no verificado) el Dom, 01/01/2006 - 20:01)

Mucho habría que decir sobre lo que es humanismo. Además del movimiento humanista renacentista (sentido, podemos decir, restringido), podemos hablar del humanismo en nuestros días (sentido amplio de humanismo), para lo cual se me ocurren tres ineludibles referencias: un texto de Heidegger sobre el asunto (Carta sobre el humanismo), otro de Sartre (El existencialismo es un humanismo)y, recientemente, la réplica a Heidegger de un polémico filósofo alemán llamado Sloterdijk con su conferencia titulada Normas para un parque humano. Prometo pensar un poco sobre el asunto y su relación con los hackers, aunque no me comprometo a plazo temporal alguno. Saludos.

Con ansias espero (Godo 10/02/2006 - 22:35)

(Enviado por Godo el Lun, 02/01/2006 - 20:29)

…"Prometo pensar un poco sobre el asunto y su relación con los hackers, aunque no me comprometo a plazo temporal alguno".

Sabes que, como he indicado en el título, con ansias espero dicha respuesta. Y, evidentemente, espero sin límite alguno. ;-)

Muchas gracias por tus palabras. Espero que, cuando vaya madurando todos esos temas que mantengo abiertos, podamos seguir compartiendo interminables conversaciones. Las nuestras.

Un abrazo.

Tags: GNU/Linux Pensamiento Programación Seguridad
04 dic. 2005

Entornos de programación en C (con licencia GNU/GPL)

Se me ha ocurrido tratar este tema mientras pensaba en como ayudar a aquellas personas que no disponen de suficientes destrezas, ni de suficientes ganas de experimentar ;-) con un entorno GNU/Linux, y sin embargo se ven obligadas (por sus estudios, principalmente) a programar en lenguaje C. Como su título indica este artículo habla de los medios necesarios para crear un entorno de programación C. Voy a plantear dos alternativas, recomendándoos encarecidamente que os decidáis por la primera de ellas, aunque os suponga un mayor esfuerzo al comienzo y una mayor dedicación de tiempo. Si no disponéis de este tiempo necesario, no dejéis de leer, en la segunda alternativa encontraréis una posible vía rápida. Las alternativas se distinguen por el sistema operativo que utilizamos para trabajar con nuestra máquina: la primera de ellas se plantea en un sistema GNU/Linux (os sugiero debian, por supuesto }:-)), la segunda se plantea en un sistema Windows. AMBAS ALTERNATIVAS UTILIZAN SOFTWARE LIBRE. La primera alternativa que os recomiendo (y antes he añadido "encarecidamente" porque se puede disponer de ella en español, se puede utilizar desde un sistema instalado en el disco duro o desde un live-cd, es un entorno fiable y robusto, existen miles de tutoriales en internet, etc.), como ya se ha dicho para un entorno GNU/Linux, es la constituida por:

1.- El editor emacs para crear nuestro código fuente. En su "mode-c" este editor nos ayudará a detectar errores coloreando la sintaxis de nuestro código e "identando" el mismo, de forma que nos resulte más fácil de seguir. 2.- El compilador gcc, con las opciones "-Wall" para generar tantos avisos (warnings) como sea posible (sí, ya se que es posible generar muchos más, pero con estos creo que es suficiente para obtener un código bastante bueno) y con la opción "-g" para generar información de depuración (ver siguiente punto). 3.- El depurador gdb, el cual nos ayudará a rastrear en nuestro "ejecutable" resultados, acciones, que no hemos previsto. 4.- La herramienta make, que nos servirá para generar "archivos de compilación" de nuestros "proyectos". Útil para aquellos trabajos que están compuestos por más de un fichero de código fuente, ya que nos permite compilaciones "condicionadas" a los cambios producidos en dichos ficheros, compilando sólo los necesarios y ahorrándonos tiempo.

En este artículo no pretendo enseñar el uso de cada una de estas herramientas, sólo darlas a conocer. Apuntarlas para que todos aquellos que estáis empezando en esto de la programación en C las conozcáis, y emprendáis el largo camino hacia su dominio. Para obtener más información sobre este entorno lee esto. La segunda alternativa que existe, utilizando software libre pero esta vez en un sistema Windows, es instalar el entorno de desarrollo: Dev-C++. Este entorno incorpora ya un editor de código fuente (que colorea la sintaxis pero no la "identa" de forma inteligente como hace emacs), el compilador "gcc" en su versión para windows (evidentemente), el compilador "g++" por si queremos iniciarnos en C++, EL DEPURADOR "gdb", la herramienta "make"… ¡bastante completo! La desventaja es que está en inglés (aunque supongo que es fácil entender los cuatro comandos necesarios para comenzar). Para disponer de él has de seguir los siguientes pasos: 1.- Descargar el .zip desde aquí. Para comprobar la última versión disponible, visitar este enlace. ¡OJO! no os recomiendo instalar versiones Beta, estas versiones están en desarrollo y pueden dar problemas. 2.- Descomprimir el .zip descargado en una carpeta. Tras la instalación esta carpeta y el archivo .zip pueden ser eliminados de nuestro sistema. 3.- En la carpeta donde hemos descomprimido el .zip hemos de encontrar el archivo "setup.exe" y ejecutarlo (doble click). 4.- El primer cuadro de diálogo que nos aparece es el de la licencia. En él podremos comprobar que dicha licencia es la GNU GPL (versión 2 - junio 1991). ¡Es software libre! De hecho el código fuente está disponible en su página web. Aceptamos el acuerdo pulsando "Yes". 5.- A continuación nos aparecen las opciones de instalación. Podemos seguir aceptando las que nos propone por defecto: "tipical", y directorio (o carpeta) de instalación: "C:\Dev-C++". Pulsamos "Next". 6.- Comienza el proceso de instalación. Observaremos una barra de progreso que se va completando hasta llegar al 100%. 7.- El último cuadro de diálogo del proceso de instalación nos permite elegir si queremos leer el archivo "readme.txt" y si queremos "ejecutar el programa por primera vez"… seleccionamos lo que nos apetezca y pulsamos "Finish". 8.- Una vez que tenemos el programa instalado, para ejecutarlo basta con ir al menú "inicio/programas/Dev-C++/" y seleccionar el icono que muestra un escritorio con un flexo. 9.- Cuando se ejecuta por primera vez nos muestra una ventanita con las asociaciones de archivos que va a realizar en el sistema (a partir de ese momento abriremos con él todos los archivos que terminen en: .dev, .c, .cpp, .h, .hpp. Y si nos atrevemos con la programación gráfica nos propone hacer uso de la librería gráfica "gnome". En fin, aceptamos todo esto pulsando la tecla "OK". Nos vuelve a avisar de que va a hacer cambios en el "registro de windows". De nuevo pulsamos "OK". 10.- Si todo ha ido bien ya tenemos nuestro entorno de desarrollo "C" y "C++" funcionando. 11.- Un ajuste necesario: para disponer de todos los mensajes de "aviso" (warnings) del compilador vamos a modificar la siguiente opción: menú "options/compiler options", y se nos abrirá una ventanita con opciones. En la primera pestaña, "Directories", seleccionamos el cuadrito: "add the following commands when calling compiler:", y agregamos en el rectángulo blanco de debajo (formulario) la siguiente opción "-Wall" (sin las comillas). En la última pestaña, "Linker", seleccionamos "Generate debugging information", para que podamos depurar nuestros programas con "gdb". 12.- El entorno de desarrollo tiene 3 grandes zonas:

a) El menú seguido por dos filas de iconos (accesos rápidos a algunas funciones, como por ejemplo: el aspa verde situada en el centro, aproximadamente, nos permite compilar, etc.) b) La zona donde escribimos el código fuente (el editor), situada en la parte central de la pantalla. c) La zona de mensajes, situada en la parte inferior de la pantalla, donde aparecen 4 pestañas. La más importante para los principiantes es la correspondiente al "compiler". En ella aparecerán los "errores" y los "warnings" del proceso de compilación. Situándonos sobre cada uno de ellos con el ratón, y haciendo doble click, se iluminará en el código fuente (editor, en parte central) la línea que ha provocado dicho error o "warning", conduciéndonos así hacia su solución.

13.- Para iniciar la escritura de un fichero de código fuente ".c": menú "file/new source file" ó pulsando las teclas "Ctrl-U". 14.- Eliminar los "#include" que no necesitamos: sobre todo el #include "iostream.h". Si programamos en lenguaje C, grabaremos nuestros ficheros con la extensión ".c". Esto hará que el compilador seleccionado a la hora de compilar sea el "gcc" y no el "g++" (este último se utiliza para ficheros guardados con extensión ".cpp"). Bien, si estamos programando en Lenguaje C y dejamos el #include "iostream.h" tendremos MUCHOS ERRORES DE COMPILACIÓN. CONSEJO: incluir siempre sólo los #include que necesitemos, y guardar los ficheros creados con extensión ".c" (sin las comillas). En fin, chicos, espero que esto os sea útil. Salud, y fuerzas para seguir mejorando.

Dejar comentario.

Comentarios

Seamos más radicales (Adrián 10/02/2006 - 22:40)

Enviado por Adrián (no verificado) el Vie, 30/12/2005 - 07:25

Está muy bien que expliques eso para los profanos, ¡pero es contraproducente!

Desde un punto de vista puramente tecnológico:

Podrán hacer todos los exes que les de la gana con Dev-C++, pero de informática "general" (llamémosle así y espero que me entiendas) van a aprender más bien poco si siguen en Hasefroch. Y eso nos repercurte a nosotros: cuanto más idiota el usuario más idiota te lo hacen, un idiota no necesita saber qué coño es una tabla DSDT, así que nos pasamos los acuerdos de estándar ACPI por el forro, y también los W3C, y el otro, y el otro… Ya me entiendes. Hoy día el Desktop GNU es bastante eye-candy y "usable" (es cachondísimo eso de la usabilidad, como si desde shell la máquina no funcionara…), pero como esto es un circulo vicioso… Dicen: "¿¡Que en Linux no puedo jugar a $ULTIMOJUEGODELMERCADOWINONLY?! Vaya mierda." Y así fundamentamos excusas en excusas y acabamos usando SL los frikis…

Desde el punto de vista de la libertad, y como anécdota, harto de que me llamaran con un problema made in M$, mi familia es 100% libre. A cada uno se le ha dado la excusa correspondiente, y aunque no sepan qué es el software libre, lo usan. Algo es algo, digamos que son usuarios "pasivos" que engordan la comunidad.

Y bueno, después de soltar el discursito de siempre, mírate ReactOS si no lo conoces. Es un SO 100% libre clon de Ventanas. Está verde, y aunque a priori puede parecer un derroche de esfuerzo, al menos amplia la elección. De libertad hablamos al fin y al cabo…

Saludos.

Es contraproducente… pero menos (Godo 10/02/2006 - 22:46)

(Enviado por Godo el Dom, 01/01/2006 - 18:39)

Hola Adrián.

Encantado de contar con tu colaboración por aquí. Y espero seguir escuchándote porque estoy seguro de que siempre aprenderé algo.

Estoy de acuerdo contigo en que es contraproducente ofrecer alternativas sobre windows, pero creo que es bueno intentar que la gente se vaya acostumbrando a entornos "libres" aunque estos no sean lo mejor. Es decir, prefiero que utilicen Dev-C++ antes que una versión "pirata" de "turbo C" más vieja que Matusalén y que estaba prevista para MS-DOS, con lo que muestra ciertos problemas de integración con "ventanas" y "teclados"… transformando el placer de programar en desagradable esfuerzo.

Pienso que ésta puede ser una forma de conocer software libre y, al estar basado en gcc, gdb, etc. puede resultar interesante su "paralelismo" educacional con las herramientas de Unix / GNU/Linux. Los errores, los warnings, los mecanismos de depuración serán exactamente los mismos, por lo que estaremos educándonos "casi" en las mismas herramientas.

No sé si he conseguido explicarme. Podría resumirlo en: dentro de lo malo, lo menos malo.

Salud.

Tags: GNU/Linux Programación Software
Other posts