Introducci´ona Introducci´onal cursillo Qu´ees Mono

Introducci´onal entorno

Interfaces gr´aficas . . .

Otros

Referencias

Agradecimientos y . . .

*

P´agina www

P´agina de Abertura Pablo Ordu˜naFern´andez(aka NcTrun) JJ II Julio 2006 J I

P´agina 1 de 147

Regresar

Full Screen This work is licensed under the Creative Commons Attribution License. To view a copy of this license, visit http://creativecommons.org/licenses/by/2.0/ or send a letter to Creative Commons, 559 Nathan Cerrar Abbott Way, Stanford, California 94305, USA Abandonar Introducci´on a Mono 2006 Pablo Ordu˜na. e-ghost y DotNetGroup 1. Introducci´on alIntroducci´ona cursillo Mono

Introducci´onal cursillo

Qu´ees Mono

Introducci´onal entorno

Interfaces gr´aficas . . .

Otros

Referencias

Agradecimientos y . . .

Introducci´onal cursillo *

P´agina www

P´agina de Abertura

JJ II

J I

P´agina 2 de 147

Regresar

Full Screen

Cerrar

Abandonar Introducci´on a Mono c 2006 Pablo Ordu˜na. e-ghost y DotNetGroup

1.1. De qu´eva este cursilloDe qu´eva este cursillo

• El cursillo est´aentre los Cursillos de Julio de los grupos de inter´esde la Uni- Introducci´onal cursillo versidad de Deusto Qu´ees Mono

– Cursillos de Julio: Introducci´onal entorno ∗ Desde hace varios a˜nos,alumnos y alumnas de la Facultad de Ingenier´ıa Interfaces gr´aficas . . . de la Universidad de Deusto organizan de manera voluntaria una serie Otros de cursillos que abarcan diversas ´areas de conocimiento Referencias ∗ Esta actividad es coordinada por la Delegaci´onde Alumnos Agradecimientos y . . . ∗ Cuenta con el apoyo de profesores y de la Facultad de Ingenier´ıa- *

ESIDE, que anima e impulsa estas actividades facilitando el uso de P´agina www aulas informatizadas y dem´as recursos para que su realizaci´onsea lo mejor posible. P´agina de Abertura

– Filosof´ıade los cursillos JJ II

∗ ¡Compartir conocimiento! J I ∗ Ayudar a dar los primeros pasos de una tecnolog´ıa, lenguaje de pro- P´agina 3 de 147 gramaci´on, etc · En consecuencia: En un cursillo se abarcan la m´aximacantidad de Regresar

temas en el m´ınimotiempo posible. No es posible profundizar mu- Full Screen cho en cada tema, pero s´ıver lo suficiente para que el/la alumno/a pueda seguir aprendiendo por su cuenta, una vez dados los primeros Cerrar

pasos. Abandonar · Cursillos introductorios, no exhaustivos – M´asinformaci´on sobre los Cursillos de Julio • Este concretamente se da desde el grupo de libre de la Universidad Introducci´onal cursillo (el e-ghost) y desde el grupo de .NET de la Universidad (el DotNetGroup) Qu´ees Mono Introducci´onal entorno

Interfaces gr´aficas . . .

Otros

Referencias

Agradecimientos y . . .

*

P´agina www

P´agina de Abertura

JJ II

J I

P´agina 4 de 147

Regresar

Full Screen

Cerrar

Abandonar Introducci´on a Mono c 2006 Pablo Ordu˜na. e-ghost y DotNetGroup 1.2. Objetivos Objetivos

• Pretende ser una introducci´on a Mono Introducci´onal cursillo Qu´ees Mono – cubriendo algunos de los temas m´asdivertidos de esta plataforma Introducci´onal entorno

– a d´ıade hoy (17-20 de Julio de 2006) Interfaces gr´aficas . . . • En algunos puntos puede ser m´as que una introducci´on Otros Referencias

– Suelen ser para explicar otros puntos que s´ılo pretenden ser Agradecimientos y . . .

– Adem´ashan sido ampliadas (no actualizadas) durante la semana despu´es *

del cursillo P´agina www

• Se procura dar suficientes enlaces y referencias para avanzar en diferentes cam- P´agina de Abertura pos, en especial al final del pdf JJ II • El cursillo es una actualizaci´on del cursillo de mono que se imparti´oen Julio 2005 J I

P´agina 5 de 147

Regresar

Full Screen

Cerrar

Abandonar Introducci´on a Mono c 2006 Pablo Ordu˜na. e-ghost y DotNetGroup 1.3. Requisitos Requisitos

• C#. Desde el DotNetGroup Se imparti´oun cursillo de 6 horas de C#. Apuntes Introducci´onal cursillo disponibles en: Qu´ees Mono Introducci´onal entorno – la web de los cursillos Interfaces gr´aficas . . .

– la web del grupo Otros

– el hueco web del autor en la web del e-ghost Referencias

Agradecimientos y . . .

*

P´agina www

P´agina de Abertura

JJ II

J I

P´agina 6 de 147

Regresar

Full Screen

Cerrar

Abandonar Introducci´on a Mono c 2006 Pablo Ordu˜na. e-ghost y DotNetGroup 2. Qu´ees Mono Introducci´ona Mono

Introducci´onal cursillo

Qu´ees Mono

Introducci´onal entorno

Interfaces gr´aficas . . .

Otros

Referencias

Agradecimientos y . . .

Qu´ees Mono *

P´agina www

P´agina de Abertura

JJ II

J I

P´agina 7 de 147

Regresar

Full Screen

Cerrar

Abandonar Introducci´on a Mono c 2006 Pablo Ordu˜na. e-ghost y DotNetGroup 2.1. Qu´ees Mono Qu´ees Mono

• Mono es una plataforma libre de desarrollo multiplataforma Introducci´onal cursillo Qu´ees Mono • Desarrollo dirigido por Novell / Ximian Introducci´onal entorno • Objetivo: Interfaces gr´aficas . . . Otros – que GNU/Linux triunfe en el escritorio Referencias

– intentando dar a los desarrolladores de software de GNU/Linux una plataforma Agradecimientos y . . .

en la que desarrollen m´assoftware en menos tiempo *

P´agina www

P´agina de Abertura

JJ II

J I

P´agina 8 de 147

Regresar

Full Screen

Cerrar

Abandonar Introducci´on a Mono c 2006 Pablo Ordu˜na. e-ghost y DotNetGroup 2.2. Un poco de historiaUn poco de historia

Introducci´onal cursillo 2.2.1. Ximian Qu´ees Mono

• Fundada por Miguel de Icaza y Nat Friedman Introducci´onal entorno • Su prop´osito era desarrollar software de escritorio para GNU/Linux Interfaces gr´aficas . . . Otros

• Seg´unafirman esto les supon´ıaun gran esfuerzo Referencias – Crearon herramientas para facilitarlo Agradecimientos y . . . Sin obtener el resultado esperado *

P´agina www • Ya anteriormente hab´ıan llegado a la conclusi´onde que no se estaba reuti- lizando c´odigo en GNU/Linux P´agina de Abertura

– Cada lenguaje reimplementa sus librer´ıasdesde cero JJ II

– Cada programa ten´ıapoco m´as que libc o xlib en com´uncon el resto J I

• Evolution P´agina 9 de 147

– Aplicaci´on grande Regresar

– Desarrollo demasiado caro Full Screen

∗ 2,5 a˜nos Cerrar ∗ 17 programadores en algunos momentos Abandonar · de Icaza:”los ´ultimosseis meses fueron doloros´ısimosporque en- contramos todo tipo de problemas con haberlo hecho en C ”

Introducci´onal cursillo

Qu´ees Mono

Introducci´onal entorno

Interfaces gr´aficas . . .

Otros

Referencias

Agradecimientos y . . .

*

P´agina www

P´agina de Abertura

JJ II

J I

P´agina 10 de 147

Regresar

Full Screen

Cerrar

Abandonar 2.2.2. Gnome • Por entonces, desde se intentaba solventar el problema con algunas soluciones: Introducci´onal cursillo Qu´ees Mono – Bindings de sus librer´ıas Introducci´onal entorno

∗ (Esta soluci´on es llevada a cabo por muchos otros proyectos) Interfaces gr´aficas . . .

∗ Problemas: Otros

· Cada vez que se cambia algo hay que volver a hacer demasiado Referencias

trabajo Agradecimientos y . . .

Hoy existen sistemas que automatizan bastante esta tarea * · Lenguajes menos populares sufren P´agina www – Bonobo P´agina de Abertura ∗ Soluci´on a creaci´onde componentes reusables · Utilizando CORBA JJ II

· Basado en interfaces establecidos J I

· Independiente del lenguaje P´agina 11 de 147 ∗ Los resultados no fueron los esperados Regresar

Full Screen

Cerrar

Abandonar 2.2.3. .NET • Por entonces (2000), publicaba la ”.NET Initiative” Introducci´onal cursillo – .NET Framework Qu´ees Mono

∗ Nueva plataforma de desarrollo Introducci´onal entorno

∗ Nueva infraestructura para desarrollo de Servicios Web Interfaces gr´aficas . . .

∗ Nuevas herramientas para la plataforma de desarrollo Otros – Hailstorm Referencias ∗ el sistema de single sign-on centralizado de Passport Agradecimientos y . . . * ∗ No implementado por Mono ∗ DotGNU s´ıpretende implementar una alternativa P´agina www

P´agina de Abertura

JJ II

J I

P´agina 12 de 147

Regresar

Full Screen

Cerrar

Abandonar 2.2.4. .NET Framework • Resolv´ıatodos los problemas que hab´ıan tratado de resolver, de una forma m´asorganizada Introducci´onal cursillo Qu´ees Mono • Ofrec´ıa: Introducci´onal entorno

– Garbage Collector, Threading... Interfaces gr´aficas . . . – Un nuevo lenguaje de alto nivel, C# Otros – Una potente librer´ıa Referencias Agradecimientos y . . . – Soporte para m´ultiples lenguajes * – Especificaciones ya publicadas P´agina www • Las partes m´as complejas estaban estandarizadas P´agina de Abertura – Permitiendo que se hiciesen implementaciones de ello JJ II

• A mediados de 2001 decidieron lanzar el Proyecto Mono J I

– Desarrollando una implementaci´on libre del .NET Framework P´agina 13 de 147

Regresar

Full Screen

Cerrar

Abandonar Introducci´on a Mono c 2006 Pablo Ordu˜na. e-ghost y DotNetGroup 2.3. Caracter´ısticas b´asicasCaracter´ısticasb´asicas

Introducci´onal cursillo 2.3.1. Common Language Infrastructure Qu´ees Mono

• La plataforma es independiente al lenguaje Introducci´onal entorno • Cuenta con un lenguaje universal, el CIL Interfaces gr´aficas . . . Otros

– Common Intermediate Language, tambi´en llamado IL o MSIL Referencias

– f´acilmente compilable Agradecimientos y . . . – cada lenguaje tiene su compilador que genera CIL * • Luego, del CIL se genera el c´odigonativo de la plataforma en la que se ejecute P´agina www

P´agina de Abertura – compilador JIT (Just In Time) o AOT (Ahead Of Time) o int´erprete – En estos momentos, est´an soportadas: JJ II

∗ x86 (Linux, Windows, BSD, Solaris/x86) J I

∗ PowerPC (Mac OS X 10.2, 10.3, Linux) P´agina 14 de 147 ∗ AMD64 (Linux) Regresar ∗ SPARC, S390 Full Screen

Cerrar

Abandonar Introducci´onal cursillo

Qu´ees Mono

Introducci´onal entorno

Interfaces gr´aficas . . .

Otros

Referencias

Agradecimientos y . . .

*

P´agina www

P´agina de Abertura

JJ II

J I

P´agina 15 de 147

Regresar

Full Screen

Cerrar

Abandonar Introducci´on a Mono c 2006 Pablo Ordu˜na. e-ghost y DotNetGroup 2.4. Mono y .NET Mono y .NET

Introducci´onal cursillo 2.4.1. Ventajas Qu´ees Mono

• Gracias a todo lo anterior: Introducci´onal entorno – Se puede desde un lenguaje utilizar componentes escritos en otro lenguaje Interfaces gr´aficas . . . Otros – Dada una librer´ıa, su API es accesible a todos estos lenguajes Referencias

– Lo ´uniconecesario es que estos lenguajes tengan compilador a CIL Agradecimientos y . . .

– Incluso se pueden reutilizar componentes de terceros *

P´agina www

P´agina de Abertura

JJ II

J I

P´agina 16 de 147

Regresar

Full Screen

Cerrar

Abandonar 2.4.2. Compatibilidad • Mono se basa en el .NET Framework Introducci´onal cursillo – de la misma forma que la FSF en su d´ıainici´oel Proyecto GNU bas´andose Qu´ees Mono en UNIX Introducci´onal entorno

• .NET Framework y est´andares Interfaces gr´aficas . . .

Otros – Tanto C# como el CLI fueron estandarizados Referencias

– Otros componentes no fueron estandarizados: Agradecimientos y . . .

∗ ASP.NET *

P´agina www ∗ ADO.NET P´agina de Abertura ∗ ... JJ II • Mono implementa casi todo el .NET Framework J I – Tambi´enlo no estandarizado (por compatibilidad) P´agina 17 de 147 ∗ ADO.NET, ASP.NET. . . – Algunas partes no implementadas Regresar ∗ Para algunas no se van a dedicar esfuerzos Full Screen

· System.EnterpriseServices o System.Management Cerrar ∗ Otras ya pr´acticamente implementadas Abandonar · Windows Forms. . . • Por tanto son plataformas compatibles en muchos aspectos Introducci´onal cursillo – Lo compilado en una plataforma puede ser ejecutado en la otra siempre y Qu´ees Mono cuando: Introducci´onal entorno

∗ Sean aplicaciones 100% .NET: no utilicen P/Invoke Interfaces gr´aficas . . .

∗ Utilicen librer´ıasque est´enportadas en la otra plataforma Otros

∗ Utilicen versiones compatibles Referencias ∗ Cumplan lo b´asicoen portabilidad (’/’ o ’\\’. . . ) Agradecimientos y . . .

* • Esta compatibilidad tiene grandes ventajas: P´agina www – Reutilizar inversiones de Microsoft en documentaci´on P´agina de Abertura ∗ Libros, art´ıculos,cursillos de .NET ∗ P´aginas web, foros, etc. dedicadas a .NET JJ II

– Facilita la migraci´on de proyectos desarrollados en .NET a GNU/Linux J I

∗ Empresas que usan .NET y se plantean migrar a GNU/Linux P´agina 18 de 147 ∗ Utilizar componentes que otros programaron con .NET en mente Regresar

Full Screen

Cerrar

Abandonar Introducci´on a Mono c 2006 Pablo Ordu˜na. e-ghost y DotNetGroup

2.5. Librer´ıas Librer´ıas

• Mono viene con varias librer´ıas incorporadas: Introducci´onal cursillo

– Las que tiene implementadas de .NET Qu´ees Mono

– Suyas propias: Introducci´onal entorno

