Mostrando las entradas con la etiqueta Open Source. Mostrar todas las entradas
Mostrando las entradas con la etiqueta Open Source. Mostrar todas las entradas

viernes, 12 de febrero de 2010

/ IDEs para C++



Estaba un poco cansada de las ventanas de Eclipse o NetBeans para trabajar con C++, la mayoría de ellas no aportan demasiado, además de ser entornos pesados.
Decidí analizar otros entornos open source para desarrollar en C++ y encontré dos que han sustituído, para proyectos importantes, a code::Block.

> CodeLite, viene con MinGW por defecto para Windows,
multiplataforma, viene con plugin para crear proyectos con wxWidgets , soporte para plugins, depurador integrado, autocompletado de código (code::Block no lo trae por defecto) y soporta varios compiladores, entre otras cosas.

> wxDev, sólo para Windows (es una extensión de Dev-C++) con caraterísticas similares al anterior, pero menos completo, la ventaja es que tiene una interfaz visual para crear proyectos con wxWidget.

El que más me ha gustado es CodeLite por ahora.
No tengo decidido sustituir completamente a Eclipse/Netbeans por estos "nuevos" aun, pero para cierto tipos de proyectos prefiero esta opción.





/manual Ubuntu



La empresa Canonical creadora del proyecto Ubuntu, creó un manual en versión PDF dedicado a principiantes y usuarios avanzados. La versión final tendrá 150 páginas, actualmente 97. En un futuro podrá descargarse desde el repositorio, y además será traducido a 30 idiomas.
(Desventaja: no tiene demasiadas capturas de pantallas, lo que puede ser útil para usuarios principiantes)


vía muylinux





/documental sobre el kernel de linux



Participan reconocidos personajes como Richard Stallman, Linus Torvalds y otros muchos. (idioma español)




















miércoles, 29 de abril de 2009

/pack de aplicaciones para Windows



Smart Installer Pack es un paquete gratuito de 227 Mb con que reúne un menú de aplicaciones, pueden elegir cuáles, open source o de distribución libre para ser instaladas. Sólo para Windows.
Evita andar saltando de un lugar a otro en Google para encontrarlas.
Entre las aplicaciones:
WinRar
Adobe
Firefox
Chrome
Java y etc






/Stephen Fry & software libre



Muy claro.








domingo, 14 de setiembre de 2008

/leído



+desastre..tan cierto +contra los zurdos (me consta) +los graffitis de bansky
+
benito intoxicado (de bronca) +la revancha de evita +tomar antiácido: bill hicks +martha cooper (en honbox)
+jugando a... +gran hermano, el espejo de la nada +buenos vecinos y de los otros +n formas de atarme los zapatos

+todo lo que quería saber sobre anarquía +globalización y resistencia (Chomsky) +redes sociales, quién juega con quién

+
aprender a programar en 10 años +open source matters +greymatters, para crear y administrar blogs +IDE para C++ y plugins otros lenguajes (open source) +Avant Browser, un navegador liviano para Windows (freeware)






sábado, 6 de setiembre de 2008

/openGoo - suite ofimática




OpenGoo, es otra más y bastante completa entre las tantas conocidas que hay (Zoho, Google Docs, etc), en lo personal tengo cierta reticencia a que mis datos anden flotando por la red, y en servidores que no son míos, si bien es cierto que cada tanto las uso. Muy cada tanto.

A diferencia de las otras aplicaciones, es la primer aplicación open source que nos permite instalar en nuestro servidor esta herramienta.
Está en su primera etapa, por ejemplo, aun no han implementado la edición y creación de hojas de cálculo, pero de acuerdo a lo que dice en su web, eso está en desarrollo.
Y es de esperar que al ser open source comiencen a surgir plugins para enriquecer sus características.

El requisito para el que quiera instalarlo en su servidor, no es nada complicado: servidor Apache con PHP y MySQL, lo usual y con info por todos lados.

Su sistema de gestión se basa en la creación de "workspaces" para cada proyecto, dentro del cual ahí podes guardar contactos, calendarios, documentos, tareas, enlaces, todo bien jerarquizado, y sumado a la existencia de tags que facilitan aun más su administración.


vía wwwhatsnew





domingo, 31 de agosto de 2008

/backup y restore desde aplicación Delphi



Hace poco el requerimiento de una aplicación era restaurar/respaldar una base de datos MySQL desde una aplicación Delphi.

