que diferencia hay entre write, fwrite y send

Marzo 31, 2009 por Miguel

joven argentino que cursas en la utn sistemas operativos o muchacho global que andas queriendo aprender a programar entrada salida y sockets en C, espero que esto te oriente.

write es la llamada del sistema operativo a un descriptor. El descriptor es una abstracción que usan los sistemas operativos tipo POSIX para representar un dispositivo al que se le pueden escribir o se pueden leerle datos. La función está declarada en el archivo header unistd.h.

fwrite es una función de la biblioteca estándar de C y se utiliza para escribir registros, indicando cuántos, a un flujo binario. Un flujo es una abstracción que usan muchos lenguajes de programación y que consiste en una secuencia de caracteres (fwrite permite tratarlo de a bytes o bloques) que vienen de un lugar y van a hacia otro. Los flujos más conocidos son los estándar de la consola: teclado entrada y pantalla salida. Para usarla hay que hacer include de stdio.h

send es una función de los sockets. Para utilizarla es necesario incluir las cabeceras sys/types.h y sys/socket.h. Los sockets son otro tipo de abstracción que se utilizan para comunicación entre procesos. Estos procesos pueden estar en un mismo sistema o en distintos. Se le pasa un socket que es también un descriptor pero este se obtiene con las funciones de sockets.

write es de más bajo nivel, es una llamada al sistema operativo. fwrite es propia del concepto de flujo de la biblioteca estándar de C. send permite.

Las 3 reciben un puntero a void, que es la manera en C de referenciar a una posición de datos sin importarnos el tipo de dato. También reciben un size_t que es el tamaño del bloque de datos que vamos a envíar.

Si bien se puede obtener el descriptor de un flujo a traves de una función de biblioteca no se puede hacer el camino inverso ya que el flujo usa un descriptor y no al revés.

send ofrece más control en lo referente a sockets. Se puede indicar que el envío sea bloqueante (el programa se queda bloqueado hasta que pueda envíar los datos) o no bloquentes.

más adelante vamos a hablar de read, fread y recv.

Ah! Revisar la guía beej que es un buen tutorial para iniciarse con sockets.

¡Mucha suerte!

Red Gnutella completa y aprobada

Diciembre 25, 2008 por Miguel

Finalmente con ayuda del glorioso Drinktin completamos la red gnutella que nos pedían. El código es ANSI C y lo pude compilar en FreeBSD.

La cosa es más o menos así, uno tiene una red de servidores gnutella funcionando en linux que intercambian queries y queries hits, a partir de un query generado en un servidor que se encarga de recibir pedidos de búsquedas. Este servidor a su vez dispone de un servidor de cache que permite ahorrarse el proceso de búsqueda en la red gnutella, pasándole al cliente -una aplicación de consola en win32- la lista de archivos encontrada en la red gnutella que cumplan, con la dirección adecuada para realizar la descarga mediante HTTP.

En el desarrollo de este proyecto aprendí sockets, algo de ipc sobre unix, threads en win32 y, tal vez lo más valioso, lo importante de tener un equipo aceitado de trabajo donde todos tiremos para el mismo lado. Desde quienes analizan y diseñan, hasta quienes testean, redactan y transcriben todos empujamos para un mismo lado y la cosa fue saliendo.

Y obvio también quienes nos aguantaron en nuestras casas, nuestr@s amig@s que nos escucharon y también aguantaron.

Fue un laburo de aquellos, pero bueno, salió. Gracias a todos, aunque no lean este humilde espacio.

Y si hay consultas de sockets, ipc, threads y procesos distribuidos. Ya pueden consultar.

Felicidades y terminen bien el año, muchach@s.

Programando sobre Linux con C

Septiembre 13, 2008 por Miguel

Sigo con esto de programar en ANSI C con GNU/Linux y POSIX.

Encontré un blog muy interesante de un Pablo Garaizar Sagarminaga. El amigo es de españa y se mandó un interesante curso de programación en C para GNU Linux.