∗ Cairo Interfaces gr´aficas . . . ∗ Bindings de Gnome (GTK#, Glade#,. . . ) Otros ∗ Bindings de aplicaciones (Evolution, Mozilla, OpenOffice.org, iFolder, Referencias Beagle,...) Agradecimientos y . . . ∗ POSIX *

∗ Librer´ıas de Novell P´agina www ∗ M´asBases de datos P´agina de Abertura · Adem´asde OleDB, Microsoft SQL y Oracle, proporciona para IBM DB2, MySQL, Postgress, Sybase, Tds,SQLite. . . JJ II

– Y muchas m´aslibrer´ıas: J I ∗ Remoting.CORBA P´agina 19 de 147 ∗ #ziplib ∗ GlGen (soporte para OpenGL) Regresar ∗ SDL.NET Full Screen ∗ QT# Cerrar ∗ un largo etc´etera Abandonar Introducci´on a Mono c 2006 Pablo Ordu˜na. e-ghost y DotNetGroup 2.6. Licencias y patentesLicencias y patentes

Introducci´onal cursillo 2.6.1. Cu´ales la licencia de Mono Qu´ees Mono

• Diferentes licencias: Introducci´onal entorno – Compiladores: GNU GPL Interfaces gr´aficas . . . Otros – Runtime: GNU LGPL Referencias

– Librer´ıas de clases: MIT X11 Agradecimientos y . . .

∗ Para evitar amig¨uedadesde la LGPL con ”trabajo derivado” *

· Una clase hija ¿es trabajo derivado? P´agina www ∗ Dado que es la que m´ascontribuidores tiene, utilizan MIT X11 para evitar problemas P´agina de Abertura • Tambi´enda licencias privativas JJ II J I

P´agina 20 de 147

Regresar

Full Screen

Cerrar

Abandonar 2.6.2. Estandarizaci´onde .NET • Microsoft, junto con HP e Intel, estandariza en 2001 parte de .NET en la ECMA: Introducci´onal cursillo Qu´ees Mono – ECMA 334 (C#) Introducci´onal entorno

– ECMA 335 (CLI) Interfaces gr´aficas . . . • Entre 2001 y 2003 tambi´enson estandarizados C# y el CLI en la ISO: Otros Referencias

– ISO 23270 (C#) Agradecimientos y . . .

– ISO 23271 (Common Language Infrastructure) *

• En el proceso de estandarizaci´on participaron varias empresas: P´agina www

– Borland, IBM, Sun Microsystems, Novell/Ximian, Fujitsu o Netscape, en- P´agina de Abertura tre otras JJ II

• ¿Qu´ees la ECMA? J I

– European Computer Manufacturer’s Association P´agina 21 de 147

– La misma asociaci´onque estandariz´o JavaScript, por ejemplo Regresar

Full Screen

Cerrar

Abandonar 2.6.3. Est´andares y patentes • ¿Qu´esignifica esto? Introducci´onal cursillo – La ECMA tiene una pol´ıtica con respecto a patentar sus est´andares Qu´ees Mono

∗ Toda patente de un est´andar debe estar bajo los t´erminos RAND Introducci´onal entorno

· En caso contrario, se echa a la empresa Interfaces gr´aficas . . . – Microsoft, Intel y HP han prometido Otros ∗ Licencias gratuitas (royalty-free) para todas las patentes relacionadas Referencias con los est´andares ECMA 334 Y ECMA 335 Agradecimientos y . . . * • ¿RAND? P´agina www – Reasonable And Non Discriminatory P´agina de Abertura – Si una empresa tiene una patente importante sobre el est´andar, ofrecer´a licencias: JJ II

∗ bajo t´erminos ”razonables” J I

∗ en condiciones no discriminatorias P´agina 22 de 147

– Compatible con el software libre ´unicamente si la licencia es gratuita Regresar ∗ Microsoft, Intel y HP lo han prometido Full Screen • ¿Entonces Microsoft puede patentar .NET? Cerrar

– S´ı,lo no estandarizado por el ECMA, ”como quiera” Abandonar – Lo estandarizado tambi´en,pero: ∗ con restricciones

∗ bajo t´erminos RAND Introducci´onal cursillo

Qu´ees Mono • ¿En qu´eafecta todo esto a Mono? Introducci´onal entorno

– Patentes en lo no estandarizado Interfaces gr´aficas . . . ∗ Lo mismo que una patente cualquiera Otros ∗ Mejor utilizar alternativas: Referencias · GTK# en lugar de Windows Forms Agradecimientos y . . . · ... * – Patentes en lo estandarizado P´agina www ∗ En el peor de los casos, podr´ıanexigir que se usasen licencias para el P´agina de Abertura uso de su implementaci´on JJ II · Siempre y cuando sean patentes v´alidas J I • ¿Qu´ehar´ıaNovell en caso de enfrentarse a una patente? P´agina 23 de 147 1. Intentar invalidar la patente buscando Arte Previo Regresar – En caso de que se encuentren implementaciones de lo patentado previas a la patente, la patente es declarada nula Full Screen – En el caso de los est´andares ECMA 334 y ECMA 335, Java (entre Cerrar otros) marca un precedente importante Abandonar ∗ Muchas caracter´ısticas de C# est´anen Java ∗ Muchas caracter´ısticas del CLI est´anen el JRE 2. Si lo anterior es imposible, reimplementar de otra manera Introducci´onal cursillo – No invalida la patente, pero puede hacer que no sea aplicable a la nueva Qu´ees Mono implementaci´on Introducci´onal entorno Interfaces gr´aficas . . . 3. Si lo anterior es imposible: Otros – Se corta el componente Referencias Agradecimientos y . . . ∗ Eliminar´ıacompatibilidad con .NET * ∗ Mantendr´ıael software libre P´agina www – Quiz´a, en caso de que interese, se podr´ıallegar a pagar alguna licencia ∗ S´olocomo ´ultimorecurso P´agina de Abertura ∗ S´oloen caso de que haya clientes dispuestos a pagar esa licencia para mantener su programa mientras reimplementan la parte patentada JJ II • ¿Qu´eocurrir´ıaen el caso de que cortasen alg´uncomponente? J I

P´agina 24 de 147 – Si Microsoft por medio de patentes obligase a Novell/Ximian eliminar

compatibilidad con .NET Regresar ∗ El objetivo principal (desarrollar software bajo GNU/Linux) seguir´ıa Full Screen vigente · Con las librer´ıasde Mono Cerrar ∗ Recordemos que esas librer´ıasse implementan s´olo por compatibilidad Abandonar Introducci´onal cursillo

Qu´ees Mono

Introducci´onal entorno

Interfaces gr´aficas . . .

Otros

Referencias

Agradecimientos y . . .

*

P´agina www

P´agina de Abertura

JJ II

J I

P´agina 25 de 147 Web original de la imagen

Regresar • Entonces. . . ¿Mono est´alibre de patentes? Full Screen – NO Cerrar ∗ Las patentes que Mono podr´ıainfringir no son s´olode Microsoft Abandonar · Podr´ıaestar infringiendo patentes de Sun sobre Java · Podr´ıaestar infringiendo patentes submarinas de otras empresas

sobre alguna parte de alg´uncomponente Introducci´onal cursillo • Entonces. . . ¿Estoy m´as libre de patentes utilizando otra plataforma? Qu´ees Mono Introducci´onal entorno – NO Interfaces gr´aficas . . .

∗ Cualquier c´odigo de m´asde 1000 l´ıneas tiene muchas posibilidades de Otros

estar infringiendo alguna patente Referencias

∗ El usar o no usar Mono no da m´as garant´ıas de que tu proyecto pueda Agradecimientos y . . .

ser minado por alguna patente *

P´agina www

P´agina de Abertura

JJ II

J I

P´agina 26 de 147

Regresar

Full Screen

Cerrar

Abandonar Introducci´on a Mono c 2006 Pablo Ordu˜na. e-ghost y DotNetGroup 2.7. Estado Actual Estado Actual

• Versi´on estable actual: 1.1.13 Introducci´onal cursillo

Qu´ees Mono • Versi´on actual: 1.1.16.1 Introducci´onal entorno

– Nuevos componentes que no hab´ıaen la 1.0 Interfaces gr´aficas . . . ∗ Compilador de VB.NET (alpha, hay otro nuevo en desarrollo) Otros ∗ Windows Forms 1.1 Referencias ∗ Debugger Agradecimientos y . . . ∗ M´ascompiladores, m´as bindings, versiones m´asmodernas. . . * – Algunos componentes de Microsoft Whidbey P´agina www

∗ C# 2.0, .NET 2, XML 2, ASP.NET 2, ADO.NET 2. . . P´agina de Abertura

– Muchas mejoras en rendimiento JJ II

• Pr´oximas versiones J I

– 1.2 P´agina 27 de 147

∗ Finales 2006 Regresar ∗ Versi´on estable de lo que ahora es la rama 1.1 Full Screen – 2.0 Cerrar ∗ 2007 Abandonar Introducci´on a Mono c 2006 Pablo Ordu˜na. e-ghost y DotNetGroup 2.8. Aplicaciones Aplicaciones

Introducci´onal cursillo 2.8.1. Aplicaciones que utilizan Mono Qu´ees Mono

• El n´umero de aplicaciones desarrolladas en Mono Introducci´onal entorno – se ha disparado desde la primera versi´on estable de Mono en Agosto 2004 Interfaces gr´aficas . . . Otros – muchas de estas aplicaciones todav´ıano son estables, pero muchas son ya Referencias funcionales Agradecimientos y . . .

• Aqu´ıhablamos de unas pocas *

• Como veremos, todas estas aplicaciones utilizan las APIs propias de Mono, y P´agina www muchas ni siquiera son portables a . Como dec´ıamos antes, P´agina de Abertura el objetivo principal es tener una plataforma de desarrollo libre de calidad, no compatibilidad con .NET JJ II

J I

P´agina 28 de 147

Regresar

Full Screen

Cerrar

Abandonar 2.8.2. F-Spot • F-spot es un gestor de fotos • Almacena en una base de datos (SQLite) la informaci´onde las fotos Introducci´onal cursillo Qu´ees Mono • Permite f´acilmente Introducci´onal entorno Interfaces gr´aficas . . . – manejarlas Otros Referencias – buscar grupos de fotos por: Agradecimientos y . . . ∗ fechas *

∗ alguna de las m´ultiples etiquetas que le marques P´agina www

• Funciones t´ıpicas de visores de fotos P´agina de Abertura – Presentaci´on, editar, rotar. . . JJ II

J I

P´agina 29 de 147

Regresar

Full Screen

Cerrar

Abandonar Introducci´onal cursillo

Qu´ees Mono

Introducci´onal entorno

Interfaces gr´aficas . . .

Otros

Referencias

Agradecimientos y . . .

*

P´agina www

P´agina de Abertura

JJ II

J I

P´agina 30 de 147

Regresar

Full Screen web original del imagen Cerrar

Abandonar 2.8.3. Beagle • Beagle es un sistema de b´usquedasen disco Introducci´onal cursillo – Estilo Google Desktop, pero para GNU/Linux y es libre Qu´ees Mono

• Indexa gran cantidad de archivos: Introducci´onal entorno

Interfaces gr´aficas . . . – Documentos Otros ∗ OpenOffice.org (sxw,sxi,sxm), PDF, RTF, Microsoft Office (.doc, .ppt) Referencias ... Agradecimientos y . . .

– C´odigo * ∗ C,C++,C#, Java, Python. . . P´agina www – Otros archivos P´agina de Abertura ∗ html, jpg, png, ogg, flac, mp3, txt, texi. . . – M´as JJ II ∗ Conversaciones con el Gaim, e-mails del Evolution. . . J I • Soporta: P´agina 31 de 147 – Queries con un interfaz de usuario gr´aficoen GTK# (”Best”) Regresar – Queries desde comandos para tus scripts Full Screen

– Queries desde tus programas Cerrar

∗ Su propia API para Mono a trav´esde D-BUS# Abandonar ∗ Una API para Python – Queries online ∗ Los nuevos resultados aparecen seg´unse causan (conversaciones, nuevos Introducci´onal cursillo archivos. . . ) Qu´ees Mono

Introducci´onal entorno

Interfaces gr´aficas . . .

Otros

Referencias

Agradecimientos y . . .

*

P´agina www

P´agina de Abertura

JJ II

J I

P´agina 32 de 147

Regresar

Full Screen

Cerrar

Abandonar Introducci´onal cursillo

Qu´ees Mono

Introducci´onal entorno

Interfaces gr´aficas . . .

Otros

Referencias

Agradecimientos y . . .

*

P´agina www

P´agina de Abertura

JJ II

J I

P´agina 33 de 147

Regresar

Full Screen

Cerrar

Abandonar 2.8.4. Muine • Muine es un reproductor de m´usica Introducci´onal cursillo – Almacenado ordenado por: Qu´ees Mono

∗ ´albumes Introducci´onal entorno

∗ lista de canciones Interfaces gr´aficas . . . – Opciones t´ıpicasde Otros ∗ reproductor de m´usica Referencias ∗ gestor de listas Agradecimientos y . . . *

P´agina www

P´agina de Abertura

JJ II

J I

P´agina 34 de 147

Regresar

Full Screen

Cerrar

Abandonar Introducci´onal cursillo

Qu´ees Mono

Introducci´onal entorno

Interfaces gr´aficas . . .

Otros

Referencias

Agradecimientos y . . .

*

P´agina www

P´agina de Abertura

JJ II

J I

P´agina 35 de 147

Regresar

Full Screen

Cerrar

Abandonar 2.8.5. Blam • Blam es un gestor de RSS/RDF para Gnome Introducci´onal cursillo – Bastante simple y f´acil de usar Qu´ees Mono

– Utiliza Gecko#, el motor de Mozilla Introducci´onal entorno

Interfaces gr´aficas . . .

Otros

Referencias

Agradecimientos y . . .

*

P´agina www

P´agina de Abertura

JJ II

J I

P´agina 36 de 147

Regresar

Full Screen

Cerrar

Abandonar Introducci´onal cursillo

Qu´ees Mono

Introducci´onal entorno

Interfaces gr´aficas . . .

Otros

Referencias

Agradecimientos y . . .

*

P´agina www

P´agina de Abertura

JJ II

J I

P´agina 37 de 147

Regresar

Full Screen

Cerrar

Abandonar 2.8.6. Tomboy • Tomboy es un editor de notas para Gnome: Introducci´onal cursillo – Un panel de Gnome Qu´ees Mono

– Puedes a˜nadir, enlazar y quitar notas Introducci´onal entorno

– Funciones t´ıpicas de editores de texto simples, como: Interfaces gr´aficas . . . ∗ errores en gram´atica Otros ∗ p´aginas web o e-mails Referencias ∗ redo/undo Agradecimientos y . . . * ∗ cambiar tama˜notexto ∗ b´usquedas P´agina www

P´agina de Abertura

JJ II

J I

P´agina 38 de 147

Regresar

Full Screen

Cerrar

Abandonar Introducci´onal cursillo

Qu´ees Mono

Introducci´onal entorno

Interfaces gr´aficas . . .

Otros

Referencias

Agradecimientos y . . .

*

P´agina www

P´agina de Abertura

JJ II

J I

P´agina 39 de 147

Regresar

Full Screen

Cerrar

Abandonar Introducci´on a Mono c 2006 Pablo Ordu˜na. e-ghost y DotNetGroup 3. Introducci´on alIntroducci´ona entorno Mono

Introducci´onal cursillo

Qu´ees Mono

Introducci´onal entorno

Interfaces gr´aficas . . .

Otros

Referencias

Agradecimientos y . . .

Introducci´onal entorno *

P´agina www

P´agina de Abertura

JJ II

J I

P´agina 40 de 147

Regresar

Full Screen

Cerrar

Abandonar Introducci´on a Mono c 2006 Pablo Ordu˜na. e-ghost y DotNetGroup 3.1. Instalaci´on Instalaci´on

Introducci´onal cursillo 3.1.1. Debian y Ubuntu Qu´ees Mono

• Mono 1.1.13 y muchos paquetes relacionados est´an disponibles tanto en debian Introducci´onal entorno

testing y unstable como en Ubuntu dapper, as´ı como en la mayor´ıa de las Interfaces gr´aficas . . .

distribuciones importantes Otros

Referencias 3.1.2. Instalador gen´erico Agradecimientos y . . .

• Para todas las plataformas existe un instalador gen´erico *

– Esto incluye a GNU/Linux, con un instalador que funciona en toda dis- P´agina www

tribuci´on P´agina de Abertura • Est´amuy bien para cacharrear con Mono: JJ II

– F´acilde instalar (instalador GTK) J I

– Instalaci´on limpia (desinstalaci´on limpia) P´agina 41 de 147 – Viene con la ´ultima versi´onde Mono Regresar – Independiente de dependencias etc. (da lo mismo si usas sid, testing, suse o lo que sea) Full Screen

Cerrar • Por otra parte, tambi´entiene sus desventajas:

Abandonar – Es f´acil para hacer poca cosa. Para hacer que se ejecute como usuario www-data, tienes que configurarlo t´umismo (hacer lo que los mantene- dores de los paquetes ya han hecho por t´ı) Introducci´onal cursillo

– Dificil de mantener: tienes que estar pendiente de actualizaciones Qu´ees Mono

– Las dependencias no lo detectan. Algunos programas exigen otras depen- Introducci´onal entorno

dencias. Interfaces gr´aficas . . . • La configuraci´on de xsp se tratar´am´asadelante Otros Referencias

Agradecimientos y . . .

*

P´agina www

P´agina de Abertura

JJ II

J I

P´agina 42 de 147

Regresar

Full Screen

Cerrar

Abandonar Introducci´onal cursillo

Qu´ees Mono

Introducci´onal entorno

Interfaces gr´aficas . . .

Otros

Referencias

Agradecimientos y . . .

*

P´agina www

P´agina de Abertura

JJ II

J I

P´agina 43 de 147

Regresar

Full Screen

Cerrar

Abandonar Introducci´onal cursillo

Qu´ees Mono

Introducci´onal entorno

Interfaces gr´aficas . . .

Otros

Referencias

Agradecimientos y . . .

*

P´agina www

P´agina de Abertura

JJ II

J I

P´agina 44 de 147

Regresar

Full Screen

Cerrar

Abandonar Introducci´onal cursillo

Qu´ees Mono

Introducci´onal entorno

Interfaces gr´aficas . . .

Otros

Referencias

Agradecimientos y . . .

*

P´agina www

P´agina de Abertura

JJ II

J I

P´agina 45 de 147

Regresar

Full Screen

Cerrar

Abandonar Introducci´onal cursillo

Qu´ees Mono

Introducci´onal entorno

Interfaces gr´aficas . . .

Otros

Referencias

Agradecimientos y . . .

*

P´agina www

P´agina de Abertura

JJ II

J I

P´agina 46 de 147

Regresar

Full Screen

Cerrar

Abandonar Introducci´onal cursillo

Qu´ees Mono

Introducci´onal entorno

Interfaces gr´aficas . . .

Otros

Referencias

Agradecimientos y . . .

*

P´agina www

P´agina de Abertura

JJ II

J I

P´agina 47 de 147

Regresar

Full Screen

Cerrar

Abandonar Introducci´onal cursillo

Qu´ees Mono

Introducci´onal entorno

Interfaces gr´aficas . . .

Otros

Referencias

Agradecimientos y . . .

*

P´agina www

P´agina de Abertura

JJ II

J I

P´agina 48 de 147

Regresar

Full Screen

Cerrar

Abandonar Introducci´onal cursillo

Qu´ees Mono

Introducci´onal entorno

Interfaces gr´aficas . . .

Otros

Referencias

Agradecimientos y . . .

*

P´agina www

P´agina de Abertura

JJ II

J I

P´agina 49 de 147

Regresar

Full Screen

Cerrar

Abandonar 3.1.3. Windows • Est´ael instalador de Mono Introducci´onal cursillo – Viene con Mono, GTK#, el servidor XSP. . . Qu´ees Mono • Hay un instalador para utilizar GTK# desde el VS.NET Introducci´onal entorno Interfaces gr´aficas . . .

3.1.4. Otros Otros • Para probar Mono sin instalarlo, hay una Live on CD llamada Mono Live, que Referencias viene con: Agradecimientos y . . . * – versiones muy recientes de Mono P´agina www – aplicaciones vistosas de Mono P´agina de Abertura ∗ Beagle ∗ F-spot JJ II

∗ Muine J I ∗ MonoDevelop P´agina 50 de 147 ∗ ... Regresar

Full Screen

Cerrar

Abandonar Introducci´on a Mono c 2006 Pablo Ordu˜na. e-ghost y DotNetGroup 3.2. Herramientas b´asicasHerramientas b´asicas

Introducci´onal cursillo 3.2.1. mono Qu´ees Mono

• Programa que ejecuta un ensamblado ejecutable Introducci´onal entorno – Hay dos paquetes que contienen este comando: Interfaces gr´aficas . . . Otros ∗ mono-jit: compilador jit (y aot) Referencias ∗ mono-mint: int´erprete Agradecimientos y . . .

– Nosotros utilizaremos y aqu´ıhablamos del mono-jit *

• Algunas opciones: P´agina www

– --aot: Genera un .so con las funciones compiladas P´agina de Abertura

∗ Unida a -O=all (todas las optimizaciones), puede ser ´utilpara opti- JJ II mizar un programa. J I – -v: Verboso. -v -v -v -v. Muy verboso P´agina 51 de 147 • Variables de entorno: Regresar – MONO PATH: donde busca los ensamblados a importar (.dlls) Full Screen – PKG CONFIG PATH: donde busca los paquetes Cerrar

Abandonar 3.2.2. Diferenciando JIT de AOT • Dado un c´odigo en CIL, ejecutamos: Introducci´onal cursillo mono programa.exe Qu´ees Mono

Introducci´onal entorno • Estar´autilizando el compilador JIT: Interfaces gr´aficas . . .

1. Empieza a ejecutar Otros 2. Llega a una funci´on no compilada Referencias 3. La compila a nativo Agradecimientos y . . . * 4. La ejecuta P´agina www 5. Cada vez que la vuelva a encontrar, la ejecutar´a(sin necesidad de compi- larla) P´agina de Abertura

• Si utilizamos el flag -O=all JJ II

– Cuando llega a una funci´onno compilada, compila la funci´onde una man- J I

era m´as ´optima (tarda m´asen compilarlo) P´agina 52 de 147 – El c´odigo compilado es m´as ´optimo (tarda menos en ejecutarlo) Regresar

• Si utilizamos el flag --aot, estaremos utilizando el compilador AOT: Full Screen

– Compilamos de una pasada todas las funciones, y dejamos el c´odigo gen- Cerrar erado en un fichero .so Abandonar – El fichero es dependiente de la plataforma • Al ejecutar el programa de nuevo: Introducci´onal cursillo – Al llegar a una funci´on, ya estar´acompilada, por lo que se salta el paso Qu´ees Mono de compilar las funciones del JIT Introducci´onal entorno – Sin embargo, no habr´adiferencia respecto al compilador JIT cuando este- Interfaces gr´aficas . . . mos utilizando funciones ya compiladas (funciones que ya se han ejecutado) Otros – Pero, si al hacer el , le pasamos tambi´en , adem´asde evitar --aot -O=all Referencias que las funciones no compiladas se tengan que compilar, el c´odigo ejecu- Agradecimientos y . . . tado est´am´asoptimizado: * ∗ No habr´afase de compilaci´on en tiempo de ejecuci´on P´agina www ∗ El c´odigo ejecutado ser´am´as´optimo

P´agina de Abertura • ”Demostraci´on” de lo que hace el compilador AOT: – C´odigoen interaccionLenguajes/aot/programa.cs JJ II – Compilamos programa.cs: J I

nctrun@ord3p:~/aot$ mcs programa.cs P´agina 53 de 147 nctrun@ord3p:~/aot$ Regresar – Ejecutamos el programa: Full Screen nctrun@ord3p:~/aot$ mono programa.exe 15 Cerrar

nctrun@ord3p:~/aot$ Abandonar – Ejecutamos programa.exe con el flag --aot: nctrun@ord3p:~/aot$ mono --aot programa.exe Mono Ahead of Time compiler - compiling assembly /home/nctrun/aot/programa.exe Introducci´onal cursillo GOT SIZE: 8 Qu´ees Mono Executing the native assembler: as /tmp/mono_aot_e3Ujqu Introducci´onal entorno -o /tmp/mono_aot_e3Ujqu.o Interfaces gr´aficas . . . Executing the native linker: ld -shared -o Otros /home/nctrun/aot/programa.exe.so /tmp/mono_aot_e3Ujqu.o Referencias Compiled 2 out of 2 methods (100%) Agradecimientos y . . .

0 methods contain absolute addresses (0%) * 0 methods contain wrapper references (0%) P´agina www 0 methods contain lmf pointers (0%) 0 methods have other problems (0%) P´agina de Abertura AOT RESULT 0 JJ II – Vemos que tenemos un archivo llamado programa.exe.so J I – Vemos su interior con objdump: P´agina 54 de 147 nctrun@ord3p:~/aot$ objdump -D programa.exe.so|less Regresar

programa.exe.so: formato del fichero elf32-i386 Full Screen

Desensamblado de la secci´on .hash: Cerrar

Abandonar 00000094 <.hash>: 94: 11 00 adc %eax,(%eax) 96: 00 00 add %al,(%eax) 98: 1c 00 sbb $0x0,%al Introducci´onal cursillo 9a: 00 00 add %al,(%eax) Qu´ees Mono (...) Introducci´onal entorno 456: be 05 00 00 00 mov $0x5,%esi Interfaces gr´aficas . . .

45b: 8b de mov %esi,%ebx Otros

45d: 83 c3 0a add $0xa,%ebx Referencias

460: 53 push %ebx Agradecimientos y . . .

(...) * 000015c4 <.got>: 15c4: 54 push %esp P´agina www

15c5: 15 00 00 00 00 adc $0x0,%eax P´agina de Abertura 15ca: 00 00 add %al,(%eax) 15cc: 00 00 add %al,(%eax) JJ II ... J I

– Ejecutamos el programa de nuevo: P´agina 55 de 147 nctrun@ord3p:~/aot$ mono programa.exe Regresar 15 nctrun@ord3p:~/aot$ Full Screen – Suponemos que esta vez el programa ha utilizado el .so. Para evitar Cerrar

suposiciones: Abandonar 1. Abrimos el .so con el biew: nctrun@ord3p:~/aot$ biew programa.exe.so

Introducci´onal cursillo

Qu´ees Mono 2. F2 -> Dissasembler Introducci´onal entorno 3. F5 -> 456 (estaremos viendo las l´ıneasde antes): Interfaces gr´aficas . . . 456: be 05 00 00 00 mov $0x5,%esi Otros 45b: 8b de mov %esi,%ebx Referencias 45d: 83 c3 0a add $0xa,%ebx Agradecimientos y . . . *

P´agina www 4. Dado que est´aen la secci´on .methods, y suma 10 a 5, tiene pinta de P´agina de Abertura ser la suma de nuestro programa. Vamos a cambiar el 5 por 10, por ejemplo: JJ II 5. F4 -> Cambiamos BE 05 00 00 00 por BE 0A 00 00 00. F2. J I 6. Salimos. F10 (o escape un par de veces) P´agina 56 de 147 7. Ejecutamos el programa otra vez: Regresar nctrun@ord3p:~/aot$ mono programa.exe 20 Full Screen

nctrun@ord3p:~/aot$ Cerrar

Abandonar 8. Desensamblamos el CIL:

nctrun@ord3p:~/aot$ monodis programa.exe|less Introducci´onal cursillo (...) Qu´ees Mono IL_0000: ldc.i4.5 Introducci´onal entorno IL_0001: stloc.0 Interfaces gr´aficas . . . IL_0002: ldloc.0 Otros IL_0003: ldc.i4.s 0x0a Referencias IL_0005: add Agradecimientos y . . . (...) *

P´agina www

P´agina de Abertura 9. Como vemos, no est´ahaciendo caso al CIL (que dice que cojamos 5 y le sumemos 10) porque ha encontrado que el m´etodo ya est´acompilado JJ II (y dice una cosa diferente, que cojamos 10 y le sumemos 10), y por J I tanto ni compila el c´odigo CIL P´agina 57 de 147 – Sin embargo, como hemos dicho, una vez se ha ejecutado el m´etodo, si se le llaman varias veces, no va a haber diferencia entre AOT y JIT, salvo que Regresar al generar el hayamos utilizado optimizaciones. .so Full Screen – Generamos el .so otra vez, con optimizaciones: Cerrar nctrun@ord3p:~/aot$ mono -O=all --aot programa.exe Abandonar – Suponemos que el c´odigo generado es m´as ´optimo que el anterior. Para evitar suposiciones:

1. Volvemos a ver el c´odigo del .so: Introducci´onal cursillo

Qu´ees Mono nctrun@ord3p:~/aot$ objdump -D programa.exe.so Introducci´onal entorno (...) 450: 6a 0f push $0xf Interfaces gr´aficas . . . (...) Otros Referencias 2. Como vemos, aproximadamente por la misma zona, aparece un 0xf, Agradecimientos y . . . que es la suma de 10 + 5, por lo que se ahorra la suma en tiempo de ejecuci´on. * 3. Para comprobar que realmente es lo que parece, podemos volver a P´agina www

modificar el .so P´agina de Abertura 4. Al igual que antes, una vez ejecutado un m´etodo, las siguientes veces no habr´adiferencia respecto a ejecutar con: JJ II mono -O=all programa.exe J I

P´agina 58 de 147

Regresar

Full Screen

Cerrar

Abandonar 3.2.3. Compiladores • Mono viene con compilador de C# y VB.NET Introducci´onal cursillo – mcs es el compilador de C# Qu´ees Mono

– mbas es el compilador de VB.NET Introducci´onal entorno • Algunas opciones a destacar de estos compiladores son: Interfaces gr´aficas . . . Otros

– - para importar un ensamblado (.dlls) Referencias

– -pkg para utilizar un paquete Agradecimientos y . . . • Adem´as,hay compiladores de otros lenguajes * P´agina www – ikvmc para Java (comentado m´as adelante) P´agina de Abertura – booc para Boo (comentado m´as adelante) • Y para obtener el c´odigo en CIL de un ensamblado: JJ II J I – monodis P´agina 59 de 147

Regresar

Full Screen

Cerrar

Abandonar 3.2.4. Documentaci´on • monodoc Introducci´onal cursillo – herramienta para editar y explorar documentaci´on Qu´ees Mono

– Dado un ejecutable, permite editar y a˜nadir su documentaci´on,adem´as Introducci´onal entorno

de verla Interfaces gr´aficas . . . • monop Otros Referencias

– Permite obtener informaci´on acerca de ensamblados o de las librer´ıasin- Agradecimientos y . . . staladas * nctrun@ord3p:~$ monop System.Byte [Serializable] P´agina www

public struct Byte : IComparable, IConvertible, P´agina de Abertura IFormattable { JJ II

public static byte Parse (string s, J I IFormatProvider provider); P´agina 60 de 147 (...) public const byte MinValue = 0; Regresar

public const byte MaxValue = 255; Full Screen } Cerrar

Abandonar 3.2.5. gacutil • Herramienta para manipular el GAC (Global Assembly Cache) Introducci´onal cursillo

nctrun@ord3p:~$ gacutil -l|grep gecko Qu´ees Mono

gecko-sharp, Version=1.0.0.0, Culture=neutral, Introducci´onal entorno

PublicKeyToken=ccf7d78a55e9f021 Interfaces gr´aficas . . . gecko-sharp, Version=2.0.0.0, Culture=neutral, Otros PublicKeyToken=ccf7d78a55e9f021 Referencias

Agradecimientos y . . . • Opciones de gacutil *

P´agina www

P´agina de Abertura

JJ II

J I

P´agina 61 de 147

Regresar

Full Screen

Cerrar

Abandonar 3.2.6. Entorno de Desarrollo Integrado • Para Windows, est´ael SharpDevelop Introducci´onal cursillo – es GNU GPL Qu´ees Mono

– para funcionar necesita Microsoft .NET Introducci´onal entorno

∗ pero puedes compilar, ejecutar y dem´as con Mono Interfaces gr´aficas . . .

Otros • Bajo GNU/Linux, el IDE de Mono m´aspopular es el MonoDevelop Referencias

– Escrito en Mono, es un port del SharpDevelop Agradecimientos y . . . – En estos momentos no funciona en Windows (s´ıcomo m´ınimoen GNU/Linux *

y Mac OS X) P´agina www

• Tambi´enhay un plugin para Eclipse P´agina de Abertura

• Y por supuesto est´a vim, Emacs, XEmacs, kate... JJ II

J I

P´agina 62 de 147

Regresar

Full Screen

Cerrar

Abandonar Introducci´on a Mono c 2006 Pablo Ordu˜na. e-ghost y DotNetGroup 3.3. Interacci´on entreInteracci´onentre lenguajes lenguajes

3.3.1. C# Introducci´onal cursillo Qu´ees Mono

• Compilando y ejecutando el ”holamundo”: Introducci´onal entorno nctrun@ord3p:~/holamundo$ mcs holamundo.cs Interfaces gr´aficas . . . holamundo.cs(26) warning CS0219: The variable ’dato3’ is Otros assigned but its value is never used Referencias Compilation succeeded - 1 warning(s) Agradecimientos y . . . nctrun@ord3p:~/holamundo$ mono holamundo.exe *

Hola mundo P´agina www nctrun@ord3p:~/holamundo$ P´agina de Abertura

• Viendo el c´odigo en CIL: JJ II

nctrun@ord3p:~/holamundo$ monodis holamundo.exe J I .assembly extern mscorlib P´agina 63 de 147 { .ver 1:0:5000:0 Regresar

.publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4.. Full Screen } .assembly ’holamundo’ Cerrar

{ Abandonar .hash algorithm 0x00008004 .ver 0:0:0:0 } .module holamundo.exe // GUID = Introducci´onal cursillo {1220A931-5542-4364-8B81-293C8D4C5584} Qu´ees Mono Introducci´onal entorno

Interfaces gr´aficas . . . (...) Otros Referencias

IL_0000: ldstr "Hola mundo" Agradecimientos y . . .

IL_0005: call void class * [mscorlib]System.Console::WriteLine(string) P´agina www IL_000a: ldsfld int32 Principal::dato2 IL_000f: ldc.i4.5 P´agina de Abertura IL_0010: add JJ II IL_0011: stloc.0 IL_0012: ret J I

} // end of method Principal::default void Main (string[] P´agina 64 de 147 args) Regresar

} // end of class Principal Full Screen

• Creando un .dll: Cerrar

Abandonar nctrun@ord3p:~/librerias$ mcs -t:library holamundo.cs holamundo.cs(26) warning CS0219: The variable ’dato3’ is assigned but its value is never used Introducci´onal cursillo Compilation succeeded - 1 warning(s) Qu´ees Mono nctrun@ord3p:~/librerias$ Introducci´onal entorno Interfaces gr´aficas . . . • Utilizando el .dll: Otros Referencias

nctrun@ord3p:~/utilizando$ mcs DesdeCS.cs -r:holamundo.dll Agradecimientos y . . . nctrun@ord3p:~/utilizando$ mono DesdeCS.exe * 8 5 P´agina www

• Utilizando paquetes: P´agina de Abertura

nctrun@ord3p:~/utilizando$ mcs UtilizandoPaquetes.cs JJ II -pkg:gtk-sharp J I nctrun@ord3p:~/utilizando$ mono UtilizandoPaquetes.exe nctrun@ord3p:~/utilizando$ P´agina 65 de 147

Regresar

Full Screen

Cerrar

Abandonar 3.3.2. Java • Para utilizar Java desde Mono hay una herramienta llamada IKVM Introducci´onal cursillo • IKVM permite: Qu´ees Mono – utilizar desde Mono bytecode de Java Introducci´onal entorno – utilizar ensamblados de Mono desde Java (ejecutado bajo Mono con IKVM) Interfaces gr´aficas . . . Otros

• De la API de Java utiliza la implementaci´on del proyecto GNU Classpath Referencias • Es ´utilpara utilizar librer´ıas o incluso aplicaciones de Java: Agradecimientos y . . . * – Jython P´agina www – Incluso Eclipse ha sido ejecutado sobre Mono a trav´esde IKVM: P´agina de Abertura

JJ II

J I

P´agina 66 de 147

Regresar

Full Screen

Cerrar

Abandonar Introducci´onal cursillo

Qu´ees Mono

Introducci´onal entorno

Interfaces gr´aficas . . .

Otros

Referencias

Agradecimientos y . . .

*

P´agina www

P´agina de Abertura

JJ II

J I

P´agina 67 de 147

Regresar

Web original de la imagen Full Screen

Cerrar

Abandonar • Utilizando Java desde Mono con IKVM: – Creando una librer´ıaen Java: nctrun@ord3p:~/ikvm$ javac MiClase.java Introducci´onal cursillo nctrun@ord3p:~/ikvm$ ikvmc -out:MiClase.dll MiClase.class Note: Qu´ees Mono automatically adding reference to Introducci´onal entorno "/home/nctrun/usr/local/lib/ikvm/IKVM.GNU.Classpath.dll" Interfaces gr´aficas . . . Otros

– Utilizando la librer´ıadesde C#: Referencias

nctrun@ord3p:~/ikvm$ export Agradecimientos y . . .

MONO_PATH=$MONO_PATH:/home/nctrun/usr/local/lib/ikvm/ * nctrun@ord3p:~/ikvm$ mcs DesdeCS.cs -r:MiClase.dll P´agina www nctrun@ord3p:~/ikvm$ mono DesdeCS.exe hola mundo P´agina de Abertura llamando al m´etodo JJ II nctrun@ord3p:~/ikvm$ J I • Utilizando Mono desde Java sobre Mono con IKVM: P´agina 68 de 147 – Creamos unos .jar para hacerlos accesibles desde Java: Regresar nctrun@ord3p:~/ikvm$ ikvmstub /home/nctrun/usr/local/lib/mono/gtk-sharp/gtk-sharp.dll Full Screen

Warning: Assembly loaded from Cerrar /home/nctrun/usr/local/lib/mono/gac/gtk-sharp/1.0.0.0__ Abandonar 35e10195dab3c99f/gtk-sharp.dll instead nctrun@ord3p:~/interaccionLenguajes/ikvm$ ikvmstub /home/nctrun/usr/local/lib/mono/1.0/mscorlib.dll Warning: Assembly loaded from Introducci´onal cursillo /home/nctrun/usr/local/lib/mono/1.0/mscorlib.dll Qu´ees Mono instead Introducci´onal entorno nctrun@ord3p:~/interaccionLenguajes/ikvm$ ikvmstub Interfaces gr´aficas . . . /home/nctrun/usr/local/lib/mono/gtk-sharp/atk-sharp.dll Otros Warning: Assembly loaded from Referencias /home/nctrun/usr/local/lib/mono/gac/atk-sharp/1.0.0.0__ Agradecimientos y . . .

35e10195dab3c99f/atk-sharp.dll instead * nctrun@ord3p:~/interaccionLenguajes/ikvm$ ikvmstub P´agina www /home/nctrun/usr/local/lib/mono/gtk-sharp/ glib-sharp.dll P´agina de Abertura Warning: Assembly loaded from JJ II /home/nctrun/usr/local/lib/mono/gac/glib-sharp/1.0.0.0__ 35e10195dab3c99f/glib-sharp.dll instead J I – Estos .jar s´oloson ejecutables desde IKVM. No sirven para utilizar Mono P´agina 69 de 147

desde Java. Regresar ∗ Para ello existe otro proyecto llamado Grasshoper, desarrollado por Full Screen Mainsoft – Una vez tenemos los .jar, s´ıpodemos compilar un programa en Java, tal Cerrar

que: Abandonar nctrun@ord3p:~/ikvm$ javac -classpath .:mscorlib.jar:gtk-sharp.jar:glib-sharp.jar: atk-sharp.jar Demo.java nctrun@ord3p:~/ikvm$ Introducci´onal cursillo Qu´ees Mono

– Y ejecutamos desde IKVM el programa en Java: Introducci´onal entorno

nctrun@ord3p:~/ikvm$ ikvm -cp glib-sharp.jar: Interfaces gr´aficas . . . gtk-sharp.jar:atk-sharp.jar:mscorlib.jar:. Demo Otros

nctrun@ord3p:~/interaccionLenguajes/ikvm$ Referencias – O bien lo compilamos a CLI para ejecutarlo con Mono dir´ectamente: Agradecimientos y . . . * nctrun@ord3p:~/interaccionLenguajes/ikvm$ ikvmc -out:Demo.exe Demo.class gtk-sharp.jar P´agina www

Note: found main method in class "Demo" P´agina de Abertura Note: automatically adding reference to "/home/nctrun/usr/local/lib/ikvm/IKVM.GNU.Classpath.dll" JJ II

nctrun@ord3p:~/interaccionLenguajes/ikvm$ mono Demo.exe J I nctrun@ord3p:~/interaccionLenguajes/ikvm$ P´agina 70 de 147

• Interoperabilidad Regresar

– Java no tiene ni delegados, ni atributos, ni propiedades, ni paso de par´ametros Full Screen por referencia, ni otras caracter´ısticasdel CIL Cerrar – Para utilizar estas caracter´ısticas, hay que utilizar ciertas ”formas”: Abandonar ∗ Para utilizar propiedades, un c´odigo como: public int Dato{ get{ return dato; Introducci´onal cursillo } Qu´ees Mono } Introducci´onal entorno ser´ıainvocado tal que: Interfaces gr´aficas . . . int dato = instancia.get_Dato(); Otros ∗ Para llamar a un delegado como: Referencias public delegate void EventHandler (object sender, EventArgs e); Agradecimientos y . . . ser´ıautilizado tal que: *

class A implements cli.System.EventHandler.Method{ P´agina www public void Invoke (Object sender, cli.System.EventArgs e) { P´agina de Abertura

System.out.println("hola"); JJ II } } J I

P´agina 71 de 147

Regresar

Full Screen

Cerrar

Abandonar 3.3.3. IronPython • IronPython es una implementaci´onde Python para .NET Introducci´onal cursillo • escrito por Jim Hugunin Qu´ees Mono – desarrollador de Jython y otros proyectos Introducci´onal entorno – trabaja en Microsoft desde Agosto 2004 (poco despu´esde publicar Iron- Interfaces gr´aficas . . . Python 0.6) Otros Referencias

• Licencias: Agradecimientos y . . . – Hasta la versi´on 0.6, el proyecto estaba publicado bajo la licencia Common *

Public License 1.0, que cumple los requisitos para ser Open Source. P´agina www – Sin embargo, las versiones posteriores (0.7.x), est´analojadas en got dot P´agina de Abertura net, bajo la licencia Shared Source for IronPython JJ II • La implementaci´onm´asmadura de Python sobre Mono y .NET J I – Las versiones 0.7.x exigen .NET 2.0 P´agina 72 de 147 – Por tanto exigen versiones beta tanto de .NET como de Mono Regresar • Por el momento s´olo sirve para acceder a CIL desde Python, no al rev´es Full Screen

Cerrar

Abandonar 3.3.4. Limitaciones • Realmente los lenguajes que m´asf´acilmente se integran bien en .NET son aquellos que son realmente una abstracci´ondel CIL, como C# o VB.NET Introducci´onal cursillo Qu´ees Mono • As´ımismo,las partes de otros lenguajes que sean subconjunto del CIL, tambi´en Introducci´onal entorno se pueden usar con facilidad Interfaces gr´aficas . . .

• Sin embargo: Otros – La inversa (utilizar desde un lenguaje que es casi en su totalidad un sub- Referencias conjunto del CIL algo escrito en CIL) es m´asdificil, y hay que utilizar una Agradecimientos y . . . serie de work arounds que pueden hacer inc´omodo el uso de ese lenguaje * – Si es inc´omodo utilizar librer´ıas del CIL desde esos lenguajes, no tiene P´agina www

sentido hacer componentes en esos lenguajes (s´olocuando los lenguajes P´agina de Abertura permitan acceder a APIs hechas en el propio lenguaje) JJ II • De la misma forma, las caracter´ısticasde otros lenguajes que no est´enen el CIL ser´andif´ıciles de acceder: inc´omodo utilizar componentes en otros lenguajes J I

P´agina 73 de 147

Regresar

Full Screen

Cerrar

Abandonar 3.3.5. Boo • Boo es una adaptaci´onde Python a .NET: Introducci´onal cursillo – Inspirado en Python Qu´ees Mono

– Pero tiene tipado est´atico, delegados, propiedades. . . Introducci´onal entorno • Ejemplo de c´odigo: Interfaces gr´aficas . . . Otros

import System Referencias

import Gtk from "gtk-sharp" Agradecimientos y . . .

* Application.Init() P´agina www

window = Window("Button Tester", P´agina de Abertura DefaultWidth: 200, DefaultHeight: 150, JJ II DeleteEvent: Application.Quit) J I

P´agina 74 de 147 window.Add(Button("Click Me!", Clicked: { print("button clicked!") })) Regresar

window.ShowAll() Full Screen

Application.Run() Cerrar

Abandonar • Ultimamente´ ha crecido en popularidad en la comunidad de Mono, especial- mente desde que IronPython no es Open Source.

Introducci´onal cursillo

Qu´ees Mono

Introducci´onal entorno

Interfaces gr´aficas . . .

Otros

Referencias

Agradecimientos y . . .

*

P´agina www

P´agina de Abertura

JJ II

J I

P´agina 75 de 147

Regresar

Full Screen

Cerrar

Abandonar 3.3.6. Utilizando c´odigo nativo • Para acceder a c´odigo nativo de la plataforma se utiliza P/Invoke de la sigu- iente manera: Introducci´onal cursillo Qu´ees Mono [DllImport("libreria")] Introducci´onal entorno tipo_acceso extern static tipo_retorno nombre_funcion(parametros); Interfaces gr´aficas . . . – Por ejemplo, podemos ver algo de c´odigo del binding para OpenGL de Otros Mono aqu´ı: Referencias Agradecimientos y . . . [DllImport("glut")] static extern void glutInitWindowPosition(int x, int y); * public static void InitWindowPosition(int x, int y) P´agina www { P´agina de Abertura glutInitWindowPosition(x, y); } JJ II

J I [DllImport("glut")] static extern void glutInitWindowSize(int width, int height); P´agina 76 de 147

public static void InitWindowSize(int width, int height) Regresar { glutInitWindowSize(width, height); Full Screen

} Cerrar

Abandonar [DllImport("glut")] static extern void glutMainLoop(); public static void MainLoop() { Introducci´onal cursillo glutMainLoop(); Qu´ees Mono } Introducci´onal entorno Interfaces gr´aficas . . . – (Concretamente el binding de OpenGL ha sido generado por glgen) Otros • DotGNU tiene adem´asun compilador de C a CIL Referencias Agradecimientos y . . .

• Ejemplos *

– Simple en /interaccionLenguajes/accesoNativo/ P´agina www

– Utilizando OpenGL en /interaccionLenguajes/accesoNativo/ogl/. El c´odigo P´agina de Abertura es un ejemplo del cursillo de Bardok de OpenGL, de aqu´ı JJ II

J I

P´agina 77 de 147

Regresar

Full Screen

Cerrar

Abandonar Introducci´onal cursillo

Qu´ees Mono

Introducci´onal entorno

Interfaces gr´aficas . . .

Otros

Referencias

Agradecimientos y . . .

*

P´agina www

P´agina de Abertura

JJ II

– Utilizando Mono.Posix para acceder a estructuras de m´asbajo nivel, en J I /interaccionLenguajes/accesoNativo/eso/ P´agina 78 de 147

Regresar

Full Screen

Cerrar

Abandonar Introducci´on a Mono c 2006 Pablo Ordu˜na. e-ghost y DotNetGroup 4. Interfaces gr´aficasIntroducci´ona con Mono Mono

Introducci´onal cursillo

Qu´ees Mono

Introducci´onal entorno

Interfaces gr´aficas . . .

Otros

Referencias

Agradecimientos y . . .

Interfaces gr´aficas con Mono *

P´agina www

P´agina de Abertura

JJ II

J I

P´agina 79 de 147

Regresar

Full Screen

Cerrar

Abandonar Introducci´on a Mono c 2006 Pablo Ordu˜na. e-ghost y DotNetGroup 4.1.Introducci´onaIntroducci´ona la la programaci´onde programaci´on de interfaces interfaces gr´aficascon gr´aficas Mono con Mono

Introducci´onal cursillo

Qu´ees Mono 4.1.1. Introducci´on Introducci´onal entorno

• Mono puede utilizar varias librer´ıas de widgets: Interfaces gr´aficas . . . – GTK#. Es la m´asutilizada y la ´unicaque se cubrir´aen el cursillo. Es la Otros ´unicaque el Proyecto Mono mantiene de manera directa Referencias Agradecimientos y . . . – wx.NET * – Windows Forms P´agina www – Cocoa# – QT# P´agina de Abertura – Sharp WT JJ II

J I

P´agina 80 de 147

Regresar

Full Screen

Cerrar

Abandonar 4.1.2. wx.NET • wx.NET es un wrapper para la CLI de wxWidgets Introducci´onal cursillo – wxWidgets es una librer´ıade widgets cuya finalidad es proveer un API Qu´ees Mono sencillo para crear GUIs en m´ultiples plataformas, utilizando el UI nativo Introducci´onal entorno de cada plataforma: Interfaces gr´aficas . . .

∗ Utiliza librer´ıas nativas en cada plataforma (ya sea Windows, GTK Otros para GNU/Linux, etc. etc. . . . ) Referencias

– Se puede ver en los screenshots. Agradecimientos y . . .

*

P´agina www

P´agina de Abertura

JJ II

J I

P´agina 81 de 147

Regresar

Full Screen

Cerrar

Abandonar 4.1.3. Windows Forms • Windows Forms es la librer´ıade Widgets que viene por defecto en Microsoft .NET Introducci´onal cursillo Qu´ees Mono • Su especificaci´onno est´arecogida como est´andar en el ECMA o ISO Introducci´onal entorno

• A pesar de ello, est´asiendo implementada para Mono (Aqu´ı est´asu estado Interfaces gr´aficas . . . actual) Otros • Mono est´atardando m´asen implementar Windows Forms que DotGNU: Referencias Agradecimientos y . . .

1. Se intent´outilizando implementar Windows Forms encima de Gtk *

2. Se intent´om´as tarde implementarlo encima de Wine P´agina www 3. Finalmente, se est´adesarrollando trabajando encima de la implementaci´on P´agina de Abertura de System.Drawing, la cual – en Windows utiliza GDI+ JJ II – en otros sistemas utiliza la implementaci´onde Mono de gdiplus, que J I

est´aimplementada sobre Cairo P´agina 82 de 147

Regresar

Full Screen

Cerrar

Abandonar Introducci´onal cursillo

Qu´ees Mono

Introducci´onal entorno

Interfaces gr´aficas . . .

Otros

Referencias

Agradecimientos y . . .

*

P´agina www

P´agina de Abertura

JJ II

J I

C´odigoen /interfacesGraficas/winforms/Samples P´agina 83 de 147 C´odigo sacado del svn de Mono Regresar

Full Screen

Cerrar

Abandonar Introducci´on a Mono c 2006 Pablo Ordu˜na. e-ghost y DotNetGroup 4.2. La familia GTK# La familia GTK#

Introducci´onal cursillo 4.2.1. Introducci´on Qu´ees Mono

• GTK# es el binding para Mono de las populares GTK+ (Gimp Tool Kit) Introducci´onal entorno – Con diferencia la librer´ıade widgets m´as usada en Mono Interfaces gr´aficas . . . Otros

• Intimamente ligada al proyecto Gnome Referencias • En el svn de gtk-sharp tenemos disponible GtkDemo, en el que vemos Agradecimientos y . . . * – ejemplos interesantes de uso de Gtk# P´agina www – tanto el c´odigopara ver c´omose hace como el propio widget en fun- cionamiento P´agina de Abertura

JJ II

J I

P´agina 84 de 147

Regresar

Full Screen

Cerrar

Abandonar Introducci´onal cursillo

Qu´ees Mono

Introducci´onal entorno

Interfaces gr´aficas . . .

Otros

Referencias

Agradecimientos y . . .

*

P´agina www

P´agina de Abertura

JJ II

J I

P´agina 85 de 147

Regresar

Full Screen GtkDemo en acci´on Cerrar

Abandonar 4.2.2. Comenzando con GTK#: el bucle de eventos • Antes de instanciar nada de GTK# debemos llamar a: Introducci´onal cursillo

Application.Init() Qu´ees Mono

Introducci´onal entorno • Despu´esiniciaremos lo que necesitemos (iniciar el GUI) Interfaces gr´aficas . . .

• Una vez iniciado todo, para pasar a visualizarlo, llamaremos a: Otros

Referencias Application.Run() Agradecimientos y . . .

• En ese momento Gtk pasar´aa procesar todo *

P´agina www – No continuar´ala ejecuci´ondespu´es de esa funci´on – Cada vez que Gtk reciba un evento, llamar´aal callback correspondiente P´agina de Abertura ∗ Mientras est´aprocesando el callback de un evento JJ II

· no puede procesar otro evento J I · no se redibujan los widgets, etc P´agina 86 de 147

• Este proceso finalizar´acuando se llame a: Regresar

Application.Quit() Full Screen

• Ejemplo: interfacesGraficas/gtk/eventloop/holamundo.cs Cerrar

Abandonar 4.2.3. Nuestra primera ventana • Primero creamos una ventana (Gtk.Window): Introducci´onal cursillo

Window w = new Window("titulo"); Qu´ees Mono

Introducci´onal entorno • La clase Window tiene una serie de m´etodos para modificar su relaci´on con el Window Manager, como por ejemplo: Interfaces gr´aficas . . . Otros

– void Fullscreen(): Hace que la ventana ocupe la pantalla completa Referencias – void Maximize(): Maximiza la ventana Agradecimientos y . . . – void Iconify(): Minimiza la ventana * – void Deiconify(): Vuelve a mostrarse la ventana P´agina www • Una vez tenemos la ventana, podemos a˜nadir diferentes Widgets, como por P´agina de Abertura ejemplo Labels, Buttons. . . JJ II

• Los strings en Gtk son especiales J I

– En labels, se puede utilizar ”HTML”(hola) P´agina 87 de 147

∗ Para ello, hay que tener la propiedad UseMarkup a true Regresar ∗ Realmente, no es HTML, sino el Pango Text Markup Language. M´as informaci´on aqu´ı Full Screen – En men´us, un por delante significa que es la letra identificadora (ALT + Cerrar

letra) Abandonar – etc. • Ejemplo: interfacesGraficas/gtk/simple/simple.cs Introducci´onal cursillo

Qu´ees Mono

Introducci´onal entorno

Interfaces gr´aficas . . .

Otros

Referencias

Agradecimientos y . . .

*

P´agina www

P´agina de Abertura

JJ II

J I

P´agina 88 de 147

Regresar

Full Screen

Cerrar

Abandonar 4.2.4. A˜nadiendo widgets manualmente • Para colocar los widgets en una ventana, con GTK# normalmente utilizas boxes. Introducci´onal cursillo Qu´ees Mono – Esto es, divides las diferentes ´areas de la pantalla en nuevas ´areas verticales u horizontales, las cuales a su vez puedes ir dividiendo nuevamente Introducci´onal entorno Interfaces gr´aficas . . . – Esto lo unimos a una serie de propiedades que ajustamos seg´unnos interese Otros

• Las boxes horizontales son Gtk.HBox, y las verticales Gtk.VBox: Referencias VBox vb = new VBox(); Agradecimientos y . . . vb.Add(w1); *

vb.Add(w2); P´agina www vb.Add(w3); //... P´agina de Abertura

algo.Add(vb); JJ II

dentro del contenedor algo, ponemos el Gtk.Widget w1 arriba, justo debajo J I el w2 y justo debajo el w3. P´agina 89 de 147

Regresar • Para poner cosas en un punto fijo de un contenedor, se utiliza Gtk.Layout Full Screen – El efecto al redimensionar es bastante m´as feo Cerrar • Ejemplo: interfacesGraficas/gtk/boxes/boxes.cs Abandonar 4.2.5. Glade# • Programar lo anterior est´abien para cosas din´amicas y para aprender y en- tender c´omofunciona GTK#, pero puede Introducci´onal cursillo Qu´ees Mono – Cansar Introducci´onal entorno

– Resultar ser dificil Interfaces gr´aficas . . .

– A˜nadirc´odigo innecesario al programa Otros • Para evitarlo est´a Glade Referencias Agradecimientos y . . .

– Es una herramienta interactiva para dise˜node GUIs con GTK+ y Gnome *

– Guarda en un .glade (XML) el dise˜nodel interfaz gr´afico del programa P´agina www – Din´amicamente cargar´ael .glade y generar´alos widgets P´agina de Abertura – Si queremos acceder a un widget concreto, deberemos declarar la variable con el mismo nombre, unida al atributo [Widget] JJ II – Adem´as,permite manejar se˜nales,de manera que podemos asignar a qu´e J I

funciones se llamar´apara capturar qu´ese˜nal P´agina 90 de 147

• Ejemplo: interfacesGraficas/gtk/glade/usandoGlade.cs Regresar

Full Screen

Cerrar

Abandonar 4.2.6. Mostrando im´agenes • La manera m´assimple es utilizar un Image: Introducci´onal cursillo

Window w = new Window("titulo"); Qu´ees Mono

Image img = new Image("ghost.jpg"); Introducci´onal entorno w.Add(img); Interfaces gr´aficas . . .

Otros • Pero podemos tambi´enutilizar GDK# para ello, accediendo a una API con Referencias muchas m´as funciones Agradecimientos y . . .

Window w = new Window("titulo"); * //accediendo a un fichero P´agina www Image img = new Image(Gdk.Pixbuf("ghost.jpg")); w.Add(img); P´agina de Abertura

JJ II • Por ejemplo, para incluirlo en el mismo .exe: J I

Window w = new Window("titulo"); P´agina 91 de 147 //accediendo a un recurso (-res:ghost.jpg) Image img = new Image(Gdk.Pixbuf(null,"ghost.jpg")); Regresar

w.Add(img); Full Screen

• Ejemplos: interfacesGraficas/gtk/imagenes/imagenes1.cs y imagenes2.cs Cerrar

Abandonar 4.2.7. Sacando m´asprovecho a Gdk# • GDK es el Graphics Development Kit, que nos permitir´allevar a cabo muchas m´ascosas Introducci´onal cursillo Qu´ees Mono – S´olohay que echar un vistazo en monodoc al espacio de nombres Gdk para Introducci´onal entorno ver la cantidad de posibilidades que nos da Interfaces gr´aficas . . .

• Creando un ´area para dibujar: Otros

Referencias Window w new Window("titulo"); Agradecimientos y . . . DrawingArea d = new DrawingArea); * d.SetSizeRequest(150,150); w.Add(d); P´agina www