De las opciones open source como interfaz entre MySQL y Delphi, los componentes Zeos me parecen los mejores, pero no tienen implementada la opción de backup/restore.

Personalmente recomiendo, además, un administrador externo para estas tareas por la independencia de la base de datos respecto a la aplicación que la utiliza.
De hecho el que viene con el motor MySQL es muy eficiente y gratuito: http://www.mysql.com/products/tools/administrator/. Permite hacer respaldos automáticos (mediante script FTP), o bien de forma manual.
Alternativamente MySQL ya provee algunas características incorporadas para respaldos en cada versión: http://www.mysql.com/products/backup/.

En definitiva cubrí las tareas de respaldo/restauración en los dos frentes, desde la aplicación, y un administrador externo.


Componentes:

Hay componentes que pueden incorporarse a Delphi para realizar esta tarea.
MyDAC, no es gratuito, solo versión de prueba. (Y no lo probé, total, no se iba a comprar)
ZlawMySQLBackup, gratis, para Delphi 7 al menos, no pude conseguirlo, por lo que leí está en fase de prueba. Por lo tanto no es aconsejable para producción.
Aun así, por las características que describe parece interesante, aunque engorroso de instalar (si es que lo encuentran).
MySQL BackUp Component, probado para Delphi 5, funciona también para Delphi 7.

Desaconsejo cualquier copia desde un simple administrador de archivos, el administrador de la base de datos, sabe qué estructuras copiar, y como modificarlas en caso que sea necesario.

Programación:
Otra forma es hacerlo desde código, sin usar componentes, que es por la que opté (de momento). Simplemente por simplicidad.
(Doy por hecho que el path del motor está en la variable de entorno PATH del sistema)

Respaldo

