<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:cc="http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html">
    <channel>
        <title><![CDATA[Stories by Flkt Crnpio on Medium]]></title>
        <description><![CDATA[Stories by Flkt Crnpio on Medium]]></description>
        <link>https://medium.com/@flktcrnpio?source=rss-a52abd8531f1------2</link>
        <image>
            <url>https://cdn-images-1.medium.com/fit/c/150/150/1*2jUvRI6nq8kgR_n21HePow.jpeg</url>
            <title>Stories by Flkt Crnpio on Medium</title>
            <link>https://medium.com/@flktcrnpio?source=rss-a52abd8531f1------2</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Sat, 14 Nov 2026 11:47:05 GMT</lastBuildDate>
        <atom:link href="https://medium.com/@flktcrnpio/feed" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com/" rel="hub"/>
        <item>
            <title><![CDATA[Verificando la accesibilidad]]></title>
            <link>https://medium.com/@flktcrnpio/verificando-la-accesibilidad-8f160c52d4f5?source=rss-a52abd8531f1------2</link>
            <guid isPermaLink="false">https://medium.com/p/8f160c52d4f5</guid>
            <category><![CDATA[testing-tools]]></category>
            <category><![CDATA[w3c]]></category>
            <category><![CDATA[wcag]]></category>
            <category><![CDATA[pruebas-de-usabilidad]]></category>
            <category><![CDATA[accesibilidad]]></category>
            <dc:creator><![CDATA[Flkt Crnpio]]></dc:creator>
            <pubDate>Mon, 06 Jan 2025 22:13:42 GMT</pubDate>
            <atom:updated>2025-01-06T22:13:42.917Z</atom:updated>
            <content:encoded><![CDATA[<h3>Probando herramientas gratuitas para evaluar la accesibilidad en entornos digitales.</h3><p>La W3C dentro de su <a href="https://www.w3.org/WAI/test-evaluate/report-template/">estructura base de reporte de evaluación de accesibilidad</a> web en conformidad con la <em>Web Content Accessibility Guidelines</em> (<em>WCAG</em>) 2.2, sugiere que una correcta evaluación lleva múltiples herramientas automáticas y una evaluación manual para verificar el correcto funcionamiento del sitio, hablando específicamente de las reglas de accesibilidad que la misma página web debe tener escritas en sus políticas de accesibilidad.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*WkKMFbpKcPnxKCdC" /><figcaption>Photo by <a href="https://unsplash.com/@jasongoodman_youxventures?utm_source=medium&amp;utm_medium=referral">Jason Goodman</a> on <a href="https://unsplash.com/?utm_source=medium&amp;utm_medium=referral">Unsplash</a></figcaption></figure><p>Tomando como punto de partida la <a href="https://www.w3.org/WAI/test-evaluate/tools/list/">lista de herramientas para probar accesibilidad de la W3C</a>, filtraremos las automáticas, gratuitas y que se pueden utilizar directo en el navegador.</p><p>Los datos obtenidos fueron obtenidos verificando la accesibilidad de la misma página web, la página de inicio del <a href="https://sisdai.conahcyt.mx/">Sisdai</a>, para poder observar las diferencias entre cada herramienta. La muestra se tomó entre el 10 y el 12 de julio del 2024.</p><h4><a href="https://www.accessibilitychecker.org/">Accessibility checker auditing tool</a></h4><p>Es una herramienta de una empresa privada de Estados Unidos de América, utilizada para escanear una página web y revisar la accesibilidad en base a los estándares <em>WCAG 2.1 level AA</em> que también revisa estándares y políticas de accesibilidad de algunos países (no aplica a México).</p><p>El error crítico que encuentra ésta herramienta es de legibilidad en los enlaces que se utilizan en los pies de página. Los enlaces tienen un área de interacción muy chica, de 18px, comparado contra los 24px mínimos que se requieren. También ambos <em>footers</em> tienen errores de contraste que en éste caso en particular son difíciles de solucionar porque son colores de identidad institucional que no pueden modificarse sin antes modificar el manual de identidad para cada institución.</p><p>También muestra una sección de varios los elementos que deben ser revisados manualmente para verificar si cumplen o no los estándares de accesibilidad.</p><p>Un problema de ésta herramienta es que no deja hacer muchos análisis por día y verifica de vista en vista, lo que hace improbable utilizar la versión gratuita para sitios web muy extensos, se necesitaría demasiado tiempo.</p><h4>AEL <a href="https://aeldata.com/accessibility-checker/">Accessibility Checker</a> (AAC)</h4><p>Es una herramienta de una empresa privada de la India con la que se puede evaluar la accesibilidad de una página web, pero no dan nada de información a simple vista, te pone una calificación sobre cien y para obtener detalles es necesario solicitar una consulta gratuita proporcionando un correo electrónico.</p><h4>IBM Tools <a href="https://www.ibm.com/able/toolkit/tools/#develop">Equal Access Accessibility Checker</a></h4><p>Es una extensión de código abierto creada por IBM que detecta problemas en la accesibilidad de sitios web. También proporciona ayuda descriptiva de los errores, en donde se encuentran y cómo solucionarlos.</p><p>Esta herramienta se puede configurar para que verifique contra distintos criterios de accesibilidad. De manera predeterminada se encuentra seleccionado el criterio <em>IBM Accessibility</em> 7.21, que cumple con las reglas de la <em>WCAG</em> 2.1 y se le agregan otros criterios requeridos por <em>IBM</em></p><p>En el análisis con ésta herramienta se encontraron para la página de inicio del Sisdai, múltiples errores de elementos sin <em>landmarks,</em> que requieren que se reestructure la página para agregarlos.<em> </em>También muestra el error de que por página solo debe existir un único <em>footer</em>, que para éste caso teniendo dos, deberíamos especificar el <em>aria-label</em> de cada uno.</p><p>No salen los errores de falta de contraste ni espacio de interacción de los enlaces en los pies de página!!… pensando bien, supondré que es porque primero se espera que se corrijan los errores de etiquetado para cada pie de página.</p><h4><a href="https://achecks.org/achecker">Achecker +</a></h4><p>Creada por <em>Cantan Group</em>, una empresa Canadiense, la herramienta <em>AChecker</em> evalúa de forma predeterminada si los elementos de una página web cumplen con los criterios de accesibilidad <em>WCAG</em> 2.0 para sitios web, también se puede seleccionar qué criterios de evaluación se requiere analizar.</p><p>El primer error que encuentra ésta herramienta es de legibilidad en los enlaces que se utilizan en los Pies de página por falta de espacio clickeable.</p><p>El segundo error es acerca del video que se utiliza de fondo en la primer sección de presentación de la página, agregando el mensaje de que el video no cuenta con subtítulos, error curioso porque el video es decorativo, más bien no deberíamos utilizar video… pero… decisiones de arriba… cómo se arregla la cadena de mando? La sugerencia es agregarles la propiedad <em>aria-hidden</em> y cambiarles el rol por uno genérico como <em>role=”presentation”</em>.</p><p>Esta herramienta también muestra una sección de varios los elementos que deben ser revisados manualmente para verificar si cumplen o no los estándares de accesibilidad.</p><h4><a href="https://squidler.io/">Squidler</a></h4><p>En su página web se puede ingresar la URL de un sitio web para verificar su <a href="https://squidler.io/product/problem-types">accesibilidad y algunos otros tipos de error</a>. <em>Squindler</em> utiliza a su vez <a href="https://www.w3.org/WAI/standards-guidelines/act/implementations/axe-core/"><em>Axe-core</em></a> para probar los criterios de accesibilidad <em>WCAG</em> 2.0 y 2.1.</p><p>No están muy bien definidos los errores, no especifica el elemento en el que se encuentra ni sugerencias para arreglarlo… personalmente no me gustó esta herramienta, pero más o menos pude interpretar los errores que mostró la herramienta.</p><p>El primer error habla de un enlace roto, pero revisando manualmente el sitio y con otras herramientas no aparece ningún enlace roto, lo que me hace dudar que realmente exista.</p><p>El segundo error es el mismo que reportó la herramienta de <em>IBM</em>, no debe existir más de un pie de página en un sitio web.</p><p>El tercer error parece ser el que reportó la herramienta de <em>IBM</em> de los elementos flotantes que no tienen un <em>landmark</em> definido.</p><h4><a href="https://achecks.org/checker/index.php">AChecker</a></h4><p>Es un validador de accesibilidad en línea que tienen algunas opciones de configuración del criterio de accesibilidad a evaluar, pero la versión más actual es la <em>WCAG</em> 2.0 que estaba obsoleta con los criterios que requería para analizar el sitio, así que me lo salte, porque pues no me sirve para analizar.</p><h4><a href="https://qualweb.di.fc.ul.pt/evaluator/">QualWeb</a></h4><p><em>QualWeb</em> es un sitio web para evaluación automática de accesibilidad. Utiliza los criterios de <a href="https://www.w3.org/WAI/WCAG21/Techniques/"><em>WCAG</em> 2.1</a> y las reglas de <a href="https://act-rules.github.io/pages/about/"><em>ACT Rules</em></a>.</p><p>Solo muestra un error de que existen algunos elementos con el tamaño tipográfico mal declarado, uy… este va a ser difícil de arreglar, hay que verificar que todo el contenido este declarado en unidades relativas para que pueda escalarse adecuadamente por las personas que visiten el sitio. Bueno, al menos la herramienta también muestra una lista de los elementos en donde encontró el error.</p><h4><a href="https://chromewebstore.google.com/detail/axe-devtools-web-accessib/lhdoppojpmngadmnindnejefpokejbdd">Axe DevTools</a></h4><p>Es una extensión gratuita para <em>Chrome</em> que evalúa los elementos de una página web para probar los criterios de accesibilidad <em>WCAG</em> 2.1 AA. Para configurarse se debe pagar una suscripción.</p><p>Tiene varias opciones de pruebas interesantes, pero para todo te pide suscripción.</p><p>Analizando la página de inicio del Sisdai con la versión gratuita no muestra ningún error! vivaa! somos unos genios! jejeje.</p><h4><a href="https://chromewebstore.google.com/detail/includia-accessibility-ch/ialekgfeghfiggcbglciaihbpdafidnn">Includia Accessibility Checker</a></h4><p>Es una extensión de Google Chrome para la evaluación de la accesibilidad. Dice estar basada en la última versión de la <em>WCAG</em>. Que no sabría cual es porque supongo que depende de la fecha de actualización de la extensión… pero en ningún lado dice explícitamente la versión, preferiría tenerlo claro.</p><p>Ésta herramienta detecta dos errores, los mismos que la herramienta de <em>IBM</em>. Primero, existen elementos fuera de <em>landmarks</em> y segundo, existen dos <em>footers</em> y no está etiquetado ninguno de que información contiene.</p><h4><a href="https://accessibleweb.com/website-accessibility-checker/">RAMP Web Accessibility Tools</a></h4><p><em>RAMP</em> es la página web de una empresa de Estados Unidos que se dedica a la accesibilidad web. La parte gratuita de este sitio web, sirve para verificar la accesibilidad de un sitio, conforme los criterios de la <em>WCAG</em>, no encuentro en que versión ni nivel estarán probando</p><p>Escaneando con la versión gratuita y sin cuenta simplemente dice que no se encontró ningún error y no da ningún detalle a menos que se cree una cuenta.</p><h4><a href="https://chromewebstore.google.com/detail/silktide-accessibility-ch/mpobacholfblmnpnfbiomjkecoojakah">Silktide accessibility checker</a></h4><p><em>Silktide</em> es una extensión gratuita que se instala en Google Chrome, tiene múltiples opciones de revisión, entre ellas el ‘<em>Accessibility checker</em>’ que dice validar la accesibilidad de los elementos de la página web con <em>WCAG</em> 2.0, 2.1 y 2.2.</p><p>Señala un solo error por tener un video sin subtítulos asociados. Pero otra vez, en éste caso que el video no es informativo, es decorativo y ni siquiera tiene audio ni texto… es una mala decisión poner el fondo de la presentación así y me lo van reafirmando las herramientas, quitalo, quitalo, quitalo, dicen… pero ojalá escucharan los mismo las personas encargadas de tomar la decisiones.</p><h4><a href="https://sa11y.netlify.app/">Sa11y</a></h4><p>Es una herramienta de la universidad metropolitana de Toronto. Puede funcionar desde el <em>bookmark</em> del navegador ó se puede instalar en un sitio como <em>plugin</em> para <em>wordpress</em> o <em>joomla</em>. Funciona un poco a la vez como menú de accesibilidad y como validador de accesibilidad. Utiliza como referencia la versión <em>WCAG </em>2.1 AA.</p><p>Los errores que esta herramienta encuentra son de contraste en textos que están declarados como de solo lectura, es decir, los que no son visibles pero que si se pueden escuchar con lectores de pantalla, jeje, obviamente si no se deben ver no importa su contraste. Ningún otro error es detectado por esta herramienta.</p><h4><a href="https://chromewebstore.google.com/detail/aria-devtools/dneemiigcbbgbdjlcdjjnianlikimpck?hl=en">ARIA DevTools</a></h4><p><em>ARIA DevTools</em> es una extensión para Google Chrome que muestra visualmente la estructura del sitio web de la manera en que los lectores de pantalla leen la estructura y elementos por los <em>ARIA</em> <em>rol</em> que se utilizan.</p><p>Aaaaaammmm no se ve muy seguro por el icono del pirata.. Da un poco de miedo de instalar, pero ya que te animas se ve muy clara la estructura y los errores que puede tener.</p><p>No da una lista de errores, alertas ni sugerencias, solo puede utilizarse para análisis manual de la estructura del sitio.</p><h4><a href="https://chromewebstore.google.com/detail/lighthouse/blipmdconlkpinefehnmjammfjpmpbjk">Lighthouse</a></h4><p><em>Lighthouse</em> es una herramienta <em>open-source</em> que revisa el rendimiento, accesibilidad y <em>SEO</em> en páginas web. Utiliza reglas de mejores prácticas y accesibilidad <em>WCAG</em> 2.0 2.1 y 2.2 nivel A y AA.</p><p>Puede leerse la forma de <a href="https://developer.chrome.com/docs/lighthouse/accessibility/scoring?hl=es-419">puntuación de accesibilidad de lighthouse</a> para revisar a más detalle la evaluación.</p><p>El primer error que detecta es por la falta de área clickeable en los enlaces del footer. El segundo error es dado por la falta de subtítulos en el video decorativo, que no tiene ni audio, pero que no debería haberse utilizado de fondo… ojalá, ojalá, algún día se cambie simplemente por una imágen estática.</p><p>También muestra una lista de elementos que necesitan evaluarse manualmente para saber si cumplen los criterios de accesibilidad.</p><h4><a href="https://wave.webaim.org/extension/">wave</a></h4><p>Es una extensión que puede instalarse en múltiples navegadores desarrollada por la universidad de Utah.</p><p>No se encuentra en la lista de herramientas para validar accesibilidad de la W3C, pero la universidad que creo esta herramienta es una gran referente del tema, así que la inclui como pilón.</p><p>Además que al final de la lista en la página web de la W3C incluyen un texto que dice que no evaluaron la veracidad de ninguna herramienta y que la información que ponen de cada herramienta es proporcionada por sus creadores.</p><p>Con ésta herramienta obtenemos un error y un par de alertas. El error da por el bajo contraste del texto de solo lectura. La primer alerta es por agregar la etiqueta <em>&lt;noscript&gt;</em> que al parecer ya no es requerida, y la segunda por la falta de subtítulos en el video decorativo, que comienzo a odiar un poco, pero que como sugerencia nos comentaron que podía agregarse el <em>aria-hidden</em> y el rol <em>presentation</em>; y como mejor sugerencia, no utilicen videos decorativos de fondo con autoplay repeat mute... no solo dio errores de accesibilidad, también para celulares fue un tema.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*iWynBL2novw00Vqy" /><figcaption>Photo by <a href="https://unsplash.com/@brookecagle?utm_source=medium&amp;utm_medium=referral">Brooke Cagle</a> on <a href="https://unsplash.com/?utm_source=medium&amp;utm_medium=referral">Unsplash</a></figcaption></figure><p>Como conclusión, solo puedo decir que existen múltiples herramientas, todas aportan cosas diferentes, necesitamos encontrar una estrategia para probar la accesibilidad que ajuste con los criterios de las WCAG que el sitio o aplicación que estemos desarrollando esté intentando cumplir para acercarnos más a que esto suceda.</p><p>En lo personal, me gusta utilizar la combinación de <em>WAVE Browser Extensions</em> con la de <em>IBM Equal Access Accessibility Checker</em>, por que además se pueden utilizar en varios navegadores y que como desarrolladora de front-end estoy acostumbrada y necesito ver y analizar los sitios en varios navegadores, resoluciones y dispositivos distintos.</p><p>P.D. disculpen las fotos, ya tendré tiempo de tomar propias :}</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=8f160c52d4f5" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Cómo solucionar los 6 errores más comunes de accesibilidad web]]></title>
            <link>https://medium.com/@flktcrnpio/accesibilidad-notas-de-para-programadoras-de-la-web-66f3a20f5c11?source=rss-a52abd8531f1------2</link>
            <guid isPermaLink="false">https://medium.com/p/66f3a20f5c11</guid>
            <category><![CDATA[accesibilidad]]></category>
            <category><![CDATA[web-development]]></category>
            <category><![CDATA[frontend]]></category>
            <category><![CDATA[accessibility]]></category>
            <category><![CDATA[español]]></category>
            <dc:creator><![CDATA[Flkt Crnpio]]></dc:creator>
            <pubDate>Tue, 17 Dec 2024 22:20:33 GMT</pubDate>
            <atom:updated>2024-12-19T18:15:28.486Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="Mesa de trabajo con computadora. Varias plantas y fotografías artísticas alegran el lugar." src="https://cdn-images-1.medium.com/max/640/1*fcMFaClkYX_TRzZAUDL4cw.jpeg" /><figcaption>área de trabajo</figcaption></figure><p>Hace algún tiempo me encontré con un reporte de accesibilidad analizando un millón de páginas web que publicó WebAIM (uno de los grandes referentes del tema en Estados Unidos) <a href="https://webaim.org/projects/million/">https://webaim.org/projects/million/</a></p><p>En este reporte aparecen, entre otras cosas, los seis errores más comunes de accesibilidad y la verdad me sorprendió la lista… son cosas super simples que … porque olvidamos?</p><p>Si no tenemos tiempo de leernos la documentación de accesibilidad y sensibilizarnos con el tema, al menos podemos colaborar a la vida evitando caer en el mismo error una y otra vez.</p><h3>Los errores más comunes que debemos evitar 🫡</h3><ol><li>Tener bajo contraste de texto (81.0%)</li><li>Utilizar imágenes sin texto alternativo (54.5%)</li><li>No etiquetar correctamente los campos de entrada (48.6%)</li><li>Tener enlaces vacíos!! (44.6%)</li><li>Tener botones vacíos! (28.2%)</li><li>No agregar atributos de lenguaje al documento (17.1%)</li></ol><h4>1. Verificar el contraste del texto</h4><p>Por lo general este error lo resuelve el equipo de diseño. Al seleccionar la paleta de color que utilizará el sitio o sistema de diseño, deberán asegurarse que el contraste sea apropiado para la lectura.</p><p>Al equipo de desarrollo simplemente nos pasan una lista de hexadecimales que utilizar… aun así… si notas algo raro, no olvides reportarlo a tu diseñadora favorita… que normalmente en el área de diseño no tienen QA, no se porque! de que privilegios gozan ?! u.u</p><h4>2. Agregar texto alternativo a las imágenes</h4><p>Si cuentas con un equipo de contenido (quienquiera que esté escribiendo la información que se verá en pantalla), debería de existir un documento en donde para cada imagen que se requiera poner en pantalla, se agrega el texto alternativo que ésta debe de tener, incluso si va vacío como el caso de las imágenes decorativas.</p><p>El equipo de desarrollo debe cerciorarse de que toda etiqueta <em>&lt;img&gt;</em> de imagen lleve siempre el atributo <strong><em>alt</em></strong> con o sin contenido, como se haya especificado por el equipo.</p><pre>&lt;img alt=&quot;texto alternativo&quot;&gt;</pre><h4>3. Etiquetar los campos de entrada</h4><p>Dependiendo del diseño, hay distintas formas en las que se puede etiquetar un campo.</p><ul><li>Cuando el campo de entrada tiene visible la etiqueta de nombre, unicamente es importante recordar ligar ambos elementos con el <strong><em>for</em></strong> del &lt;<em>label&gt;</em> y el <strong><em>id</em></strong> del <em>&lt;input&gt;</em>.</li></ul><pre>&lt;label for=&quot;nombre&quot;&gt;<br>  Nombre completo<br>&lt;/label&gt;<br>&lt;input <br>  id=&quot;nombre&quot; <br>  type=&quot;text&quot; <br>  placeholder=&quot;Ejemplo: Alma Leticia&quot;<br>/&gt;</pre><ul><li>Cuando únicamente se ve el campo de entrada, puede utilizarse el atributo <strong><em>aria-label</em></strong> en la etiqueta del campo <em>&lt;input&gt;</em>, selector <em>&lt;select&gt; </em>o área de texto <em>&lt;textarea&gt;</em> para agregarle la información del nombre al campo.</li></ul><pre>&lt;input <br>  aria-label=&quot;Nombre completo&quot; <br>  type=&quot;text&quot; <br>  placeholder=&quot;Ejemplo: Alma Leticia&quot;<br>/&gt;</pre><h4>4. Agregar contenido a los enlaces</h4><p>Parecido que con las imágenes, es un trabajo en equipo, es necesario que quien escriba el contenido siempre piense que texto significativo debe verse cuando se agrega un enlace, mientras que el equipo de desarrollo debe cerciorarse de que no se escriba nunca una etiqueta de enlace <em>&lt;a&gt;</em> ni sin enlace <strong><em>href=””</em></strong> ni sin contenido <strong><em>&gt; … &lt;</em></strong></p><pre>&lt;a href=&quot;enlace&quot;&gt; texto significativo &lt;/a&gt;</pre><h4>5. Agregar contenido a los botones</h4><p>Tanto el equipo de diseño como el equipo de contenido están envueltos en resolver que se verá y que se escuchará en un botón.</p><ul><li>Para un botón sencillo <em>&lt;button&gt;</em> con texto, nada más es verificar que funcione y se vea como se debe leer, la acción a realizar por la persona usuaria.</li></ul><pre>&lt;button type=&quot;button&quot;&gt; Acción a realizar &lt;/button&gt;</pre><ul><li>Cuando un botón contiene texto y pictograma, el texto debe decir qué acción se va a realizar, mientras que el pictograma debe ocultarse auditivamente mediante el atributo <strong><em>aria-hidden</em></strong><em> </em>que se incluye en el elemento que contenga el pictograma, en éste ejemplo un <em>&lt;span&gt;</em>.</li></ul><pre>&lt;button type=&quot;button&quot;&gt;<br>  Acción a realizar<br>  &lt;span class=&quot;pictograma&quot; aria-hidden=&quot;true&quot;&gt; :} &lt;/pictograma&gt;<br>&lt;/button&gt;</pre><ul><li>Para un botón que contiene únicamente el pictograma, se mantiene el <strong><em>aria-hidden</em></strong> en el <em>&lt;span&gt;</em> del pictograma y se agrega un <strong><em>aria-label</em></strong> al elemento botón <em>&lt;button&gt;</em> para especificar la acción a realizar.</li></ul><pre>&lt;button <br>  type=&quot;button&quot;<br>  aria-label=&quot;Acción a realizar&quot;<br>&gt;<br>  &lt;span class=&quot;pictograma&quot; aria-hidden=&quot;true&quot;&gt; :} &lt;/pictograma&gt;<br>&lt;/button&gt;</pre><h4>6. Agregar atributo de lenguaje al documento HTML</h4><p>Es un atributo que la mayoría de los frameworks ya traen siempre escrito, aunque como la mayoría están en inglés, habrá que cambiarle este atributo a la página al español.</p><p>El lenguaje general del documento se declara en la etiqueta raíz de <em>HTML</em></p><pre>&lt;!DOCTYPE html&gt;<br>&lt;html lang=&quot;es-mx&quot;&gt;</pre><p>Cuando existen fragmentos de la página en otro idioma es necesario agregarle el atributo <strong><em>lang</em></strong> a la etiqueta que contenga el texto en particular.</p><pre>&lt;span lang=&quot;en&quot;&gt;hello&lt;/span&gt;</pre><p>— Con esto solucionamos los errores más comunes. 🎉</p><h3>Otras recomendaciones generales para mejorar accesibilidad mediante el código 🤓</h3><ul><li>Utilizar <em>HTML</em> semántico.</li><li>Agregar un enlace para ir al contenido principal, al inicio de la página antes de la navegación y cabecera.</li><li>Agregar un título a cada página en el <em>&lt;header&gt;</em>.</li><li>Organizar la estructura principal del sitio con etiquetas de región como <em>&lt;nav&gt;</em>, <em>&lt;header&gt;</em>, <em>&lt;main&gt;</em>, <em>&lt;footer&gt;</em>, <em>&lt;section&gt;</em>, <em>&lt;article&gt;</em>, <em>&lt;aside&gt;</em></li><li>Verificar que solo exista un <em>&lt;main&gt;</em> por vista.</li><li>Utilizar solo un <em>&lt;h1&gt;</em> por página.</li><li>No brincar entre jerarquías de títulos, después del <em>&lt;h1&gt;</em> el siguiente título que necesitemos debe ser un<em> &lt;h2&gt;.</em></li><li>Para formularios complejos, utilizar el <em>&lt;fieldset&gt;</em> y <em>&lt;legend&gt;</em> para agrupar campos de información en secciones.</li></ul><h4>Escucha la página</h4><p>El orden de la lectura es igual al orden de la estructura del código, puedes intentar escuchar la página una vez que esté terminada para verificar que se comprenda, también ayuda a corregir la ortografía y puede ayudar en general a mejorar la estructura.</p><h4>Navega la página</h4><p>Revisa que todos los elementos interactivos tengan estado de enfoque y que el orden en el que navegas entre uno y otro, utilizando el tabulador, sea el esperado. Puedes navegar el sitio con el teclado para verificarlo.</p><h3>Verifica la accesibilidad básica con herramientas automáticas 🦇</h3><p>Existen un montón de herramientas que se pueden instalar en el navegador para verificar la accesibilidad.</p><p>De mis favoritas serían las de IBM y la de Google Chrome</p><ul><li><a href="https://www.ibm.com/able/toolkit/tools/#develop">IBM Tools Equal Access Accessibility Checker</a></li><li><a href="https://chromewebstore.google.com/detail/lighthouse/blipmdconlkpinefehnmjammfjpmpbjk">Lighthouse</a></li></ul><p>También me gusta mucho una enfocada particularmente los aria y landmarks, para ver la estructura del sitio.</p><ul><li><a href="https://chromewebstore.google.com/detail/aria-devtools/dneemiigcbbgbdjlcdjjnianlikimpck?hl=en">ARIA DevTools</a></li></ul><p>Y para validación del código fuente durante la etapa de desarrollo, se puede agregar una extensión de Visual Studio Code</p><ul><li><a href="https://marketplace.visualstudio.com/items?itemName=deque-systems.vscode-axe-linter">axe Accessibility Linter</a></li></ul><h3>Descansa🌟</h3><p>La mayor parte de los errores los cometemos cuando estamos desveladas, presionadas, sin comer, sin café (o lo que sea que te de pila) …. la vida no se trata solo del trabajo! pero si ya lo vamos a hacer hay que hacerlo bien :}</p><p>Respiren, tomen agüita</p><p>— flkt</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=66f3a20f5c11" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[edición del <input type color> con CSS]]></title>
            <link>https://medium.com/@flktcrnpio/edici%C3%B3n-del-input-type-color-con-css-95d736557a12?source=rss-a52abd8531f1------2</link>
            <guid isPermaLink="false">https://medium.com/p/95d736557a12</guid>
            <category><![CDATA[css]]></category>
            <category><![CDATA[input-output]]></category>
            <dc:creator><![CDATA[Flkt Crnpio]]></dc:creator>
            <pubDate>Wed, 05 Apr 2023 22:58:28 GMT</pubDate>
            <atom:updated>2023-04-06T00:08:50.410Z</atom:updated>
            <content:encoded><![CDATA[<h4>y la mágica aparición del &lt;output&gt;</h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*Uj0aVSYoLJumUY0v" /><figcaption>Photo by <a href="https://unsplash.com/es/@copperandwild?utm_source=medium&amp;utm_medium=referral">Dee @ Copper and Wild</a> on <a href="https://unsplash.com/?utm_source=medium&amp;utm_medium=referral">Unsplash</a></figcaption></figure><p>de las cosas mas difíciles e interesantes para mi siempre han sido los elementos de HTML de formulario, desde hacer que se vean del mismo modo en todos los navegadores, luchar contra instalar un plugin que hace magia en sus node_modules para ponerle mil elementos encima que se ven hermosos, o jugar para ver hasta donde puede llegar un elemento que cada que sacan nuevo es ´ineditable´</p><p>el &lt;input type=”color”&gt; es un elemento que se ve re diferente en todos los navegadores (ni hablar de su menú contextual ! )</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*zIKaVTY-Anrg3FqKNjOyqA.png" /><figcaption>&lt;input&gt; color en Chrome, Safari y Firefox, en ese orden</figcaption></figure><p>como se medio aprecia en la imagen (salió re chiquita) es un bloque de color dentro de algún contenedor con color de fondo y borde, que ni en su casa han de saber como quisieron alinear</p><h3>homogeneizando el input”</h3><p>en CSS es empezar de general a particular, así que comenzando por normalizar el elemento, hay que alinearlo, quitarle el padding, el borde y el color de fondo al contenedor</p><pre>$height: 40px; <br>$radius: 2px;<br><br>[type=&quot;color&quot;] {<br>  display: inline-flex;<br>  vertical-align: bottom;<br>  border: none;<br>  border-radius: $radius;<br>  padding: 0; // para quitar el pading en FF<br>  height: $height;<br>  width: 100%;<br>  cursor: pointer;<br>}</pre><p>para quitar el padding en chrome y safari se necesita editar el sub elemento <strong>::-webkit-color-swatch-wrapper</strong></p><pre>::-webkit-color-swatch-wrapper {<br>  padding: 0;<br>}</pre><p>por ultimo, para editar el bloque de color, necesitamos editar los sub elementos <strong>::-webkit-color-swatch</strong> y <strong>::-moz-color-swatch</strong> para quitarles los border y redondearlo como necesitemos</p><pre>::-webkit-color-swatch {<br>  border: 0;<br>  border-radius: $radius;<br>}<br><br>::-moz-color-swatch {<br>  border: 0;<br>  border-radius: $radius;<br>}</pre><p>listo! ya se ve igual en todos los navegadores (que estaba probando al menos)</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*0Sh5bjBc_LvXaHu60rO_BA.png" /><figcaption>&lt;input&gt; color homogeneizado</figcaption></figure><h3>ahora vamo a ponerlo buapo”</h3><p>para hacerlo en tarjetas tipo ‘pantone’ primero hay que agregarle un elemento mas que pueda contener al input y output</p><p>para quienes no lo hayan utilizado, el &lt;output&gt; es un elemento de html muy bonito de los formularios, al que se le puede conectar su contenido con alguna formula definida en el formulario o en un input</p><p>con el atributo <strong>oninput</strong>=”<em>colorhex</em>.value=value” se liga el valor del input color con el valor del output que tenga el id <em>colorhex</em></p><pre>&lt;input type=&quot;color&quot; value=&quot;#6600ff&quot; oninput=&quot;colorhex.value=value&quot;&gt;<br>&lt;output id=&quot;colorhex&quot;&gt;#6600ff&lt;/output&gt;</pre><p>de esta manera cada que se seleccione un color diferente en el input, veremos el valor hexadecimal en el output (pa’ poder hacer más rápido el copy&amp;paste)</p><p>para crear las tarjetas, agregamos un contenedor para tener en columnas los elementos &lt;input&gt; y &lt;output&gt; y editamos un poco los atributos de ambos para darle el estilo final</p><pre>$radius: 10px;<br>$height: 220px;<br><br>.pantone-card {<br>  background: #fff;<br>  display: grid;<br>  width: $height * 1.25;<br>  border-radius: $radius;<br>  box-shadow: 0 2px 4px #0001;<br>  border: 4px solid #fff;<br>}</pre><p>como cambiamos la variable <em>height</em>, el input de color quedará del nuevo valor de alto y se ajustará al ancho que tome la tarjeta… únicamente nos resta acomodarle el <em>border-radius</em> de los sub elementos <strong>::-webkit-color-swatch</strong> y <strong>::-moz-color-swatch</strong> para que el bloque de color quede redondeado de arriba y abajo quede recto</p><pre>[type=&quot;color&quot;] {<br>  display: inline-flex; // esto ya no aplica <br>  vertical-align: bottom; // esto tampoco <br>  border: none;<br>  border-radius: $radius;<br>  padding: 0;<br>  height: $height;<br>  width: 100%;<br>  cursor: pointer;<br>  <br>  &amp;::-webkit-color-swatch-wrapper {<br>    padding: 0;<br>  }<br>  <br>  &amp;::-webkit-color-swatch {<br>    border: 0;<br>    border-radius: $radius $radius 0 0; // arriba redondeado y abajo recto<br>  }<br>  <br>  &amp;::-moz-color-swatch {<br>    border: 0;<br>    border-radius: $radius $radius 0 0; // arriba redondeado y abajo recto<br>  }<br>}</pre><p>al final nada mas nos resta agregarle los estilos al &lt;output&gt; para que parezca el texto típico de las tarjetas de pantone</p><pre>output {<br>  display: block;<br>  background: #fff;<br>  font-size: 28px;<br>  padding: 16px;<br>  line-height: 1em;<br>  font-family: &#39;helvetica&#39;, sans-serif;<br>  <br>  &amp;:before {<br>    content: &#39;HEXADECIMAL&#39;;<br>    font-size: 14px;<br>    font-weight: bold;<br>    display: block;<br>  }<br>}</pre><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*cz6qFbM_Mk-vQGpF8Q21cg.png" /><figcaption>Tarjetas de color seleccionable, con los elementos nativos de HTML &lt;input type=”color”&gt; y &lt;output&gt;</figcaption></figure><p>de referencia, acá dejo el ejemplo corriendo <a href="https://codepen.io/flkt-crnpio/pen/dygbBxy">https://codepen.io/flkt-crnpio/pen/dygbBxy</a></p><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fcodepen.io%2Fflkt-crnpio%2Fembed%2Fpreview%2FdygbBxy%3Fdefault-tabs%3Dcss%252Cresult%26height%3D600%26host%3Dhttps%253A%252F%252Fcodepen.io%26slug-hash%3DdygbBxy&amp;display_name=CodePen&amp;url=https%3A%2F%2Fcodepen.io%2Fflkt-crnpio%2Fpen%2FdygbBxy&amp;image=https%3A%2F%2Fshots.codepen.io%2Fflkt-crnpio%2Fpen%2FdygbBxy-512.jpg%3Fversion%3D1680735001&amp;key=a19fcc184b9711e1b4764040d3dc5c07&amp;type=text%2Fhtml&amp;schema=codepen" width="800" height="600" frameborder="0" scrolling="no"><a href="https://medium.com/media/9b33e375fb38b0bbc518148a64d96c54/href">https://medium.com/media/9b33e375fb38b0bbc518148a64d96c54/href</a></iframe><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=95d736557a12" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[OAI — PMH]]></title>
            <link>https://medium.com/@flktcrnpio/oai-pmh-21f3f571c82d?source=rss-a52abd8531f1------2</link>
            <guid isPermaLink="false">https://medium.com/p/21f3f571c82d</guid>
            <category><![CDATA[oai]]></category>
            <category><![CDATA[oai-pmh]]></category>
            <dc:creator><![CDATA[Flkt Crnpio]]></dc:creator>
            <pubDate>Sat, 14 Nov 2020 00:10:33 GMT</pubDate>
            <atom:updated>2020-11-14T00:35:03.892Z</atom:updated>
            <content:encoded><![CDATA[<h3>OAI — PMH</h3><h4>Protocolo para la recolección de metadatos</h4><p><a href="http://www.openarchives.org/"><strong>Open Archive Initiative</strong></a><strong> (OAI). </strong>La Iniciativa de Archivos Abiertos desarrolla y promueve los protocolos de interoperabilidad entre sistemas para facilitar el intercambio de archivos, en donde por archivo se debe entender, un repositorio de información almacenada.</p><p><strong>Protocol for Metadata Harvesting (OAI — PMH)</strong>. El protocolo para la recolección de metadatos define el mecanismo de interoperabilidad de repositorios para el intercambio de metadatos. Los proveedores de datos son repositorios que exponen metadatos estructurados a través de OAI-PMH, para que los proveedores de servicios realicen solicitudes para recopilar esos metadatos.</p><h3>Características del protocolo OAI — PMH</h3><p>Las solicitudes OAI-PMH se expresan como solicitudes de HTTP.</p><p>Las solicitudes OAI-PMH deben utilizar únicamente los métodos GET o POST y por consecuencia, los repositorios a los que se hagan dichas solicitudes deben soportar ambos tipos de métodos.</p><p>El método GET envía los parámetros por la URL. Los caracteres especiales que se utilicen en las URIs deben estar codificados como se muestra en la lista de <a href="http://www.openarchives.org/OAI/openarchivesprotocol.html#SpecialCharacters">reglas de sintaxis</a> en la documentación de OAI</p><p>e.g.http://an.oa.org/OAI-script?verb=GetRecord&amp;identifier=oai%3AarXiv.org%3Ahep-th%2F9901001&amp;metadataPrefix=oai_dc</p><p>Para el método POST los argumentos son pasados en el cuerpo del mensaje. El Content-Type debe ser declarado como/x-www-form-urlencoded</p><p>e.g. POST http://an.oa.org/OAI-script HTTP/1.0<br>Content-Length: 82<br>Content-Type: application/x-www-form-urlencoded<br>verb=GetRecord&amp;identifier=oai%3AarXiv.org%3Ahep-th%2F9901001&amp;metadataPrefix=oai_dc</p><h4>Tipos de consultas</h4><p>OAI — PMH tiene un conjunto de seis verbos o servicios HTTP</p><ul><li><strong>Identify</strong> . Mediante este servicio se obtiene la información acerca del repositorio de consulta. No se requiere ningún parámetro para hacer esta llamada.</li><li><strong>ListMetadataFormats</strong> . Usado para obtener la lista de formatos de metadata disponibles del repositorio de consulta. Opcionalmente se puede enviar el parámetro <strong>identifier</strong> para obtener los formatos para un récord.</li><li><strong>ListSets. </strong>Se utiliza para obtener la estructura de <em>sets</em> de un repositorio. Puede enviar el argumento <strong>resumptionToken</strong> si se cuenta con un token que regresa una llamada previa al servicio.</li><li><strong>ListIdentifiers</strong> . Para obtener las cabeceras de un récord específico. El único argumento requerido es el <strong>metadataPrefix</strong>, opcionalmente se pueden seleccionar las fechas mediante los argumentos <strong>from</strong> y <strong>until</strong>, también se puede enviar el argumento <strong>set</strong> para especificar el criterio de conjunto y el argumento <strong>resumptionToken</strong> si se cuenta con un token que regresa una llamada previa al servicio.</li><li><strong>ListRecords</strong> . Para obtener los récords de un repositorio. El único argumento requerido es el <strong>metadataPrefix</strong>, opcionalmente se pueden seleccionar las fechas mediante los argumentos <strong>from</strong> y <strong>until</strong>, también se puede enviar el argumento <strong>set</strong> para especificar el criterio de conjunto y el argumento <strong>resumptionToken</strong> si se cuenta con un token que regresa una llamada previa al servicio.</li><li><strong>GetRecord</strong> . Utilizado para obtener la metadata de un récord individual, existente en el repositorio de consulta. Para ejecutar esta llamada se requieren el <strong>identifier</strong> y el <strong>metadataPrefix</strong> de dicho elemento.</li></ul><h4><strong>HTTP status code y códigos de error para las respuestas</strong></h4><p>La respuesta a las solicitudes OAI — PMH deben tener el formato de respuestas de HTTP, con los campos HTTP de encabezado adecuados y el Content-Type debe ser definido como text/xml .</p><p>El estatus de las respuestas se debe implementar con los códigos de estatus estándares <a href="https://www.ietf.org/rfc/rfc2616.txt">HTTP status code</a> que regresen información relevante de los repositorios.</p><p>Por ejemplo:<br>200 — Ok<br>302 — Para redireccionar temporalmente el repositorio (el URI temporal debe enviarse mediante un campo llamado Location en la respuesta del HTTP<br>503 — Fuera de servicio (con un campo Retry-After para especificar el tiempo especificado para volver a intentar)</p><p>Para los errores además de utilizar los códigos de estatus de HTTP, se complementan con otros elementos que de deben agregar en la respuesta. Cada mensaje de error debe tener un atributo code que especifique el <strong><em>OAI — PMH error</em></strong> y puede contener un atributo de texto para enviar información legible para un humano acerca del error.</p><p>El atributo code en el error debe seguir las siguientes reglas:</p><ul><li>Error code: badArgument Se utiliza para todos los servicios cuando la petición tiene atributos repetidos, le faltan parámetros o tienen una sintaxis ilegal.</li><li>Error code: badResumptionToken Para los servicios ListIdentifiers, ListRecords, ListSets. Se envía cuando el valor del token no es válido o ha expirado.</li><li>Error code: badVerb Se utiliza para informar que el verbo (o nombre de servicio) utilizado no existe en OAI-PMH o el campo está duplicado en la petición.</li><li>Error code: cannotDisseminateFormat Para los servicios GetRecord, ListIdentifiers, ListRecords. Se envía cuando el formato de los metadatos identificado por el campo metadataPrefix, no es compatible con el elemento ni el repositorio.</li><li>Error code: idDoesNotExis Se utiliza para los servicios GetRecord, ListMetadataFormats. Cuando el valor del identifier es desconocido o ilegal en el repositorio.</li><li>Error code: noRecordsMatch Para los servicios ListIdentifiers, ListRecords. Se utiliza para decir que la combinación de la petición con los campos from, until, set y metadataPrefix devuelven una lista vacía.</li><li>Error code: noMetadataFormats En el servicio ListMetadataFormats, se utiliza para informar que no existen formatos de metadata para el elemento solicitado.</li><li>Error code: noSetHierarchy En las llamadas con el verbo ListSets, ListIdentifiers, ListRecords se utiliza para informar que el repositorio no soporta <strong>sets</strong>.</li></ul><h4>Archivo de respuesta</h4><p>Todas las respuestas de OAI — PMH deben ser documentos en XML con el siguiente formato:</p><ol><li>La primer etiqueta con la versión del xml en 1.0 con codificación utf8</li><li>El resto del documento debe estar contenido en la etiqueta OAI-PMH la cual debe tener los atributos xmlns , xmlns:xsi y xsi:schemaLocation</li><li>El primer elemento dentro de la etiqueta OAI-PMH debe ser responseDate con la fecha y la hora que es enviada la respuesta en UTC</li><li>El segundo elemento debe ser request con la url de la consulta y los atributos correspondientes al tipo de servicio solicitado.</li><li>El tercer elemento dependiendo de la consulta y la respuesta, puede ser o el mensaje de error o el elemento que retorne la consulta.</li></ol><p>E.j.</p><pre>&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; ?&gt;<br>&lt;OAI-PMH xmlns=&quot;http://www.openarchives.org/OAI/2.0/&quot; <br>         xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot;<br>         xsi:schemaLocation=&quot;http://www.openarchives.org/OAI/2.0/<br>         http://www.openarchives.org/OAI/2.0/OAI-PMH.xsd&quot;&gt;<br> &lt;responseDate&gt;2002-05-01T19:20:30Z&lt;/responseDate&gt;<br> &lt;request verb=&quot;GetRecord&quot; identifier=&quot;oai:arXiv.org:hep-th/9901001&quot;<br>          metadataPrefix=&quot;oai_dc&quot;&gt;http://an.oa.org/OAI-script&lt;/request&gt; <br> &lt;GetRecord&gt;<br>  &lt;record&gt;<br>      ...<br>  &lt;/record&gt;<br> &lt;/GetRecord&gt; <br>&lt;/OAI-PMH&gt;</pre><h4>Respuestas y su control de flujo</h4><p>Para las llamadas que devuelven listas la respuesta puede contener un fragmento de la lista junto con un resumptionToken, el cual sirve para hacer una llamada al mismo servicio y obtener el siguiente fragmento de información.</p><p>Los atributos opcionales como parte del resumptionToken son el expirationDate, un UTCdatetime que especifique la fecha de expiración del token, y el atributo completeListSize con el tamaño de la lista completa.</p><p>Los repositorios que implementan tokens de reanudación deben hacerlo de una manera que permita a los recolectores reanudar una secuencia de solicitudes de listas incompletas volviendo a emitir una solicitud de lista con el token de reanudación más reciente.</p><h4>Referencias</h4><ul><li><a href="https://www.openarchives.org/OAI/openarchivesprotocol.html">Open Archives Initiative - Protocol for Metadata Harvesting - v.2.0</a></li><li><a href="http://travesia.mcu.es/portalnb/jspui/html/10421/1823/intro.htm">OAI para principiantes - OA-Forum tutorial</a></li></ul><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=21f3f571c82d" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Angular 6 Pipe para traducción]]></title>
            <link>https://medium.com/@flktcrnpio/angular-6-pipe-para-traducci%C3%B3n-523cac794ed1?source=rss-a52abd8531f1------2</link>
            <guid isPermaLink="false">https://medium.com/p/523cac794ed1</guid>
            <category><![CDATA[pipe-traducción]]></category>
            <category><![CDATA[angular-6]]></category>
            <dc:creator><![CDATA[Flkt Crnpio]]></dc:creator>
            <pubDate>Mon, 29 Oct 2018 18:28:00 GMT</pubDate>
            <atom:updated>2018-10-29T18:28:00.843Z</atom:updated>
            <content:encoded><![CDATA[<p>Hace poco me toco hacer con un proyecto que necesitaba estar en inglés y español, pero con tan poco texto que pensé que podría ser mejor usar un simple archivo de configuración para cambiar las palabras de la navegación y de algunos títulos.</p><p>Así que me leí un montón de opciones que otra gente había usado y terminé con un bonito pipe, un servicio y un archivo con los arreglos de la traducción.</p><p>El archivo de la traducción es muy simple, es un arreglo las palabras que necesites cambiar dentro de un arreglo de los lenguajes que quieras mostrar. Yo lo guarde dentro de un archivo al que nombre de menu-translation.ts , lo dejo por futuras referencias, ya que después obviamente se necesita cargar en el servicio.</p><pre>export const MENU = {<br>  en: {<br>    home: &#39;Home&#39;,<br>    projects: &#39;Projects&#39;,<br>    studio: &#39;Studio&#39;,<br>    full: &#39;Full Project&#39;<br>  },<br>  es: {<br>    home: &#39;Inicio&#39;,<br>    projects: &#39;Proyectos&#39;,<br>    studio: &#39;Estudio&#39;,<br>    full: &#39;Ver Proyecto&#39;<br>  }<br>};</pre><p>En el servicio translate.service se carga el menú de traducción y con un un simple if*(porque pues nada mas tengo dos lenguajes, no vale la pena hacerle más) cargas el lenguaje seleccionado, para que cuando entre a la vista, el pipe regrese, del idioma seleccionado la palabra del menu correspondiente. También el servicio debe incluir otra función que guarde el lenguaje seleccionado, para luego agregárselo al botón de cambio de idioma en la vista.</p><pre>import { Injectable } from ‘<a href="http://twitter.com/angular/core">@angular/core</a>’;<br>import { Observable } from ‘rxjs/Observable’;</pre><pre>import { MENU } from ‘./menu-translation’;</pre><pre><a href="http://twitter.com/Injectable">@Injectable</a>()<br>export class TranslateService {<br> private _currentLang: string;</pre><pre>constructor() { }</pre><pre>getCurrentLang(): string {<br> if (!this._currentLang) {<br>  this._currentLang = ‘es’;<br> }<br> return this._currentLang;<br>}</pre><pre>setCurrentLang(lang: string) {<br> this._currentLang = lang;<br>}</pre><pre>getMenuTranslation(menuName: string): Observable&lt;string&gt; {<br> this.getCurrentLang();<br> return MENU[this._currentLang][menuName];<br> }<br>}</pre><p>El pipe debe cargar el servicio de traducción, para utilizar sus funciones, y debe tener la propiedad pure:none . Esto no es muy recomendado porque lo que hace es que todo el tiempo esta observando por cambios, si utilizas mucho esta propiedad, puedes matar tu aplicación de lo lenta que va a ser. Pero otra vez, como lo que necesitaba es muy simple pues vale, el tiempo de espera no es nada, no se percibe.</p><pre>import { Pipe, PipeTransform } from ‘<a href="http://twitter.com/angular/core">@angular/core</a>’;<br>import { Observable } from ‘rxjs/Observable’;<br>import { TranslateService } from ‘./translate.service’;</pre><pre><a href="http://twitter.com/Pipe">@Pipe</a>({<br> name: ‘translate’,<br> pure: false<br>})<br>export class TranslatePipe implements PipeTransform {</pre><pre>constructor(private translateService: TranslateService) { }</pre><pre>transform(text: string): Observable&lt;string&gt; {<br> return this.translateService.getMenuTranslation(text);<br> }</pre><pre>}</pre><p>Aquí mezclo la vista y el controlador, la primer línea tiene la función del controlador que manda llamar la función del servicio para setear el lenguaje al que le den click en la vista. Los botones, ya en la vista, simplemente mandan llamar ésta función cuando se les da click. Lo que genera el cambio de traducción en el texto del menú, en donde el primer término dentro de las llaves es el nombre específico del elemento del menú a traducir y el segundo término es el nombre del pipe.</p><pre>changeLang(languaje: string) {<br>  this.translateService.setCurrentLang(languaje);<br>}</pre><pre>&lt;button type=”button” (click)=”changeLang(‘es’)”&gt;esp&lt;/button&gt; <br>&lt;button type=”button” (click)=”changeLang(‘en’)”&gt;eng&lt;/button&gt;</pre><pre><br>&lt;nav&gt;<br>  &lt;a routerLink=&quot;/home&quot;&gt;{{ &#39;home&#39; | translate }}&lt;/a&gt;<br>  &lt;a routerLink=&quot;/projects&quot;&gt;{{ &#39;projects&#39; | translate }}&lt;/a&gt;<br>  &lt;a routerLink=&quot;/studio&quot;&gt;{{ &#39;studio&#39; | translate }}&lt;/a&gt;<br>&lt;/nav&gt;</pre><p>Y listo, super simple, fácil de usar, rápido de hacer. Espero que le sirva a alguien más, aunque en realidad también lo guardo para no olvidar como repetirlo :}</p><p>Saludos a todos, besitos locos.</p><p>Ah! y si alguien quiere leer algunos de los links que leí para hacer ésto, los dejo acá.</p><ul><li><a href="https://scotch.io/tutorials/simple-language-translation-in-angular-2-part-1">Simple Language Translation in Angular 2 (Part 1)</a></li><li><a href="https://toddmotto.com/angular-ngif-async-pipe">Handling Observables with NgIf and the Async Pipe</a></li></ul><p>chau</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=523cac794ed1" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Reflexiones? De cómo pasar de células de carne a niños sagrados terminando en masacre universal.]]></title>
            <link>https://medium.com/@flktcrnpio/reflexiones-comida-vs-ni%C3%B1os-34e161ca4570?source=rss-a52abd8531f1------2</link>
            <guid isPermaLink="false">https://medium.com/p/34e161ca4570</guid>
            <category><![CDATA[reflexiones]]></category>
            <category><![CDATA[caminando-con-esparragus]]></category>
            <dc:creator><![CDATA[Flkt Crnpio]]></dc:creator>
            <pubDate>Sat, 02 Jun 2018 00:27:36 GMT</pubDate>
            <atom:updated>2018-06-02T00:43:20.977Z</atom:updated>
            <content:encoded><![CDATA[<h4>#caminandoConEsparragus</h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*gaSqNLTGkuD925OTdptFkg.jpeg" /><figcaption>Photo by <a href="https://unsplash.com/photos/I3AkWD8gGCg?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Patrick Fore</a> on <a href="https://unsplash.com/search/photos/food-childs?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Unsplash</a></figcaption></figure><p>Una calurosa mañana de mayo, caminábamos con Esparragus elelelperrito hablando del capítulo de <em>Bill Nye Saves the World</em> que había visto el día anterior. Trataba de la comida del futuro, camarones hechos con algas, ensaladas con insectos y un emparedado de carne creada a partir de células animales.</p><p>Acerca de las algas me imaginé que podrían saber bien, con los insectos meh! al menos aquí en México ya se comen, así que pues me pareció hasta falta de imaginación, pero carne creada? carne?! generada!! cómo!?</p><p>Dimos vuelta en la estatua del changuito a fuera del bar de la esquina y la conversación giró hacia otro lugar, ahora estábamos hablando de las cosas sagradas y de porqué el imaginarme comiendo carne creada me ocasionaba tanto conflicto.</p><p>Jonás me contaba de un análisis de <em>Jonathan Haidt</em> de los tipos de personas y su toma de desiciones y de cómo por muy liberales que sean al momento de llegar a las cosas ‘sagradas’ todos se vuelven tan conservadores.</p><blockquote><em>— Piensa en los bebés. </em>-me dijo-<em> Cada que se toca un tema con los niños todos son super cuidadosos, conservadores.</em></blockquote><blockquote><em>— Y claro! es un tema de la supervivencia de la especie, es algo biológico, casi que podría decir que lo traemos escrito en las células.</em> -dije</blockquote><blockquote><em>— Si!</em> -respondió- <em>Entonces porqué no pensando en eso y debido a la cantidad de gente que somos, con la premisa de que los bebes son sagrados, no podemos abordar el tema de la comida y pensar en solucionarlo, en lugar de extrañarnos con la creación celular en laboratorio de la misma.</em></blockquote><blockquote><em>— Pues porque la comida es más sagrada!</em> -respondí</blockquote><blockquote><em>— El problema es la cantidad de gente!</em> -continué</blockquote><p>… me quedé callada de repente y pensé</p><h3>Oh no! Soy Thanos!</h3><p>Porque no puede venir mejor <em>Tuf</em> y salvarnos a todos.</p><p>La idea de <strong>#caminandoConEsparragus</strong> es platicar encuentros chistosos de ideas que pasan esas mañanas en que uno sale de paseo recién despertando con la primer taza de café. No se lo tomen muy en serio.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*nv5MhLSe05xXv0OlwLvvRw.jpeg" /><figcaption>foto de mi mesa</figcaption></figure><h4>Referencias:</h4><ul><li><em>Bill Nye</em> . Quién no conoce a Bill Nye! Bueno, es un ingeniero mecánico que se dedica a la difusión de la ciencia.</li><li><em>Jonathan Haidt</em> . Psicólogo social norteamericano.</li><li><em>Thanos</em> . En la última película de <em>Avengers: Infinity War</em>. Ni les cuento que pasa porque me matan si no la han visto.</li><li><em>Tuf</em> . De L<em>os viajes de Tuf</em>, un libro de<em> George R. R. Martin</em>. Léanlo! en serio esta muy bueno.</li></ul><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=34e161ca4570" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Del desarrollo de mi primer biblioteca de CSS entre errores y aprendizajes.]]></title>
            <link>https://medium.com/@flktcrnpio/del-desarrollo-de-mi-primer-librer%C3%ADa-de-css-entre-errores-y-aprendizajes-2e3680d23c8c?source=rss-a52abd8531f1------2</link>
            <guid isPermaLink="false">https://medium.com/p/2e3680d23c8c</guid>
            <category><![CDATA[journey]]></category>
            <category><![CDATA[framework]]></category>
            <category><![CDATA[sass]]></category>
            <category><![CDATA[css]]></category>
            <category><![CDATA[front-end-development]]></category>
            <dc:creator><![CDATA[Flkt Crnpio]]></dc:creator>
            <pubDate>Sun, 20 May 2018 07:07:50 GMT</pubDate>
            <atom:updated>2022-08-26T03:33:27.206Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*wJzjdFWe6bmgpfceuuNhqQ.jpeg" /><figcaption><a href="http://flkt-crnpio.github.io/pitaya/">http://flkt-crnpio.github.io/pitaya/</a></figcaption></figure><p>La primera vez que quise hacer una librería de CSS, fue cuando leí de que el problema de que todo se parezca en la web, es porque todo el mundo utiliza la misma librería (en el mejor de los casos) o los mismos templates.</p><p>Por el 2016 era aburrido pasar el día navegando y ver como con las horas vas confirmando esa teoría, bootstrap por aquí bootstrap por allá, ese maldito botón azul por todos lados, así que decidí hacer algo al respecto, mi primer librería, única, especial, la mejor, capaz de romper con todo!</p><p>Pero lo único que rompí fue mi cabeza (y luego unas cuantas páginas en las que la probé).</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*8bTXXLTmb9c8lLU8GheJAg.jpeg" /></figure><p>Comencé queriendo cambiar todo, desde el origen, incluso el código parecía espagueti ¿Porqué he de seguir las reglas, si justamente ese es el problema?</p><p>Ingenua, ¿no?</p><p>Me di cuenta que la librería es un modelo que uno propone al mundo y que mientras menos edición necesites hacer para usarla, ahorras tiempo y trabajo, lo que la hace útil. Y lo que quería que sobre todo mi librería fuera útil.</p><p>Cuando el proyecto creció comencé a estandarizarlo, para poder leerlo al menos, porque mantener un código espagueti es un dolor de cabeza, incluso en el pastafarismo.</p><p>Conforme tomaba una mejor forma de algo utilizable, más se parecía al resto de los frameworks. Al intentar estandarizar algo con tantas variantes (que sea funcional para tiendas, artistas, galerías, blogs, canales) terminó perdiendo su particularidad. Ese estilo único que quería lograr, parecía ser solo lograble al hacerlo de manera <em>artesanal</em>, creando una hoja de estilos única desde el interlineado hasta los elementos embebidos.</p><p>Terminé de editar la librería peleando un poco entre la estandarización y la particularidad. En ella puedes editar algunas variables generales para cambiar características básicas, como el color, la fuente o el espacio entre los elementos, pero en lugar de librería creo que se asemeja más a un diccionario de estilos.</p><p>No pude estandarizarla sin perder el estilo, debía de ser una herramienta para optimizar el tiempo eliminando el código repetitivo, tanto dentro del proyecto como entre un proyecto y otro. Además, para funcionar en varios tipos de proyectos debía ser capaz de funcionar desarticuladamente, sin cargar archivos que jamas se usan. Debía mantenerse encapsulada, por si tiene que coexistir con otras librerías, no se deformaran una con la otra. Debía ser fácilmente manipulable para acercarme lo mas posible al resultado final que es la guía de estilo del proyecto a desarrollar. Y… debía cambiar tanto el proyecto que mejor convenía volver a comenzar.</p><h4>Reconociendo la derrota.</h4><p>Un poco decepcionada le di carpetazo al proyecto. Pitaya murió unos meses después de su creación, pero decidí no borrarla porque me podría servir de base de futuras referencias.</p><p>Le aprendí bastante mientras estuve peleando con ella, lo mas memorable fueron un par de experimentos con el input checkbox y su atributo checked, para crear <a href="https://codepen.io/flkt-crnpio/pen/WxROwy">pestañas</a> y las secciones <a href="https://codepen.io/flkt-crnpio/pen/gMgbvN">colapsables</a>, que ya existen nativamente con la etiqueta de&lt;details&gt;, aunque en aquel momento no la conocía.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*ZfrQItaaPy6IdkUwxqiFNA.jpeg" /><figcaption>Tabs de PitayaCSS en codepen.io</figcaption></figure><p>Aquí dejo las ligas de Pitaya, por si alguien está de curioso.</p><ul><li><a href="http://flkt-crnpio.github.io/pitaya/">http://flkt-crnpio.github.io/pitaya/</a></li><li><a href="https://codepen.io/flkt-crnpio/pen/WxROwy">https://codepen.io/flkt-crnpio/pen/WxROwy</a></li><li><a href="https://codepen.io/flkt-crnpio/pen/gMgbvN">https://codepen.io/flkt-crnpio/pen/gMgbvN</a></li><li><a href="https://github.com/flkt-crnpio/pitaya">https://github.com/flkt-crnpio/pitaya</a></li></ul><h4>Tomar aliento y volverlo a intentar.</h4><p>Al final he comenzado una nueva librería modular, de hecho cada modulo es un proyecto separado de github y se pueden utilizar independientes.</p><p>He comenzado como debí comenzar, desde el normalize y aunque son proyectos independientes, están estructurados de la misma manera para no volverme a perder.</p><p>Además, esta vez pude implementar pruebas reales en sitios con diferentes requerimientos.</p><p>Aun sigo desarrollando módulos para este nuevo proyecto, siento que la base esta terminada, pero sigo sin documentar asi que ya hablaré de éste tema después, cuando pueda poner ejemplos.</p><h4>Gracias por leer!</h4><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=2e3680d23c8c" width="1" height="1" alt="">]]></content:encoded>
        </item>
    </channel>
</rss>