P´agina de Abertura • DrawingArea tiene varios eventos heredados de Gtk.Widget, como: JJ II – ConfigureEvent: es llamado cuando se modifica el tama˜nodel Widget – ExposeEvent: es llamado cuando se tiene que redibujar al menos alguna J I parte del widget P´agina 92 de 147

• Ejemplo: interfacesGraficas/gtk/imagenes/imagenes3.cs Regresar • Ejercicio: implementar interfacesGraficas/gtk/imagenes/imagenes4.exe Full Screen • Mucha m´as informaci´onen las apis 1 y 2 y la wikipedia, adem´as de en Monodoc Cerrar

Abandonar 4.2.8. TreeViews • Un widget muy usado es el TreeView Introducci´onal cursillo – Permite mostrar listas de datos Qu´ees Mono

– Permite adem´asmostrar ´arboles Introducci´onal entorno • El TreeView s´olose encarga de lo que es el widget que se ve, no del contenido Interfaces gr´aficas . . . del mismo Otros Referencias

• Para el contenido, debe utilizar un TreeModal, como ListStore (para listas) Agradecimientos y . . . o TreeStore (para ´arboles) *

• Ejemplo ListStore: interfacesGraficas/gtk/listas/lista.cs P´agina www

• Ejemplo TreeStore: interfacesGraficas/gtk/arboles/arbol.cs P´agina de Abertura