procedure TFormBackUpRestore.btnBackUpClick(Sender: TObject);
begin
ShellExecute(handle,'open', 'cmd.exe',
Pchar('/c "C:\MySql\Bin\mysqldump.exe" -h localhost -R
-u username -ppassword databasename > mibackup.sql ')
,nil,
SW_SHOW );
end;

Restaurar (cambio el redireccionamiento "<")

procedure TFormBackUpRestore.btnRestoreClick(Sender: TObject);
begin
ShellExecute(handle,'open', 'cmd.exe',
Pchar('/c "C:\MySql\Bin\mysqldump.exe" -h localhost -R
-u username -ppassword databasename < mibackup.sql ')
,nil,
SW_SHOW );
end;


ShellExecute, de la unidad ShellAPI se sigue usando por motivos de compatibilidad, lo invocado corre como una aplicación (arquitectura de 16 bits) y no de proceso.
Pero funciona.

Para arquitectura de 32 bits, debería usarse CreateProcess (unidad WinAPI), pero hay que adaptar su sintaxis a Delphi, en el help el ejemplo aun viene para C, lo que muchas veces ahuyenta a los que programan en Delphi.
En Delphi Corner hay un ejemplo de CreateProcess.







sábado, 5 de abril de 2008

/web semántica



La web semántica, someramente, consiste en definir datos que definen otros y a su significado. Los metadatos posteriormente serán interpretados por algún mecanismo de procesamiento que se encargará de mostrarlos acorde a la configuración que le dimos a los mismos.

Los metadatos (web) son abstracciones cuyo objetivo es mejorar la interoperabilidad de diferentes aplicaciones porque permite una mejor descripción de los contenidos (algo que XML/HTML por sí solos no pueden), y reduce el tiempo de codificación (sólo basta conocer el protocolo de definición de los metadatos)

Los componentes de la Web Semántica son los metalenguajes y estándares: XML, XML Schema, RDF, RDF Schema y OWL (OWL Web Ontology Language)


SIMILE Project (“Semantic Interoperability of Metadata and Information in unLike Environments”, traducido “interoperabilidad semántica de metadatos e información en entornos poco probables”) es un proyecto del MIT que busca hacer el contenido semántico de la web mas accesible y configurable.

Estuve viendo alguno de los proyectos para ver su impacto en la interacción de los datos que se guardan y los metadatos, y cómo puede favorecer alguna clase de aplicaciones.
Todos los proyectos son open source y están bajo
BSD license, voy a nombrar algunos de los que me resultaron mas interesantes.

Exhibit 2.0 en el sitio lo describen como:
"Exhibit es un marco de aplicación web en tres capas escrito en Javascript, el cual se puede incluir Google Maps. Si ud quiere mostrar unos cientos de registros de data sobre el mapa, delineamientos, tablas interactivas, etc, ¿por qué preocuparse por aprender SQL, ASP, PHP, CGI, o cualquier cosa cuando puede usar Exhibit?.

Para usar Exhibir ud escribe un simple archivo de datos, y un archivo HTML en el cual ud especifica como los datos deberían ser mostrados. Datos + presentación."

Pinta interesante, pero aun no he tenido tiempo de probarla lo suficiente, requiere un poco de tiempo que ahora no tengo. Pensaba sacar datos de mi google analytics y mostrarlos de una manera mas fancy a modo de prueba, veremos.
Aqui un ejemplo con banderas por paises que da una idea de su potencial.

Gadget
Inspector XML diseñado para crear resúmenes de gran utilidad cuando hay grandes volúmenes de datos en archivos XML. Suena muy interesante para el análisis de info y buscar patrones de datos que le puedan dar un valor agregado a la información contenida.

Longwell
Es un navegador por facetas (faceted browser) para datos descritos mediante RDF.
Un navegador por facetas, o por atributos quizas sea lo mas apropiado, es una herramienta de software que usa la navegación por atributos.
Es decir, buscar objetos mediante varios atributos de los mismos, el ejemplo sacado de aqui, menciona una joyería, algunos usuarios pueden estar interesados en buscar los objetos por el tipo de material, oro, platino, mientras otros por la forma, collares, relojes, etc.
(Una búsqueda avanzada puede ser implementada usando este protocolo)

Aqui un
ejemplo.

Estos son algunos de los proyectos que integran SIMILE

Creo que es un herramienta interesante, aun no del todo madura, pero que puede favorecer mucho la forma en que interactuamos con la información. Y si bien es cierto que facilita mucho algunas fases de desarrollo, no es mágico, es necesario tomarse ese 'tiempo-costo inicial' en conocer HTML y la codificación de los metadatos.


vía tufunción








miércoles, 2 de abril de 2008

/Festival Latinoamericano de Instalación de Software libre



"El Festival Latinoamericano de Instalación de Software Libre (FLISoL) es el evento de difusión de Software Libre más grande en Latinoamérica. Se realiza desde el año 2005 y su principal objetivo es promover el uso del software libre, dando a conocer al público en general su filosofía, alcances, avances y desarrollo.
Para tal fin, las diversas comunidades locales de software libre (en cada país, en cada ciudad/localidad), organizan simultáneamente eventos en los que se instala, de manera gratuita y totalmente legal, software libre en las computadoras que llevan los asistentes. Además, en forma paralela, se ofrecen charlas, ponencias y talleres, sobre temáticas locales, nacionales y latinoamericanas en torno al Software Libre, en toda su gama de expresiones: artística, académica, empresarial y social.

El FLISOL2008 se llevará a cabo el sábado 26 de abril.

¿Quién organiza el FLISoL?

La Comunidad de Software Libre en Latinoamérica, conformada por personas y grupos de diversa índole, con el apoyo de otras entidades, principalmente educativas, y algunos patrocinadores de los eventos en cada localidad.

¿A quién está dirigido el evento?

El evento está dirigido a todo tipo de público: estudiantes, académicos, empresarios, trabajadores, funcionarios públicos, entusiastas y aun personas que no poseen mucho conocimiento informático. Si posees o no conocimientos e intereses en informática, licencias, derecho de autor/copyright y demás áreas de la ciencia y la tecnología, déjate tentar, asiste y participa del evento. Nuestro objetivo es compartir conocimientos y ansias de libertad."

Por info mas detallada http://www.comunidad.org.uy/

Probablemente me de una vuelta.

vía boletin del CEI







/emprendimiento para Movistar



En el boletín de la ORT hay información sobre un llamado de Movistar (Telefónica), es abierto a profesionales independientes, estudiantes próximos a recibirse, o empresas nacionales para que presenten un proyecto (fuertemente) orientado a celulares.
Cada participante puede presentar mas de un proyecto siempre que los mismos sean independientes.

El plazo es hasta el 29 de abril. Mas info en el sitio de movistar. (No vi nada parecido en el sitio de Movistar Argentina, pero chequeen)

Relacionado con esto, por si alguno se anima menciono mobile.processing, un entorno de programación basado en java (j2me) open source, que puede facilitarles las tareas de desarrollo para móviles.
En particular imprescindible una vuelta por Exhibitions (donde hay varios ejemplos con código), y especialmente por la web de marlon manrique quien tiene algunas bibliotecas desarrolladas.







jueves, 6 de marzo de 2008

/anatomía de SO linux




De a poco, y desde Ubuntu, voy conociendo Linux, y estoy muy conforme, ya hablaré sobre Ubuntu (este blog tiene un gran futuro, de tantas cosas "ya hablaré"). Hay varias distribuciones Linux, quizás haya alguna mejor, no lo discuto, y menos quiero discutir con los talibanes de Linux, hablo por mi limitada experiencia, pero creo que le sirve a los usuarios como yo.

Una de sus ventajas principales radica en su interacción bastante intuitiva, y si uno quiere profundizar, y adentrarse con scripts, es posible personalizarlo.
Con una filosofía top-bottom, y sin darnos cuenta, podemos llegar a conocer Linux tanto como se busque.

Esa imagen que se asemeja a una agujero negro, es la anatomía de Linux, desde O'Reilly puede descargarse un PDF con el poster.
El centro con forma de rosca representa el kernel,
y el resto está dividido en cuadrantes, donde cada uno representa los diferentes tipos de usuarios de Linux: programadores, administradores de sistemas, webmasters y los usuarios finales.
En otros cuadrantes
, se reúne a las aplicaciones del sistema en función de su utilización, con el texto descriptivo correspondiente.


vía ubunturoot






viernes, 5 de octubre de 2007

/una imagen vale mas que 1000 palabras



Cada vez más me interesa la visualización de la información, semántica potente, y casi siempre, estética.
"La visualización de datos es una disciplina transversal que utiliza el inmenso poder de comunicación de las imágenes para explicar de manera comprensible las relaciones de significado, causa y dependencia que se pueden encontrar entre las grandes masas abstractas de información que generan los procesos científicos y sociales." proyecto Visualizar.

Hay varios proyectos participativos de investigación, y todos ellos con congresos por estas fechas: Visualizar (español), InfoVis2007 (con tutoriales interesantes, muchos con temas que no puedo abarcar académicamente), VizThinker, VisualCommunication (orientado a la modelización científica) y el
information aesthetics symposium.

En relación a este tema me encuentro con unos tibios comienzos en Processing, con el probable objetivo de pasarlo a C++ por rendimiento, pareciera que la opción interesante para este lenguaje es openframeworks.
Por ahora estoy conociendo,
con pruebas muy limitadas, para saber hacia donde dirigirme.

Aqui hay algunos experimentos hechos por krahd, experimento 1, experimento 2 y experimento 3.

Ambas son alternativas open source y de licencias permisivas (permiten la comercialización sin necesidad de pagar).
Aun no he probado openframork, para Windows puede usarse con Dev-C++ o Visual Studio (incluso para la versión gratuita de Visual C++ Express Edition), está en fase muy beta para Linux, en Code::Blocks.


vía infoesthetics








domingo, 23 de setiembre de 2007

/eclipse y cygwin - problemas para compilar



La facilidad para gestionar proyectos en Java, lo personalizable y lo extensible que es mediante plugins, hace que Eclipse sea uno de mis entornos de desarrollo preferidos. Decidí cambiar la versión anterior a la nueva, Eclipse Europa para Windows XP. Quiero probarlo mas con C++, y para eso descagué la última versión del proyecto CDT (versión 4.0), que permite crear aplicaciones en C/C++.
CDT no viene con compilador, por lo tanto corre por nuestra cuenta descargarlo e instalarlo, y posteriormente configurarlo en Eclipse.



CDT tiene características interesantes
sin ser aun un producto maduro, dentro de lo destacable está el autocompletado de código, una plantilla para generar clases, elegir el tipo de constructores y atributos, depurar y ver el contenido de las variables durante el proceso.
Por defecto con el que trabaja bajo Windows es
MinGW. Como ya tenía instalado Cygwin y algo había hecho con CDT en la versión anterior de Eclipse, me puse a trabajar como siempre. Pero no fue así, después de compilar el código, y sin tener errores aparentes, cuando intenté ejecutarlo salió una ventana con el siguiente mensaje de error: "Launch failed no binaries".




Además en la consola tenía una cantidad de líneas con mensaje: "xx: makefile error" (xx es el número de línea). Lo primero que pensé fue que no tenía bien configurado el make y me propuse a hacerlo. Esto puede hacerse desde: Proyecto ->Propiedades->C/C++ builds



Ningun tipo de variación a las configuración surtió efecto, Google tampoco, decidí entrar al newsgroup correspondiente: news.eclipse.org -> eclipse.tools.cdt.
Ahí estaba la respuesta: es un bug que fue arreglado para la próxima versión de CDT, la 4.01 segun Doug Schaefer uno de sus desarrolladores.
El problema es que Eclipse se fija lo que tiene instalado cygwin en el archivo
c:\cygwin\etc\setup\installed.db (puede ser editado con WordPad), y busca por {"gcc ", "binutils ", "make "} si no encuentra nada de eso, cygwin no funciona. La comparación debería ser por gcc-core, ya que no hay gcc en el archivo installed.db.

Conlusión y solución: para usar Eclipse con C++ en Windows, con la versión actual de CDT (4.0) instalar el compilador MinGW o trabajar con Code::Blocks.
En un post previo, había comentado de las diferencias entre MinGW y Cygwin.






/desarrollo rápido para web



Hace un tiempo baje de internet GeneXus, en parte por la insistencia de un familiar cuya empresa está montada en función de productos realizados con esta herramienta.
El me hablaba de las facilidades y la (innegable) rapidez de desarrollo que se logra usando Genexus
.

Lamentablemente, y a su pedido, tengo que caer en esa costumbre uruguaya de decir, sin mencionar nombres. Y no me gusta, pero hago una excepción porque tiene que ver con el contenido de este post.

Sinceramente y al margen de reconocer las bondades del producto, una especie de metalenguaje que a partir de la modelización de una realidad genera el código de la aplicación, no logró entusiasmarme demasiado.
Principalmente porque no me gusta ver que todo se arma sin saber cómo, un sistemas de cajas negras que no comprendo (porque no es necesario), porque además si quería modificar el código generado era una tarea engorrosa, y porque me gusta ver el proceso desde la cocina.
Prefiero invertir un tiempo en aprender paradigmas de desarrollo que me permitan generar mis bibliotecas, que después usaré como un puzzle de acuerdo a las circunstancias, pero que yo conozco porque yo las generé, a que me den algo armado por otro. Y donde además, el conocimiento para realizar la aplicación no pasa tanto por la lógica de los algoritmos, ni de la ingeniería de software, sino que está restringido a la lógica de negocios.
(El me decía que yo podría trabajar generando componentes para GeneXus más que desarrollando aplicaciones con esa herramienta).

Es una herramienta ideal para software de gestión (escritorio o web) que es a lo que la empresa de mi familiar se dedica, pero cuando intentamos salir de esa trinchera, desarrollar con GeneXus es bastante más complicado, o directamente imposible.
No lo considero viable para realizar procesamiento de imagenes o juegos, y actualmente estoy interesada en esas áreas.

Tampoco me convenció demasiado que el diseño de la base de datos dependiera completamente de la aplicación. Y cuando modificamos el modelo automáticamente altera las tablas, si es necesario, dificultando su re utilización en otras aplicaciones.

Pueden generarse productos competentes en GeneXus, de hecho la empresa de este familiar, tiene éxito a nivel nacional y creciente en el exterior.
Pero es GeneXus dependiente, el mismo me dijo que apenas conocía la tecnología .NET (no lo necesita), o java, o los diferentes tipos de arquitectura. Y es porque esta herramienta se lo da digerido. Concluyendo que si un día no existía GeneXus debería contratar programadores porque el no sabe hacer casi nada. El es un gran experto en modelar problemas, asi que larga vida a GeneXus.
GeneXus es ideal cuando son pocos empleados, y se necesita sacar algo rápido al mercado, y como en su caso que comenzó solo, le vino al pelo.

En informática todo va rápido, pero por ahora soy de la idea que mas vale conocer paradigmas de desarrollo, y ver qué lenguajes o herramientas se adaptan mejor a uno u otro de acuerdo a las circunstancias o a un problema dado. Pero sí me interesa que esos lenguajes sean flexibles dentro de sus características, que me permitan controlar lo que hago porque puedo ver cómo lo hacen, y para mi GeneXus en ese aspecto, entre otros, no es flexible.
Y ademas porque no quiero depender de un lenguaje en particular, si bien entiendo que por perfiles personales y de trabajo llegamos a preferir uno mas que otro.

La forma que elegimos para trabajar, cuando podemos elegir, es la filosofía de vida que elegimos también, otra manera de interactuar. Esto no pretende ser una crítica a quienes usen GeneXus, porque como dije pueden generarse productos muy comptetentes.
Prefiero lo menos pragmático quizás, para algunos, pero que siento me da un conocimiento mas integrado a nivel de desarrollo y análisis, y de control en otras áreas. Y con GeneXus me sentí restringida.
Además, por experiencia se, que cuando contamos con un conjunto de bibliotecas en el lenguaje que sea, creadas por nosotros, cualquier aplicación será de desarrollo rápido. Me pasa en mi trabajo para ORT.

dos interesantes herramientas
Vi dos herramientas
gratuitas para desarrollo rápido web xpotronix y SIUToba que me 'recordaron' a Genexus, pero me gustaron más por la libertad que permiten. A diferencia de Genexus, la base de datos se centra en su organización y no en la aplicación.
Aun las estoy probando, y no puedo decir mucho más, pero lo dicho recién le juega a favor.









sábado, 15 de setiembre de 2007

/taller de Programación y Arte



Hoy recibí de Aldo un mail con información sobre este taller de próximo comienzo en la Facultad de Ingeniería (2da semana de octubre). El mismo está orientado a alumnos de Bellas Artes, Arquitectura e Ingeniería.

Este taller fue armado por Etienne Delacroix, un docente francés proveniente del cyber punk que anda por el mundo ofreciendo su taller a las facultades interesadas.
Segun decía en el mail, Ingeniería fue la única facultad que aceptó su propuesta después de haber sido rechazada por Bellas Artes (no se mencionan motivos).
Actualmente se lleva a cabo en unos 'laboratorios' armados en los entrepisos del sector
de "sala de máquinas", al fondo de la facultad.

El cupo del taller es limitado, y el criterio de selección no parece ser tanto el orden de inscripción, sino mas bien las inquietudes que motivan a los interesados a realizarlo.
Uno de los requisitos es enviarle una carta al docente encargado señalandole las motivaciones que nos hacen querer tomar ese taller. El grupo parece estar formado en función de los perfiles de los 'postulantes' que mejor se adecuen a los objetivos del taller.
(
Para estudiantes de Ingeniería no tiene materias previas, y otorga 3 créditos ).

Actualmente el TAP no está bajo la dirección de Delacroix, sino de otros docentes, segun se citaba, con sus ventajas y desventajas.

" .....la idea del taller es que el alumno aprenda a re-utilizar porciones de harware y software para construir otros implementos. se aprende a reutilizar parches de java y html para construir páginas web y pequeños programas gráficos, o a usar elementos electrónicos básicos para construir desde instalaciones interactivas a instrumentos musicales. cuando fui vi muchas cosas interesantes: pequeños teclados, pequeños robots que se movian siguiendo reglas básicas, videos hechos con fotos y programación java, programitas de dibujo muy sencillos pero efectivos y pasibles de ser "colgados" en la web... html es el lenguaje de progrmación de páginas web, y java es un lenguaje orientado a objetos que permite dibujar y hacer animaciones, muy similar a actionscript (de hecho es su base). El grupo de estudiantes es heterogéneo. Se trabaja en conjunto con estudiantes de ingeniería capacitados para realizar cosas complejas para las que probablemente se necesite mucho más información que la que el TAP proporciona, por lo que a veces para un lego puede ser frustrante, pero si se va con ganas de adquirir elementos básicos de programación y trabajo en equipo interdisciplinal, es una muy buena oportunidad."

Quedé entusiasmada por participar de un taller donde se redefinen conceptos, y se experimenta con ellos extapolándolos a otra áreas. Y sin duda, que interactuar en esta experiencia con gente proveniente de otras orientaciones condimenta mis motivos. Me encuentro evaluando horarios de facultad y trabajo para ver si puedo formar parte...veremos.

En la web del Taller encontrarán mas información, aqui les dejo el programa, y particularmente destaco, aunque también está en la web, este texto imperdible de Pierre Lévy acerca de "La inteligencia colectiva".





miércoles, 12 de setiembre de 2007

/actividades universitarias (para todos)



Reconozco que debí postearlo antes (pero no pude), igual están a tiempo.
El desparejo boletín del CEI a veces tiene novedades interesantes, rescato estas dos:


Día del Software Libre
El Software Freedom Day es un esfuerzo global para mostrar al público la importancia, virtudes y disponibilidad del Software Libre y de Codigo Abierto. Equipos locales alrededor del mundo organizan eventos el tercer sábado de Septiembre. El último evento involucró más de 200 equipos de todo el mundo.
Este año se realizará en Uruguay, el día sábado 15 de setiembre, de 10:00 a 18:00 hs, en la Facultad de Ingeniería de la Universidad de la República. El evento es organizado por integrantes del portal Comunidad (www.comunidad.org.uy). Habrá una serie de charlas (sin cronograma aún), demostraciones varias, copiado de distribuciones de GNU/Linux, etc.

Pacifista Iraquí en Montevideo
Se encuentra en Uruguay Sami Rasouli, militante iraquí que lucha por medios pacíficos contra la ocupación de Irak. Se trata de alguien que podrá contarnos una experiencia de primera mano de la realidad iraquí, no recibimos todos los días a alguien que está jugándosela en el terreno, en este caso en Nadjaf, y que además lo hace en las condiciones y con la convicción y el coraje de este compañero.
En particular el CDC ha resuelto recibir algunos estudiantes iraquíes para que sigan sus estudios universitarios acá en la UdelaR.

Se han organizado las siguientes actividades:

1.- domingo 2, de mañana, en el encuentro de estudiantes de ingenieria.
2.- martes 3, 19.30 hrs, charla en ciencias sociales.
3.- miercoles 5, 19 hrs. Charla en el centro universitario de Paysandú.
4.- jueves 6, 18.30 hrs. Charla en facultad de Ciencias.
5.- martes 11, 19 hrs. Charla en Fundacion Vivian Trias.
6.- miercoles 12, 19 hrs. Charla en Humanidades.
7.- Jueves 13. 19 hrs. Charla en el paraninfo.







domingo, 2 de setiembre de 2007

/punteros por referencia en C/C++



Tanto C++, C#, Java, Delphi estaba olvidada de ciertos detalles de C (los que me vi obligada a refrescar). No es ningun cool trick, pero son esos detalles tontos que pueden llevarnos a depurar un buen rato, sobre todo si no tenemos un buen día o estamos cansados.
Esto es un apunte rápido que se basa en un ejemplo real, concreto, y por ende, espero que sea mas claro, que comento porque son errores (o distracciones) mas comunes de lo que uno pensaría. Quizás escribiéndolo no lo olvide, y quizás para quienes se encuentren enfrentando estos lenguajes, los ayude.

Para el árbol mencionado en este post, debía leer el árbol por niveles y cargar los hermanos que cumplieran cierto criterio.


La función es esta:

Lista* menorHermano(Arbol* arbol)
{
Lista* listaNros = listaVacia();
int cantHijos = arbolCantHijos(arbol);

recorreArbol(arbol,cantHijos,listaNros);

return (listaNros);
}
El cabezal de menorHermano estaba fijo, debía retornar una lista formada por los nodos de los diferentes niveles del arbol.

También estaba fijo el cabezal de la función Lista* listaAgregar(int dato, Lista* cola), es más, de Lista solo tenía el .o, y el .h.
Esa era la única biblioteca de la que disponía y debía usar.

La función listaAgregar realiza un insert front, y es llamada dentro de la función recursiva que recorre el árbol. La función recursiva es:
static void recorreArbol(Arbol* arbol, int cantHijos, Lista* &l)

Mi error estuvo en olvidar en pasar por referencia la Lista: el parámetro l que es el que apunta a la lista formada, o que se va formando en cada llamada recursiva.
Ese olvido provocó que al llamar recursivamente la función, el puntero al primer elemento de la lista, no se actualizara. El puntero al primer elemento de la lista siempre tenía el mismo valor, con el cual se llama a recorrerArbol por primera vez (NULL en mi caso).


Finalizado el recorrido quería leer la lista, y resulta que no tenía elementos, y claro, imposible, las inserciones se 'perdieron', porque el puntero al primer elemento nunca se actualizó.

Para evitar eso, debí pasar el puntero a la lista por referencia, ya que al insertar un elemento en la misma, y por tratarse de un insert front, la dirección del primer nodo cambia inserción tras inserción. Y si el puntero no se pasa por referencia, no se modifica.

En C:
static void recorreArbol(Arbol* arbol, int cantHijos, Lista**l)
Se invoca:
recorreArbol(arbol,cantHijos,&l)

En C++:
static void recorreArbol(Arbol* arbol, int cantHijos, Lista**l)
Se invoca:
recorreArbol(arbol,cantHijos,l)












/leyendo (recursivamente) con fscanf




El 29/08 escribía este post sobre mis problemas para entender fscanf. No es que haya sacado mucho mas en limpio, pero a ensayo y error y leyendo algun que otro man, pude entender al menos lo necesario para resolver el problema.
En general la información o es mas bien críptica o demasiado trivial, por eso dejo un ejemplo concreto, otro más.

La solución fue recursiva nomás. La única restricción es que debía ser llamada dentro de otra función a la cual hay que respetarle el cabezal o su firma.

Para recordar, el formato del archivo a leer es de este tipo:
(Ar 3 (C 2 (d 5) (F 6))(juan 4 )(Ale 5 (Ana 3)))
Entre dos paréntesis consecutivos )) puede haber cualquier cosa, la cual debe ser filtrada.