Muy recomendable para acompañar la cursada de Sistemas Operativos de FBRA/UTN.

Peter Capusoto vuelve el 22 de Septiembre (2008 reprise)

Septiembre 9, 2008 por Miguel

Damas y caballeros, que anduvieron viniendo mientras buscaban info de Peter Capusotto y sus videos.

Según lo que se puede ver en canal 7 y lo que confirmamos con un cumpa de la facu. El programa de rock de la televisión pública vuelve el 22 de Septiembre a las 23 horas.

Vaya otra temporada, y otro septiembre con Peter Capustto y sus vídeos.

Buenas Noches.

usando ansi C

Septiembre 3, 2008 por Miguel

Actualmente estoy cursando dos materias muy relacionadas con el uso del Lenguaje C. Una sellama Sintaxis y Semánticas de los lenguajes. Muy interesante, porque nos da una mejor perspectiva de como se diseñan e implementan los lenguajes de programación. Como caso de estudio usamos el Lenguaje de Programación C en su versión ANSI C.  Como bibliografía tenemos el libro homónimo de Kernighan y Ritchie y un libro de la cátedra acerca de Autómatas escrito por el jefe de cátedra.

La otra es Sistemas Operativos. Sistemas operativos es dura. El trabajo práctico es duro. La teoría es extensa, aunque debo considerar que a mí me gusta. Tal vez la materia no tiene tanto que ver con C en sí, pero sí con el uso de C como lenguaje para relacionarse con los servicios del Sistema. Encima el trabajo práctico consiste en una aplicación distribuida con servidores de archivos que forman una red tipo GNutella y el cliente es una aplicación de línea de comandos multi-hilos sobre Win32. Todo en ANSI C usando las bibliotecas de cada sistema operativo.

No voy a negar que es un desafío para mis compañeros y para mí, pero la verdad es que me gusta la temática.

Además estoy cursando Modelos Numéricos, pero eso es otro cantar, aunque no menos desafiante.

El tema es ansi C. C tiene más de 35 años. Yo cuento con 28. C nació como una mejora de B que era un lenguaje para implementar BCPL sobre una máquina de 8KB de memoria. Como los muchachos de Unix estaban jugados con la memoria tuvieron que ir cortándole cosas. Después Ritchie lo fue mejorando y, según él, tomó la forma actual alrededor de 1973. Es curioso como un lenguaje pensado para hacer algo como trabajar a un nivel un poco más alto que el assembler con los escasos recursos computacionales terminó siendo el lenguaje más utilizado para todo tipo de propósitos durante más de 30 años.

Leí por ahí que las dos causas que hicieron que C sea tan exitoso sean:

- el lenguaje es bastante sencillo, los tipos de datos estándar son los mismos que maneja un procesador de cualquier tipo: entero, caracteres, punto flotante y direcciones de memoria. luego no es tan difícil de implementar en cualquier hardware.

- C hace lo necesario y deja que nosotros hagamos lo que necesitamos, razón por la cuál cada uno puede usar C de la manera que necesite. Entonces sobre una herramienta tan básica se pueden construir cosas tan amplias como los programas de sistemas para manejar un sistema operativo o bien una modelo de objetos tan complejo y rico como gnome.

Yo no sé si existe tal cosa como el éxito en los lenguajes. El éxito viene porque los que lo usamos podemos resolver nuestros problemas.

Hay algo que me gusta de esas características de C y es que el lenguaje hace que convivan dos mundos en él. Por un lado el de la máquina y sus punteros y todas esas cosas. Y por otro lado el de nuestras ideas de como resolver problemas. Es como si estuviera cerca de los dos mundos de este fenómeno inconmesurable que empezó con Babbage y Ada Lovelace y que hoy nos permite tantas cosas.