JJ II

J I

P´agina 93 de 147

Regresar

Full Screen

Cerrar

Abandonar 4.2.9. Manteni´endonuestra aplicaci´onGtk thread-safe • Mientras se ejecuta el c´odigo de respuesta a un evento, el resto de la aplicaci´on queda bloqueada, sin redibujarse Introducci´onal cursillo Qu´ees Mono • Para evitar este efecto, hay que utilizar hilos: Introducci´onal entorno

1. Un evento exige una respuesta Interfaces gr´aficas . . . 2. Si la respuesta puede ser larga, se lanza en otro hilo Otros 3. Desde el otro hilo se va actualizando del interfaz de usuario Referencias Agradecimientos y . . .

• El problema es que GTK#, al igual que Windows Forms (incluso en la imple- * mentaci´onde Microsoft .NET), no es thread-safe: P´agina www – Si desde otro hilo se modifica el interfaz, el programa puede cascar P´agina de Abertura • Para ello hay que utilizar una clase llamada ThreadNotify, tal que: JJ II

ThreadNotify tn = new ThreadNotify(new Gtk.ReadyEvent(metodo)); J I Timer tm = new Timer(new P´agina 94 de 147 TimerCallback(metodo2),null,1000,System.Threading.Timeout.Infinite); Regresar

