{"id":166,"date":"2011-01-20T00:58:04","date_gmt":"2011-01-20T05:58:04","guid":{"rendered":"http:\/\/sergiob.org\/wordpress\/?p=166"},"modified":"2011-01-20T00:58:04","modified_gmt":"2011-01-20T05:58:04","slug":"acerca-de-net-el-manifiesto-y-los-requisitos-previos","status":"publish","type":"post","link":"https:\/\/blog.sergiob.org\/?p=166","title":{"rendered":"Acerca de .Net, el manifiesto y los requisitos previos"},"content":{"rendered":"<p>Pues llevo la mejor parte de la noche (ok, ok, apenas un par de horas, pero es bastante para m\u00ed!) lidiando con un problema interesante. Explicar\u00e9 un poco de los preeliminares, para que todos nos entendamos.<\/p>\n<p>La plataforma de .Net es, para mi gusto, una verdadera maravilla. Si vas a desarrollar para Windows (y no te importa mucho obligar a tus usuarios a que instalen X dependencias que bien pueden ser molestas), te permite utilizar una serie de lenguajes muy parecidos entre s\u00ed, s\u00f3lidos, con una gran base de desarrolladores que pueden ayudarte, c\u00f3digo disponible en l\u00ednea, e incluso bibliotecas listas para ser aprovechadas. Como Java, pues, pero sin la molestia de tener que usar&#8230; *eso*. Si t\u00fa desarrollaste en Visual Basic, VB.net es pr\u00e1cticamente lo mismo; si trabajaste en Java, C# es un camino bastante directo. Tiene gran versatilidad para desarrollar aplicaciones web, permite redistribuci\u00f3n de dependencias (recuerden esto), tiene soporte para actualizaciones autom\u00e1ticas de tu aplicaci\u00f3n&#8230; bueno, las bondades son demasiadas. En fin, es una plataforma que personalmente, me agrada bastante.<\/p>\n<p>Nosotros, los programadores eventuales (es decir, que en realidad no nos dedicamos a esto para vivir), tenemos muchas malas ma\u00f1as. Generamos c\u00f3digo sucio, no muy organizado ni comentado; nuestra documentaci\u00f3n puede catalogarse como garabateadas en servilletas y hojas de papel que acaban tiradas por ah\u00ed; y tendemos a vivir en el modo &#8220;debug&#8221;, nunca preocup\u00e1ndonos por c\u00f3mo va a quedar la aplicaci\u00f3n final cuando el usuario final decida instalarla &#8211; digo, podemos dejarlo hasta el final, no? El problema con esto es que cuando llega el famoso final&#8230; es una pesadilla.<\/p>\n<p>De entrada, les recomiendo esto: no utilicen acentos para nombrar a su aplicaci\u00f3n. No, .Net no truena con eso. Pero si quieren utilizar la funcionalidad de actualizaciones, su servidor web puede darse de topes con ustedes, porque va a buscar archivos y cadenas no f\u00e1cilmente codificables. Solo&#8230; t\u00f3menlo como una recomendaci\u00f3n amable.<\/p>\n<p>Y por supuesto, el centro del problema: los requisitos previos. .Net corre sobre una m\u00e1quina virtual (el &#8220;Framework&#8221;), y mi aplicaci\u00f3n en particular utiliza un motor de bases de datos sencillo (SQL Server CE, que es algo as\u00ed como el primo debilucho de SQL Server Express, que a su vez es el babas a comparaci\u00f3n de SQL Server, que a su vez&#8230; etc etc), comparable con sqlite. El Framework, para instalarle, utiliza *otro* requisito previo, el Windows Installer (v.3.1 en este caso en particular). Estos requisitos son manejados elegantemente por el instalador generado por .Net: se descargan autom\u00e1ticamente de internet, si el usuario final no los tiene ya instalados. El problema es que, combinados, son alrededor de 100 Mb de descarga: ciertamente no es mucho para un geek, pero un usuario con una conexi\u00f3n de Infinitum a 512 (cuando le va bien) nos va a obligar a visitar a los pap\u00e1s. So&#8230; debemos poder incrustarlos con nuestro instalador, cierto?<\/p>\n<p>La respuesta es &#8220;s\u00ed, pero te va a costar trabajo&#8221;. Resulta que estos instaladores (que se pueden bajar bastante f\u00e1cil de internet) no se ponen en cualquier localidad. Deben ir en el directorio que .Net utiliza para almacenar los instaladores. Suena sencillo&#8230; hasta que nos enteramos que cada versi\u00f3n del Framework tiene diferentes localidades (y lo mismo para cada versi\u00f3n del Installer, SQL, etc), y que a su vez, cada versi\u00f3n de la IDE lo pone en directorios ligeramente diferentes. En mi caso?<\/p>\n<p>C:Program Files (x86)Microsoft SDKsWindowsv7.0ABootstrapperPackages<\/p>\n<p>\u00ac\u00ac S\u00ed te iba a encontrar, no?<\/p>\n<p>Pero gracias a un valiente y hermoso post:<\/p>\n<p>http:\/\/social.msdn.microsoft.com\/forums\/en-US\/Vsexpressvb\/thread\/56584721-3064-46c2-81f4-6c29c01e1895\/<\/p>\n<p>Tuvo soluci\u00f3n el problema. La moraleja, como siempre, es no fiarse de M$.<\/p>\n<p>\ud83d\ude00<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Pues llevo la mejor parte de la noche (ok, ok, apenas un par de horas, pero es bastante para m\u00ed!) lidiando con un problema interesante. Explicar\u00e9 un poco de los preeliminares, para que todos nos entendamos. La plataforma de .Net es, para mi gusto, una verdadera maravilla. Si vas a desarrollar para Windows (y no &hellip; <a href=\"https:\/\/blog.sergiob.org\/?p=166\" class=\"more-link\">Continue reading<span class=\"screen-reader-text\"> &#8220;Acerca de .Net, el manifiesto y los requisitos previos&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[12,13],"tags":[46,48,60,105,119],"class_list":["post-166","post","type-post","status-publish","format-standard","hentry","category-geek","category-hobbies","tag-cosas-importantes-que-no-interesan-a-nadie","tag-desmadrugadas","tag-fundamentos-geek","tag-poniendose-al-dia","tag-supergeek"],"_links":{"self":[{"href":"https:\/\/blog.sergiob.org\/index.php?rest_route=\/wp\/v2\/posts\/166","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.sergiob.org\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.sergiob.org\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.sergiob.org\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.sergiob.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=166"}],"version-history":[{"count":0,"href":"https:\/\/blog.sergiob.org\/index.php?rest_route=\/wp\/v2\/posts\/166\/revisions"}],"wp:attachment":[{"href":"https:\/\/blog.sergiob.org\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=166"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.sergiob.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=166"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.sergiob.org\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=166"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}