Así que bueno, acá estoy de vuelta usando lenguaje C para construir autómatas por un lado y para armar un sistema distribuido multiplataforma para descarga de archivos por el otro. Y no hablo de una web ;)

Al Juarismi no me olvido de vos, pero ellos empezaron con esto de llevar tu trabajo a las máquinas. Tampoco de los hindúes que nos prestaron sus númeritos de bellas curvas. ¿Notaron que el alfabeto hindú tiene caracteres de hermosas curvas? No es de extrañar que sea la misma gente que la del Kamasutra.

Gracias! Vuelvan prontos!

Incluir videos en SPIP

Julio 9, 2008 por Miguel

Hace mucho tiempo que mis SPIP adictos me vienen pidiendo como incorporar videos en sus sitios.

Por cuestiones de ancho de banda, y también promocionales, es conveniente tenerlos en youtube. La única salvedad que tiene es si youtube está bloqueado en el lugar donde queremos ver. Para solventar esto se puede programar un proxy para youtube (perdiendo las ventajas antes mencionadas) o bien ver los videos fuera de horario de oficina.

El método es sencillo: se los agrega como un documento adjunto.

  1. Subimos el video a youtube.

  2. Una vez que tenemos el video en youtube debemos observar la dirección que youtube le asigna:

    http://www.youtube.com/watch?v=OlLT7-7FUiU

    Para esta dirección nuestra dirección de carga será:

    http://www.youtube.com/v/OlLT7-7FUiU

    En el Cuadro “AÑADIR DOCUMENTO” hacemos clic sobre desplegable “Subir desde tu ordenador”. Esto nos muestra otra caja de texto que tiene solamente el contenido “http://”. Nosotros lo reemplazamos con la dirección de carga “http://www.youtube.com/v/OlLT7-7FUiU” y apretamos “Elegir”.

  3. Se cargará un bloque nuevo con título “OlLT7-7FUiU” y en la parte inferior de este bloque debemos asignarle Dimensiones (0 x 0 por defecto). Nosotros le asignamos 425 x 344 píxeles. Este paso es tan importante como el anterior. No hay que omitirlo. Si quisiéramos cambiarlo de tamaño basta con ajustar el 425 x 344 a otra relación. Es el alto debe ser aproximadante 81% del ancho.

Con esto tenemos el documento adjunto. Para que aparezca en la página solo resta incluir la etiqueta <embXXX> en el editor de texto de nuestro documento, donde XXX es el número asignado al video.

¡Voilá!

¡Feliz día, Patria!

Mañana vuelve Peter Capusotto y sus Videos…

Mayo 4, 2008 por Miguel

Por fin vuelve Peter Capusotto y sus videos luego de cortar durante el verano. Los lunes a las 23 horas En Canal 7, como el año pasado.

Igual antes tengo que rendir un parcial de Arquitectura de la Computadora, así que espero que los flip flops D y T no me fallen.

Anoche fuimos con dos amigos a una de esas mentadas Fiestas Clandestinas que aparecen en la revista Barcelona. Creo que tienen tanto de fiesta como de clandestina. Esta fue en el Teatrito en Sarmiento 777. La banda en vivo estuvo bien, la barra no era la gran cosa y el fernet era muy suave. Cabe mencionar que las chicas estaban muy bien, y hasta simpáticas. La música estaba bien, pero no es la que me gusta. Mucho reggaetón, mucha mezcla entre rap alguna guitarra distorsionada y máquina de ritmo para darle periodicidad al movimiento, aunque hubieron un par de skadillacs y algún que otro tema de molotov. Pero en esencia es la prolongación de Mano Negra y toda esa mersa… Pero ya lo dice el tema “si no te gusta lo que digo, andate andate”, lástima que más que eso no dice nada.

La pasamos bien, aunque cuando voy a estos lugares no dejo de sentirme un personaje de “Una Noche en el Roxbury”.

Además, era eso o quedarme a escribir un post…