... Full Screen

void metodo2(object o){ Cerrar

tn.WakeupMain(); //hey, GTK#, cuando toque, haz "eso" Abandonar }

void metodo(){ web.LoadUrl("http://www.msc.deusto.es"); //"eso" es esto Introducci´onal cursillo } Qu´ees Mono Introducci´onal entorno

• Ejemplo: interfacesGraficas/gtk/hilos/hilos.cs Interfaces gr´aficas . . . • Ejemplo de problemas si eliminamos las medidas de protecci´on: interfaces- Otros Graficas/gtk/hilos/mal.cs Referencias Agradecimientos y . . .

*

P´agina www

P´agina de Abertura

JJ II

J I

P´agina 95 de 147

Regresar

Full Screen

Cerrar

Abandonar 4.2.10. Drag and Drop • Drag and drop es una t´ecnica de incrementar sustancialmente la usabilidad de un programa y su comunicaci´oncon el resto del entorno, de manera sencilla Introducci´onal cursillo Qu´ees Mono • Para utilizarlo desde Mono basta con declarar en un widget qu´e TargetEntrys Introducci´onal entorno puede recibir y qu´e TargetEntrys puede enviar Interfaces gr´aficas . . .

– Un Gtk.TargetEntry define un tipo de dato declar´andosetal que: Otros TargetEntry te = new TargetEntry("text/uri-list",0,0); Referencias Agradecimientos y . . . – En lugar de text/uri-list, podemos enviar y recibir otros muchos tipos * de datos, nuestros incluso P´agina www • Una vez declarado un array de TargetEntrys, se debe declarar el Widget que los puede recibir/enviar, llamando al m´etodo: P´agina de Abertura

//para recibir. Para enviar Gtk.Drag.SourceSet JJ II Gtk.Drag.DestSet(widget,DestDefaults.All,targets, J I

Gdk.DragAction.Copy); P´agina 96 de 147

• Por ´ultimo,para poder realizar una acci´oncuando esto ocurre, hay que definir Regresar

qu´ese debe ejecutar cuando ocurre los siguientes eventos: Full Screen

– Cuando se recibe algo: Cerrar ∗ DragDataReceived Abandonar – Cuando se env´ıaalgo: ∗ DragDataGet

∗ DragBegin Introducci´onal cursillo

Qu´ees Mono • Ejemplo: interfacesGraficas/gtk/dnd/dnd.cs Introducci´onal entorno

Interfaces gr´aficas . . .

Otros

Referencias

Agradecimientos y . . .

*

P´agina www

P´agina de Abertura

JJ II

J I

P´agina 97 de 147

Regresar

Full Screen

Cerrar

Abandonar 4.2.11. Stetic • Stetic es un nuevo dise˜nador de GUIs con GTK Introducci´onal cursillo – Integrado en MonoDevelop, con Mono en mente Qu´ees Mono

∗ El editor de GUI genera un xml (con extensi´on .stetic) Introducci´onal entorno

∗ A la hora de construir el proyecto, se generar´aun .cs que construye Interfaces gr´aficas . . .

el .cs Otros

∗ Genera todo, por lo que no aporta dependencias Referencias

· Funciona donde gtk-sharp funcione Agradecimientos y . . . · La ´unicadependencia es, en caso de que queramos modificar el *

interfaz, la propia herramienta P´agina www ∗ No podremos reutilizarlo fuera de Mono P´agina de Abertura – Trae mejoras respecto a glade 2: ∗ Herramienta en una ´unica ventana que es la de MonoDevelop JJ II ∗ Alta integraci´on en MonoDevelop: J I

· A˜nadoun campo, se a˜nadeel tipo de dato Gtk# en mi c´odigo P´agina 98 de 147 · A˜nadoun evento, se a˜nade el handler correcto en mi c´odigo Regresar · No tengo que andar poniendo un nombre en el editor y luego el tipo de dato correspondiente a Gtk# en mi c´odigo, o buscar los Full Screen

par´ametros del handler correspondiente etc. Cerrar ∗ Posibilidad de creaci´onde Widgets reutilizables Abandonar · Puedo definir un widget (no necesariamente dentro de una ventana) · Puedo definir unos comportamientos y un interfaz externo de ese

widget Introducci´onal cursillo

· Puedo utilizar tantas veces como necesite ese widget en diferentes Qu´ees Mono

ventanas Introducci´onal entorno

Interfaces gr´aficas . . .

Otros

Referencias

Agradecimientos y . . .

*

P´agina www

P´agina de Abertura

JJ II

J I

P´agina 99 de 147

Regresar

Full Screen

Cerrar

Abandonar Introducci´on a Mono c 2006 Pablo Ordu˜na. e-ghost y DotNetGroup 4.3. Otros componentesOtros gr´aficos componentes gr´aficos

Introducci´onal cursillo 4.3.1. Druid Qu´ees Mono

• Para hacer asistentes para pedir informaci´on al usuario, est´adruids Introducci´onal entorno • De manera f´acilvamos a˜nadiendo p´aginas al druid, y pidiendo informaci´on Interfaces gr´aficas . . . Otros

• Es un componente de gnome# Referencias • Ejemplo: interfacesGraficas/nome/druids/druids.cs Agradecimientos y . . . *

P´agina www

P´agina de Abertura

JJ II

J I

P´agina 100 de 147

Regresar

Full Screen

Cerrar

Abandonar 4.3.2. gecko# • Gtk tiene su propio componente para renderizado de HTML (Gtk.HTML) Introducci´onal cursillo • Sin embargo, este componente no es tan avanzado como Gecko (el motor de Qu´ees Mono Mozilla) Introducci´onal entorno

• Gecko# es un componente f´acilde usar que permite utilizar la potencia de Interfaces gr´aficas . . . gecko desde nuestra aplicaci´onMono Otros • Ejemplo: interfacesGraficas/gnome/gecko/ Referencias Agradecimientos y . . .

*

P´agina www

P´agina de Abertura

JJ II

J I

P´agina 101 de 147

Regresar

Full Screen

Cerrar

Abandonar Introducci´on a Mono c 2006 Pablo Ordu˜na. e-ghost y DotNetGroup 4.4. Poniendo todo enPoniendo orden todo en orden

• Hasta aqu´ıhemos visto todo lo que vamos a ver en el cursillo de desarrollo Introducci´onal cursillo gr´aficocon mono Qu´ees Mono Introducci´onal entorno • Nos hemos centrado ´unicamente en unas herramientas que existen, y en c´omo Interfaces gr´aficas . . . utilizarlas (por encima) a nivel t´ecnico Otros

• Pero a la hora de crear una soluci´onque utilice estas herramientas deber´ıamos Referencias utilizar las HIG de Gnome Agradecimientos y . . .

* – Human Interface Guidelines – Las de Gnome disponibles aqu´ı P´agina www – Nos indican c´omo deber´ıamos hacer nuestras ventanas, men´ues,toolbars, P´agina de Abertura mensajes de aviso y de error. . . JJ II – Basadas en estudios de usabilidad J I

P´agina 102 de 147

Regresar

Full Screen

Cerrar

Abandonar Introducci´on a Mono c 2006 Pablo Ordu˜na. e-ghost y DotNetGroup 4.5. Otras herramientasOtras herramientas

Introducci´onal cursillo 4.5.1. gconf# Qu´ees Mono

• GConf# es un binding para Mono de GConf Introducci´onal entorno • GConf permite almacenar la configuraci´on de tus aplicaciones en GNU/Linux Interfaces gr´aficas . . . de una manera centralizada Otros Referencias

– Adem´astiene muchas m´as caracter´ısticas Agradecimientos y . . .

∗ Configuraci´on por red *

∗ Notificaci´ona las aplicaciones cada vez que se cambia un valor en la P´agina www configuraci´on ∗ ... P´agina de Abertura – en GNU/Linux: no funciona ni en Mac OS X ni en Microsoft Windows JJ II

• Mucha m´asinformaci´onen la web de GConf J I

P´agina 103 de 147

Regresar

Full Screen

Cerrar

Abandonar 4.5.2. nunit • Nunit es una plataforma libre de tests unitarios para .NET (y Mono) Introducci´onal cursillo • Permite f´acilmente hacer tests con tan s´oloponer atributos [Test] a los Qu´ees Mono m´etodos que queramos que se ejecuten, dentro de clases con atributo [TestFixture] Introducci´onal entorno

– A nivel b´asico:luego ya mirar la docu de su web Interfaces gr´aficas . . .

Otros • Para llevar a cabo los tests, dos formas: Referencias

– En modo consola: nunit-console ensamblado, genera un TestResult.xml Agradecimientos y . . . – En modo gr´afico: desde el add-in de nunit para MonoDevelop :-) *