Arbol* leer(char const* ruta)// firma a respetar.
{
FILE *fp;

fp = fopen(ruta,"r");
Arbol* arbol = NULL;

if (fp)
{
arbol = getArbol(fp,arbol);
fclose(fp);
}

return arbol;
}


Arbol* getArbol(FILE *f, Arbol* a)
{

char c;
char nom[largoNombre];
char lin[512];
int nro;

Arbol* arbol = NULL;
Arbol* subArbol = NULL;

if (!feof(f))
{
fscanf(f,"%[^()]",lin); // leo lo que haya ANTES de ( ó )

fscanf(f,"%c",&c); // lee los paréntesis
if (c == '(') // hay un nodo del arbol
{

fscanf(f," %s %d ",nom,&nro);
arbol = arbolCrear(nom,nro);

subArbol = getArbol(f,arbol); //llamo c/hijos
subArbol = getArbol(f,a); //llamo con padre a leer hnos

if ((a != NULL) && (arbol != NULL))
arbolCambiarPadre(arbol,a); //agrega al arbol
}
}
return arbol;
}

Notas:
  • no es necesario pasar por referencia el puntero a arbol porque la raíz no cambia.
  • fscanf(f,"%[^()]",lin) puede sustituirse por fscanf(f,"*[^()]"), el * indica que lo leído no se almacene en ninguna variable. Como desconocía las consecuencias de leer asi, sin almacenar, decidí optar por la primera. El símbolo ^ saltea blancos, tabuladores, nueva línea y espacios.
  • Otra forma de leer lo mismo hubiera sido fscanf(f," ( %s %d ",nom,&nro)los espacios en blanco son para contemplar el caso que el string o entero inmediato se encuentren después de una nueva línea (algo que puede darse), salvo esa restricción, no vi necesario el espacio entre %s y %d.
  • fscanf(f," %s %d ",nom,&nro). El espacio en blanco saltea nueva línea, tabuladores, los espacios que haya, no importa cuantos, basta poner uno saltea los que haya hasta que encuentre una coincidencia que se ajuste al parámetro de lectura.
  • El carácter "(" es la condición de parada de la recursividad, se terminaron de leer los hijos del nodo actual, se pasa a leer los hermanos del mismo.