Bueno, vamos a ver si le doy un poco más de bola al blog que lo tengo abonadanadísimo. El drama es que estuve con unos trabajitos. Un sitio que usa a CakePHP como backend (para que la diseñadora no enloquezca con los templates) y otro con SPIP.

El loco tour de mayo sigue el 10 del Mayo Almafuerte. 17 del Mayo, cumpleaños al cuadrado en Siglo XX.

Increíble Ozzy…

Marzo 31, 2008 por Miguel

Anoche fui al Quilmes Rock a ver a Ozzy en el Estadio de River. La selección de bandas me pareció algo ecléctica. Es como si los organizadores hubieran decidido poner todo lo que usa tachas en la misma noche. De todos modos me dio una buena oportunidad para ejercer la dialéctica populachera que mis allegados tan bien conocen.

El concierto de Ozzy fue espectacular, el chabón está en plena forma. Iron Man, Paranoid, War Pigs, Crazy Train, Mr Crowley. Fue redondo en la selección de los temas.

Bien calibrado para un público argentino que tiene pocas oportunidades de verlo, tocó más clásicos que temas nuevos. Ozzy además de prolífero en temas lo es en variantes dentro del estilo. Así de ese proto-punk que fue Paranoid a Mr Crowley, o del tema border a la psicodelia de War Pigs a la balada esa nueva, cuyo nombre no recuerdo, uno va pasando por varios estados emocionales durante el concierto.

El que ya no está en estado para estas cosas es el cronista y opinólogo, que terminó todo roto luego de más de 5 horas de estar parado.

También llegué a ver a Rata Blanca -bastante entretenido- y a Korn -que me pareció un poco frío, aunque con ciertos buenos momentos. Pero bueno, el New Metal no es lo mío. Los muchachos que los fueron a ver se veían bastante satisfechos.

Sin embargo, creo que tal vez ahí está la diferencia, aunque no se conozcan todos los temas de Ozzy, su variedad de estilos y recursos escénicos lo hacen más entrañable que a los pibes de Korn.

También es cierto que Ozzy tiene 40 años de escenario, y estos muchachos deben tener algo menos que 15 años ahí. Pero es en la relación con el público del loco arranca cabezas de palomas, y el otro correcto gringo gritón que seguro debe proclamarse en contra del maltrato a los animales, donde se percibe una diferencia casi de eones. Como que el sesentón pareciera más joven. Más vivo -concedo tomarlo en la acepción criolla, aunque no es mi idea original-. ¡Menos gringo!

Lamentablemente no pude ver a Black Label Society, pero bueno, al guitarrista sí lo ví ;) .

Fue una buena idea la de poner a tocar en vivo rock nacional de la vieja guardia, lo que por ahí no estuvo tan bien fue que Carca se pusiera tan molesto por una pequeña bardeada del público. Mucho menos mandar al frente a Korn por caretas. Creo que eso todos lo sabíamos.

Ozzy, sos lo más grande que hay. We love you, too. ¡Tocá Perry Mason o te vamo’a D’Eliar!

Crear PDFs del lado del servidor: iText y FPDF

Marzo 7, 2008 por Miguel

Armando un form super largo que después tenía que salir por impresora se me presentó la dicotomía: OpenXML o PDF.

Necesitaba soporte para headers y paginación. Que el documento de salida fuera editable no era necesario.

Estaba en .NET, razón por la cuál OpenXML hubiera sido la opción más razonable. A poco de andar terminé encontrando que utilizar Word a través de COM no era nada recomendable del lado del servidor. Necesitaba entonces una biblioteca que maneje el tema. Me encontré con una paga a la cuál no voy a linkear, porque le sobran links de entrada. Microsoft ofrece una biblioteca para generar OpenXML pero genera documentos para Office 2007. No todo el mundo tiene Office 2007, razón por la cuál el camino del OpenXML se iba cerrando. La última opción era generar el doc, guardar como Office XML 2003 y parsear el documento mediante XML o tags. El documento terminaba pesando 900 KB, inaceptable para un ambiente con concurrencia.