P´agina www

P´agina de Abertura

JJ II

J I

P´agina 104 de 147

Regresar

Full Screen

Cerrar

Abandonar 4.5.3. I18n con Mono • Existen varias formas de llevar a cabo la internacionalizaci´onde nuestras apli- caciones Introducci´onal cursillo Qu´ees Mono – Por un lado, las APIs de .NET para este prop´osito(System.Globalization...) Introducci´onal entorno

– Por otro lado, en Mono.Unix contamos con herramientas basadas en gettext Interfaces gr´aficas . . .

para esta tarea: Otros

M´asinformaci´on en la la p´agina de i18n de Mono Referencias • Utilizaremos esta ´ultima: Agradecimientos y . . . * – Creamos nuestro c´odigo compilando contra Mono.Posix P´agina www – Utilizaremos Mono.Unix.Catalog.GetString para los strings que queramos traducir P´agina de Abertura

– xgettext --from-code=UTF-8 Main.cs -o es.po JJ II

– Traducimos el es.po J I

– Creamos el directorio: locale/es/LC MESSAGES/ P´agina 105 de 147 – Generamos: msgfmt es.po -o locale/es/LC MESSAGES/i18n.mo Regresar

Full Screen

Cerrar

Abandonar Introducci´on a Mono c 2006 Pablo Ordu˜na. e-ghost y DotNetGroup 5. Otros Introducci´ona Mono

Introducci´onal cursillo

Qu´ees Mono

Introducci´onal entorno

Interfaces gr´aficas . . .

Otros

Referencias

Agradecimientos y . . .

Otros *

P´agina www

P´agina de Abertura

JJ II

J I

P´agina 106 de 147

Regresar

Full Screen

Cerrar

Abandonar Introducci´on a Mono c 2006 Pablo Ordu˜na. e-ghost y DotNetGroup 5.1. Servicios Web y MonoServicios Web y Mono

Introducci´onal cursillo 5.1.1. Introducci´on Qu´ees Mono

• Mono, al implementar .NET, provee tambi´enmuchas de las herramientas de Introducci´onal entorno

.NET para desarrollo y consumo de Servicios Web, que son una parte impor- Interfaces gr´aficas . . .

tante de .NET Otros • No desarrolla algunos de los componentes de Microsoft (Web Services Enhance- Referencias ments, por ejemplo) Agradecimientos y . . . * • La mayor´ıade lo aqu´ıtratado es 100% compatible con .NET: la documentaci´on de .NET nos sirve P´agina www – La documentaci´onde la web del DotNetGroup y los libros de su biblioteca P´agina de Abertura

son extraordinariamente ´utiles para esto JJ II – Es un ejemplo claro de reutilizaci´onde inversiones en documentaci´onde J I Microsoft desde Mono P´agina 107 de 147

Regresar

Full Screen

Cerrar

Abandonar 5.1.2. ¿Qu´eson Servicios Web? • Seg´unla Wikipedia: Introducci´onal cursillo

Un servicio Web es una colecci´onde protocolos y est´andares que sirve para in- Qu´ees Mono tercambiar datos entre aplicaciones. Distintas aplicaciones de software desar- Introducci´onal entorno

rolladas en lenguajes de programaci´ondiferentes y ejecutadas sobre cualquier Interfaces gr´aficas . . .

plataforma pueden utilizar los servicios web para intercambiar datos en redes Otros

de ordenadores como Internet. La interoperabilidad se consigue mediante la Referencias

adopci´onde est´andares abiertos. Agradecimientos y . . . • La idea es que yo (mi aplicaci´on) ofrezco un servicio a trav´esde Internet, y *

otros (otras aplicaciones en m´aquinas remotas) pueden consumirlo, de manera P´agina www completamente independiente de la plataforma usada P´agina de Abertura – Puedo estar yo utilizando Java sobre Windows y alguien lo consume bajo GNU/Linux desde Python JJ II • Para ello, se utilizan tecnolog´ıas web est´andares: J I – La comunicaci´onva a trav´esde XML de una u otra manera (est´andar) P´agina 108 de 147 – Para el transporte, se utiliza HTTP, FTP, Jabber o alg´unotro protocolo Regresar

est´andar Full Screen

• Hay diferentes protocolos de Servicios Web: Cerrar

– SOAP Abandonar – XML-RPC – ... • XML-RPC con Mono no se cubrir´a,para m´as informaci´on una implementaci´on Introducci´onal cursillo Open Source XML-RPC para .NET/Mono Qu´ees Mono Introducci´onal entorno

Interfaces gr´aficas . . .

Otros

Referencias

Agradecimientos y . . .

*

P´agina www

P´agina de Abertura

JJ II

J I

P´agina 109 de 147

Regresar

Full Screen

Cerrar

Abandonar 5.1.3. REST con Mono • Yahoo! ofrece una API atractiva para poder usar el buscador desde tus apli- caciones Introducci´onal cursillo Qu´ees Mono • Utiliza REST Introducci´onal entorno

– Utilizado tambi´enpor: Interfaces gr´aficas . . . ∗ Amazon Otros ∗ Bloglines Referencias ∗ eBay Agradecimientos y . . . * ∗ ... P´agina www • Aunque REST no es ex´actamente una forma de Servicios Web, podemos en- contrar interfaces para desarrollo como las anteriores hechas en REST que P´agina de Abertura utilizaremos de manera muy similar a Servicios Web JJ II

• Para poder hacer llamadas desde Mono, es necesario implementar el c´odigo J I que haga la llamada y traduzca la respuesta. P´agina 110 de 147 – O utilizar el c´odigo que alguien ya ha implementado para C#, como la Regresar implementaci´on libre de Martin G Brown Full Screen • Yahoo nos permite hacer b´usquedas Cerrar – de p´aginas web Abandonar – de im´agenes – de v´ıdeos – de noticias Introducci´onal cursillo – de mucho m´as Qu´ees Mono Introducci´onal entorno

• Ejemplo de llamada (madonna im´agenes,s´oloun resultado, empezando por el Interfaces gr´aficas . . .

segundo): Otros http://api.search.yahoo.com/ImageSearchService/V1/imageSearch? Referencias appid=YahooDemo&query=e-ghost&results=1&start=2 Agradecimientos y . . . *

• Ejemplo de resultado a la llamada anterior: P´agina www

J I P´agina 111 de 147 e ghost

Regresar

Foto en Jaidefinision aqui Full Screen httpantilleshomelinuxnetfotofamilia01jpg Fila de atras cyrus NcTrun Fermat Zefe Guillermo Cerrar

Juanval STenyaK FMonkey BloOwITt txusinho Abandonar Zurt MaY Juro que soy yo aunque tengo la cara a oscuras 8D

Introducci´onal cursillo http://www.mundurat.net/nun/webmaster/img/e-ghost.jpg Qu´ees Mono Introducci´onal entorno Interfaces gr´aficas . . . http://www.mundurat.net/nun/webmaster/img/e-ghost.jpg Otros Referencias Agradecimientos y . . .

http://www.e-ghost.deusto.es/phpwiki/index./HuMor * P´agina www 415844 jpeg P´agina de Abertura 413 JJ II 764 J I

http://re2.mm-b1.yimg.com/image/602490785 P´agina 112 de 147 70 130 Regresar

Full Screen Cerrar

Abandonar • M´asinformaci´on en la documentaci´on • Ejemplo: otros/ws/rest/ejemplo/yahoo.cs Introducci´onal cursillo

Qu´ees Mono

Introducci´onal entorno

Interfaces gr´aficas . . .

Otros

Referencias

Agradecimientos y . . .

*

P´agina www

P´agina de Abertura

JJ II

J I

P´agina 113 de 147

Regresar

Full Screen

Cerrar

Abandonar 5.1.4. Introducci´ona SOAP • SOAP (Simple Object Access Protocol) es el protocolo de Servicios Web m´as popular Introducci´onal cursillo Qu´ees Mono – En principio, SOAP es s´oloel protocolo para la serializaci´on de objetos Introducci´onal entorno

∗ Con SOAP se puede serializar un objeto serializable en un fichero Interfaces gr´aficas . . .

– Cuando se utiliza para hacer peticiones y procesar las respuestas, se est´a Otros