Dada la recursividad de la estructura, la función escritura también fue recursiva.

void arbolEscribir(Arbol* arbol,FILE* f)
{

char* nombre = new char[largoNombre];
nombre[19] = '\0';
Arbol* hijo;
int cant_hijos,k;

if (arbol != NULL)
{
fputs("(",f);

arbolNombre(arbol,nombre);

fprintf(f,"%s ",nombre);
fprintf(f,"%d",arbolNumero(arbol));

cant_hijos = arbolCantHijos(arbol);

for (k = 0; (k <>
{
hijo = arbolHijo(arbol,k);
arbolEscribir(hijo,f);
}
fputs(")",f);
}
}

// Guarda arbol en formato de s-expresión en el archivo ruta.
void escribir(Arbol* arbol, char const* ruta)
{
FILE *fp;

if (arbol == NULL)
{
printf("El arbol esta vacio, no hay arbol para guardar\n");
return;
}

if( NULL == (fp = fopen(ruta, "w")) )
{
printf( "ERROR: No se pudo crear el fichero, %s\n",ruta);
return;
}

arbolEscribir(arbol,fp);
fclose(fp);
}









miércoles, 29 de agosto de 2007

/otro buscador de código (C++)



Se trata de codecogs está en fase beta, de registro gratuito que permite compartir código C++ orientado a la estadística, matemática, ciencas exactas y finanzas. La idea es crear una base de datos con código Open Source. Aunque hay de varias licencias. El sitio está catalogado segun las diferentes áreas, tiene un foro, un buscador, y cualquier usuario registrado puede subir código. Digamos que por ahora es una especie de foro algo mas especializado, ideal para la enseñanza de ciertos algoritmos, vale la pena seguirlo creo.