Archive for July, 2006



Web services using Document/literal (literal XML) encoding is the actual interoperability standard. The XmlSerializer in Mono which is used in System.Web.Services.WebService serializes using this standard and is pretty simple to write web services using WebServiceAttribute and WebMethodAttribute. By the way you can generate a proxy to interoperate with the web service with several frameworks and technologies even outside .Net, like Python or PHP.

However, there are some issues that can't be solved with Documnent/literal format, because literal XML is a tree and it can't represent a graph for example. With RPC/encoded style you can do this but is not standard so you loose interoperability. You can read a complete article here about that.

Now in Boxerp project we will use Remoting instead of web services for communications. We loose a little of interoperability but gain developing simplicity and facilities.

Wow!, look at this, Marc-André's generator is improving in a very usefull fashion. Furthermore the generator is successfully working on Mono, 100% Mono compatible. See the video running on Mac with XSP2. Congratulations Marc-Andre, I think that Castle will gain more users now.

Update (9 March 2009): Broken links fixed

My favourite rapid web development framework is MonoRail with ActiveRecord (CastleProject). Castle works fine with Mono on
GNU/Linux, and we are using Castle for several projects, so we are working in several tools to increase development speed.
The following tools works on Mono/Linux with the latest CastleProject (net 1.1) binary version from daily build.
With this tools you can generate a Castle web application from an UML diagram.
There are two parts; the ActiveRecord Models generator wich is a Perl script (ARgenerator.pl) and the Scaffold generator wich is part of NProject (generate.exe). To create the diagrams, you must use Umbrello.
There is a syntax to design classes in Umbrello to generate the Models (relations and methos) properly. At the first, ensure that the "Active Language" is C++. At the moment Umbrello doesnt support C# but this is not a problem. Please, see the screenshots into this zip package for a visual example. Then you can use basic types for your objects' members (int ,string, float...). You can also define models relations easily:

  • For a HasAndBelongsToMany relation you only need to define the relation in one side. This is the syntax:
    IList|ISet - Many2Many(Class, table)
  • For a BelongsTo relation you only need to define the type of an attribute like a class:
    Membername: ClassName
  • For a HasMany relation you need a HasMany on one side and a BelongsTo in the other side:
    IList|ISet - HasMany(Class)

Id, Name and Code properties are added to all classes automaticly, with a ToString method. You can avoid this editing ARgenerator, its easy. Hierarchy (JoinedKey) is also supported.Please, see the screenshots to undertand the relations.
Once you finish the diagram, go to Code menu and use the "Code Generation Wizard". ARgenerator only understands the Umbrello generated files when these are sql files, so choose SQL language.
Then go to bash and generate the models:

carlosble@laptop1:~/tmp$ ./ARgenerator.pl -namespace=MyNamespace.Models -base=ValidationBase *sql
Ignoring file: -namespace=MyNamespace. Not a regular file
Ignoring file: -base=ValidationBase. Not a regular file
Ignoring file: DateTime.sql. It is not a class
Ignoring file: IList_-_HasMany(Module).sql. It is not a class
Ignoring file: ISet_-_Many2Many(Module,_developer_module).sql. It is not a class
WARN: Developer.DeveloperCollection: adding DeveloperCollection property to class Module

Remove all *sql files, create a Models directory into your application skeleton directory and place the generated
.cs models inside.
Now Controllers, Views and Test will be generator with NProject's Generator:

svn co https://svn.sourceforge.net/svnroot/nproject nproject

Build the generator:

cd nproject/Generator
nant

Then copy the exe file and dll to you bin directory:

cd ../../
cp nproject/Generator/bin/* bin

and copy the Generators directory too:

cp -r nproject/Generator/Generators/ .

Now edit Generators/Config.boo:
Change "GeneratorDemo" to MyNamespace
And change "aspx" to "rails" if you are working in Mono/Linux:

public static ActionExtension = "aspx"

Finally, generate the scaffold:

bin/generate.exe Scaffold Application
bin/generate.exe Scaffold Bar
bin/generate.exe Scaffold Developer
bin/generate.exe Scaffold Foo
bin/generate.exe Scaffold Module

In the zip package there is a skeleton including a Makefile to run the application with XSP. And also includes the
Generators directory from NProject, but i recommend to get the latest code from svn.
Before start the application, create the database schema with "make dbgenerator" (notice that you need a database and to configure the activeRecord.xml).

Test 1

Pequeño test para los alumnos del curso de iniciación a GNU/Linux (30horas):

  1. ¿Por qué hablamos de GNU/Linux y no de Linux a secas?
  2. ¿Por qué hay muchas distribuciones de GNU/Linux?
  3. ¿Qué cosas recuerdas que son comunes a todas ellas?
  4. ¿FreeBSD es Linux?
  5. ¿Cuales crees que están siendo las claves del éxito de GNU/Linux?
  6. ¿Qué formas de instalar software hay en una distribución de GNU/Linux?
  7. Si te piden que ejecutes la aplicación konsole pero estas en un entorno de escritorio desconocido y no la encuentras en un menu, ¿Cómo lo harias?
  8. ¿Cómo puedo ver todos los procesos del sistema que está ejecutando el usuario con nombre carlos?
  9. ¿Qué significa el permiso 766 en un fichero?
  10. ¿Para qué sirven apt y dpkg? ¿Cuál es la diferencia?
  11. ¿Por qué motivos instalarías una aplicación compilando su código fuente?
  12. Escribe un script bash que recibe como parámetro un directorio y cuenta cuántos ficheros hay dentro (incluidos subdirectorios y todo lo demás que haya)
  13. ¿Qué secuencia de comandos ejecutarías para configurar el acceso a internet dentro de una red de área local?
  14. ¿Qué entornos de escritorio conoces?
  15. ¿Qué es Bardinux?

Tenemos varias formas de instalar software en GNU/Linux. Estas variarán en algunos casos según la distribución. El método tradicional común a todas ellas es instalación desde fuentes pero este sólo se recomienda en circunstancias puntuales. Actualmente es posible usar gestores de software "multi distribución" y "multi sistema de paquetes" como Red Carpet entre otros, que simplifican enormemente el mantenimiento. Algunos de los métodos de gestión de software principales son:

  1. Paquetes binarios, sistemas de paquetes y gestores: deb, dpkg, apt, rpm, yum, red carpet, conary, autopackage...
  2. Instalación desde fuentes:
    1. Paquetes de fuentes: tar, gz, bz2, tar.bz2, tar.gz, zip, ...
    2. Fuentes desde un Sistemas de Control de Versiones
    3. Autotools

Los motivos para instalar software desde los fuentes pueden ser varios: no existe el paquete binario en nuestra distribución, la version del paquete para nuestra distribución es demasiado vieja y necesitamos la útlima version de desarrollo, ...
Para el resto de casos es conveniente usar el sistema de paquetes de la distribución, ya que las actualizaciones y el mantenimiento del sistema son mucho mas comodos.
El ejercicio para hoy es descargar e instalar el paquete Bonfire apropiado para nuestra distribución.

The way in which the browser interpret the document change when the DOCTYPE changes. You can read about DOCTYPE here. The question is that you need to declare a DOCTYPE to build a valid document and there are several problems. One of this is that the way in which Firefox interprets javascript seems to be different when you add "DOCTYPE" to your document. I am using a fantastic library called Boxover to draw floating boxes but today it crashed when I added the DOCTYPE. Here is my little patch for this

Existen multitud de herramientas para configurar la red en el escritorio, pero estas varian dependiendo del escritorio y de la distribución. Vamos a ver cómo manejarnos con la configuración de red y herramientas básicas de cualquier distribucion. Como estos comandos son de administración, debemos ser super usuario para poder configurar. NOTA: esto es un resumen muy reducido de lo que ha sido la clase de hoy, tómese sólo a modo de guía.

  1. mii-tool : indica si hay enlace fisico a las interfaces de red
  2. ifconfig : muestra las interfaces de red y permite configurarlas.
    ifconfig eth0 192.168.1.50
  3. route: muestra la tabla de rutas y también nos permite configurar nuestro gateway
    route -n; route add default gw 192.168.1.1
  4. /etc/resolv.conf: contiene los servidores de nombres que nos resolverán los nombres
    nameserver 195.235.113.3
  5. netstat: permite ver que sockets (tcp/udp y unix) hay activos entre otras cosas
    nestat -nap
  6. nmap: permite ver puertos abiertos en otras maquinas
  7. ssh: acceso remote seguro (man ssh)
  8. scp: copia remota segura (man scp)
  9. w: ¿quién está conectado a esta maquina?
  10. write y mesg: comunicación con otros usuarios en otros terminales de la misma estación

Hoy tenemos otra interesante lista de aplicaciones para ver:

  1. Scribus (Software de maquetación, posible alternativa a Adobe Pake Maker)
  2. Clientes de correo: Evolution, Kmail, Thunderbird
  3. Plugin mplayer para Firefox
  4. El paquete bardinux-multimedia
  5. Mplayer, Xine, Totem, Kaffeine
  6. Navegadores: Firefox, Konqueror, Epiphany, Mozilla, Dillo.
  7. Navegadores texto: links, lynx
  8. Lectores de noticias: akregator, blam
  9. Postit!: tomboy, knotes, xpad
  10. Mensajeria Jabber: gaim, kopete, psi
  11. Mensajería msn: amsn
  12. Grabación de CD/DVD: k3b, nautilus-cd-burner, bonfire

Repositorio interesante (w32codecs) :
deb ftp://cipherfunk.org/pub/packages/ubuntu dapper main

Aqui os pongo las presentaciones que hemos estado viendo en clase los primeros dias, para que probeis a descargarlo y abrirlo con OpenOffice.

  1. Día 1
  2. Día 2
  3. Día 3

Os recuerdo que un fichero .bz2 está comprimido con bzip2 y hay que descomprimirlo usando "bunzip2 nombrefichero.bz2"

En la clase de hoy hemos estado jugando con Bardinux, manejandonos un poquito con el escritorio KDE y probando programas diversos. Lo tipico; cambiar el fondo de escritorio, crear un "acceso directo" ...
Tambíen hemos ido viendo las alternativas en Gnome con Ubuntu.
La lista de software que hemos estado probando en clase es:

  1. Extension Downthemall para Firefox
  2. Instalación del plugin de Flash para Firefox
  3. F-Spot (organizar nuestras fotos)
  4. Beagle (organizar nuestros ficheros)
  5. Amarok (reproductor multimedia)
  6. Streamtuner, xmms y Streamripper (radios de internet y reproductor audio)
  7. wifi-radar (Busqueda de redes inalámbrias con Gnome)
  8. kwifimanager (Idem, pero en Kde)
  9. Inkscape (Diseño vectorial, podría ser una alternativa a Corel Draw)
  10. Qcad (Diseño Cad)
  11. Qgis (Sistema de información geográfico)

Hemos estado jugando con el comando wget (man wget) desde la consola para descargarnos sitios completos.
Por último hemos visto el video de XGL en YouTube. Si me da tiempo el próximo dia me traigo el portatil y lo vemos en directo.

A los alumnos que no estuvieron les recuerdo que hace unos dias también vimos la extensión "Web Developer" de Firefox y el programa Gimp para diseño gráfico.  Teneis Gimp instalado en Bardinux.