{"id":773,"date":"2015-05-26T17:36:04","date_gmt":"2015-05-26T17:36:04","guid":{"rendered":"http:\/\/esferas.org\/msqlu\/?p=773"},"modified":"2015-05-26T17:43:27","modified_gmt":"2015-05-26T17:43:27","slug":"servidor-de-documentos-de-clientes","status":"publish","type":"post","link":"https:\/\/esferas.org\/msqlu\/2015\/05\/26\/servidor-de-documentos-de-clientes\/","title":{"rendered":"Servidor de documentos de clientes &#8230;"},"content":{"rendered":"<p>&#8230; empleando Apache, algunos m\u00f3dulos y, m\u00e1s tarde, mucho trabajo en la trastienda.<\/p>\n<p><!--more--><\/p>\n<h4>El problema<\/h4>\n<p>Pues resulta que con esto de las nuevas tecnolog\u00edas algunos clientes quieren recibir copias de sus documentos, los que se crean autom\u00e1gicamente para ellos en el d\u00eda a d\u00eda, en su buz\u00f3n electr\u00f3nico. Y a priori no parece complicado \u00bf verdad ? Hasta que unos poquitos empiezan a ser decenas, cada uno con su simp\u00e1tica caus\u00edstica (lo de perder mensajes empieza a ser de chiste), y terminas destinando a un humano a realizar una tarea aburrida, temible y propensa a errores. Y digo temible porque la peor pesadilla de la gente de ventas parece ser que un cliente reciba la factura o la lista de precios de otro. Y eso, con un operador hom\u00ednido a cargo, est\u00e1 garantizado.<\/p>\n<p>El caso es que llevamos ya un tiempo viendo la posibilidad de incorporarlo en la p\u00e1gina web de la empresa, en un \u00e1rea de clientes, pero nos est\u00e1 costando arrancar porque sabemos poco lo que queremos y c\u00f3mo lo queremos. Eso lleva tiempo y conversaciones inacabables con la empresa que est\u00e1 construyendo y manteniendo la p\u00e1gina en Drupal, adem\u00e1s de con los propios hom\u00ednidos de mi empresa, que no terminan nunca de aclararse sobre qu\u00e9 ser\u00eda bueno tener en dicha \u00e1rea, y yo enmedio, intentando que los costes sean razonables y que no creen bases de datos en un servidor externo a la empresa entre otras lindezas.<\/p>\n<p>Y hoy precisamente he tenido una conversaci\u00f3n con mi \u00fanico <em>power user<\/em> y nos hemos dado cuenta de que lo que funciona de maravilla es la p\u00e1gina de cat\u00e1logos en PDF. Nadie tiene una queja mayor que recordar su direcci\u00f3n en la red, que no es poco (y es que nos hemos pasado de listos y la hemos situado en <a href=\"http:\/\/empresa.es\/pdf\">http:\/\/empresa.es\/pdf<\/a> y, obviamente, tiende a ser confusa. \u00bf Qu\u00e9 puede haber all\u00ed ?).<\/p>\n<p>El cat\u00e1logo en PDF es un \u00edndice pelado de carpetas y documentos con un t\u00edtulo descriptivo por idioma. Claro, servir archivos est\u00e1ticos es tan simple como r\u00e1pido y al final todos entiende a d\u00f3nde quieren llegar y, lo mejor en mi opini\u00f3n, ven de un vistazo, sin conjuntos de resultados de b\u00fasqueda fraccionados, qu\u00e9 hay\u00a0 y cu\u00e1ndo se ha actualizado.<\/p>\n<p style=\"padding-left: 30px;\"><a href=\"https:\/\/esferas.org\/msqlu\/wp-content\/uploads\/sites\/12\/2015\/05\/Captura-de-pantalla-de-2015-05-26-182400-e1432657687596.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-774 size-medium\" src=\"https:\/\/esferas.org\/msqlu\/wp-content\/uploads\/sites\/12\/2015\/05\/Captura-de-pantalla-de-2015-05-26-182400-e1432657687596-300x156.png\" alt=\"Captura de pantalla de 2015-05-26 18:24:00\" width=\"300\" height=\"156\" srcset=\"https:\/\/esferas.org\/msqlu\/wp-content\/uploads\/sites\/12\/2015\/05\/Captura-de-pantalla-de-2015-05-26-182400-e1432657687596-300x156.png 300w, https:\/\/esferas.org\/msqlu\/wp-content\/uploads\/sites\/12\/2015\/05\/Captura-de-pantalla-de-2015-05-26-182400-e1432657687596.png 592w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a>No se me ha ocurrido de momento a\u00f1adir un <em>feed<\/em> RSS porque creo que no iba a usarlo ni el tato pero lo mismo un d\u00eda tonto de estos me animo.<\/p>\n<p>Por cierto que los documentos que los clientes reclaman -aunque a\u00fan no lo sepan- son las facturas, los albaranes, las listas de precios y las estad\u00edsticas de consumo. Todo eso se puede generar f\u00e1cilmente gracias a los esfuerzos que he realizado estas \u00faltimas semanas refactorizando y reconstruyendo el sistema de generaci\u00f3n de listados de aplicaciones de un par de d\u00e9cadas de edad. Da lo mismo porque como bien dice mi madre (\u00a1 hola, mam\u00e1 !): <em>ni agradecido ni pagado<\/em>.<\/p>\n<h4>Problemas t\u00e9cnicos<\/h4>\n<p>Partiendo de la base de que los \u00fanicos programas que quiero construir son aquellos que crean la informaci\u00f3n desde nuestra venerable (m\u00e1s bien vetusta) base de datos, he creado un esquema de lo que podr\u00eda hacerse a nivel de sistemas para que funcionase sin cambios traum\u00e1ticos.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-776 size-full\" src=\"https:\/\/esferas.org\/msqlu\/wp-content\/uploads\/sites\/12\/2015\/05\/documentos-de-clientes.png\" alt=\"documentos de clientes\" width=\"567\" height=\"802\" srcset=\"https:\/\/esferas.org\/msqlu\/wp-content\/uploads\/sites\/12\/2015\/05\/documentos-de-clientes.png 567w, https:\/\/esferas.org\/msqlu\/wp-content\/uploads\/sites\/12\/2015\/05\/documentos-de-clientes-212x300.png 212w\" sizes=\"auto, (max-width: 567px) 100vw, 567px\" \/><\/p>\n<p>Lo que m\u00e1s o menos pretendo es tener un servidor virtual -inicialmente en la intranet- que solicite una identificaci\u00f3n directa y que, tras validarle correctamente, env\u00ede al cliente a una p\u00e1gina simple donde pueda encontrar sus documentos, en el idioma correspondiente, y descargarlos sin m\u00e1s que elegirlos.<\/p>\n<p>Posiblemente sea necesaria una p\u00e1gina principal donde aterrice y se le informe de d\u00f3nde o a qui\u00e9n puede dirigirse para pedir unas credenciales. Tal vez, m\u00e1s adelante, incluso se pueda dar de alta en alg\u00fan tipo de formulario pero eso ser\u00eda llevar las cosas m\u00e1s lejos de lo que ahora estoy dispuesto.<\/p>\n<p>As\u00ed pues el reto consiste en:<\/p>\n<ol>\n<li>Identificar al cliente empleando una base de datos.<\/li>\n<li>Redirigir al cliente a su p\u00e1gina.<\/li>\n<li>Mostrarle textos en su idioma.<\/li>\n<li>Asegurarnos de que no es posible saltar desde all\u00ed a otra p\u00e1gina de cliente alterando un poco la direcci\u00f3n.<\/li>\n<\/ol>\n<p>He estado recopilando informaci\u00f3n y por lo que veo se encuentran soluciones a lo anterior en:<\/p>\n<ol>\n<li>Las bases de datos tipo <em>dbm<\/em> son bastante sencillas de mantener desde fuera (como con <a href=\"https:\/\/metacpan.org\/pod\/DBD::DBM\">Perl<\/a>) y el m\u00f3dulo <a href=\"http:\/\/httpd.apache.org\/docs\/current\/mod\/mod_authn_dbm.html\">mod_authn_dbm<\/a> las integra bien en Apache.<\/li>\n<li>Esto parece ser algo m\u00e1s complicado porque seg\u00fan d\u00f3nde se sit\u00faen las directivas de reescritura se dispone de los datos identificativos de una u otra forma. <a href=\"https:\/\/digitalelf.net\/\">Brian Bennett<\/a> lo explica muy bien en <a href=\"https:\/\/digitalelf.net\/2010\/01\/apache-mod-rewrite-based-on-logged-in-user\/\">este art\u00edculo<\/a>; ahora s\u00f3lo me resta probarlo en el servidor de desarrollo.<\/li>\n<li>Emplear <a href=\"http:\/\/httpd.apache.org\/docs\/2.4\/mod\/mod_negotiation.html\">mod_negotiation<\/a> y p\u00e1ginas <em>html<\/em> seg\u00fan idioma. Parece sencillo y m\u00e1s o menos estandarizado en tanto en cuanto tenga el navegador correctamente configurado. Tal vez sea necesario -en versiones posteriores- construir enlaces internos a los otros idiomas.<\/li>\n<li>Situar archivos <a href=\"http:\/\/httpd.apache.org\/docs\/current\/howto\/htaccess.html\">.htaccess<\/a> en los que se limite el acceso al directorio al usuario correspondiente. Los programas internos que construyen estos directorios pueden perfectamente a\u00f1adir estos archivos personalizados as\u00ed que tampoco es algo imposible.<\/li>\n<\/ol>\n<p>As\u00ed que ahora s\u00f3lo tengo que probar que todos los mecanismos funcionan correctamente antes de ponerme en serio a escribir tanto el paquete Debian que montar\u00eda el servidor virtual, como los programas de extracci\u00f3n de datos y construcci\u00f3n de p\u00e1ginas. En ambos lados de la l\u00ednea, eso s\u00ed, pero estoy seguro de que puede merecer la pena.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>&#8230; empleando Apache, algunos m\u00f3dulos y, m\u00e1s tarde, mucho trabajo en la trastienda.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_import_markdown_pro_load_document_selector":0,"_import_markdown_pro_submit_text_textarea":"","webmentions_disabled_pings":false,"webmentions_disabled":false,"footnotes":""},"categories":[2],"tags":[75,52],"class_list":["post-773","post","type-post","status-publish","format-standard","hentry","category-software","tag-apache","tag-mi-lugar-de-trabajo"],"_links":{"self":[{"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/posts\/773","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/comments?post=773"}],"version-history":[{"count":0,"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/posts\/773\/revisions"}],"wp:attachment":[{"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/media?parent=773"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/categories?post=773"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/tags?post=773"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}