You are on page 1of 52
Gedicada @ desarrolladores y disehadores de software eM eee aieg ete a ee eee eer an pee enue ie) Oe a ee eR Sea ee ee eee coc 2 datos de aplicaciones (y IV] * Embarcadero RAD Studio X€3 [y Il] Fase Ce Ng Buscamos talento éTienes pasion por lo que haces? le gusta compartir el conocimiento? éDisfrutas con los retos? {Buscas la evolucion constante? éQuieres hacer ——_— los mejores? Te estamos buscando. Contactanos en: recruitment@pasiona.com Training Bubbles, éte animas? Bienvenido al nimeto 101 de ANM, correspondiente a mayo junio de 2018, Como te comentaba en el nomeso anterior esta rewsta pasa a tener un frecuencia bimestral entre cras cosas para poder abarcar nuevos proyectos Pues bien, desde entonces ya hemos puesto en marcha el primero. Training Bubbles (ntt:/trainingbubbles.coa) o Burbujas de formacién p10 vyecto que deste aqutte animo a conocer. Se tata de un VLOG de tecnologia realizado porla comu- nidad| por cualquier persona que quiesacompattr conocimientos consus compaeros deprofesion Por supuesto, también estds inviado a participa actvarnente. Cambiarnos el formato, pero se parece bastante a esta revista, sole que en vez de articu los publicamos jburbujas!, que son videos cortos con soluciones a problemas concretos, pe- quehas inttoducciones o explicaciones a cuestiones que surgen en el dia 2 dia.. Sin pretensiones de grandes acciones formativas, al conttario, buscamos algo de Frescura e in ‘mediatez. Debe ser un modo de compartir conacimiento de modo rapido y directo. Sin mas. Puedes seguimnos en Twitter en la cuenta @lrainingbubbles y estarés informnado de todas, las novedades que publiquemos, Volviendo a nuestra revista, bras observado que este mes no hay seccién Actualidad, nila habré mas en papel mientras editemos con esta frecuencia. Una seccién de Actualidad en una revista bimestral impresa no tiene sentido alguno al ritmo que a dia de hay nos in formamos; tenckia mas bien un valor historico. Tampoco cubriremos eventos, saivo los muy importantes, como es el caso este mes del Mobile World Congress 2013, celebrado a fina- les de febrero, Pero como puedes ver, pasa demasiado tiempo entre que las cosas ocurren y podemos contatelas. Para el préximo numero te contaremnos como ha ido Tech-Ed Europe 2013, que este af se celebra en Madrid, Pero salvo estas honrosas excepciones, este tipo de contenido debe iren la web de la revista [nttp://wwa.dplus.net) aunque esto por ahora tendra que esperar. Sin embargo, si sequitemos publicando entievistas, y coma siempre buscaremos perso. najes de interés, com) es el caso de este mes, que entrevistarmos a José Leén, un joven es- anol que es director de Ingenieria en Embarcadero, que ademas dirige la SuCLrsal espaniola de la compara, afincada en Elche Poratra part, la calidad de esta entrega pienso que ha quedado garantizada gracias a los at. cules de dos de nuestros colaboradores con mayor reconacirniento nivel nacional en las e- mendamente actuales tecnologias sobre las que escriven (Windows 8 y Windows Phone 8), Alex Casquete y losé Julian Veray Ferreiro. Dentro, por supuesta, ainhay mucho mis Espero que nuesto trabajo re sea de utldad Paco Matin Editor de ¢NM See ge ee Ene teen een Dee eee eed hace Por Octavio Hernandez y Marino Posadas Por Alex Cosquete renido acasién de charlar can un Jn contro es una parte dela interfaz de usuatio que spaficl que participa acivamente en el en ay qu procesa de construccion de he nde desarolarmas ) construccién de herramientas de concretamente, en HTMLS aqui sobre las capacidades y esta herramienta Supongoque ela simined entre cules consideras que losentornos de desaroloy cela imple- as principa mentacion que hice dela plataformia.HITMLS Gull Delphi para PHP janteriommente la- _Laencapsuiaciondle ncionakiad mado QStudio] pretendia implemen- en componentes visuales que peri: tarelmodeio —_ ten reutilizar codigo muy facilmerte. a de desarrollo Noesnecesaro cominarningunatec aS ACTA iss! oes han pars acatebest nap eae aplicaciones potentes. ee ee PHP, y para La orientacion a eventos permite ello, migré que nos concentremos ene! cocigo todos los — de negocio de las aplicaciones y nos dad olvidernos del framework Solo esc bimasel cadigo de nuestra aplicacién reaccionando a las acciones de los usuarios. Laconservacién del estado de la aplicacion hace que el cambio de mentalidad que necesita hacer un programador de aplicaciones de escri- torio para desarrollar aplicaciones web, sea minimo, Sicambias una pro piedad de un componente, esa pro piedad conservara su valor durante todo el tiempo de vida de la aplica- in, no hay que escribir cédigo que se encargue de eso. Un IDE visual que permite el diseno de los interfaces graficos, a escritura de codigo y la depuracion desde una Unica herramienta Qué parte del equipo res que Embarcadi ‘Actualmente todo el equipo de desarrollo, calidad y documentacion reside aqui Antes no era ast y tanto calidad como decumentacion eran externos, haciendo que tareas que se pueden resolver en cinco minutos de Forma presencial, se tardara dias en compleratlas. Los Product Manager estan todos en Scotts Valley.Las ven- tajas son innumerables, sobre todo, anivel de recursos, Por ejemplo, para mejorar la calidad del producto, es necesario automatizar los tests, de Forma que se ejecuten cuando se rea- lizan cambios en el cddigo Para pro ductos complejos de este tipo la can tidad de tests 2 ejecutar y su com- plejidad hace necesario un hardwa- re potente que sea capaz de sopor: Para HTMLS Builder hemos intentado detectar los puntos fuertes del estandar HTMLS e implementar las caracteristicas mas adecuadas. tar este tipo de trabajo, Dicho hard- ware cuesta decenas de miles de euros yantes de trabajar para Embar cadero, hubiera sido impensable dis- poner de este equipo. ngo que hacer una herral come HTML 5 Builder requiere fotalmente al dia de los cambios ¢ producen en la W3C. Util nento de anal jstin Para HIMLS Builder hemos inten. tada detectar los puntos fuertes del estandar HTMLS e implementar las caracteristicas mas adecuadas, eCua- les son las mas adecuadas? No es algo facil, ya que hay que hacer un balance entre la funcionalidad que ‘apotael soporte en las distinros nave gadores ysies susceptble ono de ser lencapsulada en un componente. Por cotta pate para nosotros, HTMLS supo eun medio porel cual desarralar ap caciones, no un fin en si mismo, va parte del estandar No, Embarcadero no participa en @l estandar HTMLS. Por Io general, ia empresa se centia en proporcionar herramientas de desarrollo para las estandares existentes aunque recien- temerte ha anunciado que esta espon- sorizando el estndar Cv Enestos momentos, para un proyecto que requierauna presencia en dispositivos méviles, escritorio, web, etc, HTMLS es el mejor candidato, pero no siempre, depende mucho de los requisitos del cliente Como sabes, HTMLS esta practicamente ter ‘minado en cuanto a sus definiciones. ¥ final: mente, el marcado semantica con Microdata es parte de ese estandar y esto es fundamental para la SEO. eSoportais este aspecta, clo tenis previsto, teniendo en cuenta que Google y Bing ya lo estén urilizando en sus matores de bus: queda? No, no lo soportamos, pero la ventaja de la arquitectura de HTMLS Builder es que podernos actualizar Facilmence la libreria de clases para soportar nuevas caracteristicas del estander, sin que afecte a las aplicaciones de los usuarios. Hasta qué puntoos terminacién de C553? Pues afecto bastante, ya que nosotros lo que hacemos es crear una capa sobre CSS3 y gene- rar el cOdigo para que el usuario no tenga que saber estas diferencias. Tuvimos muchos pro- biemas con la generacin de degradados y hay iertos aspectos que decidimos no soportar has- @ que no se complete su implementacion fecta el desiqual grado de Las declaraciones de lan Hickson de que Goo Gle va a sequit su propio camino “dependiendo de sus necesidades”, en dad en los desarrollador No he leido esas declaraciones, pero me las puedo imaginar + Yo creo que al final es una simple cuestion de pragmatismo. Personalmente no soy un defensor de nada en particular, ni del codigo abierto, ni del cerrado, ni de un sistema ope- rativo, ni de una tecnologia en particular. En ea cierta inestabil estos momentos, para un proyecto que reauie- ra.una presencia en dispositivos moviles, escri- torio, web, etc, HTMLS es el mejor candidato, perono siempre, depende mucho de los requi- sitos del cliente. Cuando empecé a desarro- liar QStudio, JavaScript era un juguete, Query no existia y la velocidad a la que se ejecuta- ba JavaScript en los navegadares era de risa No hace tanto tiempo de eso. Si Google va a seguir innovando, no tengo ningun inconve- niente. ¢Pensais soportar el nuevo lenguaje TypeScript Propuesto por Microsoft? Inicialmente na hemos hablado de eso. Aun- que no seria complicado darle sopare. Cul es la oferta actual de HTMLS Builder para la pragramacién del lado del servidor? ‘A dia de hoy puedes elegir ia configuracién que quieras para hacer tus aplicaciones. - Solo servidor Solo cliente Servidor + cliente Unas palabras finales para los lectores. Ha sido un placer realizar esta entrevista, y espero que le sirva a otfos programadores para que vean que los espanoles tenemos mucha capacidad de innovacién y que Silicon Valley no esté tan lejos, Vivimas en un tiempo emacionante donde cualquiera puede vertu trabajoen Internet y esto permite, sin grandes inversiones, desarrollar gran- des ideas. Un saludo a tadas. a ieee ost re leercetcees ieee ie erga) See eC eke eo CR eye ie ee ee es eae 0 una mezcia de todo Ole eee eee Ueto Pt ene cee ea Rese ee eae at sa ST eee eee ec) @certia Se ee ee td Mobile Warld Congress es el evento incermacional de carécter anual mas importante del mundo dela industria mnévil, Este afo las cifras han sido de records absolutos, que confirman la buena salud del sector, con mas de 70,000 asistentes de mas de 200 paises que visitaron 1700 exposita: res en 94.000 metros cuadrades. E! ‘evento, ademas, fue atendido por mas de 3400 medios, entre ellos noso: ros. iImpresionante! Seguin Wikipedia, “Fue fundado por el Delson Group inc, y ahora esté fuertemente apoyado por autorida: des de C @ industrias principa: les. EIMWIC/WMC suele ser el espa: cio donde se produce un mayor numero de presentaciones de lambricas y méviles. Lo cumbre oftece una oportun dod unica de ingenieros, cient! reas de sistemas inalémbricos y aplicaciones méviles para mantener el dinero técnico, y coneciara la red con expertos principales globa en el 4G abren el Jos ejecuti movimiento movil.” He tenido la suerte de representar a dNM para contérosio, Era la primera vez que asistia a este evento, Mis expectativas eran muy elevadas por diversos motives. El pr mero era conocer todas las noveda: des y ser de los primeros en tocar y ver Por otro, también estaban las con ferencias en las que me habia regis: trado, la mayoria de desarrollo ;-). ¥ por el ultimo, tados mis conacidas que hablan asistido en avias acasiones se ian de aqui con méviles y tal La verdad es que me dejé un sabor agridulce. Por un lado, esperaba novedades mas impac- tantes de cualquiera de los fabricantes. Yo queria ver cuntos fabricantes iban a ofrecer dispositivos con el sistema operativo de Windows Phone, ya que say uno de los “fan boys". La sorpresa fue que las novedades que se presentaban ya las conocia gracias a bloggers, y las que no conocia no eran muy impactantes. No vi nada nueva de mi interes demas, esperaba tratar con mas gente de pro- ducto y no con azafat@s. En el Unico stand que traté con gente de producto fue en Nokia y al final me pasé una gran parte de mi tiempo all Por oto lado, sin embargo, una de las partes posi- tivas fue que pude tocar a conocida fara “baja de los Nokia. ¥ digo “baja” porque es fo que se comen- ‘aba, pero a mime parecian grandes teléfanos. Yen calidad/precio los mejores sein mi opinién (Otro de los stands que visite fue el de Samsung, Muy grande, luminosa, lujoso, siempre lleno y que para mi sorpresa no tenia ni su terminal con Win- dows Phone expuesto :+.lmaginaros la cara de decepcion cuando le preguntas a I@s azafar@s y ringuno lo conoce (Poker face} Ca Habiemos ahora de las conferencias,en total asisti a tes conferencias. Una de Microsoft, una de Nokia ya tia de intel.La verdad es que el feedbacte de estas chatlas es muy posiivo, ya que pude ver algo de desarrollo, no mucho, pero algo es algo D. Durante la charla de Nokia pude conacer todas lasnovedades en desarrollo para a plataforra Win- dows Phone. Here Maps! es lo que mas me gusto, ya que los mapas de Nokia para la plataforma de Microsoft son Unicos Para las que no los conozcan aquitenéis toda le informaciér http: //here.con Enla charla de intel se pudo ver desarrolio para Windows 8, que nunca esta de mas. En este mis- mo stand pude jugar con una gran pantalla tact En esta pantalla podrias ver como puede funcionar el Cloud de Intel, que ami parecer le queda mucho para llegar a la liga de Windows Azure La Ultima chatla fue un evento fuera del recinto Feral. Miciosoft nos llevd a uno de los mejares hote- les de Barcelona para poder escuchara unode los ra bejadores del equipo de producto de Windows Pho- ne. Como imaginaréis fue a charla que mésme gust, Ro por el contenido ya que eva una introduccién pero, i por poder chatlar con el equipo de producto. Geno ce) Mis conclusiones sobre este evento os las podsis imaginar. Me gusté mucho por la gente de producto ue puedes llegar a conocer y todo lo que puedes preguntarles. Otro de los puntos positivos fueron las charlas, os recomiendo ir atodas las que podsis sivenis el aho que viene, ya que siempre os vais a llevar algo interesante. ‘Ahora vayamos a por lo menos bueno, ya que 1no puedo decir que nada fuera malo en siya que creo que todo trata de expectativas. Si os gustan losteléfonos en general os vais inflara tocar nue- ‘vos dispositivos y ver algunos que ni los bloggers han podide spoilear. Pero que sola sean los teléfonos, porque e! nivel de preguntas de desarrollo que puedes hacer son muy pero que muy pocas Reutilizar codigo mediante controles personalizados con JavaScript y WinJS Un control es una parte de la interfaz de usuario que liene una lagica de negocio asociada y que podemos reutilizer en otras aplicaciones. Cuando desarrollemos aplicaciones JavaScript [JS] para la Windows Store, tenemos 2 nuestra disposicion una serie de controles que la plataforma de desarrollo nos proporciona a través de Windows Library for JavaScript (WinlS} En este articuo, exploraremas las opciones @ quesira alcance para crear y distribuir un control personalizado utlizando las mismos métados y palranes que cualquier otro contra Win. WintS nos praporciona una veintena de canito- les que podemos utlizar en nuestras aplicacio- nes para la Windows Store. Todos estos conti- lesestén dafinides derwro delnamesace Win}S.UE y entre ellas poderos encontrar WinJS.UL.App- Bar, WindS.UE-ListView 0 Win3S.UI.DatePicker, Poor citar tres de los mas representatwos. A dife- rencia de los controles HTML,en los que tenemos, na etiqueta para defini cada uno de los caniro- les, los controles WinlS son cédigo IS asociadoa un elemento HTML, nommalmente un elemento
, en el que especiicamos e! tipo de control {que queremos instanciarmediante el atribuca data- in-control Por ejemplo, para instanciar de for ma declarative el convo! Toggleswiteh utizamos, el siguiente codigo HTML: ‘éiv data-vin-controle"WinS.UL ToopleSuiteh"> «div. Quiense encargadeins- tendarelcéeigo esau Durante las siguientes lineas vamos a ex- plicar como crear desde cero y paso a paso un control que funcione de la misma forma que los contrales WinJS que tenemos disponibles de serie. Ademas de la propuesta que vamos a analizar aqui, nada nos impide seguir uti zando otras librerlas externas (jQuery, YUI 0 cualquier otra) a las que, como desarrolladores web, ya estamos acostumbrados. La ventaja de utlizarlas funciones de WinlS es que elon. trol que obtengamas se utllizara y se compor tard de la misma forma que los otros contro- les existentes y por eso cuando hablamios de desarrollo de aplicaciones para la Windows Store, es la opcién recomendada. El control mas simple que se puede crear te- quiere de un objeto con tres elementos basi cos, un constructor con dos parémetros, una DP) sine commute Desaraiada espctlzadben twcrdogas NET en Pasona propiedad elenent que apunte a un elemento HTML y una propiedad wincontrol en ese ele. mento que apunte al objeto JS. El primer paré- metro del constructor es el que recibe el ele- cién Win3S.UT.proces- SALL, que 'parsea' el cO- igoHIML ycrealoscb Jetos JS necesatios. mento HTML que acta de contenedar y al que le definimas la propiedad wincontrol. El segundo paré- metro recibe un objeto que define las propiedades extendidas del contral.En el listada | se muestra el cédigo minimo para definir un contol,en el que se espera la propiedad message como una opcion ex- endida y se asigna su valor coma contenido del control ar srallestContrt = faneticn (element, options) { lanrt = elena || docnert.createEienent(“iv"); ‘lanent.textontent = opione.nezage;, canentadncontro = this El primer paso para utilizar este control es cre- ar un elemento
Después, solo tenemos que realizar [a instan- Clacién como con cualquier objeto IS, Para que el control de ejemplo funcione coirectamente pasa mosenel segundo parsmetto un abjeto con un va: lor en la propiedad message. var elenent = docanent.getlenentaytd(*firstControl"); vor firstControl = new snallestControl(elenent, {( message: “Custom Win’S Control!” }); Esta seria la forma de instanciar el control de Forma programética, pera como he comentado an teriormente, WinlS nos permite instanciar los obje- tos de forma declarativa, haciendo uso de los atri- butos data-win-control y data-win-options. Por ejemplo, sideclaramos el abjeto dela siguiente For ma, obtenemas el mismo resultado que el cédigo. anterior. div data-win-control"snallest¢ontrol” data-win-options="{nessage: ‘Custom kin’S Control! "}*
Con este primer ejemplo tenemos que tener en ‘cuenta que para poder llamar 3 una funcién como es snallestControl desde el contexto declarativa, enemas que matcarla camo compatible con el pra: cesamiento declarative para garantizar que el c6. digo de Ia funcién es seguro a ataques de inyec- ci6n de cédigo. Esto se realiza llamando ala fun- ciGn Winds. Utilities arkSupportedForProcessing ¥y pasando como parameuo a funciGn que quere: mos marcer. En los ejemplos siguientes, no vamos a tener {que marcar explfctamente ninguna funcidn porque para crear los objetos vamas a hacer usa de los, métodos que nos proporciona WinlS, y estos mé- todos ya realizan este marcado por nosotros. Tne ‘Ahora que ya hemas creado nuestro primer con: tral y conacemos los requisitos minimos que todo control debe tener, podemos afrontar [a creacién, de un componente algo mas complejo, un cantiol que nos permita representar mediante un grafico, circular los valores de un array. La Figura | mues: tra el aspecto final del control que queremos im- plemnentar Sample Chart Figuea 1 Contra de gratis reuier Comenzamos definienda una clase mediante WindS.Class.defiine. Este metodo admite ues pard- rMettos I primeronos sive para pasar lafuncion cons- var pleChare = Mints, Clas.detina( 1 Constructor ‘tonetion (aenant, option) ( ‘lenent = onart || docinont.createFLonnt ("civ"); rent.nonerel = tie \nd8.UE.stOptione(this, options); ‘he. donElenent = elerents, shsescanie(s, 1] Manbros de insta “denEdenorts ull, titles ll, canvas nell, éstss ull, [eelori: null, ehtriDatat ull, -sstHlenants Function (elenent) { this,danElenent = elerent; ), ‘laments {gets function () {return this, donEdenent; })y cinits function ( ( erenteControlElanente(}s ‘his._donELanent.appendchld(thie. title); Lanne TdnElenent.appndGhale(this. eames); total: { Gets Fonction { ‘ar total for (oar j= 5 3 6 this. datacdength; 3H) ( ‘otal 4 this..eata js Fesurn total; » » refresh: fonction () { “ar cones = thse, canary var canter = (1x) canvasadéth [ 2, yt eanvas.height (25 ‘canvas petContert("20"); ‘hie._pitLeinerkTML = "Sonple chare"s cexcelaarRact(@, @, camasinidth, camaesheight); ‘hie charts = [Tp for Guar 3 =; 4 6 this, data dergth; 34) { ‘co.filistyle = colori cen bapiPath() vat angle © Nach PE ¢2 ¢ (chis, data] / tata); CcosnoveTo(entern, centary)} ‘covare(centersay centers, center.y, astané, Asstend ¢ angle, false) co LineTo(ceneer x, center )}, eo. f51103 oM_chartData.push({ value: this, data[i], init: lastend, 1 Aastend ¢ angle }); tructora que se utlizaré para inst elobjeto,elequivalentea la funcién que Utizamos en el primer ejemplo. El se- undo, lo utilizamios para definir los miembros de instancia y el tercera para definirlos miembros estéticos.En ellis- tado 2 definimos la dase piechart de- Clarand unicamente el consauctor ylos miembros de instancia, Coma hicimos en la primera prue- ba, en el constructor establecernos el valor de las propiedades wincontrol y celenent.La funcidn ingt sera la encar {gada de crear tados los elementos 0 ‘contoles hijos que contenga el consol, agregarlas al DOM e inicializarios, La novedad que encontramos en elconstructor y que merece especial atencion es la llamada al método WindS.UI.setoptions. Este métada se encarga de establecer el valor de las ‘opciones en las propiedades del ab- jeto. Come podemas ver en nuestio ejemplo, hemas definide dos pra piedades: data y colors La primera le utilizeremos para pasar elarray de valores y colors para definir los co lores a uulizar como rellena de cada sector La llamada a setoptions nos evita que tengamas que comprobar yy asignar cada una de las propieda des que se han pasado en el pard- metro options. El métado ereatecontrolélenents crea el elementowe para mostrar el t= tulo y el elemento canvas que utiliza- remos para dibujar e! grafico. El mé. todo refresh es el respansable de di bujar el grafico utilizando los valores de data, No entraré a explicar como est dibujando el contral ya que queda fuera del objetivo de este arti culo, peroel detalle importante es que ‘estamos guardando en chartoata un array con el valor, anguio inicial yf nal de cada sector. Esto lo utilizare. mos mas adelante para obtener elva lor al pulsar sobre un sector. lar ata: { ett function () { return this Sets fonction (value) ( cotores ( ett function () { return this.calor; }, sets function value) { this, colors = vain » in Picthartspistrart, Ds DO; En [a parte final del cddigo, exponemos la cla. se pieChart para que pueda ser utlizada desde Fue- ra del médulo. Le funcion WindS.Nanespace.define nos permite crear un namespace propio haciendo que nuestra cédiga esté mejor arganizada Ci er ‘Ahora, con el namespace definido, podremos refe- renciar el tipo pieChart ya sea de forma declarativa mediante codigo desde fuera del médulo utl zando el nombre app3S.Ur.Piechart Si queremos instanciar el abjeto de forma declarativa tenemos que crear un elemento HTML, pasando en data- win-options los valores a representa y los colores a.utlizar
, y en un comentario XML dentra de la funcién, function (element, options) ( 111 ssumary> Hil Creates a new Piethart object. Ul 111 Toe set of options to be aplied initially to 111 the new Piethart object UL sfpacan UL «returns types" ipp3S.U.Piechart"> 111 The new Piethart object. Ul etreturnsy (Crear un controlno tendria ningun sentida sin une. canismo sencillo que permita distibuito para que pue- da ser incorporado facilmente en otras aplicaciones, Visual Studio nos proporciona varias formas de dis- tibuir un control personalizado, el més directo es me dlante la creacion de un SDK de extensidn, Los SDK consisten en una coleccién de fiche- ros que se puede afadir a un proyecto como una sola referencia. Se pueden agrupar en das gran: des grupos Seguin el tipo de funcionalidad que pro- porcionan: de plataforma y de extension. Los SDK de plataforma son los que proveen los compo- nentes necesarios para desarrollar aplicaciones ara una plataforma y los SDK de extension son aquellos que extienden la plataforma, pero no son necesarios para desarrollar aplicaciones. Un can: tral personalizado como el que hemos desarralia do queda, por Io tanto, en el grupo de los de ex- tensién, Algunos ejemplos de SDK de extensién son Microsoft Advertising, el cliente de Windows Azu- re Mobile Services 0 incluso dentro de este gru- po se encuentra también lalibrerla WinlS. En Win. dows 8 estos SDK estén ubicados en %PregranFi- Les(x86)%\Microsoft SOKs\Windows\v8.0\Exten~ sionSDKs, Creando un paquete de VS Para poder generar un SDK es necesario dis- poner coma minimo de Visual Studio 2012 Pr0- fessional y tener instalado el SDK de Visual Stu- dio 2012 Con estos requisitos cubiertos, dentra de la categoria Extensibilidad apareceré un nuevo tipo de proyecto llamado Visual Studio Package que permite generar los ficheras VSIX las ficheros que contienen las extensiones para VS. Este tipo de proyecto est guiado por un asis- tente que nos permite establecer desde la infor- macién basica del paquete como el nombre o el icona, hasta afadir funcionalidad adicional como un comando de meni o una ventana de herra- mientas, Para distribuir un control basico, solo es necesario que proporcianemos el nombre y el nt mero de versidn. Una vez generado el proyecto, se nos muestra el disefiador del fichero del manifiesto del paque- te VSIX, que podemos localizar en el fichere sour- ce.extension. vsixnanifest. Este fichero contiene la canfiguracion que hemos establecido median te el asistente y se puede editar mediante el di- sefiador 0 con el editor de codigo al tratarse de un fichero XML. Figure 2 OleeRder dei manitiesta del paquere VSIK Antes de modificar ningiin atro parémeto, te nemos que afadir al proyecta un nuevo fichero XML con el nombre SokNanifest xml. Este fichero des- cribe la forma en que Visual Studio debe utlizar el SDK En el listado 4 se muestra el contenido a in. cluir para especificar la lista de ficheros que forman parte del SDK. Es importante destacar que mediante el atributo appliesta especificamios para qué tipas de proyectos estaré disponible el SDK en el Adm nistrador de referencias, Con el valor JavaSeriptswtin- owsappContainer indicamios que elnuestro, sola es- ‘ard disponible para proyectos de la Windows Sto. re en JavaScript. sncodange“utt-8" 2 ‘Displaaner"CuseantotrelRendy* iniSlersioneI1.0° opesTesuaSerptsindvsipContatne” Supportshutpleferiens="Erer™ oveater"ntp:/Puueadlbitcs/ de> ‘la Cornente'Sn pie Se" > ay ‘ile Contant ess \pie.cee? /> Una vez tengamas el fichera VSIX generado padremos distibuirlo entre Nuestros usuarios 0 publicarlo en Vi sual Studio Gallery. En cualquiera de los dos casos, la forma de utilizar el control serd la misma que can cual guier otro SDI. En el proyecto donde queramos utilizarlo, tendremas que afd lare Ferencia utilizando el Administrador de referencias (figura 4)y anadir en la pagina default.htm os tags seript y ink necesatios para los ficheras 1S y C55 flistado 5} ‘A pattir de este momento, padre mos utilizar el control de la misma for- ma que lo hariamos si se tratase de tn fichero local de nuestra aplicacién Mediante la creacién de controles per- sonalizados es posible encapsuiar fun onalidady lagica de inverfaz deusua fio para que pueda ser reaprovechada ornuestros usuarios y clientes, Cuan- do creamos contoles para distribuir a terceros, tenemos que utlizar todas las herramientas y utlidades que nos pro- orciona Visual Studio y la plataforma de desarrollo, desde agregar funciona lidad anuestios tipos mediante los mi xins de WinJS, 0 proporcionar inforna- ion mediante comentarios XML has- la empaquetat y distribuir nuestro cé digo en un SDK mediante los paque tes de extensién. TI] Adicion de funcionalitacicon mins de Win itp: /fasdn. microsoft con/es-es/ibrary/indows/apps/hh967789.259x) [3] SDN article: How to: Create a Software Development Ke {nttp: //asdn.microsoft .con/en-us/1ibrary/h768146.5px) La mejor manera de subi a &2 Windows Azure ‘ aventia: i renacimiento ~ ower aventia.com ‘eee fot ~ Compartir codigo en Windows Phone 8 y Windows 8 Enlos Uitimas artculos hemos revisade tanta las novedades y caractersticas de Windaws 8 coma de Windows Phone 8, desde el nimera 95 en el que hablamos de patrones y buenas practices en aplicaciones Windows Stare Done Developer Aaa en Pah Concapts Pero cada vez mas gente se pregunta, como parémeto o tipo devuel to,las clases deben ser sealed..vamos, quetendremos muchas restricciones que tener en cuenta. Gree eect as Ec Para comenzar, vamos a crear una solucién de Visual Studio 2012 que Si le damos un vistazo al esque. ma de la figura 6, veremos que los Componentes WinkT no se referen: cian en la Portable Class Library, van ditectos a cada proyecto, Esto es asi debido a que las librerias portables, no soportan referencias del tipo de los componentes Wink, por lo que tenemos que usarlas dentro de los, propios proyectos, cteando un wrap: per deniro de los proyectos que ace: da a ellas, como veremas a conti uacidn. ‘Alusar componentes WinRT, ten: dremos que tener mucho cuidado, pues estan sujetas a muchas restric: contenga cuatto proyectos distintos: Un proyecto Windows Store, un pro yecto Windows Phone, un proyecto Portable Class Library y un proyecto public sealed class Gpsservice public IAsyncoperationeSeoposition> WinktT Component. El proyecto WinkT Component se va a llamar Sharedco- de.GpsConponent y contends codigo para acceder al GPS y obtener las coor denadas actuales {listado I) Como podemos ver en el lstado |, devolvemos un tipo TAsyncOpera- tion, ai no poder usar Task en un componente WinkT PPara que todo funcione como es debi do, convertimos el resultado de Get- Geopositiontsync a una AsyncOperation Esto nos permite ejecutar el mérodo de forma asincrona y, de cara al exte rior, se comporta como un Task nor mal y cortiente ‘A continuacion, vamos a saitar al proyecto Portable Class Library. Lola maremos SharedCode.MVVM y en é| implementarernos la base del patién MVM DelegateComand VWBase y VHLO- cator. Nuestro ViLocator necesita fexponer métodos que nos permitan registrar un servicio desde las aplica iones cliente antes de construir él contenedor, quedando como pade mos observar en el listado 2. ‘Aunque en este ejemplo usamos Autofae como conteniedor de depen- dencias, el cambio a Unity, SinpleTot © cualquier otro es trivial, pues los imetodos usados suelen ser muy pare- cidos en cualquier contenedor de dependencias serio, Lo mas destaca does el metodo Regis terType, que rect bbe dos tipos y los afiade al contene- GetcurrentPosition() Grolocator locator = new Geolocator()s locator. DesiredAccuracy = Positionsccuracy High; locator.WavenentThresheld = 103, var result = locator GetSeopositiontsync(); return result.AsTask() AsAsyncOperation(); e public class Vilocator { container containers Containersuiléer builder public Vitocator() ‘ builder = new containerButtder()s } public void RegisterType( yee TTo, Type Fron) ‘this.builder RegisterType(TTo).As(TFron); t public void Butldcontainer() ‘this. tuilder.RegisterTypecivain2¢09()5 ‘this.container = this.builder.Build(); } public vivainnage Mainvlestdel set { return this container Resolve vwoiainrage>()5 dor, es lo que usaremos paraenlazarnuesties View: Models dentro de Ia Portable Class Library can e! componente Wink. A coniinuacién crearemios una catpeta llamada Services que contendra un inter Faz llamado 16psService listacio 3), donde definive ‘mos el método 0 métodos necesatios para abe jar con el GPS, Por ditima, para nuestra Portable Class Library, vamos a crear la ViewModel WiainPage conde hace ‘mos uso del GPS [listado 4). Lo que vamos a hacer 85 afar un parametro al constructor del tipo T6ps= Service que usaremas en un comando que seré invocado desde la interfaz de usuario. Siexaminamos el cédigo tanto del interfaz,como dela ViewModel, veremos que estamos trabajando con una clase lla mada Coordinates, que no pertene. public interface Iopsservice t Task«Coordinates> GetCurrentCoordinates(); d public class Vwiain?age + Wease 4 private Topsservice gpsServices private OelepateComand getCoordiantesCommand; private Coordinates coordinates; public vtainrage(ispssorvice gpsService) ‘this. gpsService = gpsservice; ‘tis, getcoordiantesComnand = new Delegateconmana(GetCoordinates); ? public 1Comané GetCoordinatesComand get { return this. getCoordiantesComand; } public Coordinates Coordinates ‘ get { return this coordinates; ) set this.coondinates = values AaisePropertycanged(); d private async void GetCoordinates() { Coondinates = avait this.gpsService. ‘GetcurrentCooedinates(); ce al API de WinT. Esto sucede porque, como ya hemos explicado, en una Portable Class Library no tenemos acceso a las API de WinRT. Por lo que si deseamos devolver un valor camplejo, tendremnos que crear nuest‘o propio tipo, que es lo que hemos hecho can |a clase Coordinate [lstado 5) ‘Ahora ya tenemos el SO% del trabajo hecho. Por Un ado, tenemos un componente WinkT que acce deal GPS y nos devuelve la posicion actual, por el otro tenemas una libreria portable con la infiaes- public class Coordinates 4 public double Latitude { get; set; } public double Longitude { get; set; } public double? altitude { get; set; } ) axxzs © truetura basica de MVVMy una View. Model que puede ser usada desde, : “i at Windows Store a Windows Phone. ¢COmo compartimos este cédigo entre dos aplicaciones, Peratenemos que ‘cablear'lasapi- — una Windows Store y otra Windows Phone? Para ello nos caciones para que usen la ViewNodel : i i quehemoscreadoyle inyecteneicom- _ Serviremos de tres instrumentos basicos: el patrén onente WinkT de alguna forma ~~MVVM, Portable Class Libraries y Componentes WinRT Comenzaremos con la aplicacién Win: dows Phone & Lo primero que neces: ‘amos es afadir una referencia al pro vecto SharedCode, MM ara el compo- ene WinRT,siintentamos aad una referencia proyecto, obrendremosun —_delenlalibrefaportabie Ahorasoiotene- ViewNMadel necesite accecter al interfaz feror, tenemos que aadir una referen- masqueindicararuestovmLecator.que T6psService. Para elo, en primer lugar Giaalarchivowinnd quesegeneraalcom- use esta implemientacion cuando la vamos afedirellocatoranuesta archi pia el component, lo que funcionars opp xan comahacemos siempre de sin problemas forma ronal istaco 7 Une vez que rengamos esto [[iymenannnonenn En segundo lugar vamos a mod hecho, vamos a crear una carpeta ff etpplication.Resourees> ficar el constructor de Ia clase App Services en la aplicacién Windows ff tater (tpp-xaml cs) para que antes de real Prone anlage coucremosne | REG Te akin aamncerrioay a clase llamada GpsService que imple- ff da la implementacién que hemos mente el interfaz I6psService que hemas definide en la libreria porta. ble llame al componente WinkT que hemes creads (listado 6]. Este seré ‘nuestro nexo de unién entre ambos Il ijpefore navigation, initialize dependencies. hecho de épsService al contenedor de dependencias |listado 8} proyectos Hoera parable y com Seater et thr Oe cee aa ponente Wank ee eee nee a Frese purcesdordecbeereion eeu mtaia Uae crea ete ea clreautadoceicomporenctiniyis fi katate ceonwertimasen la clase Coordinates que puede ser usada por nuestra View!o pb cies messes ese De esta forma, cuando la Viewlio- 4 s-cseice sic «nv ee TopsService cera levacia usa laimple ~ i. 2 mentacion que hemos realizado en Ser eos amet ceie as ee eae sspears eel ee nara dion Windows Phone ofallard el acceso return new Coordinates() oN 9 protected override void OnLaunched{Launchictivatedéventirgs args) 4 J/aefore navigation, initialize dependencies. Vilocator locator =’ (¥iLccator)App.CurrentResources[ "Locator locator, RegisterType( typeof (SharedCode.WinStoreClient Services. cpsservice), typeof SharedCode HWM. Services. 1GpsService)); locator. BuildContainer(}; ee eee ees mo resultado que e 1 (igura 7) presionar el "GetCoordinates’ que heros creado en la inter Usuario, se obtienen las coorder nadas, sin blog Lo mas destacado de e ferfaz de usuario y de foirna tiansparente partir codigo es que no usamos ne proyecto Windows Stare el mpios como puede ser el enlace es el misma. Al ahadir las referencias las clases parciales. ealprayectod GpsService que en Win nente WinRT, siendo at una especie de dows Phone La mayer wraralah ra ‘eApplapp.xam.cs).en pu positive para nues este caso, afiadiremos el codigo al jonLaun- (ra hed (istaco 9, Comosse trata de una solucién compleia,he cre Al igual que ena aplicacién Windows Phone 8, ada un ejemplo totalmen ya solo nos queda crear la interfaz de ‘aha. descargar en dir la capacidad "Location’ ala ap tinuacion padremos ejecutar y obtendremos el mis Enel Mundo tecnoldgico existen muchos caminos. Blackslot te muestra El MAS FACil de recorrer. ELF aCe ei eye: Loreto seni) VASO aea MWSE Mini Web Server Experience Este arliculo pretende introducir.NET MicroFramework u por extensién Microsoft Gadgeteer, evitando las aburridas previes a los clasicos ‘tastanes” de intraduccién teérica. Simplemente quiere sorprenderas, pretence engancharos aportando una jovial frescura que combina diversas tags, a saber: MicroFremework, gadgels, ethernet, ans, procesadores ARM, microchips, electronica, RFC, comunidad, desarrollo en codeplex Conecls con nuestra comunidad ‘inyCLR” en hitp/ /sevecommnet. Electronica? eProgramacion?..UyiSé mucho de una cosa, pero jnada de la cra! Lejos de las profLndas descripcio. nes técnicas que se requieren en cier tas tecnologias y los bostezos que pro: vocan sus ponentes para introducirias, ésta es una de aquellas ocasiones excepcionales en las que cualquier ‘mortal’ con ganas de aprender, puede sumergitse sin miedos en uno de los pocos entarnos donde la electronica se entremezcla con la programacion de td at y donde lo mas primordial se basa en lo mas pequefio y simple. En mitietra dicen "En el tarro pequefia esta la buena confitura’ asi que te invito a conocer Un fascinante mundo repleto de cacharros pro. gramables. Disponernos de un mercado rebosar de pla cas de electnica construidas entomo adi tes plataformasy able tivo. A nivel didéctico pfedominan fos forma {05 Duino' consus tip cosnombres de utes oanimales. En este sentido, nos encontramos poco menos que per- didos dentro de una gigante Torre de Babel en dispositivas catalogades por términas, referen. clas, fabricantes, pracesadores, compiladores a. matos, usos...y un largo etcérera, Pues bien; huyenda de esa gran Torre de Babel, de nuevo C#/VB y Visual Studio se convierten en los interlocutores Unicos para el desarrollo de aplicaciones incluyendo los pro- cesadores ARM que dispongan del ‘port’ para Microframework, Resurniendo,con Visual Stu dio podemos programar un chip, un mévil, un servidor, una estacién de trabajo, un tablet icasicualquier cosa que sea programable! No es fantastico? \/h|,porcietta; casicome siempre, sin hacer mucho ride y propaganda pero estamos hablando de un entor: no Microsoft que es totalmente open source, casa que parece sorprender a més de uno y la verdad es que no sé or qué. En otra acasion me gustaria habla ros de gadgeteer, colo precisar que no se tata de un invento de algun fabri cante de hardware; mas bien todo lo contrario, es un desarrollo de Micro soft Research UK y que generasa mente ha puesto a disposicion de la comunidad, liberdndole hace un par de aos. Esta es una guia deintroduccién para completar de manera abreviada los pasos necesarios yhacerte adepto al control de tu primer MWSE en pocos minutos. Necesitarés: ~ Placa Cerbuino Bee ~ Module Ethernet ENC28 Cable Mini-USB Un equipo que tenga Visual Studio 2010, en cualquiera de sus ediciones (de Express a Ultimate} Microframework ya est dispioni ble en suversién 4 3 para Visual ‘Studio 2012,en laactualidadel SDK degadgeteersolvesté disponible pata laversién4 2, aunque esta ‘anunciada en breve su liberacién pparaVisual Studio 2012. Preliminares Para poder empezar la gran aventura @ y disponer de la plant llas de proyecto, deberemos instalar los SDK de Microframework, Gadge. ter y gadgets del fabricante de ios madulos. Puedes instalarlos desde los siguientes enlaces: — Netmf desde codeplex: http:// netmf codeplex. con/dowrloads/ge ty470705 2 Gadgetter y SDK Hardware hnttp://iamsavecoun net /dounlo- ads /GHISDK4v2_1402.2ip. Este timo te conduciré a un asis: tente con seis apartados diferentes que deberés completar con el tipico "siguiente" "siguiente’ Liegadas a este punto ya pode. mos poner manos a la obra. Comprabacion Todas las unidades centrales de Microframework y Gadgeteer cis ponen de un led normaimente de Calor rojo que indica la presencia de alimentacion. Ademas, acostumbran a incluir un led canocida como ‘DebugLed” o "Configurable Led” que nos permite ullizarla para sera. lizar operaciones definidas por nosotros mismos. Can el propésito de testear que tado esta a punto, desarrollaremos tuna aplicacién con un temporizador de un segunda para poner a parpa dear dicho led nada mas conectar nuestro cerbuino al USB. El sistema nos instalard el driver "WINUSB" y a partir de ese punto, estamos en dis posiciGn de enviarle nuestro primer programa ‘Algunos de nosotros hemos rec bdo el merecido apado de "Blinking S oN e mane’, lo que es fécil de entender des pués de repetiry repetir el desgasta- do ejemplo de poner un led a parpa- dear en las intraducciones a Micro. framework. Pues bien vamos a ello, —Iniciaremos una instancia de Visual Studio. Nuevo proyecto>Gadgete er>NET Gadgeteer Aplicaction (NETME 4.2) (figura 3) Figura 3 Aceptar@ — Cusdro de HerramientassGad geteer MainboardssFEZCerbui noflee figura 4) Pesiana Program.cs 0 Pro- sran.vb (lstados ly 2) Los siguientes pasos.,.0s de siem pre: (F5] y jartancando! Antes de pulser [F5] Verificar que en las propiedades del proyecto> NET Micro Framewort. tiene seleccionada ‘USB'como.trans. porte y aparece el 'Cerbuino”en Ia lis 1a de ‘Device’ figura 5} Al iniciar la depuracion "debug Visual Studio enviaré el ensamblado al Ceruina, iniciaré el mado “debu y finalmente lanzard la ejecucion de ‘nuestro ensamblado. Una simple ins peccidn visual demostrard nuestro &x to sielled est4 parpadeando, en otro cas0..ja los foros! © Esta simple introduccién nos pondra en dispesicién para poder afiontar nuestro siguiente reto, pues lo tendremos todo dispuesto para nuestra Ween TCP / IP stack para NET MicraFramework - Desde nuestra Open Community Este es uno de esos trabajos que poclemas encontrar en nuestra camus nidad de op de sorprenderme por su gran valor educativo. A menudo, hablanda con diversos desarralladores (sobre todo si son de las antiguas), me parece detectar una cierta nostalgia que rece la de los espacios de nombres porque abstraen la pila del lenguaje y termi nan sintetizando complejas algorit mos en una sola linea. En tal sentido, ste es un verdadero ejemplo de cémo podemos cimentar nuestro interés y conocimiento en desgranar amas que cliculan por los cables y materializan la pila de TCP/IP para ‘Su posterior implementacién y estu dio, esa si.. de forma ‘administrada’ Para finalizar, la curioso de este proyecto es su promiscuidad por ser fruta de la observacién ‘de la que cir source y que no deja ula por los cables" mas que dela del consorcio. Aqui tenes el enlace implementacisn de los farosos RFC https//nip. codeplex. com Con Visual Studio podemos programar un chip, un mévil, un servidor, una estacién de trabajo, un tablet... jcasi cualquier cosa que sea programable! ¢No es fantastico? Una vez lo tengas descargado y descomprimido carpeta nip_v.03} ~ Abrir el proyecto NetworkingSer- — Dentro de la Solucion>Estable- cer proyecto de Inicio>Netwar- ingExample. ~ bri a clase WebServerPragran, Para que funcione en tu LAN, debes efectuar tes ajustes manuales, una de ellos es asignar una IP (més adelante, cuando seas experto, pue- des dejar que la adquiera de un DHCP, pero inicialmente sera mas facil darle tuna conacidal, |.En la funcién "Main” asignare- mos nuestra IP Static adecuan- do el cédigo del listado 3, Como podéis ver en nuestro ejemplo, hemos asignado ta IP 105095 2 Indicaremos a nuestra pila que la interface Ethemet esta conec- tadaa nuestro cerbuino através 2101 region Static IP example Networking. Adapter.EPAddress = 50,95" Tobytes(); Networking. dater.Gateway = "10.5.6.1" ToBytes(); Networking. Adspter.DonainlaneServer = Networking. ianter. Gateway; Networking. Ater-DonairManeServer2 = "493.147. 208.12" ToBytes(); Networking. dsoter.Dhepbisabled = trues endregion del petfil Cerb40_ENC28160" de la siguien. te forma Networking. danter.Start(new byte] { Qxsc, Ox86, Oxta, O00, @x08, Orde }, ‘wip’, 2, Importante: conectar el module ENC: 1 de nuestio Cerbuino bee. stro cable 5) Sin mas preambulos, conectar nut USB del cerbuino y de nuevo pulsare fete Sterne bel] 4 Bee, i ee, Ge, Gi, 9, Meigh Iee tach ter ng lest smtoecldP activ + pe st fae ee ane Mapa mga Paha (Sikes sotetoeeaoreans sve on ort th. he tee eb seer rt SEE arte) escesoesc0ny Una vez iniciada la depuracién, podremos veri ficar que nuestro MIP esta rodando correctamen: te. ing contra la IP estatica fjad: anteriarmente,y en tal caso, ya pocremos atacar Auest1o "Mini YO" en el explorer con http://mip. mip - A Managed TCP/IP Stack iBienvenidos a los mini web Servers! w sei ee, Professional C# 2012 and NET 4.5 Cristian Nagel, Gill Evjen, Jay Glynn, Kari Watson y Morgan Skinner errr and NET 4.5 Una de las obras sobre las mis recis ones de NET Framework y el lenguaje C## que ha obenicio la mas ata valoracion de los = autores) ya habla cons ocimiento similat, por lo que dedica muchos apart forma asincrOnica de trabaja y (odo ja magnitud de a logics in CSS3: The missing manual David Sawyer McFarland + Editorial ORe! online MacWorld, D: 5) for Financial Markets Programming Windows: Wrting Windows 8 fies] Daniell. Duffy y Andrea Germant ‘Apps With C## and XAML BB cy Charles Petals 87804700 pends ee Buenas practicas de codificacian Para capas de acceso a datos de aplicaciones (y IV) Este es el ultima episodio de la serie de Buenas praciicas de codificacion para capas de accesa a \Jatus, Hasta el momenta se han visto buenas prédicas con FSOL y el mes pasado empezamos 3 hablar sobre los ORM y Eniily Framework. En la edcién anterior vimos cémo esta tecnologia nos perma de una manera muy sencila realizar operaciones de Insertién, borrado y moxiticacion de datos. En esta Utima edicion hablaremos de las diferentes alternatives a la hara de realizar cansuas sobre datos y veremas cul es la mas éatima, een acs Las consultas son uno de ios elementos mas conflctivas en Entity Framework. Se dispone de gran cantidad de alternativas para realizar consultas de datos, a continuacién enumera- mos [os distintos métodos disponibles | Modelo de abjetas/entidades a, Eager Loading b. Lazy Loading Entity SQL LINQ Native SQL Pracedimientos almacenados En este articulo vamos a desecharla opcion de Entity SQL, puesto que se trata de un len- quale intermedia que fue disefado para que os desarrolladares Ia entendiesen mejor que Enrique Catala Banus enrique Puig Nouseties NernarenSoidQ MCT Mcosof Cec ia rly MAP Mast Acie Professional 2022 ara Pat'amEngneeren oleQ MCP de SQL ‘Senery MAP 2002 ¢! T-SQLEl problema es que sigue teniendo las desventajas de trabajar con cadenas de tex- to y de no obtener errores en tiempo de eje- cuci6n, La realidad es que normalmente los desartalladores optan por utilizar LINQ, que proporciona un nivel mayor de abstraction y éstesies un lenguaje que los desarrolladores conttolan y con el cual se sienten cémodos programando Escenario Para realizar los siguientes ejemplos de consultas, vamos antes a defini el resulta- do que se pretende obtener con las consul- tas. En este caso tenemos una base de datos que registra clientes, empleados y ventas. Lo que queremos sacar es el top 10 de ‘empleados que hayan realizado al menos una venta inferior @ 10 euros. Hay que asu- mir que los clientes son clientes porque han realizado al menos una compra, Madelo de abjetos El primer método es mediante el modelo de objetos, Los desarralladores pueden utili- zar las calecciones de entidades para nave. Coneste métodolo que hacemos es: La realidad es que normal- I Navegar a través de todos los sevect mente los desarrolladores lentes [extents]. [custouertD) as -S 2. Para cada cliente carga sus ven dean optan por utilizar LINQ, que las menores a 10 euras. Si el [extent1]. [Conpanynane] AS i i nlimero.es mayer que Olo aa {conpanynane), proporcionaunnivel mayor nameoesmnay tet cer oe contacttnber] de abstraccién y éste si es 3.Dewetve los 10 primeros dela eytenaytenticentact] as i 2 lista [enailContact] un lenguaje que los desa: a rrolladores controlany con Podemos ver las amadas-en el [extent] el cual se sienten cémodos SOL Profler‘eria figural Tenemos la primera lamads en el programando listado 2. gatlas mediante bucles y aplicar la ee l6gica que deseen En Entity Frame fz ibaan renee Anas! sg Uoartt—toend wanna work existen dos variantes, Eager —s roa oe Loading y Lazy Leading. A traves del = : pea Tesi ejemplo explicaremas en que con. : tn ee Iii ieore al siste cada una de elas Ei modo de : SSS Stal trabajo por defecto de Entity Frame- . ‘era work es Lazy loading tet a ae Lazy Loaeng ese Para resolver la consulta especifi- oa oa eae cada en el escenario, pademos usar un cédigo came éste (listado I} So are ot ee public Listetesobject> getCustoners_LazyLoading() Con esta llamada se carga toda la { coleccién de Customers para el bucle Listenesobjects r= new Listenesohjects()s foreach. El resto de lamadas generadas sson de este estilo que podemas ver foreach (var ¢ in ctx. Customers) enel istado 3 Para cada uno de los clientes, car- «G2 sus ventas en la coleccion de ven- aU Gal Esha ON Coraincaaeee Copanreiar® tas de la Entidad cliente. Esta colec Contacthunbers<.Contacthunber })5 cidn sera recorrida a posteriori para comprobar las ventas inferiores a 10 euros. Esta consulta se lanza para cada uno de los clientes, 1 Take( 12) ToList(); De moda que can este cédigo hemos creado sin quererlo, algo muy pparecido aun cursor de lado del clien- te Este es el furcionariento del lazy using (ConpanySalesEntities cteenew ConpanySalesEntities()) Sf (¢,Sales_snall.Where((Jtea) => Sten Anount < 18).Count() > 8) { oN 8 ‘exec sp_executesgl N'SELECT [Extenti](SalestD] aS [Sales1o], [extenta] [orderoate] AS [Orderdate], [extents]. [ForecastPaynentDate) AS [ForecastPaymentDate], [extentt].[custonert0] AS [custonertD], [extents]. [enployeet0] AS [Enployeet], [Extentt].[Anount] AS [Anount] FHOM [dbo] [Sales_snall] as [Extent] WHERE [Extent]. [CustonerID] = gEntitykeWaluel’, WEntityceylaluet int? @éntitykeyValuet=1 loading, Cuando necesita recomreruna —_diciéndole a Entity Framework que coleccién de datos, sinola tiene en cuando cargue las clientes en la colec: memoria cargada automaticamente _cién de customers, cargue también lanza una select y secargalos datos las ventas de cada uno de ellos. Esto para que sean consumidos, lo pademas hacer cuando ya sabe. mos de antemana quevamosa nece: ager Loading sitar estos datos, Con este sutil cam: bio, ahora el tenemos que le cédigo Laalternativa allazyloading Con- _T-SQL generado es el siguiente siste en especificar explicitamente mediante codigo que quieres quelos datos se precarguen antes de consu- mirlos. En este caso el cOdigo que daviaasi owe 2. proter Eager oeding public ListeRes0bject> getCustoners,EagerLoading() ListeResObject> r = new ListeResObject>();, using (CompanySalestntities etx = new CompanySalestntities()) foreach (var ¢ in ety.Custosers.Inclide("Sales_Sea13")) { {if (¢.Sales_small.Where((iten) => ‘iten.amount < 16).Count() > 0) sAdd(new Resobject() { CompanyNane .Conpanynane, ContactNunber = ¢.ContactNunber }); return p.Take(10).ToList(); y En amailio hemos resaltado la par- Una unica consulta que trae toda te correspondiente al eager loading. la informacion que podemos ver ene! Como se puede abservar estamos _listada 5 LINQes un lenguaje de pro- gramacién que agrega con- sultas nativas semejantes alas de SQLalos lenguajes dela plataforma NET Esta consulta es una traduccién automatica realizada por el propio. Entity Framework. Se puede obser- var que no es una consulta que escti- biria un DBA/DBD. La légica que se puede resolver con una consulta mucho mas limpia y sencilla, pero el traductor de Entity Framework lo hace asi uNg LINQ (Language integrated Query) es unlenguaje de programacion que agrega consultas nativas semejantes alasdeSQL aloslenguajes dela pla taforma NET (VBNNET y C##). LINQ define operadores de consulta estan- dar que permiten a lenguajes hab tados con LINQ fit, enumerary cre ar proyecciones de varios tipos de colecciones usando la misma sinta~ is, Tales colecciones pueden inciit vectores (arrays. clases enumerables, XML conjuntos de datos desde bases de datos relacionales y origenes de datos deterceros En este caso Entity Frameworteha aprovechado este len getCustomers_LINQ() da por LINQ es una consulta ad-hoc, Lstetesobject> r= nev Listetesobjecto()s este tipo de consultas ya vimos en la parte ly 2 que podian tener una serie sn (Capaylsnttis et =o Cassis) Getrplcaceres peuseisies parsed servidor de Base de datos. Netive SOL EI método de Native SQL consis: te en lanzar una consulta Ad-hoc. Entity Framework nos deja la posibi- foreach (var ¢ Sn g.Take(20)) lidad de ejecutarla consulta que dese ems a través de una cadena de rsada(ven fes0bject() { Companyane = c.Conpanyane, Contacthunber = c.contacthunber }); caracteres, Para nuestro escenario tendriamos el istado 8. Se puede observar resaltado coma mediante un cadena de caracteres definimos la consulta que queremos ejecutar contra el servidor, se trata de una consulta ad-hoc e public Listenesobject> getCustoners Native SQL() € Listenesooject> r= new ListeResdbjecto()s using (ConpanySalesentities etx = new ConpanySalesentities()) 1 = etasexecutestoregirycies0>e>(query)-ToList(); ? return ry Sianalizamas el profiler nas apa rece exactamente la misma consulta que hemos enviato: select top 18 Conganyaane, Contactiunber From Custoner as ¢ ‘inner join Sales as s on s.CustonertD-c.CustonerID where s.snounte1@ Procedimientos almacenados Por ultimo tenemos la apcién de utilizar procedimientos almacenados con Entity Framework, En las prime- ras ediciones ya vimios y comentamos las ventajas que ofrece la utilizacién de procedimientos almacenados. Entity Frameworks permite mapear procedimientas almacenados de una manera muy sencilla y genera entida. des para almacenarlos resultados dela ejecucion de dichos procedimientos mapeados, Para verlos procedimientos mapeados podemos abrirelmadeloen \VS2010 yenel’model browser’ vernos, los procedimientos almacenados que tenemos mapeados: Figura 3: Procedimientos mapeados RciConpleted El cOdigo para utlizar este proce dimiento seria el siguiente: Cuando mapeamas un procedi miento, podemas acceder a él direc. tamente desde el modelo tal y como se muestia tesaltado en amarillo, El resultado dela ejecucién del proced miento se almacena en una entidad que se genera cuando se mapea el procedimiento. En este caso la enti- dad se llama EFPracediniento Result. Siejecutamos este cddigo, en el pro- filer nos aparece la sentencia que vyernos en la figura 4, Se abserva claramente como se ejecuta le pracedimiento. Si observa mos la definicién de este procedi- miento en la base de datos, tenemos e cédigo del listado I Como mapeer un procecimienta amacena- doen er? En este apartado vamos a defi nir paso a paso como mapear un procedimiento almacenado a un modelo ya existente de Entity Fra. mework. Partimos del madeloque puedes ver enlafigura5. public ListeétProcediniento Result> getCustoners_ SPC) { ListcerProcediniento Result» r = new ListetFProcediniento Result>()s Using (Conpanysalesentities etx = new ConpanySalesentities()) { foreach (EFPracediniento Result ws in ebxiEFProcedintento()) { adds); y return v3 y Figure 5: Cenves con EDM de ejemplo Para mapear el pr EF permite mapear procedimientos |) hay que cequirson almacenados de una manera my Sere |. Boton derecho sobre el canvas y pinchamos cillay genera entidades para almace- en update model from the database \cedimiento, los pasos que nar los resultados de la ejecucién de dichos procedimientos mapeados USE [ConpanySales) Sealy Reset Format , 2 svc [ste Object: StoredProcedure BP tare Dota {bo} [EFProcedure] Script Date: 9/27/2012 Saran an seiety SET ANST_MULLS OW @ SET QUOTED_xDeNTIFTER ou ry CREATE procedure [4bo].[EFProcedure] vaeate select top 10 Companynare,ContactNumber Seinen ee fron Custoner as ¢ {nner join Sales snall as on s,CustonerIDec, ustoner1D there s.Anount le ‘Coe Generac Io. 2, Seleccionamos de la lista de procedimien: tas el/los procedimientos a mapear oN ° Be ege, Simca Sen oe 3.Pinchamos en Finishy yalotenemos mapeado. 4, Entramos en el model browser donde pade. mos ver el procedimiento mapeado ee aaa, 5, Boton derecho sobre el procedimiento y pin chamas en Add Function Import 6 Nos apareceid el ment de Add Function import yaqui pedemes especificar el esuiltaco dal po. ‘cedimiento y crear incluso un tipo de datos. Figura 10 7. En este caso pinchamos en Get Column infor. mation, puesto que devuelve una serie de columnas que hay que agrupar en un com= plex data type — See sos; Cente [te Coen d cenerateDetebove om Medel. X pete mal \[oxareceieot = Up Hoel ro tabs. . . Cote ert ——e eke [i asceoes ar Ca nous 8 pinchamos en "Crearenew camplex data type Yyautomaticamente nos marca el retorno del procedimiento como “complex y no sugiere Ln rombre para este nuevo tipo de datos com- plejo. mest an ere Pern 9, Pinchamos en OK y ya tenemos el procedi- miente listo para utlizar tal y como hemos mostrada en la seccién anterior. Comparative de rendimientos Taly coma hemes analzado alo largo delat culo, Erity Framework provee una serie de dstin- tos meétodos para consulta datos. En este aparta- do intercaremos clarificar cul de todos ellos es mejor utiizar en cada caso y ademas comparare mos Sus rendimientos, asi sabremos las implica- cones que tiene vlizar un método U ov. Tias ealizaruna prueba de !Oejecuciones con secutivas de cada método obtenemos los estita- dos que puedes ver en la figura 13: ‘Se puede observar como las técnicas de Eager Loading y Lazy Loading son las técnicas que mas latenciatienen.Se obtienen latencias cuperiores a los 4 y5 segundos respecivamente menias que Native SQL, LINQ y Procedimientos almacenados estén por debaio del segundo. \Vamas ahora a eliminar Eager Loading y Lazy Loading de la ecuacién y vamos a ver cémo que. dan los resultados: En este caso vemos como_os tiempos son rela- tivamerte iguales, siendo LINQ la que mas tarda en la mayoria de los casos y sequido de las técni cas de Native SQL y Procedimientas aimacenados ue setian las mas optimas, Por lotanta, con estos resultados y con tado lo que hemos analizado en anteriores ediciones pademas concluir que la mejor opci6n para realizar consul tas utlizanda Entity Framewortzes mediante la uti- lizacion de procedimientos almacenados. LINQ tie ne la limitacion de las traducciones del ORM y de las consultas ad-hoc, al igual que el método Nati ve SQL que tambien tiene el problema de las con- ssultas ad-hoc. tl Embarcadero RAD Studio XE3 [y Ill) HTMLS5 Builder Este mes dedicamas la columna TET be) ala mas reciente adicién 2 RAD Studio, HTMLS Builder, un Breve description. Suite integiada de ‘cesarolio queincluye ecitores,compila- entorno muy versatil para el ‘doves, mbliplesibrerias, moves de ges- tion de datos, eniazadores, depuredores ‘y otras hemramientas de productividad ate clflerentes lenguajes y marcos de trabajo: Delphi y Cr+ Buller (codigo naivo}, Prism (NET Framework y Mono) y HTMLS Builder (HTML5/lavaScrip) bo aoe selene Fabricante; Embarcadera Technologies (San Francisca, USA) Distribuidor en Espaiia. Osnysot internacional Web http: //wm.danysoft con. Teléfono: 134) 916638683 desarrollo de aplicaciones web y aplicaciones maviles para En nuestro n* 99, comenzamos la diseccién dela mas eciente version |) Alcieredeesta eccibn Embarca- dela suite de herramientas de desa- |) dero anunci la disponibiidad de rrollo integradas de Embarcadero, f)_ la siguiente version de la sulte, RAD Studio XE3 y en dicha entrega tere Che aor ose ‘nuesito;proximo ejemplar presen yla siguiente presentamos los pro [W taemos as principalesnovedades ductos que ésta ofrece parael desa- [que la nueva version incorpor. rrolio de aplicaciones y servicios en digo nativo (Delphi y C++ Builder] yen cédigo manejado (Prism), En esta HTML Builder es una herramien: ‘ocasién nos centraremos en la ms ta realmente poderosa, que permite reciente incorporaciGn a la suite, _crearaplicaciones web y aplicaciones HTMLS Builder, un entorno muy moviles a partir de una hase de cédi versatil para el desarrollo de aplica- go nica desarrolada alrededor de los, ciones web y méviles para multiples estandares de la web (HTMLS, CSS3, plataformas basado en la utiiza- _JavaScripty PHP) y ponerlas a dispo- Cidn delos estandares masrecien-_sici6n de las usuarios tanto a través A ccieve Heansndez ces emanados del W3C,asicomo de la Web camo de manera ‘nativa’, de otras herramientas de amplia haciendo uso de las tiendas online popularidadien el mundo deldesa- que ofiecen ios fabricantes de ios prin- rrollo para la Web. cipales sistemas operativos méviles come Apple, Android, BlackBerry y Windows Phone. Es ademas una hertamienta de desarrollo visual, que hace posible alcanzar un alto grado de praductividad a la hora de crear aplicaciones que offezcan interfaces de usuario modernas y atractivas. Ente las principales ventajas de HTMLS Builder cabe mencionar las siguientes: + Cree su aplicacién una vez y desplié- guelaenmiltiplesplacaformasweb y méviles. Desarrolar versiones indivi- duales de una misma aplicacion para los diferentes navegadares web y maviles, asi como para las diferentes plotaformas y Factores de forma dis Ponies en el mercado es algo total- menteimpracticable Con HTMLSBull der, usted podid crear un cdigo tin: co basado en HTML5, C553, JavaS- cipty PHP.y generar soluciones para los diferentes sistemas operatives rmbviles, dispositivas y navegadores web con un solo cc + Alcance una alta productividad en ‘sus desarrollos gracias aun entoro de desarrollo visual unficado basa- doen componentes reutiizables Gia Cias a los cientos de componentes reutiizables incorporados de serie en HIMLS Builder, practicamente no tend siquiera que preocuparse de aprender un nuevo lenguaje de pra gramacién 0 cémo interactuar con complejas API Usted simplemente personalizaré esos componentes, segiin las necesidades de su aplica ion, y ellos se encargarén de comu: nicarse con jQuery u otras librerias de JavaScript por ejemplo. + Intege a disefiadoresy desarallado- res en un marco de trabajo colabora- tive HTMLS Builder potencia la crea inde experienciasde usuario moder- nas y dindmicas a través de la inte- gracion de los estils y animaciones de C553 y los temas moviles de Query, asi como de estlos de intr. faz de usvario personaizados Lapre- sencia en el producto de herramien- tas visuales para la ceacion de ani maciones C553, asi como de diver. sos Componentes sumamente ities, como son los destinados a habilitar la utlizacién del Canvas de HIMLS, elaudio y video ola geo-localizacién, simpifican en gran medida laincor- oraciénatas aplicaciones de las fun- Cionaldades que los usuarios espe- ran de los disposiivos acuales. + Desarrolle aplicaciones web ymeévi- les independientes 0 corporativas: Con HTMLS Builder es posible cre artanta aplicaciones sencilas comma complejas; tanto aplicaciones total- mente auto-contenidas y que ope- ren 100% en e! lado cliente, cara aplicaciones que generen conten dos dindmicos desde un servidor, desplegando la parte de servidor de la aplicacion en cualquier servi dor web habilitado para PHP. Lainstalacion de HTMLS Builder figura JJesdirectae intutivay las fcherosnece- sarios para la instalacién se ofecen de manera separada, de modo que ésia puede lanzarse independientemente de lainstalacion delos demas entomos de desarallo que companen|a ampli su (ede desarrollo de Embarcadero Es de sseftalar que el producto offece la insta- lacion opcional de dos componentes adcionales HIMLS Builder Andioid Tools Piojecty TeeChart HIMLS; la seleccidn de la primera de ells lleva consigo la instalacon de diversas herramientas adi- Cionales relacionadas con el desarrollo de aplicaciones para Android, come el SDK de Java elpropio SDK de Android (figura) weg ems mater (EEtes me Acantinuacién, seguiremos breve mente el praceso de creacion de una sencilla aplicacion movil con HTMLS Builder. Por necesidad, nuestra pre- sentacion sera simple, y se recomien da al lector que se dinja a los crecien tes recursos sobre la herramienta cis- ponies enla Web Por ejemplo, la fe rencia [3] apunta a un video ilustrative delas posibilidades de HTML5 Builder creado porelider de suequipo de des- rrolio, José Le6n a quien enwrevistarnos en este misma elerpiat y [4 hace refe- rencia a un completisimo video del legendario David Intersimone que muestaa la creacion de una aplicacién mévilcon HTMLS Builder y su desplie. gue sobre iPhone, iPad y un teléfono basado en Android. 2101 101 s. a idea central del entorno de rollo (figura deof usuario las opciones que tiene a su isposicion en cada momento, sin necesidad de que tenga que desple- garment das de didlogo espe cializ indo en a opcién New’, aparecen los posibles tipos de proyectos que se pueden desarrollar con HTMLS Builder (figu plicacion mévil de cliente es ina aplicacion mbvilb fe cliente (HTMLS, spect ficamente para dispositivos mévi criptly ciseria les. A diferencia de las aplicaciones naviles de servidr, na necesitan apoyarse en un servidor web para psitivos cin qh ea obligataria. No abs- ante, estas aplicaciones pueden alojarse en un servida plicacién web mévil es un aplicaciér logias w JavaScrip arse en un navegador. A diferenc elas aplicac feb de servidor ecesitan apoyarse en Un Seni web para fi igualmente podrian alojarse en un servidor web para su distribucion. 2 aplicacién mévil de servidor es jese ejecuta or y que ha sid para eje vos moviles. Una ‘otambien puede ins \diente en la mayor'a de los moviles. fequerira, por Supu Internet para func Bullder offece toda: des necesarias no solo far el codigo a desplegar dinamica: rente en el cliente [por ejemplo, u sibllidades p gene- ——_dindmica de céai izando AJAX), sino también pata la conectividad con bases de dato Enesta seccién desarro apoyandose en PHP. cila aplicacion mévil de cl Por ultimo, una aplicacion web de leque elegiremos la primera del servidor es una aplicacion web que _tllas. Al seleccionar la o se 1a desde un servido! it elcaso antetion, HT Builder offece un amplio espec mientas que utiizamos en nuesto dia a dia [Visual Studio 2012, por ejemplo, Enla figura §, elector pod reconocer la Vista de estructura (Siructure View), que describe la estuctura de la pagina disefiando, el Cuadra de Toot Palette} desde el que se arrastran sobre el lienzo de disefia icons que representan componentes que se desea utlizar en la interfaz de usuario de la aplicacion,y el Inspector de objetas (Object Inspector que permite poner a puntc los valores propiedades de los deseados para abjetos arrastrados, Coma es habitual, el entorna nos ofiece la posibilidad de saltar ala ven tana de cédigo para implementar los eventos asociados ala interfaz deusua io Enelcaso delas apicacones de cen te,el lenguaje en el que deberemas implementar las acciones es lavaScript; Pata nuestra ejemplo, hemos utlizado elcédiga que se muestra en el listad | {que selecciona al azar uno de los refta nes que se almacenan en el array quo tes ylomuestraen el contol Meno Note seelestlodelaasignacion derivado del hecho de que HTMLS Builder integra Query para faciliar el acceso a los obj tos dela pagina U1 Tis is where you can place function getRandontnt (win, max aplicaciones moviles para miltisles plataformas utlizando una base de Cédigo comtin, Recomendamos al your dnscipt cote return Rath.floor(Rath.randon() * (max - win + 1)) + ming Function auttentclick(event) { var quotes = new Array( SU work and no play rakes Jack 2 dull boy", ‘Bevare the fury of a patient nan‘, "beauty 1s in the eye of the beholder"); var index = getRandoarnt(@, quotes.length - 2); '$(enot) tml (quotes [index}); A lo largo de este articulo hemos presentado en lineas muy genera- les las principales caracteristicas de HTMLS Builder, e! mas reciente inte grante de los ‘paquetes’ de herra mientas de desarrollo que compo: nen Embarcadero RAD Studia XE3, que cumple con creces con su obje tivo principal, el de hacer posible el desarrollo de aplicaciones web y lector que descargue la version de evaluation desde la pagina web de Embarcadero y se convenza por si mismo de las enarmes facilidades que esta novedosa herramienta pone a su disposicion a [1] Descarga de la version de evaluacion de Embarcadero RAD Studio XE3: https: // downloads .enbarcadero.com/ Free/rad_studio. [2] Documentacién sobre HTMLS Buller ht tp:/ man enbarc ero. con/products/HTMLS- Buflder [3] Video demostrativo de José Le6n sobre HTMLS Builder http://w youtube. con/wate haverarzi@6h7A. [4] Video demostrativo de David Intersimone sobre HTML5 Builder: nttp:// vu. youtube. con/watch?v=ec ayl T9P 101 AppDomains Este mes demos respuesta NM @ una Unica pregunta sobre .Cémo puedo sustituir una DLL de una aplicacién que se encuentra en ejecu- céma sustitur una DLL de una cr aplicacién en ejecucion El autor de la pregunta la expresaba Comprendemas que no todos los de la siguiente manera [sic] [Jo q _desarrolladores de aplicaciones tie- necesito es q elformulariog estacon- nen tanta cultura como seria desea- tenido en ia dif esta siendo ejecutado ble, yen ese sentido se entiende que por el ususario y al estar siendo eje- _ocasionalmente se escape alguna que cutado eso esta en memoria supon- otra falta de ortografia. Pero ya que 190, 05e0 yo logroreemplazariadilsin los que responden alas preguntas lo re compitar el proyecto solo copio y hacen desinteresadamente y sin reci- pego a difen ef bin donde estan tads bir ningtin pago a cambio, lo menos ‘mis dl, supongamos q para cadafor- que puede pedirse a quienes plante- ‘mulorto use una dil y g el formuiario _anuna pregunta es que por lo menos que esta ejecurando abviamente de lean lo que han escrtoy se aseguren tuna di fa remplazo pero sin cerrar mi de que explica su problema en una proyecta y cuando abro atra vez mi forma razonablemente comprensible. form desde mimenu sigueloanterior Bueno, pues después de esta no dig e actualizedo, me dejo enten-_ pequeria “queja’, pasemos a respon- der osea quiero saber si hay ta forma der ala pregunta. galcerrar mi form me bone ing esta Una vez que logramos descifiar en memoriay g carge de fa dil actua- 1a partafada original, egamos a la teada Ly" conclusion de que se trata de una ‘Aunque usualmente en esta aplicacién de escritoria que contie- columna solemas parafrasearlaspre- ne algunos formularios definidos Quntas que introducen los usua- dentro de una DLL, y que se desea rios en los foros, en este caso he poder sustituir la DLL sin cerrar el iaweita paviscion optade por citar literalmente el programa con el fin de que la proxi- Tokecrycralmnigeene | ~——«ensaje orginal para darallector ma vez que el programa abia el for- Redactor dedM yprcfesarde Ala una idea del tipo deredaccionala = mulario se muestre la nueva version: Wentiraece quenos enfrentamos conmasfie- programada dentro de la DLL que cuencia de la que cabria esperar. acaba de ser sustituida Conseguir este abjetivo en.Net manece todo elratoenmemoriayno ——Necesitamos, pues, busear una esmascomplicado de loque parece. podemoshacerqueelfommulariocam- manera de descargar de memoria Una limitacién conocida de Net Fra-_bietrascambiarlaDLLsincerrary vol. esas DLL Pero ya hemos dicho que mewortzes que una vez quese carga vera iniciarel programa, 1n0 es posible hacerlo sin cerrar el Un ensamblado dentro de un domi Un remedia seria cargarel formu- dominio de aplcacién y cerrar el domi rio de aplicacién, el ensarnblado per- _lario desde otra DLL distinta. Si afa- io principal supane cerrar la aplica manece cargado hasta que se des-dimos en disco una DLL y la carga- cin, cosa que expresamente se pedia carga el dominio; no se puede des- mos mediante Assembly.Load, pode- _evitar en la pregunta inicial El reme- cargar el ensamblado sin cerrar el mos usar reflexion para llamar al for- dio consiste en crear otro dominia de dominio completo, mmulario contenidoen suinteriory éste _aplicacion, cargar en él la DLL, y Iue- Un dominio de aplicaciones un se abriré con independencia de que _gocerrar ese dominio completo cuan- proceso liviano creado porelCLR de enmemotiatengamos yacargada otra do se cierre el formulario. NET, que funciona como unidad de DLL can un formulario del mismo —_Ellstado 2presenta muyesquemd: aislamiento dentrode un proceso cre. nombre Fllistado1 presenta un ejem- _ticamente cémo funciona la creacion y ado por el sistema operative. Actua plo de cdmo se podria realizar esta descarga delos dominios de aplicacion, comocontenedor lagico permitienda carga Liizando la clase AppDonain que varios ensamblados se ejecuiten dentro de un mismo proceso pero quedando aislados entre side forma {/oentro del Forat: que los ensamblados de un dominio (etan systen.neFlections no puedan accederalosrecursos de using System.10; tro dominio. Mowe Enelasoqierosocpanenk ff) S7ink rectus = Aseny cetvertmssnay) sae cin es un exe compiiado con Visual II sening dllAcargar = Path.Coubine(carpeta, “MiDLL2.<1)" Studio Lacabeceradeleecuiablecon- J Assenbly a = Asscebly.LoadFile(dl1ACargar)s tiene una pequera cantidad de cédign ff Type t = a.GetModules() [0] cet Types() [2]; Bocuse vccssCaccny: | Momsen Ceti hmretermlaet ne" (soret.All) para cargarelCLRc® gt. tnvoke(null, nul); Net y a continuacién crear un Unica dominio de aplcacién. Dentro de ese ff //Dentro del Fora2: dominio se carga un ensablado que ff MPl4c vartial class Fora? : Forn resuta ser el rismo que estd compila- public static void MostrarFormlario() do dentro del exe ders de a cabece t raque hemos mencionada Ese ensarn: Forma # = new Form2(); blado, al ejecutarse, puede a su vez car- cee) gar ottos ensamblados, bien sean del propio Net Framework (el minima imprescindible es nscorlib. dll) 0 bien DLL programadas pornosciros mismmos, Todos esos ensamblados perrma- necen cargados en memoria, dentro del mismo dominio de aplicacin ini El inconveniente de trabajar de cial y no se descargan hasta que se estamaneraesquesirealizamoseste Wi sain 4 = sppoomin descarga el dominio de aplicacionque proceso repetidamente, todas esas ‘reateDonain("iDoninio”); los cargd. ¥ en el casa de un ejecuta- DLL que vamos utilizando se van que- 4. toad{ contenido); blede Windows el dominiono sedes- dando cargadas en memoria, con lo ff //Invocer agut los contenidos de “e” op0onain.Unload(d); carga hasta que se cietrala aplicacion, que la ocupacién de memoria de Esto implica quela DLL queheroscar- nuestra aplicacion va aumentando gado para presentar el formularioper- _(indtiimenre) a lo largo del tiempo, 2101 @ ‘Aunque a primera vista parece muy simple, en la préctica la llamada Senos va a compiicar Un poco, debi- do precisamente a la caracteristica de aislamienco entre dominios que hemos mencionado antes. Esto imp: de que llamemos directamente a los métados del ensamblado que aca- bamos de cargar,y que haya que recu rrit a mecanismos de comunicacion entre dominios de aplicacion. Las API de NET son muy com- pletas y diversas y nes proporcionan varias formas de realizar estas opera ciones tales como una llamada al método DoCallBack pasando como argument un CrossAppDonainDeLega- opdonain 4; private void CargerFormularto() { te. bien usando Createtnstancetn- nwrap. Estos métodos requieren conocer de antemano los tipos con- tenidos en el ensamblado al que la- mamos. Pero en nuestro caso, dado que se van ausar ensamblados nue os ahaciios con posterioridad a la compilacién del programa, varios a suponer que no se conocen esos tipos, por lo que usaremos refiexién para llamar alas nuevas DLL_E! lista~ do 3 cantiene nuestro ejemplo. Como primera observacién, nove se que tras llamar a CreateDonain hhemias usado el metodo Load para car- gar nuestra DLL en el dominio. En ci- cunstancias ordinarias indicariamos string rutatctual = Assonbly GetEvecutingassesbly() Location; string carpeta = Path.GetDirectoryNane(rutaActual); string dllACargar = Pt).Conbine(carpeta, “MiDL1.dil"); byte] contenido = F1e.ReadAl aytes(dl1Acarger); 4d = App0onain.CreateDonain“AiDorinio”); d.Lead(contenido); Assenbly a= null; oreach (Hsserbly at in d.GetAssenblies()) 4f (a1. FullNane.startsuith("MiDLL")) t asa beak z + ype t = a.GetNodules( [fo]. setTypes()[2]; [(Pringra altemativa. Usar tipos dynanic ConstructorInfo ctor = t.GetConstructor(new Typel] { Hi dynamic formlario = ctor. Tnvoke(nex object(] { })s ermulario,Foracerrado += new £ventHandler(OeseargarDominio); Foraulario.MostrarFornulario(); , private veld DescargarDninlo(object sender, Everts e) ‘AppDonain Unload); aqui el propio ensamblado para que se cargue desde disco, pero en nues- tro. casoheros optado por cargarpri- mero el contenido del archivo en un array de bytes y luego cargar esos bytes en el AppDonain, De esta mane- ra, Conseguimos que el archivo de la DLL no quede bloqueads en disco, y pademos susticuiio sobre la marcha aunque no haya sido descargado el dominio de aplicacién, Después de cargar el ensambia~ do, extraemos a una variable de tipo Assenbly una referencia al ensambla- do que hemos cargado. Quienes estén acostumbrados a usar System Reflec- tion intentarn hacerlo mediante una llamada al método Gethssenbly(“Non- bre”), pero lamentableriente no exis- te ese métoda dentro dela clase App- Doaain, yUnicamente disponemos de GetAssenblies para obtener la lista completa de ensambiados. Tras fitrar la lista para obtener el ensamblado, procedemas ya a usar teflexién sobre el mismo en la mane. ra habitual: extraemos un Type y 3 través del Type obtenemos las distin tas variantes de NemberTnfo para invo: cara los miembros de la clase que teniamos en la DLL. En este ejemplo conereto, hemos empleado Construc- ‘torInfo (que hereda de Member nfo) para llamar al constructor predeterminado de la clase contenida en la DLL Enotras circunstancias,alresulta- do de la invacacién del constructor le harfamos un “cast” para convertilo al tipo conrecto, es decir, Form frm (Fora2)ctor. Tnvoke(.) y luego lla mariamas a los métodos de “frm* Pero en este caso na pademos hacer. lo porque el tipo “Form2" no es cono- cido en tiempo de compilacién; se ‘supone que proviene de una DLL que hemos afiadido a posteriori E/ listado 3 oftece una primera solucién, que consiste en usar la palabra clave dynamic para crear una variable dinémica que admite com pilar llamadas 3 cualquier método, y luego las resuelve en tiempo de ejecucion. Precisamerte, el tipo dynamic se afadid al lenguaje C# para permitir realizar con sencillez llamadas a componentes externas Cuyos miembros na son conocidos en tiempo de campilacién Antes de la introduccion de dynanic, estas lla- madas habia que realizarlas median- te reflexion, dando lugar a un codi- go mucha mas verboso. Al user dynamic, nuestro cédigo resulta “débimente tipado’ con la con- secuencia de que si escribimos mal alguno de los miembros invocades por esta via {como por ejemplo Mos- trarFormulario) el compiiadornonos loadvertira y no detectaremos el error hasta el tiempo de ejecucién. Coma alternativa, podemos definir dentro de nuestia solucion una interfaz eimple- mentarla en todos los proyectos de DLL que vayan a contener formula rios para ser lamados con este meca nismo. Esto nos permite hacer un ‘cast" del resultado del constructor al tipa de la interfaz, y a continuacién hacer llamadas fuertemente tipadas. Ellistado 4 muestra la definicién dela interfaz y un ejemplo de implementa- cidn de foxmularia para una de las DLL. Ellistada 5 muestra como queda modificado el codigo de! istado 3 para realizar las llamadas a través de la interfaz, Obsérvese que también hemos interceptado el evento "Closed cel for- mulario {que exponemos a traves de la interfaz) para detectar cuando se Cierra elformulario,y descargar enton ces el dominio de aplicacién, Simien- trastanto cambiamios en discola DLL yvolvemos a llamar 2 CargarFormula- rio, se mostrara el contenido defini doen la nueva DLL, quedanda por tan- to satisfecho el requisito de la pre- guna inicial /ffsta interfax se define en un proyecto separado Uy se akaden referencias a ese proyecto desde el UL ejecutable principal y desde todos los proyectos de DLL. public interface Iitntenfaz { void WastrarFormlario(); ‘event Eventindler Foracerrado; y [ffsto va en wna de 135 DLL que cargarenos desde 12 aplicacién public partial class Fors? : Fos, EjemploDwmar2013, Diintenfa2 { public event EventHendler Formcerrados public void WostrarFormlario() { Forud € = new Form2Q3 £.Show()3 » ee private void Form ForaClosed(object sender, FormClosedEventargs e) 4 4 (Forwerrado I= null) ForaCerrado(this, EvertAngs-Emty)s ) ConstructorInfo etor = t.Getconstructor(new ‘ypel] { }); ‘iintenfox formulanio = (Dtiznter?a2)etar.tmvoke(new object] { 3)5 formulanio.ForaCerrado += new ‘venti andler(DeseangarDoninio); formulario.RostrarFormlario(); Aunque el ejemplo anterior se referia a DLL con formularios de Win- dows Forms, a técnica de descargar ensamblados cargandolos en un Appbe- maines valida para cualquier vatiedad de aplicacion de INET, ypara ensamblados destinados a cantener fun cionalidad de cualquier tipo, no necesariamente fFormularios. 2101 El nacimiento de AJAX: Ia historia proyecto mas interesante que abardé Alex Hopman durante su ‘etapa en Micrasof, fue sin dda la creacién ce XMLHTTP (AJAX para los amigos}, que mas tarde (muy poco después} fue adoptada por Google en varias aplicaciones y legaria a formar parte de todas las plataformas y aplicaciones web importantes, Cuenta Alex:"Al paca de llegar la empresa, Thomas Riardon versiones de Internet Explorer) un dia me ponsoble de las primera posilo para presentarme ababa de unirse ala compara. Jean est ne ipo llamacio Jean Pao ba trabajando en esta ‘nuevo cosa lamada XML que algunas personas sospechaban que ramuy grande en et fururo (par alguna razén poce (mento) Eto me lev a involucrarme con algunos equivas de Micro soft que estaban trobajondo en el esidndar WebDAV y a hacer un ‘gran esfuerzo para maver WebDAV y usar XML. camo modelo para ia Ccomunicocién de datos. Poco después me unt al equipo de Exchange ‘que estaba implementando Exchange 2000 para dirair el desarrollo de ios servidores WebDAV de Microsoft (que se utifzaron en IS nor mater el sistema de archivos DAVES y también en ef incercambio de datos en DAVEX, Hiebio de en seri as paginas web planas tan efcienter mplementociones iniciales de estos modelos, una ba: e.como fuero Drea) Uncerstncing The Open © SMARTBEAR | wabstacr, deMaly Hotes ag hace un paso tee ribgkoe es leerees Maesrucuras ae commoren ve de fey cpus cererracs ‘Open We Pato ee Yen sus poco susforaio de eats, sstras opera Cee ee een ug fang eater reed vor. qulitybid/16727flndersnding- The Open stack. Denise Jacobs ima el articulo*C55 Architectures Refactor Your (CSS; que resa algunos delos erores mas comuunes quese co: meten hoy en dia en elisefio eimplementacion dehojas ce es tio, y establece un conjunto de buenas précticas de Facil immplantacion que fecitan la vida deldesarrllador.Aparece ene! Sitio de Sitepoint en ia dieccién http: //iwa.sitepoint.con/ css-anchitectures-nefactor-your-css. contada por un protagonists posible con HTML pura, y otra que empez6 a jugar con la interfaz de tusuorio nueva que se podria construr con DHTML. Ei paso siguiente {ue omar 0 Shawn Bracewell uno de los descrrolladores del equioo ce Qutloale Web Access (OWA) pora que se hiciera cargo de fo ideo. Alser un tipo int ent tt todo mi codigo y Ko vod ligente, pido escribir de una manera mds soda, con sopor de errores u mucho mas Aunque Shawn robe fe asincrono, maneio (6 con Chris Lovett en etequipo de XML paro (ioreca (MXSML| estabamos o dos semanas navegador avi no integrar esto con su bibl ela sat de JES (que fuse la primera version de cul ‘que incorpord AJAX). implement, funcionaba, aunque nos habiamos planteado seriamente un totomiento de problemas o tematwves como lo segunod! inalmenta, en cuanto al porqué AIAX na despegé en 1997, cree ‘Alex que las conexiones de red eran demasiado lentas. Y que Ja ript era demasiado lenta (/ecuérdese que las maquinas tipices 19 de 200 M42] ¥ cantina diciendo que “las primeras versiones de DIMI en (4 tenian algdin. bug (hay mas de una eazin por fa ‘que OWA requeria las tikimas versiones del navegador), Pero la mds importante es que no creo que la comunidad de desarrollo haga cam bios radi nologla tan répidamente. Estos cosas ltevan 3-5 afios, asi que no es sorprendente que la que se fa deso- rrollado graduolmente entre 199 y 1998 en realidad no comenzase a ener efecto hasta ef periodo 2000-2002y explotase realmente hasta 2005-2006" tn caso mas de como las limitaciones del hardware disponi- ble pueden impedir el desarrollo de tecnologias de sofware innova: ddoras, incapaces de dar el salto del laboratorio al ciudadano, por limiaciones de la maquina ‘Sti Web oe Nicolas Gllagher:sin duda una de las me- [ores colecciones de aniculos sobre C5 que se pueden ‘encaniraren la redhayen dla Gallagher tabaja ahora para Twlteyy Sued es minimalsta ps0 a caida delos car= Tenidos merece sobradamente una visita (0 més) hetp://nicolaseallagher.con -TRICKS versiones) que se pueden encontrar en la red. Contiene “snippets” de cO- digo, videos demostraivos, demos, y una extensisima galeria de sitios ‘que implementan algunos de los trucos mas notables que recomiendan sus Webmasters http: //css-tricks.com) (C35-Tricks es uno de los mejores s: ios de trucos sobre CSS (todas las SolidQ Business Intelligence Consulting Misi6n Critica Training Gestidn de portales at eo OSCR, JavaScript laut eld BERS Publicacién: diciembre 2012 ielelugree SCC Lale) Pec ke Petes lel ae) Pelee RECOM TL) Tete Moe aL LPL Lora) Tete ee CRY a se Pio) [Introduccion + HT MLS: La nueva propuesta * Los objetivos del estindar en la practica * El suerio de una Web Semantica + Los test * Las aplicaciones web y el nuevo modelo de aplicaciones en Windows® + El nuevo modelo de aplicaciones Windows 8 * Hablando sobre el estindar: la opi- rién de un protagonista » Entrevista con Paul Cotton 2. Herramientas y depuracién * Las herramientas de los navegadores + Herramientas y depuracién, + FireBug para FireFox * B soporte de HTMLS enVisual Studio 3. HTMLS:nuevas etiquetas + Sintais general + HTMLS: Los nuevos elementos + Las nuevas etiquetas, por categorias + Multimedia: Elementos