tag:blogger.com,1999:blog-32796038304042518432024-02-20T09:32:46.965-05:00Tutoriales Técnicos¡Explora y ríe con Tutoriales Técnicos! Aquí, desenredamos el desarrollo de software con guías amenas y te mantenemos al tanto de lo último en tecnología. Aprende, diviértete y lleva tus habilidades digitales al próximo nivel. ¡Tu aventura tecnológica comienza aquí!Willian Diazhttp://www.blogger.com/profile/12030062158428083614noreply@blogger.comBlogger50125tag:blogger.com,1999:blog-3279603830404251843.post-2627987667357070222023-11-30T20:24:00.001-05:002023-11-30T20:24:07.371-05:00La Revolución Silenciosa: Cómo la Inteligencia Artificial Está Transformando Nuestra Vida Cotidiana<p style="text-align: left;"></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgKhzDGgGR4rlgMncozNprWNRcdIXQLfYM9ehZlEAffzi60N6SRnUV5QBMVhY25tL_yf4b5Y3W2344qDbJjfDvM91iqWaBipx4rlO66cxLX0c5vrh1BvaUqTQcorXfcAoYAnoxdSdvhZeEjU3CsBIwWTrkYt75zmI16MSa0nCyzb_-ZR3GxS9-UoXhZVR1s/s1024/DALL%C2%B7E%202023-11-30%2019.00.15%20-%20A%20futuristic%20and%20humorous%20illustration%20representing%20the%20integration%20of%20artificial%20intelligence%20in%20daily%20life.%20The%20image%20should%20feature%20various%20element.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1024" data-original-width="1024" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgKhzDGgGR4rlgMncozNprWNRcdIXQLfYM9ehZlEAffzi60N6SRnUV5QBMVhY25tL_yf4b5Y3W2344qDbJjfDvM91iqWaBipx4rlO66cxLX0c5vrh1BvaUqTQcorXfcAoYAnoxdSdvhZeEjU3CsBIwWTrkYt75zmI16MSa0nCyzb_-ZR3GxS9-UoXhZVR1s/w400-h400/DALL%C2%B7E%202023-11-30%2019.00.15%20-%20A%20futuristic%20and%20humorous%20illustration%20representing%20the%20integration%20of%20artificial%20intelligence%20in%20daily%20life.%20The%20image%20should%20feature%20various%20element.png" width="400" /></a></div><p></p><br /><h2 style="text-align: left;">Introducción:</h2><p>Hola, ¡bienvenido a la era de los susurros tecnológicos! Aquí, en el tranquilo mundo de la Inteligencia Artificial (IA), donde las máquinas hablan en código y los algoritmos deciden qué café te gusta más. Sí, has leído bien. La IA no es solo una charla de nerds en una convención de ciencia ficción; es una realidad cotidiana, tan integrada en nuestras vidas que a veces ni siquiera nos damos cuenta. En este artículo, vamos a explorar (¡sin necesidad de un mapa del tesoro!) cómo la IA está cambiando silenciosamente todo, desde cómo bostezamos por la mañana hasta cómo nos deslizamos por nuestras redes sociales por la noche.</p><p><br /></p><h2 style="text-align: left;">1. Asistentes Personales Inteligentes:</h2><p>¿Alguna vez has deseado tener un asistente personal que no se queje de tus malos chistes? ¡Bueno, la IA te cubre! Siri, Alexa y Google Assistant son como los genios de las lámparas modernas (pero sin límite de tres deseos). Vamos a profundizar en cómo estos pequeños genios digitales están haciendo nuestras vidas un poco menos complicadas. <a href="https://tutorialestecnicos.blogspot.com/2023/11/asistentes-personales-inteligentes-la.html" target="_blank">Leer más.</a></p><p><br /></p><h2 style="text-align: left;">2. Recomendaciones Personalizadas en Plataformas de Streaming:</h2><p>¿Te has preguntado cómo Netflix sabe que te encantará esa serie rara de ciencia ficción? No, no es magia; es IA. Aquí te contaré sobre los algoritmos que conocen tus gustos mejor que tu mejor amigo. <a href="https://tutorialestecnicos.blogspot.com/2023/11/recomendaciones-personalizadas-en.html" target="_blank">Leer más.</a></p><p><br /></p><h2 style="text-align: left;">3. IA en el Comercio Electrónico:</h2><p>De compras en pijama y aún así recibiendo recomendaciones personalizadas: exploraremos cómo la IA está transformando la forma en que compramos en línea, desde escoger el par de zapatos perfecto hasta encontrar esa oferta de último minuto. <a href="https://tutorialestecnicos.blogspot.com/2023/11/ia-en-el-comercio-electronico-tu.html" target="_blank">Leer más.</a></p><p><br /></p><h2 style="text-align: left;">4. IA en Dispositivos Domésticos:</h2><p>Nuestros hogares están más conectados que una red de chismes de vecindario, gracias a la IA. Descubre cómo la tecnología está haciendo que nuestras casas sean más inteligentes y por qué tal vez quieras agradecer a tu refrigerador la próxima vez que haga la lista de compras. <a href="https://tutorialestecnicos.blogspot.com/2023/11/ia-en-dispositivos-domesticos-hogares.html" target="_blank">Leer más.</a></p><p><br /></p><h2 style="text-align: left;">5. Impacto en la Salud y Bienestar:</h2><p>La IA no solo se trata de comodidad y entretenimiento; también está ayudando a mantenernos en forma y saludables. Desde aplicaciones que monitorean tu sueño hasta dispositivos que te recuerdan beber agua, la IA está aquí para cuidar de ti. <a href="https://tutorialestecnicos.blogspot.com/2023/11/impacto-de-la-ia-en-la-salud-y-el.html" target="_blank">Leer más.</a></p><p><br /></p><h2 style="text-align: left;">Conclusión:</h2><p>Entonces, ¿es la IA el futuro? ¡No! La IA es el presente, y está moldeando nuestro mundo de maneras que ni siquiera hemos empezado a comprender completamente. Pero no te preocupes, no estamos en una película de ciencia ficción apocalíptica... aún. Por ahora, disfrutemos de las maravillas de esta revolución silenciosa, siempre recordando usar la tecnología con sabiduría y un toque de humanidad.</p>Willian Diazhttp://www.blogger.com/profile/12030062158428083614noreply@blogger.com0tag:blogger.com,1999:blog-3279603830404251843.post-37201844050698169072023-11-30T20:22:00.001-05:002023-11-30T20:22:03.271-05:00Impacto de la IA en la Salud y el Bienestar: Tu Entrenador Personal en el Bolsillo<p> </p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjyds2MuEt-MHiB3LTLQzU9x3qxSHEPYrJDFxCTTozR6rYxUOeqX8nmauIbX2_OydcVXXvsb5LYWOTnybF9g7oIuNhbjbJjM2P6eJS1LfbnmBc4jyCTk-aVJDq-VVBbtWQQxcnbKSLPU55UzifAG_nfpy5-iN4NJkl7SWU1sS_fLAANmWkpR6121RCtZnf4/s1024/DALL%C2%B7E%202023-11-30%2020.20.59%20-%20A%20colorful%20and%20humorous%20illustration%20representing%20the%20impact%20of%20AI%20on%20health%20and%20wellness.%20The%20image%20should%20feature%20a%20variety%20of%20health-related%20elemen.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1024" data-original-width="1024" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjyds2MuEt-MHiB3LTLQzU9x3qxSHEPYrJDFxCTTozR6rYxUOeqX8nmauIbX2_OydcVXXvsb5LYWOTnybF9g7oIuNhbjbJjM2P6eJS1LfbnmBc4jyCTk-aVJDq-VVBbtWQQxcnbKSLPU55UzifAG_nfpy5-iN4NJkl7SWU1sS_fLAANmWkpR6121RCtZnf4/w400-h400/DALL%C2%B7E%202023-11-30%2020.20.59%20-%20A%20colorful%20and%20humorous%20illustration%20representing%20the%20impact%20of%20AI%20on%20health%20and%20wellness.%20The%20image%20should%20feature%20a%20variety%20of%20health-related%20elemen.png" width="400" /></a></div><br /><p></p><h2 style="text-align: left;">Introducción:</h2><p>¿Imaginas tener un entrenador personal que vive en tu smartphone y no te juzga por ese helado extra que comiste anoche? La Inteligencia Artificial (IA) está revolucionando el cuidado de la salud y el bienestar de formas que nunca imaginamos, ¡y no necesita que le pagues una membresía de gimnasio!</p><p><br /></p><h2 style="text-align: left;">Tu Salud en Tus Manos (Literalmente):</h2><p>Las aplicaciones impulsadas por IA están transformando nuestros teléfonos en centros de salud personalizados. ¿Quieres mejorar tu calidad de sueño? Hay una app que analiza tus patrones de sueño y te da consejos para dormir mejor. ¿Olvidas constantemente beber agua? No te preocupes, tu teléfono vibrará recordándote que es hora de hidratarte. Incluso hay aplicaciones que pueden ayudarte a meditar, reducir el estrés y hasta guiarte en ejercicios de respiración. ¡Adiós, estrés!</p><p><br /></p><h2 style="text-align: left;">Un Vistazo al Futuro de la Salud:</h2><p>Pero la IA no se detiene ahí. Está ayudando a los médicos a diagnosticar enfermedades con mayor precisión y rapidez, desde detectar anomalías en imágenes de rayos X hasta identificar síntomas de enfermedades raras. En el futuro, podríamos ver dispositivos aún más avanzados, como sensores que monitorean nuestra salud en tiempo real y nos avisan si algo anda mal. ¡Es como tener un doctor en tu bolsillo!</p><p><br /></p><h2 style="text-align: left;">Conclusión:</h2><p>La IA en el ámbito de la salud y el bienestar no es solo una tendencia pasajera; es una revolución que está aquí para quedarse. Con su ayuda, estamos aprendiendo a cuidar mejor de nosotros mismos y de nuestros seres queridos. Así que la próxima vez que tu reloj inteligente te diga que te muevas, ¡hazle caso! Podría ser el empujoncito que necesitas para llevar una vida más saludable. Y recuerda, ¡la IA está de tu lado!</p>Willian Diazhttp://www.blogger.com/profile/12030062158428083614noreply@blogger.com0tag:blogger.com,1999:blog-3279603830404251843.post-14830637480445765082023-11-30T20:18:00.001-05:002023-11-30T20:18:03.132-05:00IA en Dispositivos Domésticos: Hogares Inteligentes y sus Chismes Tecnológicos<p> </p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiKB_EcCyU8YYajotUtzK1nS_IeWDeOLGF-9Aq7TWTL3KX4kmQDDTyoidFhtJzR75KJV0EOWg5JEQPI5uM4kXvVJTyu6et8oniij9lw4rcHRbqJzNE1TSHS6wsofwU-N5cNBq_yRq08izNFMvd77mT5SJR0yGfgNGkjKuO33PPwjKOxo2E0scp1jC2NZmwN/s1024/DALL%C2%B7E%202023-11-30%2020.16.54%20-%20A%20colorful%20and%20humorous%20illustration%20representing%20the%20concept%20of%20smart%20home%20devices%20influenced%20by%20artificial%20intelligence.%20The%20scene%20should%20show%20a%20var.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1024" data-original-width="1024" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiKB_EcCyU8YYajotUtzK1nS_IeWDeOLGF-9Aq7TWTL3KX4kmQDDTyoidFhtJzR75KJV0EOWg5JEQPI5uM4kXvVJTyu6et8oniij9lw4rcHRbqJzNE1TSHS6wsofwU-N5cNBq_yRq08izNFMvd77mT5SJR0yGfgNGkjKuO33PPwjKOxo2E0scp1jC2NZmwN/w400-h400/DALL%C2%B7E%202023-11-30%2020.16.54%20-%20A%20colorful%20and%20humorous%20illustration%20representing%20the%20concept%20of%20smart%20home%20devices%20influenced%20by%20artificial%20intelligence.%20The%20scene%20should%20show%20a%20var.png" width="400" /></a></div><br /><p></p><h2 style="text-align: left;">Introducción:</h2><p>Imagina un mundo donde tu refrigerador critica tus elecciones de snacks nocturnos, o tu aspiradora tiene un mapa mental de cada rincón de tu sala. Bueno, no estamos lejos de eso. Con la Inteligencia Artificial (IA) infiltrándose en nuestros hogares, estamos viviendo en una versión menos dramática de una película de ciencia ficción. Vamos a zambullirnos en este mundo donde los dispositivos hablan, piensan (un poco) y, lo más importante, nos hacen la vida más fácil.</p><p><br /></p><h2 style="text-align: left;">Los Chismosos de la Casa: Dispositivos Inteligentes:</h2><p>Desde termostatos que aprenden tu rutina diaria hasta luces que cambian de color según tu estado de ánimo, la IA está convirtiendo nuestros hogares en algo sacado de una novela futurista. Y no es solo por diversión; hay una utilidad real aquí. Por ejemplo, esa cámara de seguridad que te avisa si un extraño ronda tu casa, o el asistente de voz que te recuerda comprar leche. ¿Quién necesita un mayordomo cuando tienes un ecosistema de gadgets inteligentes que se ocupan de todo?</p><p><br /></p><h2 style="text-align: left;">Hablando con las Paredes: La Integración de IA:</h2><p>La integración de IA en dispositivos domésticos no se trata solo de comodidad; es una revolución en cómo interactuamos con nuestro entorno. Ahora puedes hablarle a tu televisor para cambiar de canal o preguntarle a tu horno cómo cocinar el pollo perfecto. Y mientras que algunos podrían argumentar que nos estamos volviendo demasiado dependientes de estos dispositivos, la mayoría diría que es simplemente aprovechar lo que la tecnología tiene para ofrecer.</p><p><br /></p><h2 style="text-align: left;">Conclusión: Agradeciendo a tus Electrodomésticos:</h2><p>Así que la próxima vez que pases por tu nevera, tal vez quieras darle las gracias. Después de todo, está trabajando diligentemente para asegurarse de que nunca te falten tus snacks favoritos. La IA en los dispositivos domésticos no solo está haciendo nuestras casas más inteligentes, sino que también está agregando un toque de magia tecnológica a nuestras vidas cotidianas. Y quién sabe, tal vez en el futuro, incluso nuestros tostadores tendrán algo interesante que decir.</p><p><br /></p>Willian Diazhttp://www.blogger.com/profile/12030062158428083614noreply@blogger.com0tag:blogger.com,1999:blog-3279603830404251843.post-77407483970757013052023-11-30T20:11:00.003-05:002023-11-30T20:11:49.338-05:00 IA en el Comercio Electrónico: Tu Estilista Personal en Pijama<p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgnraINL81ig_zLUVmE6PrCTE667AFwkBmU4zrBfGUbbondxCby0VH48LaEBb2gmifv7Tkgu_T6k4p7QapToupLH8AiD5zSM9tHdlyzbAzTo_d6f0QLpnSS6z0mRBmU8GMIXWGXGbw_0hPURc4TYgqOs0IkFQw4UZfD_3b1gXMslF3ovHb6ns5svHVJV9JO/s1024/DALL%C2%B7E%202023-11-30%2020.09.27%20-%20A%20colorful,%20humorous%20illustration%20representing%20the%20concept%20of%20AI%20in%20e-commerce.%20The%20image%20shows%20a%20person%20in%20pajamas%20shopping%20online%20on%20a%20laptop,%20surro.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1024" data-original-width="1024" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgnraINL81ig_zLUVmE6PrCTE667AFwkBmU4zrBfGUbbondxCby0VH48LaEBb2gmifv7Tkgu_T6k4p7QapToupLH8AiD5zSM9tHdlyzbAzTo_d6f0QLpnSS6z0mRBmU8GMIXWGXGbw_0hPURc4TYgqOs0IkFQw4UZfD_3b1gXMslF3ovHb6ns5svHVJV9JO/w400-h400/DALL%C2%B7E%202023-11-30%2020.09.27%20-%20A%20colorful,%20humorous%20illustration%20representing%20the%20concept%20of%20AI%20in%20e-commerce.%20The%20image%20shows%20a%20person%20in%20pajamas%20shopping%20online%20on%20a%20laptop,%20surro.png" width="400" /></a></div><br /><h2 style="text-align: left;"> Introducción:</h2><p></p><p>¿Quién hubiera imaginado que comprar en pijama podía convertirse en una experiencia tan personalizada y sofisticada? Gracias a la inteligencia artificial (IA), el comercio electrónico ha evolucionado de ser solo una conveniencia a ser una experiencia casi mágica, donde cada clic te acerca más a lo que realmente quieres (¡o a lo que no sabías que querías hasta que lo viste!).</p><p><br /></p><h2 style="text-align: left;">La Magia Detrás del Carrito de Compras:</h2><p>Piénsalo: cada vez que buscas un nuevo par de zapatillas en línea, aparecen sugerencias que parecen leer tu mente. ¿Es telepatía? No, es IA. Utilizando datos de tus búsquedas anteriores, compras y hasta los artículos que abandonaste en el carrito, la IA configura un perfil de tus gustos y preferencias. Así, cada sugerencia es como un consejo de un amigo que conoce tus gustos a la perfección.</p><p><br /></p><h2 style="text-align: left;">Más Que Solo Compras: Una Experiencia Personalizada:</h2><p>En el mundo del e-commerce impulsado por IA, cada usuario recibe una experiencia de compra única. ¿Te gustan los estampados de leopardo? La IA lo recordará. ¿Prefieres las ofertas sobre las novedades? También lo sabrá. Esta tecnología no solo te muestra productos que podrían gustarte, sino que también adapta las ofertas y promociones según tus hábitos de compra. ¡Adiós, anuncios irrelevantes!</p><p><br /></p><h2 style="text-align: left;">Un Futuro de Compras Inteligentes:</h2><p>La IA está transformando no solo cómo compramos, sino también cómo se gestionan los inventarios y se predice la demanda. Imagina un futuro donde nunca haya un "agotado" en tu talla porque la IA ya predijo la demanda y ajustó el stock. O donde los precios fluctúen inteligentemente según las tendencias de mercado, maximizando tanto la satisfacción del cliente como el beneficio de la tienda.</p><p><br /></p><h2 style="text-align: left;">Conclusión:</h2><p>Comprar en línea ya no es solo hacer clic en un botón de compra. Es una experiencia personalizada, casi como tener un estilista personal que te conoce mejor que nadie (¡y todo esto mientras estás cómodamente en pijama!). La IA en el comercio electrónico no es solo una moda pasajera; es el futuro brillante y emocionante del shopping online. Así que la próxima vez que recibas una recomendación perfecta, recuerda: hay una IA trabajando para hacerte feliz.</p>Willian Diazhttp://www.blogger.com/profile/12030062158428083614noreply@blogger.com0tag:blogger.com,1999:blog-3279603830404251843.post-84922176995863865052023-11-30T20:05:00.002-05:002023-11-30T20:05:27.070-05:00Recomendaciones Personalizadas en Plataformas de Streaming: El Genio Detrás de la Pantalla<p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi9y8bMBdUU3EWHWhObPlEg3ukILCQNHascYua68ODMNSm4Oyuspb4ux8k3EumcA_bg3dQHcvgiDasNjvc1UCw-bi1UCODbTwnQVWzUEwne6ahbVESRd2lwfCN19w6ZtQW6dofIAAVqJ3vca44blPEcAY_b-YUFSeveW-BZ9Mo5fTnsRpYq216ZHSu-CPY_/s1024/DALL%C2%B7E%202023-11-30%2020.03.23%20-%20A%20colorful%20and%20humorous%20illustration%20representing%20the%20concept%20of%20personalized%20recommendations%20on%20streaming%20platforms.%20The%20image%20shows%20a%20diverse%20group%20.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1024" data-original-width="1024" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi9y8bMBdUU3EWHWhObPlEg3ukILCQNHascYua68ODMNSm4Oyuspb4ux8k3EumcA_bg3dQHcvgiDasNjvc1UCw-bi1UCODbTwnQVWzUEwne6ahbVESRd2lwfCN19w6ZtQW6dofIAAVqJ3vca44blPEcAY_b-YUFSeveW-BZ9Mo5fTnsRpYq216ZHSu-CPY_/w400-h400/DALL%C2%B7E%202023-11-30%2020.03.23%20-%20A%20colorful%20and%20humorous%20illustration%20representing%20the%20concept%20of%20personalized%20recommendations%20on%20streaming%20platforms.%20The%20image%20shows%20a%20diverse%20group%20.png" width="400" /></a></div><br /><h2 style="text-align: left;">Introducción:</h2><p></p><p>¿Te ha sorprendido alguna vez esa sensación de que Netflix te conoce mejor que tu propia madre? Pues no estás solo. Resulta que detrás de esas recomendaciones, tan precisas que dan miedo, hay un cerebrito trabajando incansablemente: la inteligencia artificial. Y no, no se trata de un stalker digital, sino de algoritmos sofisticados que se han vuelto expertos en descifrar tus gustos y preferencias.</p><p><br /></p><h2 style="text-align: left;">El Misterio de las Recomendaciones Personalizadas:</h2><p>Imagina un chef que, sin preguntarte, prepara tu plato favorito cada vez que visitas su restaurante. Así funciona la IA en las plataformas de streaming. Estos algoritmos observan y aprenden de cada elección que haces: lo que miras, lo que te gusta, incluso lo que descartas después de 10 minutos. Basándose en estos datos, te presentan una bandeja llena de opciones personalizadas que probablemente te encantarán. Y lo mejor de todo es que, ¡no tienes que compartir tus palomitas de maíz con ellos!</p><p><br /></p><h2 style="text-align: left;">Más Allá del "Me Gusta":</h2><p>La IA en las plataformas de streaming va más allá de un simple "me gusta". Estos sistemas son como aquel amigo que te recomienda libros, pero a nivel experto. Analizan tendencias, calificaciones, e incluso se atreven a sugerirte algo fuera de tu zona de confort, como esa serie de documentales sobre insectos que, sorprendentemente, terminaste maratoneando un fin de semana.</p><p><br /></p><h2 style="text-align: left;">El Humor y la Inteligencia Artificial:</h2><p>Y lo que es más intrigante, estos sistemas aprenden con el tiempo. Empiezan entendiendo tus elecciones básicas y, poco a poco, se convierten en expertos de tus hábitos. ¿El resultado? Una experiencia de visualización tan personalizada que te sentirás como en una cita con tu alma gemela cinematográfica.</p><p><br /></p><h2 style="text-align: left;">Conclusión:</h2><p>En resumen, la próxima vez que te encuentres navegando por las recomendaciones de tu plataforma de streaming favorita, recuerda: no es magia, es inteligencia artificial. Estos algoritmos no solo conocen tus gustos, sino que también te desafían a explorar nuevos horizontes. Así que, ¡dale una oportunidad a esa sugerencia rara y disfruta del viaje que la IA ha preparado para ti!</p><p><br /></p>Willian Diazhttp://www.blogger.com/profile/12030062158428083614noreply@blogger.com0tag:blogger.com,1999:blog-3279603830404251843.post-2312242997910739752023-11-30T19:32:00.001-05:002023-11-30T19:32:02.463-05:00Asistentes Personales Inteligentes: La Magia de la IA en Tu Bolsillo<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj2xEjVYGYOa-hCLZ25GQ3Zs2qd6JayI2-mM1cRumNp9IaxrI_DEPQYZSfpk9JxC8Q_q5ub8LlMiWQTd0UjGQOm6Gvclm3s4YHbnZ3DE9DYgwSWnrKJj3ubwOGnH4WAn_tL_mKUSED7ujJENLynPjmZM5EmvSn98oPO0goTJZrtwOkUfepkAJzjiKJxViEg/s1024/DALL%C2%B7E%202023-11-30%2019.26.50%20-%20Una%20ilustraci%C3%B3n%20humor%C3%ADstica%20y%20colorida%20de%20asistentes%20personales%20inteligentes%20en%20la%20vida%20cotidiana.%20Muestra%20caricaturas%20de%20Siri,%20Alexa%20y%20Google%20Assista.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1024" data-original-width="1024" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj2xEjVYGYOa-hCLZ25GQ3Zs2qd6JayI2-mM1cRumNp9IaxrI_DEPQYZSfpk9JxC8Q_q5ub8LlMiWQTd0UjGQOm6Gvclm3s4YHbnZ3DE9DYgwSWnrKJj3ubwOGnH4WAn_tL_mKUSED7ujJENLynPjmZM5EmvSn98oPO0goTJZrtwOkUfepkAJzjiKJxViEg/w400-h400/DALL%C2%B7E%202023-11-30%2019.26.50%20-%20Una%20ilustraci%C3%B3n%20humor%C3%ADstica%20y%20colorida%20de%20asistentes%20personales%20inteligentes%20en%20la%20vida%20cotidiana.%20Muestra%20caricaturas%20de%20Siri,%20Alexa%20y%20Google%20Assista.png" width="400" /></a></div><br /><h2 style="text-align: left;">Introducción:</h2><p>Imagina un mundo donde tienes un asistente personal que no solo es infalible sino que también soporta pacientemente tus bromas a altas horas de la madrugada. Ese mundo es ahora una realidad gracias a Siri, Alexa y Google Assistant. Estos asistentes virtuales, que han ido más allá de la mera tolerancia a nuestros chistes malos, están redefiniendo nuestra interacción cotidiana con la tecnología. Olvídate de frotar lámparas mágicas; estos genios digitales están listos para cumplir tus deseos con solo un comando de voz.</p><p><br /></p><h2 style="text-align: left;">La Vida con Asistentes Personales Inteligentes:</h2><p>La era de los asistentes personales inteligentes es una mezcla de comodidad y magia. Imagina despertar cada mañana con el aroma de un café recién hecho porque Alexa recordó encender tu cafetera inteligente. O qué tal cuando Siri te salva de un momento incómodo recordándote el nombre de alguien justo antes de una reunión. Y cuando se trata de evitar el tráfico, Google Assistant se convierte en tu copiloto personal, encontrando la ruta más rápida y segura a tu destino.</p><p><br /></p><h2 style="text-align: left;">Más que Simples Ayudantes:</h2><p>Pero la verdadera magia de estos asistentes va más allá de las tareas diarias. Son como amigos digitales que te conocen íntimamente. ¿Quieres relajarte? Alexa puede reproducir tu lista de reproducción de jazz favorita sin que tengas que pedírselo dos veces. ¿Necesitas un empujoncito para hacer ejercicio? Google Assistant te recordará amablemente tu rutina de ejercicios, y Siri puede incluso motivarte con un poco de humor. Son como esos amigos perfectos, siempre disponibles, nunca críticos y eternamente pacientes.</p><p><br /></p><h2 style="text-align: left;">Conclusiones:</h2><p>Los asistentes personales inteligentes son más que una maravilla tecnológica; son compañeros en nuestro viaje diario, facilitadores de una vida más fácil y entretenida. No solo están aquí para cumplir órdenes, sino para enriquecer nuestra vida diaria con su inteligencia y su toque personal. La próxima vez que interactúes con tu asistente de IA, recuerda que estás presenciando un milagro de la tecnología moderna: un genio en tu bolsillo, siempre listo para ayudarte con una sonrisa digital.</p>Willian Diazhttp://www.blogger.com/profile/12030062158428083614noreply@blogger.com0tag:blogger.com,1999:blog-3279603830404251843.post-41928837233948297462023-05-21T00:00:00.001-05:002023-11-30T20:28:12.768-05:00¿Cómo ha cambiado la tecnología nuestras vidas?<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi6fn5uzL67U-rjvSJGoYET5LgNN-h9jIDagWbYQzriGYQD4ZjplOi7JG-opjUHwNbChqG6RFC_C4qxKF1j0W94kJCWrNowJIJYWY7iRE7JLu5A0LGC3a3TGtZ01Mg_-ktNPdio_Uk5KHeBW_FdyfnHiRwxf8FtSMIETxTZRDujc6WVG75foCQzDfajjiMY/s1024/DALL%C2%B7E%202023-11-30%2020.26.40%20-%20A%20futuristic%20illustration%20representing%20the%20impact%20of%20technology%20on%20various%20aspects%20of%20life,%20featuring%20a%20digital%20landscape%20with%20icons%20or%20visual%20represe.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1024" data-original-width="1024" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi6fn5uzL67U-rjvSJGoYET5LgNN-h9jIDagWbYQzriGYQD4ZjplOi7JG-opjUHwNbChqG6RFC_C4qxKF1j0W94kJCWrNowJIJYWY7iRE7JLu5A0LGC3a3TGtZ01Mg_-ktNPdio_Uk5KHeBW_FdyfnHiRwxf8FtSMIETxTZRDujc6WVG75foCQzDfajjiMY/w400-h400/DALL%C2%B7E%202023-11-30%2020.26.40%20-%20A%20futuristic%20illustration%20representing%20the%20impact%20of%20technology%20on%20various%20aspects%20of%20life,%20featuring%20a%20digital%20landscape%20with%20icons%20or%20visual%20represe.png" width="400" /></a></div><br /><p>La tecnología ha cambiado nuestras vidas de formas increíbles. ¿Te has detenido alguna vez a pensar en cómo ha cambiado la forma en que nos comunicamos, cómo aprendemos o incluso cómo cuidamos nuestra salud? En este artículo, vamos a explorar todo eso y más.</p><p>Primero, vamos a hablar sobre cómo la <b>Transformación Digital</b> ha cambiado la forma en que interactuamos con el mundo. Ya no necesitamos mapas de papel o enciclopedias pesadas. Todo lo que necesitamos está al alcance de nuestros dedos.</p><p>Luego, nos adentraremos en el mundo de la<b> Tecnología y Salud</b>. ¿Sabías que la tecnología está ayudando a los médicos a salvar vidas y a hacer que la atención médica sea más accesible para todos?</p><p>Después, hablaremos sobre la <b>Tecnología en la Educación</b>. Las aulas ya no están limitadas a cuatro paredes. Ahora, podemos aprender desde cualquier lugar, en cualquier momento.</p><p>Por último, pero no menos importante, discutiremos la<b> Tecnología y el Medio Ambiente</b>. Aunque la tecnología puede tener un impacto en nuestro planeta, también está ayudando a encontrar soluciones para un futuro más verde y sostenible.</p><p>Así que, si estás listo para un viaje emocionante a través de cómo la tecnología ha cambiado nuestras vidas, ¡sigue leyendo!</p><h2 style="text-align: left;">Transformación Digital: Un salto hacia el futuro</h2><h3 style="text-align: left;">La revolución de la comunicación: De cartas a mensajes instantáneos</h3><p>La Transformación Digital ha marcado un antes y un después en nuestra forma de interactuar con el mundo. Este salto hacia el futuro ha sido impulsado por la rápida evolución de la tecnología, que ha cambiado la forma en que trabajamos, aprendemos, nos comunicamos y, en general, vivimos nuestras vidas. La digitalización ha abierto un mundo de posibilidades, permitiéndonos acceder a información y servicios con solo unos pocos clics o toques en una pantalla. Ya no estamos limitados por la geografía o el tiempo. Podemos trabajar desde casa, aprender nuevas habilidades en línea, comprar productos de todo el mundo y conectarnos con personas en diferentes continentes.</p><p>Uno de los cambios más significativos ha sido la revolución en la comunicación. Piensa en cómo solíamos comunicarnos hace solo unas décadas. Las cartas escritas a mano eran la norma, y esperar días o incluso semanas para recibir una respuesta era común. Ahora, con la llegada de los mensajes instantáneos, podemos comunicarnos con cualquier persona, en cualquier lugar del mundo, en tiempo real. Las barreras de tiempo y espacio se han desvanecido, permitiéndonos mantenernos conectados con nuestros seres queridos, hacer negocios y compartir ideas de formas que nunca antes habíamos imaginado. La comunicación instantánea ha cambiado no solo cómo interactuamos, sino también nuestras expectativas de inmediatez y accesibilidad.</p><h3 style="text-align: left;">La era de la información: Conocimiento al alcance de un clic</h3><div><div>La Transformación Digital ha propulsado a la humanidad hacia una nueva era: la era de la información. En este futuro digital, el conocimiento ya no está confinado a las bibliotecas o a las aulas de clase. Ahora, está literalmente al alcance de un clic. Internet, con su vasto océano de información, ha democratizado el acceso al conocimiento. Ya sea que quieras aprender una nueva habilidad, entender un concepto complejo, o simplemente satisfacer tu curiosidad, todo lo que necesitas es una conexión a internet y la voluntad de aprender.</div><div><br /></div><div>Esta accesibilidad al conocimiento ha cambiado la forma en que aprendemos y nos desarrollamos. Las plataformas de aprendizaje en línea, los tutoriales en video, los blogs educativos y las aplicaciones de aprendizaje han hecho que la educación sea más flexible y personalizada. Ahora, puedes aprender a tu propio ritmo, en tu propio tiempo, y de la manera que mejor se adapte a tu estilo de aprendizaje. Además, la era de la información ha facilitado la colaboración y el intercambio de ideas, permitiendo a las personas de todo el mundo trabajar juntas para resolver problemas y generar nuevas ideas. En resumen, la Transformación Digital ha hecho que el conocimiento sea más accesible y valioso que nunca.</div></div><div><br /></div><div><br /></div><h2 style="text-align: left;">Tecnología y Salud: Salvando vidas con un chip</h2><h3 style="text-align: left;">Telemedicina: Consultas médicas desde la comodidad de tu hogar</h3><div>La intersección de la tecnología y la salud ha dado lugar a avances asombrosos que están cambiando la forma en que cuidamos nuestro bienestar. Uno de estos avances es la telemedicina, que ha transformado la forma en que interactuamos con los profesionales de la salud. Ya no necesitamos hacer largas colas en la sala de espera del consultorio del médico. Ahora, podemos tener consultas médicas desde la comodidad de nuestro hogar.</div><div><div><br /></div><div>La telemedicina utiliza tecnologías de comunicación digital para facilitar las consultas médicas a distancia. Ya sea a través de una videollamada, un chat en línea o una aplicación móvil, los pacientes pueden comunicarse con los médicos, describir sus síntomas, recibir diagnósticos y obtener recetas médicas sin tener que salir de casa. Esto no solo es conveniente, sino que también es una bendición para aquellos que viven en áreas rurales o aisladas, donde el acceso a la atención médica puede ser limitado. Además, la telemedicina permite a los pacientes mantenerse en contacto con sus médicos para el seguimiento y la gestión de enfermedades crónicas. En resumen, la tecnología está haciendo que la atención médica sea más accesible y centrada en el paciente que nunca antes.</div></div><h3 style="text-align: left;">Innovaciones en cirugía: Robots en el quirófano</h3><div><div>La tecnología ha revolucionado la forma en que se realizan las cirugías, y una de las innovaciones más emocionantes en este campo es el uso de robots en el quirófano. Aunque pueda sonar como ciencia ficción, los robots quirúrgicos son una realidad y están cambiando la forma en que se realizan las operaciones, mejorando la precisión y reduciendo los riesgos para los pacientes.</div><div><br /></div><div>Los robots quirúrgicos, como el famoso sistema Da Vinci, permiten a los cirujanos realizar procedimientos complejos con una precisión y un control sin precedentes. Estos robots no realizan la cirugía por sí mismos, sino que son controlados por un cirujano que utiliza una consola para manipular los brazos del robot. Los robots pueden realizar movimientos más precisos y estables que la mano humana, lo que reduce el riesgo de errores. Además, los robots pueden acceder a áreas del cuerpo que serían difíciles o imposibles de alcanzar con las técnicas quirúrgicas tradicionales. Esto significa que las cirugías pueden ser menos invasivas, lo que a su vez puede llevar a una recuperación más rápida para los pacientes. En resumen, la tecnología está abriendo nuevas posibilidades en el campo de la cirugía, mejorando los resultados para los pacientes y facilitando el trabajo de los cirujanos.</div></div><div><br /></div><h2 style="text-align: left;">El impacto de la tecnología en la educación</h2><div>La tecnología ha revolucionado la educación, cambiando la forma en que los estudiantes interactúan con el conocimiento y cómo los maestros facilitan ese proceso. El aprendizaje ya no está limitado a las aulas físicas. Con la ayuda de la tecnología, la educación se ha vuelto más accesible y personalizada, adaptándose a las necesidades individuales de cada estudiante.</div><h3 style="text-align: left;">Aprendizaje online: La escuela en tu sala de estar</h3><div><div>El aprendizaje online ha sido una de las transformaciones más significativas en el campo educativo. Esta modalidad ha permitido que la educación trascienda las barreras geográficas y temporales. Ahora, cualquier persona con acceso a internet puede aprender desde la comodidad de su hogar, a su propio ritmo. Los estudiantes pueden acceder a una amplia variedad de cursos y programas ofrecidos por instituciones de todo el mundo. </div><div><br /></div><div>Además, el aprendizaje online fomenta la autodisciplina y la autogestión, habilidades esenciales en el mundo actual. Ya sea que estés buscando adquirir una nueva habilidad, mejorar tu conocimiento en un área específica o incluso obtener un título, el aprendizaje online ofrece una solución flexible y accesible. </div><div><br /></div><div>En resumen, la tecnología ha convertido nuestras salas de estar en aulas, abriendo un mundo de oportunidades para aprender y crecer.</div><h3 style="text-align: left;"><span style="white-space: normal;">Tecnología en el aula: Mejorando la experiencia de aprendizaje</span></h3></div><div>La incorporación de la tecnología en el aula ha mejorado significativamente la experiencia de aprendizaje. </div><div><br /></div><div>Las herramientas digitales como las pizarras interactivas, las tabletas y los programas educativos han hecho que las lecciones sean más atractivas y participativas. Los estudiantes ya no son meros receptores de información, sino participantes activos en su propio proceso de aprendizaje. La tecnología también ha permitido la personalización del aprendizaje, donde los maestros pueden adaptar las lecciones a las necesidades y habilidades individuales de cada estudiante. </div><div><br /></div><div>Además, la tecnología ha facilitado la evaluación y el seguimiento del progreso del estudiante, proporcionando a los maestros información valiosa para mejorar su enseñanza. </div><div><br /></div><div>En resumen, la tecnología en el aula ha mejorado la eficacia de la enseñanza y ha enriquecido la experiencia de aprendizaje, preparando a los estudiantes para un mundo cada vez más digital.</div><div><span style="white-space: normal;"><br /></span></div><h2 style="text-align: left;">La tecnología y el medio ambiente: Un arma de doble filo</h2><div>La tecnología tiene un impacto significativo en nuestro medio ambiente, y no siempre es positivo. Por un lado, la tecnología ha permitido avances increíbles en áreas como la eficiencia energética y la conservación de recursos. Pero por otro lado, también ha contribuido a problemas ambientales serios, como la contaminación y el agotamiento de recursos naturales. Sin embargo, hay un área en la que la tecnología está haciendo una diferencia positiva y esa es la energía renovable.</div><h3 style="text-align: left;">Energías renovables: El poder del sol y el viento</h3><div><div>Las energías renovables, como la solar y la eólica, están cambiando la forma en que generamos y consumimos energía. Gracias a la tecnología, ahora podemos aprovechar el poder del sol y el viento para generar electricidad de una manera que es amigable con el medio ambiente y sostenible a largo plazo. </div><div><br /></div><div>Los paneles solares y las turbinas eólicas son cada vez más eficientes y asequibles, lo que hace que la energía renovable sea una opción viable para más y más personas. Además, la tecnología también está ayudando a mejorar la forma en que almacenamos y distribuimos esta energía, lo que nos acerca cada vez más a un futuro de energía limpia y renovable. </div><div><br /></div><div>En resumen, la tecnología está jugando un papel crucial en la lucha contra el cambio climático y la protección de nuestro planeta para las generaciones futuras.</div><h3 style="text-align: left;">Tecnología verde: Innovaciones para un planeta más limpio</h3></div><div><div>La tecnología verde es un término amplio que abarca una variedad de innovaciones y prácticas diseñadas para reducir nuestro impacto en el medio ambiente. Estas tecnologías buscan minimizar la contaminación, reducir el desperdicio, y promover la eficiencia energética. Desde vehículos eléctricos hasta edificios ecológicos, la tecnología verde está cambiando la forma en que vivimos y trabajamos.</div><div><br /></div><div>Los vehículos eléctricos, por ejemplo, están revolucionando la industria del transporte. Al eliminar la necesidad de combustibles fósiles, estos vehículos reducen significativamente las emisiones de gases de efecto invernadero. Además, la tecnología de las baterías está avanzando rápidamente, lo que significa que los vehículos eléctricos son cada vez más eficientes y asequibles.</div><div><br /></div><div>En el ámbito de la construcción, los edificios ecológicos están cambiando la forma en que pensamos sobre el diseño y la construcción. Estos edificios utilizan materiales sostenibles, maximizan la eficiencia energética, y a menudo incorporan sistemas de energía renovable. Además, muchos edificios ecológicos están diseñados para minimizar el desperdicio de agua y promover la calidad del aire interior.</div><div><br /></div><div>En resumen, la tecnología verde está ayudando a crear un futuro más sostenible y ecológico. A través de la innovación y la adopción de estas tecnologías, podemos reducir nuestro impacto en el medio ambiente y crear un planeta más limpio para las generaciones futuras.</div></div><div><br /></div><h2 style="text-align: left;">Conclusiones</h2><div><div>En conclusión, la tecnología ha tenido un impacto profundo y transformador en nuestras vidas, cambiando la forma en que nos comunicamos, accedemos a la información, cuidamos nuestra salud, aprendemos y cuidamos nuestro planeta.</div><div><br /></div><div>La transformación digital ha revolucionado la comunicación, permitiéndonos conectar con personas de todo el mundo en tiempo real. La era de la información ha democratizado el acceso al conocimiento, poniendo una cantidad casi infinita de información al alcance de un clic. En el ámbito de la salud, la tecnología ha permitido avances asombrosos, desde la telemedicina hasta la cirugía robótica. En educación, la tecnología ha abierto nuevas vías de aprendizaje y ha mejorado la experiencia en el aula. Y en términos de medio ambiente, la tecnología verde está ayudando a crear un futuro más sostenible.</div><div><br /></div><div>Sin embargo, es importante recordar que la tecnología es una herramienta, y su impacto depende de cómo la usemos. Debemos esforzarnos por utilizar la tecnología de manera responsable y ética, y trabajar para garantizar que sus beneficios sean accesibles para todos. En última instancia, la tecnología tiene el potencial de mejorar nuestras vidas y nuestro mundo, pero depende de nosotros hacer que ese potencial se convierta en realidad.</div></div><div><br /></div><div><br /></div><span><a name='more'></a></span><div><blockquote>Nos encantaría saber tu opinión sobre este artículo en los comentarios. ¿Te ha parecido útil? ¿Hay algún otro tema relacionado con la tecnología que te gustaría que exploráramos en Tutoriales Técnicos? Tu feedback es muy valioso para nosotros y nos ayuda a crear contenido que sea relevante y útil para ti. Así que no dudes en compartir tus pensamientos y sugerencias para futuros artículos. ¡Estamos ansiosos por leer tus comentarios!</blockquote><div><br /></div><div><b><i>PD: Comparte este artículo con todos tus contactos.</i></b></div></div>Willian Diazhttp://www.blogger.com/profile/12030062158428083614noreply@blogger.com0tag:blogger.com,1999:blog-3279603830404251843.post-29965850666899984982023-05-20T00:00:00.007-05:002023-11-28T01:27:56.963-05:00Desarrollo de aplicaciones móviles: Comparación entre React Native y Flutter<div class="separator" style="clear: both; text-align: justify;"><span style="text-align: left;">En el mundo del desarrollo de aplicaciones móviles, hay dos grandes jugadores que han capturado la atención de los desarrolladores: React Native y Flutter. </span></div><div class="separator" style="clear: both; text-align: justify;"><span style="text-align: left;"><br /></span></div><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEivqQhFjho3rKVorkEvpRQurBiRkNAANqvHga2vmEKRq_M1RIh27i0xfBrgHdWldYS19XDwIgUa9BpRtYC1JeKQR77IYB_hALN3OaMQlfGqFV3mF5hs4aMmtKGRoITckJL4PTrAqIur4xQqsLUZ5KNL0zKGCdXpfg67TrQ2oYae3pQrBtojR7FjRvpgvg/s3088/Ejemplo%20de%20c%C3%B3digo%20en%20React%20Native.jpg" style="margin-left: auto; margin-right: auto; text-align: center;"><img alt="Ejemplo de código" border="0" data-original-height="2056" data-original-width="3088" height="266" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEivqQhFjho3rKVorkEvpRQurBiRkNAANqvHga2vmEKRq_M1RIh27i0xfBrgHdWldYS19XDwIgUa9BpRtYC1JeKQR77IYB_hALN3OaMQlfGqFV3mF5hs4aMmtKGRoITckJL4PTrAqIur4xQqsLUZ5KNL0zKGCdXpfg67TrQ2oYae3pQrBtojR7FjRvpgvg/w400-h266/Ejemplo%20de%20c%C3%B3digo%20en%20React%20Native.jpg" width="400" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;"></td></tr></tbody></table><div class="separator" style="clear: both; text-align: justify;"><span style="text-align: left;"><br /></span></div><div class="separator" style="clear: both; text-align: justify;"><span style="text-align: left;">Ambos ofrecen la promesa de un desarrollo más rápido y eficiente, pero ¿Cuál es el mejor para tu proyecto? En este artículo, vamos a comparar estos dos marcos de trabajo para ayudarte a tomar una decisión informada.</span></div><div><h2 style="text-align: left;">¿Qué es React Native?</h2><div class="separator" style="clear: both; text-align: center;"><a href="https://www.pngitem.com/pimgs/m/514-5142665_react-native-transparent-react-native-logo-png-png.png" style="margin-left: 1em; margin-right: 1em;"><img alt="Logo de React Native" border="0" data-original-height="265" data-original-width="860" height="123" src="https://www.pngitem.com/pimgs/m/514-5142665_react-native-transparent-react-native-logo-png-png.png" width="400" /></a></div><div><br /></div>React Native es un marco de trabajo de código abierto creado por Facebook que permite a los desarrolladores construir aplicaciones móviles utilizando JavaScript y React.</div><div></div><div><h3 style="text-align: left;">Historia de React Native</h3>React Native es un marco de trabajo de código abierto para el desarrollo de aplicaciones móviles, introducido por Facebook en 2015. Su creación surgió de la necesidad de Facebook de mejorar su presencia en las aplicaciones móviles. Inicialmente, Facebook optó por las aplicaciones HTML5 para su plataforma móvil, pero pronto se dieron cuenta de que esta opción no proporcionaba la experiencia de usuario de alta calidad que esperaban sus usuarios. En 2012, Facebook cambió su enfoque hacia el desarrollo de aplicaciones nativas para mejorar la experiencia del usuario. Sin embargo, se encontraron con el desafío de tener que desarrollar y mantener dos bases de código separadas para iOS y Android.<br /><br />Para resolver este problema, Facebook comenzó a explorar formas de llevar el desarrollo web al desarrollo móvil. Fue entonces cuando Facebook desarrolló React, una biblioteca de JavaScript para construir interfaces de usuario. React introdujo el concepto de componentes de UI reutilizables, lo que permitió a los desarrolladores construir aplicaciones complejas con código más fácil de entender y mantener. Inspirados por el éxito de React, los ingenieros de Facebook comenzaron a experimentar con la idea de llevar los mismos principios al desarrollo móvil. Así nació React Native, un marco de trabajo que permite a los desarrolladores construir aplicaciones móviles utilizando JavaScript y React, pero con una experiencia de usuario que se siente como una aplicación nativa. Desde su lanzamiento, React Native ha crecido y evolucionado significativamente, convirtiéndose en una opción popular para el desarrollo de aplicaciones móviles.<br /><h3 style="text-align: left;">Características de React Native</h3><div>Sus características únicas y potentes lo han convertido en una opción popular entre los desarrolladores. Aquí te presento algunas de las características más destacadas de React Native:</div><div><div><ul style="text-align: left;"><li><b>Desarrollo multiplataforma:</b> React Native permite a los desarrolladores escribir un solo conjunto de código en JavaScript y React, que se puede utilizar para crear aplicaciones tanto para iOS como para Android.</li><li><b>Rendimiento comparable al nativo:</b> A pesar de estar escritas en JavaScript, las aplicaciones React Native se ejecutan utilizando componentes nativos, lo que permite un rendimiento comparable al de las aplicaciones nativas.</li><li><b>Acceso a capacidades nativas del dispositivo:</b> React Native facilita el acceso a las capacidades nativas del dispositivo, como la cámara y el GPS, permitiendo crear aplicaciones con funcionalidades completas.</li><li><b>Enfoque en la interfaz de usuario: </b>React Native permite a los desarrolladores componer interfaces de usuario ricas y consistentes a partir de componentes declarativos.</li><li><b>Comunidad de desarrolladores activa:</b> React Native cuenta con una comunidad de desarrolladores activa y en crecimiento, proporcionando una gran cantidad de recursos y soporte para los desarrolladores.</li></ul></div></div></div><div><h3 style="text-align: left;">Ventajas de React Native</h3><div>React Native ofrece varias ventajas significativas que lo hacen una opción popular para el desarrollo de aplicaciones móviles. Aquí están algunas de las más destacadas:</div><div><ul style="text-align: left;"><li><b>Desarrollo multiplataforma: </b>Con React Native, puedes desarrollar aplicaciones tanto para iOS como para Android utilizando un solo código base. Esto puede ahorrar tiempo y recursos significativos.</li><li><b>Rendimiento eficiente:</b> Aunque las aplicaciones se escriben en JavaScript, se ejecutan utilizando componentes nativos, lo que permite un rendimiento comparable al de las aplicaciones nativas.</li><li><b>Reutilización de código:</b> React Native permite a los desarrolladores reutilizar el código entre diferentes plataformas. Esto significa que puedes usar el mismo código para tu aplicación web y móvil.</li><li><b>Comunidad fuerte:</b> React Native tiene una comunidad de desarrolladores fuerte y activa. Esto significa que hay una gran cantidad de recursos disponibles, incluyendo bibliotecas, herramientas y tutoriales.</li><li><b>Hot Reloading:</b> React Native ofrece la característica de "hot reloading", que permite a los desarrolladores ver los cambios en tiempo real sin tener que reconstruir la aplicación.</li><li><b>Acceso a capacidades nativas del dispositivo:</b> React Native facilita el acceso a las capacidades nativas del dispositivo, permitiendo crear aplicaciones con funcionalidades completas.</li></ul></div></div><div><h3 style="text-align: left;">Desventajas de React Native</h3><div>A pesar de sus muchas ventajas, React Native también tiene algunas desventajas que los desarrolladores deben tener en cuenta. Aquí están algunas de las más notables:</div><div><ul style="text-align: left;"><li><b>Rendimiento: </b>Aunque el rendimiento de React Native es generalmente bueno, no puede igualar el rendimiento de las aplicaciones nativas para tareas intensivas de CPU o cuando se requiere una interacción fluida con el usuario.</li><li><b>Dependencia de Facebook:</b> React Native es un producto de Facebook, y cualquier cambio en las políticas o la dirección de Facebook podría afectar el futuro de React Native.</li><li><b>Problemas de compatibilidad:</b> Aunque React Native permite el desarrollo multiplataforma, puede haber problemas de compatibilidad entre diferentes versiones de sistemas operativos.</li><li><b>Curva de aprendizaje: </b>Aunque JavaScript es un lenguaje comúnmente utilizado, React Native tiene su propia sintaxis y estructura que puede requerir tiempo para aprender.</li><li><b>Limitaciones de la biblioteca: </b>Aunque React Native tiene una gran comunidad y muchas bibliotecas disponibles, puede que no haya soluciones preexistentes para todas las funcionalidades que necesitas.</li><li><b>Depuración:</b> La depuración puede ser más desafiante en React Native en comparación con las aplicaciones nativas debido a la capa adicional de JavaScript.</li></ul></div><br /><h2 style="text-align: left;">¿Qué es Flutter?</h2><div><div class="separator" style="clear: both; text-align: center;"><a href="https://upload.wikimedia.org/wikipedia/commons/thumb/4/44/Google-flutter-logo.svg/2560px-Google-flutter-logo.svg.png" style="margin-left: 1em; margin-right: 1em; text-align: center;"><img alt="Logo de Flutter" border="0" data-original-height="585" data-original-width="2048" height="114" src="https://upload.wikimedia.org/wikipedia/commons/thumb/4/44/Google-flutter-logo.svg/2560px-Google-flutter-logo.svg.png" width="400" /></a></div></div><div class="separator" style="clear: both; text-align: center;"><br /></div>Flutter es un marco de trabajo de código abierto creado por Google que permite a los desarrolladores construir aplicaciones móviles utilizando el lenguaje de programación Dart.</div><br /><div><h3 style="text-align: left;">Historia de Flutter</h3><div><div>Flutter es un marco de trabajo de código abierto para el desarrollo de aplicaciones móviles, web y de escritorio, creado por Google. La historia de Flutter comienza en 2015, cuando Google decidió abordar el desafío de crear una interfaz de usuario de alta calidad que pudiera funcionar a 60 cuadros por segundo. Este proyecto, inicialmente conocido como "Sky", se presentó por primera vez en la conferencia Dart Developer Summit de 2015, mostrando una aplicación en ejecución en Android a 120 cuadros por segundo.</div><div><br /></div><div>El proyecto Sky evolucionó y se convirtió en lo que hoy conocemos como Flutter. Google lanzó la primera versión estable de Flutter, Flutter 1.0, en diciembre de 2018. Desde su lanzamiento, Flutter ha sido adoptado por desarrolladores de todo el mundo debido a su capacidad para permitir el desarrollo de aplicaciones para Android, iOS, web y escritorio a partir de una única base de código. Flutter utiliza el lenguaje de programación Dart, también desarrollado por Google, que proporciona una excelente performance y una sintaxis fácil de entender para los desarrolladores.</div><div><br /></div><div>Desde su lanzamiento, Flutter ha crecido en popularidad y ha sido adoptado por varias empresas importantes para el desarrollo de sus aplicaciones. Google también utiliza Flutter para desarrollar algunas de sus propias aplicaciones, incluyendo la aplicación de Google Ads. Con su enfoque en proporcionar una interfaz de usuario de alta calidad y su capacidad para desarrollar aplicaciones para múltiples plataformas a partir de una única base de código, Flutter se ha establecido como una opción importante en el mundo del desarrollo de aplicaciones.</div></div><h3 style="text-align: left;">Características de Flutter</h3>Flutter permite a los desarrolladores las siguientes características:</div><div><div><ul style="text-align: left;"><li><b>Rendimiento superior: </b>Flutter ofrece un alto rendimiento para las aplicaciones gracias a su motor de renderizado propio y al uso del lenguaje de programación Dart, que se compila en código nativo.</li><li><b>Desarrollo multiplataforma: </b>Con Flutter, puedes desarrollar aplicaciones para Android, iOS, web y escritorio a partir de una única base de código, lo que ahorra tiempo y recursos.</li><li><b>Hot Reload: </b>Esta característica permite a los desarrolladores ver los cambios en el código en tiempo real sin necesidad de reiniciar la aplicación, lo que facilita y acelera el proceso de desarrollo.</li><li><b>Widgets personalizables: </b>Flutter proporciona una amplia gama de widgets que pueden ser personalizados para crear interfaces de usuario únicas y atractivas.</li><li><b>Compatibilidad con Firebase: </b>Flutter tiene una excelente integración con Firebase, lo que permite a los desarrolladores utilizar una variedad de servicios en la nube, como autenticación, base de datos, almacenamiento y más.</li><li><b>Comunidad activa y creciente:</b> Flutter cuenta con una comunidad de desarrolladores activa y en crecimiento que contribuye con paquetes y plugins, y ofrece soporte a otros desarrolladores.</li></ul></div><h3 style="text-align: left;">Ventajas de Flutter</h3>Algunas de las ventajas de Flutter son:</div><div><div><ul style="text-align: left;"><li><b>Desarrollo más rápido: </b>Gracias a la función Hot Reload, los desarrolladores pueden ver los cambios en tiempo real, lo que acelera el proceso de desarrollo.</li><li><b>Una sola base de código: </b>Flutter permite desarrollar aplicaciones para Android, iOS, web y escritorio a partir de una única base de código, lo que ahorra tiempo y recursos.</li><li><b>Rendimiento superior: </b>Al compilar directamente en código nativo y tener su propio motor de renderizado, Flutter ofrece un rendimiento superior para las aplicaciones.</li><li><b>Diseño personalizable: </b>Con una amplia gama de widgets personalizables, Flutter permite a los desarrolladores crear interfaces de usuario únicas y atractivas.</li><li><b>Integración con Firebase: </b>La integración con Firebase permite a los desarrolladores utilizar una variedad de servicios en la nube, facilitando el desarrollo de aplicaciones más robustas y escalables.</li><li><b>Comunidad de desarrolladores activa: </b>Flutter cuenta con una comunidad de desarrolladores activa y en crecimiento que ofrece soporte y contribuye con paquetes y plugins, lo que enriquece el ecosistema de Flutter.</li></ul></div><h3 style="text-align: left;">Desventajas de Flutter</h3>A pesar de sus ventajas, Flutter también tiene algunas desventajas:<br /><div><ul style="text-align: left;"><li><b>Tamaño de la aplicación:</b> Las aplicaciones desarrolladas con Flutter tienden a ser más grandes en tamaño en comparación con las aplicaciones nativas, lo que puede ser un problema para los usuarios con espacio de almacenamiento limitado.</li><li><b>Soporte para servicios de terceros: </b>Flutter puede tener limitaciones en cuanto al soporte para ciertos servicios de terceros en comparación con las aplicaciones nativas.</li><li><b>Madurez de la plataforma: </b>Aunque Flutter está creciendo rápidamente, todavía no es tan maduro como otras plataformas de desarrollo de aplicaciones, lo que puede llevar a enfrentar problemas o limitaciones específicas.</li><li><b>Rendimiento en la web y en el escritorio: </b>Aunque Flutter permite el desarrollo de aplicaciones web y de escritorio, el rendimiento y la eficiencia de estas aplicaciones aún no están al mismo nivel que las aplicaciones móviles.</li><li><b>Aprendizaje de Dart: </b>Aunque Dart es un lenguaje fácil de aprender si tienes experiencia con otros lenguajes como JavaScript, aún así requiere tiempo y esfuerzo para aprenderlo si eres nuevo en él.</li></ul></div></div><div><br /></div><div><h2 style="text-align: left;">Comparación entre React Native y Flutter</h2><h3 style="text-align: left;">Rendimiento</h3></div><div><div>Cuando se trata de rendimiento, Flutter tiene una ligera ventaja sobre React Native. Flutter, desarrollado por Google, utiliza el lenguaje de programación Dart, que se compila en código nativo. Esto significa que las aplicaciones Flutter se ejecutan de manera más eficiente y rápida, ya que no hay una "capa intermedia" entre el código de la aplicación y el hardware del dispositivo. Además, Flutter tiene su propio motor de renderizado, lo que le permite tener un control más directo y preciso sobre la interfaz de usuario y los elementos gráficos de la aplicación.</div><div><br /></div><div>Por otro lado, React Native, desarrollado por Facebook, utiliza JavaScript, un lenguaje de programación interpretado. Aunque JavaScript es uno de los lenguajes de programación más populares y ampliamente utilizados, no se compila en código nativo, lo que puede llevar a un rendimiento ligeramente inferior en comparación con Flutter. Sin embargo, React Native utiliza el motor JavaScriptCore para mejorar el rendimiento, y en la mayoría de los casos, la diferencia de rendimiento entre Flutter y React Native no es perceptible para el usuario final.</div><h3 style="text-align: left;">Desarrollo</h3><div><div>En términos de desarrollo, tanto React Native como Flutter ofrecen características que pueden facilitar y acelerar el proceso de desarrollo de aplicaciones.</div><div><br /></div><div>React Native, por ejemplo, es conocido por su funcionalidad de recarga en caliente (Hot Reload). Esta característica permite a los desarrolladores ver los cambios que realizan en el código en tiempo real, sin necesidad de reiniciar la aplicación. Esto puede ser especialmente útil durante el proceso de desarrollo y depuración, ya que permite a los desarrolladores probar rápidamente diferentes enfoques y soluciones. Además, React Native utiliza JavaScript, un lenguaje de programación muy popular y ampliamente utilizado, lo que puede facilitar la curva de aprendizaje para los nuevos desarrolladores.</div><div><br /></div><div>Por otro lado, Flutter también ofrece una funcionalidad similar a la recarga en caliente, conocida como Hot Reload. Sin embargo, a diferencia de React Native, Flutter permite a los desarrolladores ver no solo los cambios en el código, sino también en el estado de la aplicación. Esto puede proporcionar una visión más completa y detallada de cómo los cambios en el código afectan a la aplicación en su conjunto.</div><div><br /></div><div>Además, Flutter utiliza el lenguaje de programación Dart, que, aunque no es tan popular como JavaScript, ha sido elogiado por su facilidad de aprendizaje y su eficiencia en términos de rendimiento. Dart se compila en código nativo, lo que puede resultar en aplicaciones más eficientes y rápidas.</div></div><h3 style="text-align: left;">Comunidad y soporte</h3></div><div>La comunidad y el soporte son factores cruciales a considerar al elegir una plataforma de desarrollo de aplicaciones. En este aspecto, React Native lleva la delantera debido a su mayor antigüedad. Desde su lanzamiento por Facebook en 2015, React Native ha cultivado una comunidad de desarrolladores sólida y activa. Hay una gran cantidad de recursos disponibles, incluyendo tutoriales, blogs, foros de discusión y una amplia gama de bibliotecas de terceros. Esto significa que si te encuentras con un problema durante el desarrollo, es muy probable que puedas encontrar una solución o recibir ayuda de la comunidad de React Native.</div><div><br /></div><div>Por otro lado, aunque Flutter es más reciente en el mercado, ha experimentado un crecimiento rápido y ha construido una comunidad de desarrolladores entusiasta y en crecimiento. Google, el creador de Flutter, ofrece un soporte sólido y está invirtiendo activamente en el desarrollo y mejora de la plataforma. Aunque la cantidad de recursos y bibliotecas de terceros disponibles para Flutter puede no ser tan extensa como la de React Native, está creciendo rápidamente. Además, la documentación oficial de Flutter es excepcionalmente buena y es frecuentemente elogiada por su claridad y exhaustividad. </div><div><br /></div><div>En resumen, aunque React Native puede tener una ventaja en términos de tamaño de la comunidad y cantidad de recursos disponibles, Flutter está cerrando rápidamente la brecha y ofrece una comunidad vibrante y un soporte sólido.<br /><h3 style="text-align: left;">Facilidad de uso</h3><div>En términos de facilidad de uso, React Native tiene una ventaja significativa debido a su uso de JavaScript, uno de los lenguajes de programación más populares y ampliamente utilizados en el mundo. Para los desarrolladores que ya están familiarizados con JavaScript, la curva de aprendizaje para React Native puede ser bastante suave. Además, React Native se basa en React, una biblioteca de JavaScript para construir interfaces de usuario, que es ampliamente utilizada y bien comprendida por muchos desarrolladores. Esto significa que los conceptos y patrones de diseño utilizados en React Native pueden ser familiares para aquellos que ya han trabajado con React o JavaScript en general.</div><div><br /></div><div>Por otro lado, Flutter utiliza Dart, un lenguaje de programación que no es tan conocido o ampliamente utilizado como JavaScript. Esto puede hacer que la curva de aprendizaje para Flutter sea un poco más empinada, especialmente para aquellos desarrolladores que no están familiarizados con Dart. Sin embargo, Dart ha sido elogiado por su simplicidad y consistencia, y algunos desarrolladores encuentran que es más fácil de aprender y usar que JavaScript. Además, Flutter proporciona una amplia gama de widgets predefinidos que pueden hacer que el desarrollo de la interfaz de usuario sea más sencillo y rápido. En resumen, aunque React Native puede ser más fácil de recoger para aquellos que ya están familiarizados con JavaScript, Flutter también ofrece una experiencia de desarrollo eficiente y agradable con su propio conjunto de ventajas.</div><div><br /></div><h2 style="text-align: left;">Conclusión</h2><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiDysfx12UtuDxxG6ceOP3yjvIdp1JFqoQ6YNcKlO79OJxDjlVHQ0KOcE6g3qqmzxymjIPdGgQwv_SvNoqquOylmtcX69eWwPvEcDdWLe8Ad0CMjF5Cv3yYzYh9IluvUWKy91snl3_nTMKslqHVu7dMeiPeEjFGhMfrf3cQU_hMPiwfWMhs1WP0gjgwYw/s1280/Presentaci%C3%B3n1.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="720" data-original-width="1280" height="225" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiDysfx12UtuDxxG6ceOP3yjvIdp1JFqoQ6YNcKlO79OJxDjlVHQ0KOcE6g3qqmzxymjIPdGgQwv_SvNoqquOylmtcX69eWwPvEcDdWLe8Ad0CMjF5Cv3yYzYh9IluvUWKy91snl3_nTMKslqHVu7dMeiPeEjFGhMfrf3cQU_hMPiwfWMhs1WP0gjgwYw/w400-h225/Presentaci%C3%B3n1.png" width="400" /></a></div><div><br /></div><div>El desarrollo de aplicaciones móviles ha experimentado un cambio significativo con la introducción de marcos de trabajo como React Native y Flutter. Ambos ofrecen una solución atractiva para el desarrollo de aplicaciones multiplataforma, permitiendo a los desarrolladores escribir un solo código base que funcione tanto en iOS como en Android.</div><div><br /></div><div>React Native, con su base de JavaScript y su sólida comunidad de desarrolladores, ofrece una transición suave para aquellos que ya están familiarizados con JavaScript y React. Su rendimiento cercano al nativo y su capacidad para incorporar componentes nativos lo convierten en una opción fuerte para muchas aplicaciones.</div><div><br /></div><div>Por otro lado, Flutter, respaldado por Google, ha ganado terreno rápidamente con su lenguaje de programación Dart y su enfoque en la creación de interfaces de usuario ricas y personalizables. Aunque su comunidad aún está creciendo, el soporte y la documentación de Google son excepcionales.</div><div><br /></div><div>En última instancia, la elección entre React Native y Flutter dependerá de las necesidades específicas de tu proyecto, tu equipo y tus habilidades de programación. Ambos marcos de trabajo tienen sus fortalezas y debilidades, y ambos son capaces de crear aplicaciones móviles de alta calidad. </div><div><br /></div><div>Como desarrolladores, estamos afortunados de tener estas poderosas herramientas a nuestra disposición, y el futuro del desarrollo de aplicaciones móviles parece brillante con React Native y Flutter liderando el camino.</div></div>Willian Diazhttp://www.blogger.com/profile/12030062158428083614noreply@blogger.com0tag:blogger.com,1999:blog-3279603830404251843.post-78986224366973812302023-05-19T00:00:00.001-05:002023-11-28T01:30:07.843-05:00Cómo implementar la Inteligencia Artificial en tus proyectos de desarrollo de software<p>¡Hola a todos! Hoy vamos a hablar de un tema que está en boca de todos: la Inteligencia Artificial (IA). Pero, ¿qué es exactamente la IA y cómo puedes usarla en tus proyectos de desarrollo de software? ¡Vamos a descubrirlo!</p><p><br /></p><h2 style="text-align: left;">Inteligencia Artificial</h2><div class="separator" style="clear: both; text-align: center;"><a href="https://grupoinmotion.com/wp-content/uploads/2020/12/inteligencia-artificial.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="722" data-original-width="1200" height="241" src="https://grupoinmotion.com/wp-content/uploads/2020/12/inteligencia-artificial.jpg" width="400" /></a></div><br /><p>La IA es una rama de la informática que se ocupa de crear sistemas que pueden aprender y mejorar por sí mismos. Esto puede sonar complicado, pero en realidad, hay muchas herramientas y recursos disponibles que hacen que la implementación de la IA en tus proyectos sea más fácil de lo que piensas.</p><p><br /></p><h2>Aprendizaje Automático</h2><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://www.smartnet.com.co/wp-content/uploads/2020/05/inteligenciaartificial.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="709" data-original-width="1200" height="236" src="https://www.smartnet.com.co/wp-content/uploads/2020/05/inteligenciaartificial.jpg" width="400" /></a></div>Una de las formas más comunes de utilizar la IA en el desarrollo de software es a través del aprendizaje automático. Esto implica enseñar a un sistema a reconocer patrones y tomar decisiones basadas en esos patrones. Por ejemplo, podrías usar el aprendizaje automático para crear un sistema de recomendación para una tienda en línea, que sugiere productos a los clientes en función de sus compras anteriores.<p></p><p><br /></p><h2>Chatbots</h2><div class="separator" style="clear: both; text-align: center;"><a href="https://assets-global.website-files.com/5f4f67c5950db17954dd4f52/5f5b7e382e095e616b1d691f_chatbot.jpeg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="752" data-original-width="1200" height="251" src="https://assets-global.website-files.com/5f4f67c5950db17954dd4f52/5f5b7e382e095e616b1d691f_chatbot.jpeg" width="400" /></a></div><p>Otra forma de utilizar la IA es a través de los chatbots. Los chatbots son programas que pueden interactuar con los usuarios de forma natural, respondiendo a sus preguntas y proporcionándoles información. Puedes usar chatbots para mejorar el servicio al cliente en tu sitio web o aplicación, proporcionando respuestas rápidas y precisas a las preguntas de los usuarios.</p><p><br /></p><h2 style="text-align: left;">Entonces, ¿cómo puedes empezar a implementar la IA en tus proyectos? </h2><p>Bueno, hay muchas herramientas y plataformas disponibles que te pueden ayudar. Algunas de las más populares incluyen TensorFlow, una plataforma de código abierto para el aprendizaje automático, y Dialogflow, una plataforma para la creación de chatbots.</p><p><br /></p><p>La clave para implementar con éxito la IA en tus proyectos es empezar pequeño y aprender a medida que avanzas. No tienes que construir un sistema de IA complejo desde cero. En su lugar, puedes empezar implementando características de IA en partes de tu proyecto y ver cómo funcionan.</p><p><br /></p><p>Y recuerda, si tienes alguna pregunta o necesitas ayuda, ¡no dudes en dejar un comentario abajo! Estoy aquí para ayudarte.</p><p><br /></p><p><b>¡Hasta la próxima!</b></p>Willian Diazhttp://www.blogger.com/profile/12030062158428083614noreply@blogger.com0tag:blogger.com,1999:blog-3279603830404251843.post-27061554363733873332023-05-18T00:00:00.002-05:002023-11-30T20:31:38.230-05:00El futuro del desarrollo de software: qué esperar en 2023 y más allá<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEis7fq7uoYM9GUuMm3MSFuGTWtYLz98UCX08R2MFe6hlGmS6I0bOl7rt6ZNkKjhkHVpXxAxNARWuIzCJmX2J4ZNOS3Soyu0K6dlzQUzHKWVUdSo3R2ydE7gw2b2M2FJSH23yOOQpFBvJwJzZCFc02xDCR7sctuhUfuGC9jQXJHO6OB6Sg7c3Z91GYJuloVk/s1024/DALL%C2%B7E%202023-11-30%2020.30.27%20-%20A%20futuristic%20and%20dynamic%20illustration%20showcasing%20the%20evolution%20and%20future%20of%20software%20development,%20featuring%20abstract%20representations%20of%20coding,%20artif.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1024" data-original-width="1024" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEis7fq7uoYM9GUuMm3MSFuGTWtYLz98UCX08R2MFe6hlGmS6I0bOl7rt6ZNkKjhkHVpXxAxNARWuIzCJmX2J4ZNOS3Soyu0K6dlzQUzHKWVUdSo3R2ydE7gw2b2M2FJSH23yOOQpFBvJwJzZCFc02xDCR7sctuhUfuGC9jQXJHO6OB6Sg7c3Z91GYJuloVk/w400-h400/DALL%C2%B7E%202023-11-30%2020.30.27%20-%20A%20futuristic%20and%20dynamic%20illustration%20showcasing%20the%20evolution%20and%20future%20of%20software%20development,%20featuring%20abstract%20representations%20of%20coding,%20artif.png" width="400" /></a></div><br /><p>El desarrollo de software es una industria dinámica y en constante evolución, que se adapta a las necesidades y demandas de un mundo cada vez más digitalizado y conectado. En este artículo, te contamos algunas de las tendencias y tecnologías que marcarán el futuro del desarrollo de software en 2023 y más allá.</p><p><br /></p><h2 style="text-align: left;">Trabajo remoto e híbrido</h2><p>Una de las consecuencias de la pandemia de Covid-19 fue la aceleración del trabajo remoto y híbrido entre los desarrolladores de software, que pudieron seguir operando desde cualquier lugar con una conexión a internet. Según un artículo de Computer Weekly, el trabajo de oficina se redujo en un 74% desde que comenzó la crisis sanitaria, y se espera que el trabajo híbrido (una combinación de trabajo remoto y presencial) se consolide en el futuro. Esto implica nuevos desafíos y oportunidades para los desarrolladores, que deben adaptarse a nuevas herramientas, metodologías y formas de comunicación y colaboración.</p><p><br /></p><h2 style="text-align: left;">Inteligencia artificial y computación en la nube</h2><p>Otra tendencia clave en el futuro del desarrollo de software es la integración de la inteligencia artificial (IA) en las aplicaciones y sistemas existentes, para mejorar la toma de decisiones, los resultados, la eficiencia, la automatización y la experiencia digital. La IA se apoyará en la computación en la nube y en tecnologías como Kubernetes, que permiten ejecutar aplicaciones en múltiples nubes con una sola base de código. La computación en la nube también facilitará el uso de chatbots y servicios cognitivos, que ofrecen una interacción más natural y personalizada con los usuarios.</p><p><br /></p><h2 style="text-align: left;">Desarrollo multiplataforma</h2><p>El desarrollo multiplataforma es otra tendencia que ganará fuerza en el futuro del desarrollo de software, ya que permite crear aplicaciones que funcionan en diferentes plataformas (iOS, Android, Windows, etc.) con una sola base de código, ahorrando tiempo y recursos. Para ello, se utilizarán tecnologías innovadoras como Flutter, React Native o Xamarin, que facilitan el desarrollo cruzado y ofrecen una alta calidad y rendimiento.</p><p><br /></p><h2 style="text-align: left;">Llamada a la acción</h2><p>Como puedes ver, el futuro del desarrollo de software es prometedor y desafiante, y requiere estar al día con las nuevas tecnologías y tendencias que lo transforman. Si quieres aprender más sobre el desarrollo de software o necesitas ayuda con tu proyecto, no dudes en contactarnos. En Tutoriales Técnicos somos expertos en desarrollo de software a medida, con las mejores prácticas y metodologías. </p><p><b>¡Te esperamos!</b></p>Willian Diazhttp://www.blogger.com/profile/12030062158428083614noreply@blogger.com0tag:blogger.com,1999:blog-3279603830404251843.post-12274965166011705262023-05-17T21:48:00.004-05:002023-11-30T20:35:26.594-05:00¿Cómo aprovechar el desarrollo de bajo código y sin código para crear aplicaciones más inteligentes?<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjt1bk1zyKKN1H-jMC0y6A0K0syzDwQkr3P9BzDqVnFHrpav9qp45x1DOy1yF9cmdsSNh8fqz5YoR_Kg_lph31DzLqF6_iPKVIKgAM0COXbYSbqQhrUP8EUw3CCt97EPijDABzrkcaamDmGCZ14NUEtEunRswTiZwL9jnduE2X2L-Y_ohlkQZJ0xEVQnqJE/s1792/DALL%C2%B7E%202023-11-30%2020.33.14%20-%20A%20modern%20and%20engaging%20illustration%20representing%20the%20concept%20of%20low-code%20development.%20The%20image%20should%20feature%20a%20diverse%20group%20of%20people%20working%20togeth.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1024" data-original-width="1792" height="229" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjt1bk1zyKKN1H-jMC0y6A0K0syzDwQkr3P9BzDqVnFHrpav9qp45x1DOy1yF9cmdsSNh8fqz5YoR_Kg_lph31DzLqF6_iPKVIKgAM0COXbYSbqQhrUP8EUw3CCt97EPijDABzrkcaamDmGCZ14NUEtEunRswTiZwL9jnduE2X2L-Y_ohlkQZJ0xEVQnqJE/w400-h229/DALL%C2%B7E%202023-11-30%2020.33.14%20-%20A%20modern%20and%20engaging%20illustration%20representing%20the%20concept%20of%20low-code%20development.%20The%20image%20should%20feature%20a%20diverse%20group%20of%20people%20working%20togeth.png" width="400" /></a></div><br /><div><br /></div><div>¡Hola a todos! Hoy vamos a hablar de una tendencia que está revolucionando el mundo del desarrollo de software: el desarrollo de bajo código y sin código. ¿Pero qué significa esto exactamente y cómo puedes aprovecharlo para crear aplicaciones más inteligentes? ¡Sigue leyendo para descubrirlo!</div><div><br /></div><h2 style="text-align: left;">¿Qué es el desarrollo de bajo código y sin código?</h2><div>El desarrollo de bajo código y sin código es una forma de crear aplicaciones de software sin tener que escribir mucho (o ningún) código. En lugar de eso, utilizas una interfaz gráfica de usuario para diseñar y construir tu aplicación. Es como construir con bloques de Lego: eliges los componentes que necesitas, los arrastras y los sueltas donde los necesitas, y ¡voilà! Tienes una aplicación.</div><div><br /></div><div>Esto es posible gracias a las plataformas que te ofrecen herramientas visuales, componentes reutilizables, plantillas y conectores con servicios externos que puedes arrastrar y soltar para diseñar tu aplicación.</div><div><div><br /></div><div>El desarrollo de bajo código requiere algunas habilidades básicas de programación, pero te ahorra mucho tiempo y esfuerzo al no tener que escribir todo el código desde cero. El desarrollo sin código es aún más sencillo, ya que no necesitas saber nada de programación para crear tu aplicación. Solo tienes que elegir las opciones que más te convengan y configurar algunos parámetros.</div></div><div><br /></div><h2 style="text-align: left;">¿Por qué es importante?</h2><div>El desarrollo de bajo código y sin código tiene varias ventajas. La más obvia es que acelera el proceso de desarrollo. Ya no tienes que pasar semanas o meses escribiendo y depurando código. En su lugar, puedes tener una aplicación funcional en cuestión de días o incluso horas.</div><div><br /></div><div>Además, el desarrollo de bajo código y sin código hace que la creación de software sea más accesible. No necesitas ser un experto en programación para crear una aplicación. Esto significa que más personas pueden participar en el proceso de desarrollo, lo que puede llevar a soluciones más creativas e innovadoras.</div><div><br /></div><div><h2 style="text-align: left;">¿Qué ventajas tiene el desarrollo de bajo código y sin código?</h2><div>El desarrollo de bajo código y sin código tiene muchas ventajas para los desarrolladores, los usuarios y las empresas. Algunas de ellas son:</div><div><ul style="text-align: left;"><li><b>Rapidez:</b> puedes crear aplicaciones en cuestión de horas o días, en lugar de semanas o meses.</li><li><b>Ahorro:</b> puedes reducir los costes de desarrollo, mantenimiento y actualización de las aplicaciones.</li><li><b>Escalabilidad:</b> puedes adaptar fácilmente tus aplicaciones a las necesidades cambiantes del mercado y de los usuarios.</li><li><b>Innovación:</b> puedes experimentar con nuevas ideas y soluciones sin arriesgar demasiado tiempo o dinero.</li><li><b>Accesibilidad:</b> puedes democratizar el desarrollo de aplicaciones y permitir que más personas puedan crear sus propias soluciones.</li></ul></div></div><div><br /></div><h2 style="text-align: left;">¿Cómo puedes aprovecharlo para crear aplicaciones más inteligentes?</h2><div>El desarrollo de bajo código y sin código no sólo te permite crear aplicaciones más rápido, sino que también te permite crear aplicaciones más inteligentes. Muchas plataformas de bajo código y sin código vienen con características de inteligencia artificial (IA) y aprendizaje automático (ML) incorporadas. Esto significa que puedes incorporar funciones de IA y ML en tu aplicación sin tener que entender los detalles técnicos.</div><div><br /></div><div>Por ejemplo, podrías crear una aplicación de comercio electrónico que utilice el aprendizaje automático para recomendar productos a los clientes en función de sus compras anteriores. O podrías crear una aplicación de atención al cliente que utilice la IA para responder a las preguntas de los clientes de forma automática.</div><div><br /></div><div><h2 style="text-align: left;">¿Qué tipos de aplicaciones puedes crear con el desarrollo de bajo código y sin código?</h2><div>Con el desarrollo de bajo código y sin código puedes crear todo tipo de aplicaciones, desde las más simples hasta las más complejas. Algunos ejemplos son:</div><div><ul style="text-align: left;"><li><b>Aplicaciones web:</b> puedes crear sitios web dinámicos e interactivos para tu negocio, tu blog o tu portfolio.</li><li><b>Aplicaciones móviles: </b>puedes crear aplicaciones nativas o híbridas para iOS y Android que funcionen en cualquier dispositivo.</li><li><b>Aplicaciones empresariales: </b>puedes crear aplicaciones para automatizar procesos, gestionar datos, mejorar la comunicación o la colaboración, etc.</li><li><b>Aplicaciones sociales:</b> puedes crear aplicaciones para conectar con tu comunidad, compartir contenidos, organizar eventos, etc.</li><li><b>Aplicaciones educativas: </b>puedes crear aplicaciones para enseñar o aprender cualquier tema, desde idiomas hasta matemáticas.</li><li><b>Aplicaciones creativas:</b> puedes crear aplicaciones para expresar tu arte, tu música o tu escritura.</li></ul></div></div><div><h2 style="text-align: left;">¿Cómo hacer tus aplicaciones más inteligentes con el desarrollo de bajo código y sin código?</h2><div>El desarrollo de bajo código y sin código no solo te permite crear aplicaciones rápidamente, sino también hacerlas más inteligentes. Esto es posible gracias a la integración con servicios externos que te ofrecen funcionalidades avanzadas como:</div><div><br /></div><div><ul style="text-align: left;"><li><b>Inteligencia artificial:</b> puedes incorporar capacidades como el reconocimiento facial, el procesamiento del lenguaje natural, la visión por computador o el aprendizaje automático a tus aplicaciones.</li><li><b>Internet de las cosas:</b> puedes conectar tus aplicaciones con dispositivos inteligentes como sensores, cámaras, altavoces o wearables que te proporcionen información o te permitan controlarlos remotamente.</li><li><b>Realidad aumentada y virtual: </b>puedes crear experiencias inmersivas que combinen el mundo real con el digital a través de tus aplicaciones.</li><li><b>Blockchain:</b> puedes utilizar esta tecnología para garantizar la seguridad, la transparencia y la trazabilidad de tus datos o transacciones.</li></ul></div><div><br /></div><h2 style="text-align: left;">¿Qué plataformas puedes usar para el desarrollo de bajo código y sin código?</h2><div>Existen muchas plataformas que te facilitan el desarrollo de bajo código y sin código. Algunas de las más populares son:</div><div><br /></div><div><ul style="text-align: left;"><li>AppMaster: una plataforma que te permite crear aplicaciones web y móviles sin escribir una sola línea de código. Tiene una interfaz intuitiva y ofrece una gran variedad de plantillas, componentes y conectores. Puedes publicar tus aplicaciones en la nube o en tu propio dominio.</li><li>SAP Business Technology Platform: una plataforma que te permite crear aplicaciones empresariales de bajo código con herramientas visuales y componentes preconfigurados. Te ayuda a integrar tus datos, procesos y sistemas con facilidad. Puedes desplegar tus aplicaciones en la nube o en tu infraestructura local.</li><li>SquareetLabs: una plataforma que te permite crear aplicaciones sociales de bajo código con funciones como chat, videoconferencia, calendario o encuestas. Te ofrece un entorno colaborativo donde puedes trabajar con otros desarrolladores. Puedes alojar tus aplicaciones en la nube o en tu propio servidor.</li></ul></div></div><div><br /></div><h2 style="text-align: left;">Llamada a la acción</h2><div>El desarrollo de bajo código y sin código está cambiando la forma en que creamos software. Si quieres mantener el ritmo, te animo a que explores esta tendencia por ti mismo. Hay muchas plataformas de bajo código y sin código disponibles, así que ¿por qué no pruebas una y ves lo que puedes crear?</div><div><br /></div><div>Y recuerda, si tienes alguna pregunta o necesitas ayuda, ¡no dudes en dejar un comentario abajo! Estoy aquí para ayudarte.</div><div><br /></div><div>¡Hasta la próxima!</div>Willian Diazhttp://www.blogger.com/profile/12030062158428083614noreply@blogger.com0tag:blogger.com,1999:blog-3279603830404251843.post-85912891147668206092023-02-27T01:45:00.002-05:002023-11-30T20:44:42.405-05:00¿Como crear en Angular 11 un servicio que compare la cadena "Camión" con tilde y que sea igual a la cadena "Camión" sin tilde?<h2 style="text-align: left;"><p style="text-align: left;"></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj8R-vRoi0ckA4kii3jlRLjtt-fBHFuVmF2ne9zrr_dgqoB__6XvUn0SYpHIpzGFiSIr-AqRCWZBzeIaLLBV2TNV4hBS-r7lbsIxmw_qKUvVxPrkoJj8_OR27NfZCC46YmiFn0ESuOVIz9OiJrboeIMZkPVIfuORRu9SdgPUKkTY4e_XYy00GsqFciQcXG-/s2475/angular-11-articulo.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="2475" data-original-width="2475" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj8R-vRoi0ckA4kii3jlRLjtt-fBHFuVmF2ne9zrr_dgqoB__6XvUn0SYpHIpzGFiSIr-AqRCWZBzeIaLLBV2TNV4hBS-r7lbsIxmw_qKUvVxPrkoJj8_OR27NfZCC46YmiFn0ESuOVIz9OiJrboeIMZkPVIfuORRu9SdgPUKkTY4e_XYy00GsqFciQcXG-/w400-h400/angular-11-articulo.png" width="400" /></a></div><span style="font-weight: normal;"><br /></span><p></p>Introducción: </h2><div>En el presente artículo se va a realizar un ejemplo de un servicio en Angular 11 que permita comprar dos cadenas que comparen palabras como "Camión" y que pueda identificar que son iguales sin importar las mayusculas, minusculas, tildes y espacios en blanco.</div><div><br /></div><h2 style="text-align: left;"> Entorno: </h2><div>Se realiza sobre una maquina MacBook Pro 10 con el editor de código Visual Studio Code, usando Angular 11.</div><div><br /></div><div><br /></div><h2 style="text-align: left;">Paso 1: </h2><div>Crea un nuevo servicio en Angular utilizando el comando ng generate service <nombre-servicio> en la terminal o consola de comandos. Por ejemplo: ng generate service ComparadorCadenas.</div><div><div><br /></div><div><h2>Paso 2: </h2></div><div>Abre el archivo del servicio recién creado, que se encuentra en src/app/nombre-servicio.service.ts, y agrega la siguiente función:</div></div><div><br /></div><div><span style="background-color: black;"><br /></span></div><div><span style="background-color: black;"><span class="hljs-title function_" face=""Söhne Mono", Monaco, "Andale Mono", "Ubuntu Mono", monospace" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: #f22c3d; font-size: 14px; white-space: pre;">compararCadenas</span><span face=""Söhne Mono", Monaco, "Andale Mono", "Ubuntu Mono", monospace" style="color: white; font-size: 14px; white-space: pre;">(</span><span class="hljs-attr" face=""Söhne Mono", Monaco, "Andale Mono", "Ubuntu Mono", monospace" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: #df3079; font-size: 14px; white-space: pre;">cadena1</span><span face=""Söhne Mono", Monaco, "Andale Mono", "Ubuntu Mono", monospace" style="color: white; font-size: 14px; white-space: pre;">: </span><span class="hljs-built_in" face=""Söhne Mono", Monaco, "Andale Mono", "Ubuntu Mono", monospace" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: #e9950c; font-size: 14px; white-space: pre;">string</span><span face=""Söhne Mono", Monaco, "Andale Mono", "Ubuntu Mono", monospace" style="color: white; font-size: 14px; white-space: pre;">, </span><span class="hljs-attr" face=""Söhne Mono", Monaco, "Andale Mono", "Ubuntu Mono", monospace" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: #df3079; font-size: 14px; white-space: pre;">cadena2</span><span face=""Söhne Mono", Monaco, "Andale Mono", "Ubuntu Mono", monospace" style="color: white; font-size: 14px; white-space: pre;">: </span><span class="hljs-built_in" face=""Söhne Mono", Monaco, "Andale Mono", "Ubuntu Mono", monospace" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: #e9950c; font-size: 14px; white-space: pre;">string</span><span face=""Söhne Mono", Monaco, "Andale Mono", "Ubuntu Mono", monospace" style="color: white; font-size: 14px; white-space: pre;">): </span><span class="hljs-built_in" face=""Söhne Mono", Monaco, "Andale Mono", "Ubuntu Mono", monospace" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: #e9950c; font-size: 14px; white-space: pre;">boolean</span><span face=""Söhne Mono", Monaco, "Andale Mono", "Ubuntu Mono", monospace" style="color: white; font-size: 14px; white-space: pre;"> {
</span><span class="hljs-comment" color="rgba(255, 255, 255, 0.5)" face=""Söhne Mono", Monaco, "Andale Mono", "Ubuntu Mono", monospace" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; font-size: 14px; white-space: pre;">// Convertir ambas cadenas a minúsculas y reemplazar varios espacios por uno solo</span><span face=""Söhne Mono", Monaco, "Andale Mono", "Ubuntu Mono", monospace" style="color: white; font-size: 14px; white-space: pre;">
</span><span class="hljs-keyword" face=""Söhne Mono", Monaco, "Andale Mono", "Ubuntu Mono", monospace" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: #2e95d3; font-size: 14px; white-space: pre;">const</span><span face=""Söhne Mono", Monaco, "Andale Mono", "Ubuntu Mono", monospace" style="color: white; font-size: 14px; white-space: pre;"> cadena1Limpia = cadena1.</span><span class="hljs-title function_" face=""Söhne Mono", Monaco, "Andale Mono", "Ubuntu Mono", monospace" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: #f22c3d; font-size: 14px; white-space: pre;">toLowerCase</span><span face=""Söhne Mono", Monaco, "Andale Mono", "Ubuntu Mono", monospace" style="color: white; font-size: 14px; white-space: pre;">().</span><span class="hljs-title function_" face=""Söhne Mono", Monaco, "Andale Mono", "Ubuntu Mono", monospace" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: #f22c3d; font-size: 14px; white-space: pre;">replace</span><span face=""Söhne Mono", Monaco, "Andale Mono", "Ubuntu Mono", monospace" style="color: white; font-size: 14px; white-space: pre;">(</span><span class="hljs-regexp" face=""Söhne Mono", Monaco, "Andale Mono", "Ubuntu Mono", monospace" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: #00a67d; font-size: 14px; white-space: pre;">/\s+/g</span><span face=""Söhne Mono", Monaco, "Andale Mono", "Ubuntu Mono", monospace" style="color: white; font-size: 14px; white-space: pre;">, </span><span class="hljs-string" face=""Söhne Mono", Monaco, "Andale Mono", "Ubuntu Mono", monospace" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: #00a67d; font-size: 14px; white-space: pre;">' '</span><span face=""Söhne Mono", Monaco, "Andale Mono", "Ubuntu Mono", monospace" style="color: white; font-size: 14px; white-space: pre;">);
</span><span class="hljs-keyword" face=""Söhne Mono", Monaco, "Andale Mono", "Ubuntu Mono", monospace" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: #2e95d3; font-size: 14px; white-space: pre;">const</span><span face=""Söhne Mono", Monaco, "Andale Mono", "Ubuntu Mono", monospace" style="color: white; font-size: 14px; white-space: pre;"> cadena2Limpia = cadena2.</span><span class="hljs-title function_" face=""Söhne Mono", Monaco, "Andale Mono", "Ubuntu Mono", monospace" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: #f22c3d; font-size: 14px; white-space: pre;">toLowerCase</span><span face=""Söhne Mono", Monaco, "Andale Mono", "Ubuntu Mono", monospace" style="color: white; font-size: 14px; white-space: pre;">().</span><span class="hljs-title function_" face=""Söhne Mono", Monaco, "Andale Mono", "Ubuntu Mono", monospace" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: #f22c3d; font-size: 14px; white-space: pre;">replace</span><span face=""Söhne Mono", Monaco, "Andale Mono", "Ubuntu Mono", monospace" style="color: white; font-size: 14px; white-space: pre;">(</span><span class="hljs-regexp" face=""Söhne Mono", Monaco, "Andale Mono", "Ubuntu Mono", monospace" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: #00a67d; font-size: 14px; white-space: pre;">/\s+/g</span><span face=""Söhne Mono", Monaco, "Andale Mono", "Ubuntu Mono", monospace" style="color: white; font-size: 14px; white-space: pre;">, </span><span class="hljs-string" face=""Söhne Mono", Monaco, "Andale Mono", "Ubuntu Mono", monospace" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: #00a67d; font-size: 14px; white-space: pre;">' '</span><span face=""Söhne Mono", Monaco, "Andale Mono", "Ubuntu Mono", monospace" style="color: white; font-size: 14px; white-space: pre;">);
</span><span class="hljs-comment" color="rgba(255, 255, 255, 0.5)" face=""Söhne Mono", Monaco, "Andale Mono", "Ubuntu Mono", monospace" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; font-size: 14px; white-space: pre;">// Remover acentos de ambas cadenas</span><span face=""Söhne Mono", Monaco, "Andale Mono", "Ubuntu Mono", monospace" style="color: white; font-size: 14px; white-space: pre;">
</span><span class="hljs-keyword" face=""Söhne Mono", Monaco, "Andale Mono", "Ubuntu Mono", monospace" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: #2e95d3; font-size: 14px; white-space: pre;">const</span><span face=""Söhne Mono", Monaco, "Andale Mono", "Ubuntu Mono", monospace" style="color: white; font-size: 14px; white-space: pre;"> cadena1SinAcentos = cadena1Limpia.</span><span class="hljs-title function_" face=""Söhne Mono", Monaco, "Andale Mono", "Ubuntu Mono", monospace" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: #f22c3d; font-size: 14px; white-space: pre;">normalize</span><span face=""Söhne Mono", Monaco, "Andale Mono", "Ubuntu Mono", monospace" style="color: white; font-size: 14px; white-space: pre;">(</span><span class="hljs-string" face=""Söhne Mono", Monaco, "Andale Mono", "Ubuntu Mono", monospace" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: #00a67d; font-size: 14px; white-space: pre;">"NFD"</span><span face=""Söhne Mono", Monaco, "Andale Mono", "Ubuntu Mono", monospace" style="color: white; font-size: 14px; white-space: pre;">).</span><span class="hljs-title function_" face=""Söhne Mono", Monaco, "Andale Mono", "Ubuntu Mono", monospace" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: #f22c3d; font-size: 14px; white-space: pre;">replace</span><span face=""Söhne Mono", Monaco, "Andale Mono", "Ubuntu Mono", monospace" style="color: white; font-size: 14px; white-space: pre;">(</span><span class="hljs-regexp" face=""Söhne Mono", Monaco, "Andale Mono", "Ubuntu Mono", monospace" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: #00a67d; font-size: 14px; white-space: pre;">/[\u0300-\u036f]/g</span><span face=""Söhne Mono", Monaco, "Andale Mono", "Ubuntu Mono", monospace" style="color: white; font-size: 14px; white-space: pre;">, </span><span class="hljs-string" face=""Söhne Mono", Monaco, "Andale Mono", "Ubuntu Mono", monospace" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: #00a67d; font-size: 14px; white-space: pre;">""</span><span face=""Söhne Mono", Monaco, "Andale Mono", "Ubuntu Mono", monospace" style="color: white; font-size: 14px; white-space: pre;">);
</span><span class="hljs-keyword" face=""Söhne Mono", Monaco, "Andale Mono", "Ubuntu Mono", monospace" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: #2e95d3; font-size: 14px; white-space: pre;">const</span><span face=""Söhne Mono", Monaco, "Andale Mono", "Ubuntu Mono", monospace" style="color: white; font-size: 14px; white-space: pre;"> cadena2SinAcentos = cadena2Limpia.</span><span class="hljs-title function_" face=""Söhne Mono", Monaco, "Andale Mono", "Ubuntu Mono", monospace" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: #f22c3d; font-size: 14px; white-space: pre;">normalize</span><span face=""Söhne Mono", Monaco, "Andale Mono", "Ubuntu Mono", monospace" style="color: white; font-size: 14px; white-space: pre;">(</span><span class="hljs-string" face=""Söhne Mono", Monaco, "Andale Mono", "Ubuntu Mono", monospace" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: #00a67d; font-size: 14px; white-space: pre;">"NFD"</span><span face=""Söhne Mono", Monaco, "Andale Mono", "Ubuntu Mono", monospace" style="color: white; font-size: 14px; white-space: pre;">).</span><span class="hljs-title function_" face=""Söhne Mono", Monaco, "Andale Mono", "Ubuntu Mono", monospace" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: #f22c3d; font-size: 14px; white-space: pre;">replace</span><span face=""Söhne Mono", Monaco, "Andale Mono", "Ubuntu Mono", monospace" style="color: white; font-size: 14px; white-space: pre;">(</span><span class="hljs-regexp" face=""Söhne Mono", Monaco, "Andale Mono", "Ubuntu Mono", monospace" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: #00a67d; font-size: 14px; white-space: pre;">/[\u0300-\u036f]/g</span><span face=""Söhne Mono", Monaco, "Andale Mono", "Ubuntu Mono", monospace" style="color: white; font-size: 14px; white-space: pre;">, </span><span class="hljs-string" face=""Söhne Mono", Monaco, "Andale Mono", "Ubuntu Mono", monospace" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: #00a67d; font-size: 14px; white-space: pre;">""</span><span face=""Söhne Mono", Monaco, "Andale Mono", "Ubuntu Mono", monospace" style="color: white; font-size: 14px; white-space: pre;">);
</span><span class="hljs-comment" color="rgba(255, 255, 255, 0.5)" face=""Söhne Mono", Monaco, "Andale Mono", "Ubuntu Mono", monospace" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; font-size: 14px; white-space: pre;">// Comparar las dos cadenas sin acentos</span><span face=""Söhne Mono", Monaco, "Andale Mono", "Ubuntu Mono", monospace" style="color: white; font-size: 14px; white-space: pre;">
</span><span class="hljs-keyword" face=""Söhne Mono", Monaco, "Andale Mono", "Ubuntu Mono", monospace" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: #2e95d3; font-size: 14px; white-space: pre;">return</span><span face=""Söhne Mono", Monaco, "Andale Mono", "Ubuntu Mono", monospace" style="color: white; font-size: 14px; white-space: pre;"> cadena1SinAcentos === cadena2SinAcentos;
}</span></span></div><div><span style="background-color: black;"><br /></span></div><div><span style="background-color: black;"><br /></span></div><div><br /></div><div>La función <span style="font-family: courier;">compararCadenas</span> utiliza el método <span style="font-family: courier;">toLowerCase()</span> de JavaScript para convertir ambas cadenas a minúsculas y la expresión regular /s+/g para reemplazar varios espacios en blanco por uno solo. Ahora utiliza la función <span style="font-family: courier;">normalize</span> de JavaScript para descomponer los caracteres acentuados en su forma canónica y la expresión regular /[\u0300-\u036f]/g para eliminar los diacríticos de ambas cadenas.</div><div><br /></div><div><h2>Paso 3: </h2></div><div>Ahora puedes utilizar el servicio en cualquier componente de Angular importándolo y declarándolo como una dependencia en el constructor:</div><div><br /><pre style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: #444654; border-radius: 0.375rem; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; font-family: "Söhne Mono", Monaco, "Andale Mono", "Ubuntu Mono", monospace; font-size: 0.875em; line-height: 1.71429; margin-bottom: 0px; margin-top: 0px; overflow-x: auto; padding: 0px;"><div class="bg-black mb-4 rounded-md" style="--tw-bg-opacity: 1; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: rgba(0,0,0,var(--tw-bg-opacity)); border-radius: 0.375rem; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; margin-bottom: 1rem;"><div class="flex items-center relative text-gray-200 bg-gray-800 px-4 py-2 text-xs font-sans" style="--tw-bg-opacity: 1; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-text-opacity: 1; --tw-translate-x: 0; --tw-translate-y: 0; align-items: center; background-color: rgba(52,53,65,var(--tw-bg-opacity)); border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: rgba(217,217,227,var(--tw-text-opacity)); display: flex; font-family: Söhne, ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, Ubuntu, Cantarell, "Noto Sans", sans-serif, "Helvetica Neue", Arial, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; font-size: 0.75rem; line-height: 1rem; padding: 0.5rem 1rem; position: relative;"><span style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box;">typescript</span><button class="flex ml-auto gap-2" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; appearance: button; background-image: none; border-color: rgb(217, 217, 227); border-style: solid; border-width: 0px; cursor: pointer; display: flex; font-family: inherit; font-size: 12px; font-weight: inherit; gap: 0.5rem; line-height: inherit; margin: 0px 0px 0px auto; padding: 0px;"><br /></button></div><div class="p-4 overflow-y-auto" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; overflow-y: auto; padding: 1rem;"><code class="!whitespace-pre hljs language-typescript" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background: none; border-radius: 0.3em; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; font-family: inherit; font-size: inherit; font-weight: inherit; hyphens: none; line-height: 1.5; overflow-wrap: normal; padding: 0.1em; tab-size: 4; white-space: normal; word-break: normal; word-spacing: normal;"><span class="hljs-keyword" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: #2e95d3;">import</span><span style="color: white;"> { </span><span class="hljs-title class_" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: #f22c3d;">Component</span><span style="color: white;"> } </span><span class="hljs-keyword" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: #2e95d3;">from</span> <span class="hljs-string" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: #00a67d;">'@angular/core'</span><span style="color: white;">; <br /></span></code><span class="hljs-keyword" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: initial; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: #2e95d3; font-family: inherit; font-size: inherit; font-weight: inherit; white-space: normal; word-spacing: normal;">import</span><span style="background-color: initial; color: white; font-family: inherit; font-size: inherit; font-weight: inherit; white-space: normal; word-spacing: normal;"> { </span><span class="hljs-title class_" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: initial; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: #f22c3d; font-family: inherit; font-size: inherit; font-weight: inherit; white-space: normal; word-spacing: normal;">ComparadorCadenasService</span><span style="background-color: initial; color: white; font-family: inherit; font-size: inherit; font-weight: inherit; white-space: normal; word-spacing: normal;"> } </span><span class="hljs-keyword" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: initial; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: #2e95d3; font-family: inherit; font-size: inherit; font-weight: inherit; white-space: normal; word-spacing: normal;">from</span><span style="background-color: initial; color: white; font-family: inherit; font-size: inherit; font-weight: inherit; white-space: normal; word-spacing: normal;"> </span><span class="hljs-string" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: initial; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: #00a67d; font-family: inherit; font-size: inherit; font-weight: inherit; white-space: normal; word-spacing: normal;">'./comparador-cadenas.service'</span><span style="background-color: initial; color: white; font-family: inherit; font-size: inherit; font-weight: inherit; white-space: normal; word-spacing: normal;">;
<br /></span><span class="hljs-meta" color="rgba(255, 255, 255, 0.6)" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: initial; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; font-family: inherit; font-size: inherit; font-weight: inherit; white-space: normal; word-spacing: normal;"><br />@Component</span><span style="background-color: initial; color: white; font-family: inherit; font-size: inherit; font-weight: inherit; white-space: normal; word-spacing: normal;">({
<br /></span><span class="hljs-attr" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: initial; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: #df3079; font-family: inherit; font-size: inherit; font-weight: inherit; white-space: normal; word-spacing: normal;"><span> </span>selector</span><span style="background-color: initial; color: white; font-family: inherit; font-size: inherit; font-weight: inherit; white-space: normal; word-spacing: normal;">: </span><span class="hljs-string" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: initial; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: #00a67d; font-family: inherit; font-size: inherit; font-weight: inherit; white-space: normal; word-spacing: normal;">'app-mi-componente'</span><span style="background-color: initial; font-family: inherit; font-size: inherit; font-weight: inherit; white-space: normal; word-spacing: normal;"><span style="color: white;">, <br /></span></span><span class="hljs-attr" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: initial; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: #df3079; font-family: inherit; font-size: inherit; font-weight: inherit; white-space: normal; word-spacing: normal;"><span> </span>template</span><span style="background-color: initial; color: white; font-family: inherit; font-size: inherit; font-weight: inherit; white-space: normal; word-spacing: normal;">: </span><span class="hljs-string" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: initial; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: #00a67d; font-family: inherit; font-size: inherit; font-weight: inherit; white-space: normal; word-spacing: normal;">`
<div *ngIf="comparadorCadenasService.compararCadenas('Camión uno', 'camion uno')">Las cadenas son iguales</div>
`</span><span style="background-color: initial; color: white; font-family: inherit; font-size: inherit; font-weight: inherit; white-space: normal; word-spacing: normal;">,
<br />})
<br /></span><span class="hljs-keyword" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: initial; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: #2e95d3; font-family: inherit; font-size: inherit; font-weight: inherit; white-space: normal; word-spacing: normal;">export</span><span style="background-color: initial; color: white; font-family: inherit; font-size: inherit; font-weight: inherit; white-space: normal; word-spacing: normal;"> </span><span class="hljs-keyword" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: initial; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: #2e95d3; font-family: inherit; font-size: inherit; font-weight: inherit; white-space: normal; word-spacing: normal;">class</span><span style="background-color: initial; color: white; font-family: inherit; font-size: inherit; font-weight: inherit; white-space: normal; word-spacing: normal;"> </span><span class="hljs-title class_" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: initial; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: #f22c3d; font-family: inherit; font-size: inherit; font-weight: inherit; white-space: normal; word-spacing: normal;">MiComponente</span><span style="background-color: initial; color: white; font-family: inherit; font-size: inherit; font-weight: inherit; white-space: normal; word-spacing: normal;"> {
<br /></span><span class="hljs-title function_" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: initial; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: #f22c3d; font-family: inherit; font-size: inherit; font-weight: inherit; white-space: normal; word-spacing: normal;"><br /><span> </span>constructor</span><span style="background-color: initial; color: white; font-family: inherit; font-size: inherit; font-weight: inherit; white-space: normal; word-spacing: normal;">(</span><span class="hljs-params" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: initial; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: white; font-family: inherit; font-size: inherit; font-weight: inherit; white-space: normal; word-spacing: normal;"><span class="hljs-keyword" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: #2e95d3;">private</span> comparadorCadenasService: ComparadorCadenasService</span><span style="background-color: initial; color: white; font-family: inherit; font-size: inherit; font-weight: inherit; white-space: normal; word-spacing: normal;">) { }
<br /><br />}</span></div></div></pre></div><div><br /></div><div><br /></div><div>En este ejemplo, la plantilla del componente utiliza la función compararCadenas del servicio para comparar las cadenas "Camión uno" y "camion uno", y mostrar un mensaje si son iguales. La cadena "Camión uno" tiene espacios en blanco adicionales en comparación con "camion uno", pero la función compararCadenas los convierte a un solo espacio en blanco y los ignora en la comparación.</div><div><br /></div><div><br /></div><div><h2>Paso 4: </h2></div><div>Recuerda importar el servicio en el módulo de Angular que lo vayas a utilizar, agregando la siguiente línea en el archivo src/app/app.module.ts:</div><div><br /><pre style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: #444654; border-radius: 0.375rem; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: #d1d5db; font-family: "Söhne Mono", Monaco, "Andale Mono", "Ubuntu Mono", monospace; font-size: 0.875em; line-height: 1.71429; margin-bottom: 0px; margin-top: 0px; overflow-x: auto; padding: 0px;"><div class="bg-black mb-4 rounded-md" style="--tw-bg-opacity: 1; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: rgba(0,0,0,var(--tw-bg-opacity)); border-radius: 0.375rem; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; margin-bottom: 1rem;"><div class="flex items-center relative text-gray-200 bg-gray-800 px-4 py-2 text-xs font-sans" style="--tw-bg-opacity: 1; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-text-opacity: 1; --tw-translate-x: 0; --tw-translate-y: 0; align-items: center; background-color: rgba(52,53,65,var(--tw-bg-opacity)); border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: rgba(217,217,227,var(--tw-text-opacity)); display: flex; font-family: Söhne, ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, Ubuntu, Cantarell, "Noto Sans", sans-serif, "Helvetica Neue", Arial, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; font-size: 0.75rem; line-height: 1rem; padding: 0.5rem 1rem; position: relative;"><span style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box;">typescript</span><button class="flex ml-auto gap-2" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; appearance: button; background-image: none; border-color: rgb(217, 217, 227); border-style: solid; border-width: 0px; cursor: pointer; display: flex; font-family: inherit; font-size: 12px; font-weight: inherit; gap: 0.5rem; line-height: inherit; margin: 0px 0px 0px auto; padding: 0px;"><br /></button></div><div class="p-4 overflow-y-auto" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; overflow-y: auto; padding: 1rem;"><code class="!whitespace-pre hljs language-typescript" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background: none; border-radius: 0.3em; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: white; font-family: inherit; font-size: inherit; font-weight: inherit; hyphens: none; line-height: 1.5; overflow-wrap: normal; padding: 0.1em; tab-size: 4; white-space: normal; word-break: normal; word-spacing: normal;"><span class="hljs-keyword" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: #2e95d3;">import</span> { <span class="hljs-title class_" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: #f22c3d;">NgModule</span> } <span class="hljs-keyword" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: #2e95d3;">from</span> <span class="hljs-string" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: #00a67d;">'@angular/core'</span>;
<br /><span class="hljs-keyword" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: #2e95d3;">import</span> { <span class="hljs-title class_" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: #f22c3d;">BrowserModule</span> } <span class="hljs-keyword" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: #2e95d3;">from</span> <span class="hljs-string" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: #00a67d;">'@angular/platform-browser'</span>;
<br /><span class="hljs-keyword" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: #2e95d3;">import</span> { <span class="hljs-title class_" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: #f22c3d;">AppComponent</span> } <span class="hljs-keyword" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: #2e95d3;">from</span> <span class="hljs-string" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: #00a67d;">'./app.component'</span>;
<br /><span class="hljs-keyword" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: #2e95d3;">import</span> { <span class="hljs-title class_" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: #f22c3d;">ComparadorCadenasService</span> } <span class="hljs-keyword" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: #2e95d3;">from</span> <span class="hljs-string" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: #00a67d;">'./comparador-cadenas.service'</span>;
<br /><span class="hljs-meta" color="rgba(255, 255, 255, 0.6)" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box;"><br />@NgModule</span>({
<br /><span class="hljs-attr" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: #df3079;"><span> </span>declarations</span>: [
<span class="hljs-title class_" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: #f22c3d;">AppComponent</span>
],
<br /><span class="hljs-attr" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: #df3079;"><span> </span>imports</span>: [
<span class="hljs-title class_" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: #f22c3d;">BrowserModule</span>
],
<br /><span class="hljs-attr" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: #df3079;"><span> </span>providers</span>: [
<span class="hljs-title class_" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: #f22c3d;">ComparadorCadenasService</span>
],
<br /><span class="hljs-attr" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: #df3079;"><span> </span>bootstrap</span>: [<span class="hljs-title class_" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: #f22c3d;">AppComponent</span>]
<br />})
<br /><span class="hljs-keyword" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: #2e95d3;">export</span> <span class="hljs-keyword" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: #2e95d3;">class</span> <span class="hljs-title class_" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: #f22c3d;">AppModule</span> { }
</code></div></div></pre><div><br /></div>Con estos pasos, has creado un servicio en Angular 11 que compara la cadena "Camión" con tilde y que es igual a la cadena "Camión" sin tilde. Puedes utilizar esta función para comparar cualquier otra cadena con o sin acentos diacríticos.</div><div><br /></div>Willian Diazhttp://www.blogger.com/profile/12030062158428083614noreply@blogger.com0tag:blogger.com,1999:blog-3279603830404251843.post-40821365082374247422023-02-27T01:29:00.001-05:002023-02-27T01:29:29.710-05:00¿Cómo se hace en SQLServer para comprar estas dos cadenas "Camión uno" == " camion uno. "?<h2 style="text-align: left;">Introducción: </h2><div><div>Vamos a realizar un ejemplo de cómo se puede crear una consulta en SQLServer para que permita comprar dos cadenas sin importar mayuscular, menusculas, varios espacios y tildes, para saber si son iguales.</div><div><br /></div><div><br /></div><h2 style="text-align: left;"> Entorno: </h2><div>Se realiza sobre una maquina MacBook Pro 10 con el cliente de Base de Datos DBeaver y una instalación Cloud de SQLServer.</div><div><br /></div><div><br /></div><h2 style="text-align: left;">Solución:</h2><div><div>En SQLServer, para validar un texto con vocales con acento, podemos utilizar la función COLLATE. Esta función permite establecer una regla de ordenación y comparación para la base de datos, incluyendo la sensibilidad a las letras con acento.</div><div><br /></div><div>Por ejemplo, si queremos validar si una cadena de texto contiene la vocal "á", podemos utilizar la función COLLATE de la siguiente manera:</div></div><div><br /></div><div><pre style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: #444654; border-radius: 0.375rem; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: #d1d5db; font-family: "Söhne Mono", Monaco, "Andale Mono", "Ubuntu Mono", monospace !important; font-size: 0.875em; line-height: 1.71429; margin-bottom: 0px; margin-top: 0px; overflow-x: auto; padding: 0px;"><div class="bg-black mb-4 rounded-md" style="--tw-bg-opacity: 1; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: rgba(0,0,0,var(--tw-bg-opacity)); border-radius: 0.375rem; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; margin-bottom: 1rem;"><div class="flex items-center relative text-gray-200 bg-gray-800 px-4 py-2 text-xs font-sans" style="--tw-bg-opacity: 1; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-text-opacity: 1; --tw-translate-x: 0; --tw-translate-y: 0; align-items: center; background-color: rgba(52,53,65,var(--tw-bg-opacity)); border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: rgba(217,217,227,var(--tw-text-opacity)); display: flex; font-family: Söhne, ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, Ubuntu, Cantarell, "Noto Sans", sans-serif, "Helvetica Neue", Arial, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; font-size: 0.75rem; line-height: 1rem; padding: 0.5rem 1rem; position: relative;"><span class="" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box;">sql</span><button class="flex ml-auto gap-2" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; appearance: button; background-image: none; border-color: rgb(217, 217, 227); border-style: solid; border-width: 0px; cursor: pointer; display: flex; font-family: inherit; font-size: 12px; font-weight: inherit; gap: 0.5rem; line-height: inherit; margin: 0px 0px 0px auto; padding: 0px;"><br /></button></div><div class="p-4 overflow-y-auto" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; overflow-y: auto; padding: 1rem;"><code class="!whitespace-pre hljs language-sql" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background: none; border-radius: 0.3em; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: white; font-family: inherit; font-size: inherit; font-weight: inherit; hyphens: none; line-height: 1.5; overflow-wrap: normal; padding: 0.1em; tab-size: 4; white-space: normal; word-break: normal; word-spacing: normal;"><span class="hljs-keyword" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: #2e95d3;">SELECT</span> <span class="hljs-operator" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box;">*</span>
<span class="hljs-keyword" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: #2e95d3;">FROM</span> tabla
<span class="hljs-keyword" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: #2e95d3;">WHERE</span> columna <span class="hljs-keyword" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: #2e95d3;">COLLATE</span> SQL_Latin1_General_CP1_CI_AI <span class="hljs-keyword" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: #2e95d3;">LIKE</span> <span class="hljs-string" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: #00a67d;">'%á%'</span></code></div><div><code class="!whitespace-pre hljs language-sql" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background: none; border-radius: 0.3em; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: white; font-family: inherit; font-size: inherit; font-weight: inherit; hyphens: none; line-height: 1.5; overflow-wrap: normal; padding: 0.1em; tab-size: 4; white-space: normal; word-break: normal; word-spacing: normal;"><span class="hljs-string" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: #00a67d;"><br /></span></code></div></div></pre></div><div><br /></div><div><br /></div><div><div>En este caso, SQL_Latin1_General_CP1_CI_AI es una regla de ordenación y comparación que considera las letras con acento como equivalentes a las letras sin acento (CI) y es insensible a mayúsculas y minúsculas (AI). La cláusula LIKE permite buscar una cadena de texto que contenga la vocal "á".</div><div><br /></div><div>También es posible utilizar la función COLLATE al crear una tabla o una columna, de manera que se aplique la regla de ordenación y comparación a todos los datos almacenados en ella. Por ejemplo:</div></div><div><br /></div><div><pre style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: #444654; border-radius: 0.375rem; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: #d1d5db; font-family: "Söhne Mono", Monaco, "Andale Mono", "Ubuntu Mono", monospace !important; font-size: 0.875em; line-height: 1.71429; margin-bottom: 0px; margin-top: 0px; overflow-x: auto; padding: 0px;"><div class="bg-black mb-4 rounded-md" style="--tw-bg-opacity: 1; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: rgba(0,0,0,var(--tw-bg-opacity)); border-radius: 0.375rem; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; margin-bottom: 1rem;"><div class="flex items-center relative text-gray-200 bg-gray-800 px-4 py-2 text-xs font-sans" style="--tw-bg-opacity: 1; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-text-opacity: 1; --tw-translate-x: 0; --tw-translate-y: 0; align-items: center; background-color: rgba(52,53,65,var(--tw-bg-opacity)); border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: rgba(217,217,227,var(--tw-text-opacity)); display: flex; font-family: Söhne, ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, Ubuntu, Cantarell, "Noto Sans", sans-serif, "Helvetica Neue", Arial, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; font-size: 0.75rem; line-height: 1rem; padding: 0.5rem 1rem; position: relative;"><span class="" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box;">sql</span><button class="flex ml-auto gap-2" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; appearance: button; background-image: none; border-color: rgb(217, 217, 227); border-style: solid; border-width: 0px; cursor: pointer; display: flex; font-family: inherit; font-size: 12px; font-weight: inherit; gap: 0.5rem; line-height: inherit; margin: 0px 0px 0px auto; padding: 0px;"><br /></button></div><div class="p-4 overflow-y-auto" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; overflow-y: auto; padding: 1rem;"><code class="!whitespace-pre hljs language-sql" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background: none; border-radius: 0.3em; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: white; font-family: inherit; font-size: inherit; font-weight: inherit; hyphens: none; line-height: 1.5; overflow-wrap: normal; padding: 0.1em; tab-size: 4; white-space: normal; word-break: normal; word-spacing: normal;"><span class="hljs-keyword" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: #2e95d3;">CREATE</span> <span class="hljs-keyword" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: #2e95d3;">TABLE</span> tabla (
columna <span class="hljs-type" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: #df3079;">VARCHAR</span>(<span class="hljs-number" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: #df3079;">50</span>) <span class="hljs-keyword" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: #2e95d3;">COLLATE</span> SQL_Latin1_General_CP1_CI_AI
)</code></div></div></pre></div><div><br /></div><div>En este caso, la columna "columna" utilizará la regla de ordenación y comparación SQL_Latin1_General_CP1_CI_AI, lo que significa que será insensible a las diferencias entre las letras con y sin acento.</div><div><br /></div></div><div><br /></div><div><br /></div>Willian Diazhttp://www.blogger.com/profile/12030062158428083614noreply@blogger.com0tag:blogger.com,1999:blog-3279603830404251843.post-7128905449655203962016-08-28T19:27:00.002-05:002016-08-28T19:27:47.934-05:00Creando proyectos java con JBoss Forge<h2 style="text-align: justify;">
0. Indice de contenidos</h2>
<div style="text-align: justify;">
</div>
<ol>
<li>Introducción</li>
<li>Entorno</li>
<li>Creando los proyectos</li>
</ol>
<h2 style="text-align: justify;">
1. Introducción</h2>
<div style="text-align: justify;">
Vamos a realizar la creación de un proyecto principal maven, que contiene 2 módulos que son un proyecto <b>jar</b> donde se incluirán toda la lógica del sistema y otro proyecto <b>war </b>que contendrá la presentación del sistema.<br />
<br />
Para ello vamos a utilizar Eclipse, JBoss Forge que se encuentra en el JBoss Tools.</div>
<div style="text-align: justify;">
<br /></div>
<h2 style="text-align: justify;">
2. Entorno</h2>
<div style="text-align: justify;">
El proceso lo realizamos en el siguiente entorno:</div>
<div style="text-align: justify;">
</div>
<ul>
<li>Hardware: Portátil lenovo Z480 (2.50 GHz Core i5, 12GB Ram) 64 Bits</li>
<li>Sistema Operativo: Windows 10</li>
</ul>
<div>
<br />
La versión de las herramientas que vamos a usar son:</div>
<div>
<ul>
<li>Java 1.8.0_101.</li>
<li>Eclipse Neon Release (4.6.0).</li>
<li>JBoss Tools 4.4.0.Final.</li>
</ul>
<div>
<br /></div>
</div>
<h2 style="text-align: justify;">
3. Creando los proyectos</h2>
<div>
<div style="text-align: justify;">
<div style="text-align: justify;">
Vamos a crear un proyecto principal llamado base, de tipo maven y dentro de este vamos a crear uno llamado base-core donde vamos a escribir toda la lógica de negocio y otro proyecto llamado base-web donde vamos a escribir todo lo relacionado con la capa de presentación de la aplicación.<br />
<br />
Entonces manos a la obra.....<br />
<br />
Abrimos eclipse y vamos a cargar la ventana de JBoss Forge, entrando al menu <b>Windows, Show View, Other</b>.<br />
<br />
<div style="text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjThejsLpqYUib0Lgx7MWhliNgOV4mKhH15-h8wC1atiYSh_dAsS9Uk20SvT_EN_dQKuW2iZHfRL7PWUzgf511JYZZ03F8nCWqRqMcVCFxkxSqjTr7zO6ihOu5n-VNIHEvJJ-TbtGpE_idE/s1600/forge_01.png" imageanchor="1"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjThejsLpqYUib0Lgx7MWhliNgOV4mKhH15-h8wC1atiYSh_dAsS9Uk20SvT_EN_dQKuW2iZHfRL7PWUzgf511JYZZ03F8nCWqRqMcVCFxkxSqjTr7zO6ihOu5n-VNIHEvJJ-TbtGpE_idE/s1600/forge_01.png" /></a></div>
<br />
<br />
Le sale una ventana donde puede digitar forge y le aparece en el listado de abajo la opción <b>Forge Console</b>.<br />
<br />
<div style="text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgQOfwKykMuYJV1GInFPUi3EXer5f0VBBWXNI3kEU__91C7UDz2l_w6J8yrmdNHUL0Zrt6UxMFqeJYWz_EFkNw3eGPNeEWGBRdx-M5v35zMQT50N-W3l_IkxwPGhzUp7RX-gC8TXELndmQI/s1600/forge_02.png" imageanchor="1"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgQOfwKykMuYJV1GInFPUi3EXer5f0VBBWXNI3kEU__91C7UDz2l_w6J8yrmdNHUL0Zrt6UxMFqeJYWz_EFkNw3eGPNeEWGBRdx-M5v35zMQT50N-W3l_IkxwPGhzUp7RX-gC8TXELndmQI/s1600/forge_02.png" /></a></div>
<br />
Al darle click en el botón <b>OK</b>, se carga la consola en la parte inferior de eclipse. Después hay que dar click en el botón play verde para iniciar la consola.<br />
<br />
<div style="text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiNoe_LMbH9dixC72_UcAafRQ9a0O5ShJTm_ADkJlkHuRM5U92JyDP-szYg5En17ULjduvHt7pEBfeTO9fWDWN2jykubz_hFUylgG6OqwIhoKUUAdUnXUgcQ9bsLKaGNf4RTEi60cXueZX3/s1600/forge_03.png" imageanchor="1"><img border="0" height="159" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiNoe_LMbH9dixC72_UcAafRQ9a0O5ShJTm_ADkJlkHuRM5U92JyDP-szYg5En17ULjduvHt7pEBfeTO9fWDWN2jykubz_hFUylgG6OqwIhoKUUAdUnXUgcQ9bsLKaGNf4RTEi60cXueZX3/s640/forge_03.png" width="550" /></a></div>
<br />
<br />
<div style="text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhtA1O0RAl_9BgwONClGBBdD_rp8zTfZJjmNP82vRgfI8T7H2lXvVATjDZYBRmN-DxaKJzlvc8iknBCse558MkN8hbEJ58__UKLxqKswcTyZkHxYlMhq4LWZy3dvNKGuS5SciNl3rlgWA7F/s1600/forge_04.png" imageanchor="1"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhtA1O0RAl_9BgwONClGBBdD_rp8zTfZJjmNP82vRgfI8T7H2lXvVATjDZYBRmN-DxaKJzlvc8iknBCse558MkN8hbEJ58__UKLxqKswcTyZkHxYlMhq4LWZy3dvNKGuS5SciNl3rlgWA7F/s1600/forge_04.png" /></a></div>
<br />
En el prom de la consola de forge se debe escribir el siguiente comando:<br />
<br />
<b><i>project-new --named base --build-system Maven --type parent --final-name base --top-level-package com.blogspot.tutorialestecnicos.app.base</i></b><br />
<br />
<div style="text-align: center;">
<br /></div>
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgMWjTPmPl2SaatV1ozlICJW4tcLJfSNuA8BbG4vM3koR9r2shzSulT2WGPS_tL6OTErYQvQ76eyHlOnXla-mB7cPJ2Mc7oXOubFfM5Pi2cpHdgwrcoyIM187rkPgNZdo1PvpP6guBu30Rl/s1600/forge_05.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em; text-align: center;"><img border="0" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgMWjTPmPl2SaatV1ozlICJW4tcLJfSNuA8BbG4vM3koR9r2shzSulT2WGPS_tL6OTErYQvQ76eyHlOnXla-mB7cPJ2Mc7oXOubFfM5Pi2cpHdgwrcoyIM187rkPgNZdo1PvpP6guBu30Rl/s640/forge_05.png" width="550" /></a><br />
<div style="text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgMWjTPmPl2SaatV1ozlICJW4tcLJfSNuA8BbG4vM3koR9r2shzSulT2WGPS_tL6OTErYQvQ76eyHlOnXla-mB7cPJ2Mc7oXOubFfM5Pi2cpHdgwrcoyIM187rkPgNZdo1PvpP6guBu30Rl/s1600/forge_05.png" imageanchor="1"></a><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEijnSxpn27rulRwMHY01Lb59GNVAXZvqBrpBcCo8sAfCfh-_NOIdFvXfNnWfB_ZqUIbw844LgIDyueKda84_rTBFHl1KoszpIZybalCsaldEyiQ5l-45DB3-Fxag1spSvg5stEhSKZ7WwUz/s1600/forge_06.png" imageanchor="1"><img border="0" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEijnSxpn27rulRwMHY01Lb59GNVAXZvqBrpBcCo8sAfCfh-_NOIdFvXfNnWfB_ZqUIbw844LgIDyueKda84_rTBFHl1KoszpIZybalCsaldEyiQ5l-45DB3-Fxag1spSvg5stEhSKZ7WwUz/s400/forge_06.png" width="550" /></a></div>
<br />
Se crea el proyecto base que será el proyecto principal.<br />
<br />
Después se debe ingresar el comando:<br />
<br />
<b><i>project-new --named base-core --build-system Maven --type jar --final-name base-core --top-level-package com.blogspot.tutorialestecnicos.app.base.core</i></b><br />
<br />
Para crear el proyecto base-core que contendrá toda la lógica del negocio del sistema.<br />
<br />
<div style="text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhsMfQCsAFvvgODPfx7ttpWsHtAlPL30pnGgDntxdJKuSHM076c-C0d44AgaIhJGsdUhXiymSbpqgbbNgO7XFK-vmTUqk2zrhnLsQiOY36wcQGI6wgwMz7O2QLx5Bz5yglKhoc35XpF89Il/s1600/forge_06.png" imageanchor="1"><img border="0" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhsMfQCsAFvvgODPfx7ttpWsHtAlPL30pnGgDntxdJKuSHM076c-C0d44AgaIhJGsdUhXiymSbpqgbbNgO7XFK-vmTUqk2zrhnLsQiOY36wcQGI6wgwMz7O2QLx5Bz5yglKhoc35XpF89Il/s320/forge_06.png" width="550" /></a></div>
<br />
<br />
Una vez creado, se debe digitar el comando <b>cd</b>, para que se retorna al proyecto principal. Una vez ubicado en el proyecto principal se debe ejecutar el siguiente comando:<br />
<br />
<b><i>project-new --named base-web --build-system Maven --type war --final-name base-web --top-level-package com.blogspot.tutorialestecnicos.app.base.web</i></b><br />
<br />
<div style="text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh8KOgiF_ZQeRZww7hjFQIcNATxu5OFifmuiqEqrQHfQLTw8FON9bjo_IBv_D_nEB5fuCgMoShSJG-PvDHoDFqgINgfsJQOL4C4Slu9jhsakVFsGoWwTH8Sf7OrDdOlBEeDc00d3m2btRgg/s1600/forge_07.png" imageanchor="1"><img border="0" height="340" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh8KOgiF_ZQeRZww7hjFQIcNATxu5OFifmuiqEqrQHfQLTw8FON9bjo_IBv_D_nEB5fuCgMoShSJG-PvDHoDFqgINgfsJQOL4C4Slu9jhsakVFsGoWwTH8Sf7OrDdOlBEeDc00d3m2btRgg/s640/forge_07.png" width="550" /></a></div>
<br />
<br />
Una vez creado los 3 proyectos, deben lucir así:<br />
<br />
<div style="text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgXl4Wltml0DAa24LXNf6hyphenhyphenE5tZl-CdDX7iKYjPWvkm7V16sBnvqiYw46Ii6z2eGwTjdFuoGJbj4Jeh45gwlyNIamAuNsJawphKE7ydIskrV9IJbtJJe8_uOp26WxuFDG0cNMYQP7gUYrTU/s1600/forge_08.png" imageanchor="1"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgXl4Wltml0DAa24LXNf6hyphenhyphenE5tZl-CdDX7iKYjPWvkm7V16sBnvqiYw46Ii6z2eGwTjdFuoGJbj4Jeh45gwlyNIamAuNsJawphKE7ydIskrV9IJbtJJe8_uOp26WxuFDG0cNMYQP7gUYrTU/s1600/forge_08.png" /></a></div>
Si les fue de utilidad no olviden compartir en sus redes sociales.<br />
<br />
Hasta el siguiente artículo.....<br />
<br />
<br /></div>
</div>
</div>
Willian Diazhttp://www.blogger.com/profile/12030062158428083614noreply@blogger.com0tag:blogger.com,1999:blog-3279603830404251843.post-30822458692795690432016-08-28T15:58:00.001-05:002016-08-28T15:58:13.795-05:00Configurar PostgreSQL con Wildfly<h2 style="text-align: justify;">
0. Indice de contenidos</h2>
<div style="text-align: justify;">
</div>
<ol>
<li>Introducción</li>
<li>Entorno</li>
<li>Configuración</li>
</ol>
<h2 style="text-align: justify;">
1. Introducción</h2>
<div style="text-align: justify;">
Vamos a realizar la configuración de PostgreSQL sobre el servidor de aplicaciones Wildfly.</div>
<div style="text-align: justify;">
<br /></div>
<h2 style="text-align: justify;">
2. Entorno</h2>
<div style="text-align: justify;">
El proceso lo realizamos en el siguiente entorno:</div>
<div style="text-align: justify;">
</div>
<ul>
<li>Hardware: Portátil lenovo Z480 (2.50 GHz Core i5, 12GB Ram) 64 Bits</li>
<li>Sistema Operativo: Windows 10</li>
</ul>
<div>
<br />
La versión que vamos a instalar es:</div>
<div>
<ul>
<li>Wildfly 10.1.0.Final.</li>
</ul>
<div>
<br /></div>
</div>
<h2 style="text-align: justify;">
3. Configuración</h2>
<div>
<div style="text-align: justify;">
<div style="text-align: justify;">
<div>
Vamos a realizar la configuración para que los sistemas de información que se ejecuten en el servidor de aplicaciones Wildfly puedan conectarse la motor de base de datos de PostgreSQL.<br />
<br />
<h3>
Paso 1. Descargar driver para PostgreSQL</h3>
Para ello debemos descargar el driver de PostgreSQL de la siguiente página <a href="https://jdbc.postgresql.org/download.html" target="_blank">jdbc.postgresql.org</a>, tener en cuenta que para este tutorial estamos usando java 8, por lo tanto debemos descargar el driver <b><u>JDBC42</u></b> y la última versión disponible de acuerdo a la versión de PostgreSQL.<br />
<br />
Dentro de la página se debe buscar la sección <b><u>Current Versión</u></b> y descargar el driver <a href="https://jdbc.postgresql.org/download/postgresql-9.4.1209.jar" style="background-color: white; color: #004e66; font-family: verdana, sans-serif; font-size: 11.04px; line-height: 13.248px; text-align: left;"><b>JDBC42 Postgresql Driver, Version 9.4.1209</b></a><br />
<br />
<div style="text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjyJdCwj8OtCeK1qXFX-W73btTmwCnKqD59G4lrCCF-VAG9aEH0iovqKOJ3usUmudFfO_3KfXDAw54gVR73HbBJYfp8zsPVKEi6Xeq0yIqGjW99eQRS7pGXS745Mc_ptx3K3db4f9apiFjL/s1600/Descargar+JDBC+PostgreSQL.PNG" imageanchor="1"><img border="0" height="106" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjyJdCwj8OtCeK1qXFX-W73btTmwCnKqD59G4lrCCF-VAG9aEH0iovqKOJ3usUmudFfO_3KfXDAw54gVR73HbBJYfp8zsPVKEi6Xeq0yIqGjW99eQRS7pGXS745Mc_ptx3K3db4f9apiFjL/s400/Descargar+JDBC+PostgreSQL.PNG" width="400" /></a></div>
<br /></div>
<div>
<br /></div>
<h3>
Paso 2. Crear el módulo en Wildfly</h3>
Ahora debemos colocar el driver descargado, como un módulo de Wildfly y para ello vamos a la carpeta donde se descomprimió el Wildfly y entramos al subdirectorio <b>modules</b>, y creamos una carpeta <b>org</b>, dentro de esta una llamada <b>postgres</b> y por dentro otra llamada <b>main</b>.<br />
<br />
<div style="text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjv8Xn9C_kGmN0GxGSW_W7hZK7j1FmtvgqqKenvIH5lpicLXLFVaRTKAv2Co8Wm16S2krWXVTsPfEFItoYovbfZKfPffLLcXMveK4ucJ424pp__cH3kTCUnKj0CkZ0ftVIBvizKHag-Tj49/s1600/wildfly_modules_postgres.PNG" imageanchor="1"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjv8Xn9C_kGmN0GxGSW_W7hZK7j1FmtvgqqKenvIH5lpicLXLFVaRTKAv2Co8Wm16S2krWXVTsPfEFItoYovbfZKfPffLLcXMveK4ucJ424pp__cH3kTCUnKj0CkZ0ftVIBvizKHag-Tj49/s400/wildfly_modules_postgres.PNG" /></a></div>
<br />
Dentro de la carpeta <b>main</b>, se debe pegar el archivo descargado y crear un archivo llamado <b>module.xml</b>.<br />
<br />
<div style="text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi5ZGlixojSK0m6OXEM-XcVl_BIpHA96Oog9OQGMZihjvUIe93vT4chmBBNI79bPifjpsr1XXegW5GVQnRoscHgartNhaDFa0Lj62fHv9f0hFScaFY_4STvINltvZErn5cIDF1rkjXCf6r2/s1600/wildfly_modules_postgres_02.PNG" imageanchor="1"><img border="0" height="139" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi5ZGlixojSK0m6OXEM-XcVl_BIpHA96Oog9OQGMZihjvUIe93vT4chmBBNI79bPifjpsr1XXegW5GVQnRoscHgartNhaDFa0Lj62fHv9f0hFScaFY_4STvINltvZErn5cIDF1rkjXCf6r2/s320/wildfly_modules_postgres_02.PNG" width="320" /></a></div>
El contenido del archivo module.xml debe ser el siguiente:<br />
<br />
<div style="text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhFOGSNPyZBom6s4Sx17DJIWlk1HUHweJw4Dl4gafPMoKPjgYeHfxUJlKpRd0QKh7K_9MhZi6ypJwyTG7iDF8SBPscObfGM0nAE6Q-qZGztpsyP3tQUywmwgfQKLs5OWw0QK1J5agR4wQ4-/s1600/wildfly_modules_postgres_03.PNG" imageanchor="1"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhFOGSNPyZBom6s4Sx17DJIWlk1HUHweJw4Dl4gafPMoKPjgYeHfxUJlKpRd0QKh7K_9MhZi6ypJwyTG7iDF8SBPscObfGM0nAE6Q-qZGztpsyP3tQUywmwgfQKLs5OWw0QK1J5agR4wQ4-/s1600/wildfly_modules_postgres_03.PNG" /></a></div>
<br />
En la línea 2, en la propiedad <b>name</b> se encuentra el nombre que será usado dentro del archivo de configuración de wildfly.<br />
<br />
En la línea 4, en la propiedad <b>path</b> se coloca el nombre del archivo jar (driver de PostgreSQL) que descargamos .<br />
<br />
Las demás líneas son de configuración de los módulos requeridos para funcionar la conexión entre Wildfly y PostgreSQL.<br />
<br />
<br />
<h3>
Paso 3. Configurar el datasource en Wildfly</h3>
Ahora debemos indicarle a Wildfly que debe usar el módulo de PostgreSQL para que se conecte a una base de datos que llamaremos <b>base</b>.<br />
<br />
Dentro de la carpeta de instalación del Wildfly, entramos a la carpeta <b>standalone</b>, después ingresamos a la carpeta <b>configuration</b> y ahí abrimos el archivo <b>standalone.xml</b>.<br />
<br />
Dentro de este archivo buscamos la línea <b><datasources></b>, que es la etiqueta inicial donde se encuentra las configuraciones de conexión a las bases de datos.</div>
<div style="text-align: justify;">
<br />
Se debe crear la configuración del <b>datasource </b>y del <b>driver</b>. Debe quedar como lo indica la imagen.<br />
<br />
<div style="text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg7ryB0tVNzbSCmjJXW128XZ8ahpDFcg3gYKZXSIM0siHFCXGUcksV2aTWYzoQZ_vX5x59HM5vgyYVznnxTlCuMDbAWVwyTvaWzXKQrXH3PXfNFmFRHF7r_ZylgCVzOsboAVPp6VQdRHfqD/s1600/wildfly_config_standalone_01.PNG" imageanchor="1"><img border="0" height="364" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg7ryB0tVNzbSCmjJXW128XZ8ahpDFcg3gYKZXSIM0siHFCXGUcksV2aTWYzoQZ_vX5x59HM5vgyYVznnxTlCuMDbAWVwyTvaWzXKQrXH3PXfNFmFRHF7r_ZylgCVzOsboAVPp6VQdRHfqD/s640/wildfly_config_standalone_01.PNG" width="550" /></a></div>
<div style="text-align: center;">
<br /></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Vamos a realizar una corta explicación de esta configuración del datasource, en palabras muy sencillas.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<div style="text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgKcCvyqlpcIGyfNNVsg5fRW1W6-Xun-yr3ulHEpF0tUHDrQtp8ITffhXH8kDNBWmSsoEKKZQ909BhbzJYn4TEDNI74E1Nfuai5GsKxcKgfBRJ84kGrFAGQknIvsa0_-Q0E5_UVjw006Daa/s1600/wildfly_config_standalone_02.PNG" imageanchor="1"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgKcCvyqlpcIGyfNNVsg5fRW1W6-Xun-yr3ulHEpF0tUHDrQtp8ITffhXH8kDNBWmSsoEKKZQ909BhbzJYn4TEDNI74E1Nfuai5GsKxcKgfBRJ84kGrFAGQknIvsa0_-Q0E5_UVjw006Daa/s1600/wildfly_config_standalone_02.PNG" width="550" /></a></div>
</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
El valor que tiene la propiedad <b>jndi-name</b>, es muy importante porque será usada en la configuración de nuestro proyecto para que se pueda conectar a la base de datos y debe llevar esa estructura, lo que puede cambiarse es el nombre <b>PostgresDS</b>, lo demás hay que dejarlo así para evitar futuros inconvenientes. </div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
El <b>pool-name</b> es le nombre corto para identificar la conexión.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
La línea <b><connection-url>jdbc:postgresql://localhost:5432/<u>base</u></connection-url> </b>contiene la ruta de donde Wildfly se va a conectar a la base de datos y el nombre que vamos a usar es <b>base</b>.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
La línea <driver>postgres</driver> le indica cual es el driver que debe usar cuando intente el servidor crear una conexión a la base de datos. Más abajo está la configuración del driver en este archivo.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Las líneas que están dentro de las etiquetas <security> son los datos de usuario y contraseña que le indicaron a PostgreSQL cuando lo instalaron.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Y para que Wildfly sepa cual es le driver que tiene que usar se colocan estas líneas:</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<div style="text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhJF63ZRRG529e13NPKaiKJV7C8ms2cJpUAYJV-G6ZE2h7vkq0tdQ4TzP1Wzy2TktBwq0yZykal39hLzQdWh_rmtxwhWt4GXrk7dLOzqLs0vp8_0tQOR5ffRT7KOUtIM7T4xyuaTdAKSJoc/s1600/wildfly_config_standalone_03.PNG" imageanchor="1"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhJF63ZRRG529e13NPKaiKJV7C8ms2cJpUAYJV-G6ZE2h7vkq0tdQ4TzP1Wzy2TktBwq0yZykal39hLzQdWh_rmtxwhWt4GXrk7dLOzqLs0vp8_0tQOR5ffRT7KOUtIM7T4xyuaTdAKSJoc/s1600/wildfly_config_standalone_03.PNG" width="550" /></a></div>
</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<h3>
Paso 4. Crear la base de datos</h3>
Cuando se instaló PostgreSQL se debió instalar un programa llamado pgadmin3, se debe ejecutar este programa y aparecerá algo así:<br />
<br />
<div style="text-align: center;">
</div>
<div style="text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhX2iBJLcMa2pKj5VBQ4EqnOuEfz_dyijCx7-bZ-YqTR5E7nObtvx_vQ9lkaVIj4Dwn9mmFVMTyXmtznsfdDpA0noyZmGcoXy8Fxe6kFph3dDQrc39rVGQ2W8Tm5InxPBbO9h-EnfPuy7Ln/s1600/pgadmin_01.PNG" imageanchor="1"><img border="0" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhX2iBJLcMa2pKj5VBQ4EqnOuEfz_dyijCx7-bZ-YqTR5E7nObtvx_vQ9lkaVIj4Dwn9mmFVMTyXmtznsfdDpA0noyZmGcoXy8Fxe6kFph3dDQrc39rVGQ2W8Tm5InxPBbO9h-EnfPuy7Ln/s640/pgadmin_01.PNG" width="550" /></a></div>
<br />
Le damos click sobre el icono en forma de enchufe para crear en este programa cliente de bases de datos, la conexión al motor de PostgreSQL y así poder crear la base de datos.<br />
<br />
<div style="text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgUtW1Zsrp8UjSDWN5af1fCnkwNMChBxqAPwSunvLkinoseCVUlPehuYFYYy493eQS7eDKl3y58I8m-eDdULNaF3lFp7BbfNjt9spfUl4-QV_qtPhIfV3yOHPMb9aBThLDECu97CNY5gLgF/s1600/pgadmin_01_1.PNG" imageanchor="1"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgUtW1Zsrp8UjSDWN5af1fCnkwNMChBxqAPwSunvLkinoseCVUlPehuYFYYy493eQS7eDKl3y58I8m-eDdULNaF3lFp7BbfNjt9spfUl4-QV_qtPhIfV3yOHPMb9aBThLDECu97CNY5gLgF/s1600/pgadmin_01_1.PNG" /></a></div>
<br />
Ingresamos los datos para la configuración, es importante resaltar que acá debemos escribir el usuario y la contraseña que usamos en la instalación de postgres.<br />
<br />
Ahora ingresamos al motor, dando doble click a la configuración que acabamos de crear con el nombre <b>Local.</b><br />
<br />
Después le damos click derecho sobre el icono que dice Database y escogemos la opción New Database.<br />
<br />
<div style="text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgeXD92XHGatAzgzkaPEr2Apzr2U5VEpcenSCdlp9GHzKYmd0gneBkgkasWZx951CLsTrn-6_InTgKfd7s6gaB2YvStjBR4d6pr8VZmP79yVpAlDE6zoL0XKcCovLkjZLZVo9rfidEhnpR4/s1600/pgadmin_02.PNG" imageanchor="1"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgeXD92XHGatAzgzkaPEr2Apzr2U5VEpcenSCdlp9GHzKYmd0gneBkgkasWZx951CLsTrn-6_InTgKfd7s6gaB2YvStjBR4d6pr8VZmP79yVpAlDE6zoL0XKcCovLkjZLZVo9rfidEhnpR4/s1600/pgadmin_02.PNG" /></a></div>
<br />
Esto nos despliega un cuadro de dialogo para ingresar la información de la base de datos.<br />
<br />
<div style="text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhHcCm9DFbYlFEESG7VUd50FmEGNB5JDLwS6OIewSe6pdipyeF7JV61xBec6Xo1pvOd39YVcpAwwwt0T0KXdMjI124rbWbOMd0VAkQF5p8yYT4Cd5CrqrIzuDN5ulr_Fi8i2QdY7L4ZjLbU/s1600/pgadmin_03.PNG" imageanchor="1"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhHcCm9DFbYlFEESG7VUd50FmEGNB5JDLwS6OIewSe6pdipyeF7JV61xBec6Xo1pvOd39YVcpAwwwt0T0KXdMjI124rbWbOMd0VAkQF5p8yYT4Cd5CrqrIzuDN5ulr_Fi8i2QdY7L4ZjLbU/s1600/pgadmin_03.PNG" /></a></div>
<br />
Le damos el nombre de <b><u>base </u></b>a la base de datos que usaremos en nuestro proyecto y le damos click al botón <b>OK</b>.<br />
<br />
Una vez creada la base de datos, debe lucir así:<br />
<br />
<div style="text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjapHuWZzGWSLqHiac_gnnXYXqOJ7fduxDpi_PjvX5IMpG-TnfS_5USmBls0NByBodW4h28kwhCVCAW5Vrj7r9-o-tle8QM5sgximmS_dFPXWMfvE-AzD81P-y0v_1LWkzG1zr_lrMjk22H/s1600/pgadmin_04.PNG" imageanchor="1"><img border="0" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjapHuWZzGWSLqHiac_gnnXYXqOJ7fduxDpi_PjvX5IMpG-TnfS_5USmBls0NByBodW4h28kwhCVCAW5Vrj7r9-o-tle8QM5sgximmS_dFPXWMfvE-AzD81P-y0v_1LWkzG1zr_lrMjk22H/s640/pgadmin_04.PNG" width="550" /></a></div>
<br />
<br />
<h3>
Paso 5. Probar la configuración</h3>
Ya casi terminamos esta parte, ahora solo debemos probar que toda la configuración quedo bien y para ello debemos ir a la carpeta donde quedó instalado Wildfly, entrar a la carpeta <b>bin</b> y darle doble click al archivo <b>standalone.bat</b>.<br />
<br />
<div style="text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg81YNSLx3_fD987bvykzMb8dHLXWCqEy6VoaMecPjZ1g49nHNAJX7Qqo_dvmaeTc3VpS5MStEGce0PWTKfaqgVct5htke9MBRoe7RXZ7hGLUrU-u3VYbZh3l5UhyphenhyphenKAyh6tJeFWSFhbhqe6/s1600/wildfly_01.PNG" imageanchor="1"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg81YNSLx3_fD987bvykzMb8dHLXWCqEy6VoaMecPjZ1g49nHNAJX7Qqo_dvmaeTc3VpS5MStEGce0PWTKfaqgVct5htke9MBRoe7RXZ7hGLUrU-u3VYbZh3l5UhyphenhyphenKAyh6tJeFWSFhbhqe6/s1600/wildfly_01.PNG" /></a></div>
<br />
Al darle doble click se ejecuta el servidor de aplicaciones y buscamos la configuración y no debería haber ningún error.<br />
<br />
<div style="text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhpe2ixDXK7mY00WhvNB7LT1bawAKt7V3u7-QcfyhEw568NOQYLXEkq2f3p7mJT-Katjc29IOuXnpLXYLgXb_XPJwbvaYILotZKd6wMMzUPl66flHySsXYccx5j1ufl9Asm6xSRcnm65Wjh/s1600/wildfly_run_02.PNG" imageanchor="1"><img border="0" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhpe2ixDXK7mY00WhvNB7LT1bawAKt7V3u7-QcfyhEw568NOQYLXEkq2f3p7mJT-Katjc29IOuXnpLXYLgXb_XPJwbvaYILotZKd6wMMzUPl66flHySsXYccx5j1ufl9Asm6xSRcnm65Wjh/s640/wildfly_run_02.PNG" width="550" /></a></div>
<br /></div>
</div>
</div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
</div>
<div style="orphans: 2; text-align: start; text-indent: 0px; widows: 2;">
<div style="text-indent: 0px;">
<div style="orphans: 2; text-align: start; text-indent: 0px; widows: 2;">
Si les fue de utilidad no olviden compartir en sus redes sociales.<br />
<br />
Hasta el siguiente artículo.....<br />
<div>
<br /></div>
<div>
</div>
</div>
</div>
</div>
Willian Diazhttp://www.blogger.com/profile/12030062158428083614noreply@blogger.com3tag:blogger.com,1999:blog-3279603830404251843.post-25556839541247324622016-08-28T15:48:00.000-05:002016-08-28T15:48:08.622-05:00Instalar PostgreSQL en Windows 10<h2 style="text-align: justify;">
0. Indice de contenidos</h2>
<div style="text-align: justify;">
</div>
<ol>
<li>Introducción</li>
<li>Entorno</li>
<li>Instalación</li>
</ol>
<h2 style="text-align: justify;">
1. Introducción</h2>
<div style="text-align: justify;">
Vamos a realizar la instalación de PostgreSQL sobre Windows 10.</div>
<div style="text-align: justify;">
<br /></div>
<h2 style="text-align: justify;">
2. Entorno</h2>
<div style="text-align: justify;">
El proceso lo realizamos en el siguiente entorno:</div>
<div style="text-align: justify;">
</div>
<ul>
<li>Hardware: Portátil lenovo Z480 (2.50 GHz Core i5, 12GB Ram) 64 Bits</li>
<li>Sistema Operativo: Windows 10</li>
</ul>
<div>
<br />
La versión que vamos a instalar es:</div>
<div>
<ul>
<li>PostgreSQL 9.5.3.</li>
</ul>
</div>
<h2 style="text-align: justify;">
3. Instalación</h2>
<div>
<div style="text-align: justify;">
Ahora se debe instalar el motor de base de datos que usaremos para nuestra estructura, y ese motor es PostgreSQL.<br />
<br />
La instalación es muy sencilla, pero de todas formas les dejo un vídeo que encontré en Internet.<br />
<div>
<br /></div>
</div>
<div style="text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen="" class="YOUTUBE-iframe-video" data-thumbnail-src="https://i.ytimg.com/vi/CAGxSaO7Mb0/0.jpg" frameborder="0" height="350" src="https://www.youtube.com/embed/CAGxSaO7Mb0?feature=player_embedded" width="550"></iframe></div>
</div>
<div style="orphans: 2; text-align: start; text-indent: 0px; widows: 2;">
<div style="text-indent: 0px;">
<div class="separator" style="clear: both; font-family: "times new roman"; text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; font-family: "times new roman"; text-align: justify;">
<br /></div>
<br />
<div style="orphans: 2; text-align: start; text-indent: 0px; widows: 2;">
Si les fue de utilidad no olviden compartir en sus redes sociales.<br />
<br />
Hasta el siguiente artículo.....<br />
<div>
<br /></div>
</div>
<div>
</div>
</div>
</div>
Willian Diazhttp://www.blogger.com/profile/12030062158428083614noreply@blogger.com2tag:blogger.com,1999:blog-3279603830404251843.post-39026573764450077502016-08-28T15:27:00.002-05:002016-08-28T15:44:10.375-05:00Instalar JBoss Tools en Eclipse Neon<h2 style="text-align: justify;">
0. Indice de contenidos</h2>
<div style="text-align: justify;">
</div>
<ol>
<li>Introducción</li>
<li>Entorno</li>
<li>Instalación</li>
</ol>
<h2 style="text-align: justify;">
1. Introducción</h2>
<div style="text-align: justify;">
Vamos a realizar la instalación del plugin JBoss Tools para Eclipse Neon.</div>
<div style="text-align: justify;">
<br /></div>
<h2 style="text-align: justify;">
2. Entorno</h2>
<div style="text-align: justify;">
El proceso lo realizamos en el siguiente entorno:</div>
<div style="text-align: justify;">
</div>
<ul>
<li>Hardware: Portátil lenovo Z480 (2.50 GHz Core i5, 12GB Ram) 64 Bits</li>
<li>Sistema Operativo: Windows 10</li>
</ul>
<div>
<br />
La versión que vamos a instalar es:</div>
<div>
<ul>
<li>Eclipse Neon Release (4.6.0).</li>
<li>JBoss Tools 4.4.0.Final.</li>
</ul>
</div>
<h2 style="text-align: justify;">
3. Instalación</h2>
<div>
<div style="text-align: justify;">
Una vez instalado eclipse lo iniciamos y desde el Market de eclipse buscamos JBoss Tools y lo instalamos.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Les dejo un vídeo creado por mí, y les pido disculpas si la calidad no es la mejor.</div>
<div style="text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div style="text-align: center;">
<iframe allowfullscreen="" class="YOUTUBE-iframe-video" data-thumbnail-src="https://i.ytimg.com/vi/7NRQylxJzzg/0.jpg" frameborder="0" height="300" src="https://www.youtube.com/embed/7NRQylxJzzg?feature=player_embedded" width="550"></iframe></div>
</div>
<div style="orphans: 2; text-align: start; text-indent: 0px; widows: 2;">
<div style="text-indent: 0px;">
<div class="separator" style="clear: both; font-family: "times new roman"; text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; font-family: "times new roman"; text-align: justify;">
<br /></div>
<br />
<div style="orphans: 2; text-align: start; text-indent: 0px; widows: 2;">
Si les fue de utilidad no olviden compartir en sus redes sociales.<br />
<br />
Hasta el siguiente artículo.....</div>
<div>
<span style="font-family: "times new roman";"><br />
</span></div>
<div style="font-family: "times new roman"; margin: 0px;">
<div style="margin: 0px;">
</div>
</div>
</div>
</div>
Willian Diazhttp://www.blogger.com/profile/12030062158428083614noreply@blogger.com0tag:blogger.com,1999:blog-3279603830404251843.post-15667987467891809742016-08-28T15:19:00.004-05:002016-08-28T15:44:25.876-05:00Instalar Eclipse en Windows 10<h2 style="text-align: justify;">
0. Indice de contenidos</h2>
<div style="text-align: justify;">
</div>
<ol>
<li>Introducción</li>
<li>Entorno</li>
<li>Instalación</li>
</ol>
<h2 style="text-align: justify;">
1. Introducción</h2>
<div style="text-align: justify;">
Vamos a realizar la instalación de Eclipse sobre el sistema operativo Windows 10</div>
<div style="text-align: justify;">
<br /></div>
<h2 style="text-align: justify;">
2. Entorno</h2>
<div style="text-align: justify;">
El proceso lo realizamos en el siguiente entorno:</div>
<div style="text-align: justify;">
</div>
<ul>
<li>Hardware: Portátil lenovo Z480 (2.50 GHz Core i5, 12GB Ram) 64 Bits</li>
<li>Sistema Operativo: Windows 10</li>
</ul>
<div>
<br />
La versión que vamos a instalar es:</div>
<div>
<ul>
<li>Eclipse Neon Release (4.6.0).</li>
</ul>
</div>
<br />
<h2 style="text-align: justify;">
3. Instalación</h2>
<div style="text-align: justify;">
Vamos a realizar la instalación de Eclipse, para ello vamos a descargar eclipse de su <a href="https://www.eclipse.org/downloads/download.php?file=/oomph/epp/neon/R/eclipse-inst-win64.exe" target="_blank">pagina oficial </a>e instalarlo en su computador.<br />
<br />
El siguiente vídeo esta en ingles y muestra como instalar eclipse junto con la instalación de java, espero les sirva de guía.</div>
<br />
<div style="orphans: 2; text-align: start; text-indent: 0px; widows: 2;">
<div style="text-indent: 0px;">
<div class="separator" style="-webkit-text-stroke-width: 0px; clear: both; color: black; font-family: "times new roman"; font-size: medium; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: normal; letter-spacing: normal; line-height: normal; margin: 0px; text-align: center; text-transform: none; white-space: normal; word-spacing: 0px;">
<br /></div>
<div style="text-align: center;">
<iframe allowfullscreen="" class="YOUTUBE-iframe-video" data-thumbnail-src="https://i.ytimg.com/vi/NZ38tlhtQgw/0.jpg" frameborder="0" height="350" src="https://www.youtube.com/embed/NZ38tlhtQgw?feature=player_embedded" width="550"></iframe></div>
<div class="separator" style="-webkit-text-stroke-width: 0px; clear: both; color: black; font-family: "times new roman"; font-size: medium; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: normal; letter-spacing: normal; line-height: normal; margin: 0px; text-align: center; text-transform: none; white-space: normal; word-spacing: 0px;">
<br /></div>
<div class="separator" style="clear: both; color: black; font-family: "times new roman"; font-size: medium; font-style: normal; font-weight: normal; letter-spacing: normal; line-height: normal; margin: 0px; text-align: justify; text-transform: none; white-space: normal; word-spacing: 0px;">
<br /></div>
<div class="separator" style="clear: both; color: black; font-family: "times new roman"; font-size: medium; font-style: normal; font-weight: normal; letter-spacing: normal; line-height: normal; margin: 0px; text-align: justify; text-transform: none; white-space: normal; word-spacing: 0px;">
<br /></div>
<br />
<div style="orphans: 2; text-align: start; text-indent: 0px; widows: 2;">
Si les fue de utilidad no olviden compartir en sus redes sociales.<br />
<br />
Hasta el siguiente artículo.....</div>
<div style="-webkit-text-stroke-width: 0px; color: black; font-family: "times new roman"; font-size: medium; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: normal; letter-spacing: normal; line-height: normal; margin: 0px; text-transform: none; white-space: normal; word-spacing: 0px;">
<div style="margin: 0px;">
<br /></div>
</div>
</div>
</div>
Willian Diazhttp://www.blogger.com/profile/12030062158428083614noreply@blogger.com0tag:blogger.com,1999:blog-3279603830404251843.post-6338087803167237842016-08-28T14:56:00.001-05:002016-08-28T15:15:29.454-05:00Instalar Java 8 en Windows 10<h2 style="text-align: justify;">
0. Indice de contenidos</h2>
<div style="text-align: justify;">
</div>
<ol>
<li>Introducción</li>
<li>Entorno</li>
<li>Instalaciones</li>
</ol>
<h2 style="text-align: justify;">
1. Introducción</h2>
<div style="text-align: justify;">
Vamos a realizar la instalación de Java 8 sobre el sistema operativo Windows 10</div>
<div style="text-align: justify;">
<br /></div>
<h2 style="text-align: justify;">
2. Entorno</h2>
<div style="text-align: justify;">
El proceso lo realizamos en el siguiente entorno:</div>
<div style="text-align: justify;">
</div>
<ul>
<li>Hardware: Portátil lenovo Z480 (2.50 GHz Core i5, 12GB Ram) 64 Bits</li>
<li>Sistema Operativo: Windows 10</li>
</ul>
<div>
<br />
El java que vamos a instalar es:</div>
<div>
<ul>
<li>Java 1.8.0_101.</li>
</ul>
</div>
<h2 style="text-align: justify;">
3. Instalar Java</h2>
<div>
Lo primero es descargar e instalar el java en su computador, les dejo un vídeo que encontré en Internet.</div>
<div>
<br /></div>
<div class="separator" style="clear: both; font-size: medium; text-align: center;">
<br /></div>
<div style="text-align: center;">
<iframe allowfullscreen="" class="YOUTUBE-iframe-video" data-thumbnail-src="https://i.ytimg.com/vi/siV--lcYFR0/0.jpg" frameborder="0" height="350" src="https://www.youtube.com/embed/siV--lcYFR0?feature=player_embedded" width="550"></iframe></div>
<div>
<div style="text-align: center;">
<br /></div>
</div>
<br />
<div>
</div>
<br />
<div style="orphans: 2; text-align: start; text-indent: 0px; widows: 2;">
Si les fue de utilidad no olviden compartir en sus redes sociales.<br />
<br />
Hasta el siguiente artículo.....</div>
Willian Diazhttp://www.blogger.com/profile/12030062158428083614noreply@blogger.com0tag:blogger.com,1999:blog-3279603830404251843.post-36062684581359260802016-08-28T14:53:00.002-05:002016-08-28T14:57:29.356-05:00Instalar Java 7 en Linux<h2 style="text-align: justify;">
0. Indice</h2>
<div style="text-align: justify;">
<ol>
<li>Introducción</li>
<li>Entorno</li>
<li>Instalación de Java</li>
</ol>
</div>
<br />
<h2 style="text-align: justify;">
1. Introducción</h2>
<div style="text-align: justify;">
Vamos a mostrar lo sencillo que es la instalación de Java 7 en Linux</div>
<br />
<h2 style="text-align: justify;">
2. Entorno</h2>
<div style="text-align: justify;">
Para la creación de este tutorial use lo siguiente:<br />
<br />
<ul>
<li>Hardware: PC Dell Inspiron 530S (Pentium Dual Core, 4 GB Ram, 150 GB Disco Duro)</li>
<li>Sistema Operativo: Linux Kubuntu 11.10</li>
</ul>
<br />
Las herramientas y tecnologías usadas son:<br />
<br />
<ul>
<li>Java 1.7.0_03</li>
</ul>
</div>
<br />
<h2 style="text-align: justify;">
3. Instalación de Java</h2>
<div style="text-align: justify;">
Desde la pagina de <a href="http://www.oracle.com/technetwork/java/javase/downloads/jdk-7u3-download-1501626.html" target="_blank">java</a> se descarga la última versión, que para este tutorial es la versión 1.7.0_03.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh1j6J-p2GMrzqEGkLTnPbOxLgISfCAazrm6l4nkLOA_QKNNo4KQPFO2JK1d1HnUh3jQjBJlnP07Q9-5IJ1leJg1HWr8yY_REcOCa1HeK3MryAAT8noRGbFl7OUpMKsNK10G3z9K3Y_Qp0A/s1600/install_java.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="242" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh1j6J-p2GMrzqEGkLTnPbOxLgISfCAazrm6l4nkLOA_QKNNo4KQPFO2JK1d1HnUh3jQjBJlnP07Q9-5IJ1leJg1HWr8yY_REcOCa1HeK3MryAAT8noRGbFl7OUpMKsNK10G3z9K3Y_Qp0A/s320/install_java.jpg" width="320" /></a></div>
<br />
<div style="text-align: justify;">
Para verificar que quedo bien instalado el java en el sistema, se abre una consola y se ejecuta el siguiente comando.</div>
<br />
<i><span style="font-family: "georgia" , "times new roman" , serif;"><b>java -version</b></span></i><br />
<br />
Le debe arrojar la siguiente salida.<br />
<br />
<i><b><span style="font-family: "georgia" , "times new roman" , serif;">java version "1.7.0_03"</span></b></i><br />
<i><b><span style="font-family: "georgia" , "times new roman" , serif;">Java(TM) SE Runtime Environment (build 1.7.0_03-b05)</span></b></i><br />
<i><b><span style="font-family: "georgia" , "times new roman" , serif;">Java HotSpot(TM) Client VM (build 22.1-b02, mixed mode, sharing)</span></b></i><br />
<br />
<br />
<div style="text-align: justify;">
Si sale lo indicado arriba, todo esta perfecto, de lo contrario hay que verificar la variable de ambiente <b>JAVA_HOME</b> que este configurada.<br />
En el caso de linux la versión es descomprimida y esta variable se debe configurar manualmente si se desea.<br />
En mi caso la ubicación de java es: <i><b><span style="font-family: "georgia" , "times new roman" , serif;">/home/william/Aplicaciones/java/jdk1.7.0_03/</span></b></i><br />
<div>
<i><b><span style="font-family: "georgia" , "times new roman" , serif;"><br />
</span></b></i></div>
</div>
</div>
<br />
<br />
Si les fue de utilidad no olviden compartir en sus redes sociales.<br />
<br />
Hasta el siguiente artículo.....<br />
<br />
<br />Willian Diazhttp://www.blogger.com/profile/12030062158428083614noreply@blogger.com0tag:blogger.com,1999:blog-3279603830404251843.post-67223959536748928602016-08-24T19:21:00.001-05:002016-08-24T19:21:04.241-05:00Tutorial de Git<div style="text-align: justify;">
En el mundo del software es importante mantener respaldado el código fuente de nuestras aplicaciones y para ello existen los sistemas de control de versiones, como todo en el mundo del software, hay diferentes soluciones y la que se encuentra entre las más usadas es <b>Git</b>.</div>
<div style="text-align: justify;">
<br /></div>
<b>Pero, ¿Que es Git?</b><br />
<div style="text-align: justify;">
Git (pronunciado "guit"2 ) es un software de control de versiones diseñado por Linus Torvalds, pensando en la eficiencia y la confiabilidad del mantenimiento de versiones de aplicaciones cuando éstas tienen un gran número de archivos de código fuente. Al principio, Git se pensó como un motor de bajo nivel sobre el cual otros pudieran escribir la interfaz de usuario o front end como Cogito o StGIT. 3 Sin embargo, Git se ha convertido desde entonces en un sistema de control de versiones con funcionalidad plena. 4 Hay algunos proyectos de mucha relevancia que ya usan Git, en particular, el grupo de programación del núcleo Linux.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Buscando en Internet encontré un tutorial sobre Git en youtube, en el canal de <a href="https://www.youtube.com/user/MakiGAS93" target="_blank">makigas</a>, que les comparto acá, espero les sea de utilidad.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
No olviden compartir el articulo en sus redes sociales si les fue útil.</div>
<div style="text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen="" class="YOUTUBE-iframe-video" data-thumbnail-src="https://i.ytimg.com/vi/jSJ8xhKtfP4/0.jpg" frameborder="0" height="300" src="https://www.youtube.com/embed/jSJ8xhKtfP4?feature=player_embedded" width="550"></iframe></div>
<div style="text-align: justify;">
<br /></div>
Willian Diazhttp://www.blogger.com/profile/12030062158428083614noreply@blogger.com0tag:blogger.com,1999:blog-3279603830404251843.post-48146474831149991582016-04-05T00:39:00.001-05:002016-04-05T00:39:40.432-05:00Crear un módulo para Drupal 8Actualmente estoy interesado en aprender sobre los diferentes CMS existente y para aquellos que nos gusta el desarrollo web, creo que Drupal es una muy buena opción, para la creación de sitios web con un grado considerable de complejidad.<br />
<br />
<div style="text-align: justify;">
Actualmente se encuentra la versión 8, la cual es diferente con respecto a las versiones anteriores. Se han adoptado conceptos y estándares modernos, la programación es ahora mayoritariamente orientada a objetos y se usan componentes de Symfony.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Buscando en Internet encontré en youtube un mini curso muy básico sobre Drupal 8.</div>
<div style="text-align: justify;">
<br />
<div style="text-align: center;">
<iframe allowfullscreen="" frameborder="0" height="315" src="https://www.youtube.com/embed/spaEN2OH9E0?list=PLY3lWsAagE8N7ubeqj6LY5r-ak7_BbQ0A" width="560"></iframe><br /></div>
<br /></div>
<div style="text-align: justify;">
<div style="text-align: center;">
<br /></div>
</div>
<div style="text-align: justify;">
Y para aprender a crear un módulo en Drupal 8 encontré el siguiente vídeo.<br />
<br />
<br /></div>
<div style="text-align: center;">
<iframe allowfullscreen="" frameborder="0" height="315" src="https://www.youtube.com/embed/CEIUbFoAg0I" width="560"></iframe><br /></div>
<div style="text-align: center;">
<br /></div>
<div style="text-align: justify;">
<br /></div>
Y adicionalmente encontré la siguiente página donde se explica con más detalle como crear un módulo en Drupal 8 en el artículo <b><a href="http://ateneatech.com/blog/crear-un-modulo-para-drupal-8" target="_blank">"Crear un módulo para Drupal 8"</a>.</b><br />
<b><br /></b>
Espero que les sea de utilidad esta información. No olvide dejar sus comentarios y compartir en las redes sociales este artículo.<br />
<br />
Nos vemos en el próximo artículo.<br />
<br />Willian Diazhttp://www.blogger.com/profile/12030062158428083614noreply@blogger.com0tag:blogger.com,1999:blog-3279603830404251843.post-22747391970214531852015-10-27T06:21:00.001-05:002015-10-27T06:22:04.105-05:00duplicate is specified in components.xml<br />
A continuación un error que se presenta al momento de desplegar una aplicación java:<br />
<br />
java.lang.IllegalStateException: duplicate factory for APLICACION: org.jboss.seam.web.webSession (duplicate is specified in components.xml)<br />
<br />
<b>Entorno: </b><br />
<br />
weblogic, eclipse.<br />
<br />
<b>Conclusiones:</b><br />
<br />
La manera de solucionarlo, es verificar que no existan espacios en blanco en la ruta física en la que se ubica la aplicación.Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-3279603830404251843.post-52339346414202852802014-06-07T13:12:00.000-05:002014-06-07T13:13:16.685-05:00Tutorial de SLF4j desde ceroPara los amantes del desarrollo en java, aquí les dejo un vídeo tutorial que encontré en youtube.<br />
<br />
Espero les sea de utilidad y no olviden dejar sus comentarios.<br />
<br />
<iframe allowfullscreen="" frameborder="0" height="560" src="//www.youtube.com/embed/tMLEbGJ2z7I" width="560"></iframe><br />
<br />
<br />
<br />
<br />Willian Diazhttp://www.blogger.com/profile/12030062158428083614noreply@blogger.com0tag:blogger.com,1999:blog-3279603830404251843.post-15357040659377691562014-03-27T17:58:00.002-05:002014-03-28T18:19:38.729-05:00Obtener Usuario Autenticado por medio de JAAS en un WebService EJB 3.0<h3>
Introducción:</h3>
<h3>
</h3>
<div style="text-align: justify;">
Cuando se consume un cliente de un WebService, lo primero que se debe hacer de parte del cliente es pasar por una etapa de autenticación y autorización; el usuario ingresado es verificado según las políticas de seguridad establecidas por medio de <a href="http://es.wikipedia.org/wiki/JAAS" target="_blank">JAAS</a> (Java Authentication and Authorization Service), las cuales en el caso de utilizar un servidor Jboss se encuentran definidas en el archivo JBOSS_HOME\server\default\conf\login-config.xml. </div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
A continuación podemos ver un ejemplo de la definición de una política de seguridad declarada en dicho archivo:</div>
<br />
<application-policy name="ExamplePolicy"><br />
<authentication><br />
<login-module code="org.jboss.security.ClientLoginModule" flag="required"><br />
</login-module><br />
<login-module code="org.jboss.security.auth.spi.DatabaseServerLoginModule" flag="required"><br />
<module-option name="dsJndiName">java:/exampleDS</module-option><br />
<module-option name="principalsQuery"><br />
SELECT contrasena<br />
FROM usuario <br />
WHERE usuario = ?<br />
</module-option><br />
<module-option name="rolesQuery"><br />
SELECT usuario, 'Roles'<br />
FROM usuario<br />
WHERE usuario = ?<br />
</module-option><br />
<module-option name="hashAlgorithm">MD5</module-option><br />
<module-option name="hashEncoding">hex</module-option> <br />
<module-option name="hashCharset">UTF-8</module-option><br />
</login-module><br />
</authentication><br />
</application-policy><br />
<br />
<a name='more'></a><br />
<br />
<br />
<div style="text-align: justify;">
Gracias a estas políticas de seguridad el usuario que va a consumir el WebService implementado, será buscado en la base de datos del sistema por medio de las consultas escritas en el archivo XML; si dicha consulta genera resultados entonces se dará como autenticado al usuario, de lo contrario no.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Ahora bien, si necesitaramos luego de pasar por este proceso de autenticación y autorización obtener el registro del usuario que está consumiendo el servicio web, es decir que dentro de la lógica del WebService quisieramos saber qué usuario ha sido autenticado, se puede hacer gracias a la anotación @Resource, siguiendo los siguientes pasos:</div>
<br />
<b>Paso 1:</b><br />
<br />
<div style="text-align: justify;">
Lo primero que se debe hacer es declarar un objeto de tipo SessionContext con la anotación @Resource en la clase principal del WebService a consumir, de la siguiente manera:</div>
<div style="text-align: justify;">
<br /></div>
<span style="font-family: "Courier New",Courier,monospace;">@Resource</span><br />
<span style="font-family: "Courier New",Courier,monospace;">private SessionContext sessionContext;</span><br />
<br />
<b>Paso 2:</b><br />
<br />
<div style="text-align: justify;">
Una vez declarado el objeto con esta anotación podemos obtener el usuario que está consumiendo ese WebService por medio del método getCallerPrincipal() de SessionContext. Por ejemplo podemos mandar a imprimir en pantalla el valor del usuario autenticado de la siguente manera:</div>
<br />
<span style="font-family: "Courier New",Courier,monospace;">System.out.println(sessionContext.getCallerPrincipal());</span><br />
<br />
<b>Resultado:</b><br />
<br />
<div style="text-align: justify;">
Como resultado obtenemos el usuario que en un momento determinado se encuentra consumiendo el WebService implementado.</div>
<div style="text-align: justify;">
<br />
Espero que este breve tutorial les sea de utilidad.</div>
<br />Unknownnoreply@blogger.com0