hablando de SOAP-RPC Referencias ∗ Para ello, utiliza un protocolo de transporte, a trav´esdel cual lanza la Agradecimientos y . . . petici´on,y a trav´esdel cual recibe la respuesta * • Soporta m´ultiplesprotocolos para la transporte, pero el m´asutilizado es HTTP P´agina www – Ejemplo de petici´onSOAP sobre HTTP tabulada: P´agina de Abertura POST /Ejemplo.asmx HTTP/1.1 JJ II User-Agent: Mono Web Services Client Protocol J I 1.1.4322.573 SOAPAction: "espacio/GetClasses" P´agina 114 de 147

Content-Type: text/xml; charset=utf-8 Regresar Content-Length: 276 Expect: 100-continue Full Screen Connection: keep-alive Cerrar Host: localhost:8080 Abandonar Interfaces gr´aficas . . .

Otros

Referencias

Agradecimientos y . . .

*

– Ejemplo de respuesta SOAP sobre HTTP tabulada: P´agina www

HTTP/1.0 200 OK P´agina de Abertura Server: Mono-XSP Server/1.0.9.0 Unix X-Powered-By: Mono JJ II

Date: Mon, 8 Aug 2005 00:16:05 GMT J I Content-Type: text/xml; charset=utf-8 P´agina 115 de 147 Content-Length: 519 Keep-Alive: timeout=15, max=99 Regresar Connection: Keep-Alive Full Screen

Cerrar

Introducci´onal cursillo Qu´ees Mono Introducci´onal entorno Interfaces gr´aficas . . . Otros Referencias Jon Ander Agradecimientos y . . .

JonAn * P´agina www Jon P´agina de Abertura Antilles JJ II J I

113 P´agina 116 de 147 Regresar

Full Screen Cerrar

Abandonar – De la misma forma, puede utilizarse sobre FTP, Jabber, SMTP, POP3, u otros protocolos de transporte

• Para que el cliente del servicio pueda lanzar estas peticiones, debe saber qu´e Introducci´onal cursillo m´etodos puede llamar, qu´epar´ametros le puede pasar, y dem´as informaci´on. Qu´ees Mono Para ello, necesita una Descripci´ondel Servicio Web: Introducci´onal entorno

Interfaces gr´aficas . . . – Para ello, puede documentarlo de diferentes maneras Otros – La m´aspopular es utilizando WSDL ( Description Language) Referencias

∗ Ejemplo de descripci´on: la interfaz de desarrollo de Google Agradecimientos y . . .

∗ WSDL no est´aatado a SOAP *

• La popular combinaci´onSOAP (sobre HTTP) para el uso del Servicio Web, P´agina www

descrito mediante WSDL (y descubierto mediante UDDI, que no vamos a ver) P´agina de Abertura hace posible la automatizaci´on de todo el proceso JJ II – Por tanto pueden crearse herramientas para ello J I – Mono, cuenta por defecto con herramientas de muy alto compatibles con .NET nivel para trabajar con SOAP P´agina 117 de 147

Regresar

Full Screen

Cerrar

Abandonar 5.1.5. Configurando el Servidor Web SOAP con Mono • Para ofrecer un Servicio Web, lo primero que necesitaremos ser´aun Servidor que est´ea la escucha Introducci´onal cursillo Qu´ees Mono – Podemos hacer que nuestra aplicaci´on est´ea la escucha Introducci´onal entorno

– Podemos utilizar el servidor propio de Mono, el xsp Interfaces gr´aficas . . .

– Podemos utilizar el m´odulopara Apache de Mono (mod mono) Otros • Nosotros utilizaremos el Servidor propio de Mono, el xsp Referencias Agradecimientos y . . .

– M´asf´acil de configurar e instalar *

– Por otra parte, necesitamos tener otro puerto a la escucha P´agina www ∗ Sin embargo, al transportar toda la comunicaci´onpor HTTP, podemos P´agina de Abertura utilizar el m´oduloproxy de Apache: ∗ Poniendo las siguientes l´ıneas en el fichero de configuraci´on de Apache JJ II

(httpd.conf): J I ProxyRequests Off P´agina 118 de 147

Regresar

ProxyPass /src http://localhost:puerto/dst/ Full Screen ProxyPassReverse /src http://localhost:puerto/dst/ Cerrar

Abandonar ∗ Y descomentando el m´oduloProxy en el fichero de configuraci´on de m´odulos de Apache(modules.conf): LoadModule proxy_module /usr/lib/apache/1.3/libproxy.so Introducci´onal cursillo ∗ Y con ello al acceder a localhost/src, Apache har´ade proxy, trans- Qu´ees Mono mitiendo la informaci´ona localhost:puerto/dst, y devolviendo la re- Introducci´onal entorno spuesta Interfaces gr´aficas . . . Otros • Lo ideal es que xsp sea ejecutado por el usuario www-data (u otro nuevo, por Referencias ejemplo xsp) Agradecimientos y . . . – Dado que en el cursillo hemos utilizado la instalaci´ongen´erica y que s´olo *

estamos haciendo pruebas, por comodidad lo ejecutaremos con el usuario P´agina www con el que hemos iniciado la sesi´on P´agina de Abertura – Al instalar Mono a trav´es de repositorios, lo normal es que venga por defecto ejecut´andose como www-data JJ II

• Para indicarle una carpeta desde la que cuelgue todo, haciendo que todas las J I

aplicaciones compartan su mismo directorio bin, lo haremos con: P´agina 119 de 147

xsp --root carpeta Regresar

• Es m´as com´unindicarle un directorio de configuraci´on que indique todo: Full Screen

Cerrar xsp --appconfigdir /etc/xsp Abandonar • Esto permite poder diferenciar entre varias aplicaciones, en diferentes directo- rios

– Ejemplo: otros/ws/soap/xsp. Contiene un ejemplo de appconfigdir Introducci´onal cursillo Qu´ees Mono • Para poder utilizar los ejemplos del cursillo: Introducci´onal entorno xsp --root otros/ws/soap/sirviendo Interfaces gr´aficas . . . Otros • Para poder utilizar los ejemplos que vienen con el instalador gen´erico(vienen Referencias tambi´enen el paquete asp.net-examples) Agradecimientos y . . . * nctrun@ord3p:~/mono-1.1.8.2/share/doc/xsp$ xsp --root test P´agina www

• Para poder utilizar ASP.NET 2: P´agina de Abertura

nctrun@ord3p:~/mono-1.1.8.2/share/doc/xsp$ xsp2 --root test JJ II

J I • Para terminar, pulsar intro. Si est´ainstalado mediante repositorios: P´agina 120 de 147 nctrun@ord3p:~# /etc/init.d/mono-xsp stop Regresar

Full Screen

Cerrar

Abandonar Introducci´onal cursillo

Qu´ees Mono

Introducci´onal entorno

Interfaces gr´aficas . . .

Otros

Referencias

Agradecimientos y . . .

*

P´agina www

P´agina de Abertura

JJ II

J I

P´agina 121 de 147

Regresar

Full Screen

Cerrar

Abandonar 5.1.6. Sirviendo un Servicio Web SOAP con Mono • Para hacer un ejemplo sencillo de Servicio Web SOAP con Mono: Introducci´onal cursillo – Crearemos un fichero .asmx Qu´ees Mono

– En ´elaparecer´ala cabecera: Introducci´onal entorno

<%@ WebService Language="c#" Class="espacios.nombres.clase" %> Interfaces gr´aficas . . . ∗ El Language ser´aC# o VB.NET Otros Referencias ∗ La Class ser´ala clase que tiene los m´etodos a los que se podr´allamar Agradecimientos y . . . ∗ Existen otras muchas posibles cabeceras para a˜nadir * – Despu´esde la cabecera, pondremos el c´odigo. Estar´a: P´agina www ∗ la clase especificada en la cabecera P´agina de Abertura · Opcionalmente, ser´ahija de System.Web.Services.Service y as´ı podr´aacceder a m´etodos y atributos ´utilesde la clase padre JJ II · Opcionalmente, tendr´ael atributo (con m´aso menos par´ametros): J I [WebService(Description="este servicio mola", Namespace="espacio")] P´agina 122 de 147

· Los m´etodos que podr´anser accesibles tendr´anque tener el atributo Regresar (con m´as o menos par´ametros): Full Screen [WebMethod(Description="esta es la descripcion")] ∗ M´asclases o tipos de dato que se usen en el c´odigo Cerrar

Abandonar · Si se van a usar en la comunicaci´on (pueden ser pasados por par´ametro o devueltos), deber´antener el atributo: [Serializable]

• Ejemplo: otros/ws/soap/sirviendo/Ejemplo.asmx Introducci´onal cursillo Qu´ees Mono – Para poder ver el servicio, accederemos a: Introducci´onal entorno http://localhost:8080/Ejemplo.asmx Interfaces gr´aficas . . .

– La primera vez que accedemos, el c´odigo es compilado. Otros

– Veremos una p´agina web Referencias ∗ Desde la cual podremos ver la documentaci´ondel servicio web Agradecimientos y . . . ∗ Ver los m´etodos que podemos invocar, e incluso invocarlos *

· Con una petici´onGET, por lo que no podremos pasar datos com- P´agina www plejos P´agina de Abertura · Llamamos a: http://localhost:8080/Ejemplo.asmx?page=op&tab=test JJ II &op=GetClasses&bnd=PetitionsServerSoap&ext=testform J I · Que realmente se limita a poner bonito el resultado de: http://localhost:8080/Ejemplo.asmx/GetClasses P´agina 123 de 147

∗ Ver la descripci´on del Servicio Web (que nos generar´aautom´aticamente) Regresar en WSDL: Full Screen http://localhost:8080/Ejemplo.asmx?page=wsdl · Que realmente se limita a poner bonito el resultado de: Cerrar

http://localhost:8080/Ejemplo.asmx?wsdl Abandonar ∗ E incluso nos genera c´odigo para consumir el servicio web en C# y en VB.NET: http://localhost:8080/Ejemplo.asmx?page=proxy Introducci´onal cursillo • Tambi´enpodemos no poner todo el c´odigo en el .asmx, utilizando .dlls ex- Qu´ees Mono ternos Introducci´onal entorno

Interfaces gr´aficas . . . • O incluso utilizar Code Behind, de manera que incluimos todo el c´odigo en un .cs, lo compilamos, ponemos el .dll en el directorio bin de la aplicaci´on, y Otros en el .asmx no necesitamos poner por tanto el c´odigo Referencias Agradecimientos y . . .

– Ejemplo: otros/ws/soap/sirviendo/Ejemplo.code.behind.asmx *

P´agina www

P´agina de Abertura

JJ II

J I

P´agina 124 de 147

Regresar

Full Screen

Cerrar

Abandonar 5.1.7. Consumiendo un Servicio Web SOAP con Mono • Lo primero que haremos es encontrar la descripci´on del Servicio Web Introducci´onal cursillo • Tomaremos como servidor nuestra m´aquina alojando el servicio de ejemplo Qu´ees Mono anterior Introducci´onal entorno

• Por tanto, encontraremos la descripci´ongenerada por xsp en: Interfaces gr´aficas . . . http://localhost:8080/Ejemplo.asmx?WSDL Otros Referencias – Si echamos un ojo a esta descripci´on,veremos que est´andefinidos los Agradecimientos y . . . datos de las clases que hab´ıamos escrito en C# (Classroom, Student. . . ), * as´ıcomo las operaciones que hemos permitido acceder – Con ello, ya podr´ıamoshacer c´odigoque realizase esas peticiones P´agina www

P´agina de Abertura • Utilizaremos la herramienta wsdl para generar un esqueleto en C# ya hecho a trav´esde la descripci´on dada: JJ II

nctrun@ord3p:~$ wsdl http://localhost:8080/Ejemplo.asmx?wsdl J I

Mono Web Services Description Language Utility P´agina 125 de 147 Writing file ’PetitionsServer.cs’ nctrun@ord3p:~$ Regresar

Full Screen – wsdl tiene m´as opciones, para generar VB.NET, poner usuario y password, para generar un esqueleto de servidor en lugar de uno de cliente. . . Cerrar

man wsdl Abandonar • Una vez hecho esto, podemos compilar este c´odigo como librer´ıa: nctrun@ord3p:~$ mcs PetitionsServer.cs -t:library -r:System.Web.Services nctrun@ord3p:~$ Introducci´onal cursillo Qu´ees Mono • Y luego desde otro .cs podemos hacer llamadas de manera transparente: Introducci´onal entorno Interfaces gr´aficas . . .

PetitionsServer ps = new PetitionsServer(); Otros

Classroom [] crs = ps.GetClasses(); Referencias

foreach(Classroom cr in crs) Agradecimientos y . . . System.Console.WriteLine(cr.Number); *

– Cuando llamamos a GetClasses por ejemplo, internamente har´ala lla- P´agina www mada al servidor y se quedar´aesperando a la respuesta P´agina de Abertura ∗ Para verlo: nctrun@ord3p:~# tcpflow -i lo -C port 8080 JJ II

– Adem´asde generarnos los m´etodos a los que podemos llamar (como GetClasses), J I nos genera otros para utilizarlos de manera as´ıncrona: P´agina 126 de 147 public IAsyncResult BeginGetClasses (AsyncCallback Regresar callback, object asyncState); public void EndAddClass (IAsyncResult asyncResult); Full Screen

– Adem´as,podemos ver los m´etodos etc. a alto nivel con monop como co- Cerrar

ment´abamos a principio del cursillo: Abandonar nctrun@ord3p:~$ monop -r:PetitionsServer.dll Assembly Information: PetitionsServer Introducci´onal cursillo Version=0.0.0.0 Qu´ees Mono Culture=neutral Introducci´onal entorno

Interfaces gr´aficas . . .

Classroom Otros

PetitionsServer Referencias

Student Agradecimientos y . . .

* Total: 3 types. nctrun@ord3p:~$ monop -r:PetitionsServer.dll Classroom P´agina www public class Classroom { P´agina de Abertura

public Classroom (); JJ II J I (...) P´agina 127 de 147

public Student[] Students; Regresar

public int Number; Full Screen } nctrun@ord3p:~$ Cerrar

Abandonar • Ejemplo: otros/ws/soap/consumiendo/ • Sin embargo, si estamos utilizando Mono para escuchar a Mono. . . ¿d´ondeest´a la interoperabilidad? Introducci´onal cursillo Qu´ees Mono • Vamos a hacer el mismo ejemplo, con el mismo servidor, de manera breve con Introducci´onal entorno la librer´ıa Axis de Apache para Java Interfaces gr´aficas . . .

Damos por hecho que $AXISCLASSPATH son los .jar que vienen con Axis Otros • Dada la descripci´on, generamos el c´odigo, pero esta vez en Java: Referencias Agradecimientos y . . .

nctrun@ord3p:~$ java -cp $AXISCLASSPATH * org.apache.axis.wsdl.WSDL2Java P´agina www http://localhost:8080/Ejemplo.asmx?wsdl nctrun@ord3p:~$ javac -cp $AXISCLASSPATH espacio/*java P´agina de Abertura nctrun@ord3p:~$ JJ II

• Una vez hecho esto, hacemos un c´odigo de prueba como: J I

PetitionsServerLocator psl = new PetitionsServerLocator(); P´agina 128 de 147

PetitionsServerSoap pss = psl.getPetitionsServerSoap(); Regresar ArrayOfClassroom aoc = pss.getClasses(); Full Screen Classroom [] crs = aoc.getClassroom(); for(Classroom cr : crs) Cerrar System.out.println(cr.getNumber()); Abandonar • Y lo compilamos: nctrun@ord3p:~$ javac Llamada.java -cp $AXISCLASSPATH:.