Bueno, hubo que tomar el camino del PDF…Yo había hecho algo parecido en PHP con una biblioteca que se llama FPDF. Es una clase PHP 4.0 sencilla pero muy potente para generar PDFs. Lo bueno es que hay un montón de ejemplos en su sitio y hay documentación en español. Lo malo es que es un poco tosca, pero es muy fácil de extender. El enfoque es como trabajar con un lienzo (canvas para la muchachada) donde vamos dibujando nuestras genialidades.

El drama era que había que conseguir algo parecido y allà GPL para .NET. Me encontré con iTextSharp. iText es una biblioteca para generar PDF en java. Muy completa, también es un lienzo pero tiene estructuras como párrafo, frase y pedacito (Paragraph, Phrase y Chunk) y una completa implementación de tablas. Esto permite simplificar muchas tareas que en FPDF me costaban bastante. La biblioteca está muy bien hecha y facilita mucho trabajo. A su vez permite acceder al contenido del pdf a bajo nivel de una manera muy sencilla.

Por si fuera poco hay un tutorial para iTextSharp muy sencillo y elocuente para el desarrollador en apuros, al igual que en FPDF. Lo único que se añora es que no esté en español.

Los autores Bruno Lowagie y Paulo Soares(responsable del port a .NET) han hecho un gran trabajo. Hay un libro muy interesante llamado iText in Action. El libro a través de un caso ficticio -pero muy parecido a lo que pasa en realidad- va cubriendo todas las funcionalidades de la biblioteca y trae piezas de código muy interesantes.

En esencia la biblioteca nos permite generar un pdf en 5 pasos básicos:

  • instanciar un objeto Document
  • generar una instancia del PdfWriter y asociarla a un canal (stream)
  • abrir el documento
  • insertar el contenido
  • cerrar el documento

Nuestro trabajo será esencialmente generar el contenido, porque todo lo demás ya nos los provee la biblioteca.

A su vez tiene un modelo de eventos para la documento, página y tabla. De esta manera podemos generar encabezados y pies de página dinámicos, centralizar los estáticos, etc.

La verdad es que fue una grata sorpresa encontrar la biblioteca esta. Mi solución terminó siendo un HttpHandler que genera los pdfs con iTextSharp. El archivo pesa 40 KB. El mundo ha sido salvado nuevamente. Diós está en el Cielo, todo está en en la Tierra.

Programar como fuente de ingresos

Febrero 14, 2008 por Miguel

Cuando era chico quería aprender a programar porque me parecía copado, me permitía tener más poder sobre la compu y quien dice, algún día hacer y vender mis propios programas…

Hoy más de 15 años después puedo decir que como muchas cosas que se le ocurren a uno a los 11/12 años que van a estar buenísimas, resultan no estarlo tanto cuando uno las está viviendo.

La verdad es que me gusta programar, pero hay cosas que si no me pagaran por programarlas, sería muy difícil que las haga por motus proprio.

Pasa que hay veces en el trabajo o en la facu hay que hacer cosas que lastiman el alma, cosas que uno las hubiera hecho de entrada de otra manera, pero hay que continuar la línea y seguir dándole como se le viene dando en el lugar. Tranca campeón, a fin de mes está el dulce.

Soy afortunado, he hecho de un hobby una profesión -como el gran Ricardo Iorio- pero hay veces la profesión deja sin sabores que en el hobby no se intuían.  Pero por eso de que mi pasatiempo sea mi profesión es que en realidad se toleran más los sin sabores. La verdad es que si lo pienso un poco, me gusta mi profesión con sus desaires. Después de todo, no iba a pretender que me paguen por pasarla bien nada más… Después de todo, soy un Trabajador…

No lo molesto más, estimado lector, que vino por cuestiones técnicas o por la quiniela y dejo ya lo existencial.