• Y lo ejecutamos: Introducci´onal cursillo Qu´ees Mono

nctrun@ord3p:~$ java -cp $AXISCLASSPATH:. Llamada Introducci´onal entorno

113 Interfaces gr´aficas . . .

nctrun@ord3p:~$ Otros

Referencias

• Si miramos otra vez lo que va por debajo con tcpflow veremos que no hay Agradecimientos y . . . grandes cambios (aparte del User-Agent. . . ) *

• De la misma forma podr´ıamos utilizar much´ısimos otros lenguajes (C++, P´agina www Python, Perl, . . . ) bajo diferentes Sistemas Operativos P´agina de Abertura

JJ II

J I

P´agina 129 de 147

Regresar

Full Screen

Cerrar

Abandonar Introducci´on a Mono c 2006 Pablo Ordu˜na. e-ghost y DotNetGroup 5.2. Remoting Remoting

• Los Servicios Web anteponen la interoperabilidad entre diferentes plataformas Introducci´onal cursillo a largo alcance a la eficiencia Qu´ees Mono Introducci´onal entorno – Interesante para Interfaces gr´aficas . . .

∗ ofrecer o consumir un servicio a trav´es de Internet Otros

∗ interactuar entre diferentes plataformas Referencias – Pero si nuestra aplicaci´onno cumple ninguna de las dos condiciones, puede Agradecimientos y . . . interesarnos otro sistema que *

∗ nos permita trabajar al mismo nivel de abstracci´on(o superior) P´agina www ∗ cuide m´as la eficiencia P´agina de Abertura • Con Remoting tenemos precisamente esto: JJ II – Mismo nivel de abstracci´on J I ∗ incluso superior ofreciendo P´agina 130 de 147 · eventos Regresar · paso de par´ametros por referencia · ... Full Screen

– Comunicaci´onpor canales Cerrar

∗ Encargados de transmitir la informaci´on Abandonar ∗ HttpChannel · Utilizar´aHTTP para la transmisi´onde informaci´on

∗ TcpChannel Introducci´onal cursillo

· Utilizar´aun formato binario para la transmisi´onde informaci´on Qu´ees Mono

· Mayor eficiencia Introducci´onal entorno ∗ m´as(incluso implementando los propios) Interfaces gr´aficas . . . – Formateadores Otros ∗ Encargados de serializar la informaci´ona transmitir Referencias Agradecimientos y . . . ∗ SoapClientFormatterSinkProvider / SoapServerFormatterSinkProvider * · Serializa la informaci´on a SOAP P´agina www

· El utilizado por defecto con HttpChannel P´agina de Abertura ∗ BinaryClientFormatterSinkProvider / BinaryServerFormatterSinkProvider JJ II · Serializa la informaci´on a un formato binario J I

· El utilizado por defecto con TcpChannel P´agina 131 de 147 ∗ M´as,incluso implementando los propios Regresar – Puede resultar mejor para comunicar aplicaciones en una red en la que s´olovayamos a tener equipos con Mono/.NET funcionando Full Screen • Ejemplos en otros/remoting/ Cerrar

Abandonar Introducci´on a Mono c 2006 Pablo Ordu˜na. e-ghost y DotNetGroup

5.3. Bases de Datos Bases de Datos

• Para utilizar Bases de Datos en Mono, utilizaremos la implementaci´on de Mono de ADO.NET Introducci´onal cursillo Qu´ees Mono

• Mono tiene soporte para muchos proveedores Introducci´onal entorno • Utilizaremos como ejemplo dos diferentes: Interfaces gr´aficas . . . Otros – Sqlite, minimalista Referencias

∗ Multiplataforma y Open Source Agradecimientos y . . .

∗ No tiene ning´undemonio por detr´as: se almacena todo en un fichero * ∗ Realmente peque˜na, no tiene dependencias P´agina www ∗ Viene por defecto con Mono ∗ Utilizada en aplicaciones de escritorio, como f-spot P´agina de Abertura

– MySQL, potente JJ II ∗ Multiplataforma y Open Source J I ∗ La M de LAMP (Linux Apache MySQL (PHP — Python — Perl) ∗ Hay que utilizar el conector de MySQL para .NET (viene con binarios P´agina 132 de 147 para Mono) Regresar ∗ Soporte para transacciones, replicaci´on,diferentes opciones de almace- Full Screen namiento. . . Cerrar • Ejemplo en otros/bd/ Abandonar Introducci´on a Mono c 2006 Pablo Ordu˜na. e-ghost y DotNetGroup 6. Referencias Introducci´ona Mono

Introducci´onal cursillo

Qu´ees Mono

Introducci´onal entorno

Interfaces gr´aficas . . .

Otros

Referencias

Agradecimientos y . . .

Referencias *

P´agina www

P´agina de Abertura

JJ II

J I

P´agina 133 de 147

Regresar

Full Screen

Cerrar

Abandonar Introducci´on a Mono c 2006 Pablo Ordu˜na. e-ghost y DotNetGroup 6.1. En general En general

• La web oficial de Mono Introducci´onal cursillo Qu´ees Mono • Mono: A Developer’s Notebook, de la editorial O’Reilly Introducci´onal entorno • Mono hispano Interfaces gr´aficas . . . Otros

Referencias

Agradecimientos y . . .

*

P´agina www

P´agina de Abertura

JJ II

J I

P´agina 134 de 147

Regresar

Full Screen

Cerrar

Abandonar Introducci´on a Mono c 2006 Pablo Ordu˜na. e-ghost y DotNetGroup 6.2. Qu´ees Mono Qu´ees Mono

Introducci´onal cursillo 6.2.1. Qu´ees Qu´ees Mono

• La anterior web de Mono (redirige a la actual, pero a trav´esde google sigue Introducci´onal entorno

siendo accesible Interfaces gr´aficas . . . • www.gotmono.com Otros Referencias

• www.novell.com Agradecimientos y . . . • forge.novell.com * • www.go-mono.com/rationale.html P´agina www

P´agina de Abertura • Let’s make UNIX not suck, por Miguel de Icaza • V´ıdeode la charla de Miguel de Icaza en la UOC JJ II J I • Entrevista a Miguel de Icaza, Julio 2005 P´agina 135 de 147 • Entrevista a Miguel de Icaza, Marzo 2005 Regresar • Entrevista Miguel de Icaza en O’Reilly, Marzo 2005 Full Screen • Miguel on Mono, O’Reilly, Febrero 2002 Cerrar

• Miguel de Icaza on Mono, O’Reilly, Julio 2001 Abandonar • Comentarios interesantes en Slashdot • http://tirania.org/blog/archive/2005/Feb-09.html Introducci´onal cursillo • Ricardo Galli sobre Mono, DotGNU y dem´as, Julio 2001 Qu´ees Mono • Material de Joe Hummel sobre ”Mono: running .NET apps on Linux” Introducci´onal entorno Interfaces gr´aficas . . . • Otra entrevista a Miguel de Icaza, Septiembre 2001 Otros

• Entrevista a Miguel de Icaza, por Netcraft, Abril 2004 Referencias

Agradecimientos y . . . • en general :) *

P´agina www

P´agina de Abertura

JJ II

J I

P´agina 136 de 147

Regresar

Full Screen

Cerrar

Abandonar 6.2.2. Licencias y patentes • FAQ sobre licencias y Mono Introducci´onal cursillo • P´agina oficial de la ECMA Qu´ees Mono • C´odigo de conducta de ECMA Introducci´onal entorno Interfaces gr´aficas . . . • ECMA 334 Otros

• ECMA 335 Referencias

Agradecimientos y . . . • Guidance notes for use with the Ecma Code of Conduct in Patent Matters * • ISO 23270 P´agina www

• ISO 23271 P´agina de Abertura

• Posici´onde DotGNU JJ II

• DotGNU sobre FUD sobre patentes J I

• Seth Nickel hablando de Mono, Mayo 2004 P´agina 137 de 147

• Respuesta de Miguel de Icaza a Seth Nickel Regresar • Miguel on patents Full Screen • Proceso de estandarizaci´on en el ECMA, por Microsoft Cerrar

Abandonar • news.zdnet.com/2100-3513 22-961737.html • Mensaje en la lista de Mono sobre el tema de patentes Introducci´onal cursillo • El tema se ha hablado mucho en la lista Qu´ees Mono • patentes de Sun Microsystems Introducci´onal entorno Interfaces gr´aficas . . .

Otros

Referencias

Agradecimientos y . . .

*

P´agina www

P´agina de Abertura

JJ II

J I

P´agina 138 de 147

Regresar

Full Screen

Cerrar

Abandonar 6.2.3. Aplicaciones • Noticia sobre la cantidad de aplicaciones que usan Mono Introducci´onal cursillo • gnomefiles.org Qu´ees Mono • Tomboy Introducci´onal entorno Interfaces gr´aficas . . . • f-spot Otros

• MonoDevelop Referencias

Agradecimientos y . . . • Muine * • Blam P´agina www

• Beagle P´agina de Abertura

• Stetic JJ II

• iFolder J I

P´agina 139 de 147

Regresar

Full Screen

Cerrar

Abandonar Introducci´on a Mono c 2006 Pablo Ordu˜na. e-ghost y DotNetGroup 6.3. Introducci´onal entornoIntroducci´onal entorno

Introducci´onal cursillo 6.3.1. Instalaci´on Qu´ees Mono

• Descargas de Mono Introducci´onal entorno • Mono for Debian Interfaces gr´aficas . . . Otros

• Fuentes para Ubuntu Referencias • Mono Live Agradecimientos y . . . * • MonoDevelop P´agina www • SharpDevelop P´agina de Abertura • Programando en Mono con Eclipse JJ II • Eclipse J I

P´agina 140 de 147

Regresar

Full Screen

Cerrar

Abandonar 6.3.2. Lenguajes • IKVM Introducci´onal cursillo • Proyecto Classpath de GNU Qu´ees Mono

• Boo Introducci´onal entorno

Interfaces gr´aficas . . . • Jython Otros

• Web original de IronPython 0.6 Referencias Licencia de IronPython 0.6 Agradecimientos y . . . * • Web actual de IronPython P´agina www Licencia de las versiones posteriores de IronPython P´agina de Abertura • Web de Jim Hugunin, autor de Jython y IronPython JJ II • Proyecto Grasshopper: ejecutar en Java lo programador en Mono J I • Utilizando IKVM P´agina 141 de 147 • GTK# desde Java Regresar • Mono y Java Full Screen

• Nemerle Cerrar

• IronPython y comunidad Open Source: Abandonar – Edd Dumbill hablando de IronPython cuando es Open Source: ∗ http://usefulinc.com/edd/blog/contents/2004/07/29-ironpython/read

∗ http://usefulinc.com/edd/blog/contents/2004/08/25-ironpy-mono/read Introducci´onal cursillo ∗ http://usefulinc.com/edd/blog/contents/2004/09/01-ironpython/read Qu´ees Mono – Edd Dumbill hablando de IronPython cuando se publica IronPython bajo Introducci´onal entorno licencia privativa Interfaces gr´aficas . . . – Edd Dumbill hablando de Boo cuando se publica IronPython bajo licencia Otros privativa Referencias Agradecimientos y . . .

*

P´agina www

P´agina de Abertura

JJ II

J I

P´agina 142 de 147

Regresar

Full Screen

Cerrar

Abandonar Introducci´on a Mono c 2006 Pablo Ordu˜na. e-ghost y DotNetGroup 6.4. Interfaces gr´aficasInterfaces con Mono gr´aficascon Mono

• http://www.mono-project.com/Gui Toolkits Introducci´onal cursillo Qu´ees Mono • http://wxnet.sourceforge.net/ Introducci´onal entorno • http://www.wxwidgets.org/faqgen.htm#platforms Interfaces gr´aficas . . . Otros • http://wxnet.sourceforge.net/screenshots/ Referencias • http://svn.myrealbox.com/mwf/class-status-System.Windows.Forms.html Agradecimientos y . . . * • http://gtk-sharp.sourceforge.net/ P´agina www • http://glade.gnome.org/ P´agina de Abertura • http://www.mozilla.org JJ II • http://www.gnome.org/projects/gconf/ J I • http://www.gnome.org/projects/gconf/ P´agina 143 de 147

Regresar

Full Screen

Cerrar

Abandonar Introducci´on a Mono c 2006 Pablo Ordu˜na. e-ghost y DotNetGroup 6.5. Otros Otros

• Programming C#, editorial O’Reilly Introducci´onal cursillo Qu´ees Mono • Programming Web Services with SOAP, editorial O’Reilly Introducci´onal entorno – no tiene nada de Mono o .NET Interfaces gr´aficas . . . Otros • Web Services Essentials, editorial O’Reilly Referencias – no tiene nada de Mono o .NET Agradecimientos y . . . * • Documentaci´onen la web del DotNetGroup P´agina www – En especial ”Curso de .NET distribuido” P´agina de Abertura – Inclusive la biblioteca del DotNetGroup JJ II • Binding de XML-RPC para Mono/.NET REST J I • API de Yahoo P´agina 144 de 147 • Implementaci´on de la API de Yahoo para Mono/.NET de Martin G Brown Regresar

Full Screen

Cerrar

Abandonar Introducci´on a Mono c 2006 Pablo Ordu˜na. e-ghost y DotNetGroup 7. AgradecimientosIntroducci´ona y nota final Mono

Introducci´onal cursillo

Qu´ees Mono

Introducci´onal entorno

Interfaces gr´aficas . . .

Otros

Referencias

Agradecimientos y . . .

Agradecimientos y nota final *

P´agina www

P´agina de Abertura

JJ II

J I

P´agina 145 de 147

Regresar

Full Screen

Cerrar

Abandonar Introducci´on a Mono c 2006 Pablo Ordu˜na. e-ghost y DotNetGroup 7.1. Agradecimientos Agradecimientos

• A la comunidad de Mono, por la plataforma que se est´an currando Introducci´onal cursillo Qu´ees Mono • A Jon Ander Hern´andez JonAn, por todas sus grandes intervenciones en clase Introducci´onal entorno :D Interfaces gr´aficas . . . • A Jon Vald´es Juanval, por traducir el ejemplo de OpenGL Otros Referencias • A Fermat, por todos los marrones que se ha comido para organizar los cursillos Agradecimientos y . . . de Julio *

• Al e-ghost y DotNetGroup, por darme la oportunidad de dar este cursillo P´agina www

• A los que hayais venido P´agina de Abertura

– porque sois los que le dais sentido a esto JJ II – por haberme aguantado durante estas horas 0:) J I

• A todos los que me dejo en el tintero :D P´agina 146 de 147

Regresar

Full Screen

Cerrar

Abandonar Introducci´on a Mono c 2006 Pablo Ordu˜na. e-ghost y DotNetGroup 7.2. Nota final Nota final

Este documento est´aescrito por Pablo Ordu˜na para el cursillo de Introducci´ona Mono del grupo Introducci´onal cursillo de software libre de la Universidad de Deusto, el e-ghost, y del grupo de .NET de la Universidad de Qu´ees Mono Deusto, el DotNetGroup. Puede encontrarse junto con los ejemplos y las fuentes LAT Xen la misma E Introducci´onal entorno web de ambos grupos. Probablemente las actualizaciones las cuelgue en mi hueco web en el e-ghost. Interfaces gr´aficas . . . Para cualquier correcci´on,sugerencia, o comentario en general, no dudes en ponerte en contacto Otros conmigo en: Referencias Agradecimientos y . . . pablo @ ordunya . com *

P´agina www

P´agina de Abertura

JJ II

J I

P´agina 147 de 147

Regresar

Full Screen

Cerrar

Abandonar