tag:blogger.com,1999:blog-2182645122620975772024-03-11T00:20:12.742-03:00Programa con GoogleEl blog oficial de Google para desarrolladores en españolUnknownnoreply@blogger.comBlogger966125tag:blogger.com,1999:blog-218264512262097577.post-10785090619232549882023-11-22T20:03:00.003-03:002023-11-22T20:06:29.958-03:00Cómo los programas de aceleración de Google ayudan a las startups y desarrolladores a crecer<div style="text-align: justify;"><b>Por Kevin O’Toole,</b></div><div style="text-align: justify;"><b>Global Head of Accelerator Operations.</b></div><div style="text-align: justify;"><br /></div><div style="text-align: center;"><img height="427" src="https://lh7-us.googleusercontent.com/fLaTS7CM-uW__vh5tjgY_VS1fhefob5INCMKhb_sZVEGSiJqjbi5Yh-uyrgRmGJdHNiuSd1DRZ3aQyX8-BWWI7Gp-rw1pl35z_kZOUrSqd0JA6Hy4OzAi6S6dno7IDSWydhV3WcBmmX3B6ubWx_17oM=w640-h427" width="640" /></div><div style="text-align: justify;"><br /></div><div style="text-align: justify;">En los últimos siete años, <a href="https://blog.google/outreach-initiatives/entrepreneurs/accelerator-impact-report/#:~:text=last%20seven%20years%2C-,Google%27s%20accelerator%20programs,-%E2%80%94%20including%20Google%20for">los programas de aceleración de Google</a> —incluyendo los programas de aceleración de Google for Startups y Google Play— han ayudado a más de 1,100 startups y desarrolladores a abordar desafíos globales como el cambio climático, la inclusión financiera, el desarrollo económico, la atención médica equitativa y más. Hoy anunciamos nuestro primer<a href="https://blog.google/outreach-initiatives/entrepreneurs/accelerator-impact-report/#:~:text=announcing%20our%20first-,Accelerator%20Impact%20Report,-%2C%20which%20highlights%20the"> Accelerator Impact Report</a>; que destaca el crecimiento que han experimentado estos emprendedores.</div><div style="text-align: justify;"><br /></div><div style="text-align: justify;">En nuestros programas de aceleración, las startups y desarrolladores participantes reciben capacitación y mentoría práctica de líderes de la industria y expertos de Google, y obtienen acceso a los productos y tecnologías más recientes. Por ejemplo, después de participar en programas regionales, <a href="https://brownliving.in/">Brown Living</a>, el primer mercado libre de plásticos de la India, aplicó automatizaciones a través de <a href="https://lookerstudio.google.com/">Looker Studio</a> y <a href="https://www.google.com/script/start/">Apps Script</a> con el apoyo de mentores de Google. La startup brasileña <a href="https://www.carbonext.com.br/">Carbonext</a> utilizó aprendizaje automático para monitorear la deforestación en Brasil un 80% más rápido – y a un 70% del costo — después de participar en un programa de Google for Startups. Y <a href="https://gambirstudio.com/">Gambir Studio</a>, con sede en Indonesia, aumentó sus ingresos en un 20% con mentorías de expertos de Google en un Indie Games Accelerator.</div><div style="text-align: justify;"><br /></div><div style="text-align: justify;"><br /></div><div style="text-align: center;"><img height="427" src="https://lh7-us.googleusercontent.com/RKvgIRhafXmhxkEemUAxsTgjnNJ0wXZrt7N330Er620kl_H8MKyGqMKyH4HrlrZ0B3OkQ1mieMCkaLf-aqmeQm7sDmslA_9mTR4XUzyHUe69uCmjCXCmT9kb8UAASRLo6P-rmKkjIcYa80YlSYdJ8z8=w640-h427" width="640" /></div><div style="text-align: center;"><br /></div><div style="text-align: center;"><span style="font-size: x-small;">Chaitsi Ahuja, fundadora y CEO de Brown Living, en una sesión de trabajo durante el Acelerador de Google para Startups: India.</span></div><div style="text-align: justify;"><br /></div><div style="text-align: justify;">Desde que se graduaron de los programas de aceleración de Google, 20 startups alumni se han convertido en “Unicornios” (startups de propiedad privada con una valoración de más de 1.000 millones de dólares) — y uno es incluso un “Decacornio” (empresa privada que supera la valoración de 10.000 millones de dólares). Estas startups ahora emplean a casi 120,000 personas en todo el mundo y han recaudado $30.7 mil millones en financiamiento de capital de riesgo. Los alumni del accelerator también tienen una tasa de supervivencia del 96% (lo que significa que sus compañías siguen abiertas), en un entorno donde más del <a href="https://blog.google/outreach-initiatives/entrepreneurs/accelerator-impact-report/#:~:text=80%25%20of%20startups%20fail">80% de las startups fracasan</a>.</div><div style="text-align: justify;"><br /></div><div style="text-align: center;"><img src="https://lh7-us.googleusercontent.com/y3Hn5sYHBRxJzM4lcEPlnzak1FaeffyqjhqGPQu0H-kw6TH671GkJYtxS-mxvP9QhW0L67X3Su18uwzxN3NGFKUdlXR1O9L7ADTgbugtSxcgg-cvYzXdTSuyH0V6hmBDa0GOB4rL-0DGUFQGrW5_W0Y" /></div><div style="text-align: justify;"><br /></div><div style="text-align: center;"><span style="font-size: x-small;">Janaína Dallan, Fundadora de Carbonext en un proyecto REDD+ en Acre, Brasil.</span></div><div style="text-align: justify;"><br /></div><div style="text-align: justify;">El primer Accelerator Impact Report cubre datos desde 2016 hasta julio de 2023 y profundiza en el alcance y la composición de 24 programas de aceleración de Google en seis continentes y 87 países. <a href="https://blog.google/outreach-initiatives/entrepreneurs/accelerator-impact-report/#:~:text=and%2087%20countries.-,Read%20the%20report,-to%20learn%20more">Lee el informe</a> para obtener más información sobre los programas de aceleración de Google, sus alumni y cómo las</div>Google Developers LATAMhttp://www.blogger.com/profile/05105089662475084319noreply@blogger.com0tag:blogger.com,1999:blog-218264512262097577.post-36009932544366320352023-11-21T11:56:00.000-03:002023-11-27T11:56:19.540-03:00Participa en el Demo Day y descubre las novedades y lo que puedes hacer con Firebase<div style="text-align: justify;"><br /></div><div style="text-align: justify;"><i>Annum Munir - Gerente de Marketing de productos</i></div><div style="text-align: justify;"><br /></div><div style="text-align: justify;"><img height="190" src="https://lh7-us.googleusercontent.com/DJvJtm2XAV7CsBB9boXwpcLF50KkziXmzytiKJ6EyZ8Z7diG0OgIyoFz-wpfSXpoQHrIUEFqhCk7wMUXk1IchTihBOqSM95TZhti7Pf6PCYoQJ1IaMZXT-v7blvD5x8SF1GSMVaBINwo3e2AjPHXnI8=w640-h190" width="640" /></div><div style="text-align: justify;"><br /></div><div style="text-align: justify;"><br /></div><div style="text-align: justify;"><b>Sparky y un desarrollador te dan la bienvenida al Demo Day</b></div><div style="text-align: justify;"><br /></div><div style="text-align: justify;">Después de compartir toneladas de <a href="https://twitter.com/Firebase/status/1719761404499030089">avances</a> e <a href="https://twitter.com/Firebase/status/1721633555120275837">imágenes detrás de escena</a> en las últimas semanas, ¡nos complace anunciar que finalmente llegó nuestro primer <a href="https://firebase.google.com/demo-day/2023/">Demo Day</a>! Hoy lanzamos 10 demostraciones (es decir, videos cortos pregrabados) junto con recursos técnicos para mostrarte las novedades, lo que puedes hacer y cómo puedes afrontar los mayores desafíos de desarrollo de apps con Firebase. ¡No te pierdas este vistazo al futuro de Firebase!</div><div style="text-align: justify;"><br /></div><div style="text-align: justify;">Conéctate desde cualquier lugar y en cualquier momento para <a href="https://firebase.google.com/demo-day/2023">ver las demostraciones</a> a tu propio ritmo.</div><div style="text-align: justify;">Compila, ejecuta y haz crecer tus apps con Firebase</div><div style="text-align: justify;"><br /></div><div style="text-align: justify;">Las demostraciones se diseñaron para que puedas compilar y ejecutar apps full stack más rápido, aprovechar el poder de la IA para trabajar de manera más inteligente y crear experiencias más atractivas, y combinar la tecnología y las herramientas de Google para aumentar tu productividad.</div><div style="text-align: justify;">Demostraciones de IA</div><div style="text-align: justify;"><br /></div><div style="text-align: justify;">Todo el mundo habla de la IA, pero ¿quieres saber cómo usarla de manera práctica en tu flujo de trabajo de desarrollo de apps? No te pierdas estas demostraciones:</div><div style="text-align: justify;"><br /></div><div style="text-align: justify;"><a href="https://youtu.be/IUaUxXLACkg">How Duet AI in Firebase helps you build successful apps</a></div><div style="text-align: justify;"><br /></div><div style="text-align: justify;"><a href="https://youtu.be/a-FLP4GFXvQ">Smarter pre-release app testing: AI-powered automated testing in App Distribution</a></div><div style="text-align: justify;"><br /></div><div style="text-align: justify;"><a href="https://youtu.be/_9rCf353j3U">How to build an AI chatbot with Firebase and the PaLM API in under 10 minutes</a></div><div style="text-align: justify;"><br /></div><div style="text-align: justify;"><a href="https://youtu.be/mvEHYMsk_AE">Using AI to generate poems from pictures with Python in Firebase</a></div><div style="text-align: justify;">Demostraciones de Flutter y Project IDX</div><div style="text-align: justify;"><br /></div><div style="text-align: justify;">También colaboramos con nuestros amigos de todos los sectores de Google, incluidos <a href="https://flutter.dev/">Flutter</a> y <a href="https://idx.dev/">Project IDX</a> (por nombrar solo algunos) para realizar demostraciones de soluciones integradas de tus productos favoritos de Google, a fin de que tengas una experiencia de desarrollo fluida. Échales un vistazo:</div><div style="text-align: justify;"><br /></div><div style="text-align: justify;"><a href="https://youtu.be/oyL-V94SZiM">Build, test, and deploy your Firebase web apps faster in Project IDX</a></div><div style="text-align: justify;"><br /></div><div style="text-align: justify;"><a href="https://youtu.be/ba1IvQU1kgo">How to build smarter & ship faster with the Firebase Flutter SDK & your Windows development workflow</a></div><div style="text-align: justify;"><br /></div><div style="text-align: justify;"><b>Demostraciones de desarrollo de apps</b></div><div style="text-align: justify;"><br /></div><div style="text-align: justify;">Y, por último, aunque no menos importante, nos comprometemos a ayudarte a mejorar todas las partes del desarrollo de apps. Mira estas demostraciones sobre cómo fortalecer la seguridad de las apps, lanzarlas de forma segura y reducir los riesgos, y automatizar y ampliar tu infraestructura. Incluso agregamos nuevas funciones de calidad de vida y, como nos pidieron los usuarios, remodelamos la consola de Firebase, que ahora te llevará al lado oscuro.</div><div style="text-align: justify;"><br /></div><div style="text-align: justify;"><a href="https://youtu.be/89l3DnhqySM">How App Check helps protect your app from credential stuffing</a></div><div style="text-align: justify;"><br /></div><div style="text-align: justify;"><a href="https://youtu.be/AI4K3bomBok">https://youtu.be/AI4K3bomBok</a></div><div style="text-align: justify;"><br /></div><div style="text-align: justify;"><a href="https://youtu.be/1KFzlz4ibAA">Firebase & Terraform: The simple way to scale and automate your infrastructure</a></div><div style="text-align: justify;"><br /></div><div style="text-align: justify;"><a href="https://youtu.be/nQYA1HzBzPk">5 Firebase updates that improve your everyday development experience</a></div><div style="text-align: justify;"><b><br /></b></div><div style="text-align: justify;"><b>¡Feliz Demo Day!</b></div><div style="text-align: justify;"><br /></div><div style="text-align: justify;"><a href="https://firebase.google.com/demo-day/2023">Echa un vistazo a las demostraciones</a> y luego únete a la conversación en <a href="https://twitter.com/hashtag/FirebaseDemoDay?src=hashtag_click">X (anteriormente conocida como Twitter)</a> y <a href="https://www.linkedin.com/feed/hashtag/?keywords=firebasedemoday">LinkedIn</a> #FirebaseDemoDay para hacer preguntas, dejarnos tus comentarios y ver lo que dice el resto de la comunidad.</div><div style="text-align: justify;"><br /></div><div style="text-align: justify;"><br /></div><div style="text-align: justify;">Ver todas las demostraciones:</div><div style="text-align: justify;"><a href="https://firebase.google.com/demo-day/2023">firebase.google.com/demo-day/2023</a></div><div style="text-align: justify;"><br /></div>Google Developers LATAMhttp://www.blogger.com/profile/05105089662475084319noreply@blogger.com0tag:blogger.com,1999:blog-218264512262097577.post-38557995830668782432023-10-19T11:52:00.000-03:002023-10-19T11:52:03.802-03:00¡Prepárate para el primer Demo Day de Firebase!<div style="text-align: justify;">Por: <span id="docs-internal-guid-5aa7c9c5-7fff-08fa-9e62-e51a22212ca7"><span style="font-family: Arial, sans-serif; font-size: 10pt; font-style: italic; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;">Annum Munir</span></span></div><div style="text-align: justify;"><span><span style="font-family: Arial, sans-serif; font-size: 10pt; font-style: italic; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"><br /></span></span></div><div><span id="docs-internal-guid-0188f1d9-7fff-7ea2-38fc-b4a24bcde687"><p dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-align: justify;"></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgOptP0zVcOdv2BxfI1ROxVJc8cb0zp8X66JNMvUfAKbfXcyPcqzFpFuJmqFdAxikuL0EIQ2yl_CKV1q0LWzC1xx00-3rxjz08e7m5QbwUrAspuhUL2aGPC4YutTC-F0Ol6MIi3K3LgSaEDfrW8MK_pTlpyPFbUKDug_vxonCjSgCMNWNtVrxcCAPy7Qr-X/s960/Firebase_DemoDay_960x540Asset.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="540" data-original-width="960" height="360" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgOptP0zVcOdv2BxfI1ROxVJc8cb0zp8X66JNMvUfAKbfXcyPcqzFpFuJmqFdAxikuL0EIQ2yl_CKV1q0LWzC1xx00-3rxjz08e7m5QbwUrAspuhUL2aGPC4YutTC-F0Ol6MIi3K3LgSaEDfrW8MK_pTlpyPFbUKDug_vxonCjSgCMNWNtVrxcCAPy7Qr-X/w640-h360/Firebase_DemoDay_960x540Asset.png" width="640" /></a></div><br /><p></p><p dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-align: justify;"><span style="color: #666666; font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;">Durante los últimos seis años, compartimos las últimas y más geniales actualizaciones de Firebase, la plataforma de desarrollo de apps de Google, en nuestra </span><a href="https://firebase.google.com/summit/2022" style="text-decoration-line: none;"><span style="color: #1155cc; font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space-collapse: preserve;">Firebase Summit</span></a><span style="color: #666666; font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;">. Este año, queríamos hacer algo un poco diferente para nuestra comunidad de desarrolladores. Así que, además del</span><span style="font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"> </span><a href="https://f3.events/" style="text-decoration-line: none;"><span style="color: #1155cc; font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space-collapse: preserve;">Flutter Firebase Festival</span></a><span style="color: #666666; font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"> que acaba de concluir, y de conocer a personas de todo el mundo en </span><a href="https://developers.google.com/community/devfest" style="text-decoration-line: none;"><span style="color: #1155cc; font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space-collapse: preserve;">DevFests</span></a><span style="font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;">, </span><span style="color: #666666; font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; vertical-align: baseline; white-space-collapse: preserve;">¡nos complace anunciar nuestro primer</span><span style="font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; vertical-align: baseline; white-space-collapse: preserve;"> </span><a href="https://firebase.google.com/demo-day/2023" style="text-decoration-line: none;"><span style="color: #1155cc; font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space-collapse: preserve;">Demo Day de Firebase</span></a><span style="color: #666666; font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; vertical-align: baseline; white-space-collapse: preserve;">, que se realizará el 8 de noviembre de 2023!</span></p><div style="text-align: justify;"><br /></div><p dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-align: justify;"><span style="color: #666666; font-family: Arial, sans-serif; font-size: 15pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;">¿Qué es el Demo Day?</span></p><p dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-align: justify;"><span style="color: #666666; font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;">El Demo Day será una experiencia virtual en la que presentaremos demostraciones breves (es decir, videos pregrabados) de las novedades, posibilidades y formas en que puedes resolver los mayores desafíos de desarrollo de apps con Firebase. Nuestro equipo te contará directamente en qué ha estado trabajando, en un formato que te resultará refrescante pero también familiar.</span></p><div style="text-align: justify;"><br /></div><p dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-align: justify;"><span style="color: #666666; font-family: Arial, sans-serif; font-size: 15pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;">¿Qué aprenderás? </span></p><p dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-align: justify;"><span style="color: #666666; font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;">Aprenderás sobre cómo Firebase puede ayudarte a compilar y ejecutar apps fullstack más rápido, aprovechar la potencia de la IA para desarrollar experiencias más inteligentes y utilizar la tecnología y las herramientas de Google para lograr una mayor productividad. Estuvimos trabajando en estrecha colaboración con nuestros amigos de </span><a href="https://flutter.dev/" style="text-decoration-line: none;"><span style="color: #1155cc; font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space-collapse: preserve;">Flutter</span></a><span style="color: #666666; font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;">, </span><a href="https://cloud.google.com/" style="text-decoration-line: none;"><span style="color: #1155cc; font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space-collapse: preserve;">Google Cloud</span></a><span style="color: #666666; font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"> y </span><a href="https://idx.dev/" style="text-decoration-line: none;"><span style="color: #1155cc; font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space-collapse: preserve;">Project IDX</span></a><span style="color: #666666; font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"> para garantizar que las demostraciones incluyan una serie de temas y ofrezcan soluciones integradas de tus productos favoritos de Google.</span></p><div style="text-align: justify;"><br /></div><p dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-align: justify;"><span style="color: #666666; font-family: Arial, sans-serif; font-size: 15pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;">¿Cómo puedes participar? </span></p><p dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-align: justify;"><span style="color: #666666; font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;">Dado que el Demo Day no es un evento presencial o virtual típico, no debes preocuparte por inscribirte, comprar una entrada ni viajar. ¡Es una de las formas más fáciles de echar un vistazo al emocionante futuro de Firebase! Solo </span><a href="https://firebase.google.com/demo-day/2023" style="text-decoration-line: none;"><span style="color: #1155cc; font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;">debes agregar a favoritos el sitio web</span></a><span style="color: #666666; font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"> (y agendar el evento) y regresar el miércoles 8 de noviembre de 2023 a la 1:00 p. m. EST para ver los videos a tu propio ritmo e inspirarte para desarrollar la mejor app para tus usuarios y tu empresa. </span></p><div style="text-align: justify;"><br /></div><span style="color: #666666; font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"><div style="text-align: justify;"><span style="font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline;">Mientras tanto, nos encantaría que </span><a href="https://twitter.com/firebase" style="text-decoration-line: none;"><span style="color: #1155cc; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline;">nos sigas en X (antes conocida como Twitter)</span></a><span style="font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline;"> y en </span><a href="https://www.linkedin.com/showcase/firebase" style="text-decoration-line: none;"><span style="color: #1155cc; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline;">LinkedIn</span></a><span style="font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline;">, y que te unas a la conversación utilizando </span><a href="https://twitter.com/hashtag/FirebaseDemoDay?src=hashtag_click" style="text-decoration-line: none;"><span style="color: #1155cc; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline;">#FirebaseDemoDay</span></a><span style="font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline;">. Durante octubre, compartiremos avances e imágenes del detrás de escena, mientras esperamos la llegada del Demo Day, ¡así que mantente alerta!</span></div></span></span></div>Google Developers LATAMhttp://www.blogger.com/profile/05105089662475084319noreply@blogger.com0tag:blogger.com,1999:blog-218264512262097577.post-16166989040645089692023-09-25T17:58:00.003-03:002023-09-26T12:38:52.568-03:00 Google for Startups Accelerator Climate Change anuncia las 11 startups seleccionadas para su programa enfocado en Cambio Climático <span id="docs-internal-guid-c8192ab8-7fff-e710-8107-0fc80be09d3f"><p dir="ltr" style="line-height: 1.38; margin-bottom: 10pt; margin-top: 0pt; text-align: center;"><span face="Arial, sans-serif" style="color: #434343; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; vertical-align: baseline; white-space-collapse: preserve;"><span style="border: none; display: inline-block; height: 351px; overflow: hidden; width: 624px;"><img height="360" src="https://lh4.googleusercontent.com/r2aj_IYKkPyDMHhsfz78derdWHpr4MGwmJlD45skNTxzGd0ypP4sxvFc9EhOlt0Ps12LfqW-qy_Cjx_Jl8oGrsyRludf8dqHaoZVep8XyqnLikoQ9_tXaHTsR9GubbLs7ljUpD1yhyy-3mVXE3P52_g=w640-h360" style="margin-left: 0px; margin-top: 0px;" width="640" /></span></span></p><br /><ul style="margin-bottom: 0px; margin-top: 0px; padding-inline-start: 48px;"><li aria-level="1" dir="ltr" style="font-family: "Google Sans", sans-serif; font-size: 11pt; font-style: italic; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; list-style-type: disc; vertical-align: baseline; white-space: pre;"><p dir="ltr" role="presentation" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-align: center;"><span style="font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 400; text-wrap: wrap; vertical-align: baseline;">Google for Startups y Centraal anuncian el grupo de compañías seleccionadas en el primer programa de aceleración liderado por Google enfocado en Cambio Climático en LATAM. </span></p></li><li aria-level="1" dir="ltr" style="font-family: "Google Sans", sans-serif; font-size: 11pt; font-style: italic; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;"><p dir="ltr" role="presentation" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-align: center;"><span style="font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap: wrap; vertical-align: baseline;">11 compañías provenientes de Argentina, Chile, Colombia, México, Perú y Estados Unidos serán las primeras en participar en el programa</span></p></li></ul><br /><p dir="ltr" style="line-height: 1.38; margin-bottom: 10pt; margin-top: 0pt; text-align: justify;"><span face=""Google Sans", sans-serif" style="font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; vertical-align: baseline; white-space-collapse: preserve;">Septiembre 25, 2023.</span><span face=""Google Sans", sans-serif" style="font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"> Google for Startups se complace en anunciar las compañías seleccionadas para participar en el programa </span><a href="https://startup.google.com/accelerator/latino-founders/" style="text-decoration-line: none;"><span face=""Google Sans", sans-serif" style="color: #1155cc; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space-collapse: preserve;">Google for Startups Accelerator Climate Change</span></a><span face=""Google Sans", sans-serif" style="font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;">, el programa para fundadores latinos en América Latina y Estados Unidos liderado por Google en alianza con Centraal y, por primera vez, con foco en Cambio Climático.</span></p><p dir="ltr" style="line-height: 1.38; margin-bottom: 10pt; margin-top: 0pt; text-align: justify;"><span face=""Google Sans", sans-serif" style="font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;">Google for Startups Accelerator Latino Founders Climate Change se llevará a cabo de forma virtual y tendrá una duración de 10 semanas a partir del 26 de septiembre. El programa no tiene</span><span face=""Google Sans", sans-serif" style="background-color: white; color: #212121; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;"> costo y está dirigido a </span><span face=""Google Sans", sans-serif" style="font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;">startups de alto potencial -entre Serie Semilla y Serie A- provenientes de América Latina y de Estados Unidos, cuyo producto tecnológico trabaje en iniciativas de cambio climático. El programa, además de proveer mentoría y soporte técnico, se centrará en el diseño de productos, la adquisición de clientes y el desarrollo de liderazgo para los fundadores. </span></p><p dir="ltr" style="line-height: 1.38; margin-bottom: 10pt; margin-top: 0pt; text-align: justify;"><span face=""Google Sans", sans-serif" style="font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;">“Estamos muy felices por concretar el lanzamiento del Google for Startups Accelerator Latino Founders enfocado en cambio climático y ayudar a startups trabajando en este campo a mejorar sus productos. Además, este programa nos permitirá cumplir con dos grandes objetivos, el primero, reforzar el puente entre emprendedores Latinos en Estados Unidos y emprendedores de América Latina; y el segundo, ayudar a compañías que que estén usando la tecnología en pro de la lucha contra el cambio climático” dijo Francisco Solsona, </span><span face=""Google Sans", sans-serif" style="font-size: 11pt; font-style: italic; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;">Head of Startup Developer Ecosystem - Latinos</span><span face=""Google Sans", sans-serif" style="font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;">.</span></p><p dir="ltr" style="line-height: 1.38; margin-bottom: 10pt; margin-top: 0pt; text-align: justify;"><span face=""Google Sans", sans-serif" style="font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;">Las 11 compañías seleccionadas, trabajan en soluciones enfocadas en mitigar el impacto de múltiples industrias como Economía Circular y Reciclaje, AgTech, Climate Tech, Energía, y Manejo de desperdicios entre otros, Estas son las startups Seleccionadas: </span></p><ol style="margin-bottom: 0px; margin-top: 0px; padding-inline-start: 48px;"><li aria-level="1" dir="ltr" style="font-family: "Google Sans", sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: decimal; vertical-align: baseline; white-space: pre;"><p dir="ltr" role="presentation" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt; text-align: justify;"><a href="https://www.benchmarklabs.com" style="text-decoration-line: none;"><span style="color: #0097a7; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; text-decoration-line: underline; text-decoration-skip-ink: none; text-wrap: wrap; vertical-align: baseline;">Benchmark Labs</span></a><span style="font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap: wrap; vertical-align: baseline;"> (USA): Benchmark Labs ofrece pronósticos ambientales específicos de activos para aumentar los costos de oportunidad y los márgenes operativos, proporcionando pronósticos ambientales específicos de campo para administradores de tierras de alto valor.</span></p></li><li aria-level="1" dir="ltr" style="font-family: "Google Sans", sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: decimal; vertical-align: baseline; white-space: pre;"><p dir="ltr" role="presentation" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt; text-align: justify;"><a href="http://www.instacrops.com" style="text-decoration-line: none;"><span style="color: #0097a7; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; text-decoration-line: underline; text-decoration-skip-ink: none; text-wrap: wrap; vertical-align: baseline;">Instacrops</span></a><span style="font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap: wrap; vertical-align: baseline;"> (Chile): Instacrops es una plataforma AgTech que se especializa en el desarrollo de Hardware y Software IoT para la agricultura, integrando diferentes fuentes de datos, utilizando técnicas de IA y visión por computadora, con el objetivo de recopilar información sobre parámetros clave de los cultivos en una misma plataforma, un asesor agrícola virtual. </span></p></li><li aria-level="1" dir="ltr" style="font-family: "Google Sans", sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: decimal; vertical-align: baseline; white-space: pre;"><p dir="ltr" role="presentation" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt; text-align: justify;"><a href="https://le.mu" style="text-decoration-line: none;"><span style="color: #0097a7; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; text-decoration-line: underline; text-decoration-skip-ink: none; text-wrap: wrap; vertical-align: baseline;">Lemu</span></a><span style="font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap: wrap; vertical-align: baseline;"> (Chile): Lemu le permite conectarse con áreas protegidas en los cinco continentes y explorar proyectos integrales de conservación y restauración de ecosistemas. Cada proyecto está vinculado a un programa de conservación y cuenta con el apoyo de organizaciones o administradores sobre el terreno.</span></p></li><li aria-level="1" dir="ltr" style="font-family: "Google Sans", sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: decimal; vertical-align: baseline; white-space: pre;"><p dir="ltr" role="presentation" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt; text-align: justify;"><a href="https://www.microterra.com/" style="text-decoration-line: none;"><span style="color: #0097a7; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; text-decoration-line: underline; text-decoration-skip-ink: none; text-wrap: wrap; vertical-align: baseline;">MicroTERRA</span></a><span style="font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap: wrap; vertical-align: baseline;"> (México): Ingredientes alimentarios sostenibles a través de la Economía Circular. La producción de alimentos está matando al planeta: MicroTERRA se centra en abordar el problema urgente de la escorrentía de nutrientes causada por la producción de alimentos, en particular la importante contaminación del agua resultante de las prácticas agrícolas.</span></p></li><li aria-level="1" dir="ltr" style="font-family: "Google Sans", sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: decimal; vertical-align: baseline; white-space: pre;"><p dir="ltr" role="presentation" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt; text-align: justify;"><a href="https://mutaworld.com/" style="text-decoration-line: none;"><span style="color: #0097a7; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; text-decoration-line: underline; text-decoration-skip-ink: none; text-wrap: wrap; vertical-align: baseline;">Muta</span></a><span style="font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap: wrap; vertical-align: baseline;"> (Colombia): MUTA es una plataforma digital de extremo a extremo que vincula toda la cadena de reciclaje, desde generadores como fábricas, restaurantes, oficinas y hogares hasta los recolectores y los procesadores que utilizan las materias primas recicladas.</span></p></li><li aria-level="1" dir="ltr" style="font-family: "Google Sans", sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: decimal; vertical-align: baseline; white-space: pre;"><p dir="ltr" role="presentation" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt; text-align: justify;"><a href="http://www.recylink.com" style="text-decoration-line: none;"><span style="color: #0097a7; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; text-decoration-line: underline; text-decoration-skip-ink: none; text-wrap: wrap; vertical-align: baseline;">Recylink</span></a><span style="font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap: wrap; vertical-align: baseline;"> (Chile): Plataforma de gestión de residuos impulsada por la economía circular que conecta a las empresas para una recuperación eficiente y una eliminación responsable.</span></p></li><li aria-level="1" dir="ltr" style="font-family: "Google Sans", sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: decimal; vertical-align: baseline; white-space: pre;"><p dir="ltr" role="presentation" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt; text-align: justify;"><a href="http://www.solena.ag" style="text-decoration-line: none;"><span style="color: #0097a7; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; text-decoration-line: underline; text-decoration-skip-ink: none; text-wrap: wrap; vertical-align: baseline;">Solena AG</span></a><span style="font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap: wrap; vertical-align: baseline;"> (USA): Solena está modernizando la agricultura con la plataforma Prometheus, que utiliza inteligencia artificial para combinar el microbioma del suelo con la producción sostenible de alimentos. Recopilan información del suelo para que la industria agrícola pueda operar de una manera más efectiva.</span></p></li><li aria-level="1" dir="ltr" style="font-family: "Google Sans", sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: decimal; vertical-align: baseline; white-space: pre;"><p dir="ltr" role="presentation" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt; text-align: justify;"><a href="https://www.solfium.com/" style="text-decoration-line: none;"><span style="color: #0097a7; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; text-decoration-line: underline; text-decoration-skip-ink: none; text-wrap: wrap; vertical-align: baseline;">Solfium</span></a><span style="font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap: wrap; vertical-align: baseline;"> (México): Solfium es un mercado solar totalmente gestionado con una plataforma innovadora que facilita la descarbonización de la cadena de valor de una empresa a escala. Desarrollaron una solución “de base” para pequeños clientes comerciales y residenciales a quienes ofrecemos una aplicación móvil que simplifica el recorrido del cliente: desde la cotización hasta la obtención de financiamiento, la coordinación de las instalaciones y todo el soporte de ventas y posventa. Esto lo combinamos con instalaciones solares industriales.</span></p></li><li aria-level="1" dir="ltr" style="font-family: "Google Sans", sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: decimal; vertical-align: baseline; white-space: pre;"><p dir="ltr" role="presentation" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt; text-align: justify;"><a href="https://www.spaceag.co/" style="text-decoration-line: none;"><span style="color: #0097a7; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; text-decoration-line: underline; text-decoration-skip-ink: none; text-wrap: wrap; vertical-align: baseline;">Space AG</span></a><span style="font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap: wrap; vertical-align: baseline;"> (Perú): Space AG ofrece un software de gestión agrícola que permite a los productores de cultivos de alto valor capturar, visualizar y monitorear fácilmente todos sus datos de campo, hasta el nivel de planta, en un solo lugar. Integran drones e imágenes de satélite, estaciones meteorológicas y de riego y otras fuentes de datos en una única plataforma. Tienen informes, mapas y alertas en tiempo real que ayudan a los productores a optimizar la mano de obra crítica y las actividades agronómicas.</span></p></li><li aria-level="1" dir="ltr" style="font-family: "Google Sans", sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: decimal; vertical-align: baseline; white-space: pre;"><p dir="ltr" role="presentation" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt; text-align: justify;"><a href="http://www.terrafirmasoftware.com" style="text-decoration-line: none;"><span style="color: #0097a7; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; text-decoration-line: underline; text-decoration-skip-ink: none; text-wrap: wrap; vertical-align: baseline;">Terra Firma</span></a><span style="color: #5f6368; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap: wrap; vertical-align: baseline;"> </span><span style="font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap: wrap; vertical-align: baseline;">(Puerto Rico): Terra Firma proporciona una solución SaaS integral para que la industria de la construcción visualice los riesgos ambientales, acelere las estrategias de mitigación y aborde el creciente costo del cambio climático. El SaaS de TerraFirma combina conjuntos de datos de observación de la Tierra para el suelo y el clima con modelos patentados basados en la física para pronosticar el riesgo ambiental.</span></p></li><li aria-level="1" dir="ltr" style="font-family: "Google Sans", sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: decimal; vertical-align: baseline; white-space: pre;"><p dir="ltr" role="presentation" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt; text-align: justify;"><a href="https://ucrop.it/en/ucropit/" style="text-decoration-line: none;"><span style="color: #0097a7; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; text-decoration-line: underline; text-decoration-skip-ink: none; text-wrap: wrap; vertical-align: baseline;">Ucrop.it</span></a><span style="font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap: wrap; vertical-align: baseline;"> (Argentina): Una solución que impulsa la sostenibilidad agrícola conectando a agricultores y empresas agroalimentarias para lograr y verificar objetivos sostenibles acordados. Ucrop.it es una plataforma que facilita una conexión significativa entre agricultores y empresas agroalimentarias, fomentando esfuerzos de colaboración y un compromiso compartido con prácticas agrícolas sostenibles.</span></p></li></ol><br /><p dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-align: justify;"><span face=""Google Sans", sans-serif" style="font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;">El programa apoyará a startups con las mejores prácticas, productos y tecnologías de Google, además de su amplia red de expertos y mentores de EE.UU. y América Latina para ayudarles a construir grandes productos y ampliar su impacto en toda la región. Las compañías recibirán mentoría y apoyo de Google y expertos externos en UX (diseño y producto), ingeniería (AI/ML, Cloud, Android, Web), marketing y ventas, finanzas y liderazgo, entre otros.</span></p><br /><p dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-align: justify;"><span face=""Google Sans", sans-serif" style="font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;">Al finalizar el programa, la cohorte seleccionada formará parte del prestigioso grupo internacional de ex alumnos de Google for Startups Accelerator, uniéndose a grandes empresas latinoamericanas de escala global como: </span><a href="https://benandfrank.com/" style="text-decoration-line: none;"><span face=""Google Sans", sans-serif" style="color: #1155cc; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space-collapse: preserve;">Ben & Frank</span></a><span face=""Google Sans", sans-serif" style="font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;">, </span><a href="https://www.conekta.com/" style="text-decoration-line: none;"><span face=""Google Sans", sans-serif" style="color: #1155cc; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space-collapse: preserve;">Conekta</span></a><span face=""Google Sans", sans-serif" style="font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;">, </span><a href="https://www.uala.com.ar/" style="text-decoration-line: none;"><span face=""Google Sans", sans-serif" style="color: #1155cc; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space-collapse: preserve;">Ualá</span></a><span face=""Google Sans", sans-serif" style="font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;">, </span><a href="https://platzi.com/" style="text-decoration-line: none;"><span face=""Google Sans", sans-serif" style="color: #1155cc; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space-collapse: preserve;">Platzi</span></a><span face=""Google Sans", sans-serif" style="font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;">, </span><a href="https://konfio.mx/" style="text-decoration-line: none;"><span face=""Google Sans", sans-serif" style="color: #1155cc; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space-collapse: preserve;">Konfio</span></a><span face=""Google Sans", sans-serif" style="font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;">, </span><a href="https://www.lahaus.com/" style="text-decoration-line: none;"><span face=""Google Sans", sans-serif" style="color: #1155cc; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space-collapse: preserve;">La Haus</span></a><span face=""Google Sans", sans-serif" style="font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;">, </span><a href="https://www.tiendanube.com/" style="text-decoration-line: none;"><span face=""Google Sans", sans-serif" style="color: #1155cc; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space-collapse: preserve;">Tienda Nube</span></a><span face=""Google Sans", sans-serif" style="font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;">, </span><a href="https://miroculus.com/" style="text-decoration-line: none;"><span face=""Google Sans", sans-serif" style="color: #1155cc; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space-collapse: preserve;">Miroculus</span></a><span face="Arial, sans-serif" style="font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;">, </span><a href="https://justo.mx/welcome" style="text-decoration-line: none;"><span face=""Google Sans", sans-serif" style="color: #1155cc; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space-collapse: preserve;">Jüsto</span></a><span face=""Google Sans", sans-serif" style="font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;">, entre otras.</span></p><br /><p dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;"><span face=""Google Sans", sans-serif" style="font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;">***</span></p><p dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-align: justify;"><span face=""Google Sans", sans-serif" style="font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; vertical-align: baseline; white-space-collapse: preserve;">Acerca de Google for Startups Accelerator LATAM</span></p><p dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-align: justify;"><span face=""Google Sans", sans-serif" style="font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;">Google for Startups Accelerator es la evolución de más de seis años de experiencia del equipo de desarrolladores de Google trabajando con startups en más de 40 países a través de su programa Launchpad. Google for Startups Accelerator incluye programación de vanguardia sobre temas críticos y el apoyo de diferentes expertos y mentores de Google, y de nuestra red en la región, tales como fondos de inversión, aceleradoras y empresas.</span></p><br /><p dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-align: justify;"><span face=""Google Sans", sans-serif" style="font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;">Google for Startups Accelerator América Latina se ejecuta en colaboración con Centraal.</span></p><p dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;"><br /></p><div><br /></div></span>Google Developers LATAMhttp://www.blogger.com/profile/05105089662475084319noreply@blogger.com0tag:blogger.com,1999:blog-218264512262097577.post-66213352744163100292023-09-05T23:20:00.002-03:002023-09-05T23:20:53.497-03:00<html>
<head>
<meta charset="UTF-8" />
<meta name="original_url" content="https://blog.tensorflow.org/2023/08/the-tensorflow-lite-plugin-for-flutter-officially-available.html"/>
<meta name="original_url" content="https://blog.tensorflow.org/2023/08/the-tensorflow-lite-plugin-for-flutter-officially-available.html"/>
<style id="page-skin-1" type="text/css"><!--
/* ADD YOUR CSS HERE */
body{font-family:Roboto,sans-serif;font-size:16px;line-height:30px;-webkit-font-smoothing:antialiased;color:#000}h1{font-family:Google Sans,sans-serif;font-size:34px;font-weight:500;line-height:44px}h2{font-size:30px;line-height:40px}h2,h3{font-family:Google Sans,sans-serif;font-weight:700}h3{font-size:24px;line-height:32px}h4{font-size:20px;font-weight:500}h4,h5{font-family:Google Sans,sans-serif;line-height:26px}h5{font-size:16px;font-weight:700}h6{font-size:14px;line-height:22px}.display,h6{font-family:Google Sans,sans-serif;font-weight:700}.display{font-size:46px;line-height:56px}.hidden-text{height:1px;overflow:hidden;pointer-events:none;position:absolute;top:-10px;width:1px}img,video{border:0;height:auto;max-width:100%}body{position:relative;min-height:100vh}body.no-scroll{overflow:hidden}.content-wrap{padding-top:97px;padding-bottom:552px}@media only screen and (max-width:839px){.content-wrap{padding-top:48px}}.widget{margin:0;line-height:unset}.widget li{padding-left:12px}.widget ol,.widget ul{padding-left:40px}.widget li,.widget ol,.widget ul{line-height:unset}.tensorsite-full-footer{position:absolute;bottom:0;height:461px;width:100%}.posts-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;position:relative}.posts-container .tensorsite-posts__regular{-webkit-box-flex:3;-webkit-flex:3;-ms-flex:3;flex:3}.divider{width:100%;background-color:#e3e5e8;height:1px;margin-bottom:24px;z-index:1}.divider--lg-gap{margin:45px auto 25px}.divider--article-bottom{margin:30px 0}.divider--article-top{margin-bottom:36px}@media only screen and (max-width:767px){.divider--article-top{margin-bottom:24px}}.tensorsite-blog-logo{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.tensorsite-blog-logo__image{width:auto;height:32px}.tensorsite-logo{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1}.tensorsite-logo__image{width:auto;height:32px}@media only screen and (max-width:767px){.tensorsite-logo{margin-bottom:36px}}.wrapper{overflow:hidden}.tensorsite-container{margin:48px auto;padding:0 40px;position:relative;width:auto;max-width:1420px}@media only screen and (max-width:767px){.tensorsite-container{margin:24px auto;padding:0 20px}}@media only screen and (min-width:768px){.tensorsite-container.featured{margin:48px auto -12px}}.tensorsite-container--large{margin:48px auto;padding:0 40px;position:relative;width:auto;max-width:1050px}@media only screen and (max-width:767px){.tensorsite-container--large{margin:24px auto;padding:0 20px}}.tensorsite-container--medium{margin:48px auto;padding:0 40px;position:relative;width:auto;max-width:844px}@media only screen and (max-width:767px){.tensorsite-container--medium{margin:24px auto;padding:0 20px}}.tensorsite-container--narrow{margin:48px auto;padding:0 40px;position:relative;width:auto;max-width:682px}@media only screen and (max-width:767px){.tensorsite-container--narrow{margin:24px auto;padding:0 20px}}.tensorsite-container--flex-horizontal{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.section,body{margin:0}.tensorsite-content{border-radius:10px;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;padding:26px 30px;position:relative}.tensorsite-content .spacer{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1}.tensorsite-content a:not(.tensorsite-content__button),.tensorsite-content div{-webkit-transition:color .2s linear;transition:color .2s linear}.tensorsite-content ul{list-style:none;padding:0}.tensorsite-content ul li{line-height:1;margin:8px 0}.tensorsite-content ul li:last-of-type{margin-bottom:0}.tensorsite-content p{margin:0}.tensorsite-content__image-wrapper{position:relative}.tensorsite-content__image{border-radius:10px 10px 0 0;display:block;height:100%;-o-object-fit:cover;object-fit:cover;position:absolute;width:100%;-webkit-transform:scale(1.015);transform:scale(1.015);-webkit-transition:-webkit-transform .5s ease;transition:-webkit-transform .5s ease;transition:transform .5s ease;transition:transform .5s ease,-webkit-transform .5s ease;will-change:transform}@media only screen and (max-width:850px){.tensorsite-content__image{position:relative}}.tensorsite-content__icon{position:absolute;top:15px;right:24px}.tensorsite-content__subtitle{font-family:Google Sans,sans-serif;font-size:16px;font-weight:700;line-height:26px;font-weight:500!important;color:#425066;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;margin-bottom:18px;position:relative}.tensorsite-content__subtitle b{margin:0 5px}.tensorsite-content__title{font-family:Google Sans,sans-serif;font-size:34px;font-weight:500;line-height:44px;font-weight:700!important;color:#425066;margin-bottom:12px}.tensorsite-content__title:last-child{margin-bottom:0}.tensorsite-content__title--grow{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1}.tensorsite-content__info{font-size:14px;line-height:22px;color:#616161;margin-bottom:18px}.tensorsite-content__description{font-family:Roboto,sans-serif;font-size:16px;line-height:30px;color:#616161;margin-bottom:24px}a{color:#425066;-webkit-transition:color .2s linear;transition:color .2s linear}a,a:active,a:focus{text-decoration:none}a.disabled{pointer-events:none;cursor:default;color:#ccc}a.disabled .cta-icon path{fill:#ccc}a .cta-icon{-webkit-transition:margin-right .2s linear,margin-left .2s linear;transition:margin-right .2s linear,margin-left .2s linear}a .cta-icon path{fill:#425066;-webkit-transition:fill .2s linear;transition:fill .2s linear}a .cta-icon.grey path{fill:#ccc}a .cta-icon--left{-webkit-transform:rotate(180deg);transform:rotate(180deg)}a:hover{color:#ff6f00}a:hover .cta-icon path{fill:#ff6f00}.tensorsite-card{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-backface-visibility:hidden;backface-visibility:hidden;background:#fff;border-radius:10px;-webkit-box-shadow:0 0 36px rgba(0,0,0,.1);box-shadow:0 0 36px rgba(0,0,0,.1);-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;margin:24px 0;overflow:hidden;position:relative;-webkit-transform:translateZ(0);transform:translateZ(0);-webkit-transition:opacity .2s linear,-webkit-box-shadow .2s linear;transition:opacity .2s linear,-webkit-box-shadow .2s linear;transition:box-shadow .2s linear,opacity .2s linear;transition:box-shadow .2s linear,opacity .2s linear,-webkit-box-shadow .2s linear}.tensorsite-card.hidden{display:none}.tensorsite-card .divider{margin-bottom:18px}@media only screen and (max-width:850px){.tensorsite-card .divider{margin-bottom:14px}}.tensorsite-card.featured{min-height:300px}.tensorsite-card.featured .tensorsite-content{-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}.tensorsite-card.featured .tensorsite-content .tensorsite-content__title{font-size:40px;line-height:54px}@media only screen and (max-width:850px){.tensorsite-card.featured .tensorsite-content .tensorsite-content__title{font-size:26px;line-height:36px}}.tensorsite-card.featured .tensorsite-content .tensorsite-content__subtitle{margin-bottom:18px}@media only screen and (max-width:850px){.tensorsite-card.featured .tensorsite-content .tensorsite-content__subtitle{margin-bottom:10px}}@media only screen and (max-width:850px){.tensorsite-card{-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;max-height:unset;max-width:600px;margin:24px auto}}.tensorsite-card:hover .tensorsite-content__title{color:#ff6f00}.tensorsite-card .tensorsite-content{padding:28px 30px 32px}.tensorsite-card .tensorsite-content .tensorsite-content__cta-wrapper,.tensorsite-card .tensorsite-content .tensorsite-content__description,.tensorsite-card .tensorsite-content .tensorsite-content__info,.tensorsite-card .tensorsite-content .tensorsite-content__subtitle,.tensorsite-card .tensorsite-content .tensorsite-content__title{position:relative}.tensorsite-card .tensorsite-content .tensorsite-content__subtitle{margin-bottom:14px}@media only screen and (max-width:1279px){.tensorsite-card .tensorsite-content .tensorsite-content__subtitle{margin-bottom:8px;line-height:24px;font-size:14px}}.tensorsite-card .tensorsite-content .tensorsite-content__title{margin-bottom:16px;font-size:30px}@media only screen and (max-width:1279px){.tensorsite-card .tensorsite-content .tensorsite-content__title{font-size:24px;margin-bottom:14px;line-height:32px}.tensorsite-card .tensorsite-content .tensorsite-content__title .no-subtitle{margin-top:32px}}.tensorsite-card .tensorsite-content .tensorsite-content__description{margin-bottom:0;display:-webkit-box;line-clamp:4;-webkit-line-clamp:4;text-overflow:ellipsis;-webkit-box-orient:vertical;overflow:hidden}.tensorsite-card .tensorsite-content .tensorsite-content__description *{color:#616161!important;font-weight:400!important}.tensorsite-card .tensorsite-content .tensorsite-content__info{font-family:Google Sans,sans-serif;margin-bottom:20px}@media only screen and (max-width:1279px){.tensorsite-card .tensorsite-content .tensorsite-content__info{line-height:24px}}@media only screen and (max-width:850px){.tensorsite-card .tensorsite-content{padding:16px 18px 20px}}.tensorsite-card .tensorsite-content__image-wrapper{background-color:#fbfcfc;overflow:hidden;position:relative;width:auto;-webkit-flex-basis:40%;-ms-flex-preferred-size:40%;flex-basis:40%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}@media only screen and (max-width:850px){.tensorsite-card .tensorsite-content__image-wrapper{max-height:250px}}.tensorsite-card .tensorsite-content__image-wrapper.hidden{display:none}.tensorsite-card:focus,.tensorsite-card:hover{-webkit-box-shadow:0 0 64px rgba(0,0,0,.22);box-shadow:0 0 64px rgba(0,0,0,.22);cursor:pointer}.tensorsite-card__href{height:100%;left:0;opacity:0;position:absolute;top:0;width:100%;z-index:2}.tensorsite-card:first-of-type{margin-top:0}.tensorsite-card:hover .tensorsite-content__image-wrapper img,.tensorsite-card__href:focus~.tensorsite-content__image-wrapper img{-webkit-transform:scale(1.03);transform:scale(1.03);-webkit-transition:-webkit-transform 1s ease;transition:-webkit-transform 1s ease;transition:transform 1s ease;transition:transform 1s ease,-webkit-transform 1s ease}.tensorsite-detail{color:#000!important}.tensorsite-detail__title{font-family:Google Sans,sans-serif;font-size:46px;font-weight:700;line-height:56px;margin-bottom:24px}@media only screen and (max-width:767px){.tensorsite-detail__title{font-family:Google Sans,sans-serif;font-size:28px;font-weight:700;line-height:1.36;margin-bottom:16px}}.tensorsite-detail__body,.tensorsite-detail__body div,.tensorsite-detail__body div>span,.tensorsite-detail__body li>span{font-family:Roboto,sans-serif!important;font-size:16px!important;line-height:28px!important;letter-spacing:0!important}.tensorsite-detail__body b,.tensorsite-detail__body strong{font-weight:500!important}.tensorsite-detail__body h1,.tensorsite-detail__body h1>span,.tensorsite-detail__body h1>strong,.tensorsite-detail__body h2,.tensorsite-detail__body h2>span,.tensorsite-detail__body h2>strong{font-family:Google Sans,sans-serif!important;font-size:30px!important;font-weight:700!important;line-height:40px!important;margin-bottom:18px!important;margin-top:40px}@media only screen and (max-width:767px){.tensorsite-detail__body h1,.tensorsite-detail__body h1>span,.tensorsite-detail__body h1>strong,.tensorsite-detail__body h2,.tensorsite-detail__body h2>span,.tensorsite-detail__body h2>strong{font-size:24px!important;line-height:34px!important;margin-bottom:12px!important;margin-top:30px}}.tensorsite-detail__body h3,.tensorsite-detail__body h3>span,.tensorsite-detail__body h3>strong{font-family:Google Sans,sans-serif!important;font-size:26px!important;font-weight:700!important;line-height:36px!important;margin-bottom:14px!important;margin-top:40px}@media only screen and (max-width:767px){.tensorsite-detail__body h3,.tensorsite-detail__body h3>span,.tensorsite-detail__body h3>strong{font-size:22px!important;line-height:32px!important;margin-bottom:12px!important;margin-top:30px}}.tensorsite-detail__body h4,.tensorsite-detail__body h4>span,.tensorsite-detail__body h4>strong{font-family:Google Sans,sans-serif!important;font-size:20px!important;font-weight:500!important;line-height:30px!important;margin-bottom:14px!important;margin-top:40px}@media only screen and (max-width:767px){.tensorsite-detail__body h4,.tensorsite-detail__body h4>span,.tensorsite-detail__body h4>strong{margin-bottom:12px!important;margin-top:30px}}.tensorsite-detail__body ol,.tensorsite-detail__body ul{margin:24px 0}@media only screen and (max-width:767px){.tensorsite-detail__body ol,.tensorsite-detail__body ul{margin:18px 0}}.tensorsite-detail__body a{color:#425066!important;font-weight:500!important}.tensorsite-detail__body a:not(.author-link){text-decoration:underline!important}.tensorsite-detail__body a:hover{color:#ff6f00!important}.tensorsite-detail__body a.author-link{white-space:nowrap}.tensorsite-detail__body a[imageanchor]{display:block!important;float:none!important;margin-left:0!important;margin-right:0!important}.tensorsite-detail__body img{display:block}.tensorsite-detail__body img:not(.unset-width){width:100%;border-radius:4px;margin:24px 0}.tensorsite-detail__body img.unset-width{margin:0 auto 12px}.tensorsite-detail__body iframe{width:100%}.tensorsite-detail__body .gist{margin:24px 0}.tensorsite-detail__body .tr-caption-container{width:100%;padding:0;margin:24px 0}.tensorsite-detail__body .tr-caption-container img{margin:0 0 12px}.tensorsite-detail__body .tr-caption{font-size:12.8px!important;font-style:normal!important;font-family:unset!important;line-height:1.8!important;font-weight:400!important}.tensorsite-detail__body code,.tensorsite-detail__body pre[class*=language-]{background:#f5f6f7!important;font-family:Roboto Mono,monospace!important;border-radius:2px}.tensorsite-detail__body code{padding:5px 8px}.tensorsite-detail__body pre[class*=language-]{margin:24px auto!important;line-height:1.7!important;padding:24px}@media only screen and (max-width:767px){.tensorsite-detail__body pre[class*=language-]{padding:8px 12px}}.tensorsite-detail__body pre[class*=language-] code{padding:0}.tensorsite-detail__body pre[class*=language-] .token.operator{background:unset!important}.tensorsite-detail__body .separator[style*=center]>a:not([style*=float]){margin:0!important}.tensorsite-detail__contact{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;margin-bottom:36px}@media only screen and (max-width:767px){.tensorsite-detail__contact{margin-bottom:24px}}.tensorsite-detail__info{font-family:Google Sans,sans-serif;font-size:16px;font-weight:700;line-height:26px;font-weight:400;color:#616161;margin-right:25px}.tensorsite-detail-footer .article-divider{padding:30px 0}.tensorsite-detail-footer .tensorsite-chip{font-family:Roboto,sans-serif;font-size:16px;line-height:30px;color:#616161;border:1px solid #ebebeb;padding:4px 10px;display:inline-block;border-radius:4px;margin-bottom:4px;-webkit-transition:color .2s linear,background-color .2s linear;transition:color .2s linear,background-color .2s linear;text-decoration:none}.tensorsite-detail-footer .tensorsite-chip:hover{background-color:hsla(213,7%,76%,.2)}.tensorsite-detail-footer .tensorsite-chip:focus{background-color:hsla(213,7%,76%,.26)}.tensorsite-detail-footer .tensorsite-chip:active{background-color:hsla(213,7%,76%,.32)}.tensorsite-next{background:#f5f6f7;padding:48px 0 60px;display:none}@media only screen and (max-width:767px){.tensorsite-next{padding:48px 0 0}}.tensorsite-next.active{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.tensorsite-next__title{font-family:Google Sans,sans-serif;font-size:46px;font-weight:700;line-height:56px;margin-bottom:36px;text-align:center}@media only screen and (max-width:767px){.tensorsite-next__title{font-family:Google Sans,sans-serif;font-size:28px;font-weight:700;line-height:1.36;margin-bottom:24px}}#pagination-container{display:none}.pagination{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between}.pagination .arrow-link{font-family:Google Sans,sans-serif;font-size:16px;font-weight:700;line-height:20px;display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;text-decoration:none}.pagination .arrow-link .cta-icon{height:12px}.pagination .arrow-link .cta-icon--left{margin-left:4px}.pagination .arrow-link .cta-icon--right{margin-right:4px}.pagination .arrow-link>span{padding:0 8px}.pagination .arrow-link:hover .cta-icon--left{margin-left:0;margin-right:4px}.pagination .arrow-link:hover .cta-icon--right{margin-left:4px;margin-right:0}.filter-page__title{font-family:Google Sans,sans-serif;font-size:46px;font-weight:700;line-height:56px;line-height:46px;margin-bottom:20px}@media only screen and (max-width:767px){.filter-page__title{font-family:Google Sans,sans-serif;font-size:30px;font-weight:700;line-height:40px}}.filter-page__subtitle{font-size:18px;line-height:30px;max-width:735px}@media only screen and (max-width:767px){.filter-page__subtitle{font-family:Roboto,sans-serif;font-size:16px;line-height:28px}}.filter-page__subtitle a{text-decoration:underline;font-weight:500}.tensorsite-button{font-family:Google Sans,sans-serif;font-size:16px;font-weight:700;line-height:20px;border-radius:8px;-webkit-box-shadow:0 0 20px transparent;box-shadow:0 0 20px transparent;display:inline-block;height:auto;outline:none;padding:13px 22px;text-transform:none;-webkit-transition:background .3s linear,color .3s linear,-webkit-box-shadow .3s linear;transition:background .3s linear,color .3s linear,-webkit-box-shadow .3s linear;transition:box-shadow .3s linear,background .3s linear,color .3s linear;transition:box-shadow .3s linear,background .3s linear,color .3s linear,-webkit-box-shadow .3s linear}.tensorsite-button:active{-webkit-box-shadow:none;box-shadow:none}.tensorsite-button--orange{background:-webkit-gradient(linear,left top,right top,from(#ff6f00),to(#ff9100));background:linear-gradient(90deg,#ff6f00,#ff9100);color:#fff;overflow:hidden;position:relative;z-index:1}.tensorsite-button--orange:after{background:#ff6f00;bottom:0;content:"";left:0;opacity:0;position:absolute;right:0;top:0;-webkit-transition:opacity .3s;transition:opacity .3s;z-index:-1}.tensorsite-button--orange:focus:after,.tensorsite-button--orange:hover:after{opacity:1}.tensorsite-button--white{background:#fff;color:#425066}.tensorsite-button--white:focus,.tensorsite-button--white:hover{background:#425066;color:#fff}.tensorsite-footer{margin-top:-92px;overflow:hidden;padding-top:92px;pointer-events:none;position:relative}.tensorsite-footer:after,.tensorsite-footer:before{bottom:0;content:"";display:block;position:absolute}.tensorsite-footer:before{background:#ff6f00;left:0;right:calc(1440px + ((100% - 1440px) / 2) + 96px);top:184px}.tensorsite-footer:after{background:#ff9100;left:calc(1440px + ((100% - 1440px) / 2) + 96px);right:0;top:0}.tensorsite-footer.grey{background-color:#f5f6f7}.tensorsite-footer__container{background-image:-webkit-gradient(linear,right top,left top,color-stop(18%,#ff9100),color-stop(86%,#ff6f00));background-image:linear-gradient(-90deg,#ff9100 18%,#ff6f00 86%);margin:0 auto;max-width:calc(100% - 192px);min-height:210px;padding:70px 0;position:relative}@media screen and (min-width:1440px){.tensorsite-footer__container{max-width:1248px}}@media only screen and (max-width:767px){.tensorsite-footer__container{background-image:-webkit-gradient(linear,right top,left top,from(#ff9100),to(#ff6f00));background-image:linear-gradient(-90deg,#ff9100,#ff6f00);padding-bottom:100px}}.tensorsite-footer__side{bottom:0;position:absolute;width:192px}.tensorsite-footer__side:before{content:"";display:block;height:92px;margin-top:-92px;width:100%}.tensorsite-footer__side--left{background:#ff6f00;left:-192px;top:92px}.tensorsite-footer__side--left:before{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 192 92'%3E%3Cpath d='M162 8L96 46 30 84a60.7 60.7 0 0 1-30 8h192V0a60.7 60.7 0 0 0-30 8z' fill='%23FF6F00'/%3E%3C/svg%3E")}.tensorsite-footer__side--right{background:#ff9100;right:-192px;top:0}.tensorsite-footer__side--right:before{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 192 92'%3E%3Cpath d='M162 8L96 46 30 84a60.7 60.7 0 0 1-30 8h192V0a60.7 60.7 0 0 0-30 8z' fill='%23FF9100'/%3E%3C/svg%3E")}.tensorsite-footer__content{pointer-events:auto}.tensorsite-footer__content .tensorsite-content{margin:0 auto;max-width:650px;padding:0}.tensorsite-footer__content .tensorsite-content__title{font-family:Google Sans,sans-serif;font-size:30px;font-weight:700;line-height:40px;color:#fff;padding:0;text-align:center;width:auto}.tensorsite-footer__content .tensorsite-content__description{font-size:18px;line-height:30px;color:#fff;text-align:center}.tensorsite-footer__content .tensorsite-content__cta-wrapper{margin-top:10px;text-align:center}.tensorsite-footer__content .tensorsite-content .tensorsite-content__title+.tensorsite-content__cta-wrapper{margin-top:40px}@media only screen and (max-width:767px){.tensorsite-footer__content{margin:0 -76px}}.tensorsite-footer__lines{background:url("https://www.gstatic.com/tf_blog/images/tf_lines.svg") bottom/100% auto no-repeat;bottom:0;left:50%;max-width:1720px;min-width:1320px;pointer-events:none;position:absolute;top:0;-webkit-transform:translate(-50%);transform:translate(-50%);width:90vw;z-index:2}@media only screen and (max-width:767px){.tensorsite-footer__lines{-webkit-transform:translate(-30%);transform:translate(-30%)}}@media only screen and (max-width:480px){.tensorsite-footer__lines{-webkit-transform:translate(-20%);transform:translate(-20%)}}.icon-link{border-radius:50%;height:42px;width:42px;display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-transition:background .2s linear;transition:background .2s linear;position:relative}.icon-link:hover{background-color:hsla(213,7%,76%,.2)}.icon-link:focus{background-color:hsla(213,7%,76%,.26)}.icon-link:active{background-color:hsla(213,7%,76%,.32)}.icon-tooltip{left:-3rem}.icon-tooltip,.icon-tooltip-github{position:absolute;width:10rem;background-color:#f5f6f7;top:2.25rem;z-index:999;border-radius:.5rem;text-align:center;color:#425066;display:none;-webkit-box-shadow:0 1px 6px 0 rgba(60,64,67,.3),0 2px 6px 2px rgba(60,64,67,.15);box-shadow:0 1px 6px 0 rgba(60,64,67,.3),0 2px 6px 2px rgba(60,64,67,.15)}.icon-tooltip-github{left:-7rem}.footer__links .footer-link:not(:first-child):before{content:"\B7";color:#999;font-weight:500;margin:5px}.social-icons__container-header,.social-icons__links{height:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.social-icons__container-header{margin-right:14px}.social-icons__container-header .icon-link{margin-right:0;margin-left:18px}@media only screen and (max-width:1000px){.social-icons__container-header{display:none}}.social-icons__container-footer{background:#f9f9f9;padding:36px 40px;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.social-icons__container-footer .icon-link:not(:last-of-type){margin-right:24px}.social-icons__container-footer .footer__side--right{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;gap:20px}@media only screen and (max-width:767px){.social-icons__container-footer .footer__side--right{display:block}.social-icons__container-footer .footer__side--right .social-icons__links{place-content:center}}@media only screen and (max-width:767px){.social-icons__container-footer{-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}}.header__overlay{height:100%;left:0;position:absolute;width:100%;background-color:rgba(0,0,0,.4);-webkit-animation:fade-in .4s cubic-bezier(.39,.575,.565,1);animation:fade-in .4s cubic-bezier(.39,.575,.565,1);opacity:0;top:0;z-index:-1}.header__overlay.show{opacity:1;z-index:800;-webkit-transition:opacity .2s ease-in-out;transition:opacity .2s ease-in-out}.header{position:fixed;z-index:700;top:0;width:100%;-webkit-box-shadow:0 1px 2px 0 rgba(60,64,67,.3),0 2px 6px 2px rgba(60,64,67,.15);box-shadow:0 1px 2px 0 rgba(60,64,67,.3),0 2px 6px 2px rgba(60,64,67,.15);height:97px}@media only screen and (max-width:839px){.header{height:48px}}.header .top-row{background:#fff;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;padding:0 24px;height:48px;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;border-bottom:1px solid #e6e6e6}@media only screen and (max-width:839px){.header .top-row{padding:0 16px}}.header .top-row__left,.header .top-row__right{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;height:100%}.header .nav-row,.header .top-row__left,.header .top-row__right{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.header .nav-row{background:#f5f6f7;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;width:100%}.header .nav-items{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;height:48px;position:relative;padding:0 24px}@media only screen and (max-width:839px){.header .nav-items{display:none}}.header .nav-items tab{position:relative}.header .nav-items tab.active .header__nav-item:after,.header .nav-items tab:hover .header__nav-item:after{background:#425066}@media only screen and (max-width:839px){.header .header__cta,.header .nav-items{display:none}}.header__search-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;margin:6px 0 6px 24px;overflow:hidden;position:relative;margin-right:36px;border-radius:4px}@media only screen and (max-width:767px){.header__search-container:not(.mobile){display:none}}.header__search-container.mobile{margin:0 0 20px}.header__search-container.mobile #searchform,.header__search-container.mobile .searchbox{width:100%}.header__search-container .searchbox{border-radius:2px}.header__search-container .searchbox input{font-family:Roboto,sans-serif;font-size:16px;line-height:30px;background:#f5f6f7;color:#425066;border:0;margin:0;height:20px;outline:0;padding:8px 8px 8px 40px;width:100%;-webkit-transition:background .2s;transition:background .2s}.header__search-container .searchbox input::-webkit-input-placeholder{color:#425066}.header__search-container .searchbox input:-ms-input-placeholder,.header__search-container .searchbox input::-ms-input-placeholder{color:#425066}.header__search-container .searchbox input::placeholder{color:#425066}.header__search-container .searchbox input:hover{background:#e8eaed}.header__search-container .material-icons{color:#425066;left:8px;position:absolute;top:6px;-webkit-transition:color .2s;transition:color .2s}.header__cta{font-family:Google Sans,sans-serif;font-size:16px;font-weight:700;line-height:20px;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.header__cta.mobile{padding:18px 0}.header__cta:hover .cta-icon{margin-left:0;margin-right:12px}.header__cta .cta-icon{-webkit-transition:margin-right .2s linear,margin-left .2s linear;transition:margin-right .2s linear,margin-left .2s linear;margin-left:4px;margin-right:8px;-webkit-transform:rotate(180deg);transform:rotate(180deg)}.header__nav-item{font-family:Google Sans,sans-serif;font-size:14px;font-weight:700;line-height:22px;color:#677282;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;padding:0 36px 0 0;height:100%;text-transform:none}.header__nav-item:hover{color:#677282}.header__nav-item.mobile{font-weight:500;padding:0}.header__nav-item.mobile:hover{color:#ff6f00}.header__nav-item:after{bottom:0;border-radius:3px 3px 0 0;content:"";display:block;height:3px;left:calc(50% - 18px);min-width:20px;position:absolute;right:0;-webkit-transform:translateX(-50%);transform:translateX(-50%);width:calc(100% - 44px)}.header__hamburger{border:0;background:none;outline:none;padding:0;margin:1px 8px 0 -4px;padding:8px;color:rgba(0,0,0,.65);cursor:pointer}@media only screen and (min-width:840px){.header__hamburger{display:none}}.header__side-menu{background-color:#fff;bottom:0;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;height:100%;left:0;overflow:auto;position:fixed;top:0;-webkit-transform:translateX(-100%);transform:translateX(-100%);-webkit-transition:-webkit-transform .2s cubic-bezier(.215,.61,.355,1);transition:-webkit-transform .2s cubic-bezier(.215,.61,.355,1);transition:transform .2s cubic-bezier(.215,.61,.355,1);transition:transform .2s cubic-bezier(.215,.61,.355,1),-webkit-transform .2s cubic-bezier(.215,.61,.355,1);z-index:900}.header__side-menu.is-open{height:100%;-webkit-transform:translateX(0);transform:translateX(0);width:80%}.header__side-menu__content{height:100%;padding:18px 16px 0;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.header__side-menu__content .spacer{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1}.header__side-menu__title{font-size:18px;line-height:30px;font-weight:500;margin-bottom:12px}.header__side-menu__items{list-style:none}.header__side-menu__items li{padding:12px 0}.header__side-menu__bottom{border-top:1px solid #e6e6e6}.header__side-menu__logo-container{background:#fff;height:48px;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;padding:0 16px;border-bottom:1px solid #e6e6e6}.tensorsite__tags{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;height:650px;margin-left:40px;padding-top:40px;position:-webkit-sticky;position:sticky;top:97px}@media only screen and (max-width:850px){.tensorsite__tags{display:none}}.tensorsite__tags h2{margin-bottom:32px}.tensorsite__tags .tensorsite-tag{font-family:Google Sans,sans-serif;font-size:20px;font-weight:500;line-height:26px;color:#425066;display:block;padding:20px 0;border-bottom:1px solid #e3e5e8;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-transition:color .2s linear;transition:color .2s linear}.tensorsite__tags .tensorsite-tag:hover{color:#ff6f00}.tensorsite__tags .tensorsite-tag:hover .cta-icon{margin-left:12px;margin-right:0}.tensorsite__tags .tensorsite-tag .cta-icon{-webkit-transition:margin-right .2s linear,margin-left .2s linear;transition:margin-right .2s linear,margin-left .2s linear;margin-left:8px;margin-right:4px}.community-icon{width:24px;height:24px;vertical-align:middle}
]
--></style>
</head><body>
<div class="tensorsite-detail">
<a aria-hidden="true" class="tensorsite-detail__next-url" hidden="true" href="https://blog.tensorflow.org/2023/08/simpleperf-case-study-fast.html"></a>
<div aria-hidden="true" class="tensorsite-detail__current-url" hidden="true">https://blog.tensorflow.org/2023/08/the-tensorflow-lite-plugin-for-flutter-officially-available.html</div>
<div aria-hidden="true" class="tensorsite-detail__tags" hidden="true">
<span>Anuncio</span> <b class="label-divider-dot">·</b> <span>Explorar</span>
</div>
<div aria-hidden="true" class="tensorsite-detail__main-image" hidden="true">
https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEir6TpBti1i4y8JWJ0JdadWBI-dV8iziJhCeUDFq7-KzRm_KzbWtUDw2sL7drCRP77A1H1fkgw-N0saaGLtUsxXbUApCiW-A5M7IbKUovycgIknEcLAJq6qut5Ov6ec7QALMFQJC2srGzFMHRvUN856QGju3qR8f71XSRNFYJwBOFS-3s84Gmvz-Q3k2_Q/s1600/Tensorflow-Jax-on-the-Web-02%20%281%29.png
</div>
<p aria-hidden="true" class="tensorsite-detail__description" hidden="true">
<span class="tensorsite-content__info"> 18 de agosto de 2023 — </span>
<em>Publicado por <a href="https://twitter.com/ptruiz_dev" target="_blank">Paul Ruiz</a>, Developer Relations Engineer</em>Nos complace anunciar que el complemento de TensorFlow Lite para Flutter se migró oficialmente a la cuenta de GitHub de TensorFlow y se lanzó. Hace tres años, <a href="https://github.com/am15h" target="_blank">Amish Garg</a>, uno de nuestros talentosos colaboradores de Google Summer of Code, creó un complemento de TensorFlow Lite que se usa habitualmente en Flutter. El complemento era tan popular que decidimos migrarlo a...
</p>
<div class="tensorsite-content__subtitle">
<a href="https://blog.tensorflow.org/search?label=Announcement&max-results=20"> <span>Anuncio</span> </a> <b class="label-divider-dot">·</b> <a href="https://blog.tensorflow.org/search?label=Explore&max-results=20"> <span>Explorar</span> </a> <b class="label-divider-dot">·</b>
<img alt="Artículo de Google" class="community-icon" src="https://www.gstatic.com/tf_blog/images/ic_google.svg">
</div>
<div class="tensorsite-detail__title">
Está disponible oficialmente el complemento de TensorFlow Lite para Flutter
</div>
<div class="tensorsite-detail__contact">
<div class="tensorsite-detail__info">
<span class="tensorsite-detail__timestamp">18 de agosto de 2023</span>
</div>
<a class="icon-link" href="https://twitter.com/intent/tweet?text=%22The TensorFlow Lite Plugin for Flutter is Officially Available%22 from the TensorFlow Blog%0A%0Ahttps://blog.tensorflow.org/2023/08/the-tensorflow-lite-plugin-for-flutter-officially-available.html" rel="noopener noreferrer" target="_blank" title="Share this post on Twitter">
<svg alt="Twitter Social Icon" class="twitter-icon social-icon" height="19" viewBox="0 0 23 19" width="23" xmlns="http://www.w3.org/2000/svg">
<g fill="none" fill-rule="evenodd" transform="translate(-7 -9)">
<rect height="36" width="36"></rect>
<path d="M14.076,27.2827953 C22.566,27.2827953 27.21,20.2477953 27.21,14.1477953 C27.21,13.9477953 27.21,13.7487953 27.197,13.5507953 C28.1,12.8977953 28.88,12.0887953 29.5,11.1617953 C28.657,11.5347953 27.764,11.7797953 26.848,11.8877953 C27.812,11.3107953 28.533,10.4037953 28.878,9.33479527 C27.972,9.87179527 26.98,10.2507953 25.947,10.4547953 C24.198,8.59579527 21.274,8.50679527 19.415,10.2547953 C18.217,11.3817953 17.708,13.0617953 18.08,14.6647953 C14.368,14.4787953 10.91,12.7257953 8.566,9.84279527 C7.341,11.9507953 7.967,14.6497953 9.995,16.0047953 C9.261,15.9827953 8.542,15.7837953 7.9,15.4267953 L7.9,15.4847953 C7.9,17.6827953 9.449,19.5747953 11.603,20.0107953 C10.924,20.1957953 10.211,20.2227953 9.519,20.0897953 C10.124,21.9707953 11.856,23.2587953 13.832,23.2957953 C12.197,24.5797953 10.178,25.2777953 8.098,25.2747953 C7.731,25.2747953 7.364,25.2527953 7,25.2087953 C9.111,26.5627953 11.567,27.2817953 14.076,27.2787953" fill="#545454"></path>
</g>
</svg>
</a>
</div>
<div class="divider divider--article-top"></div>
<div class="tensorsite-detail__body">
<meta content="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEir6TpBti1i4y8JWJ0JdadWBI-dV8iziJhCeUDFq7-KzRm_KzbWtUDw2sL7drCRP77A1H1fkgw-N0saaGLtUsxXbUApCiW-A5M7IbKUovycgIknEcLAJq6qut5Ov6ec7QALMFQJC2srGzFMHRvUN856QGju3qR8f71XSRNFYJwBOFS-3s84Gmvz-Q3k2_Q/s1600/Tensorflow-Jax-on-the-Web-02%20%281%29.png" name="twitter:image">
<img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEir6TpBti1i4y8JWJ0JdadWBI-dV8iziJhCeUDFq7-KzRm_KzbWtUDw2sL7drCRP77A1H1fkgw-N0saaGLtUsxXbUApCiW-A5M7IbKUovycgIknEcLAJq6qut5Ov6ec7QALMFQJC2srGzFMHRvUN856QGju3qR8f71XSRNFYJwBOFS-3s84Gmvz-Q3k2_Q/s1600/Tensorflow-Jax-on-the-Web-02%20%281%29.png" style="display: none;">
<em>Publicado por <a href="https://twitter.com/ptruiz_dev" target="_blank">Paul Ruiz</a>, Developer Relations Engineer</em><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi2kHOZOCF_yXCqaxxvQWHY3Gd3sR7xJ0P5NSRDABUCzAHTDZ69kv6ofmUVY-amjyZnxOmj3Mt66xwnKtqR6ftOOHkCLckkMRlawpniZwCwcqEvExyMHoaMfyQJqvw-vi63OcWqAcLCJKDPHaWrPVJW-U8aTvNHwXWDVa6PLbhAUgYxyjdFuKHnT6ISqwY/s1600/Tensorflow-Jax-on-the-Web-01%20%281%29.png"><img border="0" data-original-height="800" data-original-width="1058" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi2kHOZOCF_yXCqaxxvQWHY3Gd3sR7xJ0P5NSRDABUCzAHTDZ69kv6ofmUVY-amjyZnxOmj3Mt66xwnKtqR6ftOOHkCLckkMRlawpniZwCwcqEvExyMHoaMfyQJqvw-vi63OcWqAcLCJKDPHaWrPVJW-U8aTvNHwXWDVa6PLbhAUgYxyjdFuKHnT6ISqwY/s1600/Tensorflow-Jax-on-the-Web-01%20%281%29.png"></a> <a name="more"></a><p></p>
<p>Nos complace anunciar que el complemento de TensorFlow Lite para Flutter se migró oficialmente a la cuenta de GitHub de TensorFlow y se lanzó.
</p><p>Hace tres años, <a href="https://github.com/am15h" target="_blank">Amish Garg</a>, uno de nuestros talentosos colaboradores de Google Summer of Code, creó un complemento de TensorFlow Lite que se usa habitualmente en Flutter. El plugin era tan popular que decidimos migrarlo a nuestro repositorio oficial, para que pueda mantenerlo directamente y con más facilidad el equipo de Google. Agradecemos a Amish por su trabajo en el complemento de TensorFlow Lite para Flutter.</p>
<p>Gracias a los esfuerzos de los desarrolladores de la comunidad, el complemento se actualizó a la última versión de TensorFlow Lite y se agregó una colección de nuevas funciones y aplicaciones de ejemplo, como la detección de objetos a través de un feed de cámara en vivo.</p>
<div><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody><tr><td style="text-align: center;"><center><img alt="Imagen en movimiento de un feed de cámara en vivo que muestra la detección de varios objetos en un escritorio de trabajo" border="0" data-original-height="1504" data-original-width="720" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgzl-IA2HrigPggyplfe6fsfCxuW8URlGxY_qYI5i9x1JcYjRXUHQX6iRSML-tfojxIYP35nEOgdQ3e0VQevPjlwL0l0rG-obAIgXYqJOU77ZuM-G_ZeB0S66_aoVcU02WQLjrbGdj22zdp3JhEvL08rVOrq3G0jc0NUgRyUu2uDWL-1-RyFwIqj1E7e88/s1600/image2.gif" style="width: 55%;" td=""></center></td></tr><tr><td class="tr-caption" style="text-align: center;"><i></i></td></tr></tbody></table></div>
<p>¿Qué es TensorFlow Lite? TensorFlow Lite es una forma de ejecutar localmente modelos de TensorFlow en dispositivos, compatible con dispositivos móviles, integrados, web y perimetrales. Por su compatibilidad con varias plataformas y las optimizaciones de rendimiento en el dispositivo, TensorFlow Lite es ideal para agregar al conjunto de herramientas de desarrollo de Flutter. Nuestro objetivo con este complemento es facilitar la integración de los modelos de TensorFlow Lite en las apps de Flutter a través de plataformas móviles, y actualmente estamos desarrollando la compatibilidad con computadoras de escritorio gracias a los esfuerzos de nuestra comunidad de desarrolladores. Puedes encontrar los modelos de TensorFlow Lite preentrenados en repositorios de modelos como <a href="https://www.kaggle.com/models?framework=tfLite" target="_blank">Kaggle Models</a> o <a href="https://www.kaggle.com/models?framework=tfLite" target="_blank">crear tus propios modelos personalizados de TensorFlow Lite</a>. </p>
<p>Veamos cómo puedes usar el complemento de TensorFlow Lite para Flutter en la clasificación de imágenes:</p>
<h2>Clasificación de imágenes de TensorFlow Lite con Flutter</h2>
<p>Primero, deberás instalar el complemento desde <a href="https://pub.dev/packages/tflite_flutter" target="_blank">pub.dev</a>. Una vez que lo instales, puedes cargar un modelo de TensorFlow Lite en tu app de Flutter y definir las formas de tensores de entrada y salida. Si usas el modelo MobileNet, el tensor de entrada será una imagen RGB de 224 por 224 y la salida será una lista de niveles de confianza de las etiquetas entrenadas.</p><table class="leading-snug" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: #f8f8f8; border-collapse: collapse; border: none; font-family: ui-sans-serif, system-ui, -apple-system, "system-ui", "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; line-height: 1.375; max-width: min(90ch, 100%); table-layout: fixed; text-indent: 0px; width: 880px;"><colgroup style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border-color: rgb(229, 231, 235); border-style: solid; border-width: 0px; box-sizing: border-box;"></colgroup><tbody style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border-color: rgb(229, 231, 235); border-style: solid; border-width: 0px; box-sizing: border-box; display: block; max-width: 100%; overflow-x: auto;"><tr style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: transparent; border-color: rgb(229, 231, 235); border-style: solid; border-width: 0px; box-sizing: border-box; height: 0px;"><td style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border-color: rgb(229, 231, 235); border-style: solid; border-width: 0px; box-sizing: border-box; padding: 4pt; vertical-align: top;"><code class="m-0 p-0 whitespace-pre-wrap font-monospace" id="code-output" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: transparent; border-color: rgb(229, 231, 235); border-style: solid; border-width: 0px; box-sizing: border-box; display: block; font-size: 12px; margin: 0px; padding: 0px; white-space-collapse: preserve; width: 80ch;"><span style="font-family: courier;"><span class="hljs-comment" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border-color: rgb(229, 231, 235); border-style: solid; border-width: 0px; box-sizing: border-box; color: dimgrey;">// Load model</span>
Future<<span class="hljs-keyword" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border-color: rgb(229, 231, 235); border-style: solid; border-width: 0px; box-sizing: border-box; color: #7928a1;">void</span>> <span class="hljs-title function_" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border-color: rgb(229, 231, 235); border-style: solid; border-width: 0px; box-sizing: border-box; color: #007faa;">_loadModel</span><span class="hljs-params" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border-color: rgb(229, 231, 235); border-style: solid; border-width: 0px; box-sizing: border-box; color: #aa5d00;">()</span> async {
<span class="hljs-type" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border-color: rgb(229, 231, 235); border-style: solid; border-width: 0px; box-sizing: border-box; color: #aa5d00;">final</span> <span class="hljs-variable" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border-color: rgb(229, 231, 235); border-style: solid; border-width: 0px; box-sizing: border-box; color: #d91e18;">options</span> <span class="hljs-operator" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border-color: rgb(229, 231, 235); border-style: solid; border-width: 0px; box-sizing: border-box;">=</span> InterpreterOptions();
<span class="hljs-comment" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border-color: rgb(229, 231, 235); border-style: solid; border-width: 0px; box-sizing: border-box; color: dimgrey;">// Load model from assets</span>
interpreter = await Interpreter.fromAsset(modelPath, options: options);
<span class="hljs-comment" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border-color: rgb(229, 231, 235); border-style: solid; border-width: 0px; box-sizing: border-box; color: dimgrey;">// Get tensor input shape [1, 224, 224, 3]</span>
inputTensor = interpreter.getInputTensors().first;
<span class="hljs-comment" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border-color: rgb(229, 231, 235); border-style: solid; border-width: 0px; box-sizing: border-box; color: dimgrey;">// Get tensor output shape [1, 1001]</span>
outputTensor = interpreter.getOutputTensors().first;
}</span></code></td></tr></tbody></table><p style="text-align: left;">Para que las cosas estén un poco más organizadas, también puedes cargar las etiquetas de los 1000 artículos para los que MobileNet está entrenado:</p><div><table class="leading-snug" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: #f8f8f8; border-collapse: collapse; border: none; font-family: ui-sans-serif, system-ui, -apple-system, "system-ui", "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; line-height: 1.375; max-width: min(90ch, 100%); table-layout: fixed; text-indent: 0px; width: 880px;"><colgroup style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border-color: rgb(229, 231, 235); border-style: solid; border-width: 0px; box-sizing: border-box;"></colgroup><tbody style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border-color: rgb(229, 231, 235); border-style: solid; border-width: 0px; box-sizing: border-box; display: block; max-width: 100%; overflow-x: auto;"><tr style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: transparent; border-color: rgb(229, 231, 235); border-style: solid; border-width: 0px; box-sizing: border-box; height: 0px;"><td style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border-color: rgb(229, 231, 235); border-style: solid; border-width: 0px; box-sizing: border-box; padding: 4pt; vertical-align: top;"><code class="m-0 p-0 whitespace-pre-wrap font-monospace" id="code-output" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: transparent; border-color: rgb(229, 231, 235); border-style: solid; border-width: 0px; box-sizing: border-box; display: block; font-size: 12px; margin: 0px; padding: 0px; white-space-collapse: preserve; width: 80ch;"><span style="font-family: courier;"><span class="hljs-comment" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border-color: rgb(229, 231, 235); border-style: solid; border-width: 0px; box-sizing: border-box; color: dimgrey;">// Load labels from assets</span>
Future<<span class="hljs-keyword" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border-color: rgb(229, 231, 235); border-style: solid; border-width: 0px; box-sizing: border-box; color: #7928a1;">void</span>> <span class="hljs-title function_" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border-color: rgb(229, 231, 235); border-style: solid; border-width: 0px; box-sizing: border-box; color: #007faa;">_loadLabels</span><span class="hljs-params" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border-color: rgb(229, 231, 235); border-style: solid; border-width: 0px; box-sizing: border-box; color: #aa5d00;">()</span> async {
<span class="hljs-type" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border-color: rgb(229, 231, 235); border-style: solid; border-width: 0px; box-sizing: border-box; color: #aa5d00;">final</span> <span class="hljs-variable" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border-color: rgb(229, 231, 235); border-style: solid; border-width: 0px; box-sizing: border-box; color: #d91e18;">labelTxt</span> <span class="hljs-operator" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border-color: rgb(229, 231, 235); border-style: solid; border-width: 0px; box-sizing: border-box;">=</span> await rootBundle.loadString(labelsPath);
labels = labelTxt.split(<span class="hljs-string" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border-color: rgb(229, 231, 235); border-style: solid; border-width: 0px; box-sizing: border-box; color: green;">'\n'</span>);
}</span><span face="ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace">
</span></code></td></tr></tbody></table></div><div><p>Para ser sucintos, omitamos algunos de los pasos del preprocesamiento, que igualmente puedes encontrar en este ejemplo de clasificación de imágenes del repositorio.</p>
<p>Cuando tengas todo listo para ejecutar la inferencia, puedes crear una nueva entrada y salida en función de las formas de tensores que definiste antes y luego ejecutar una llamada en el intérprete para obtener los resultados finales.</p><table class="leading-snug" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: #f8f8f8; border-collapse: collapse; border: none; font-family: ui-sans-serif, system-ui, -apple-system, "system-ui", "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; line-height: 1.375; max-width: min(90ch, 100%); table-layout: fixed; text-indent: 0px; width: 880px;"><colgroup style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border-color: rgb(229, 231, 235); border-style: solid; border-width: 0px; box-sizing: border-box;"></colgroup><tbody style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border-color: rgb(229, 231, 235); border-style: solid; border-width: 0px; box-sizing: border-box; display: block; max-width: 100%; overflow-x: auto;"><tr style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: transparent; border-color: rgb(229, 231, 235); border-style: solid; border-width: 0px; box-sizing: border-box; height: 0px;"><td style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border-color: rgb(229, 231, 235); border-style: solid; border-width: 0px; box-sizing: border-box; padding: 4pt; vertical-align: top;"><code class="m-0 p-0 whitespace-pre-wrap font-monospace" id="code-output" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: transparent; border-color: rgb(229, 231, 235); border-style: solid; border-width: 0px; box-sizing: border-box; display: block; font-size: 12px; margin: 0px; padding: 0px; white-space-collapse: preserve; width: 80ch;"><span style="font-family: courier;"><span class="hljs-comment" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border-color: rgb(229, 231, 235); border-style: solid; border-width: 0px; box-sizing: border-box; color: dimgrey;">// Run inference</span>
Future<<span class="hljs-keyword" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border-color: rgb(229, 231, 235); border-style: solid; border-width: 0px; box-sizing: border-box; color: #7928a1;">void</span>> <span class="hljs-title function_" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border-color: rgb(229, 231, 235); border-style: solid; border-width: 0px; box-sizing: border-box; color: #007faa;">runInference</span><span class="hljs-params" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border-color: rgb(229, 231, 235); border-style: solid; border-width: 0px; box-sizing: border-box; color: #aa5d00;">(
</span><span class="hljs-params" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border-color: rgb(229, 231, 235); border-style: solid; border-width: 0px; box-sizing: border-box;">List<List<List<</span><span class="hljs-params" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border-color: rgb(229, 231, 235); border-style: solid; border-width: 0px; box-sizing: border-box;"><span style="color: #792ba1;">num</span></span><span class="hljs-params" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border-color: rgb(229, 231, 235); border-style: solid; border-width: 0px; box-sizing: border-box;">>>> imageMatrix,</span><span class="hljs-params" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border-color: rgb(229, 231, 235); border-style: solid; border-width: 0px; box-sizing: border-box; color: #aa5d00;">
)</span> async {
<span class="hljs-comment" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border-color: rgb(229, 231, 235); border-style: solid; border-width: 0px; box-sizing: border-box; color: dimgrey;">// Tensor input [1, 224, 224, 3]</span>
<span class="hljs-type" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border-color: rgb(229, 231, 235); border-style: solid; border-width: 0px; box-sizing: border-box; color: #aa5d00;">final</span> <span class="hljs-variable" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border-color: rgb(229, 231, 235); border-style: solid; border-width: 0px; box-sizing: border-box; color: #d91e18;">input</span> <span class="hljs-operator" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border-color: rgb(229, 231, 235); border-style: solid; border-width: 0px; box-sizing: border-box;">=</span> [imageMatrix];
<span class="hljs-comment" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border-color: rgb(229, 231, 235); border-style: solid; border-width: 0px; box-sizing: border-box; color: dimgrey;">// Tensor output [1, 1001]</span>
<span class="hljs-type" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border-color: rgb(229, 231, 235); border-style: solid; border-width: 0px; box-sizing: border-box; color: #aa5d00;">final</span> <span class="hljs-variable" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border-color: rgb(229, 231, 235); border-style: solid; border-width: 0px; box-sizing: border-box; color: #d91e18;">output</span> <span class="hljs-operator" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border-color: rgb(229, 231, 235); border-style: solid; border-width: 0px; box-sizing: border-box;">=</span> [List<<span class="hljs-type" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border-color: rgb(229, 231, 235); border-style: solid; border-width: 0px; box-sizing: border-box; color: #aa5d00;">int</span>>.filled(<span class="hljs-number" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border-color: rgb(229, 231, 235); border-style: solid; border-width: 0px; box-sizing: border-box; color: #aa5d00;">1001</span>, <span class="hljs-number" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border-color: rgb(229, 231, 235); border-style: solid; border-width: 0px; box-sizing: border-box; color: #aa5d00;">0</span>)];
<span class="hljs-comment" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border-color: rgb(229, 231, 235); border-style: solid; border-width: 0px; box-sizing: border-box; color: dimgrey;"><span> </span>// Run inference</span>
<span> </span>interpreter.run(input, output);
<span class="hljs-comment" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border-color: rgb(229, 231, 235); border-style: solid; border-width: 0px; box-sizing: border-box; color: dimgrey;"><span> </span>// Get first output tensor</span>
<span class="hljs-type" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border-color: rgb(229, 231, 235); border-style: solid; border-width: 0px; box-sizing: border-box; color: #aa5d00;"><span> </span>final</span> <span class="hljs-variable" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border-color: rgb(229, 231, 235); border-style: solid; border-width: 0px; box-sizing: border-box; color: #d91e18;">result</span> <span class="hljs-operator" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border-color: rgb(229, 231, 235); border-style: solid; border-width: 0px; box-sizing: border-box;">=</span> output.first;</span><span face="ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace">
</span></code></td></tr></tbody></table>
<p>Ahora que tienes los resultados, puedes hacerlos coincidir con tus etiquetas y usarlos en tu app.</p>
<div><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody><tr><td style="text-align: center;"><center><img alt="Imagen en movimiento de un feed de cámara en vivo que muestra la identificación correcta de varios objetos en la app" border="0" data-original-height="1504" data-original-width="720" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjVgsmqQrHHWe-t2Sh9NYURx7PJXkxCxkVfvNGNOc3VrHyHB3bxCkzUegDWqea9twNo62rQzLngtQ4Tq7L-EhyHJv4RXyewL_hp1xH48JVsg8xfaboptEm-DliMpCB6Qj7v6T7WrAIpPtt9RpK1BAmaxkLsImzkkSuj2X-miVDiauiKKeZi-fFQzgJRU4U/s1600/image1.gif" style="width: 55%;" td=""></center></td></tr><tr><td class="tr-caption" style="text-align: center;"><i></i></td></tr></tbody></table></div>
<h2>Lo que viene</h2>
<p>Para ver qué más puedes hacer con el complemento de TensorFlow Lite para Flutter, echa un vistazo al <a href="https://github.com/tensorflow/flutter-tflite" target="_blank">repositorio oficial de GitHub</a>, donde puedes encontrar ejemplos de clasificación de texto, superresolución, transferencia de estilo y mucho más.</p>
<p>Además, estamos trabajando en un nuevo complemento específico para <a href="https://developers.google.com/mediapipe" target="_blank">MediaPipe Tasks</a>, una herramienta de código reducido para realizar fácilmente tareas comunes de aprendizaje automático en el dispositivo. Estas tareas incluyen la clasificación de imágenes y la detección de objetos, como acabas de aprender, así como la clasificación de audio, la detección de puntos de referencia faciales y el reconocimiento de gestos, entre otras.</p>
<p>Esperamos que hagas un montón de cosas interesantes, ¡así que asegúrate de compartirlas con <a href="https://twitter.com/googledevs" target="_blank">@googledevs</a>, <a href="https://twitter.com/TensorFlow" target="_blank">@TensorFlow</a> y tus comunidades de desarrolladores!</p>
<p></p><p></p></div>
</div>
</div>
</body></html>Google Developers LATAMhttp://www.blogger.com/profile/05105089662475084319noreply@blogger.com0tag:blogger.com,1999:blog-218264512262097577.post-87803145261912844122023-09-04T16:00:00.000-03:002023-09-05T23:15:53.454-03:00<html>
<head>
<meta charset="UTF-8" />
<meta name="original_url" content="https://cloud.google.com/blog/products/application-modernization/richard-seroter-on-the-need-to-durable-systems/"/>
<meta name="original_url" content="https://cloud.google.com/blog/products/application-modernization/richard-seroter-on-the-need-to-durable-systems/"/>
<style nonce="A1F4qeNNkFfh-WNeqQvTMQ">@font-face{font-family:'Product Sans';font-style:normal;font-weight:400;src:url(//fonts.gstatic.com/s/productsans/v9/pxiDypQkot1TnFhsFMOfGShVF9eL.ttf)format('truetype');}@font-face{font-family:'Google Sans';font-style:normal;font-weight:400;src:url(//fonts.gstatic.com/s/googlesans/v14/4UaGrENHsxJlGDuGo1OIlL3Owps.ttf)format('truetype');}@font-face{font-family:'Google Sans';font-style:normal;font-weight:500;src:url(//fonts.gstatic.com/s/googlesans/v14/4UabrENHsxJlGDuGo1OIlLU94YtzCwM.ttf)format('truetype');}@font-face{font-family:'Google Sans';font-style:normal;font-weight:700;src:url(//fonts.gstatic.com/s/googlesans/v14/4UabrENHsxJlGDuGo1OIlLV154tzCwM.ttf)format('truetype');}@font-face{font-family:'Google Sans Display';font-style:normal;font-weight:400;src:url(//fonts.gstatic.com/s/googlesansdisplay/v13/ea8FacM9Wef3EJPWRrHjgE4B6CnlZxHVDv79pA.ttf)format('truetype');}@font-face{font-family:'Google Sans Display';font-style:normal;font-weight:500;src:url(//fonts.gstatic.com/s/googlesansdisplay/v13/ea8IacM9Wef3EJPWRrHjgE4B6CnlZxHVBg3etBD7SQ.ttf)format('truetype');}@font-face{font-family:'Google Sans Display';font-style:normal;font-weight:700;src:url(//fonts.gstatic.com/s/googlesansdisplay/v13/ea8IacM9Wef3EJPWRrHjgE4B6CnlZxHVBkXYtBD7SQ.ttf)format('truetype');}</style>
</head><body>
<article class="nRhiJb-qJTHM" jsaction="rcuQ6b:npT2md" jscontroller="kxO7ab"><section class="nRhiJb-DARUcf"><div class="Wdmc0c nRhiJb-DbgRPb-wNfPc-cGMI2b"><div class="Qwf2Db-MnozTc Qwf2Db-MnozTc-OWXEXe-MnozTc-qWD73c nRhiJb-BFbNVe-r8s4j-bMElCd dIsJJe" track-name="application modernization" track-type="tag">Modernización de apps</div><div class="nRhiJb-ObfsIf"><div class="nRhiJb-kR0ZEf-OWXEXe-GV1x9e-R6PoUb"></div><div class="nRhiJb-kR0ZEf-OWXEXe-GV1x9e-EehZO nRhiJb-fmcmS-oXtfBe"><h1 class="Qwf2Db-MnozTc Qwf2Db-MnozTc-OWXEXe-MnozTc-ibL1re"><div class="Qwf2Db-MnozTc Qwf2Db-MnozTc-OWXEXe-MnozTc-ibL1re"><span class="FewWi"></span>El imperativo de la modernización: la belleza del aburrimiento</div></h1></div></div><div class="nRhiJb-fmcmS-oXtfBe dEogG">22 de agosto de 2023</div></div></section><div class="EKklye"><div class="nRhiJb-DARUcf ZWw7T"><div class="npzWPc"><div class="dzoHJ"><div class="nRhiJb-DX2B6 nRhiJb-DX2B6-OWXEXe-h30Snd"><div class="nRhiJb-j5y3u"><ul class="nRhiJb-Qijihe phRaUe" role="list"><li class="hpHPGf"><a class="nRhiJb-ARYxNe"text=The%20Modernization%20Imperative%20%28TMI%29:%20The%20beauty%20in%20boring%20@googlecloud&url=https://cloud.google.com/blog/products/application-modernization/richard-seroter-on-the-need-to-durable-systems"
role="presentation" aria-hidden="true"><path d="M20 4H4c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm-.8 2L12 10.8 4.8 6h14.4zM4 18V7.87l8 5.33 8-5.33V18H4z"></path></svg></a></li></ul></div></div></div></div></div><div><section class="nRhiJb-RWrDld WWjeSb"><div class="nRhiJb-DbgRPb-wNfPc-ma6Yeb nRhiJb-DbgRPb-wNfPc-cGMI2b"><div class="nRhiJb-DARUcf"><div class="VI2oYd"><section class="PBkdHd "><img class=" rFf1Dd" src="https://storage.googleapis.com/gweb-cloudblog-publish/images/TMI_Blog_header_2436x1200_V3-01.max-2600x2600.png" alt="https://storage.googleapis.com/gweb-cloudblog-publish/images/TMI_Blog_header_2436x1200_V3-01.max-2600x2600.png" loading="lazy"></section></div></div></div></section><section class="nRhiJb-DARUcf"><div class="nRhiJb-DbgRPb-wNfPc-ma6Yeb nRhiJb-DbgRPb-wNfPc-cGMI2b"><section class="DA9Qj nRhiJb-ObfsIf nRhiJb-fmcmS-oXtfBe"><div class="nRhiJb-kR0ZEf-OWXEXe-GV1x9e-c5RTEf"></div><div class="nRhiJb-kR0ZEf-OWXEXe-GV1x9e-qWD73c"><h5 class="cHE8Ub Qwf2Db-MnozTc Qwf2Db-MnozTc-OWXEXe-MnozTc-qWD73c">Richard Seroter</h5><p class="nRhiJb-qJTHM khCp7b">Director, estrategias comerciales y habilitación</p></div></section></div></section><div class="nRhiJb-DARUcf"><div class="nRhiJb-ObfsIf nRhiJb-DbgRPb-wNfPc-ma6Yeb nRhiJb-DbgRPb-qWD73c-cGMI2b"><div class="nRhiJb-kR0ZEf-OWXEXe-GV1x9e-ibL1re"><div class="aLW4J" track-metadata-module="left rail"><h5 class="qZDXV Qwf2Db-MnozTc Qwf2Db-MnozTc-OWXEXe-MnozTc-wNfPc">Google Cloud Next</h5><p class="nRhiJb-cHYyed Mrfygc nRhiJb-BP2Omd-ma6Yeb-KE6vqe nRhiJb-DbgRPb-R6PoUb-cGMI2b">Está abierta la inscripción a nuestro evento insignia, del 29 al 31 de agosto.</p><a class="nRhiJb-LgbsSe nRhiJb-LgbsSe-OWXEXe-CNusmb-o6Shpd " href="https://cloud.withgoogle.com/next?utm_source=cgc-blog&utm_medium=blog&utm_campaign=FY23-Q3-global-ENDM33-physicalevent-er-next-2023-mc&utm_content=left-hand-cta&utm_term=-" track-metadata-module="left rail" track-metadata-module_headline="google cloud next" track-name="register" track-type="button" track-metadata-position="cta" track-metadata-eventdetail="cloud.withgoogle.com/next?utm_source=cgc-blog&utm_medium=blog&utm_campaign=FY23-Q3-global-ENDM33-physicalevent-er-next-2023-mc&utm_content=left-hand-cta&utm_term=-">Regístrate </a></div></div><div class="OYL9D nRhiJb-kR0ZEf-OWXEXe-GV1x9e-OiUrBf" jsname="tx2NYc"><section class="Wy08Ac nRhiJb-qJTHM-OWXEXe-hJDwNd nRhiJb-DbgRPb-II5mzb-cGMI2b"><span class="dQQu7c" jsaction="rcuQ6b:npT2md" jscontroller="YSybTb" data-track-type="" soy-skip="" ssk="5:kbe95"><p>En este momento, en tu bolsillo hay algo que tiene más poder de cómputo que naves espaciales a quince mil millones de kilómetros de distancia de la Tierra. No, no es tu teléfono celular: ¡es el llavero de tu auto! Las sondas <a href="https://solarsystem.nasa.gov/missions/voyager-1/in-depth/" target="_blank">Voyager 1</a> y <a href="https://solarsystem.nasa.gov/missions/voyager-2/in-depth/" target="_blank">Voyager 2</a> se lanzaron en 1977, y cuarenta y cinco años después, estos pequeños bribones todavía funcionan y envían datos a la Tierra mientras se mueven a través del espacio gélido y vacío a más de <a href="https://twitter.com/NASAVoyager/status/1659244080172515328" target="_blank">cuarenta y ocho mil kilómetros por hora</a>. ¿Crees que tu llavero seguirá funcionando en 2068? También es sorprendente que los romanos crearan un<a href="https://news.mit.edu/2023/roman-concrete-durability-lime-casts-0106" target="_blank"> hormigón tan duradero</a> que, dos mil años después, las estructuras construidas con él todavía se utilicen. Mientras tanto, en las calles cerca de mi casa se forman baches si un conejo estornuda sobre ellos. </p><p>Soy fanático de la durabilidad porque te permite pensar con originalidad. Si supiera que mis cimientos son seguros, me inclinaría más por superar los límites para innovar y salir de mi zona de confort porque el entorno podría manejarlo. La durabilidad debe ser el tema central de la conversación sobre la modernización de apps, ya que cada app y entorno que creamos para nuestros clientes es el primer paso de su tecnología y estrategia comercial de nueva generación. Los objetivos y sueños de toda una organización se basan en las arquitecturas tecnológicas que estamos construyendo y debemos asegurarnos de que la base tenga la fuerza necesaria para soportar todo lo que depare el futuro, y más también.</p><p>En el momento de seleccionar las tecnologías fundamentales adecuadas para las apps modernas, es crucial tener en cuenta la longevidad y la fiabilidad de la tecnología. ¿Habrá un nuevo y emocionante <a href="https://www.infoworld.com/article/3695530/servicenow-hugging-faces-free-starcoder-llm-takes-on-copilot-codewhisperer.html" target="_blank">modelo grande de lenguaje de código abierto</a> en un año? ¿O una <a href="https://medium.com/paypal-tech/unlocking-the-power-of-junodb-paypals-key-value-store-goes-open-source-ee85f935bdc1" target="_blank">nueva base de datos</a> interesante de PayPal? ¿Cómo elijo algo del <a href="https://landscape.cncf.io/" target="_blank">diagrama</a> del panorama de CNCF, que está en constante crecimiento? Aquí es donde entra en juego la fortaleza de las comunidades de código abierto y el respaldo de los proveedores. Por ejemplo, Kubernetes, PostgreSQL y Java resistieron el paso del tiempo gracias a sus conjuntos de funciones, comunidades dedicadas y un sólido soporte de proveedores.</p><p>Kubernetes proporciona una solución escalable para administrar e implementar apps y cuenta con el fuerte respaldo de Google: Hasta julio, <i>hicimos más de 1.000.000 de contribuciones al proyecto k8s, 2,3 veces más que cualquier otro contribuyente</i>. Por su parte, PostgreSQL, es una de las bases de datos de código abierto más avanzadas del mundo y ofrece un conjunto completo de funciones que satisfacen una amplia gama de necesidades de procesamiento de datos. También cuenta con una comunidad vibrante que mejora constantemente sus capacidades. Y Java, un lenguaje de programación de uso general, ha sido un elemento básico en la comunidad de desarrollo durante décadas, en las que proporcionó una plataforma confiable para construir apps robustas.</p><p>Elegir una tecnología establecida no solo trae el beneficio de un conjunto de funciones maduro, sino también la garantía de continuidad. Una base de datos o un modelo de lenguaje nuevo puede ser prometedor, pero carecen del historial de estas tecnologías probadas. El riesgo de adoptar estas nuevas tecnologías es su posible interrupción o falta de soporte, lo que podría poner en peligro la estabilidad y la longevidad de tu app. </p><p>El uso de papel de aluminio <a href="https://www.businessinsider.com/voyager-kitchen-aluminum-wrap-radiation-short-circuit-2017-9" target="_blank">por parte del equipo de la Voyager</a> es un gran ejemplo de este principio. Eligieron una solución simple, confiable y disponible para proteger los instrumentos sensibles durante su misión. La elección del papel de aluminio podría no haber sido la más vanguardista o emocionante, pero fue práctica, confiable y, en última instancia, exitosa. Del mismo modo, al elegir las tecnologías fundamentales para sus apps modernas, a veces la opción “aburrida” es la mejor. No se trata de perseguir las últimas tendencias; se trata de elegir lo que funciona y resiste el paso del tiempo.</p><p>El respaldo de los proveedores es otra de las cuestiones importantes que se deben considerar al elegir las tecnologías fundamentales. Un proveedor de plataforma confiable que ejecute estas tecnologías garantiza un Acuerdo de nivel de servicio (ANS) de largo tiempo de actividad. Por ejemplo, <a href="https://cloud.google.com/kubernetes-engine/sla">Google Kubernetes Engine (GKE)</a> ofrece un ANS de tiempo de actividad del 99,95%, mientras que <a href="https://cloud.google.com/bigtable/sla">Bigtable</a> “simplemente funciona” y <a href="https://cloud.google.com/storage/docs/faq#policy">Cloud Storage</a> no pierde datos gracias a un diseño que admite una durabilidad anual del 99,9999999%.</p><h3>Aburrido no significa malo</h3><p>Esto no quiere decir que no debamos experimentar con nuevas tecnologías y alentar a nuestros clientes a hacer lo mismo. Todo el mundo necesita una <a href="https://future.battery.com/blog/business-development/is-your-enterprise-innovation-strategy-tired-or-wired-our-advice-move-quickly-and-partner-with-early-stage-tech/" target="_blank">estrategia de innovación</a>. En este punto, es útil el concepto de un “espectro de innovación”. Este espectro representa diferentes grados de innovación tecnológica que las empresas pueden emplear en función de sus necesidades y capacidades específicas. En un extremo del espectro, está la innovación incremental, que implica hacer pequeñas mejoras o extensiones en los productos, servicios o procesos existentes. En el otro extremo, está la innovación radical o disruptiva, que implica crear productos o servicios completamente nuevos que pueden afectar industrias enteras.</p><p>Un ejemplo clásico de equilibrar la tecnología de vanguardia con la tecnología “aburrida” o heredada se ve en muchas instituciones financieras. Pueden usar IA y ML para la detección de fraudes o el análisis predictivo, <a href="https://www.forbes.com/sites/adelynzhou/2017/06/30/financial-services-industry-banks-artificial-intelligence-slow-adoption/" target="_blank">mientras siguen confiando en tecnologías probadas y verdaderas</a> en sus sistemas bancarios centrales. Esta combinación de tecnologías nuevas y antiguas les permite beneficiarse de los últimos avances sin poner en peligro la estabilidad y la fiabilidad de sus operaciones críticas. Sin embargo, como la <a href="https://www.insiderintelligence.com/content/banks-losing-on-new-customers-must-bring-innovation-customer-experience" target="_blank">industria bancaria está descubriendo</a>, eso también puede correr el riesgo de sofocar la innovación y puede hacer que los clientes busquen en otra parte.</p><p>Para los desarrolladores, las plataformas basadas en Kubernetes de Google Cloud presentan un equilibrio similar entre innovación y estabilidad. Por ejemplo, los investigadores pueden aprovechar el uso compartido de GPU de vanguardia en GKE para <a href="https://cloud.google.com/blog/products/containers-kubernetes/gke-gpu-sharing-helps-scientists-quest-for-neutrinos">explorar los orígenes del universo</a>, mientras que la BBC utiliza contenedores sin servidor <a href="https://cloud.google.com/run">Cloud Run</a> para mantenerse al día con las demandas de <a href="https://cloud.google.com/blog/products/serverless/how-the-bbc-uses-cloud-run-and-bigquery-to-process-logs">un día de muchas noticias</a>. </p><p>Adoptar las prácticas recomendadas, como la ingeniería de plataformas, puede proporcionar una base sólida para implementar nuevas tecnologías. La ingeniería de plataformas se centra en crear una plataforma estable, escalable y segura, que permita la implementación rápida de apps. GitOps es otra práctica importante que implica el uso de Git como fuente única de referencias para la infraestructura y las apps declarativas. Con Git como base de los flujos de procesamiento de entrega, los desarrolladores pueden usar herramientas familiares para realizar solicitudes de extracción. Los cambios se pueden implementar o revertir fácilmente, lo que facilita el proceso de adopción de nuevas tecnologías.</p><p>En lo que respecta al desarrollo de apps modernas, los desarrolladores deben poder confiar en que las tecnologías fundamentales que elijan sean fiables y duraderas. Sin esta garantía, los desarrolladores pueden dudar en asumir riesgos o explorar soluciones creativas. Para darles la confianza que necesitan, una estrategia de ingeniería de plataformas efectiva puede proporcionar una base sólida para implementar nuevas tecnologías, al tiempo que garantiza la estabilidad y la seguridad.</p><p>El aburrimiento puede ser hermoso, especialmente si estás creando para el largo plazo. Más allá de lo que estés desarrollando, desde carreteras y cohetes hasta microservicios o arquitectura de red, la estructura fundamental debe soportar todo lo que el futuro concebible pueda imponer. Una base sólida y duradera ofrece a los desarrolladores las capacidades que necesitan para superar los límites y la confiabilidad que necesitan para que su creación siga avanzando, a 24 mil millones de kilómetros de distancia.</p></span></section><section class="kcBhad"><section class="Fabbec"><span class="WrMNjb">Publicado en</span><ul class="FzXI4e"><li class="I4B51b"><a href="https://cloud.google.com/blog/products/application-modernization" track-metadata-position="body" track-metadata-eventdetail="cloud.google.com/blog/products/application-modernization" track-metadata-module="tag list" track-metadata-module_headline="posted in">Modernización de apps</a></li><li class="I4B51b"><a href="https://cloud.google.com/blog/products/containers-kubernetes" track-metadata-position="body" track-metadata-eventdetail="cloud.google.com/blog/products/containers-kubernetes" track-metadata-module="tag list" track-metadata-module_headline="posted in">Contenedores y Kubernetes</a></li><li class="I4B51b"><a href="https://cloud.google.com/blog/topics/tmi" track-metadata-position="body" track-metadata-eventdetail="cloud.google.com/blog/topics/tmi" track-metadata-module="tag list" track-metadata-module_headline="posted in">TMI</a></li></ul></section></section></div></div></div></div></div><section class="nRhiJb-DARUcf " track-metadata-module="related articles" track-metadata-module_headline="related articles"><div class="nRhiJb-DbgRPb-c5RTEf-ma6Yeb nRhiJb-DbgRPb-wNfPc-cGMI2b"><h5 class="Qwf2Db-MnozTc Qwf2Db-MnozTc-OWXEXe-MnozTc-wNfPc nRhiJb-DbgRPb-II5mzb-cGMI2b">Artículos relacionados</h5><section class="m9cUGf HGev3 nJD2Qe nRhiJb-ObfsIf"><div class=" QaGyvd nRhiJb-kR0ZEf-OWXEXe-GV1x9e-c5RTEf nRhiJb-kR0ZEf-OWXEXe-GV1x9e-qWD73c-V2iZpe"><div class="mA0uBe"><a href="https://cloud.google.com/blog/products/infrastructure-modernization/google-hardware-comes-to-life-at-google-cloud-next" class="lD2oe" track-name="enter the hardware-verse: google hardware comes to life at google cloud next" track-type="card" track-metadata-eventdetail="cloud.google.com/blog/products/infrastructure-modernization/google-hardware-comes-to-life-at-google-cloud-next"><div class="AhkbS "><div class="hqnDEf"><section class="PBkdHd "><img class=" D5RK8d" src="https://storage.googleapis.com/gweb-cloudblog-publish/images/Google_Cloud_Next_1.max-700x700.png" alt="https://storage.googleapis.com/gweb-cloudblog-publish/images/Google_Cloud_Next_1.max-700x700.png" loading="lazy"></section></div><div class="JUOx5b"><div class="Qwf2Db-MnozTc Qwf2Db-MnozTc-OWXEXe-MnozTc-qWD73c nRhiJb-DbgRPb-c5RTEf-ma6Yeb nRhiJb-BFbNVe-r8s4j-bMElCd FI6Gl nRhiJb-fmcmS-oXtfBe" track-name="application modernization" track-type="tag">Modernización de apps</div><h5 class="Qwf2Db-MnozTc HGFKtc Qwf2Db-MnozTc-OWXEXe-MnozTc-wNfPc">Ingresa al universo hardware: El hardware de Google cobra vida en Google Cloud Next</h5><p class="nRhiJb-cHYyed dTIXyb nRhiJb-DbgRPb-R6PoUb-ma6Yeb">Por Cameron Peron • Lectura de 3 minutos</p></div></div></a></div></div><div class=" QaGyvd nRhiJb-kR0ZEf-OWXEXe-GV1x9e-c5RTEf nRhiJb-kR0ZEf-OWXEXe-GV1x9e-qWD73c-V2iZpe"><div class="mA0uBe"><a href="https://cloud.google.com/blog/products/application-modernization/next-23-breakout-sessions-for-devops-and-sre-pros" class="lD2oe" track-name="calling all devops it ops platform engineers and sres: 5 can’t-miss breakout sessions at next 23" track-type="card" track-metadata-eventdetail="cloud.google.com/blog/products/application-modernization/next-23-breakout-sessions-for-devops-and-sre-pros"><div class="AhkbS "><div class="hqnDEf"><section class="PBkdHd "><img class=" D5RK8d" src="https://storage.googleapis.com/gweb-cloudblog-publish/images/Google_Cloud_Next_2.max-700x700.png" alt="https://storage.googleapis.com/gweb-cloudblog-publish/images/Google_Cloud_Next_2.max-700x700.png" loading="lazy"></section></div><div class="JUOx5b"><div class="Qwf2Db-MnozTc Qwf2Db-MnozTc-OWXEXe-MnozTc-qWD73c nRhiJb-DbgRPb-c5RTEf-ma6Yeb nRhiJb-BFbNVe-r8s4j-bMElCd FI6Gl nRhiJb-fmcmS-oXtfBe" track-name="application modernization" track-type="tag">Modernización de apps</div><h5 class="Qwf2Db-MnozTc HGFKtc Qwf2Db-MnozTc-OWXEXe-MnozTc-wNfPc">Llamado a todos los DevOps, IT Ops, ingenieros de plataformas y SRE: 5 sesiones grupales imperdibles en Next ‘23</h5><p class="nRhiJb-cHYyed dTIXyb nRhiJb-DbgRPb-R6PoUb-ma6Yeb">Por Ning Ge • Lectura de 3 minutos</p></div></div></a></div></div><div class=" QaGyvd nRhiJb-kR0ZEf-OWXEXe-GV1x9e-c5RTEf nRhiJb-kR0ZEf-OWXEXe-GV1x9e-qWD73c-V2iZpe"><div class="mA0uBe"><a href="https://cloud.google.com/blog/products/application-modernization/api-management-with-your-cloud-run-envoy-proxy" class="lD2oe" track-name="self-service api consumer onboarding for cloud run with sidecar containers and apigee" track-type="card" track-metadata-eventdetail="cloud.google.com/blog/products/application-modernization/api-management-with-your-cloud-run-envoy-proxy"><div class="AhkbS "><div class="hqnDEf"><section class="PBkdHd "><img class=" D5RK8d" src="https://storage.googleapis.com/gweb-cloudblog-publish/images/DO_NOT_USE_Wfx45fA.max-700x700.jpg" alt="https://storage.googleapis.com/gweb-cloudblog-publish/images/DO_NOT_USE_Wfx45fA.max-700x700.jpg" loading="lazy"></section></div><div class="JUOx5b"><div class="Qwf2Db-MnozTc Qwf2Db-MnozTc-OWXEXe-MnozTc-qWD73c nRhiJb-DbgRPb-c5RTEf-ma6Yeb nRhiJb-BFbNVe-r8s4j-bMElCd FI6Gl nRhiJb-fmcmS-oXtfBe" track-name="application modernization" track-type="tag">Modernización de apps</div><h5 class="Qwf2Db-MnozTc HGFKtc Qwf2Db-MnozTc-OWXEXe-MnozTc-wNfPc">Integración del consumidor de la API de autoservicio para Cloud Run con contenedores sidecar y Apigee</h5><p class="nRhiJb-cHYyed dTIXyb nRhiJb-DbgRPb-R6PoUb-ma6Yeb">Por Daniel Strebel • Lectura de 3 minutos</p></div></div></a></div></div><div class=" QaGyvd nRhiJb-kR0ZEf-OWXEXe-GV1x9e-c5RTEf nRhiJb-kR0ZEf-OWXEXe-GV1x9e-qWD73c-V2iZpe"><div class="mA0uBe"><a href="https://cloud.google.com/blog/products/sap-google-cloud/sap-hana-on-google-cloud-with-suse" class="lD2oe" track-name="future-proofing your sap hana deployment on google cloud with suse for scale-out high availability" track-type="card" track-metadata-eventdetail="cloud.google.com/blog/products/sap-google-cloud/sap-hana-on-google-cloud-with-suse"><div class="AhkbS "><div class="hqnDEf"><section class="PBkdHd "><img class=" D5RK8d" src="https://storage.googleapis.com/gweb-cloudblog-publish/images/partners_2022.max-700x700.jpg" alt="https://storage.googleapis.com/gweb-cloudblog-publish/images/partners_2022.max-700x700.jpg" loading="lazy"></section></div><div class="JUOx5b"><div class="Qwf2Db-MnozTc Qwf2Db-MnozTc-OWXEXe-MnozTc-qWD73c nRhiJb-DbgRPb-c5RTEf-ma6Yeb nRhiJb-BFbNVe-r8s4j-bMElCd FI6Gl nRhiJb-fmcmS-oXtfBe" track-name="sap on google cloud" track-type="tag">SAP en Google Cloud</div><h5 class="Qwf2Db-MnozTc HGFKtc Qwf2Db-MnozTc-OWXEXe-MnozTc-wNfPc">Prepara para el futuro tu implementación de SAP HANA en Google Cloud con SUSE para una alta disponibilidad escalable</h5><p class="nRhiJb-cHYyed dTIXyb nRhiJb-DbgRPb-R6PoUb-ma6Yeb">Por Dmitrij Vorobiev • Lectura de 4 minutos</p></div></div></a></div></div></section></div></section></article>
</body></html>Google Developers LATAMhttp://www.blogger.com/profile/05105089662475084319noreply@blogger.com0tag:blogger.com,1999:blog-218264512262097577.post-84663969030710330522023-09-01T15:57:00.000-03:002023-09-05T15:59:29.632-03:00
<html>
<head>
<meta charset="UTF-8" />
<meta name="original_url" content="https://android-developers.googleblog.com/2023/08/introducing-jetpack-emoji-picker.html"/>
<meta name="original_url" content="https://android-developers.googleblog.com/2023/08/introducing-jetpack-emoji-picker.html"/>
<style id="page-skin-1" type="text/css"><!--
body {
font-family: Roboto, sans-serif;
font-weight: 400;
font-size: 16px;
line-height: 28px;
-webkit-font-smoothing: antialiased;
color: #202124
}
h1 {
font-family: Android Euclid, Roboto, sans-serif;
font-size: 44px;
font-weight: 500;
line-height: 61.6px
}
h2 {
font-size: 30px;
line-height: 40px
}
h2,
h3 {
font-family: Android Euclid, Roboto, sans-serif;
font-weight: 500
}
h3 {
font-size: 24px;
line-height: 32px
}
h4 {
font-family: Android Euclid, Roboto, sans-serif;
font-size: 20px;
font-weight: 500;
line-height: 26px
}
h5 {
font-size: 16px;
line-height: 24px
}
h5,
h6 {
font-family: Roboto, sans-serif;
font-weight: 600
}
h6 {
font-size: 14px;
line-height: 22px
}
.display {
font-family: Roboto, sans-serif;
font-size: 48px;
font-weight: 600;
line-height: 67.2px
}
.hidden-text {
height: 1px;
overflow: hidden;
pointer-events: none;
position: absolute;
top: -10px;
width: 1px
}
img,
video {
border: 0;
height: auto;
max-width: 100%
}
body {
position: relative;
min-height: 100vh
}
body.no-scroll {
overflow: hidden
}
a {
color: #4184f3;
text-decoration: none
}
a:focus,
a:focus-visible {
outline-offset: -2px
}
.content-wrap {
padding-top: 200px;
max-width: 800px;
margin: auto;
display: -webkit-box;
display: -webkit-flex;
display: -ms-flexbox;
display: flex;
-webkit-box-orient: vertical;
-webkit-box-direction: normal;
-webkit-flex-direction: column;
-ms-flex-direction: column;
flex-direction: column;
-webkit-box-align: center;
-webkit-align-items: center;
-ms-flex-align: center;
align-items: center
}
@media only screen and (max-width:915px) {
.content-wrap {
padding-top: 100px
}
}
.full-width {
width: 100%
}
.icon-link {
height: 42px;
width: 132px;
border-radius: 80px;
display: -webkit-inline-box;
display: -webkit-inline-flex;
display: -ms-inline-flexbox;
display: inline-flex;
-webkit-box-pack: center;
-webkit-justify-content: baseline;
-ms-flex-pack: center;
justify-content: baseline;
-webkit-box-align: center;
-webkit-align-items: center;
-ms-flex-align: center;
align-items: center;
-webkit-transition: background-color .2s linear;
transition: background-color .2s linear;
background: transparent;
border: none;
color: black !important
}
.icon-link:hover {
background-color: hsla(213, 7%, 76%, .2)
}
.icon-link:focus {
background-color: hsla(213, 7%, 76%, .26)
}
.icon-link:active {
background-color: hsla(213, 7%, 76%, .32)
}
.adb-container {
margin: 40px auto;
padding: 0 40px;
position: relative;
width: auto;
max-width: 1420px
}
@media only screen and (max-width:767px) {
.adb-container {
margin: 24px auto;
padding: 0 20px
}
}
.adb-container--large {
margin: 40px auto;
padding: 0 40px;
position: relative;
width: auto
}
@media only screen and (max-width:767px) {
.adb-container--large {
margin: 24px auto;
padding: 0 20px
}
}
.adb-container--flex-horizontal {
display: -webkit-box;
display: -webkit-flex;
display: -ms-flexbox;
display: flex
}
.section,
body {
margin: 0
}
.adb-card {
position: relative;
background: #fff;
-webkit-box-sizing: border-box;
box-sizing: border-box;
border-radius: 8px;
margin: 40px 0;
padding: 20px;
overflow: hidden;
-webkit-backface-visibility: hidden;
backface-visibility: hidden;
-webkit-transform: translateZ(0);
transform: translateZ(0);
-webkit-transition: opacity .2s linear, -webkit-box-shadow .2s linear;
transition: opacity .2s linear, -webkit-box-shadow .2s linear;
transition: box-shadow .2s linear, opacity .2s linear;
transition: box-shadow .2s linear, opacity .2s linear, -webkit-box-shadow .2s linear
}
.divider {
border: none;
height: 1px;
color: #DADCE0;
background-color: #DADCE0;
margin: 0 20px;
}
.adb-card:first-child {
background-color: #d7effe;
border: none;
padding: 32px 24px 32px;
margin: 40px 20px 60px;
}
@media only screen and (max-width:850px) {
.adb-card {
max-height: unset;
padding: 0 20px
}
.adb-card:first-child {
margin-bottom: 40px;
}
}
@media only screen and (max-width:600px) {
.adb-card:first-child {
margin: 0 -20px 40px;
}
.adb-card {
border-radius: 0;
padding: 0;
}
.divider {
margin: 0;
}
.content-wrap {
padding-top: 54px;
}
}
.adb-card:focus-within,
.adb-card:hover {
-webkit-box-shadow: 0 0 36px rgba(0, 0, 0, .1);
box-shadow: 0 0 36px rgba(0, 0, 0, .1);
cursor: pointer
}
.adb-card__href {
height: 100%;
left: 0;
opacity: 0;
position: absolute;
top: 0;
width: 100%;
z-index: 2
}
.adb-card__image-wrapper {
overflow: hidden;
position: relative;
width: auto;
-webkit-flex-basis: 40%;
-ms-flex-preferred-size: 40%;
flex-basis: 40%;
display: -webkit-box;
display: -webkit-flex;
display: -ms-flexbox;
display: flex;
-webkit-box-align: center;
-webkit-align-items: center;
-ms-flex-align: center;
align-items: center;
-webkit-box-pack: center;
-webkit-justify-content: center;
-ms-flex-pack: center;
justify-content: center
}
.adb-card__content {
padding: 24px 0 0
}
.adb-card__title {
font-family: Android Euclid, Roboto, sans-serif;
font-size: 32px;
line-height: 40px;
font-weight: 600;
margin-bottom: 12px
}
.adb-card__info {
font-weight: 400;
font-size: 16px;
line-height: 24px;
margin-bottom: 24px
}
.adb-card__description {
font-weight: 500;
font-size: 14px;
line-height: 20px;
margin-bottom: 48px
}
.adb-card:hover .adb-content__image-wrapper img,
.adb-card__href:focus~.adb-content__image-wrapper img {
-webkit-transform: scale(1.03);
transform: scale(1.03);
-webkit-transition: -webkit-transform 1s ease;
transition: -webkit-transform 1s ease;
transition: transform 1s ease;
transition: transform 1s ease, -webkit-transform 1s ease
}
.devsite-footer {
padding: 0 24px;
border-top: 1px solid #bdc1c6
}
.devsite-footer li {
display: block
}
.devsite-footer li a {
text-decoration: none;
font-size: 14px;
line-height: 16px;
color: #202124
}
.devsite-footer li a:focus,
.devsite-footer li a:hover {
color: #1a73e8;
outline: none
}
.devsite-footer-linkboxes-list {
display: grid;
grid-gap: 24px;
grid-template-columns: 1fr 1fr 1fr;
margin: 0;
padding: 24px 0;
border-bottom: 1px solid #bdc1c6
}
@media only screen and (max-width:767px) {
.devsite-footer-linkboxes-list {
grid-template-columns: 1fr;
padding-left: 0
}
}
.devsite-footer-linkbox {
display: block
}
.devsite-footer-linkbox-heading {
font-size: 16px;
line-height: 26px;
font-weight: 400;
margin: 0 0 4px
}
.devsite-footer-linkbox ul {
padding-left: 0
}
.devsite-footer-sites-list {
-webkit-box-align: center;
-webkit-align-items: center;
-ms-flex-align: center;
align-items: center
}
@media only screen and (max-width:767px) {
.devsite-footer-sites-list {
-webkit-box-orient: vertical;
-webkit-box-direction: normal;
-webkit-flex-direction: column;
-ms-flex-direction: column;
flex-direction: column;
-webkit-box-align: start;
-webkit-align-items: flex-start;
-ms-flex-align: start;
align-items: flex-start
}
}
.devsite-footer-utility nav {
display: -webkit-box;
display: -webkit-flex;
display: -ms-flexbox;
display: flex;
-webkit-box-align: center;
-webkit-align-items: center;
-ms-flex-align: center;
align-items: center
}
@media only screen and (max-width:767px) {
.devsite-footer-utility nav {
-webkit-box-orient: vertical;
-webkit-box-direction: normal;
-webkit-flex-direction: column;
-ms-flex-direction: column;
flex-direction: column;
-webkit-box-align: start;
-webkit-align-items: flex-start;
-ms-flex-align: start;
align-items: flex-start
}
}
.devsite-footer-utility-list {
display: -webkit-box;
display: -webkit-flex;
display: -ms-flexbox;
display: flex;
-webkit-box-align: center;
-webkit-align-items: center;
-ms-flex-align: center;
align-items: center;
-webkit-box-pack: justify;
-webkit-justify-content: space-between;
-ms-flex-pack: justify;
justify-content: space-between;
-webkit-box-flex: 1;
-webkit-flex: 1;
-ms-flex: 1;
flex: 1;
padding: 24px 0
}
@media only screen and (max-width:767px) {
.devsite-footer-utility-list {
-webkit-box-orient: vertical;
-webkit-box-direction: normal;
-webkit-flex-direction: column;
-ms-flex-direction: column;
flex-direction: column;
-webkit-box-align: start;
-webkit-align-items: flex-start;
-ms-flex-align: start;
align-items: flex-start;
padding: 0
}
}
.devsite-footer-utility-button {
justify-self: flex-end;
-webkit-box-align: center;
-webkit-align-items: center;
-ms-flex-align: center;
align-items: center;
line-height: 20px;
margin-left: auto;
padding-left: 16px
}
.devsite-footer-utility-item {
display: -webkit-box;
display: -webkit-flex;
display: -ms-flexbox;
display: flex;
margin: 0 8px 0 0
}
.devsite-footer-utility-item:last-child {
margin-right: 0
}
@media only screen and (min-width:768px) {
.devsite-footer-utility-item:not(:first-child):before {
content: "|";
margin: 0 8px 0 0
}
}
.devsite-footer-sites {
border-bottom: 1px solid #bdc1c6;
padding: 24px 0 23px
}
.devsite-footer-sites-logo {
height: 32px;
margin-top: 5px;
width: 185px
}
.devsite-footer-sites-list {
display: -webkit-box;
display: -webkit-flex;
display: -ms-flexbox;
display: flex;
list-style: none;
padding: 0
}
.devsite-footer-sites-item {
margin: 0 0 0 40px
}
@media only screen and (max-width:767px) {
.devsite-footer-sites-item {
margin: 0
}
}
.devsite-footer-sites-link {
display: block;
padding: 8px 0;
color: #202124
}
.devsite-footer-sites-link:focus,
.devsite-footer-sites-link:hover {
color: #1a73e8;
outline: none
}
.devsite-footer-utility-link:focus {
text-decoration: underline
}
.devsite-footer-utility .devsite-footer-utility-button {
line-height: 20px;
font: 400 14px/16px Roboto, sans-serif
}
.devsite-footer-utility .devsite-footer-utility-button:before {
content: "";
margin: 0
}
@media only screen and (max-width:767px) {
.devsite-footer-utility .devsite-footer-utility-button {
display: -webkit-box;
display: -webkit-flex;
display: -ms-flexbox;
display: flex;
-webkit-box-orient: horizontal;
-webkit-box-direction: normal;
-webkit-flex-direction: row;
-ms-flex-direction: row;
flex-direction: row;
-webkit-box-pack: justify;
-webkit-justify-content: space-between;
-ms-flex-pack: justify;
justify-content: space-between;
padding: 0;
margin: 18px 0 12px
}
}
.devsite-footer-utility .devsite-footer-utility-button .devsite-footer-utility-link {
border: 0;
background: #1a73e8;
color: #fff;
line-height: 36px;
-webkit-flex-shrink: 0;
-ms-flex-negative: 0;
flex-shrink: 0;
margin: 0 0 0 16px;
border-radius: 2px;
-webkit-box-shadow: 0 1px 2px 0;
box-shadow: 0 1px 2px 0;
display: inline-block;
font: 500 14px/36px Roboto, sans-serif;
height: 36px;
letter-spacing: 0;
min-width: 36px;
padding: 0 24px;
text-align: center;
-webkit-transition: background-color .2s, border .2s, -webkit-box-shadow .2s;
transition: background-color .2s, border .2s, -webkit-box-shadow .2s;
transition: background-color .2s, border .2s, box-shadow .2s;
transition: background-color .2s, border .2s, box-shadow .2s, -webkit-box-shadow .2s;
vertical-align: middle;
white-space: nowrap
}
.devsite-footer-utility .devsite-footer-utility-button .devsite-footer-utility-link:hover {
background: #1765cc
}
.adb-page__title {
font-family: Android Euclid, Roboto, sans-serif;
font-size: 44px;
font-weight: 500;
line-height: 61.6px;
text-align: center;
color: #202124
}
.adb-detail hr {
border: 1px solid #dadce0;
margin: 40px 0
}
.adb-detail__title {
font-size: 40px;
font-weight: 600;
line-height: 48px
}
.adb-detail__info {
font-weight: 400;
font-size: 16px;
line-height: 24px
}
.adb-detail__content {
min-height: 200px
}
.icon-sidebar {
position: absolute;
display: -webkit-box;
display: -webkit-flex;
display: -ms-flexbox;
display: flex;
-webkit-box-orient: vertical;
-webkit-box-direction: normal;
-webkit-flex-direction: column;
-ms-flex-direction: column;
flex-direction: column;
-webkit-box-pack: start;
-webkit-justify-content: flex-start;
-ms-flex-pack: start;
justify-content: flex-start;
top: 0;
left: -300px;
max-width: 220px;
gap: 8px
}
.icon-sidebar .share-text {
font-weight: 500;
margin-left: 4px
}
@media only screen and (max-width:1440px) {
.icon-sidebar {
position: relative;
-webkit-flex-direction: row;
-ms-flex-direction: row;
flex-direction: row;
left: 0;
margin-top: -20px;
margin-bottom: 40px;
}
.icon-sidebar .share-text {
display: none;
}
}
.copy-tooltip {
display: none;
position: fixed;
bottom: 16px;
left: 10px;
z-index: 100;
opacity: 0;
-webkit-transition: opacity 0.3s;
transition: opacity 0.3s;
}
.copy-tooltip .copy-tooltiptext {
width: 200px;
background-color: #073042;
color: #fff;
text-align: center;
border-radius: 80px;
padding: 8px 16px;
}
.header__overlay {
height: 100vh;
left: 0;
position: fixed;
width: 100vw;
border: none;
background-color: rgba(0, 0, 0, .4);
-webkit-animation: fade-in .4s cubic-bezier(.39, .575, .565, 1);
animation: fade-in .4s cubic-bezier(.39, .575, .565, 1);
opacity: 0;
top: 0;
z-index: -1;
display: none
}
.header__overlay.show {
display: block;
opacity: 1;
z-index: 800;
-webkit-transition: opacity .2s ease-in-out;
transition: opacity .2s ease-in-out
}
.social-icons__links {
height: 100%;
display: -webkit-box;
display: -webkit-flex;
display: -ms-flexbox;
display: flex;
-webkit-box-align: center;
-webkit-align-items: center;
-ms-flex-align: center;
align-items: center;
gap: 24px
}
.social-icons__links path {
fill: #80868b
}
.social-icons__container-header {
display: -webkit-box;
display: -webkit-flex;
display: -ms-flexbox;
display: flex;
-webkit-box-align: center;
-webkit-align-items: center;
-ms-flex-align: center;
align-items: center;
height: 100%;
margin-right: 14px
}
@media only screen and (max-width:1000px) {
.social-icons__container-header {
display: none
}
}
.adb-blog-logo:focus,
.adb-blog-logo:hover {
opacity: .7;
text-decoration: none
}
.adb-blog-logo__image {
height: 32px;
margin-left: 0;
margin-top: 6px
}
@media only screen and (min-width:840px) {
.adb-blog-logo__image {
margin-left: 24px
}
}
.header {
position: fixed;
background: #fff;
z-index: 700;
top: 0;
width: 100%;
overflow: hidden;
-webkit-box-shadow: 0 1px 2px 0 rgba(60, 64, 67, .3), 0 2px 6px 2px rgba(60, 64, 67, .15);
box-shadow: 0 1px 2px 0 rgba(60, 64, 67, .3), 0 2px 6px 2px rgba(60, 64, 67, .15);
height: auto
}
.header .top-row {
display: -webkit-box;
display: -webkit-flex;
display: -ms-flexbox;
display: flex;
-webkit-box-pack: justify;
-webkit-justify-content: space-between;
-ms-flex-pack: justify;
justify-content: space-between;
padding-right: 24px;
height: 50px;
-webkit-box-align: center;
-webkit-align-items: center;
-ms-flex-align: center;
align-items: center;
border-bottom: 1px solid #e6e6e6
}
@media only screen and (max-width:839px) {
.header .top-row {
padding: 0 16px
}
}
.header .top-row__left,
.header .top-row__right {
-webkit-box-align: center;
-webkit-align-items: center;
-ms-flex-align: center;
align-items: center;
-webkit-box-flex: 0;
-webkit-flex: 0 0 auto;
-ms-flex: 0 0 auto;
flex: 0 0 auto;
height: 100%
}
.header .nav-row,
.header .top-row__left,
.header .top-row__right {
display: -webkit-box;
display: -webkit-flex;
display: -ms-flexbox;
display: flex
}
.header .nav-row {
background: #fff;
-webkit-box-pack: justify;
-webkit-justify-content: space-between;
-ms-flex-pack: justify;
justify-content: space-between;
width: 100%
}
.header .nav-items {
display: -webkit-box;
display: -webkit-flex;
display: -ms-flexbox;
display: flex;
-webkit-box-flex: 1;
-webkit-flex-grow: 1;
-ms-flex-positive: 1;
flex-grow: 1;
height: 50px;
position: relative;
background-color: #fff
}
@media only screen and (max-width:839px) {
.header .nav-items {
display: none
}
}
.header .nav-items tab {
position: relative
}
.header .nav-items tab.active .header__nav-item:after,
.header .nav-items tab:hover .header__nav-item:after {
background: #1a73e8
}
.header .nav-items tab.active .header__nav-item,
.header .nav-items tab:focus-within a {
color: #202124
}
@media only screen and (max-width:839px) {
.header .header__cta,
.header .nav-items {
display: none
}
}
.header__search-container {
display: -webkit-box;
display: -webkit-flex;
display: -ms-flexbox;
display: flex;
-webkit-box-align: center;
-webkit-align-items: center;
-ms-flex-align: center;
align-items: center;
margin: 6px 0 6px 24px;
overflow: hidden;
position: relative;
margin-right: 36px;
border-radius: 4px
}
@media only screen and (max-width:767px) {
.header__search-container:not(.mobile) {
display: none
}
}
.header__search-container.mobile {
margin: 0 0 20px
}
.header__search-container.mobile #searchform,
.header__search-container.mobile .searchbox {
width: 100%
}
.header__search-container .searchbox {
border-radius: 2px
}
.header__search-container .searchbox input {
font-family: Android Euclid, Roboto, sans-serif;
font-weight: 400;
font-size: 16px;
line-height: 28px;
font-weight: 500;
color: #80868b;
border: 0;
margin: 0;
height: 20px;
outline: 0;
padding: 8px 8px 8px 40px;
width: 100%;
-webkit-transition: background .2s;
transition: background .2s
}
.header__search-container .searchbox input::-webkit-input-placeholder {
color: #80868b
}
.header__search-container .searchbox input:-ms-input-placeholder,
.header__search-container .searchbox input::-ms-input-placeholder {
color: #80868b
}
.header__search-container .searchbox input::placeholder {
color: #80868b
}
.header__search-container .searchbox input:hover {
background: #e8eaed
}
.header__search-container .material-icons {
color: #80868b;
left: 8px;
position: absolute;
top: 6px;
-webkit-transition: color .2s;
transition: color .2s
}
.header__cta {
font-family: Android Euclid, Roboto, sans-serif;
font-size: 16px;
font-weight: 600;
line-height: 20px;
display: -webkit-box;
display: -webkit-flex;
display: -ms-flexbox;
display: flex;
-webkit-box-align: center;
-webkit-align-items: center;
-ms-flex-align: center;
align-items: center;
color: #1a73e8 !important;
text-decoration: none
}
.header__cta.mobile {
padding: 18px 0
}
.header__cta:hover .cta-icon {
margin-left: 0;
margin-right: 12px
}
.header__cta .cta-icon {
-webkit-transition: margin-right .2s linear, margin-left .2s linear;
transition: margin-right .2s linear, margin-left .2s linear;
margin-left: 4px;
margin-right: 8px;
-webkit-transform: rotate(180deg);
transform: rotate(180deg)
}
.header__cta .cta-icon path {
fill: #1a73e8
}
.header__nav-item {
font-family: Roboto, sans-serif;
font-size: 16px;
font-weight: 600;
line-height: 24px;
color: #80868b;
font-weight: 500;
display: -webkit-box;
display: -webkit-flex;
display: -ms-flexbox;
display: flex;
-webkit-box-align: center;
-webkit-align-items: center;
-ms-flex-align: center;
align-items: center;
padding: 0 18px;
height: 100%;
text-transform: none;
text-decoration: none
}
.header__nav-item:hover {
color: #202124
}
.header__nav-item.mobile {
font-weight: 500;
padding: 0
}
.header__nav-item:after {
bottom: 0;
border-radius: 3px 3px 0 0;
content: "";
display: block;
height: 3px;
left: 50%;
min-width: 20px;
position: absolute;
right: 0;
-webkit-transform: translateX(-50%);
transform: translateX(-50%);
width: calc(100% - 24px)
}
.header__hamburger {
border: 0;
background: none;
outline: none;
padding: 0;
margin: 1px 8px 0 -4px;
padding: 8px;
color: rgba(0, 0, 0, .65);
cursor: pointer
}
@media only screen and (min-width:840px) {
.header__hamburger {
display: none
}
}
.header__side-menu {
background-color: #fff;
bottom: 0;
-webkit-box-orient: vertical;
-webkit-box-direction: normal;
-webkit-flex-direction: column;
-ms-flex-direction: column;
flex-direction: column;
height: 100%;
left: 0;
overflow: auto;
position: fixed;
top: 0;
-webkit-transform: translateX(-100%);
transform: translateX(-100%);
-webkit-transition: -webkit-transform .2s cubic-bezier(.215, .61, .355, 1);
transition: -webkit-transform .2s cubic-bezier(.215, .61, .355, 1);
transition: transform .2s cubic-bezier(.215, .61, .355, 1);
transition: transform .2s cubic-bezier(.215, .61, .355, 1), -webkit-transform .2s cubic-bezier(.215, .61, .355, 1);
z-index: 900
}
.header__side-menu.is-open {
-webkit-transform: translateX(0);
transform: translateX(0);
width: 80%
}
.header__side-menu.is-open,
.header__side-menu__content {
display: -webkit-box;
display: -webkit-flex;
display: -ms-flexbox;
display: flex;
height: 100%
}
.header__side-menu__content {
padding: 18px 16px 0;
-webkit-box-orient: vertical;
-webkit-box-direction: normal;
-webkit-flex-direction: column;
-ms-flex-direction: column;
flex-direction: column
}
.header__side-menu__content .spacer {
-webkit-box-flex: 1;
-webkit-flex: 1;
-ms-flex: 1;
flex: 1
}
.header__side-menu__title {
font-family: Roboto, sans-serif;
font-size: 20px;
line-height: 26px;
font-weight: 500;
margin-bottom: 12px
}
.header__side-menu__items {
list-style: none
}
.header__side-menu__items li {
padding: 12px 0
}
.header__side-menu__items tab {
position: relative
}
.header__side-menu__items tab.active .header__nav-item,
.header__side-menu__items tab:focus-within a {
color: #202124
}
.header__side-menu__bottom {
border-top: 1px solid #e6e6e6
}
.header__side-menu__logo-container {
background: #fff;
height: 40px;
display: -webkit-box;
display: -webkit-flex;
display: -ms-flexbox;
display: flex;
-webkit-box-align: center;
-webkit-align-items: center;
-ms-flex-align: center;
align-items: center;
-webkit-flex-shrink: 0;
-ms-flex-negative: 0;
flex-shrink: 0;
padding: 4px 16px;
border-bottom: 1px solid #e6e6e6
}
#nav .widget {
margin: 0
}
.featured__wrapper {
width: 100%;
border: 0;
background-color: #e8f0fe;
display: -webkit-box;
display: -webkit-flex;
display: -ms-flexbox;
display: flex;
-webkit-box-pack: center;
-webkit-justify-content: center;
-ms-flex-pack: center;
justify-content: center;
-webkit-box-align: center;
-webkit-align-items: center;
-ms-flex-align: center;
align-items: center;
padding: 80px 0
}
@media only screen and (max-width:767px) {
.featured__wrapper {
padding: 0
}
}
.featured__inner {
max-width: 1080px;
width: calc(100% - 24px);
display: -webkit-box;
display: -webkit-flex;
display: -ms-flexbox;
display: flex;
-webkit-box-orient: vertical;
-webkit-box-direction: normal;
-webkit-flex-direction: column;
-ms-flex-direction: column;
flex-direction: column;
-webkit-box-pack: justify;
-webkit-justify-content: space-between;
-ms-flex-pack: justify;
justify-content: space-between;
position: relative;
padding: 48px
}
@media only screen and (min-width:768px) {
.featured__inner {
-webkit-box-orient: horizontal;
-webkit-box-direction: normal;
padding: 12px 80px
}
}
.featured__href {
height: 100%;
left: 0;
position: absolute;
top: 0;
width: 100%;
z-index: 2
}
.featured__image {
-webkit-align-self: center;
-ms-flex-item-align: center;
align-self: center;
width: 100%;
max-width: 100%;
}
.featured__content {
-webkit-align-self: center;
-ms-flex-item-align: center;
align-self: center;
margin-top: 24px;
width: 100%
}
.featured__title {
font-size: 32px;
line-height: 44.8px;
font-weight: 500;
font-family: Android Euclid, Roboto, sans-serif;
margin-bottom: 15px
}
.featured__info {
font-family: Roboto Mono, monospace;
font-weight: 400;
font-size: 12px;
line-height: 160%;
margin-bottom: 24px
}
.featured__description {
margin-bottom: 48px
}
.preview.featured__wrapper {
-webkit-box-orient: vertical;
-webkit-box-direction: normal;
-webkit-flex-direction: column;
-ms-flex-direction: column;
flex-direction: column;
background-color: #f1f3f4;
padding: 64px 0 120px
}
.preview.featured__wrapper h1 {
margin: 0 0 64px
}
.blog-label-container {
display: -webkit-box;
display: -webkit-flex;
display: -ms-flexbox;
display: flex;
-webkit-box-orient: horizontal;
-webkit-box-direction: normal;
-webkit-flex-direction: row;
-ms-flex-direction: row;
flex-direction: row;
-webkit-box-align: center;
-webkit-align-items: center;
-ms-flex-align: center;
align-items: center;
-webkit-flex-wrap: wrap;
-ms-flex-wrap: wrap;
flex-wrap: wrap;
gap: 16px
}
.blog-label-container .blog-label {
text-decoration: none;
z-index: 3
}
.blog-label-container .blog-label span {
font-size: 14px;
line-height: 20px;
font-weight: 500;
text-align: center;
background-color: #F1F3F4;
border-radius: 100px;
padding: 4px 16px;
color: #3c4043
}
.adb-card:first-child .blog-label span {
background-color: #fff;
}
.blog-label-container .blog-label span:focus,
.blog-label-container .blog-label span:hover {
background-color: #D7EFFE
}
.adb-card:first-child .blog-label span:focus,
.adb-card:first-child .blog-label span:hover {
background-color: #F1F3F4
}
.blog-label-container .blog-label span:focus-visible {
outline-offset: 0
}
#pagination-container {
display: none
}
.pagination {
display: -webkit-box;
display: -webkit-flex;
display: -ms-flexbox;
display: flex;
-webkit-box-pack: justify;
-webkit-justify-content: space-between;
-ms-flex-pack: justify;
justify-content: space-between;
width: 100%
}
.pagination .page-button {
font-family: Android Euclid, Roboto, sans-serif;
font-size: 16px;
font-weight: 600;
line-height: 24px;
color: black;
background-color: #3DDC84;
padding: 16px 24px;
border-radius: 80px;
text-decoration: none
}
.pagination .page-button:focus,
.pagination .page-button:hover {
background-color: #3DDC8460;
}
.pagination .page-button.disabled {
color: #80868b;
background-color: #f1f3f4
}
--></style>
<style id="template-skin-1" type="text/css"><!--
--></style>
<style>
/** Blogger default styles **/
html, .Label h2, #sidebar .rss a, .BlogArchive h2, .FollowByEmail h2.title, .widget .post h2 {
font-family: Roboto, sans-serif;
}
.plusfollowers h2.title, .post h2.title, .widget h2.title {
font-family: Roboto, sans-serif;
}
pre, .post-content pre.prettyprint {
background-color: #f7f7f7;
border: 1px solid #ddd;
margin: 0 0 1em 0;
padding: 1em;
overflow: auto;
}
pre, code {
font-size: 9pt;
line-height: 125%;
font-family: monospace;
}
pre, code {
color: #060;
font: 13px/18px Consolas, 'Liberation Mono', Menlo, Monaco, Courier, monospace;
-webkit-font-smoothing: subpixel-antialiased;
-moz-osx-font-smoothing: auto;
}
/* Styles for https://github.com/google/code-prettify */
.com { color: #060; }
.kwd { color: #008; }
.typ { color: #606; }
.lit { color: #066; }
.pun { color: #660; }
.pln { color: #000; }
.fb-custom img, .twitter-custom img, .gplus-share img, .email-custom img {
cursor: pointer;
opacity: 0.54;
}
.twitter-custom, .gplus-share, .fb-custom {
margin-right: 12px;
}
/** Blogger custom theme **/
.adb-header,
.searchBox input {
box-sizing: border-box;
}
.popout-nav {
background-color: white;
width: 280px;
height: 100%;
position: fixed;
z-index: 6;
left: -280px;
transition: left 0.2s;
}
.popout-search {
background-color: white;
width: 280px;
position: fixed;
z-index: 6;
right: -280px;
transition: right 0.2s;
top: 0;
}
.popout-search .widget {
margin: 0;
}
.popout-search #BlogSearch2_form .popout-options {
padding-right: 24px;
width: calc(100% - 48px);
}
.dropdown-nav {
display: none;
background-color: white;
width: 104px;
position: fixed;
padding: 4px 0px 3px 0px;
z-index: 4;
left: 352px;
top: 176px;
transition: top 0.2s;
box-shadow: 0 0px 2px 0 rgba(60,64,67,.3), 0 0px 6px 2px rgba(60,64,67,.15), inset 0 0px 6px -4px rgba(154,160,166,.5);
}
.dropdown-options {
align-items: center;
display: flex;
flex-wrap: wrap;
width: 94px;
height: 48px;
padding-left: 10px;
}
.dropdown-options:hover {
background-color: #f7f9fa;
}
.dropdown-options span {
color: #80868b;
}
.popout-options {
padding-right: 8px;
padding-left: 24px;
padding-top: 16px;
padding-bottom: 15px;
display: inline-block;
width: calc(100% - 32px);
border-top: 1px solid #ddd;
font-size: 13px;
font-weight: 700;
color: #80868b !important;
}
.popout-options:last-of-type {
border-bottom: 1px solid #ddd;
}
.popout-options:first-of-type {
border-top: 0;
}
#close-popout {
padding: 12px 12px 11px 20px;
}
#close-search-popout {
padding: 12px 20px 11px 12px;
text-align: right;
}
.popout-search-overlay{
display: none;
opacity: 0;
background-color: black;
width: 100%;
height: 100%;
position: fixed;
transition: opacity 0.2s;
}
.popout-overlay{
display: none;
opacity: 0;
background-color: black;
width: 100%;
height: 100%;
position: fixed;
z-index: 5;
transition: opacity 0.2s;
}
html {
background-color: #fff;
font-family: Roboto, sans-serif;
-moz-osx-font-smoothing: grayscale;
-webkit-font-smoothing: antialiased;
}
body {
width: 100%;
position: absolute;
padding: 0;
/* This ensures that the scroll bar is always present, which is needed */
/* because render happens after page load; otherwise the header */
/* would 'bounce' in-between states. */
min-height: 150%;
}
h2 {
font-size: 130%;
}
h1, h2, h3, h4, h5 {
line-height: 1.5em;
margin-bottom: 1em;
}
html, h4, h5, h6 {
font-size: 14px;
}
a, a:visited {
color: #039be5;
text-decoration: none;
}
pre code {
display: block;
}
.cols-wrapper {
margin-top: 56px;
}
.header-outer, .cols-wrapper {
padding: 0 60px;
}
html, .header-inner a {
color: #212121;
color: rgba(0, 0, 0, .87);
}
/** Archive widget. **/
.BlogArchive {
font-size: 13px;
font-weight: normal;
}
.BlogArchive .widget- {
display: none;
}
.BlogArchive h2, .Label h2 {
color: #039be5;
text-decoration: none;
}
/* Specificity needed here to override widget CSS defaults. */
/* Months */
.Label {
font-size: 13px;
font-weight: normal;
}
.sidebar-icon {
display: inline-block;
width: auto;
vertical-align: middle;
height: 24px;
margin-right: 24px;
}
.sidebar-social-links {
align-items: center;
}
.sidebar-social-links .android-logo,
.android-logo {
height: 48px;
}
.sidebar-social-links a:last-child img {
margin-right: 0;
}
.Label .widget- {
display: none;
}
.searchBox input {
border: 1px solid #eee;
color: #212121;
color: rgba(0, 0, 0, .87);
font-size: 14px;
padding: 8px 8px 8px 40px;
width: 100%;
font-family: Android Euclid, Roboto, sans-serif;
background: url('https://www.gstatic.com/images/icons/material/system/1x/search_grey600_24dp.png') 8px center no-repeat;
}
.searchBox ::-webkit-input-placeholder {
/* WebKit, Blink, Edge */
color: rgba(0, 0, 0, .54);
}
.section {
margin: 0;
padding: 0;
}
#sidebar-top {
border: 1px solid #eee;
}
#sidebar-top > div {
margin: 16px 0;
}
/*main post*/
.post {
margin-bottom: 30px;
}
#main .post .title {
margin: 0;
}
#main .post .title a {
color: #212121;
color: rgba(0, 0, 0, .87);
font-weight: normal;
font-size: 24px;
}
.message, #main .post .post-header {
margin: 0;
padding: 0;
}
#main .post .post-header .caption, #main .post .post-header .labels-caption, #main .post .post-footer .caption, #main .post .post-footer .labels-caption {
color: #444;
font-weight: 500;
}
#main .post .post-header .published {
font-size: 11px;
font-weight: bold;
}
.post-header .publishdate {
font-size: 16px;
font-weight: normal;
color: #757575;
color: rgba(0, 0, 0, .54);
}
#main .post .post-footer {
font-size: 12px;
padding-bottom: 21px;
}
.label-footer {
margin-bottom: 12px;
margin-top: 12px;
}
#main .post .post-header .published {
margin-bottom: 16px;
}
.post .post- {
color: #545454;
color: rgba(0, 0, 0, .67);
font-size: 16px;
margin: 16px 0 36px 0;
line-height: 24px;
word-wrap: break-word;
}
.post-summary {
display: none;
}
/* Override all post images/videos to left align. */
@media (max-width: 712px) {
.post- img {
max-width: 100%;
height: auto;
width: auto;
}
}
.post- .tr-caption-container img {
margin-bottom: 12px;
}
.post- iframe, .post- embed {
margin-left: auto !important;
margin-right: auto !important;
max-width: 100%;
}
.post- .carousel-container {
margin-bottom: 48px;
}
#main .post- b {
font-weight: 500;
}
/* These are the main paragraph spacing tweaks. */
#main .post- br {
: '';
display: block;
padding: 4px;
}
.post-content .space {
display: block;
height: 8px;
}
.post-content iframe+.space, .post-content iframe+br {
padding: 0 !important;
}
#main .post .jump-link {
margin-bottom: 10px;
}
.post-content img, .post-content iframe {
margin: 30px 0 20px 0;
}
.post-content > img:first-child, .post-content > iframe:first-child {
margin-top: 0;
}
.col-right .section {
padding: 0 16px;
}
#aside {
background: #fff;
border: 1px solid #eee;
border-top: 0;
z-index: 2;
}
#aside .widget {
margin: 0;
}
#aside .widget h2, #ArchiveList .toggle+a.post-count-link {
color: #212121;
color: rgba(0, 0, 0, .87);
font-weight: 400 !important;
margin: 0;
}
#ArchiveList .toggle {
float: right;
}
#ArchiveList .toggle .material-icons {
padding-top: 4px;
}
#sidebar-top,
#sidebar {
background: #fff;
}
#sidebar .tab {
cursor: pointer;
}
#sidebar .tab .arrow {
display: inline-block;
float: right;
}
#sidebar .tab .icon {
display: inline-block;
vertical-align: top;
height: 24px;
width: 24px;
margin-right: 13px;
margin-left: -1px;
margin-top: 1px;
color: #757575;
color: rgba(0, 0, 0, .54);
}
#sidebar .widget-content > :first-child {
padding-top: 8px;
}
#sidebar .active .tab .arrow {
-ms-transform: rotate(180deg);
transform: rotate(180deg);
}
#sidebar .arrow {
color: #757575;
color: rgba(0, 0, 0, .54);
}
#sidebar .widget h2 {
font-size: 14px;
line-height: 24px;
display: inline-block;
}
#sidebar .widget .BlogArchive {
padding-bottom: 8px;
}
#sidebar .widget {
border-bottom: 1px solid #eee;
box-shadow: 0px 1px 0 white;
margin-bottom: 0;
padding: 14px 0;
min-height: 20px;
}
#sidebar .widget:last-child {
border-bottom: none;
box-shadow: none;
margin-bottom: 0;
}
#sidebar ul {
margin: 0;
padding: 0;
}
#sidebar ul li {
list-style: none;
padding: 0;
}
#sidebar ul li a {
line-height: 32px;
}
#sidebar ul ul ul li a {
line-height: 24px;
}
#sidebar .archive {
background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAYCAYAAADzoH0MAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAE1JREFUeNpiNDY23s9AAWBioBCwYBM8c+YMVsUmJibEGYBNMS5DaeMFfDYSZQA2v9I3FrB5AZeriI4FmnrBccCT8mhmGs1MwyAzAQQYAKEWG9zm9QFEAAAAAElFTkSuQmCC');
height: 24px;
line-height: 24px;
padding-left: 30px;
}
#sidebar .labels {
background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAARCAYAAAA7bUf6AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAUxJREFUeNpiNDY23s9AAMycOfM7UF05kHkZmzwTMkdSUhKrIcXFxZy3bt3qBjIN8RrS09PDsHnzZjCNDr58+cKQlpbGDjSoHcg1w2oIyAUODg5gARCNzUVIBrUCuVYYhjx//pzhwIEDYAEQDeJjA1CDWIAGNQK59jBxRuSABbkAlwHIgIeHh2HWrFn/1NTU2oDcvSgBS4wBSC5iArqoCsj1YGIgEyAZVMoEchqlBjEB/cZAiUHg2AEGznpKDAImxOeM////B4VLKtBvEUCngZ1ILKivr3/u6+ubBzJAGZQ9gC5aQoqLgAY8BhkAZL4BuQQkxgXE34A4BuiiZEIuAhrwEGhAEZD5DpzYoIaA2UAM4kQADUrHZRDUgAIg8wO2XAwzbQXQa5OweQ1owB10AyA6gS7BgX1u3ry5397eHow3bdo0EyjGi00tQIABANPgyAH1q1eaAAAAAElFTkSuQmCC');
height: 20px;
line-height: 20px;
padding-left: 30px;
}
#sidebar .rss a {
background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAX5JREFUeNqsVDGSgkAQHL2rIiIikohIc/EBRkbwAIwuwgfwAXiAD9AHSI7kEkECRCb6AIyINDLx7K0aa6kT7uq0q7YYtnZ7umdnt7darXbr9Zpegeu61DNNc0dvwCcH4/GYJpMJnc9nOhwOVJbl/4hAAokMECZJQtvt9k+kH7qufyEYDAakqqqYxFdRFBqNRmTbNg2HQ0rTlK7XayvR0xqBdDqdkuM4dE/0ULhYLOh4PHYrknG5XGi/31MYhuL/nkwonM1mlGUZ1XXdrsiyLGEDhY7juJEZ1u5tIixDGdYhmYw+B7CAzPP5nDabjdgIAgCksMX1832/3drtdqPT6SQWapomiGEFNkDEdpDMMAzK81ys/7XYy+XyoQgq2WoURSIJ2iIIgp/WZCCTvFm2wgeAU31aI3Q2GhIDMeB53qPYPIcm5VrxXIOIOxsDMStjVawAc1VViRgN22lNBiuQN3GR+SY07hpOoStmFQAKXRRFY93bnpG+fONfedi+BRgAbkS8Fxp7QQIAAAAASUVORK5CYII=');
}
#sidebar .subscription a {
background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAALCAYAAACZIGYHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAUBJREFUeNrMkSGLAlEUhb+ZB4JFi8mx2cz+ApvhRUGTcUCrNqNJDYIi+DO0GUwmQXDK2DSIoGgZcSaIjDrzwrK4ssvChj1w0733O+fdp+m6PozH4yQSCfb7Pa7r8pOi0SjJZBLP8zgej4gAIMvlMuPxmADIYrHger1+C6lUKmo+NJ/NZojb7SZDWiwWo1qtks1msW2bw+HwZdkwDHq9HvV6nel0SqvVYrvdIh6Ph3Qch+VyqRYLhQJSSjRNw7IsfN9XgGKxSLfbJZfL0e/3aTabrFYr7vc7IujLcOh8PqunrNdr0uk0pVKJVCpFJBJRgEajweVyod1uMxgM2O12BAGUgRbU8DV2JpOhVquRz+cRQii3+XxOp9NRN3jVR5LPOp1OjEYjlSL8hclkgmmabDabt4d+m+S30vkD/R/IU4ABAPTZgnZdmG/PAAAAAElFTkSuQmCC');
}
#sidebar-bottom {
background: #f5f5f5;
border-top: 1px solid #eee;
}
#sidebar-bottom .widget {
border-bottom: 1px solid #e0e0e0;
padding: 15px 0;
text-align: center;
}
#sidebar-bottom > div:last-child {
border-bottom: 0;
}
#sidebar-bottom .text {
line-height: 20px;
}
/* Home, forward, and backward pagination. */
.blog-pager {
padding-top: 10px;
margin-top: 15px;
text-align: right !important;
}
#blog-pager {
padding: 40px 0 0;
}
#blog-pager a {
display: inline-block;
}
.blog-pager i.disabled {
opacity: 0.2 !important;
}
.blog-pager i {
color: black;
margin-left: 16px;
opacity: 0.54;
}
.blog-pager i:hover, .blog-pager i:active {
opacity: 0.87;
}
#blog-pager-older-link, #blog-pager-newer-link {
float: none;
}
.gplus-profile {
background-color: #fafafa;
border: 1px solid #eee;
overflow: hidden;
width: 212px;
}
.gplus-profile-inner {
margin-left: -1px;
margin-top: -1px;
}
/* Sidebar follow buttons. */
.followgooglewrapper {
padding: 12px 0 0 0;
}
.loading {
visibility: hidden;
}
.detail-page .post-footer .cmt_iframe_holder {
padding-top: 40px !important;
}
/* ADB */
.adb-hero-area {
min-height: 104px;
background-color: #073042;
box-shadow: 0 1px 2px 0 rgba(60,64,67,.3), 0 2px 6px 2px rgba(60,64,67,.15);
z-index: 5;
position: fixed;
width: 100%;
}
.adb-hero-logo {
height: 80px;
position: absolute;
top: 12px;
left: 16px;
}
.adb-footer-btm {
display: flex;
margin: 0 24px;
align-items: center;
justify-content: space-between;
flex-wrap: wrap;
padding-bottom: 40px;
}
.subscribe-btn {
color: black;
background-color: #3DDC84;
border-radius: 100px;
font: 500 16px/24px Android Euclid,Roboto,sans-serif;
padding: 12px 24px;
border: 0;
}
.adb-footer-info {
align-items: center;
display: flex;
padding: 0;
margin: 9px 0 0 -8px;
font-size: 13px;
}
.footer-list {
list-style: none;
padding: 0 8px;
}
.subscribe-info {
list-style: none;
padding: 0 8px 0 0;
font-size: 13px;
color: black;
}
.footer-newsletter {
display: flex;
align-items: center;
}
.adb-header-inner {
display: flex;
align-items: center;
}
.adb-header {
background-color: white;
color: #fff;
height: 48px;
left: 0;
overflow: hidden;
padding: 36px 24px;
right: 0;
top: 104px;
z-index: 4;
display: flex;
align-items: center;
position: fixed;
border-bottom: solid 1px #DADCE0;
}
.adb-shadow {
margin-top: 48px;
height: 1px;
width: 100%;
position: fixed;
background: white;
z-index: 2;
box-shadow: 0 1px 2px 0 rgba(60,64,67,.3), 0 2px 6px 2px rgba(60,64,67,.15);
}
.adb-logo-box {
display:inline;
}
.adb-burger-box {
display: none;
margin: 0 16px 0 0;
}
.adb-search-box {
display: none;
margin: 0 0 0 16px;
}
.adb-htag-box {
display: flex;
align-items: center;
}
.adb-header-tags {
padding: 0 24px 0 0;
}
.adb-header-tags ~ .atb-header-tags {
padding: 0 24px;
}
.adb-header-tags a {
font-family: Android Euclid, Roboto, sans-serif;
font-weight: 600;
font-size: 16px;
line-height: 20px;
color: #5F6368;
}
.adb-header-tags a:hover {
font-weight: 600;
font-size: 16px;
line-height: 20px;
color: #073042;
}
.more-dropdown {
display: none;
}
.dropdown-icon {
transition: all 0.3s;
}
.adb-header-logo {
display: inline-block;
vertical-align: -11px;
width: 134px;
height: 32px;
}
.adb-header-title {
color: #fff;
display: inline-block;
font-size: 20px;
font-weight: normal;
}
.adb-header-links {
border-left: 1px solid rgba(0, 0, 0, .1);
display: block;
left: 250px;
list-style: none;
margin: 0;
padding: 12px 0 12px 18px;
position: absolute;
top: 0;
}
.adb-header-link-item {
display: inline-block;
}
.adb-header-link, .adb-header-link:visited {
color: #fff;
display: inline-block;
font-weight: 500;
opacity: .7;
padding: 12px 9px;
text-transform: uppercase;
vertical-align: 2px;
}
.adb-header-link:hover, .adb-header-link:focus {
color: #fff;
opacity: 1;
}
.adb-header-console, .adb-header-console:visited {
border-radius: 3px;
box-shadow: 0 1px 4px 0 rgba(0, 0, 0, .2);
color: #fff;
float: right;
font-size: 14px;
font-weight: 500;
line-height: 28px;
padding: 4px 10px;
position: relative;
text-transform: uppercase;
transition: box-shadow .2s;
z-index: 60;
}
.adb-header-console:hover {
box-shadow: 0 2px 8px 0 rgba(0, 0, 0, .3);
color: #fff;
}
.adb-header-console:focus {
background-color: rgba(63, 81, 181, .1);
color: #fff;
}
.adb-header-console-image {
vertical-align: -5px;
}
.adb-hero {
background-color: #dcedc8;
margin-top: 64px;
}
.adb-hero-back, .adb-hero-back:link, .adb-hero-back:visited {
color: #414141;
display: inline-block;
font-weight: 500;
margin: 25px 25px 0;
}
.adb-hero-inner {
background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAc4AAADZCAMAAACenCAVAAAAvVBMVEXc7cjY68PT6bvR57fQ57bY6sPZ68TU6bvR6LfP5rTQ57XR57jW6r7b7cfa7MbS6LnS6Lrb7cbQ6Lfb7MbX6r/Z68PY6sLV6b7U6b3U6r3T6LnX68Da7MXP57Tb7Mfc7cfW6b/P57XS57nY68LY68HU6L3W6r/W6b7T6brX6sDV6rzQ57fa7MTV6b3T6Lra68TR57bX68HW6sDS57jU6bzO5rTP5rXZ7MXR6LbZ68XX6sHT6LvV6bzS6LjZ7MILrTuqAAAIyklEQVR4AezXhXEkUQwE0B6+Xhg8MzND/smZ4UsLBSb9Kr0UhI1vl6RZnqUFlnBl9Y+j8WQK4+qGr9oOi7iKr0YFTOt6vhsPmM81/FDAspafUszl/vNTXsOuFYZWMYfrRgyswa51hjLM4TYYGsOuTQpbgNO2dyjAroxCvgunpZT2YFZDaQKnlFRg1z6lgxpOOqS0CbtqKutwwhGVYxh2QqWGC/WUMlhWH1BK4QKnVFZh2hmVEh/cXk7pHLbt5pQafHCT6Jr9gsoR3riayiXMyyhd4Y27jDDHJVQu8MJdU7lBBBpKoz08c7eU8gERuKNyhiduhcopolBRqeGAMaV7xKE7eGzvThQTVZooAJdC1AM2qGg0BhdCrpnciVE0i9dZ3v+t/n2ZMBtJGpsu6nuCrNJddar4/gAnMmuP/GPk3JFwrL2QKw3FD26GyGmQNXbIGVHNKdfmYraDl/ZUcxO8NNtIW888bafDC7tP5R2qtQfL724N5AypxjbIGdseWHMV1VfP+rrnZvbTerMEhHb2Py4eA7KX9AwD5LSppi5ZdPTHEhv6cd5mSjZaeMW/Dc66TEpkO+Q0qIbUE5es6ke85FMN/YGXZs9yQLdXYGVASGJDBaMZXsQouzau/fzfitNsKvpUL1O8dFBksb+Q80C1coaco7RtLeYzO9tHCV7qUY0ckXPGribSoNpQB3Z1MbWtby1hiZwWw35CRjUReRx7Sg5ecqgmJiyHOxrIWVEtPDPNY/TMx4bmczq5T3jpSRELm1NWodVmlGY364tP4ZXvdw5u8jjDf8yQJJ7j+2HYfBh3d+l5HFB5RmyzjM3yh8iDUbb6M9y7j3idgxM+3BzTuPzyXmdOTARJaUc8tUmX7ekB7+aF7dV1a0G6pIx3CkxKmBBUreMfvS0086aTnZZf6kfG53mlN/0UnS2bW5Socz9OA737eM6JkZWu4uUiXfVcnIT34eZM6Yq9hcRKR0OpL7i9cHBi/udjrCOUuiFWsnc2/oKsfYAhXvM2lsj4S/7b2/L9y4cODDu0j8HbBzqSPvutOksqpDH+gorw1+dvHLcaEzv3r4+0BdmnBJXi9bL+G6qaEbFz98rF4sEwnKGKrrrxK3sOuzoMlM9i+ql47KPC/HX8inTxljgKUHBYI1g6qDx/HBct76XETfHF4v3hHpZwVgH9APc0TfFSyTwLZ7DJ9FYxmZvTv1h89DmBdbyHEX0rcuuTRB38fNuQ2vmw1GAYMSjv6ZwQbD0ksFlz9LPW7gMxNv3RBVtlDqz3cbWo32rmEXLGFExcsJBMnilGzk29pleT5gx8fLiq2XzyM2rllpiboEYGxF2UoD6+EntL1Ma+TkOP/LVqNJLM3yeqgayDmnjqKmIu3aNGDhlx1pqiZvyUuAqaqKGwRRwt1gnqqR0QO5ce6ms5J1ZGIWqtkxIf0QNqb7ohJjIXgFjPiYF4j38R2wbZTk1m+C/xqU9WSzv4hkgyVkcg0QvIUg0XEHleRjaK/gQb8g/a2EL8hHcky6zxC+JTQBa5c/BL4nBO1lgl+B2xJjv0QxQgnA1ZoOGhGHFNldedoShxMadKU/d4BeEEVGF3Ll5FJF+psm7Bh5xwHyDeoKeogvp7iDfpbKhyWgeIN/JSqpjbBOLtlqwq7qJNFdKGeKdQUUUEIcS7Df6iSngeQAPhtqgCWi60EElKxjUSsCFriK5nYEMuLDtoJSZk0BiaiaYsZGPlXnEqHoipIhOaKIW4WnD63xThgtP/pthHdFqfUCIRRvK/KZ+3VX1uiulc7puc3EstSOpD9d7+LYGTFfiQenyKkxE3VLLGI9iQkcH4CackzqlEwRYnJbwNlUb5ODHhBVSWHk5O+JFMLkh5qFYxLxnoPZ9BmJGRdrELNuTddNEAwhg34NSvFnvSqgth1ANpNEIZkhkYSg4dt9rHocCFXvvxWUD/ELR2TQ98hMOWon+Ks7YLrZI70iWETu6yT99Qt3uw4A4j+lY6hU4dVcloUFdR3tkA1kt29J1zHxr1SIsGNAoDnvGjMCj/CLmr3INzQj9x5sFm41Ns933c0PtNoc+O0bJNA9+Xryp14+zSL9x5PH6beS2vQrfP0exkQcMG08BdCn1SepeFc8KPijWs5MxPdzN4CipzR2nQb8wdnu0O5UKbkN7h/LQZ/a9Ms+pZNYp9kQt9Yvo9H3Yx8H15QSXm/qZUQMY0ybOCPtNKlIMuqYAogW1SKkBBoxW9SXSARoqKCGGbBRVxBY0C85V3h2mb/MrASGxIb3BnYlaxwXRmLwUMFxMc6NSlQvpM6nt5MXTylOl00JGKYTqxp6DVBb1SkECrlOmvs0HFGA7efjA0dwrLfKVC5tDLp1dpGHrGKFjm0tCZYEWvMTA0NrOBZVZUSMtoLn4I3T5RISnTZTGXJrea9BPotmU6QrqlQi6gXWx05V5MRTiwTaD/4aW5FN8y9pCJYZ2usSPBNRUzNfapNIZ1fGM7KQdUSMNYJyl6Ajh2yAKTBUYHpfCZruJ0jB3wCpVur1GSIf3G8yOPlG1ePDN46d2iJEmLR+86L4lNBRQTZXK/6UAxunMWDxC3Da6omXsoz5XiOa8/NfV9JYHRXVBXiudG8r0y9Jmzpl87oFSDFv3Qog2rDTb0Q6qJckX0K7coWTKkHxh1YLmkSz/Q6JjNKnVQOj+lnM0nMPDxmnLuPhjej5rhFLbjmP4nOF6BCXfdov8JLkPj+xcdnMjh03p3nWXLBwesuB/+GGbHXbc5wIkkSt7CwEmXU1lGbPX3OYVBt5y2Yoov9EN/QVhpJK9xZL/7P4Kw1LO8iIH7qxx8CEu5zG8pcldpQ1hrSjnBI4S9YnrpBsJiEzkIcfIkByFWUqkIcdKjb7kQdos49a3Fjv7vE4TlfPoflYAPuXoeIaw3pv+6h7CeQ/8RPYIP6XpegwGxknMtwxcqK7AgAqkhcDKkf3oAI9LE9sCDWGhf4S8M70peggnxQERTMCFcIjUDF+KOUrAhhvQANkT4dwEsPvJYWz4QAAAAAElFTkSuQmCC');
background-position: bottom right 70px;
background-repeat: no-repeat;
background-size: auto 100%;
margin: 0 auto;
max-width: 980px;
padding: 0 60px;
position: relative;
}
.adb-hero-back-icon {
display: inline-block;
margin-right: 5px;
vertical-align: middle;
}
.adb-hero-title {
font-size: 22px;
line-height: 28px;
padding: 24px 24px 0px 112px;
}
.adb-hero-title a {
color: #FFFFFF;
font-family: Android Euclid, Roboto, sans-serif;
font-weight: 500;
}
.adb-hero-summary {
font-size: 16px;
line-height: 24px;
padding: 8px 24px 8px 112px;
}
.adb-hero-summary a {
color: rgba(255, 255, 255, 0.9);
}
.adb-hero-description {
color: #6f7172;
font-size: 16px;
margin: 0;
max-width: 440px;
padding-bottom: 32px;
}
.adb-hero-search {
position: absolute;
top: 19.35%;
right: 1.94%;
}
.adb-hero-search .searchBox input {
border: 1px solid #80868B;
border-radius: 4px;
color: white;
}
.adb-hero-search .searchBox input::placeholder {
color: #F1F3F4;
font-weight: 500;
font-size: 16px;
line-height: 24px;
letter-spacing: 0.5px;
padding-left: 12px;
}
.adb-hero-link {
position: absolute;
right: 1.67%;
top: 64.52%;
}
.adb-hero-link a {
font-family: Android Euclid, Roboto, sans-serif;
font-weight: 600;
font-size: 16px;
line-height: 20px;
color: #3DDC84;
letter-spacing: 1.4px;
}
.adb-hero-arrow {
display: inline-flex;
font-size: 24px;
vertical-align: middle;
}
.adb-socials-box {
display: flex;
position: absolute;
right: 1.67%;
}
.adb-socials-category,
.adb-socials-divider {
display: flex;
align-items: center;
}
.adb-socials-divider {
color: #DADCE0;
font-size: 40px;
font-weight: 100;
margin: 0 20px;
}
.adb-socials-category img,
.adb-footer-social-links img {
height: 24px;
}
.adb-footer-social-links-img {
margin-right: 20px;
}
.adb-hero-subscribe, .adb-hero-subscribe:visited {
background-color: #90c653;
color: #fff;
display: inline-block;
border-radius: 3px;
margin: 25px 0 60px;
padding: 13px 32px;
text-transform: uppercase;
}
.adb-hero-subscribe:hover, .adb-hero-subscribe:focus {
background-color: #333;
}
.adb-footer {
margin: 32px auto 64px;
}
.adb-footer-more {
border-bottom: 1px solid #f0f0f0;
border-top: 1px solid #f0f0f0;
padding: 30px 0;
}
.adb-footer-more a {
color: #000;
display: inline-block;
font-size: 20px;
font-weight: 300;
margin-right: 16px;
}
.adb-footer-social {
float: right;
margin-top: -62px;
}
.adb-footer-social a {
background-color: #ccc;
background-position: center;
background-repeat: no-repeat;
background-size: auto 16px;
border-radius: 50%;
display: inline-block;
height: 36px;
margin-left: 16px;
transition: background-color .1s;
width: 36px;
}
.adb-footer-social-youtube {
background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAYCAQAAAAxWje/AAABLUlEQVQ4y6WUvUoDYRBFr42gCdhK8AV8BwsVC0FQfIQUgr5DIKJoGy1CfAaDq1hIGn8K2xDSaBc1wUJJEYmbkDXssdi1Mrvfst9tZ+bAzNwZSZLEAmvsUKTCBQ80eaWLyxiAMS5dXmhyT5UyBfIsM68/McM1aXRDJgCUSKsTSWQZpAa4ZMUmNtoSRxGhbd4TAI7F1eSIxBwVfAPgUtSjAJLEEk+xgLroxAEkpikyigS0RS8eIEks8hgB6ImhGSAxxS5fE9JGwksCkCRyOP/SfPFjC0jawl5UC9ZDbBvXuB+zxjezkZ5NRnJirHxmtLIjDq2O6UBsWJ3zut1D+WZWEqepAaVg0hlqqcpr4VMNbbpKngJlqtzRoMUnfTx8fDz6fNCiwS3n4VtfIRdU/gLTrSb7DGWLcQAAAABJRU5ErkJggg');
}
.adb-footer-social-youtube:hover {
background-color: #f44336;
}
.adb-footer-social-gplus {
background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACEAAAAUCAQAAACpWpz6AAABJUlEQVQ4EZXBTUoCYQDH4X9hTS3Cja0Kyb2X6BCJoLlr1aKwK1QHCMMzWLiqTcuWXaAWQWIlU1DQh4QJ+Wt4X95x0hGn55FCeGzSpMUXXW45ocSC/oMiHUZ1KCgZZqkzyZaSoM7QgCd8BlgXLGo6ijgv7JJRgAxV3jjDUwwMOXh0sK5ZUQRZ5hQLQw4VrA/WlBCGHJpY+0oMQw5trLxCjNtTgFiij5VSiHFHChBL9LFSCjGurgCxRBsrrxA+Pj4+Pl2sQ0VgyKGJdaAYNLAqisCQQxnrk5xGkKOHlVUEhhw8HrFuWFUEaa6wLvUHhoYo4LxSZVkBlihzh7OuaagR9YzPD0PHmo5ZakzSIKVk2OCBUe/sMKPkmKfEKS16fHPPOduklcAvR50zMVwhTI4AAAAASUVORK5CYII=');
}
.adb-footer-social-gplus:hover {
background-color: #f44336;
}
.adb-footer-social-twitter {
background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABoAAAAWCAQAAAB0gUQ+AAABI0lEQVQ4EY3BQShDAQDH4f+zTSyJuLgoLlwclYOTHCwHu9ouiLRScpUmNwduDkpCSTs4LAeJhINoOTo4ctHkskyJtf20vWbe3tvb+z7JFUGibLHPMj0qoYEWSYzRKkdMkKbsm3m6WSRFuyQeuKNNNoTJU61ABL8kssAjvbKgiTR2V+ywJol3ijJMY+gP4zhLEpDEGWUpwvhUQgwnh/hURIT/3thjjmGWcBKViSCXeBWSiWdO+MGbPpm4watPfDIRxasLVXCANwuqwCDGK/V80akKGjnmmgLutmXFOvV80CUrAiRxNys7DCY5J4OzXdVCP7c4OcIvO5oJkSCHXZ5VDFkxwilP5HB2z6Cc0EGcF6plSTAqNxgMMEWcTTZYYYYhAqrpF0uh1zgYi1hVAAAAAElFTkSuQmCC');
}
.adb-footer-social-twitter:hover {
background-color: #55acee;
}
.adb-footer-social span {
display: none;
}
.adb-footer-related {
padding-top: 8px;
}
.adb-footer-related a {
color: #999;
font-size: 12px;
white-space: nowrap;
}
.adb-footer-related a:not(:last-child)::after {
content: '|';
cursor: default;
margin: 0 7px 0 10px;
}
.adb-footer-section {
margin: 48px auto;
max-width: 700px;
}
.adb-footer-title {
font-weight: 500;
font-size: 14px;
line-height: 20px;
letter-spacing: 1.5px;
text-transform: uppercase;
color: #3C4043;
margin-bottom: 24px;
}
.adb-footer-columns {
display: flex;
justify-content: space-between;
}
.adb-other-blogs-title img {
margin-right: 8px;
vertical-align: -12px;
}
.adb-footer-social-label {
display: flex !important;
align-items: center;
}
.adb-footer-column a,
.adb-footer-social-label,
#footer-subscribe .tab h2 {
color: #000;
font-size: 14px;
font-weight: 400;
line-height: 20px;
letter-spacing: 0.25px;
padding: .85em 0;
-webkit-column-break-inside: avoid;
break-inside: avoid-column;
display: table;
margin: 0;
page-break-inside: avoid;
}
.adb-footer-btm a {
color: #000;
font-family: Android Euclid, Roboto, sans-serif;
font-size: 14px;
font-weight: 400;
letter-spacing: 0.25px;
opacity: .7;
transition: opacity .1s;
-webkit-column-break-inside: avoid;
break-inside: avoid-column;
display: table;
margin: 0;
page-break-inside: avoid;
}
.adb-footer-column a {
opacity: .7;
transition: opacity .1s;
}
.adb-footer-column a:hover {
opacity: 1;
}
.adb-footer-social-links {
margin: 0 0 20px;
}
#footer-subscribe .widget {
margin: 0;
}
#footer-subscribe .tab {
display: flex;
align-items: center;
}
#footer-subscribe .tab img {
height: 16px;
}
.adb-label-view-more-toggle {
cursor: pointer;
}
.adb-label-view-more-toggle::after {
content: '\00e5c5';
float: right;
font: 2em / .7 Material Icons;
opacity: .6;
}
.adb-label-view-more-toggle.active::after {
transform: rotate(180deg);
}
/** Desktop **/
@media (max-width: 900px) {
.col-right {
display: none;
}
.col-main {
margin-right: 0;
min-width: initial;
}
.cols-wrapper {
min-width: initial;
}
.adb-hero-inner {
background-image: none;
}
}
/** ADB header breakpoint **/
@media (max-width: 768px) {
.adb-header-links {
display: none;
}
.dropdown-nav {
display: none;
}
.adb-header {
padding: 12px;
text-align: center;
}
}
@media (max-width: 1196px) {
.breakpoint-hide {
display:none;
}
.more-dropdown {
height: 50px;
display: flex;
align-items: center;
}
}
@media (max-width: 915px) {
.adb-header {
height: 0;
margin: 0;
padding: 0;
display: none;
}
.adb-header-tags {
display:none;
}
.more-dropdown {
display:none;
}
.dropdown-nav {
display: none;
}
.adb-hero-summary,
.adb-hero-link,
.adb-socials-category {
display: none;
}
.adb-hero-title {
padding-left: 152px;
}
.adb-hero-logo {
height: 52px;
top: 12px;
left: 120px;
}
.adb-footer-section {
margin: 0 auto;
}
.adb-footer-btm {
margin: 0 24px 40px;
}
.adb-hero-area {
min-height: 76px;
}
.adb-burger-box {
display:inline;
position: absolute;
top: 17px;
margin-left: 24px;
font-size: 32px;
color: white;
}
.adb-hero-title a{
margin-left: 40px;
}
}
/** Tablet **/
@media (max-width: 712px) {
.header-outer, .cols-wrapper {
padding: 0 40px;
}
/* ADB */
.adb-hero-inner {
padding: 0 40px;
}
.adb-hero-title {
font-size: 16px;
padding-left: 132px;
}
.adb-hero-logo {
left: 100px;
}
.adb-hero-back, .adb-hero-back:link, .adb-hero-back:visited {
margin-left: 36px;
}
.adb-other-blogs-list {
columns: auto;
}
.adb-other-blogs-title {
font-size: 20px;
}
.adb-other-blogs-title img {
height: auto;
vertical-align: -6px;
width: 32px;
}
.adb-footer-section {
margin: 0 24px;
}
.adb-footer-more {
padding-bottom: 75px;
}
.adb-footer-social {
float: none;
margin-bottom: 35px
}
.adb-footer-social .adb-footer-social-youtube {
margin-left: 0;
}
}
/** Small tablet **/
@media (max-width: 600px) {
.header-inner .google-logo {
top: 32px;
margin-top: 0;
}
.header-inner .google-logo img {
height: 56px;
width: auto;
/*
height: auto;
width: 188px;
*/
/* Override any optical adjustments at desktop size. */
top: 0 !important;
}
.header-left {
left: 0;
top: inherit;
bottom: 24px;
}
.adb-footer-columns {
display: block;
}
.adb-footer-column {
margin-bottom: 48px;
}
.adb-footer-column a {
opacity: 1;
}
.adb-footer-social-label {
padding: 0;
}
.adb-footer-column .widget a {
padding: 0;
}
.footer-newsletter {
margin-top: 16px;
}
.subscribe-btn {
width: 100%;
}
.adb-hero-search {
display: none;
}
.adb-search-box {
display:inline;
position: absolute;
top: 24px;
right: 24px;
font-size: 24px;
color: white;
}
}
/** Mobile **/
@media (max-width: 480px) {
.header-outer, .cols-wrapper {
padding: 0 16px;
}
.adb-hero-logo {
height: 28px;
top: 24px;
left: 76px;
}
.adb-hero-back, .adb-hero-back:link, .adb-hero-back:visited {
margin-left: 16px;
}
.cols-wrapper {
margin-top: 0;
overflow-x: auto;
}
.post-header .publishdate, .post .post-content {
font-size: 16px;
}
.post .post-content {
line-height: 28px;
margin-bottom: 30px;
}
.post {
margin-top: 30px;
}
.byline-author {
display: block;
font-size: 12px;
line-height: 24px;
margin-top: 6px;
}
#main .post .title a {
font-weight: 500;
color: #4c4c4c;
color: rgba(0, 0, 0, .70);
}
#main .post .post-header {
padding-bottom: 12px;
}
#main .post .post-header .published {
margin-bottom: -8px;
margin-top: 3px;
}
.post .read-more {
display: block;
margin-top: 14px;
}
.post .tr-caption {
font-size: 12px;
}
#main .post .title a {
font-size: 20px;
line-height: 30px;
}
.post-content iframe {
/* iframe won't keep aspect ratio when scaled down. */
max-height: 240px;
}
.post-content .separator img, .post-content .tr-caption-container img {
margin-left: -16px;
max-width: 100%;
}
.post-content table {
table-layout: fixed;
width: 100%;
}
/** List page tweaks. **/
.list-page .post-original {
display: none;
}
.list-page .post-summary {
display: block;
}
.list-page .comment-container {
display: none;
}
.list-page .label-footer {
display: none;
}
.list-page #main .post .post-footer {
border-bottom: 1px solid #eee;
margin: -16px 0 0 0;
padding: 0 0 20px 0;
}
.list-page .post .share {
display: none;
}
/** Detail page tweaks. **/
.detail-page .post-footer .cmt_iframe_holder {
padding-top: 32px !important;
}
.detail-page .label-footer {
margin-bottom: 0;
}
.detail-page #main .post .post-footer {
padding-bottom: 0;
}
.detail-page #comments {
display: none;
}
/* ADB */
.adb-header-console {
display: none;
}
.adb-hero-inner {
padding: 0 16px;
}
.adb-hero-title {
color: #4c4c4c;
color: rgba(0, 0, 0, .70);
font-weight: 500;
line-height: 30px;
padding-left: 80px;
}
}
/* Fixed-position sidebar for larger screens */
@media screen and (min-height: 700px) and (min-width: 1100px) {
.col-right .section {
max-height: calc(100vh - 197px);
overflow: auto;
}
.col-right.scroll-start {
left: 50%;
margin-left: 241px;
position: fixed;
top: 96px;
}
.col-right.scroll-end {
bottom: 485px;
position: absolute;
top: auto;
}
}
[data-about-pullquote], [data-is-preview], [data-about-syndication] {
display: none;
}
#imgFull {
display: block;
margin: 10px auto;
width: 90%;
border: 0;
padding: 0;
}
#imgHalf {
display: block;
margin: 10px auto;
width: 50%;
border: 0;
padding: 0;
}
#flexParent {
display: flex;
width: 100%;
justify-content: space-around;
align-items: center;
}
#flexImg {
width: 90%;
margin: 0;
padding: 0;
border: 0;
}
#imgCaption {
text-align: center;
font-style: italic;
font-size: 85%;
margin: -5px 0 10px 0;
padding: 0;
border: 0;
}
#floatRight {
float: right;
width: 45%;
margin: 5px 0 5px 5px;
padding: 0;
border: 0;
}
#floatLeft {
float: left;
width: 45%;
margin: 5px 5px 5px 0;
padding: 0;
border: 0;
}
</style>
<style>
.loading {
visibility: visible;
}
</style>
</head><body>
<div class="adb-detail">
<div class="adb-detail__info">
<p>
9 de agosto de 2023
</p>
</div>
<div class="adb-detail__title">
<h1>Presentamos el selector de emojis de Jetpack: Una nueva forma de agregar emojis a tu app para Android</h1>
</div>
<hr>
<div class="adb-detail__content">
<div>
<meta content="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiNYIXjrjANrJCUxJPQ025OyEJWcF2HLn4tCVWD9hH19ur0Ct3nXMpJFGBAlcYKhh7A_ir0DO5Z2i3Rmtcg69J5d3pQX2r-5d-LSadSEhbE7WnI0oVDmPcQiv38kLsg0_MWTDiaziZ4o9IpIVGan1SIWIHLVvCJoD8cchqVmiO3l2aqWcqfVLWoJpurM8M/s1600/social-Introducing-Jetpack-Emoji-Picker.png" name="twitter:image">
<img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiNYIXjrjANrJCUxJPQ025OyEJWcF2HLn4tCVWD9hH19ur0Ct3nXMpJFGBAlcYKhh7A_ir0DO5Z2i3Rmtcg69J5d3pQX2r-5d-LSadSEhbE7WnI0oVDmPcQiv38kLsg0_MWTDiaziZ4o9IpIVGan1SIWIHLVvCJoD8cchqVmiO3l2aqWcqfVLWoJpurM8M/s1600/social-Introducing-Jetpack-Emoji-Picker.png" style="display: none;">
<em>Publicado por Lin Guo, ingeniero de software</em>
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj6phT8HY8oin_olpqgN4rQ58UXhN_sh7pSYHUh5T0B3zDLpXtrZRCn1nSGQ6mfjqai1qScaFYw2Zrt6c66H6Vqg0askiNv9zfPWZN9xY86qdVmRm-_3zrBkPJdhfGsDgZ9DFxFCzYMQPxEZCOmyTmN4y_zYNRBWl2ln3REdp-2YQ7ll3mFDLRoxFu1cfY/s1600/header1.png"><img border="0" data-original-height="800" data-original-width="1058" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj6phT8HY8oin_olpqgN4rQ58UXhN_sh7pSYHUh5T0B3zDLpXtrZRCn1nSGQ6mfjqai1qScaFYw2Zrt6c66H6Vqg0askiNv9zfPWZN9xY86qdVmRm-_3zrBkPJdhfGsDgZ9DFxFCzYMQPxEZCOmyTmN4y_zYNRBWl2ln3REdp-2YQ7ll3mFDLRoxFu1cfY/s1600/header1.png"></a>
<p>En los últimos años, los emojis comenzaron a utilizarse cada vez con más frecuencia en la comunicación. Estos pequeños íconos se pueden usar para expresar una variedad de emociones y le agregan un toque personal a los mensajes. Sin embargo, agregar emojis a tu app para Android puede resultar todo un desafío. Para eso, contamos con la biblioteca del selector de emojis. Con solo agregar unas pocas líneas de código a tu app, podrás comenzar a usar emojis de inmediato. Es la forma más sencilla de empezar a usar emojis para que tu app sea más divertida y expresiva.</p>
<figure><div style="text-align: center;"><img alt="Imagen en movimiento del uso del selector de emojis en Google Pixel 6 Pro" border="0" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi4_RpGW835unpm3MwWghkAiduFVhYNUqCBnBpgaS_UqGeZuRovW63y8eumM0KuCcrwai7LL8ndFHj1wzWKXQVm3kY5Ybwazz-aPZPXvKT-Ql1fyMJjYP2biHqB9Lqm1odwku-g6pWzMNyFf1c2Mw9z_V1YmgkLm-l4JN9Jc884RnCPlyWeYbFERTdLMww/s1600/EmojiPicker-GIF%20%281%29.gif"></div><figcaption><center><em><strong>Figura 1:</strong> Selector de emojis</em></center></figcaption></figure><br>
<strong><h3>Funciones útiles que ofrece la biblioteca </h3></strong> <span style="font-size: large;">Emojis actualizados sin tofu (☐)</span>
<p>Cada año, se publican nuevas versiones de emojis y actualizamos la biblioteca periódicamente para ofrecerlos. Los teléfonos de más alta gama pueden renderizar estos nuevos emojis sin ningún problema. Sin embargo, en el caso de los teléfonos de gama más baja, es posible que los nuevos emojis se muestren como un pequeño cuadrado llamado <a href="https://developer.android.com/develop/ui/views/text-and-emoji/emoji2" target="_blank">tofu</a> (☐). La biblioteca asegura su detección y eliminación. De esta manera, se garantiza que la biblioteca sea compatible con varios dispositivos y versiones de Android.</p>
<span style="font-size: large;">IU fluida</span>
<p>La biblioteca cuenta con varias optimizaciones que buscan reducir la latencia de inicio y acelerar la experiencia de desplazamiento, como el almacenamiento en caché de los emojis renderizables, el dibujo de emojis de manera asíncrona y las optimizaciones de RecyclerView.</p>
<span style="font-size: large;">Experiencia inclusiva personalizada</span>
<p>Las selecciones del usuario son persistentes en la biblioteca. Los emojis que se eligieron recientemente se muestran en la fila superior para que los usuarios puedan buscarlos y compartirlos fácilmente. Además, la biblioteca ofrece una variedad de emojis que representan a diferentes personas y culturas en los paneles de variantes. Si el usuario elije un emoji de los paneles de variantes (Figura 2), la elección se guarda y se establece como predeterminada en el panel principal.</p>
<figure><div style="text-align: center;"><img alt="Imagen en la que se muestra la diversidad de personajes que se pueden elegir en el selector de emojis." border="0" height="472" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiEoIqRkuDMjGvja2UOoV4ydLcSdMoh9t6IEo1dMn-rxrE9vJ3ERWcquC98dWu2UapG_MFMChzmYnCvI6ivyaiWsNQ7LSTtje57F5OfVx5e8q5jC47gl-46m9pLTK2khWba4bdYcGLXHJQRuYuYmnLYjsoeJYFoF-6jKVUSnDn0KEPTQ-AHej6u8uSbrBU/w640-h472/image1.png" width="640"></div><figcaption><center><em><strong>Figura 2:</strong> Variantes de emojis</em></center></figcaption></figure><br>
<strong><h3>Integra el selector de emojis a tu app en solo 3 pasos</h3></strong> <span style="font-size: large;"><span style="size: large;">Paso 1: Importa la biblioteca en <span style="color: #0d904f; font-family: courier;">build.gradle</span></span> </span><div><table class="leading-snug" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: #f8f8f8; border-collapse: collapse; border: none; font-family: ui-sans-serif, system-ui, -apple-system, "system-ui", "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; line-height: 1.375; max-width: min(90ch, 100%); table-layout: fixed; text-indent: 0px; width: 880px;"><colgroup style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border-color: rgb(229, 231, 235); border-style: solid; border-width: 0px; box-sizing: border-box;"></colgroup><tbody style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border-color: rgb(229, 231, 235); border-style: solid; border-width: 0px; box-sizing: border-box; display: block; max-width: 100%; overflow-x: auto;"><tr style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: transparent; border-color: rgb(229, 231, 235); border-style: solid; border-width: 0px; box-sizing: border-box; height: 0px;"><td style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border-color: rgb(229, 231, 235); border-style: solid; border-width: 0px; box-sizing: border-box; padding: 4pt; vertical-align: top;"><code class="m-0 p-0 whitespace-pre-wrap font-monospace" id="code-output" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: transparent; border-color: rgb(229, 231, 235); border-style: solid; border-width: 0px; box-sizing: border-box; display: block; margin: 0px; padding: 0px; white-space-collapse: preserve; width: 80ch;"><span style="font-family: courier;">dependencies {
implementation <span class="hljs-string" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border-color: rgb(229, 231, 235); border-style: solid; border-width: 0px; box-sizing: border-box;"><span style="color: green;">"androidx.emoji2:emojipicker:</span><span class="hljs-variable" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border-color: rgb(229, 231, 235); border-style: solid; border-width: 0px; box-sizing: border-box;"><span style="color: green;">$version</span></span><span style="color: green;">"</span></span>
}</span><span style="font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; font-size: 12px;">
</span></code></td></tr></tbody></table></div><div><span style="font-size: large;"><span style="size: large;"><br></span></span></div><div><span style="font-size: large;"><span style="size: large;">Paso 2: Amplía el <span style="color: #0d904f; font-family: courier;">EmojiPickerView</span></span> </span><p>De manera opcional, configura <span style="color: #0d904f; font-family: courier;">emojiGridColumns</span> y <span style="color: #0d904f; font-family: courier;">emojiGridRows</span> en función del tamaño deseado de cada celda de emoji.</p>
<b>Ejemplo que usa EmojiPickerView en XML</b></div><div><table class="leading-snug" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: #f8f8f8; border-collapse: collapse; border: none; font-family: ui-sans-serif, system-ui, -apple-system, "system-ui", "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; line-height: 1.375; max-width: min(90ch, 100%); table-layout: fixed; text-indent: 0px; width: 880px;"><colgroup style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border-color: rgb(229, 231, 235); border-style: solid; border-width: 0px; box-sizing: border-box;"></colgroup><tbody style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border-color: rgb(229, 231, 235); border-style: solid; border-width: 0px; box-sizing: border-box; display: block; max-width: 100%; overflow-x: auto;"><tr style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: transparent; border-color: rgb(229, 231, 235); border-style: solid; border-width: 0px; box-sizing: border-box; height: 0px;"><td style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border-color: rgb(229, 231, 235); border-style: solid; border-width: 0px; box-sizing: border-box; padding: 4pt; vertical-align: top;"><code class="m-0 p-0 whitespace-pre-wrap font-monospace" id="code-output" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: transparent; border-color: rgb(229, 231, 235); border-style: solid; border-width: 0px; box-sizing: border-box; display: block; margin: 0px; padding: 0px; white-space-collapse: preserve; width: 80ch;"><span class="hljs-tag" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border-color: rgb(229, 231, 235); border-style: solid; border-width: 0px; box-sizing: border-box;"><span style="font-family: courier;"><span style="color: #0d904f;"><<span class="hljs-name" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border-color: rgb(229, 231, 235); border-style: solid; border-width: 0px; box-sizing: border-box;">androidx.emoji2.emojipicker.EmojiPickerView</span></span><span style="color: #d91e18;">
</span>…
<span class="hljs-attr" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border-color: rgb(229, 231, 235); border-style: solid; border-width: 0px; box-sizing: border-box;">app:emojiGridColumns</span>=<span class="hljs-string" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border-color: rgb(229, 231, 235); border-style: solid; border-width: 0px; box-sizing: border-box;">"9"</span><span style="color: #d91e18;"> </span><span style="color: #0d904f;">/></span></span></span><span style="font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, Liberation Mono, Courier New, monospace; font-size: 12px;">
</span></code></td></tr></tbody></table>
<p>Ahora, debería aparecer un selector de emojis muy simple en tu app. Para el siguiente paso, suponemos que quieres hacer algo con el emoji seleccionado.</p><div style="text-align: left;"><br></div>
<span style="font-size: large;"><span style="size: large;">Paso 3: Proporciona un procesador para el emoji seleccionado</span></span></div><div><table class="leading-snug" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: #f8f8f8; border-collapse: collapse; border: none; font-family: ui-sans-serif, system-ui, -apple-system, "system-ui", "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; line-height: 1.375; max-width: min(90ch, 100%); table-layout: fixed; text-indent: 0px; width: 880px;"><colgroup style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border-color: rgb(229, 231, 235); border-style: solid; border-width: 0px; box-sizing: border-box;"></colgroup><tbody style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border-color: rgb(229, 231, 235); border-style: solid; border-width: 0px; box-sizing: border-box; display: block; max-width: 100%; overflow-x: auto;"><tr style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: transparent; border-color: rgb(229, 231, 235); border-style: solid; border-width: 0px; box-sizing: border-box; height: 0px;"><td style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border-color: rgb(229, 231, 235); border-style: solid; border-width: 0px; box-sizing: border-box; padding: 4pt; vertical-align: top;"><code class="m-0 p-0 whitespace-pre-wrap font-monospace" id="code-output" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: transparent; border-color: rgb(229, 231, 235); border-style: solid; border-width: 0px; box-sizing: border-box; display: block; margin: 0px; padding: 0px; white-space-collapse: preserve; width: 80ch;"><span style="font-family: courier;"><span class="hljs-comment" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border-color: rgb(229, 231, 235); border-style: solid; border-width: 0px; box-sizing: border-box; color: dimgrey;">// a listener example</span>
emojiPickerView<span class="hljs-selector-class" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border-color: rgb(229, 231, 235); border-style: solid; border-width: 0px; box-sizing: border-box;">.setOnEmojiPickedListener</span> <span style="color: dimgrey;">{</span>
findViewById<span style="color: dimgrey;"><</span><span style="color: #4285f4;">EditText</span><span style="color: dimgrey;">>(</span>R.id.edit_text<span style="color: dimgrey;">)</span><span class="hljs-selector-class" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border-color: rgb(229, 231, 235); border-style: solid; border-width: 0px; box-sizing: border-box;"><span style="color: dimgrey;">.</span></span><span class="hljs-selector-class" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border-color: rgb(229, 231, 235); border-style: solid; border-width: 0px; box-sizing: border-box;">append</span><span style="color: dimgrey;">(</span>it.emoji<span style="color: dimgrey;">)</span>
<span style="color: dimgrey;">}</span></span><span style="font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; font-size: 12px;">
</span></code></td></tr></tbody></table><div style="text-align: left;"><br></div><p>Ahora, tienes un selector de emojis básico en funcionamiento. Para seguir personalizándolo (por ejemplo, para anular algunos estilos o bien ofrecer un comportamiento diferente para la fila de emojis recientes), consulta nuestra <a href="https://github.com/androidx/androidx/blob/androidx-main/emoji2/emoji2-emojipicker/api/current.txt" target="_blank">API</a> y <a href="https://github.com/androidx/androidx/tree/androidx-main/emoji2/emoji2-emojipicker/samples" target="_blank">app de ejemplo</a>.</p>
<p>También puedes <a href="https://issuetracker.google.com/issues/new?component=460938&template=1422574" target="_blank">enviar un informe de errores o una solicitud de función</a> para ayudarnos a mejorar la biblioteca.</p>
</div>
</div>
<hr>
</div>
</div>
</body></html>
2023.08.introducing-jetpack-emoji-picker-es-LA.html
Displaying 2023.08.introducing-jetpack-emoji-picker-es-LA.html.Google Developers LATAMhttp://www.blogger.com/profile/05105089662475084319noreply@blogger.com0tag:blogger.com,1999:blog-218264512262097577.post-48765398597493615722023-08-31T03:00:00.001-03:002023-09-01T12:42:03.814-03:00La historia de Buzzbusters: el equipo de estudiantes bolivianos que podría ganarle la batalla al dengue<span id="docs-internal-guid-cc32727a-7fff-866d-9726-3ded2db9c30e"><p dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-align: justify;"><span face="Lato, sans-serif" style="font-size: 10pt; font-style: italic; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space-collapse: preserve;">Cuatro estudiantes de ingeniería de Santa Cruz de La Sierra idearon un sistema que podría hacer que las autoridades sean más eficientes para combatir el mosquito transmisor del dengue. Así superaron la carrera de obstáculos que los llevó a ser uno de los tres ganadores de</span><a href="https://developers.google.com/community/gdsc-solution-challenge/" style="text-decoration-line: none;"><span face="Lato, sans-serif" style="color: #1155cc; font-size: 10pt; font-style: italic; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space-collapse: preserve;">l Google Students Club Solutions Challenge.</span></a><span face="Lato, sans-serif" style="font-size: 10pt; font-style: italic; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space-collapse: preserve;"> </span></p><div style="text-align: justify;"><br /></div><p dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-align: justify;"><span face="Lato, sans-serif" style="font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space-collapse: preserve;">A través de analíticas avanzadas y una trampa digitalizada que captura mosquitos y genera datos para entender dónde deberían concentrarse los esfuerzos de fumigación, un equipo de estudiantes bolivianos espera ayudar a las autoridades a luchar contra </span><a href="https://elpais.com/internacional/2023-03-20/la-peor-epidemia-de-dengue-en-bolivia-suma-14000-casos.html" style="text-decoration-line: none;"><span face="Lato, sans-serif" style="color: #1155cc; font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space-collapse: preserve;">la epidemia más grave de dengue</span></a><span face="Lato, sans-serif" style="font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space-collapse: preserve;"> que ha vivido Bolivia en una década.</span></p><p dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-align: justify;"><span face="Lato, sans-serif" style="font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space-collapse: preserve;"><br /></span></p><p dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;"><span face="Lato, sans-serif" style="font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space-collapse: preserve;"></span></p><div class="separator" style="clear: both; text-align: justify;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEhD88f4acZVCfLaq1UxWx_xkhscGb7j2rFlWI5V9X4Rvey06W0tV8X77_38x1ZO4sNRfSkR8jMOQgmiHhxuCgqSCsFJsnP-FUDxEsSUs3tbaDCXnjlSOUobF0LgUcehmJuraSrONOo5rTfOeeqDSKjO9AfG7kxG9Q3kInEn9WO2a_DhZib-rPWMFbUhQlv0" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="492" data-original-width="680" height="464" src="https://blogger.googleusercontent.com/img/a/AVvXsEhD88f4acZVCfLaq1UxWx_xkhscGb7j2rFlWI5V9X4Rvey06W0tV8X77_38x1ZO4sNRfSkR8jMOQgmiHhxuCgqSCsFJsnP-FUDxEsSUs3tbaDCXnjlSOUobF0LgUcehmJuraSrONOo5rTfOeeqDSKjO9AfG7kxG9Q3kInEn9WO2a_DhZib-rPWMFbUhQlv0=w640-h464" width="640" /></a></div></span><p></p><div style="text-align: justify;"><br /></div><p dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-align: justify;"><span face="Lato, sans-serif" style="font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space-collapse: preserve;">El camino del equipo Buzzbusters, como se hicieron llamar para el reto, comenzó asistiendo a un club en una universidad que no era la suya, tuvo paradas en laboratorios de biología y cursos rápidos de inteligencia artificial, y terminó en una transmisión en vivo, donde tuvieron que explicar su idea en un inglés que tuvieron que aprender a dominar a toda velocidad. Al final, le ganaron a 2.000 equipos de estudiantes de todo el mundo.</span></p><div style="text-align: justify;"><br /></div><p dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-align: justify;"><span face="Lato, sans-serif" style="background-color: white; font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space-collapse: preserve;">El primer problema que hubo que resolver fue entrar a un Google Students Club. No hay uno en la Universidad Autónoma Gabriel René Moreno, en la que sus cuatro miembros estudian ingeniería, así que al equipo le tocó pedir ingreso al club de la Universidad Mayor de San Andrés y formar una alianza de trabajo para poder colaborar con el grupo de otra universidad. </span></p><div style="text-align: justify;"><br /></div><p dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-align: justify;"><span face="Lato, sans-serif" style="background-color: white; font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space-collapse: preserve;">Cuando eso estaba resuelto, comenzó la labor de prepararse para el Solutions Challenge, un reto para proponer soluciones a las Metas de Desarrollo Sostenible de Naciones Unidas que involucren tecnologías de Google. </span></p><div style="text-align: justify;"><br /></div><p dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-align: justify;"><span face="Lato, sans-serif" style="font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space-collapse: preserve;">El dengue se transmite a través del mosquito de la especie </span><span face="Lato, sans-serif" style="font-size: 10pt; font-style: italic; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space-collapse: preserve;">Aedes</span><span face="Lato, sans-serif" style="font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space-collapse: preserve;">, que vive en zonas tropicales. Por eso, la forma más eficaz de prevenir la enfermedad es evitar la presencia del mosquito, tomando medidas como la fumigación. </span></p><div style="text-align: justify;"><br /></div><p dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-align: justify;"><span face="Lato, sans-serif" style="font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space-collapse: preserve;">Las autoridades de Santa Cruz de la Sierra, su ciudad en Bolivia, podrían enfrentar mejor la epidemia de dengue que actualmente sufre la localidad si tuvieran información para saber dónde se concentra el mosquito y fumigar de forma eficiente. Es ahí donde Buzzbusters puede ayudar.</span></p><div style="text-align: justify;"><br /></div><p dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-align: justify;"><span face="Lato, sans-serif" style="font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space-collapse: preserve;">“</span><span face="Lato, sans-serif" style="background-color: white; font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space-collapse: preserve;">Veíamos en Youtube como hacían trampas caseras para mosquitos, y ahí planteamos cómo podemos hacer utilizando inteligencia artificial”, explica Sergio Mauricio Núñez, uno de los integrantes del equipo. Esa idea se juntó con otra: “hacer un monitoreo en tiempo real y conocer la densidad de mosquitos por determinadas zonas aquí en la ciudad, para así poder hacer alertas tempranas y prevenir enfermedades transmitidas por mosquitos”.</span></p><div style="text-align: justify;"><br /></div><p dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-align: justify;"><span face="Lato, sans-serif" style="background-color: white; font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space-collapse: preserve;">Fueron siete meses de trabajo, entre investigación, creación de prototipos, desarrollo de software, análisis de datos, entrenamiento de modelos de inteligencia artificial, y el diseño de una presentación ganadora. Tuvieron que hacer una inmersión rápida en desarrollo de hardware, en etiquetado masivo de información y en tecnologías de visión computacional, pues las trampas identifican a partir de imágenes si los mosquitos que capturan son de la especie que transmite la enfermedad. </span></p><div style="text-align: justify;"><br /></div><p dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-align: justify;"><span face="Lato, sans-serif" style="background-color: white; font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space-collapse: preserve;"></span></p><div class="separator" style="clear: both; text-align: center;"><span face="Lato, sans-serif" style="background-color: white; font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space-collapse: preserve;"><iframe allowfullscreen="" class="BLOG_video_class" height="325" src="https://www.youtube.com/embed/a7Y9U4zEvCA" width="517" youtube-src-id="a7Y9U4zEvCA"></iframe></span></div><span face="Lato, sans-serif" style="background-color: white; font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space-collapse: preserve;"><br /></span><p></p><div style="text-align: justify;"><br /></div><p dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-align: justify;"><span face="Lato, sans-serif" style="background-color: white; font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space-collapse: preserve;">Para lograr eso, tuvieron que desarrollar modelos de inteligencia artificial que identificaran los mosquitos y que pudieran además ser ejecutado en una Raspberry Pi, usando diferentes lenguajes y tecnologías como TensorFlow o AutoML. “El entrenamiento de los modelos tomaba bastante tiempo”, explica Sergio, lo que les impuso el reto de encontrar soluciones que funcionaran lo suficientemente bien y que pudieran ser desarrolladas en pocas semanas. </span></p><div style="text-align: justify;"><br /></div><p dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-align: justify;"><span face="Lato, sans-serif" style="background-color: white; font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space-collapse: preserve;">“Lo que hicimos para salir del apuro, cuando ya teníamos que entregar el primer entregable, fue usar AutoML para etiquetar imágenes de mosquitos en la nube, y lo pasamos a entrenar. Después de eso salió el segundo modelo, que ya era creado en Vertex AI. Lo probamos y funcionó. Luego usamos contenedores de Docker para correrlo en la computadora, y funcionó. Reconoce los mosquitos”, explica Sergio Mauricio. </span><a href="https://github.com/githubMauri/buzzbusters-solution-challenge" style="text-decoration-line: none;"><span face="Lato, sans-serif" style="background-color: white; color: #1155cc; font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space-collapse: preserve;">Accede aquí a su código en Github</span></a><span face="Lato, sans-serif" style="background-color: white; font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space-collapse: preserve;">.</span></p><div style="text-align: justify;"><br /></div><p dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-align: justify;"><span face="Lato, sans-serif" style="background-color: white; font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space-collapse: preserve;">Conseguir el hardware también fue difícil, pues no hay mucha disponibilidad ni recursos para equipos en Bolivia. “Con los recursos que teníamos siempre tratábamos de conseguir lo que estaba a nuestro alcance. A veces no encontraba el material, entonces yo utilizaba material reciclable”, cuenta </span><span face="Lato, sans-serif" style="background-color: white; color: #202124; font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space-collapse: preserve;">Saleth Jhoselin Mamani, la integrante del equipo que se encargó del hardware.</span></p><div style="text-align: justify;"><br /></div><p dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-align: justify;"><span face="Lato, sans-serif" style="background-color: white; font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space-collapse: preserve;">También tuvieron que aprender de la biología de los mosquitos. Para eso, llevaron a cabo una colaboración con un laboratorio especializado en enfermedades tropicales, donde pudieron conseguir información crucial para diseñar y hacer funcionar la trampa. “Había que saber cómo se comporta el mosquito, en qué momento hay que poner la trampa, en qué se diferencian de otros mosquitos, qué comen, cuánto sobreviven. De ahí fuimos extrayendo todos estos datos para poder resolver el diseño de la trampa”, dice. </span></p><div style="text-align: justify;"><br /></div><p dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-align: justify;"><span face="Lato, sans-serif" style="background-color: white; font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space-collapse: preserve;">Mario Guajardo-Céspedes, </span><span face="Lato, sans-serif" style="font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space-collapse: preserve;">un ingeniero de Google en inteligencia artificial, fue su mentor en este reto. “He visto muchos proyectos y prototipos, y lo que vi que habían logrado a nivel técnico, me parecía muy interesante. O sea, ya habían montado un prototipo que analiza imágenes. Cuando llegaron con preguntas, tenían preguntas muy técnicas, muy detalladas. Tenían muy buen nivel técnico”.</span></p><div style="text-align: justify;"><br /></div><p dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-align: justify;"><span face="Lato, sans-serif" style="background-color: white; font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space-collapse: preserve;">Más allá de todos los retos de desarrollo y producto, lo más importante fue encontrar resiliencia para superar los momentos duros. </span><span face="Lato, sans-serif" style="color: #202124; font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space-collapse: preserve;">Wendy Nayely Huayhua López, otra integrante del equipo, encontró una fórmula. </span><span face="Lato, sans-serif" style="font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space-collapse: preserve;">“</span><span face="Lato, sans-serif" style="background-color: white; font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space-collapse: preserve;">Confiaba plenamente en que el proyecto iba a ser realidad y en que tendría un gran impacto”.</span><span face="Lato, sans-serif" style="font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space-collapse: preserve;"> </span></p><div style="text-align: justify;"><br /></div><p dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-align: justify;"><span face="Lato, sans-serif" style="font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space-collapse: preserve;">Cuando llegó el momento de preparar la presentación para el concurso, la experiencia de Mario fue vital. “Este equipo era muy fuerte técnicamente, pero había que enfocarse en el </span><span face="Lato, sans-serif" style="font-size: 10pt; font-style: italic; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space-collapse: preserve;">storytelling</span><span face="Lato, sans-serif" style="font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space-collapse: preserve;">. Ellos ya habían hecho el trabajo duro, pero entonces, ¿cómo lo empaquetamos?” Pasaron al top 100, y luego al top 10. A pesar de que las obligaciones de la universidad no daban espera, hicieron el esfuerzo. “Si ya estamos en el top 10, ¿por qué no dar todo de nosotros para llegar al final, que el producto siga adelante?”, cuenta Moisés Cisneros, otro de los integrantes.</span></p><div style="text-align: justify;"><br /></div><p dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-align: justify;"><span face="Lato, sans-serif" style="font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space-collapse: preserve;">En ese punto, el principal obstáculo era que debían presentar en inglés, un idioma que no todos dominaban. En cuestión de un par de días, con la ayuda de Mario lograron hacer un guión para la presentación final, el 3 de agosto de 2023.</span></p><div style="text-align: justify;"><br /></div><p dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-align: justify;"><span face="Lato, sans-serif" style="font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space-collapse: preserve;">Ese día todo estaba listo. En la sala había equipos de Corea, Indonesia, Nigeria, Estados Unidos, Reino Unido, Kazajstán, Indonesia y Singapur. La mayoría de sus miembros venían de universidades reconocidas globalmente por la calidad de su educación técnica, y muchos eran hablantes nativos de inglés. A pesar de eso, Buzzbusters fue uno de los tres equipos ganadores </span><a href="https://www.youtube.com/watch?v=duP_AI2B2XM&t=4979s" style="text-decoration-line: none;"><span face="Lato, sans-serif" style="color: #1155cc; font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space-collapse: preserve;"> El jurado les dijo</span></a><span face="Lato, sans-serif" style="font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space-collapse: preserve;">: “Su solución tiene el potencial de tener un gran impacto en grandes áreas geográficas, y solo requiere unos pocos sistemas de monitoreo. Nos emociona ver el impacto que tendrá”.</span></p><div style="text-align: justify;"><br /></div><div class="separator" style="clear: both; text-align: justify;"><iframe allowfullscreen="" class="BLOG_video_class" height="326" src="https://www.youtube.com/embed/duP_AI2B2XM" width="650" youtube-src-id="duP_AI2B2XM"></iframe></div><div style="text-align: justify;"><br /></div><p dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-align: justify;"><br /></p><p dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-align: justify;"><span face="Lato, sans-serif" style="font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space-collapse: preserve;">Las felicitaciones vinieron de amigos, colegas y profesores; y por unos días estuvieron en los reflectores. </span><a href="https://www.facebook.com/100078127075801/posts/pfbid0jK3GouY7dFZ9NgWrCjfhRYnMzFNGC4qBhPrnsrwu7cdd8atTE8ib98fESAMTrgyel/?mibextid=Nif5oz" style="text-decoration-line: none;"><span face="Lato, sans-serif" style="color: #1155cc; font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space-collapse: preserve;">Su universidad</span></a><span face="Lato, sans-serif" style="font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space-collapse: preserve;"> los destacó. </span><a href="https://www.facebook.com/story.php?story_fbid=pfbid02hBrGyJwGqHwRQBkNdUbibAjDEQ5hQJXV5cjiU1dmTeks1F7yeTPDH8bqCwV6LvY6l&id=100064732924861&mibextid=Nif5oz" style="text-decoration-line: none;"><span face="Lato, sans-serif" style="color: #1155cc; font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space-collapse: preserve;">Las autoridades de su ciudad,</span></a><span face="Lato, sans-serif" style="font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space-collapse: preserve;"> también, Y </span><a href="https://eldeber.com.bo/santa-cruz/con-un-sistema-de-alerta-temprana-para-prevenir-dengue-estudiantes-de-la-uagrm-ganan-premio-mundial-_334995" style="text-decoration-line: none;"><span face="Lato, sans-serif" style="color: #1155cc; font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space-collapse: preserve;">El Deber</span></a><span face="Lato, sans-serif" style="font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space-collapse: preserve;">, el diario más influyente de Bolivia, publicó una nota destacando que las autoridades del país buscarán implementar el proyecto.</span></p><div style="text-align: justify;"><br /></div><p dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-align: justify;"><span face="Lato, sans-serif" style="font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space-collapse: preserve;">Luego de esos días agitados, han tenido tiempo para pensar en el futuro del proyecto. La siguiente iteración será añadir hardware más económico, paneles solares y tarjetas SIM a los sensores, para que el dispositivo sea más accesible y su funcionamiento no dependa del suministro eléctrico, que puede ser inestable en algunas zonas. También planean incorporar análisis de sonido al modelo de detección de mosquitos, lo que permitiría mejorar su precisión.</span></p><div style="text-align: justify;"><br /></div><p dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-align: justify;"><span face="Lato, sans-serif" style="font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space-collapse: preserve;">También han podido hacer acopio de los aprendizajes que obtuvieron en este proceso. No solo de la gran cantidad de retos técnicos que lograron resolver, sino también, de las lecciones de trabajo en equipo, resiliencia y liderazgo que les permitieron superar los momentos de incertidumbre y que les servirán en sus carreras profesionales. </span></p><div style="text-align: justify;"><br /></div><div style="text-align: justify;"><br /></div>Google Developers LATAMhttp://www.blogger.com/profile/05105089662475084319noreply@blogger.com0tag:blogger.com,1999:blog-218264512262097577.post-4123271059757013082023-08-23T11:17:00.006-03:002023-08-23T11:20:20.391-03:00Presentamos el selector de emojis de Jetpack: Una nueva forma de agregar emojis a tu app para Android
<html>
<style id="page-skin-1" type="text/css"><!--
body {
font-family: Roboto, sans-serif;
font-weight: 400;
font-size: 16px;
line-height: 28px;
-webkit-font-smoothing: antialiased;
color: #202124
}
h1 {
font-family: Android Euclid, Roboto, sans-serif;
font-size: 44px;
font-weight: 500;
line-height: 61.6px
}
h2 {
font-size: 30px;
line-height: 40px
}
h2,
h3 {
font-family: Android Euclid, Roboto, sans-serif;
font-weight: 500
}
h3 {
font-size: 24px;
line-height: 32px
}
h4 {
font-family: Android Euclid, Roboto, sans-serif;
font-size: 20px;
font-weight: 500;
line-height: 26px
}
h5 {
font-size: 16px;
line-height: 24px
}
h5,
h6 {
font-family: Roboto, sans-serif;
font-weight: 600
}
h6 {
font-size: 14px;
line-height: 22px
}
.display {
font-family: Roboto, sans-serif;
font-size: 48px;
font-weight: 600;
line-height: 67.2px
}
.hidden-text {
height: 1px;
overflow: hidden;
pointer-events: none;
position: absolute;
top: -10px;
width: 1px
}
img,
video {
border: 0;
height: auto;
max-width: 100%
}
body {
position: relative;
min-height: 100vh
}
body.no-scroll {
overflow: hidden
}
a {
color: #4184f3;
text-decoration: none
}
a:focus,
a:focus-visible {
outline-offset: -2px
}
.content-wrap {
padding-top: 200px;
max-width: 800px;
margin: auto;
display: -webkit-box;
display: -webkit-flex;
display: -ms-flexbox;
display: flex;
-webkit-box-orient: vertical;
-webkit-box-direction: normal;
-webkit-flex-direction: column;
-ms-flex-direction: column;
flex-direction: column;
-webkit-box-align: center;
-webkit-align-items: center;
-ms-flex-align: center;
align-items: center
}
@media only screen and (max-width:915px) {
.content-wrap {
padding-top: 100px
}
}
.full-width {
width: 100%
}
.icon-link {
height: 42px;
width: 132px;
border-radius: 80px;
display: -webkit-inline-box;
display: -webkit-inline-flex;
display: -ms-inline-flexbox;
display: inline-flex;
-webkit-box-pack: center;
-webkit-justify-content: baseline;
-ms-flex-pack: center;
justify-content: baseline;
-webkit-box-align: center;
-webkit-align-items: center;
-ms-flex-align: center;
align-items: center;
-webkit-transition: background-color .2s linear;
transition: background-color .2s linear;
background: transparent;
border: none;
color: black !important
}
.icon-link:hover {
background-color: hsla(213, 7%, 76%, .2)
}
.icon-link:focus {
background-color: hsla(213, 7%, 76%, .26)
}
.icon-link:active {
background-color: hsla(213, 7%, 76%, .32)
}
.adb-container {
margin: 40px auto;
padding: 0 40px;
position: relative;
width: auto;
max-width: 1420px
}
@media only screen and (max-width:767px) {
.adb-container {
margin: 24px auto;
padding: 0 20px
}
}
.adb-container--large {
margin: 40px auto;
padding: 0 40px;
position: relative;
width: auto
}
@media only screen and (max-width:767px) {
.adb-container--large {
margin: 24px auto;
padding: 0 20px
}
}
.adb-container--flex-horizontal {
display: -webkit-box;
display: -webkit-flex;
display: -ms-flexbox;
display: flex
}
.section,
body {
margin: 0
}
.adb-card {
position: relative;
background: #fff;
-webkit-box-sizing: border-box;
box-sizing: border-box;
border-radius: 8px;
margin: 40px 0;
padding: 20px;
overflow: hidden;
-webkit-backface-visibility: hidden;
backface-visibility: hidden;
-webkit-transform: translateZ(0);
transform: translateZ(0);
-webkit-transition: opacity .2s linear, -webkit-box-shadow .2s linear;
transition: opacity .2s linear, -webkit-box-shadow .2s linear;
transition: box-shadow .2s linear, opacity .2s linear;
transition: box-shadow .2s linear, opacity .2s linear, -webkit-box-shadow .2s linear
}
.divider {
border: none;
height: 1px;
color: #DADCE0;
background-color: #DADCE0;
margin: 0 20px;
}
.adb-card:first-child {
background-color: #d7effe;
border: none;
padding: 32px 24px 32px;
margin: 40px 20px 60px;
}
@media only screen and (max-width:850px) {
.adb-card {
max-height: unset;
padding: 0 20px
}
.adb-card:first-child {
margin-bottom: 40px;
}
}
@media only screen and (max-width:600px) {
.adb-card:first-child {
margin: 0 -20px 40px;
}
.adb-card {
border-radius: 0;
padding: 0;
}
.divider {
margin: 0;
}
.content-wrap {
padding-top: 54px;
}
}
.adb-card:focus-within,
.adb-card:hover {
-webkit-box-shadow: 0 0 36px rgba(0, 0, 0, .1);
box-shadow: 0 0 36px rgba(0, 0, 0, .1);
cursor: pointer
}
.adb-card__href {
height: 100%;
left: 0;
opacity: 0;
position: absolute;
top: 0;
width: 100%;
z-index: 2
}
.adb-card__image-wrapper {
overflow: hidden;
position: relative;
width: auto;
-webkit-flex-basis: 40%;
-ms-flex-preferred-size: 40%;
flex-basis: 40%;
display: -webkit-box;
display: -webkit-flex;
display: -ms-flexbox;
display: flex;
-webkit-box-align: center;
-webkit-align-items: center;
-ms-flex-align: center;
align-items: center;
-webkit-box-pack: center;
-webkit-justify-content: center;
-ms-flex-pack: center;
justify-content: center
}
.adb-card__content {
padding: 24px 0 0
}
.adb-card__title {
font-family: Android Euclid, Roboto, sans-serif;
font-size: 32px;
line-height: 40px;
font-weight: 600;
margin-bottom: 12px
}
.adb-card__info {
font-weight: 400;
font-size: 16px;
line-height: 24px;
margin-bottom: 24px
}
.adb-card__description {
font-weight: 500;
font-size: 14px;
line-height: 20px;
margin-bottom: 48px
}
.adb-card:hover .adb-content__image-wrapper img,
.adb-card__href:focus~.adb-content__image-wrapper img {
-webkit-transform: scale(1.03);
transform: scale(1.03);
-webkit-transition: -webkit-transform 1s ease;
transition: -webkit-transform 1s ease;
transition: transform 1s ease;
transition: transform 1s ease, -webkit-transform 1s ease
}
.devsite-footer {
padding: 0 24px;
border-top: 1px solid #bdc1c6
}
.devsite-footer li {
display: block
}
.devsite-footer li a {
text-decoration: none;
font-size: 14px;
line-height: 16px;
color: #202124
}
.devsite-footer li a:focus,
.devsite-footer li a:hover {
color: #1a73e8;
outline: none
}
.devsite-footer-linkboxes-list {
display: grid;
grid-gap: 24px;
grid-template-columns: 1fr 1fr 1fr;
margin: 0;
padding: 24px 0;
border-bottom: 1px solid #bdc1c6
}
@media only screen and (max-width:767px) {
.devsite-footer-linkboxes-list {
grid-template-columns: 1fr;
padding-left: 0
}
}
.devsite-footer-linkbox {
display: block
}
.devsite-footer-linkbox-heading {
font-size: 16px;
line-height: 26px;
font-weight: 400;
margin: 0 0 4px
}
.devsite-footer-linkbox ul {
padding-left: 0
}
.devsite-footer-sites-list {
-webkit-box-align: center;
-webkit-align-items: center;
-ms-flex-align: center;
align-items: center
}
@media only screen and (max-width:767px) {
.devsite-footer-sites-list {
-webkit-box-orient: vertical;
-webkit-box-direction: normal;
-webkit-flex-direction: column;
-ms-flex-direction: column;
flex-direction: column;
-webkit-box-align: start;
-webkit-align-items: flex-start;
-ms-flex-align: start;
align-items: flex-start
}
}
.devsite-footer-utility nav {
display: -webkit-box;
display: -webkit-flex;
display: -ms-flexbox;
display: flex;
-webkit-box-align: center;
-webkit-align-items: center;
-ms-flex-align: center;
align-items: center
}
@media only screen and (max-width:767px) {
.devsite-footer-utility nav {
-webkit-box-orient: vertical;
-webkit-box-direction: normal;
-webkit-flex-direction: column;
-ms-flex-direction: column;
flex-direction: column;
-webkit-box-align: start;
-webkit-align-items: flex-start;
-ms-flex-align: start;
align-items: flex-start
}
}
.devsite-footer-utility-list {
display: -webkit-box;
display: -webkit-flex;
display: -ms-flexbox;
display: flex;
-webkit-box-align: center;
-webkit-align-items: center;
-ms-flex-align: center;
align-items: center;
-webkit-box-pack: justify;
-webkit-justify-content: space-between;
-ms-flex-pack: justify;
justify-content: space-between;
-webkit-box-flex: 1;
-webkit-flex: 1;
-ms-flex: 1;
flex: 1;
padding: 24px 0
}
@media only screen and (max-width:767px) {
.devsite-footer-utility-list {
-webkit-box-orient: vertical;
-webkit-box-direction: normal;
-webkit-flex-direction: column;
-ms-flex-direction: column;
flex-direction: column;
-webkit-box-align: start;
-webkit-align-items: flex-start;
-ms-flex-align: start;
align-items: flex-start;
padding: 0
}
}
.devsite-footer-utility-button {
justify-self: flex-end;
-webkit-box-align: center;
-webkit-align-items: center;
-ms-flex-align: center;
align-items: center;
line-height: 20px;
margin-left: auto;
padding-left: 16px
}
.devsite-footer-utility-item {
display: -webkit-box;
display: -webkit-flex;
display: -ms-flexbox;
display: flex;
margin: 0 8px 0 0
}
.devsite-footer-utility-item:last-child {
margin-right: 0
}
@media only screen and (min-width:768px) {
.devsite-footer-utility-item:not(:first-child):before {
content: "|";
margin: 0 8px 0 0
}
}
.devsite-footer-sites {
border-bottom: 1px solid #bdc1c6;
padding: 24px 0 23px
}
.devsite-footer-sites-logo {
height: 32px;
margin-top: 5px;
width: 185px
}
.devsite-footer-sites-list {
display: -webkit-box;
display: -webkit-flex;
display: -ms-flexbox;
display: flex;
list-style: none;
padding: 0
}
.devsite-footer-sites-item {
margin: 0 0 0 40px
}
@media only screen and (max-width:767px) {
.devsite-footer-sites-item {
margin: 0
}
}
.devsite-footer-sites-link {
display: block;
padding: 8px 0;
color: #202124
}
.devsite-footer-sites-link:focus,
.devsite-footer-sites-link:hover {
color: #1a73e8;
outline: none
}
.devsite-footer-utility-link:focus {
text-decoration: underline
}
.devsite-footer-utility .devsite-footer-utility-button {
line-height: 20px;
font: 400 14px/16px Roboto, sans-serif
}
.devsite-footer-utility .devsite-footer-utility-button:before {
content: "";
margin: 0
}
@media only screen and (max-width:767px) {
.devsite-footer-utility .devsite-footer-utility-button {
display: -webkit-box;
display: -webkit-flex;
display: -ms-flexbox;
display: flex;
-webkit-box-orient: horizontal;
-webkit-box-direction: normal;
-webkit-flex-direction: row;
-ms-flex-direction: row;
flex-direction: row;
-webkit-box-pack: justify;
-webkit-justify-content: space-between;
-ms-flex-pack: justify;
justify-content: space-between;
padding: 0;
margin: 18px 0 12px
}
}
.devsite-footer-utility .devsite-footer-utility-button .devsite-footer-utility-link {
border: 0;
background: #1a73e8;
color: #fff;
line-height: 36px;
-webkit-flex-shrink: 0;
-ms-flex-negative: 0;
flex-shrink: 0;
margin: 0 0 0 16px;
border-radius: 2px;
-webkit-box-shadow: 0 1px 2px 0;
box-shadow: 0 1px 2px 0;
display: inline-block;
font: 500 14px/36px Roboto, sans-serif;
height: 36px;
letter-spacing: 0;
min-width: 36px;
padding: 0 24px;
text-align: center;
-webkit-transition: background-color .2s, border .2s, -webkit-box-shadow .2s;
transition: background-color .2s, border .2s, -webkit-box-shadow .2s;
transition: background-color .2s, border .2s, box-shadow .2s;
transition: background-color .2s, border .2s, box-shadow .2s, -webkit-box-shadow .2s;
vertical-align: middle;
white-space: nowrap
}
.devsite-footer-utility .devsite-footer-utility-button .devsite-footer-utility-link:hover {
background: #1765cc
}
.adb-page__title {
font-family: Android Euclid, Roboto, sans-serif;
font-size: 44px;
font-weight: 500;
line-height: 61.6px;
text-align: center;
color: #202124
}
.adb-detail hr {
border: 1px solid #dadce0;
margin: 40px 0
}
.adb-detail__title {
font-size: 40px;
font-weight: 600;
line-height: 48px
}
.adb-detail__info {
font-weight: 400;
font-size: 16px;
line-height: 24px
}
.adb-detail__content {
min-height: 200px
}
.icon-sidebar {
position: absolute;
display: -webkit-box;
display: -webkit-flex;
display: -ms-flexbox;
display: flex;
-webkit-box-orient: vertical;
-webkit-box-direction: normal;
-webkit-flex-direction: column;
-ms-flex-direction: column;
flex-direction: column;
-webkit-box-pack: start;
-webkit-justify-content: flex-start;
-ms-flex-pack: start;
justify-content: flex-start;
top: 0;
left: -300px;
max-width: 220px;
gap: 8px
}
.icon-sidebar .share-text {
font-weight: 500;
margin-left: 4px
}
@media only screen and (max-width:1440px) {
.icon-sidebar {
position: relative;
-webkit-flex-direction: row;
-ms-flex-direction: row;
flex-direction: row;
left: 0;
margin-top: -20px;
margin-bottom: 40px;
}
.icon-sidebar .share-text {
display: none;
}
}
.copy-tooltip {
display: none;
position: fixed;
bottom: 16px;
left: 10px;
z-index: 100;
opacity: 0;
-webkit-transition: opacity 0.3s;
transition: opacity 0.3s;
}
.copy-tooltip .copy-tooltiptext {
width: 200px;
background-color: #073042;
color: #fff;
text-align: center;
border-radius: 80px;
padding: 8px 16px;
}
.header__overlay {
height: 100vh;
left: 0;
position: fixed;
width: 100vw;
border: none;
background-color: rgba(0, 0, 0, .4);
-webkit-animation: fade-in .4s cubic-bezier(.39, .575, .565, 1);
animation: fade-in .4s cubic-bezier(.39, .575, .565, 1);
opacity: 0;
top: 0;
z-index: -1;
display: none
}
.header__overlay.show {
display: block;
opacity: 1;
z-index: 800;
-webkit-transition: opacity .2s ease-in-out;
transition: opacity .2s ease-in-out
}
.social-icons__links {
height: 100%;
display: -webkit-box;
display: -webkit-flex;
display: -ms-flexbox;
display: flex;
-webkit-box-align: center;
-webkit-align-items: center;
-ms-flex-align: center;
align-items: center;
gap: 24px
}
.social-icons__links path {
fill: #80868b
}
.social-icons__container-header {
display: -webkit-box;
display: -webkit-flex;
display: -ms-flexbox;
display: flex;
-webkit-box-align: center;
-webkit-align-items: center;
-ms-flex-align: center;
align-items: center;
height: 100%;
margin-right: 14px
}
@media only screen and (max-width:1000px) {
.social-icons__container-header {
display: none
}
}
.adb-blog-logo:focus,
.adb-blog-logo:hover {
opacity: .7;
text-decoration: none
}
.adb-blog-logo__image {
height: 32px;
margin-left: 0;
margin-top: 6px
}
@media only screen and (min-width:840px) {
.adb-blog-logo__image {
margin-left: 24px
}
}
.header {
position: fixed;
background: #fff;
z-index: 700;
top: 0;
width: 100%;
overflow: hidden;
-webkit-box-shadow: 0 1px 2px 0 rgba(60, 64, 67, .3), 0 2px 6px 2px rgba(60, 64, 67, .15);
box-shadow: 0 1px 2px 0 rgba(60, 64, 67, .3), 0 2px 6px 2px rgba(60, 64, 67, .15);
height: auto
}
.header .top-row {
display: -webkit-box;
display: -webkit-flex;
display: -ms-flexbox;
display: flex;
-webkit-box-pack: justify;
-webkit-justify-content: space-between;
-ms-flex-pack: justify;
justify-content: space-between;
padding-right: 24px;
height: 50px;
-webkit-box-align: center;
-webkit-align-items: center;
-ms-flex-align: center;
align-items: center;
border-bottom: 1px solid #e6e6e6
}
@media only screen and (max-width:839px) {
.header .top-row {
padding: 0 16px
}
}
.header .top-row__left,
.header .top-row__right {
-webkit-box-align: center;
-webkit-align-items: center;
-ms-flex-align: center;
align-items: center;
-webkit-box-flex: 0;
-webkit-flex: 0 0 auto;
-ms-flex: 0 0 auto;
flex: 0 0 auto;
height: 100%
}
.header .nav-row,
.header .top-row__left,
.header .top-row__right {
display: -webkit-box;
display: -webkit-flex;
display: -ms-flexbox;
display: flex
}
.header .nav-row {
background: #fff;
-webkit-box-pack: justify;
-webkit-justify-content: space-between;
-ms-flex-pack: justify;
justify-content: space-between;
width: 100%
}
.header .nav-items {
display: -webkit-box;
display: -webkit-flex;
display: -ms-flexbox;
display: flex;
-webkit-box-flex: 1;
-webkit-flex-grow: 1;
-ms-flex-positive: 1;
flex-grow: 1;
height: 50px;
position: relative;
background-color: #fff
}
@media only screen and (max-width:839px) {
.header .nav-items {
display: none
}
}
.header .nav-items tab {
position: relative
}
.header .nav-items tab.active .header__nav-item:after,
.header .nav-items tab:hover .header__nav-item:after {
background: #1a73e8
}
.header .nav-items tab.active .header__nav-item,
.header .nav-items tab:focus-within a {
color: #202124
}
@media only screen and (max-width:839px) {
.header .header__cta,
.header .nav-items {
display: none
}
}
.header__search-container {
display: -webkit-box;
display: -webkit-flex;
display: -ms-flexbox;
display: flex;
-webkit-box-align: center;
-webkit-align-items: center;
-ms-flex-align: center;
align-items: center;
margin: 6px 0 6px 24px;
overflow: hidden;
position: relative;
margin-right: 36px;
border-radius: 4px
}
@media only screen and (max-width:767px) {
.header__search-container:not(.mobile) {
display: none
}
}
.header__search-container.mobile {
margin: 0 0 20px
}
.header__search-container.mobile #searchform,
.header__search-container.mobile .searchbox {
width: 100%
}
.header__search-container .searchbox {
border-radius: 2px
}
.header__search-container .searchbox input {
font-family: Android Euclid, Roboto, sans-serif;
font-weight: 400;
font-size: 16px;
line-height: 28px;
font-weight: 500;
color: #80868b;
border: 0;
margin: 0;
height: 20px;
outline: 0;
padding: 8px 8px 8px 40px;
width: 100%;
-webkit-transition: background .2s;
transition: background .2s
}
.header__search-container .searchbox input::-webkit-input-placeholder {
color: #80868b
}
.header__search-container .searchbox input:-ms-input-placeholder,
.header__search-container .searchbox input::-ms-input-placeholder {
color: #80868b
}
.header__search-container .searchbox input::placeholder {
color: #80868b
}
.header__search-container .searchbox input:hover {
background: #e8eaed
}
.header__search-container .material-icons {
color: #80868b;
left: 8px;
position: absolute;
top: 6px;
-webkit-transition: color .2s;
transition: color .2s
}
.header__cta {
font-family: Android Euclid, Roboto, sans-serif;
font-size: 16px;
font-weight: 600;
line-height: 20px;
display: -webkit-box;
display: -webkit-flex;
display: -ms-flexbox;
display: flex;
-webkit-box-align: center;
-webkit-align-items: center;
-ms-flex-align: center;
align-items: center;
color: #1a73e8 !important;
text-decoration: none
}
.header__cta.mobile {
padding: 18px 0
}
.header__cta:hover .cta-icon {
margin-left: 0;
margin-right: 12px
}
.header__cta .cta-icon {
-webkit-transition: margin-right .2s linear, margin-left .2s linear;
transition: margin-right .2s linear, margin-left .2s linear;
margin-left: 4px;
margin-right: 8px;
-webkit-transform: rotate(180deg);
transform: rotate(180deg)
}
.header__cta .cta-icon path {
fill: #1a73e8
}
.header__nav-item {
font-family: Roboto, sans-serif;
font-size: 16px;
font-weight: 600;
line-height: 24px;
color: #80868b;
font-weight: 500;
display: -webkit-box;
display: -webkit-flex;
display: -ms-flexbox;
display: flex;
-webkit-box-align: center;
-webkit-align-items: center;
-ms-flex-align: center;
align-items: center;
padding: 0 18px;
height: 100%;
text-transform: none;
text-decoration: none
}
.header__nav-item:hover {
color: #202124
}
.header__nav-item.mobile {
font-weight: 500;
padding: 0
}
.header__nav-item:after {
bottom: 0;
border-radius: 3px 3px 0 0;
content: "";
display: block;
height: 3px;
left: 50%;
min-width: 20px;
position: absolute;
right: 0;
-webkit-transform: translateX(-50%);
transform: translateX(-50%);
width: calc(100% - 24px)
}
.header__hamburger {
border: 0;
background: none;
outline: none;
padding: 0;
margin: 1px 8px 0 -4px;
padding: 8px;
color: rgba(0, 0, 0, .65);
cursor: pointer
}
@media only screen and (min-width:840px) {
.header__hamburger {
display: none
}
}
.header__side-menu {
background-color: #fff;
bottom: 0;
-webkit-box-orient: vertical;
-webkit-box-direction: normal;
-webkit-flex-direction: column;
-ms-flex-direction: column;
flex-direction: column;
height: 100%;
left: 0;
overflow: auto;
position: fixed;
top: 0;
-webkit-transform: translateX(-100%);
transform: translateX(-100%);
-webkit-transition: -webkit-transform .2s cubic-bezier(.215, .61, .355, 1);
transition: -webkit-transform .2s cubic-bezier(.215, .61, .355, 1);
transition: transform .2s cubic-bezier(.215, .61, .355, 1);
transition: transform .2s cubic-bezier(.215, .61, .355, 1), -webkit-transform .2s cubic-bezier(.215, .61, .355, 1);
z-index: 900
}
.header__side-menu.is-open {
-webkit-transform: translateX(0);
transform: translateX(0);
width: 80%
}
.header__side-menu.is-open,
.header__side-menu__content {
display: -webkit-box;
display: -webkit-flex;
display: -ms-flexbox;
display: flex;
height: 100%
}
.header__side-menu__content {
padding: 18px 16px 0;
-webkit-box-orient: vertical;
-webkit-box-direction: normal;
-webkit-flex-direction: column;
-ms-flex-direction: column;
flex-direction: column
}
.header__side-menu__content .spacer {
-webkit-box-flex: 1;
-webkit-flex: 1;
-ms-flex: 1;
flex: 1
}
.header__side-menu__title {
font-family: Roboto, sans-serif;
font-size: 20px;
line-height: 26px;
font-weight: 500;
margin-bottom: 12px
}
.header__side-menu__items {
list-style: none
}
.header__side-menu__items li {
padding: 12px 0
}
.header__side-menu__items tab {
position: relative
}
.header__side-menu__items tab.active .header__nav-item,
.header__side-menu__items tab:focus-within a {
color: #202124
}
.header__side-menu__bottom {
border-top: 1px solid #e6e6e6
}
.header__side-menu__logo-container {
background: #fff;
height: 40px;
display: -webkit-box;
display: -webkit-flex;
display: -ms-flexbox;
display: flex;
-webkit-box-align: center;
-webkit-align-items: center;
-ms-flex-align: center;
align-items: center;
-webkit-flex-shrink: 0;
-ms-flex-negative: 0;
flex-shrink: 0;
padding: 4px 16px;
border-bottom: 1px solid #e6e6e6
}
#nav .widget {
margin: 0
}
.featured__wrapper {
width: 100%;
border: 0;
background-color: #e8f0fe;
display: -webkit-box;
display: -webkit-flex;
display: -ms-flexbox;
display: flex;
-webkit-box-pack: center;
-webkit-justify-content: center;
-ms-flex-pack: center;
justify-content: center;
-webkit-box-align: center;
-webkit-align-items: center;
-ms-flex-align: center;
align-items: center;
padding: 80px 0
}
@media only screen and (max-width:767px) {
.featured__wrapper {
padding: 0
}
}
.featured__inner {
max-width: 1080px;
width: calc(100% - 24px);
display: -webkit-box;
display: -webkit-flex;
display: -ms-flexbox;
display: flex;
-webkit-box-orient: vertical;
-webkit-box-direction: normal;
-webkit-flex-direction: column;
-ms-flex-direction: column;
flex-direction: column;
-webkit-box-pack: justify;
-webkit-justify-content: space-between;
-ms-flex-pack: justify;
justify-content: space-between;
position: relative;
padding: 48px
}
@media only screen and (min-width:768px) {
.featured__inner {
-webkit-box-orient: horizontal;
-webkit-box-direction: normal;
padding: 12px 80px
}
}
.featured__href {
height: 100%;
left: 0;
position: absolute;
top: 0;
width: 100%;
z-index: 2
}
.featured__image {
-webkit-align-self: center;
-ms-flex-item-align: center;
align-self: center;
width: 100%;
max-width: 100%;
}
.featured__content {
-webkit-align-self: center;
-ms-flex-item-align: center;
align-self: center;
margin-top: 24px;
width: 100%
}
.featured__title {
font-size: 32px;
line-height: 44.8px;
font-weight: 500;
font-family: Android Euclid, Roboto, sans-serif;
margin-bottom: 15px
}
.featured__info {
font-family: Roboto Mono, monospace;
font-weight: 400;
font-size: 12px;
line-height: 160%;
margin-bottom: 24px
}
.featured__description {
margin-bottom: 48px
}
.preview.featured__wrapper {
-webkit-box-orient: vertical;
-webkit-box-direction: normal;
-webkit-flex-direction: column;
-ms-flex-direction: column;
flex-direction: column;
background-color: #f1f3f4;
padding: 64px 0 120px
}
.preview.featured__wrapper h1 {
margin: 0 0 64px
}
.blog-label-container {
display: -webkit-box;
display: -webkit-flex;
display: -ms-flexbox;
display: flex;
-webkit-box-orient: horizontal;
-webkit-box-direction: normal;
-webkit-flex-direction: row;
-ms-flex-direction: row;
flex-direction: row;
-webkit-box-align: center;
-webkit-align-items: center;
-ms-flex-align: center;
align-items: center;
-webkit-flex-wrap: wrap;
-ms-flex-wrap: wrap;
flex-wrap: wrap;
gap: 16px
}
.blog-label-container .blog-label {
text-decoration: none;
z-index: 3
}
.blog-label-container .blog-label span {
font-size: 14px;
line-height: 20px;
font-weight: 500;
text-align: center;
background-color: #F1F3F4;
border-radius: 100px;
padding: 4px 16px;
color: #3c4043
}
.adb-card:first-child .blog-label span {
background-color: #fff;
}
.blog-label-container .blog-label span:focus,
.blog-label-container .blog-label span:hover {
background-color: #D7EFFE
}
.adb-card:first-child .blog-label span:focus,
.adb-card:first-child .blog-label span:hover {
background-color: #F1F3F4
}
.blog-label-container .blog-label span:focus-visible {
outline-offset: 0
}
#pagination-container {
display: none
}
.pagination {
display: -webkit-box;
display: -webkit-flex;
display: -ms-flexbox;
display: flex;
-webkit-box-pack: justify;
-webkit-justify-content: space-between;
-ms-flex-pack: justify;
justify-content: space-between;
width: 100%
}
.pagination .page-button {
font-family: Android Euclid, Roboto, sans-serif;
font-size: 16px;
font-weight: 600;
line-height: 24px;
color: black;
background-color: #3DDC84;
padding: 16px 24px;
border-radius: 80px;
text-decoration: none
}
.pagination .page-button:focus,
.pagination .page-button:hover {
background-color: #3DDC8460;
}
.pagination .page-button.disabled {
color: #80868b;
background-color: #f1f3f4
}
--></style>
<style id="template-skin-1" type="text/css"><!--
--></style>
<style>
/** Blogger default styles **/
html, .Label h2, #sidebar .rss a, .BlogArchive h2, .FollowByEmail h2.title, .widget .post h2 {
font-family: Roboto, sans-serif;
}
.plusfollowers h2.title, .post h2.title, .widget h2.title {
font-family: Roboto, sans-serif;
}
pre, .post-content pre.prettyprint {
background-color: #f7f7f7;
border: 1px solid #ddd;
margin: 0 0 1em 0;
padding: 1em;
overflow: auto;
}
pre, code {
font-size: 9pt;
line-height: 125%;
font-family: monospace;
}
pre, code {
color: #060;
font: 13px/18px Consolas, 'Liberation Mono', Menlo, Monaco, Courier, monospace;
-webkit-font-smoothing: subpixel-antialiased;
-moz-osx-font-smoothing: auto;
}
/* Styles for https://github.com/google/code-prettify */
.com { color: #060; }
.kwd { color: #008; }
.typ { color: #606; }
.lit { color: #066; }
.pun { color: #660; }
.pln { color: #000; }
.fb-custom img, .twitter-custom img, .gplus-share img, .email-custom img {
cursor: pointer;
opacity: 0.54;
}
.twitter-custom, .gplus-share, .fb-custom {
margin-right: 12px;
}
/** Blogger custom theme **/
.adb-header,
.searchBox input {
box-sizing: border-box;
}
.popout-nav {
background-color: white;
width: 280px;
height: 100%;
position: fixed;
z-index: 6;
left: -280px;
transition: left 0.2s;
}
.popout-search {
background-color: white;
width: 280px;
position: fixed;
z-index: 6;
right: -280px;
transition: right 0.2s;
top: 0;
}
.popout-search .widget {
margin: 0;
}
.popout-search #BlogSearch2_form .popout-options {
padding-right: 24px;
width: calc(100% - 48px);
}
.dropdown-nav {
display: none;
background-color: white;
width: 104px;
position: fixed;
padding: 4px 0px 3px 0px;
z-index: 4;
left: 352px;
top: 176px;
transition: top 0.2s;
box-shadow: 0 0px 2px 0 rgba(60,64,67,.3), 0 0px 6px 2px rgba(60,64,67,.15), inset 0 0px 6px -4px rgba(154,160,166,.5);
}
.dropdown-options {
align-items: center;
display: flex;
flex-wrap: wrap;
width: 94px;
height: 48px;
padding-left: 10px;
}
.dropdown-options:hover {
background-color: #f7f9fa;
}
.dropdown-options span {
color: #80868b;
}
.popout-options {
padding-right: 8px;
padding-left: 24px;
padding-top: 16px;
padding-bottom: 15px;
display: inline-block;
width: calc(100% - 32px);
border-top: 1px solid #ddd;
font-size: 13px;
font-weight: 700;
color: #80868b !important;
}
.popout-options:last-of-type {
border-bottom: 1px solid #ddd;
}
.popout-options:first-of-type {
border-top: 0;
}
#close-popout {
padding: 12px 12px 11px 20px;
}
#close-search-popout {
padding: 12px 20px 11px 12px;
text-align: right;
}
.popout-search-overlay{
display: none;
opacity: 0;
background-color: black;
width: 100%;
height: 100%;
position: fixed;
transition: opacity 0.2s;
}
.popout-overlay{
display: none;
opacity: 0;
background-color: black;
width: 100%;
height: 100%;
position: fixed;
z-index: 5;
transition: opacity 0.2s;
}
html {
background-color: #fff;
font-family: Roboto, sans-serif;
-moz-osx-font-smoothing: grayscale;
-webkit-font-smoothing: antialiased;
}
body {
width: 100%;
position: absolute;
padding: 0;
/* This ensures that the scroll bar is always present, which is needed */
/* because render happens after page load; otherwise the header */
/* would 'bounce' in-between states. */
min-height: 150%;
}
h2 {
font-size: 130%;
}
h1, h2, h3, h4, h5 {
line-height: 1.5em;
margin-bottom: 1em;
}
html, h4, h5, h6 {
font-size: 14px;
}
a, a:visited {
color: #039be5;
text-decoration: none;
}
pre code {
display: block;
}
.cols-wrapper {
margin-top: 56px;
}
.header-outer, .cols-wrapper {
padding: 0 60px;
}
html, .header-inner a {
color: #212121;
color: rgba(0, 0, 0, .87);
}
/** Archive widget. **/
.BlogArchive {
font-size: 13px;
font-weight: normal;
}
.BlogArchive .widget- {
display: none;
}
.BlogArchive h2, .Label h2 {
color: #039be5;
text-decoration: none;
}
/* Specificity needed here to override widget CSS defaults. */
/* Months */
.Label {
font-size: 13px;
font-weight: normal;
}
.sidebar-icon {
display: inline-block;
width: auto;
vertical-align: middle;
height: 24px;
margin-right: 24px;
}
.sidebar-social-links {
align-items: center;
}
.sidebar-social-links .android-logo,
.android-logo {
height: 48px;
}
.sidebar-social-links a:last-child img {
margin-right: 0;
}
.Label .widget- {
display: none;
}
.searchBox input {
border: 1px solid #eee;
color: #212121;
color: rgba(0, 0, 0, .87);
font-size: 14px;
padding: 8px 8px 8px 40px;
width: 100%;
font-family: Android Euclid, Roboto, sans-serif;
background: url('https://www.gstatic.com/images/icons/material/system/1x/search_grey600_24dp.png') 8px center no-repeat;
}
.searchBox ::-webkit-input-placeholder {
/* WebKit, Blink, Edge */
color: rgba(0, 0, 0, .54);
}
.section {
margin: 0;
padding: 0;
}
#sidebar-top {
border: 1px solid #eee;
}
#sidebar-top > div {
margin: 16px 0;
}
/*main post*/
.post {
margin-bottom: 30px;
}
#main .post .title {
margin: 0;
}
#main .post .title a {
color: #212121;
color: rgba(0, 0, 0, .87);
font-weight: normal;
font-size: 24px;
}
.message, #main .post .post-header {
margin: 0;
padding: 0;
}
#main .post .post-header .caption, #main .post .post-header .labels-caption, #main .post .post-footer .caption, #main .post .post-footer .labels-caption {
color: #444;
font-weight: 500;
}
#main .post .post-header .published {
font-size: 11px;
font-weight: bold;
}
.post-header .publishdate {
font-size: 16px;
font-weight: normal;
color: #757575;
color: rgba(0, 0, 0, .54);
}
#main .post .post-footer {
font-size: 12px;
padding-bottom: 21px;
}
.label-footer {
margin-bottom: 12px;
margin-top: 12px;
}
#main .post .post-header .published {
margin-bottom: 16px;
}
.post .post- {
color: #545454;
color: rgba(0, 0, 0, .67);
font-size: 16px;
margin: 16px 0 36px 0;
line-height: 24px;
word-wrap: break-word;
}
.post-summary {
display: none;
}
/* Override all post images/videos to left align. */
@media (max-width: 712px) {
.post- img {
max-width: 100%;
height: auto;
width: auto;
}
}
.post- .tr-caption-container img {
margin-bottom: 12px;
}
.post- iframe, .post- embed {
margin-left: auto !important;
margin-right: auto !important;
max-width: 100%;
}
.post- .carousel-container {
margin-bottom: 48px;
}
#main .post- b {
font-weight: 500;
}
/* These are the main paragraph spacing tweaks. */
#main .post- br {
: '';
display: block;
padding: 4px;
}
.post-content .space {
display: block;
height: 8px;
}
.post-content iframe+.space, .post-content iframe+br {
padding: 0 !important;
}
#main .post .jump-link {
margin-bottom: 10px;
}
.post-content img, .post-content iframe {
margin: 30px 0 20px 0;
}
.post-content > img:first-child, .post-content > iframe:first-child {
margin-top: 0;
}
.col-right .section {
padding: 0 16px;
}
#aside {
background: #fff;
border: 1px solid #eee;
border-top: 0;
z-index: 2;
}
#aside .widget {
margin: 0;
}
#aside .widget h2, #ArchiveList .toggle+a.post-count-link {
color: #212121;
color: rgba(0, 0, 0, .87);
font-weight: 400 !important;
margin: 0;
}
#ArchiveList .toggle {
float: right;
}
#ArchiveList .toggle .material-icons {
padding-top: 4px;
}
#sidebar-top,
#sidebar {
background: #fff;
}
#sidebar .tab {
cursor: pointer;
}
#sidebar .tab .arrow {
display: inline-block;
float: right;
}
#sidebar .tab .icon {
display: inline-block;
vertical-align: top;
height: 24px;
width: 24px;
margin-right: 13px;
margin-left: -1px;
margin-top: 1px;
color: #757575;
color: rgba(0, 0, 0, .54);
}
#sidebar .widget-content > :first-child {
padding-top: 8px;
}
#sidebar .active .tab .arrow {
-ms-transform: rotate(180deg);
transform: rotate(180deg);
}
#sidebar .arrow {
color: #757575;
color: rgba(0, 0, 0, .54);
}
#sidebar .widget h2 {
font-size: 14px;
line-height: 24px;
display: inline-block;
}
#sidebar .widget .BlogArchive {
padding-bottom: 8px;
}
#sidebar .widget {
border-bottom: 1px solid #eee;
box-shadow: 0px 1px 0 white;
margin-bottom: 0;
padding: 14px 0;
min-height: 20px;
}
#sidebar .widget:last-child {
border-bottom: none;
box-shadow: none;
margin-bottom: 0;
}
#sidebar ul {
margin: 0;
padding: 0;
}
#sidebar ul li {
list-style: none;
padding: 0;
}
#sidebar ul li a {
line-height: 32px;
}
#sidebar ul ul ul li a {
line-height: 24px;
}
#sidebar .archive {
background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAYCAYAAADzoH0MAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAE1JREFUeNpiNDY23s9AAWBioBCwYBM8c+YMVsUmJibEGYBNMS5DaeMFfDYSZQA2v9I3FrB5AZeriI4FmnrBccCT8mhmGs1MwyAzAQQYAKEWG9zm9QFEAAAAAElFTkSuQmCC');
height: 24px;
line-height: 24px;
padding-left: 30px;
}
#sidebar .labels {
background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAARCAYAAAA7bUf6AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAUxJREFUeNpiNDY23s9AAMycOfM7UF05kHkZmzwTMkdSUhKrIcXFxZy3bt3qBjIN8RrS09PDsHnzZjCNDr58+cKQlpbGDjSoHcg1w2oIyAUODg5gARCNzUVIBrUCuVYYhjx//pzhwIEDYAEQDeJjA1CDWIAGNQK59jBxRuSABbkAlwHIgIeHh2HWrFn/1NTU2oDcvSgBS4wBSC5iArqoCsj1YGIgEyAZVMoEchqlBjEB/cZAiUHg2AEGznpKDAImxOeM////B4VLKtBvEUCngZ1ILKivr3/u6+ubBzJAGZQ9gC5aQoqLgAY8BhkAZL4BuQQkxgXE34A4BuiiZEIuAhrwEGhAEZD5DpzYoIaA2UAM4kQADUrHZRDUgAIg8wO2XAwzbQXQa5OweQ1owB10AyA6gS7BgX1u3ry5397eHow3bdo0EyjGi00tQIABANPgyAH1q1eaAAAAAElFTkSuQmCC');
height: 20px;
line-height: 20px;
padding-left: 30px;
}
#sidebar .rss a {
background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAX5JREFUeNqsVDGSgkAQHL2rIiIikohIc/EBRkbwAIwuwgfwAXiAD9AHSI7kEkECRCb6AIyINDLx7K0aa6kT7uq0q7YYtnZ7umdnt7darXbr9Zpegeu61DNNc0dvwCcH4/GYJpMJnc9nOhwOVJbl/4hAAokMECZJQtvt9k+kH7qufyEYDAakqqqYxFdRFBqNRmTbNg2HQ0rTlK7XayvR0xqBdDqdkuM4dE/0ULhYLOh4PHYrknG5XGi/31MYhuL/nkwonM1mlGUZ1XXdrsiyLGEDhY7juJEZ1u5tIixDGdYhmYw+B7CAzPP5nDabjdgIAgCksMX1832/3drtdqPT6SQWapomiGEFNkDEdpDMMAzK81ys/7XYy+XyoQgq2WoURSIJ2iIIgp/WZCCTvFm2wgeAU31aI3Q2GhIDMeB53qPYPIcm5VrxXIOIOxsDMStjVawAc1VViRgN22lNBiuQN3GR+SY07hpOoStmFQAKXRRFY93bnpG+fONfedi+BRgAbkS8Fxp7QQIAAAAASUVORK5CYII=');
}
#sidebar .subscription a {
background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAALCAYAAACZIGYHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAUBJREFUeNrMkSGLAlEUhb+ZB4JFi8mx2cz+ApvhRUGTcUCrNqNJDYIi+DO0GUwmQXDK2DSIoGgZcSaIjDrzwrK4ssvChj1w0733O+fdp+m6PozH4yQSCfb7Pa7r8pOi0SjJZBLP8zgej4gAIMvlMuPxmADIYrHger1+C6lUKmo+NJ/NZojb7SZDWiwWo1qtks1msW2bw+HwZdkwDHq9HvV6nel0SqvVYrvdIh6Ph3Qch+VyqRYLhQJSSjRNw7IsfN9XgGKxSLfbJZfL0e/3aTabrFYr7vc7IujLcOh8PqunrNdr0uk0pVKJVCpFJBJRgEajweVyod1uMxgM2O12BAGUgRbU8DV2JpOhVquRz+cRQii3+XxOp9NRN3jVR5LPOp1OjEYjlSL8hclkgmmabDabt4d+m+S30vkD/R/IU4ABAPTZgnZdmG/PAAAAAElFTkSuQmCC');
}
#sidebar-bottom {
background: #f5f5f5;
border-top: 1px solid #eee;
}
#sidebar-bottom .widget {
border-bottom: 1px solid #e0e0e0;
padding: 15px 0;
text-align: center;
}
#sidebar-bottom > div:last-child {
border-bottom: 0;
}
#sidebar-bottom .text {
line-height: 20px;
}
/* Home, forward, and backward pagination. */
.blog-pager {
padding-top: 10px;
margin-top: 15px;
text-align: right !important;
}
#blog-pager {
padding: 40px 0 0;
}
#blog-pager a {
display: inline-block;
}
.blog-pager i.disabled {
opacity: 0.2 !important;
}
.blog-pager i {
color: black;
margin-left: 16px;
opacity: 0.54;
}
.blog-pager i:hover, .blog-pager i:active {
opacity: 0.87;
}
#blog-pager-older-link, #blog-pager-newer-link {
float: none;
}
.gplus-profile {
background-color: #fafafa;
border: 1px solid #eee;
overflow: hidden;
width: 212px;
}
.gplus-profile-inner {
margin-left: -1px;
margin-top: -1px;
}
/* Sidebar follow buttons. */
.followgooglewrapper {
padding: 12px 0 0 0;
}
.loading {
visibility: hidden;
}
.detail-page .post-footer .cmt_iframe_holder {
padding-top: 40px !important;
}
/* ADB */
.adb-hero-area {
min-height: 104px;
background-color: #073042;
box-shadow: 0 1px 2px 0 rgba(60,64,67,.3), 0 2px 6px 2px rgba(60,64,67,.15);
z-index: 5;
position: fixed;
width: 100%;
}
.adb-hero-logo {
height: 80px;
position: absolute;
top: 12px;
left: 16px;
}
.adb-footer-btm {
display: flex;
margin: 0 24px;
align-items: center;
justify-content: space-between;
flex-wrap: wrap;
padding-bottom: 40px;
}
.subscribe-btn {
color: black;
background-color: #3DDC84;
border-radius: 100px;
font: 500 16px/24px Android Euclid,Roboto,sans-serif;
padding: 12px 24px;
border: 0;
}
.adb-footer-info {
align-items: center;
display: flex;
padding: 0;
margin: 9px 0 0 -8px;
font-size: 13px;
}
.footer-list {
list-style: none;
padding: 0 8px;
}
.subscribe-info {
list-style: none;
padding: 0 8px 0 0;
font-size: 13px;
color: black;
}
.footer-newsletter {
display: flex;
align-items: center;
}
.adb-header-inner {
display: flex;
align-items: center;
}
.adb-header {
background-color: white;
color: #fff;
height: 48px;
left: 0;
overflow: hidden;
padding: 36px 24px;
right: 0;
top: 104px;
z-index: 4;
display: flex;
align-items: center;
position: fixed;
border-bottom: solid 1px #DADCE0;
}
.adb-shadow {
margin-top: 48px;
height: 1px;
width: 100%;
position: fixed;
background: white;
z-index: 2;
box-shadow: 0 1px 2px 0 rgba(60,64,67,.3), 0 2px 6px 2px rgba(60,64,67,.15);
}
.adb-logo-box {
display:inline;
}
.adb-burger-box {
display: none;
margin: 0 16px 0 0;
}
.adb-search-box {
display: none;
margin: 0 0 0 16px;
}
.adb-htag-box {
display: flex;
align-items: center;
}
.adb-header-tags {
padding: 0 24px 0 0;
}
.adb-header-tags ~ .atb-header-tags {
padding: 0 24px;
}
.adb-header-tags a {
font-family: Android Euclid, Roboto, sans-serif;
font-weight: 600;
font-size: 16px;
line-height: 20px;
color: #5F6368;
}
.adb-header-tags a:hover {
font-weight: 600;
font-size: 16px;
line-height: 20px;
color: #073042;
}
.more-dropdown {
display: none;
}
.dropdown-icon {
transition: all 0.3s;
}
.adb-header-logo {
display: inline-block;
vertical-align: -11px;
width: 134px;
height: 32px;
}
.adb-header-title {
color: #fff;
display: inline-block;
font-size: 20px;
font-weight: normal;
}
.adb-header-links {
border-left: 1px solid rgba(0, 0, 0, .1);
display: block;
left: 250px;
list-style: none;
margin: 0;
padding: 12px 0 12px 18px;
position: absolute;
top: 0;
}
.adb-header-link-item {
display: inline-block;
}
.adb-header-link, .adb-header-link:visited {
color: #fff;
display: inline-block;
font-weight: 500;
opacity: .7;
padding: 12px 9px;
text-transform: uppercase;
vertical-align: 2px;
}
.adb-header-link:hover, .adb-header-link:focus {
color: #fff;
opacity: 1;
}
.adb-header-console, .adb-header-console:visited {
border-radius: 3px;
box-shadow: 0 1px 4px 0 rgba(0, 0, 0, .2);
color: #fff;
float: right;
font-size: 14px;
font-weight: 500;
line-height: 28px;
padding: 4px 10px;
position: relative;
text-transform: uppercase;
transition: box-shadow .2s;
z-index: 60;
}
.adb-header-console:hover {
box-shadow: 0 2px 8px 0 rgba(0, 0, 0, .3);
color: #fff;
}
.adb-header-console:focus {
background-color: rgba(63, 81, 181, .1);
color: #fff;
}
.adb-header-console-image {
vertical-align: -5px;
}
.adb-hero {
background-color: #dcedc8;
margin-top: 64px;
}
.adb-hero-back, .adb-hero-back:link, .adb-hero-back:visited {
color: #414141;
display: inline-block;
font-weight: 500;
margin: 25px 25px 0;
}
.adb-hero-inner {
background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAc4AAADZCAMAAACenCAVAAAAvVBMVEXc7cjY68PT6bvR57fQ57bY6sPZ68TU6bvR6LfP5rTQ57XR57jW6r7b7cfa7MbS6LnS6Lrb7cbQ6Lfb7MbX6r/Z68PY6sLV6b7U6b3U6r3T6LnX68Da7MXP57Tb7Mfc7cfW6b/P57XS57nY68LY68HU6L3W6r/W6b7T6brX6sDV6rzQ57fa7MTV6b3T6Lra68TR57bX68HW6sDS57jU6bzO5rTP5rXZ7MXR6LbZ68XX6sHT6LvV6bzS6LjZ7MILrTuqAAAIyklEQVR4AezXhXEkUQwE0B6+Xhg8MzND/smZ4UsLBSb9Kr0UhI1vl6RZnqUFlnBl9Y+j8WQK4+qGr9oOi7iKr0YFTOt6vhsPmM81/FDAspafUszl/vNTXsOuFYZWMYfrRgyswa51hjLM4TYYGsOuTQpbgNO2dyjAroxCvgunpZT2YFZDaQKnlFRg1z6lgxpOOqS0CbtqKutwwhGVYxh2QqWGC/WUMlhWH1BK4QKnVFZh2hmVEh/cXk7pHLbt5pQafHCT6Jr9gsoR3riayiXMyyhd4Y27jDDHJVQu8MJdU7lBBBpKoz08c7eU8gERuKNyhiduhcopolBRqeGAMaV7xKE7eGzvThQTVZooAJdC1AM2qGg0BhdCrpnciVE0i9dZ3v+t/n2ZMBtJGpsu6nuCrNJddar4/gAnMmuP/GPk3JFwrL2QKw3FD26GyGmQNXbIGVHNKdfmYraDl/ZUcxO8NNtIW888bafDC7tP5R2qtQfL724N5AypxjbIGdseWHMV1VfP+rrnZvbTerMEhHb2Py4eA7KX9AwD5LSppi5ZdPTHEhv6cd5mSjZaeMW/Dc66TEpkO+Q0qIbUE5es6ke85FMN/YGXZs9yQLdXYGVASGJDBaMZXsQouzau/fzfitNsKvpUL1O8dFBksb+Q80C1coaco7RtLeYzO9tHCV7qUY0ckXPGribSoNpQB3Z1MbWtby1hiZwWw35CRjUReRx7Sg5ecqgmJiyHOxrIWVEtPDPNY/TMx4bmczq5T3jpSRELm1NWodVmlGY364tP4ZXvdw5u8jjDf8yQJJ7j+2HYfBh3d+l5HFB5RmyzjM3yh8iDUbb6M9y7j3idgxM+3BzTuPzyXmdOTARJaUc8tUmX7ekB7+aF7dV1a0G6pIx3CkxKmBBUreMfvS0086aTnZZf6kfG53mlN/0UnS2bW5Socz9OA737eM6JkZWu4uUiXfVcnIT34eZM6Yq9hcRKR0OpL7i9cHBi/udjrCOUuiFWsnc2/oKsfYAhXvM2lsj4S/7b2/L9y4cODDu0j8HbBzqSPvutOksqpDH+gorw1+dvHLcaEzv3r4+0BdmnBJXi9bL+G6qaEbFz98rF4sEwnKGKrrrxK3sOuzoMlM9i+ql47KPC/HX8inTxljgKUHBYI1g6qDx/HBct76XETfHF4v3hHpZwVgH9APc0TfFSyTwLZ7DJ9FYxmZvTv1h89DmBdbyHEX0rcuuTRB38fNuQ2vmw1GAYMSjv6ZwQbD0ksFlz9LPW7gMxNv3RBVtlDqz3cbWo32rmEXLGFExcsJBMnilGzk29pleT5gx8fLiq2XzyM2rllpiboEYGxF2UoD6+EntL1Ma+TkOP/LVqNJLM3yeqgayDmnjqKmIu3aNGDhlx1pqiZvyUuAqaqKGwRRwt1gnqqR0QO5ce6ms5J1ZGIWqtkxIf0QNqb7ohJjIXgFjPiYF4j38R2wbZTk1m+C/xqU9WSzv4hkgyVkcg0QvIUg0XEHleRjaK/gQb8g/a2EL8hHcky6zxC+JTQBa5c/BL4nBO1lgl+B2xJjv0QxQgnA1ZoOGhGHFNldedoShxMadKU/d4BeEEVGF3Ll5FJF+psm7Bh5xwHyDeoKeogvp7iDfpbKhyWgeIN/JSqpjbBOLtlqwq7qJNFdKGeKdQUUUEIcS7Df6iSngeQAPhtqgCWi60EElKxjUSsCFriK5nYEMuLDtoJSZk0BiaiaYsZGPlXnEqHoipIhOaKIW4WnD63xThgtP/pthHdFqfUCIRRvK/KZ+3VX1uiulc7puc3EstSOpD9d7+LYGTFfiQenyKkxE3VLLGI9iQkcH4CackzqlEwRYnJbwNlUb5ODHhBVSWHk5O+JFMLkh5qFYxLxnoPZ9BmJGRdrELNuTddNEAwhg34NSvFnvSqgth1ANpNEIZkhkYSg4dt9rHocCFXvvxWUD/ELR2TQ98hMOWon+Ks7YLrZI70iWETu6yT99Qt3uw4A4j+lY6hU4dVcloUFdR3tkA1kt29J1zHxr1SIsGNAoDnvGjMCj/CLmr3INzQj9x5sFm41Ns933c0PtNoc+O0bJNA9+Xryp14+zSL9x5PH6beS2vQrfP0exkQcMG08BdCn1SepeFc8KPijWs5MxPdzN4CipzR2nQb8wdnu0O5UKbkN7h/LQZ/a9Ms+pZNYp9kQt9Yvo9H3Yx8H15QSXm/qZUQMY0ybOCPtNKlIMuqYAogW1SKkBBoxW9SXSARoqKCGGbBRVxBY0C85V3h2mb/MrASGxIb3BnYlaxwXRmLwUMFxMc6NSlQvpM6nt5MXTylOl00JGKYTqxp6DVBb1SkECrlOmvs0HFGA7efjA0dwrLfKVC5tDLp1dpGHrGKFjm0tCZYEWvMTA0NrOBZVZUSMtoLn4I3T5RISnTZTGXJrea9BPotmU6QrqlQi6gXWx05V5MRTiwTaD/4aW5FN8y9pCJYZ2usSPBNRUzNfapNIZ1fGM7KQdUSMNYJyl6Ajh2yAKTBUYHpfCZruJ0jB3wCpVur1GSIf3G8yOPlG1ePDN46d2iJEmLR+86L4lNBRQTZXK/6UAxunMWDxC3Da6omXsoz5XiOa8/NfV9JYHRXVBXiudG8r0y9Jmzpl87oFSDFv3Qog2rDTb0Q6qJckX0K7coWTKkHxh1YLmkSz/Q6JjNKnVQOj+lnM0nMPDxmnLuPhjej5rhFLbjmP4nOF6BCXfdov8JLkPj+xcdnMjh03p3nWXLBwesuB/+GGbHXbc5wIkkSt7CwEmXU1lGbPX3OYVBt5y2Yoov9EN/QVhpJK9xZL/7P4Kw1LO8iIH7qxx8CEu5zG8pcldpQ1hrSjnBI4S9YnrpBsJiEzkIcfIkByFWUqkIcdKjb7kQdos49a3Fjv7vE4TlfPoflYAPuXoeIaw3pv+6h7CeQ/8RPYIP6XpegwGxknMtwxcqK7AgAqkhcDKkf3oAI9LE9sCDWGhf4S8M70peggnxQERTMCFcIjUDF+KOUrAhhvQANkT4dwEsPvJYWz4QAAAAAElFTkSuQmCC');
background-position: bottom right 70px;
background-repeat: no-repeat;
background-size: auto 100%;
margin: 0 auto;
max-width: 980px;
padding: 0 60px;
position: relative;
}
.adb-hero-back-icon {
display: inline-block;
margin-right: 5px;
vertical-align: middle;
}
.adb-hero-title {
font-size: 22px;
line-height: 28px;
padding: 24px 24px 0px 112px;
}
.adb-hero-title a {
color: #FFFFFF;
font-family: Android Euclid, Roboto, sans-serif;
font-weight: 500;
}
.adb-hero-summary {
font-size: 16px;
line-height: 24px;
padding: 8px 24px 8px 112px;
}
.adb-hero-summary a {
color: rgba(255, 255, 255, 0.9);
}
.adb-hero-description {
color: #6f7172;
font-size: 16px;
margin: 0;
max-width: 440px;
padding-bottom: 32px;
}
.adb-hero-search {
position: absolute;
top: 19.35%;
right: 1.94%;
}
.adb-hero-search .searchBox input {
border: 1px solid #80868B;
border-radius: 4px;
color: white;
}
.adb-hero-search .searchBox input::placeholder {
color: #F1F3F4;
font-weight: 500;
font-size: 16px;
line-height: 24px;
letter-spacing: 0.5px;
padding-left: 12px;
}
.adb-hero-link {
position: absolute;
right: 1.67%;
top: 64.52%;
}
.adb-hero-link a {
font-family: Android Euclid, Roboto, sans-serif;
font-weight: 600;
font-size: 16px;
line-height: 20px;
color: #3DDC84;
letter-spacing: 1.4px;
}
.adb-hero-arrow {
display: inline-flex;
font-size: 24px;
vertical-align: middle;
}
.adb-socials-box {
display: flex;
position: absolute;
right: 1.67%;
}
.adb-socials-category,
.adb-socials-divider {
display: flex;
align-items: center;
}
.adb-socials-divider {
color: #DADCE0;
font-size: 40px;
font-weight: 100;
margin: 0 20px;
}
.adb-socials-category img,
.adb-footer-social-links img {
height: 24px;
}
.adb-footer-social-links-img {
margin-right: 20px;
}
.adb-hero-subscribe, .adb-hero-subscribe:visited {
background-color: #90c653;
color: #fff;
display: inline-block;
border-radius: 3px;
margin: 25px 0 60px;
padding: 13px 32px;
text-transform: uppercase;
}
.adb-hero-subscribe:hover, .adb-hero-subscribe:focus {
background-color: #333;
}
.adb-footer {
margin: 32px auto 64px;
}
.adb-footer-more {
border-bottom: 1px solid #f0f0f0;
border-top: 1px solid #f0f0f0;
padding: 30px 0;
}
.adb-footer-more a {
color: #000;
display: inline-block;
font-size: 20px;
font-weight: 300;
margin-right: 16px;
}
.adb-footer-social {
float: right;
margin-top: -62px;
}
.adb-footer-social a {
background-color: #ccc;
background-position: center;
background-repeat: no-repeat;
background-size: auto 16px;
border-radius: 50%;
display: inline-block;
height: 36px;
margin-left: 16px;
transition: background-color .1s;
width: 36px;
}
.adb-footer-social-youtube {
background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAYCAQAAAAxWje/AAABLUlEQVQ4y6WUvUoDYRBFr42gCdhK8AV8BwsVC0FQfIQUgr5DIKJoGy1CfAaDq1hIGn8K2xDSaBc1wUJJEYmbkDXssdi1Mrvfst9tZ+bAzNwZSZLEAmvsUKTCBQ80eaWLyxiAMS5dXmhyT5UyBfIsM68/McM1aXRDJgCUSKsTSWQZpAa4ZMUmNtoSRxGhbd4TAI7F1eSIxBwVfAPgUtSjAJLEEk+xgLroxAEkpikyigS0RS8eIEks8hgB6ImhGSAxxS5fE9JGwksCkCRyOP/SfPFjC0jawl5UC9ZDbBvXuB+zxjezkZ5NRnJirHxmtLIjDq2O6UBsWJ3zut1D+WZWEqepAaVg0hlqqcpr4VMNbbpKngJlqtzRoMUnfTx8fDz6fNCiwS3n4VtfIRdU/gLTrSb7DGWLcQAAAABJRU5ErkJggg');
}
.adb-footer-social-youtube:hover {
background-color: #f44336;
}
.adb-footer-social-gplus {
background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACEAAAAUCAQAAACpWpz6AAABJUlEQVQ4EZXBTUoCYQDH4X9hTS3Cja0Kyb2X6BCJoLlr1aKwK1QHCMMzWLiqTcuWXaAWQWIlU1DQh4QJ+Wt4X95x0hGn55FCeGzSpMUXXW45ocSC/oMiHUZ1KCgZZqkzyZaSoM7QgCd8BlgXLGo6ijgv7JJRgAxV3jjDUwwMOXh0sK5ZUQRZ5hQLQw4VrA/WlBCGHJpY+0oMQw5trLxCjNtTgFiij5VSiHFHChBL9LFSCjGurgCxRBsrrxA+Pj4+Pl2sQ0VgyKGJdaAYNLAqisCQQxnrk5xGkKOHlVUEhhw8HrFuWFUEaa6wLvUHhoYo4LxSZVkBlihzh7OuaagR9YzPD0PHmo5ZakzSIKVk2OCBUe/sMKPkmKfEKS16fHPPOduklcAvR50zMVwhTI4AAAAASUVORK5CYII=');
}
.adb-footer-social-gplus:hover {
background-color: #f44336;
}
.adb-footer-social-twitter {
background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABoAAAAWCAQAAAB0gUQ+AAABI0lEQVQ4EY3BQShDAQDH4f+zTSyJuLgoLlwclYOTHCwHu9ouiLRScpUmNwduDkpCSTs4LAeJhINoOTo4ctHkskyJtf20vWbe3tvb+z7JFUGibLHPMj0qoYEWSYzRKkdMkKbsm3m6WSRFuyQeuKNNNoTJU61ABL8kssAjvbKgiTR2V+ywJol3ijJMY+gP4zhLEpDEGWUpwvhUQgwnh/hURIT/3thjjmGWcBKViSCXeBWSiWdO+MGbPpm4watPfDIRxasLVXCANwuqwCDGK/V80akKGjnmmgLutmXFOvV80CUrAiRxNys7DCY5J4OzXdVCP7c4OcIvO5oJkSCHXZ5VDFkxwilP5HB2z6Cc0EGcF6plSTAqNxgMMEWcTTZYYYYhAqrpF0uh1zgYi1hVAAAAAElFTkSuQmCC');
}
.adb-footer-social-twitter:hover {
background-color: #55acee;
}
.adb-footer-social span {
display: none;
}
.adb-footer-related {
padding-top: 8px;
}
.adb-footer-related a {
color: #999;
font-size: 12px;
white-space: nowrap;
}
.adb-footer-related a:not(:last-child)::after {
content: '|';
cursor: default;
margin: 0 7px 0 10px;
}
.adb-footer-section {
margin: 48px auto;
max-width: 700px;
}
.adb-footer-title {
font-weight: 500;
font-size: 14px;
line-height: 20px;
letter-spacing: 1.5px;
text-transform: uppercase;
color: #3C4043;
margin-bottom: 24px;
}
.adb-footer-columns {
display: flex;
justify-content: space-between;
}
.adb-other-blogs-title img {
margin-right: 8px;
vertical-align: -12px;
}
.adb-footer-social-label {
display: flex !important;
align-items: center;
}
.adb-footer-column a,
.adb-footer-social-label,
#footer-subscribe .tab h2 {
color: #000;
font-size: 14px;
font-weight: 400;
line-height: 20px;
letter-spacing: 0.25px;
padding: .85em 0;
-webkit-column-break-inside: avoid;
break-inside: avoid-column;
display: table;
margin: 0;
page-break-inside: avoid;
}
.adb-footer-btm a {
color: #000;
font-family: Android Euclid, Roboto, sans-serif;
font-size: 14px;
font-weight: 400;
letter-spacing: 0.25px;
opacity: .7;
transition: opacity .1s;
-webkit-column-break-inside: avoid;
break-inside: avoid-column;
display: table;
margin: 0;
page-break-inside: avoid;
}
.adb-footer-column a {
opacity: .7;
transition: opacity .1s;
}
.adb-footer-column a:hover {
opacity: 1;
}
.adb-footer-social-links {
margin: 0 0 20px;
}
#footer-subscribe .widget {
margin: 0;
}
#footer-subscribe .tab {
display: flex;
align-items: center;
}
#footer-subscribe .tab img {
height: 16px;
}
.adb-label-view-more-toggle {
cursor: pointer;
}
.adb-label-view-more-toggle::after {
content: '\00e5c5';
float: right;
font: 2em / .7 Material Icons;
opacity: .6;
}
.adb-label-view-more-toggle.active::after {
transform: rotate(180deg);
}
/** Desktop **/
@media (max-width: 900px) {
.col-right {
display: none;
}
.col-main {
margin-right: 0;
min-width: initial;
}
.cols-wrapper {
min-width: initial;
}
.adb-hero-inner {
background-image: none;
}
}
/** ADB header breakpoint **/
@media (max-width: 768px) {
.adb-header-links {
display: none;
}
.dropdown-nav {
display: none;
}
.adb-header {
padding: 12px;
text-align: center;
}
}
@media (max-width: 1196px) {
.breakpoint-hide {
display:none;
}
.more-dropdown {
height: 50px;
display: flex;
align-items: center;
}
}
@media (max-width: 915px) {
.adb-header {
height: 0;
margin: 0;
padding: 0;
display: none;
}
.adb-header-tags {
display:none;
}
.more-dropdown {
display:none;
}
.dropdown-nav {
display: none;
}
.adb-hero-summary,
.adb-hero-link,
.adb-socials-category {
display: none;
}
.adb-hero-title {
padding-left: 152px;
}
.adb-hero-logo {
height: 52px;
top: 12px;
left: 120px;
}
.adb-footer-section {
margin: 0 auto;
}
.adb-footer-btm {
margin: 0 24px 40px;
}
.adb-hero-area {
min-height: 76px;
}
.adb-burger-box {
display:inline;
position: absolute;
top: 17px;
margin-left: 24px;
font-size: 32px;
color: white;
}
.adb-hero-title a{
margin-left: 40px;
}
}
/** Tablet **/
@media (max-width: 712px) {
.header-outer, .cols-wrapper {
padding: 0 40px;
}
/* ADB */
.adb-hero-inner {
padding: 0 40px;
}
.adb-hero-title {
font-size: 16px;
padding-left: 132px;
}
.adb-hero-logo {
left: 100px;
}
.adb-hero-back, .adb-hero-back:link, .adb-hero-back:visited {
margin-left: 36px;
}
.adb-other-blogs-list {
columns: auto;
}
.adb-other-blogs-title {
font-size: 20px;
}
.adb-other-blogs-title img {
height: auto;
vertical-align: -6px;
width: 32px;
}
.adb-footer-section {
margin: 0 24px;
}
.adb-footer-more {
padding-bottom: 75px;
}
.adb-footer-social {
float: none;
margin-bottom: 35px
}
.adb-footer-social .adb-footer-social-youtube {
margin-left: 0;
}
}
/** Small tablet **/
@media (max-width: 600px) {
.header-inner .google-logo {
top: 32px;
margin-top: 0;
}
.header-inner .google-logo img {
height: 56px;
width: auto;
/*
height: auto;
width: 188px;
*/
/* Override any optical adjustments at desktop size. */
top: 0 !important;
}
.header-left {
left: 0;
top: inherit;
bottom: 24px;
}
.adb-footer-columns {
display: block;
}
.adb-footer-column {
margin-bottom: 48px;
}
.adb-footer-column a {
opacity: 1;
}
.adb-footer-social-label {
padding: 0;
}
.adb-footer-column .widget a {
padding: 0;
}
.footer-newsletter {
margin-top: 16px;
}
.subscribe-btn {
width: 100%;
}
.adb-hero-search {
display: none;
}
.adb-search-box {
display:inline;
position: absolute;
top: 24px;
right: 24px;
font-size: 24px;
color: white;
}
}
/** Mobile **/
@media (max-width: 480px) {
.header-outer, .cols-wrapper {
padding: 0 16px;
}
.adb-hero-logo {
height: 28px;
top: 24px;
left: 76px;
}
.adb-hero-back, .adb-hero-back:link, .adb-hero-back:visited {
margin-left: 16px;
}
.cols-wrapper {
margin-top: 0;
overflow-x: auto;
}
.post-header .publishdate, .post .post-content {
font-size: 16px;
}
.post .post-content {
line-height: 28px;
margin-bottom: 30px;
}
.post {
margin-top: 30px;
}
.byline-author {
display: block;
font-size: 12px;
line-height: 24px;
margin-top: 6px;
}
#main .post .title a {
font-weight: 500;
color: #4c4c4c;
color: rgba(0, 0, 0, .70);
}
#main .post .post-header {
padding-bottom: 12px;
}
#main .post .post-header .published {
margin-bottom: -8px;
margin-top: 3px;
}
.post .read-more {
display: block;
margin-top: 14px;
}
.post .tr-caption {
font-size: 12px;
}
#main .post .title a {
font-size: 20px;
line-height: 30px;
}
.post-content iframe {
/* iframe won't keep aspect ratio when scaled down. */
max-height: 240px;
}
.post-content .separator img, .post-content .tr-caption-container img {
margin-left: -16px;
max-width: 100%;
}
.post-content table {
table-layout: fixed;
width: 100%;
}
/** List page tweaks. **/
.list-page .post-original {
display: none;
}
.list-page .post-summary {
display: block;
}
.list-page .comment-container {
display: none;
}
.list-page .label-footer {
display: none;
}
.list-page #main .post .post-footer {
border-bottom: 1px solid #eee;
margin: -16px 0 0 0;
padding: 0 0 20px 0;
}
.list-page .post .share {
display: none;
}
/** Detail page tweaks. **/
.detail-page .post-footer .cmt_iframe_holder {
padding-top: 32px !important;
}
.detail-page .label-footer {
margin-bottom: 0;
}
.detail-page #main .post .post-footer {
padding-bottom: 0;
}
.detail-page #comments {
display: none;
}
/* ADB */
.adb-header-console {
display: none;
}
.adb-hero-inner {
padding: 0 16px;
}
.adb-hero-title {
color: #4c4c4c;
color: rgba(0, 0, 0, .70);
font-weight: 500;
line-height: 30px;
padding-left: 80px;
}
}
/* Fixed-position sidebar for larger screens */
@media screen and (min-height: 700px) and (min-width: 1100px) {
.col-right .section {
max-height: calc(100vh - 197px);
overflow: auto;
}
.col-right.scroll-start {
left: 50%;
margin-left: 241px;
position: fixed;
top: 96px;
}
.col-right.scroll-end {
bottom: 485px;
position: absolute;
top: auto;
}
}
[data-about-pullquote], [data-is-preview], [data-about-syndication] {
display: none;
}
#imgFull {
display: block;
margin: 10px auto;
width: 90%;
border: 0;
padding: 0;
}
#imgHalf {
display: block;
margin: 10px auto;
width: 50%;
border: 0;
padding: 0;
}
#flexParent {
display: flex;
width: 100%;
justify-content: space-around;
align-items: center;
}
#flexImg {
width: 90%;
margin: 0;
padding: 0;
border: 0;
}
#imgCaption {
text-align: center;
font-style: italic;
font-size: 85%;
margin: -5px 0 10px 0;
padding: 0;
border: 0;
}
#floatRight {
float: right;
width: 45%;
margin: 5px 0 5px 5px;
padding: 0;
border: 0;
}
#floatLeft {
float: left;
width: 45%;
margin: 5px 5px 5px 0;
padding: 0;
border: 0;
}
</style>
<style>
.loading {
visibility: visible;
}
</style>
</html><body>
<hr />
<div class="adb-detail__content">
<div>
<meta content="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiNYIXjrjANrJCUxJPQ025OyEJWcF2HLn4tCVWD9hH19ur0Ct3nXMpJFGBAlcYKhh7A_ir0DO5Z2i3Rmtcg69J5d3pQX2r-5d-LSadSEhbE7WnI0oVDmPcQiv38kLsg0_MWTDiaziZ4o9IpIVGan1SIWIHLVvCJoD8cchqVmiO3l2aqWcqfVLWoJpurM8M/s1600/social-Introducing-Jetpack-Emoji-Picker.png" name="twitter:image"></meta>
<img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiNYIXjrjANrJCUxJPQ025OyEJWcF2HLn4tCVWD9hH19ur0Ct3nXMpJFGBAlcYKhh7A_ir0DO5Z2i3Rmtcg69J5d3pQX2r-5d-LSadSEhbE7WnI0oVDmPcQiv38kLsg0_MWTDiaziZ4o9IpIVGan1SIWIHLVvCJoD8cchqVmiO3l2aqWcqfVLWoJpurM8M/s1600/social-Introducing-Jetpack-Emoji-Picker.png" style="display: none;" />
<em>Publicado por Lin Guo, ingeniero de software</em>
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj6phT8HY8oin_olpqgN4rQ58UXhN_sh7pSYHUh5T0B3zDLpXtrZRCn1nSGQ6mfjqai1qScaFYw2Zrt6c66H6Vqg0askiNv9zfPWZN9xY86qdVmRm-_3zrBkPJdhfGsDgZ9DFxFCzYMQPxEZCOmyTmN4y_zYNRBWl2ln3REdp-2YQ7ll3mFDLRoxFu1cfY/s1600/header1.png"><img border="0" data-original-height="800" data-original-width="1058" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj6phT8HY8oin_olpqgN4rQ58UXhN_sh7pSYHUh5T0B3zDLpXtrZRCn1nSGQ6mfjqai1qScaFYw2Zrt6c66H6Vqg0askiNv9zfPWZN9xY86qdVmRm-_3zrBkPJdhfGsDgZ9DFxFCzYMQPxEZCOmyTmN4y_zYNRBWl2ln3REdp-2YQ7ll3mFDLRoxFu1cfY/s1600/header1.png" /></a>
<p>En los últimos años, los emojis comenzaron a utilizarse cada vez con más frecuencia en la comunicación. Estos pequeños íconos se pueden usar para expresar una variedad de emociones y le agregan un toque personal a los mensajes. Sin embargo, agregar emojis a tu app para Android puede resultar todo un desafío. Para eso, contamos con la biblioteca del selector de emojis. Con solo agregar unas pocas líneas de código a tu app, podrás comenzar a usar emojis de inmediato. Es la forma más sencilla de empezar a usar emojis para que tu app sea más divertida y expresiva.</p>
<figure><div style="text-align: center;"><img alt="Imagen en movimiento del uso del selector de emojis en Google Pixel 6 Pro" border="0" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi4_RpGW835unpm3MwWghkAiduFVhYNUqCBnBpgaS_UqGeZuRovW63y8eumM0KuCcrwai7LL8ndFHj1wzWKXQVm3kY5Ybwazz-aPZPXvKT-Ql1fyMJjYP2biHqB9Lqm1odwku-g6pWzMNyFf1c2Mw9z_V1YmgkLm-l4JN9Jc884RnCPlyWeYbFERTdLMww/s1600/EmojiPicker-GIF%20%281%29.gif" /></div><figcaption><center><em><strong>Figura 1:</strong> Selector de emojis</em></center></figcaption></figure><br />
<strong><h3>Funciones útiles que ofrece la biblioteca </h3></strong> <span style="font-size: large;">Emojis actualizados sin tofu (☐)</span>
<p>Cada año, se publican nuevas versiones de emojis y actualizamos la biblioteca periódicamente para ofrecerlos. Los teléfonos de más alta gama pueden renderizar estos nuevos emojis sin ningún problema. Sin embargo, en el caso de los teléfonos de gama más baja, es posible que los nuevos emojis se muestren como un pequeño cuadrado llamado <a href="https://developer.android.com/develop/ui/views/text-and-emoji/emoji2" target="_blank">tofu</a> (☐). La biblioteca asegura su detección y eliminación. De esta manera, se garantiza que la biblioteca sea compatible con varios dispositivos y versiones de Android.</p>
<span style="font-size: large;">IU fluida</span>
<p>La biblioteca cuenta con varias optimizaciones que buscan reducir la latencia de inicio y acelerar la experiencia de desplazamiento, como el almacenamiento en caché de los emojis renderizables, el dibujo de emojis de manera asíncrona y las optimizaciones de RecyclerView.</p>
<span style="font-size: large;">Experiencia inclusiva personalizada</span>
<p>Las selecciones del usuario son persistentes en la biblioteca. Los emojis que se eligieron recientemente se muestran en la fila superior para que los usuarios puedan buscarlos y compartirlos fácilmente. Además, la biblioteca ofrece una variedad de emojis que representan a diferentes personas y culturas en los paneles de variantes. Si el usuario elije un emoji de los paneles de variantes (Figura 2), la elección se guarda y se establece como predeterminada en el panel principal.</p>
<figure><div style="text-align: center;"><img alt="Imagen en la que se muestra la diversidad de personajes que se pueden elegir en el selector de emojis." border="0" height="472" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiEoIqRkuDMjGvja2UOoV4ydLcSdMoh9t6IEo1dMn-rxrE9vJ3ERWcquC98dWu2UapG_MFMChzmYnCvI6ivyaiWsNQ7LSTtje57F5OfVx5e8q5jC47gl-46m9pLTK2khWba4bdYcGLXHJQRuYuYmnLYjsoeJYFoF-6jKVUSnDn0KEPTQ-AHej6u8uSbrBU/w640-h472/image1.png" width="640" /></div><figcaption><center><em><strong>Figura 2:</strong> Variantes de emojis</em></center></figcaption></figure><br />
<strong><h3>Integra el selector de emojis a tu app en solo 3 pasos</h3></strong> <span style="font-size: large;"><span style="size: large;">Paso 1: Importa la biblioteca en <span style="color: #0d904f; font-family: courier;">build.gradle</span></span> </span><div><table class="leading-snug" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: #f8f8f8; border-collapse: collapse; border: none; font-family: ui-sans-serif, system-ui, -apple-system, "system-ui", "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; line-height: 1.375; max-width: min(90ch, 100%); table-layout: fixed; text-indent: 0px; width: 880px;"><colgroup style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border-color: rgb(229, 231, 235); border-style: solid; border-width: 0px; box-sizing: border-box;"></colgroup><tbody style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border-color: rgb(229, 231, 235); border-style: solid; border-width: 0px; box-sizing: border-box; display: block; max-width: 100%; overflow-x: auto;"><tr style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: transparent; border-color: rgb(229, 231, 235); border-style: solid; border-width: 0px; box-sizing: border-box; height: 0px;"><td style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border-color: rgb(229, 231, 235); border-style: solid; border-width: 0px; box-sizing: border-box; padding: 4pt; vertical-align: top;"><code class="m-0 p-0 whitespace-pre-wrap font-monospace" id="code-output" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: transparent; border-color: rgb(229, 231, 235); border-style: solid; border-width: 0px; box-sizing: border-box; display: block; margin: 0px; padding: 0px; white-space-collapse: preserve; width: 80ch;"><span style="font-family: courier;">dependencies {
implementation <span class="hljs-string" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border-color: rgb(229, 231, 235); border-style: solid; border-width: 0px; box-sizing: border-box;"><span style="color: green;">"androidx.emoji2:emojipicker:</span><span class="hljs-variable" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border-color: rgb(229, 231, 235); border-style: solid; border-width: 0px; box-sizing: border-box;"><span style="color: green;">$version</span></span><span style="color: green;">"</span></span>
}</span><span style="font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; font-size: 12px;">
</span></code></td></tr></tbody></table></div><div><span style="font-size: large;"><span style="size: large;"><br /></span></span></div><div><span style="font-size: large;"><span style="size: large;">Paso 2: Amplía el <span style="color: #0d904f; font-family: courier;">EmojiPickerView</span></span> </span><p>De manera opcional, configura <span style="color: #0d904f; font-family: courier;">emojiGridColumns</span> y <span style="color: #0d904f; font-family: courier;">emojiGridRows</span> en función del tamaño deseado de cada celda de emoji.</p>
<b>Ejemplo que usa EmojiPickerView en XML</b></div><div><table class="leading-snug" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: #f8f8f8; border-collapse: collapse; border: none; font-family: ui-sans-serif, system-ui, -apple-system, "system-ui", "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; line-height: 1.375; max-width: min(90ch, 100%); table-layout: fixed; text-indent: 0px; width: 880px;"><colgroup style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border-color: rgb(229, 231, 235); border-style: solid; border-width: 0px; box-sizing: border-box;"></colgroup><tbody style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border-color: rgb(229, 231, 235); border-style: solid; border-width: 0px; box-sizing: border-box; display: block; max-width: 100%; overflow-x: auto;"><tr style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: transparent; border-color: rgb(229, 231, 235); border-style: solid; border-width: 0px; box-sizing: border-box; height: 0px;"><td style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border-color: rgb(229, 231, 235); border-style: solid; border-width: 0px; box-sizing: border-box; padding: 4pt; vertical-align: top;"><code class="m-0 p-0 whitespace-pre-wrap font-monospace" id="code-output" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: transparent; border-color: rgb(229, 231, 235); border-style: solid; border-width: 0px; box-sizing: border-box; display: block; margin: 0px; padding: 0px; white-space-collapse: preserve; width: 80ch;"><span class="hljs-tag" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border-color: rgb(229, 231, 235); border-style: solid; border-width: 0px; box-sizing: border-box;"><span style="font-family: courier;"><span style="color: #0d904f;"><<span class="hljs-name" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border-color: rgb(229, 231, 235); border-style: solid; border-width: 0px; box-sizing: border-box;">androidx.emoji2.emojipicker.EmojiPickerView</span></span><span style="color: #d91e18;">
</span>…
<span class="hljs-attr" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border-color: rgb(229, 231, 235); border-style: solid; border-width: 0px; box-sizing: border-box;">app:emojiGridColumns</span>=<span class="hljs-string" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border-color: rgb(229, 231, 235); border-style: solid; border-width: 0px; box-sizing: border-box;">"9"</span><span style="color: #d91e18;"> </span><span style="color: #0d904f;">/></span></span></span><span style="font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, Liberation Mono, Courier New, monospace; font-size: 12px;">
</span></code></td></tr></tbody></table>
<p>Ahora, debería aparecer un selector de emojis muy simple en tu app. Para el siguiente paso, suponemos que quieres hacer algo con el emoji seleccionado.</p><div style="text-align: left;"><br /></div>
<span style="font-size: large;"><span style="size: large;">Paso 3: Proporciona un procesador para el emoji seleccionado</span></span></div><div><table class="leading-snug" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: #f8f8f8; border-collapse: collapse; border: none; font-family: ui-sans-serif, system-ui, -apple-system, "system-ui", "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; line-height: 1.375; max-width: min(90ch, 100%); table-layout: fixed; text-indent: 0px; width: 880px;"><colgroup style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border-color: rgb(229, 231, 235); border-style: solid; border-width: 0px; box-sizing: border-box;"></colgroup><tbody style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border-color: rgb(229, 231, 235); border-style: solid; border-width: 0px; box-sizing: border-box; display: block; max-width: 100%; overflow-x: auto;"><tr style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: transparent; border-color: rgb(229, 231, 235); border-style: solid; border-width: 0px; box-sizing: border-box; height: 0px;"><td style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border-color: rgb(229, 231, 235); border-style: solid; border-width: 0px; box-sizing: border-box; padding: 4pt; vertical-align: top;"><code class="m-0 p-0 whitespace-pre-wrap font-monospace" id="code-output" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: transparent; border-color: rgb(229, 231, 235); border-style: solid; border-width: 0px; box-sizing: border-box; display: block; margin: 0px; padding: 0px; white-space-collapse: preserve; width: 80ch;"><span style="font-family: courier;"><span class="hljs-comment" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border-color: rgb(229, 231, 235); border-style: solid; border-width: 0px; box-sizing: border-box; color: dimgrey;">// a listener example</span>
emojiPickerView<span class="hljs-selector-class" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border-color: rgb(229, 231, 235); border-style: solid; border-width: 0px; box-sizing: border-box;">.setOnEmojiPickedListener</span> <span style="color: dimgrey;">{</span>
findViewById<span style="color: dimgrey;"><</span><span style="color: #4285f4;">EditText</span><span style="color: dimgrey;">>(</span>R.id.edit_text<span style="color: dimgrey;">)</span><span class="hljs-selector-class" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border-color: rgb(229, 231, 235); border-style: solid; border-width: 0px; box-sizing: border-box;"><span style="color: dimgrey;">.</span></span><span class="hljs-selector-class" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border-color: rgb(229, 231, 235); border-style: solid; border-width: 0px; box-sizing: border-box;">append</span><span style="color: dimgrey;">(</span>it.emoji<span style="color: dimgrey;">)</span>
<span style="color: dimgrey;">}</span></span><span style="font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; font-size: 12px;">
</span></code></td></tr></tbody></table><div style="text-align: left;"><br /></div><p>Ahora, tienes un selector de emojis básico en funcionamiento. Para seguir personalizándolo (por ejemplo, para anular algunos estilos o bien ofrecer un comportamiento diferente para la fila de emojis recientes), consulta nuestra <a href="https://github.com/androidx/androidx/blob/androidx-main/emoji2/emoji2-emojipicker/api/current.txt" target="_blank">API</a> y <a href="https://github.com/androidx/androidx/tree/androidx-main/emoji2/emoji2-emojipicker/samples" target="_blank">app de ejemplo</a>.</p>
<p>También puedes <a href="https://issuetracker.google.com/issues/new?component=460938&template=1422574" target="_blank">enviar un informe de errores o una solicitud de función</a> para ayudarnos a mejorar la biblioteca.</p>
</div>
</div>
<hr />
</div>
</div>
</body>
2023.08.introducing-jetpack-emoji-picker-es-LA.html
Displaying 2023.08.introducing-jetpack-emoji-picker-es-LA.html.Google Developers LATAMhttp://www.blogger.com/profile/05105089662475084319noreply@blogger.com0tag:blogger.com,1999:blog-218264512262097577.post-11794423884233043042023-08-10T17:11:00.000-03:002023-08-14T17:12:06.885-03:00Indie Games Fund: Aplica para $2M de dólares de apoyo de Google Play en Latinoamérica<span id="docs-internal-guid-f9f22a9c-7fff-a1ce-b909-45905dbd94bd"><div dir="ltr" style="margin-left: 0pt; text-align: left;"><table style="border-collapse: collapse; border: none; text-align: justify;"><colgroup><col width="141"></col><col width="483"></col></colgroup><tbody><tr style="height: 21pt;"><td colspan="2" style="border-bottom: solid #000000 1pt; border-color: rgb(0, 0, 0); border-left: solid #000000 1pt; border-right: solid #000000 1pt; border-style: solid; border-top: solid #000000 1pt; border-width: 1pt; overflow-wrap: break-word; overflow: hidden; padding: 5pt; vertical-align: top;"><br /><p dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;"><span face=""Google Sans", sans-serif" style="font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space-collapse: preserve;"><span style="border: none; display: inline-block; height: 344px; overflow: hidden; width: 610px;"><img height="344" src="https://lh3.googleusercontent.com/gGTJJd_NBombQHYpNbSg2tBt0LKW493ObzfahD_w9xM_5EIMajUpWWugnPwzRiv7e5KkZptbMzGmuSK1NULJmuF0U-tLBr0NQeunBTF08FeuEzZRuuWua6KtAD1TtV-8oWfYtT8JklIHb3k6VUmV1bF8jIMYynMKlCAy2oLqpuDxkD22hhNhbM9Y99Lm3Ck" style="margin-left: 0px; margin-top: 0px;" width="610.061" /></span></span></p><br /><p dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;"><span face=""Google Sans", sans-serif" style="font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space-collapse: preserve;">[Asset link: </span><a href="https://drive.google.com/file/d/1nXnd4ub71k8bAixHAZp6gRAW-mH1Pmvt/view?usp=sharing" style="text-decoration-line: none;"><span data-rich-links="{"fple-t":"IGFund_Keyword_Header.gif","fple-u":"https://drive.google.com/file/d/1nXnd4ub71k8bAixHAZp6gRAW-mH1Pmvt/view?usp=sharing","fple-mt":"image/gif","type":"first-party-link"}" face=""Google Sans", sans-serif" style="color: #1155cc; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space-collapse: preserve;">IGFund_Keyword_Header.gif</span></a><span face=""Google Sans", sans-serif" style="font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space-collapse: preserve;">]</span></p><br /><p dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;"><span face=""Google Sans", sans-serif" style="font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space-collapse: preserve;">En 2022, lanzamos por primera vez el Indie Games Fund en latinoamérica como parte de nuestro compromiso de ayudar a crecer en Google Play a los desarrolladores de todos los tamaños. Aquí puedes conocer a los </span><a href="https://blog.google/products/google-play/google-plays-indie-games-fund-selects-10-latin-american-studios/" style="text-decoration-line: none;"><span face=""Google Sans", sans-serif" style="color: #1155cc; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space-collapse: preserve;">10 estudios seleccionados</span></a><span face=""Google Sans", sans-serif" style="font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space-collapse: preserve;"> quienes recibieron parte del fondo el año pasado.</span></p><br /><p dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;"><span face=""Google Sans", sans-serif" style="font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space-collapse: preserve;">Hoy traemos de vuelta el Indie Games Fund en 2023. En el que reconoceremos con $2M de dólares en efectivo (no diluibles), además de soporte constante, a los pequeños estudios seleccionados basados en latinoamérica, ayudándoles a construir y crecer sus negocios en nuestra plataforma.</span></p><br /><p dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;"><span face=""Google Sans", sans-serif" style="font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space-collapse: preserve;">Este programa está abierto para los desarrolladores indie que ya han lanzado el juego que incluyan en su aplicación -Ya sea en Google Play o alguna otra plataforma móvil, PC o consola. Cada estudio seleccionado recibirá alrededor de $150,000 a $200,000 dólares para ayudarlos a llevar su juego al siguiente nivel, y así construir un negocio exitoso. </span></p><br /><p dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;"><span face=""Google Sans", sans-serif" style="font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space-collapse: preserve;">Revisa los requisitos para la elección y </span><a href="https://rsvp.withgoogle.com/events/indies-fund-2023/home" style="text-decoration-line: none;"><span face=""Google Sans", sans-serif" style="color: #1155cc; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space-collapse: preserve;">aplica ahora</span></a><span face=""Google Sans", sans-serif" style="font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space-collapse: preserve;">. Las aplicaciones se cierran el 1 de Septiembre de 2023 a las 12:00 pm hora de Brasil. Se les otorgará prioridad a las aplicaciones recibidas antes de las 12:00 pm hora de Brasil del 16 de Agosto de 2023 .</span></p><p dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;"><span face=""Google Sans", sans-serif" style="font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space-collapse: preserve;">Para mayor información y actualizaciones acerca de nuestros programas, recursos y herramientas para desarrolladores de videojuegos indie visita nuestro </span><a href="https://play.google.com/console/about/programs/indiegames/" style="text-decoration-line: none;"><span face=""Google Sans", sans-serif" style="color: #1155cc; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space-collapse: preserve;">website</span></a><span face=""Google Sans", sans-serif" style="font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space-collapse: preserve;">, y síguenos en Twitter </span><a href="https://twitter.com/GooglePlayBiz" style="text-decoration-line: none;"><span face=""Google Sans", sans-serif" style="color: #039be5; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space-collapse: preserve;">@GooglePlayBiz</span></a><span face=""Google Sans", sans-serif" style="font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space-collapse: preserve;"> y </span><a href="https://www.linkedin.com/showcase/googleplaybiz" style="text-decoration-line: none;"><span face=""Google Sans", sans-serif" style="color: #039be5; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space-collapse: preserve;">Google Play business community</span></a><span face=""Google Sans", sans-serif" style="font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space-collapse: preserve;"> en LinkedIn.</span></p></td></tr><tr style="height: 21pt;"><td colspan="2" style="border-bottom: solid #000000 1pt; border-color: rgb(0, 0, 0); border-left: solid #000000 1pt; border-right: solid #000000 1pt; border-style: solid; border-top: solid #000000 1pt; border-width: 1pt; overflow-wrap: break-word; overflow: hidden; padding: 5pt; vertical-align: top;"><br /><br /><p dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt; text-align: center;"><span face=""Google Sans", sans-serif" style="font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space-collapse: preserve;"> ¿Qué tan útil fue este blog post? </span></p><p dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt; text-align: center;"><a href="https://docs.google.com/forms/d/e/1FAIpQLScLTlzFd_aV-3rAdBqO1QxwCsuAcDCIM6fJFXyNcyf7zElVXg/viewform?usp=pp_url&entry.753333049=1%E2%98%85+%E2%80%93+Not+at+all&entry.2056663615&entry.646747778=changeme-mm/yy" style="text-decoration-line: none;"><span face=""Google Sans", sans-serif" style="color: #f1c232; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space-collapse: preserve;">★</span></a><span face=""Google Sans", sans-serif" style="color: #f1c232; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space-collapse: preserve;"> </span><a href="https://docs.google.com/forms/d/e/1FAIpQLScLTlzFd_aV-3rAdBqO1QxwCsuAcDCIM6fJFXyNcyf7zElVXg/viewform?usp=pp_url&entry.753333049=2%E2%98%85+%E2%80%93+Not+very&entry.2056663615&entry.646747778=changeme-mm/yy" style="text-decoration-line: none;"><span face=""Google Sans", sans-serif" style="color: #f1c232; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space-collapse: preserve;">★</span></a><span face=""Google Sans", sans-serif" style="color: #f1c232; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space-collapse: preserve;"> </span><a href="https://docs.google.com/forms/d/e/1FAIpQLScLTlzFd_aV-3rAdBqO1QxwCsuAcDCIM6fJFXyNcyf7zElVXg/viewform?usp=pp_url&entry.753333049=3%E2%98%85+%E2%80%93+Somewhat&entry.2056663615&entry.646747778=changeme-mm/yy" style="text-decoration-line: none;"><span face=""Google Sans", sans-serif" style="color: #f1c232; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space-collapse: preserve;">★</span></a><span face=""Google Sans", sans-serif" style="color: #f1c232; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space-collapse: preserve;"> </span><a href="https://docs.google.com/forms/d/e/1FAIpQLScLTlzFd_aV-3rAdBqO1QxwCsuAcDCIM6fJFXyNcyf7zElVXg/viewform?usp=pp_url&entry.753333049=4%E2%98%85+%E2%80%93+Very&entry.2056663615&entry.646747778=changeme-mm/yy" style="text-decoration-line: none;"><span face=""Google Sans", sans-serif" style="color: #f1c232; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space-collapse: preserve;">★</span></a><span face=""Google Sans", sans-serif" style="color: #f1c232; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space-collapse: preserve;"> </span><a href="https://docs.google.com/forms/d/e/1FAIpQLScLTlzFd_aV-3rAdBqO1QxwCsuAcDCIM6fJFXyNcyf7zElVXg/viewform?usp=pp_url&entry.753333049=5%E2%98%85+%E2%80%93+Extremely&entry.2056663615&entry.646747778=changeme-mm/yy" style="text-decoration-line: none;"><span face=""Google Sans", sans-serif" style="color: #f1c232; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space-collapse: preserve;">★</span></a></p></td></tr></tbody></table></div></span><br />Google Developers LATAMhttp://www.blogger.com/profile/05105089662475084319noreply@blogger.com0tag:blogger.com,1999:blog-218264512262097577.post-14644349920928182162023-06-29T11:44:00.006-03:002023-06-29T11:44:43.530-03:00Precios a los productos in-app realizando experimentos de precios en Play ConsolePublicado por Phalene Gowling, Product Manager, Google Play<div><br /></div><div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEjTAqnIy2LBWJvt9ladUFYqQfGMMiHE7-HlETTPO7QW9_qXw9gQMT8fEtCNTw5gvqYv8Z_1s9tBGq2NmI5QJDkp2M6cL0_blZlT7vrqQEv_I4-E-C_3Mel19HU0YOY_po6wPbz3T_4nIdsMGQNsiATgDdTbFw96EcjwZcOZyy1O2SSocToDd0OKC_i3vuUz" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="476" data-original-width="1600" height="190" src="https://blogger.googleusercontent.com/img/a/AVvXsEjTAqnIy2LBWJvt9ladUFYqQfGMMiHE7-HlETTPO7QW9_qXw9gQMT8fEtCNTw5gvqYv8Z_1s9tBGq2NmI5QJDkp2M6cL0_blZlT7vrqQEv_I4-E-C_3Mel19HU0YOY_po6wPbz3T_4nIdsMGQNsiATgDdTbFw96EcjwZcOZyy1O2SSocToDd0OKC_i3vuUz=w640-h190" width="640" /></a></div><div><br /></div><div><br /></div><span style="caret-color: rgb(0, 0, 0); font-family: -webkit-standard; text-size-adjust: auto;"><div style="text-align: justify;">En el Google I/O de este año, nuestra sesión "Aumenta tus ingresos con Play Commerce" destaca las nuevas herramientas de monetización que están profundamente integradas en Google Play, con un enfoque en ayudarte a optimizar tu estrategia de precios. Poner el precio correcto a tus productos o contenidos es fundamental para obtener un mayor valor del ciclo de vida del usuario y puede ayudarte a llegar a nuevos compradores, mejorar la conversión y fomentar la repetición de pedidos. Puede ser la diferencia entre el éxito de una venta y la pérdida del precio de la misma, o incluso infravalorar sus productos y perder oportunidades de venta clave.</div></span><div style="text-align: justify;"><br /></div><span style="caret-color: rgb(0, 0, 0); font-family: -webkit-standard; text-size-adjust: auto;"><div style="text-align: justify;">Para ayudarte a fijar precios con confianza, nos complace anunciar los experimentos de precios para productos in-app en Play Console, que te permitirán probar puntos de precio y optimizar el poder adquisitivo local a escala. Los experimentos de precios se lanzarán en las próximas semanas, así que sigue leyendo para conocer los detalles de la nueva herramienta y saber cómo puedes prepararte para aprovecharla al máximo cuando esté disponible.</div></span><br /><ul style="text-align: left;"><li style="text-align: justify;"><span style="caret-color: rgb(0, 0, 0); font-family: -webkit-standard; text-size-adjust: auto;">Pruebas A/B para encontrar precios locales óptimos que sean sensibles al poder adquisitivo de los compradores en diferentes mercados. Ajustar el precio a los mercados locales ya es una práctica extendida entre los desarrolladores, y en el lanzamiento podrás probar y gestionar tus precios globales, todo dentro de Play Console. Un precio optimizado ayuda a llegar tanto a los compradores nuevos como a los ya existentes, que antes no tenían acceso a experiencias monetizadas en aplicaciones y juegos. Además, un precio optimizado puede ayudar a aumentar las compras repetidas por parte de los compradores de sus productos favoritos.</span></li></ul><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEhCjkMyzr5xMgFDOFGdCnbXHtWwOejGcnfj7f15X1l6fi9NdikLllsgoM9SvzSnbdKKzKPX1Sze42ZpBJtmvJ_Ko7vlrrrOkj_tNZLRp0IVRArWyjPNKXCQB8bv16eNSkNYkMuoY2wY7m-U1tOMMMU2KczfpzgzqNyoR67BRiMqFwloPZ6oJvT_W39VdCVA" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="1146" data-original-width="1822" height="402" src="https://blogger.googleusercontent.com/img/a/AVvXsEhCjkMyzr5xMgFDOFGdCnbXHtWwOejGcnfj7f15X1l6fi9NdikLllsgoM9SvzSnbdKKzKPX1Sze42ZpBJtmvJ_Ko7vlrrrOkj_tNZLRp0IVRArWyjPNKXCQB8bv16eNSkNYkMuoY2wY7m-U1tOMMMU2KczfpzgzqNyoR67BRiMqFwloPZ6oJvT_W39VdCVA=w640-h402" width="640" /></a></div><br /><div style="text-align: center;"><i>Sólo ejemplo ilustrativo. Prueba A/B puntos de precio con facilidad en Play Console</i></div><div style="text-align: center;"><i><br /></i></div><div style="text-align: justify;"><ul><li><span style="caret-color: rgb(0, 0, 0); font-family: -webkit-standard; text-align: start; text-size-adjust: auto;">Experimente con confianza estadística: los experimentos de precios le permiten realizar un seguimiento de lo cerca que está de la significación estadística con el seguimiento del intervalo de confianza o, para obtener un resumen rápido, puede ver la parte superior del análisis cuando se han recopilado suficientes datos en el experimento para determinar un resultado estadísticamente significativo. Para facilitarle la decisión de aplicar o no el precio "ganador", también hemos incluido soporte para el seguimiento de métricas clave de monetización como el aumento de ingresos, los ingresos derivados de nuevos instaladores, el ratio de compradores, los pedidos y los ingresos medios por usuario de pago. Esto le permite comprender con más detalle cómo se comportan los compradores de forma diferente en cada rama del experimento por mercado. Esto también puede inspirar nuevos refinamientos hacia una sólida estrategia de monetización global.</span></li><li><span style="caret-color: rgb(0, 0, 0); font-family: -webkit-standard; text-align: start; text-size-adjust: auto;">Mejorar el retorno de la inversión en la adquisición de usuarios. Tener un precio localizado y una mejor comprensión del comportamiento de los compradores en cada mercado, le permite optimizar su estrategia de adquisición de usuarios habiendo conocido cómo reaccionarán los compradores a los productos o contenidos específicos de cada mercado. También podría informar sobre qué productos eliges incluir en Google Play.</span></li></ul><div style="text-align: start;"><span style="font-family: -webkit-standard;"><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEhanfbnwRemjLcgwMW2aY3-eWhRphxUIeYHNLj_RuUXe0q9tkz_fwQOoclOlGJABDOMbnf3Sy-ebzLIxgIgYAYtqOWn1R83v-ErmgkhTjEt9kDzpZtqA3iDFqU9KnrdzjHml0yNCn0rOuLRqTyNvbkkFya8q6k3ILF_XPHQ2KqIl67w6YF2GYEBnL5_xOXI" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="480" data-original-width="1904" height="162" src="https://blogger.googleusercontent.com/img/a/AVvXsEhanfbnwRemjLcgwMW2aY3-eWhRphxUIeYHNLj_RuUXe0q9tkz_fwQOoclOlGJABDOMbnf3Sy-ebzLIxgIgYAYtqOWn1R83v-ErmgkhTjEt9kDzpZtqA3iDFqU9KnrdzjHml0yNCn0rOuLRqTyNvbkkFya8q6k3ILF_XPHQ2KqIl67w6YF2GYEBnL5_xOXI=w640-h162" width="640" /></a></div><h3 style="text-align: left;"><span style="font-family: -webkit-standard;"><b><br /></b></span><span style="font-family: -webkit-standard;"><b>Configure experimentos de precios en cuestión de minutos en Play Console</b></span></h3><div><span style="caret-color: rgb(0, 0, 0); text-size-adjust: auto;">Los experimentos de precios serán fáciles de ejecutar con la nueva sección dedicada en Play Console bajo Monetizar > Productos > Experimentos de precios. Primero tendrás que determinar los productos in-app, los mercados y los puntos de precio que te gustaría probar. La interfaz intuitiva también te permitirá refinar la configuración del experimento por audiencia, nivel de confianza y sensibilidad. Y una vez que su experimento haya alcanzado significación estadística, sólo tiene que aplicar el precio ganador a los productos seleccionados dentro de la herramienta para rellenar automáticamente su nuevo punto de precio predeterminado para los mercados y productos de su experimento. También tiene la flexibilidad de detener cualquier experimento antes de que alcance la significación estadística si es necesario.</span><br style="caret-color: rgb(0, 0, 0); text-size-adjust: auto;" /><br style="caret-color: rgb(0, 0, 0); text-size-adjust: auto;" /><span style="caret-color: rgb(0, 0, 0); text-size-adjust: auto;">Tendrá el control total de qué y cómo quiere probar, reduciendo los gastos generales de gestionar las pruebas de forma independiente o con herramientas externas, todo ello sin necesidad de realizar ningún cambio en la codificación.</span><br style="caret-color: rgb(0, 0, 0); text-size-adjust: auto;" /><br style="caret-color: rgb(0, 0, 0); text-size-adjust: auto;" /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEglSTq7uQOAO5M5CaZ_EcymQkhn6H8fi6ZjIT8dUztT_ooVO-dyGoSWAjgcuMQyvuo5X7z9G8c1-oqbHFbWwHUyoqp9NNGdIcHd28ynQCOQrCfFeP9Q_jdbO2hzI4-FogQGl6LUAhhdEviaFI16qQyYNmXbNM2ADXsRAooaWXyowr9CkmwgIAbcKEc-MskK" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="793" data-original-width="1126" height="450" src="https://blogger.googleusercontent.com/img/a/AVvXsEglSTq7uQOAO5M5CaZ_EcymQkhn6H8fi6ZjIT8dUztT_ooVO-dyGoSWAjgcuMQyvuo5X7z9G8c1-oqbHFbWwHUyoqp9NNGdIcHd28ynQCOQrCfFeP9Q_jdbO2hzI4-FogQGl6LUAhhdEviaFI16qQyYNmXbNM2ADXsRAooaWXyowr9CkmwgIAbcKEc-MskK=w640-h450" width="640" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEjwXhMpIRtLeyvSO1SmH7U9TdRRPUdp7bummydO_aNRWbqyjLqE8TJwGxaOu7hs3I5yFg181O7LVGSJ-tk4sQQLLaRhdWt6FGV0VsSiovhZibHSLGF_D6-A01ltZoqjzuVcEX84MmwWyKr2SJ5iTjZGJjKwWbFknKGcwkYBgXBdwjZQiZ0M9PXE7Igh-CY6" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="386" data-original-width="1398" height="176" src="https://blogger.googleusercontent.com/img/a/AVvXsEjwXhMpIRtLeyvSO1SmH7U9TdRRPUdp7bummydO_aNRWbqyjLqE8TJwGxaOu7hs3I5yFg181O7LVGSJ-tk4sQQLLaRhdWt6FGV0VsSiovhZibHSLGF_D6-A01ltZoqjzuVcEX84MmwWyKr2SJ5iTjZGJjKwWbFknKGcwkYBgXBdwjZQiZ0M9PXE7Igh-CY6=w640-h176" width="640" /></a></div><br /><h3 style="text-align: left;"><span style="caret-color: rgb(0, 0, 0); text-size-adjust: auto;"><b>A comenzar</b></span></h3></div><div><div style="text-align: justify;"><span style="caret-color: rgb(0, 0, 0);">Ya puede empezar a prepararse pensando qué tipo de experimento de precios le gustaría realizar primero. Para obtener una fuente de inspiración basada en métricas, los desarrolladores de juegos pueden explorar la orientación estratégica, que puede identificar oportunidades específicas de cada país para la conversión de compradores. Como alternativa, puedes empezar a adquirir experiencia en la ejecución de experimentos de precios eficaces para productos integrados en la aplicación siguiendo nuestro nuevo curso de la Academia Play, como preparación para los experimentos de precios que se pondrán en marcha en los próximos meses.</span></div><span style="caret-color: rgb(0, 0, 0); text-size-adjust: auto;"><div style="text-align: justify;">como preparación para los experimentos de precios que se lanzarán en las próximas semanas.</div></span><br /></div></span><span style="font-family: -webkit-standard;"><br /></span></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEhpq8y5w1CmDmBLUPTV9DTLJdPoURUDa4jPq72ASU43bavJu0no4205KA5OjbuZzixYCNREu4fk5dbaxMoosGbeHFt6KsHatwpGOQbX_0ST6DLanWzNwIlroWv4pa4-VrL5-Rm8iRJHjMqTfkcFgRIUG2nmbx-XhggJSymX-O_VyUtAVCNG9ARjPhEeylOn" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="53" data-original-width="260" height="65" src="https://blogger.googleusercontent.com/img/a/AVvXsEhpq8y5w1CmDmBLUPTV9DTLJdPoURUDa4jPq72ASU43bavJu0no4205KA5OjbuZzixYCNREu4fk5dbaxMoosGbeHFt6KsHatwpGOQbX_0ST6DLanWzNwIlroWv4pa4-VrL5-Rm8iRJHjMqTfkcFgRIUG2nmbx-XhggJSymX-O_VyUtAVCNG9ARjPhEeylOn" width="320" /></a></div><br /><br /></div><br /></div>Google Developers LATAMhttp://www.blogger.com/profile/05105089662475084319noreply@blogger.com0tag:blogger.com,1999:blog-218264512262097577.post-46701049211794262602023-06-14T14:51:00.002-03:002023-06-23T14:58:02.434-03:00Botones de composición de Jetpack para Google Pay y Google Wallet<div style="text-align: justify;"><i>Publicado por Stephen McDonald, Ingeniero de Programas para Desarrolladores</i></div><div><i><div class="separator" style="clear: both; text-align: center;"><div class="separator" style="clear: both; text-align: justify;"><br /></div><div style="text-align: justify;"><br /></div></div><div class="separator" style="clear: both; text-align: justify;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjWXdG-CSG3Ke5-yXwjCG33591L3J0eBTWIEIQfJN78GjWAwG0XaioFYLSO-lNva9VlUYrLYttuDkQz2DZ_SWJuj7f2T4YPyk1C7yhLTIzRoeiJmBnVVumU2ehIRxunE6TpgiAbMwVPxTgTyREB0ecMFEUokoVfDYSQKuIOFu83taggXtEPb1bn9DfWy2Fm/s1600/header18.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="476" data-original-width="1600" height="190" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjWXdG-CSG3Ke5-yXwjCG33591L3J0eBTWIEIQfJN78GjWAwG0XaioFYLSO-lNva9VlUYrLYttuDkQz2DZ_SWJuj7f2T4YPyk1C7yhLTIzRoeiJmBnVVumU2ehIRxunE6TpgiAbMwVPxTgTyREB0ecMFEUokoVfDYSQKuIOFu83taggXtEPb1bn9DfWy2Fm/w640-h190/header18.png" width="640" /></a></div><div style="text-align: justify;"><br /></div><div style="text-align: justify;"><br /></div></i></div><div style="text-align: justify;">Recientemente lanzamos una nueva vista del botón de Google Pay en Android que trae una serie de nuevas características, como los últimos principios de diseño Material 3, versiones con temas oscuros y claros, y otras nuevas capacidades de personalización.</div><div style="text-align: justify;"><br /></div><div><div class="separator" style="clear: both; text-align: justify;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiz-ATM-DyKEXQe7EAEDwKapXrA8TNcL-a-3ys3z0UkUN55i3f_qU7naEjB3GEEy2B-NywBqN_UZ_Y5cGo6G11FQny7QhMTkEWl8n-zJ7T0KnIycnOe-s2UEu-SYlSsTnclxy_wRMa54d8aoCX1nkv5g6ulbjg9BX9MLzMZD52vu-J7gjW99nfQHUypbnsJ/s1600/image2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="900" data-original-width="1600" height="360" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiz-ATM-DyKEXQe7EAEDwKapXrA8TNcL-a-3ys3z0UkUN55i3f_qU7naEjB3GEEy2B-NywBqN_UZ_Y5cGo6G11FQny7QhMTkEWl8n-zJ7T0KnIycnOe-s2UEu-SYlSsTnclxy_wRMa54d8aoCX1nkv5g6ulbjg9BX9MLzMZD52vu-J7gjW99nfQHUypbnsJ/w640-h360/image2.png" width="640" /></a></div><div style="text-align: justify;"><br /></div><div class="separator" style="clear: both; text-align: justify;"><br /></div><div style="text-align: justify;"><br /></div></div><div style="text-align: justify;">Figura 1: La nueva vista del botón de Google Pay para Android se puede personalizar para hacerla más consistente con su experiencia de compra.</div><div style="text-align: justify;"><br /></div><div style="text-align: justify;"><b>Botones de Jetpack Compose</b></div><div style="text-align: justify;">Ahora hemos hecho disponible el nuevo botón de Google Pay para los desarrolladores de Jetpack Compose con una nueva biblioteca de código abierto compose-pay-button. Jetpack Compose es el conjunto de herramientas moderno de Android para construir interfaces de usuario utilizando el lenguaje Kotlin, y con esta nueva biblioteca puedes implementar el botón de Google Pay en tus aplicaciones de Android con incluso menos código que antes.</div><div style="text-align: justify;"><br /></div><div style="text-align: justify;">Veamos un ejemplo rápido. Aquí puedes ver una interfaz de usuario típica de Jetpack Compose, con el botón de Google Pay añadido. El botón acepta un modificador de Jetpack Compose para la personalización, y soporta una variedad de etiquetas, en este caso "Reservar con Google Pay".</div><div style="text-align: justify;"><br /></div><div class="separator" style="clear: both; text-align: justify;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjiJeCP1t9mNGErpaLcq5mZWszKuMHxeCA5uKbaL3xHf2bTuucJheYX-H8ROsfhHgv9u0bMufyQZSgnZ8etAgPwn-SwKVzF-1GH_QP2irmePK9lnw9_19kY9ipf_ga83ot3ItvvpL6Xe9NY9FE0wKjWZcAqAwjBCXY7vUzXJDiHIY-tKBwAF1SZqhQrvu34/s729/image%20(47).png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="235" data-original-width="729" height="206" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjiJeCP1t9mNGErpaLcq5mZWszKuMHxeCA5uKbaL3xHf2bTuucJheYX-H8ROsfhHgv9u0bMufyQZSgnZ8etAgPwn-SwKVzF-1GH_QP2irmePK9lnw9_19kY9ipf_ga83ot3ItvvpL6Xe9NY9FE0wKjWZcAqAwjBCXY7vUzXJDiHIY-tKBwAF1SZqhQrvu34/w640-h206/image%20(47).png" width="640" /></a></div><div style="text-align: justify;"><br /></div><div class="separator" style="clear: both; text-align: justify;"><br /></div><div style="text-align: justify;"><b>Google Wallet</b></div><div style="text-align: justify;">Por último, también hemos lanzado una biblioteca correspondiente para Google Wallet, compose-wallet-button. La biblioteca proporciona una API similar a la del botón de Google Pay, pero en cambio agrupa los mismos recursos de botón disponibles en el sitio para desarrolladores de Google Wallet, incluyendo versiones regulares y condensadas.</div><div style="text-align: justify;"><br /></div><div style="text-align: justify;">Imagen de las versiones regulares (izquierda) y condensadas (derecha) del botón de Google Wallet</div><div style="text-align: justify;">Figura 2: Ambas versiones, regular y condensada, del botón de Google Wallet están disponibles en la nueva biblioteca.</div><div style="text-align: justify;"><br /></div><div style="text-align: justify;">¿Listo para empezar? Consulta los repositorios de GitHub para compose-pay-button y compose-wallet-button donde puedes aprender más sobre las bibliotecas y cómo agregarlas a tus aplicaciones de Android!</div><div style="text-align: justify;"><br /></div><div style="text-align: justify;"><br /></div>Google Developers LATAMhttp://www.blogger.com/profile/05105089662475084319noreply@blogger.com0tag:blogger.com,1999:blog-218264512262097577.post-17244648322182081492023-06-07T14:42:00.002-03:002023-06-23T14:50:22.793-03:00El proyecto GameFace pone el juego al alcance de todos<div style="text-align: justify;"><i>Publicado por Avneet Singh, Gerente de Producto, y Sisi Jin, Diseñadora de UX en Google PI, y Lance Carr, Colaborador</i></div><div><i><div class="separator" style="clear: both; text-align: justify;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEgejBONoFouJeWZkYvKwQPXodh73p7AXA6-Y8erxef2n6Jp4P42yeiUnlj5GomKd4Q-N4yC6LO4Xkw3EuvzM9yMx3rMMuVhSQ4ZPPWtqueeCHB2wsxaFf2D4NOsfV74sG8HYXItwNgki3__ayjKpA5bOT8kjLdUmMTRp6VG82ob5yO72GRbMiqsb90awOkK" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="476" data-original-width="1600" height="190" src="https://blogger.googleusercontent.com/img/a/AVvXsEgejBONoFouJeWZkYvKwQPXodh73p7AXA6-Y8erxef2n6Jp4P42yeiUnlj5GomKd4Q-N4yC6LO4Xkw3EuvzM9yMx3rMMuVhSQ4ZPPWtqueeCHB2wsxaFf2D4NOsfV74sG8HYXItwNgki3__ayjKpA5bOT8kjLdUmMTRp6VG82ob5yO72GRbMiqsb90awOkK=w640-h190" width="640" /></a></div><div style="text-align: justify;"><br /></div><div style="text-align: justify;"><br /></div></i></div><div style="text-align: justify;">En I/O 2023, Google lanzó Project Gameface, un 'mouse' para juegos de código abierto y manos libres que permite a las personas controlar el cursor de una computadora utilizando el movimiento de su cabeza y los gestos faciales. Las personas pueden levantar las cejas para hacer clic y arrastrar, o abrir la boca para mover el cursor, haciendo que los juegos sean más accesibles.</div><div style="text-align: justify;"><br /></div><div style="text-align: justify;">El proyecto fue inspirado por la historia de Lance Carr, un streamer de videojuegos cuadripléjico que vive con distrofia muscular, una enfermedad progresiva que debilita los músculos. Y colaboramos con Lance para dar vida al Project Gameface. La historia completa detrás del producto está disponible en el blog Google Keyword aquí.</div><div style="text-align: justify;"><br /></div><div style="text-align: justify;">Ha sido una experiencia extremadamente interesante pensar en cómo un cursor de mouse puede ser controlado de una manera tan novedosa. Realizamos muchos experimentos y descubrimos que el movimiento de la cabeza y las expresiones faciales pueden ser una forma única de programar el cursor del mouse. La nueva API de detección de marcas faciales de MediaPipe con opción de blendshape hizo esto posible, ya que permite a cualquier desarrollador aprovechar 478 marcas faciales tridimensionales y 52 puntuaciones de blendshape (coeficientes que representan la expresión facial) para inferir superficies faciales detalladas en tiempo real.</div><div style="text-align: justify;"><br /></div><div style="text-align: justify;">Construcción y detalles del producto</div><div style="text-align: justify;">En este artículo, compartimos detalles técnicos de cómo construimos el Project Gameface y las diversas tecnologías de código abierto que utilizamos para crear el emocionante producto.</div><div style="text-align: justify;"><br /></div><div style="text-align: justify;"><b>Uso del movimiento de la cabeza para mover el cursor del mouse</b></div><div style="text-align: justify;"><b><br /></b></div><div class="separator" style="clear: both; text-align: justify;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEjjdL6cJzvkvWbQP5kz4UZZfHijpkDGtHR7CsQ0sQUbRTygEd4lljGsVue3UxQ69MNE9ZrvvuODEtZrbak3fUswoB7XgFVhCYycHdu2axTC1GMvT8HNN7LKqi9rntcYP8wtU3NryCXJfdCCjUxzi4DWVGroZMnflMqbG2pgLdB4DovuY-ilaIRqLIrMMr9S" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="473" data-original-width="720" height="420" src="https://blogger.googleusercontent.com/img/a/AVvXsEjjdL6cJzvkvWbQP5kz4UZZfHijpkDGtHR7CsQ0sQUbRTygEd4lljGsVue3UxQ69MNE9ZrvvuODEtZrbak3fUswoB7XgFVhCYycHdu2axTC1GMvT8HNN7LKqi9rntcYP8wtU3NryCXJfdCCjUxzi4DWVGroZMnflMqbG2pgLdB4DovuY-ilaIRqLIrMMr9S=w640-h420" width="640" /></a></div><div style="text-align: justify;"><br /></div><div style="text-align: justify;"><span style="font-size: x-small;"><b>Caption:</b> Controlando el movimiento de la cabeza para mover los cursores del mouse y personalizando la velocidad del cursor para adaptarse a diferentes resoluciones de pantalla.</span></div><div style="text-align: justify;"><br /></div><div style="text-align: justify;">A través de este proyecto, exploramos el concepto de usar el movimiento de la cabeza para poder mover el cursor del mouse. Nos enfocamos en la frente y el iris como nuestras dos ubicaciones de referencia. Se conoce que tanto la frente como el iris son puntos de referencia estables. Sin embargo, Lance notó que el cursor no funcionaba bien al usar el punto de referencia del iris. La razón era que el iris puede moverse ligeramente cuando las personas parpadean, haciendo que el cursor se mueva involuntariamente. Por lo tanto, decidimos usar el punto de referencia de la frente como opción de seguimiento predeterminada.</div><div style="text-align: justify;"><br /></div><div style="text-align: justify;">Hay casos en los que las personas pueden encontrar dificultades al mover la cabeza en ciertas direcciones. Por ejemplo, Lance puede mover su cabeza más rápido hacia la derecha que hacia la izquierda. Para abordar este problema, introdujimos una solución amigable para el usuario: ajuste de velocidad del cursor separado para cada dirección. Esta característica permite a las personas personalizar el movimiento del cursor de acuerdo con sus preferencias, facilitando una navegación más suave y cómoda.</div><div style="text-align: justify;"><br /></div><div style="text-align: justify;">Queríamos que la experiencia fuera tan fluida como un controlador de mano. La inestabilidad del cursor del mouse es uno de los principales problemas que queríamos superar. La aparición de inestabilidad del cursor está influenciada por varios factores, incluida la configuración del usuario, la cámara, el ruido y las condiciones de iluminación. Implementamos una función de suavizado de cursor ajustable para permitir a los usuarios la comodidad de ajustar fácilmente esta característica para adaptarse mejor a su configuración específica.</div><div style="text-align: justify;"><br /></div><div style="text-align: justify;"><b>Uso de expresiones faciales para realizar acciones de mouse y presionar teclas del teclado</b></div><div style="text-align: justify;"><b><br /></b></div><div style="text-align: justify;">Desde muy temprano, una de nuestras principales percepciones fue que las personas tienen diferentes niveles de comodidad al hacer diferentes expresiones faciales. Un gesto que le resulta fácil a un usuario puede ser extremadamente difícil de hacer deliberadamente para otro. Por ejemplo, Lance puede mover sus cejas de forma independiente con facilidad, mientras que el resto del equipo luchó por igualar la habilidad de Lance. Por lo tanto, decidimos crear una funcionalidad para que las personas personalicen las expresiones que utilizan para controlar el mouse.</div><div style="text-align: justify;"><br /></div><div style="text-align: justify;"><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEg4UVXZEzbuGMGRcRvQbGRUN2cw2QeNCD6cJATiDJ6HEXzFuqutIc9i5ear-uijp201b8Wo2UTy-czovSBVCO1M12ScPCziQBnPJP32hSHczmSAsvC0CU1G6oHOypNw6Hrp2E5gzNwtv2VDtT7wXTlcZ6LZ7c-w-8Wt1V_OXqNOu6wQ5ugPRD7pHfpsIiV3" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="473" data-original-width="720" height="421" src="https://blogger.googleusercontent.com/img/a/AVvXsEg4UVXZEzbuGMGRcRvQbGRUN2cw2QeNCD6cJATiDJ6HEXzFuqutIc9i5ear-uijp201b8Wo2UTy-czovSBVCO1M12ScPCziQBnPJP32hSHczmSAsvC0CU1G6oHOypNw6Hrp2E5gzNwtv2VDtT7wXTlcZ6LZ7c-w-8Wt1V_OXqNOu6wQ5ugPRD7pHfpsIiV3=w640-h421" width="640" /></a></div><br /></div><div style="text-align: justify;"><span style="font-size: x-small;">Caption: Uso de expresiones faciales para controlar el mouse</span></div><div style="text-align: justify;"><br /></div><div style="text-align: justify;">Piénselo como una asignación personalizada de un gesto a una acción de mouse. Al deliberar sobre qué acciones de mouse debería cubrir el producto, tratamos de capturar escenarios comunes como hacer clic izquierdo y derecho hasta desplazarse hacia arriba y hacia abajo. Sin embargo, usar la cabeza para controlar el movimiento del cursor del mouse es una experiencia diferente a la forma convencional. Queríamos dar a los usuarios la opción de restablecer el cursor del mouse al centro de la pantalla utilizando también un gesto facial.</div><div style="text-align: justify;"><br /></div><div style="text-align: justify;"><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEgpsfRStnBv5vDxoydjCxBQi8HO2OhFODZ-1jpFy8spu6zNRRnF4BFUYTp_SXDG53oeDQQE2j6ffgjOCZV1UeIhKkPKfHH-K9sSpj85OxIGZKcrqBX_5Bi2JnRxWv62zml_hDqTWxLDyHcitOA9HX7z4LFzyjLlhrDXHiHa15BsslOpv3H7_KezOy8uHvga" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="450" data-original-width="800" height="360" src="https://blogger.googleusercontent.com/img/a/AVvXsEgpsfRStnBv5vDxoydjCxBQi8HO2OhFODZ-1jpFy8spu6zNRRnF4BFUYTp_SXDG53oeDQQE2j6ffgjOCZV1UeIhKkPKfHH-K9sSpj85OxIGZKcrqBX_5Bi2JnRxWv62zml_hDqTWxLDyHcitOA9HX7z4LFzyjLlhrDXHiHa15BsslOpv3H7_KezOy8uHvga=w640-h360" width="640" /></a></div><span style="font-size: x-small;"><br /></span></div><div style="text-align: justify;"><span style="font-size: x-small;"><b>Caption</b>: Uso de expresiones faciales para controlar el teclado</span></div><div style="text-align: justify;"><br /></div><div style="text-align: justify;">La versión más reciente de la detección de puntos de referencia faciales de MediaPipe trae una adición emocionante: salida de blendshapes. Con esta mejora, la API genera 52 valores de blendshapes faciales que representan la expresividad de 52 gestos faciales como levantar la ceja izquierda o abrir la boca. Estos valores se pueden mapear de manera efectiva para controlar una amplia gama de funciones, ofreciendo a los usuarios amplias posibilidades de personalización y manipulación.</div><div style="text-align: justify;"><br /></div><div style="text-align: justify;">Hemos podido extender la misma funcionalidad y agregar la opción para también enlazar el teclado. Esto ayuda a usar sus gestos faciales para también presionar algunas teclas del teclado de manera similar.</div><div style="text-align: justify;"><br /></div><div style="text-align: justify;"><b>Establecer el tamaño del gesto para ver cuándo desencadenar una acción de mouse / teclado</b></div><div style="text-align: justify;"><br /></div><div style="text-align: justify;"><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEhDHGYnNknBxxJp1Mp0SErjnvydrary_g9eOkc9rB2LYOnhFPlodtus0oouVHwJe5OWz0Y5_bwTohDOBI-6cSx9cdRULAqxfKHU6hv7E0NSybR-ECTGL9nH148ntXOzAaoev-OMYe5ZKWtZ6B5q28BhdF0962jGm1UwXbc4QXzdQCDOcQMsASpqQpdrLLGt" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="720" data-original-width="1080" height="426" src="https://blogger.googleusercontent.com/img/a/AVvXsEhDHGYnNknBxxJp1Mp0SErjnvydrary_g9eOkc9rB2LYOnhFPlodtus0oouVHwJe5OWz0Y5_bwTohDOBI-6cSx9cdRULAqxfKHU6hv7E0NSybR-ECTGL9nH148ntXOzAaoev-OMYe5ZKWtZ6B5q28BhdF0962jGm1UwXbc4QXzdQCDOcQMsASpqQpdrLLGt=w640-h426" width="640" /></a></div><br /></div><div style="text-align: justify;"><span style="font-size: x-small;"><b>Caption:</b> Establecer el tamaño del gesto para desencadenar una acción</span></div><div style="text-align: justify;"><span style="font-size: x-small;"><br /></span></div><div style="text-align: justify;">Mientras probábamos el software, descubrimos que las expresiones faciales eran más o menos pronunciadas por cada uno de nosotros, por lo que incorporamos la idea de un tamaño de gesto, que permite a las personas controlar hasta qué punto necesitan gesticular para desencadenar una acción de mouse. Los coeficientes de blendshapes fueron útiles aquí y ahora diferentes usuarios pueden establecer diferentes umbrales en cada expresión específica y esto les ayuda a personalizar la experiencia a su comodidad.</div><div style="text-align: justify;"><br /></div><div style="text-align: justify;"><b>Manteniendo la alimentación de la cámara disponible</b></div><div style="text-align: justify;">Otra percepción clave que recibimos de Lance fue que los jugadores a menudo tienen múltiples cámaras. Para que nuestros modelos de aprendizaje automático funcionen de manera óptima, es mejor tener una cámara apuntando directamente a la cara del usuario con una iluminación decente. Por lo tanto, hemos incorporado la capacidad para que el usuario seleccione la cámara correcta para ayudar a encuadrarlos y brindar el rendimiento más óptimo.</div><div style="text-align: justify;"><br /></div><div style="text-align: justify;">La interfaz de usuario de nuestro producto incorpora una alimentación de cámara en vivo, proporcionando a los usuarios visibilidad en tiempo real de sus movimientos de cabeza y gestos. Esta característica trae varias ventajas. En primer lugar, los usuarios pueden establecer umbrales de manera más efectiva al observar directamente sus propios movimientos. La representación visual permite decisiones informadas sobre valores de umbral apropiados. Además, la alimentación de la cámara en vivo mejora la comprensión de los usuarios de los diferentes gestos, ya que correlacionan visualmente sus movimientos con las acciones correspondientes en la aplicación. En general, la alimentación de la cámara mejora significativamente la experiencia del usuario, facilitando la configuración precisa de los umbrales y una comprensión más profunda de los gestos.</div><div style="text-align: justify;"><br /></div><div style="text-align: justify;"><b>Empaquetado del producto</b></div><div style="text-align: justify;">Nuestro próximo paso fue crear la capacidad para controlar el mouse y el teclado utilizando nuestra lógica definida por el usuario. Para habilitar el control del mouse y el teclado dentro de nuestra aplicación Python, utilizamos dos bibliotecas: PyAutoGUI para el control del mouse y PyDirectInput para el control del teclado. PyAutoGUI es elegida por sus sólidas capacidades de control del mouse, que nos permiten simular movimientos, clics y otras acciones del mouse. Por otro lado, aprovechamos PyDirectInput para el control del teclado, ya que ofrece una mayor compatibilidad con diversas aplicaciones, incluidos juegos y aquellos que dependen de DirectX.</div><div style="text-align: justify;"><br /></div><div style="text-align: justify;">Para el empaquetado de nuestra aplicación, utilizamos PyInstaller para convertir nuestra aplicación basada en Python en un ejecutable, lo que facilita a los usuarios ejecutar nuestro software sin necesidad de instalar Python ni dependencias adicionales. PyInstaller proporciona un medio confiable y eficiente para distribuir nuestra aplicación, garantizando una experiencia de usuario fluida.</div><div style="text-align: justify;"><br /></div><div style="text-align: justify;">El producto introduce un factor de forma novedoso para involucrar a los usuarios en una función importante como el manejo del cursor del mouse. Hacer que el producto y su interfaz de usuario sean intuitivos y fáciles de seguir fue una prioridad para nuestro equipo de diseño e ingeniería. Trabajamos en estrecha colaboración con Lance para incorporar sus comentarios en nuestras consideraciones de UX, y descubrimos que CustomtKinter podía manejar la mayoría de nuestras consideraciones de UI en Python.</div><div style="text-align: justify;"><br /></div><div style="text-align: justify;">Estamos emocionados de ver el potencial de Project GameFace y no podemos esperar a que los desarrolladores y las empresas lo aprovechen para construir nuevas experiencias. El código para GameFace es de código abierto en Github aquí.</div><div style="text-align: justify;"><br /></div><div style="text-align: justify;">Agradecimientos</div><div style="text-align: justify;">Nos gustaría reconocer las valiosas contribuciones de las siguientes personas a este proyecto: Lance Carr, David Hewlett, Laurence Moroney, Khanh LeViet, Glenn Cameron, Edwina Priest, Joe Fry, Feihong Chen, Boon Panichprecha, Dome Seelapun, Kim Nomrak, Pear Jaionnom, Lloyd Hightower</div>Google Developers LATAMhttp://www.blogger.com/profile/05105089662475084319noreply@blogger.com0tag:blogger.com,1999:blog-218264512262097577.post-64501129635683184042023-05-22T16:48:00.000-03:002023-05-22T16:48:06.134-03:00El programa mundial de formación en Machine Learning nacido en Corea del Sur<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEjNFACOIZwcXFuS5BqzOTKtvhTnO_poz6PaIA35cGn58XF2FWieRbtF68B7c_rTqVjIyP-bpzQ4xAGR-aiVY-iC--spOhGKU_Oukv9sm6G22Y6t9KrGHiDxmhPIfKqiEB7hIM26bf3Cm9SSOqXTgPIEHeeAz0-AhVOyg9lyIfLb3Aw7rU7u7npdR_voMg" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="800" data-original-width="1200" height="426" src="https://blogger.googleusercontent.com/img/a/AVvXsEjNFACOIZwcXFuS5BqzOTKtvhTnO_poz6PaIA35cGn58XF2FWieRbtF68B7c_rTqVjIyP-bpzQ4xAGR-aiVY-iC--spOhGKU_Oukv9sm6G22Y6t9KrGHiDxmhPIfKqiEB7hIM26bf3Cm9SSOqXTgPIEHeeAz0-AhVOyg9lyIfLb3Aw7rU7u7npdR_voMg=w640-h426" width="640" /></a></div><div><br /></div><div><div style="text-align: justify;"><span style="caret-color: rgb(0, 0, 0); font-family: -webkit-standard;">En 2020, lanzamos Google Machine Learning Bootcamp en Corea como parte de la misión de Google de hacer más accesible la información del mundo. Como país con una comunidad de desarrolladores ya próspera formada por startups locales y empresas globales por igual, la oportunidad de hacer que el aprendizaje automático (ML) fuera más accesible para los desarrolladores era prometedora. Así nació Google Machine Learning Bootcamp: un programa intensivo de formación en ML de tres meses para estudiantes y desarrolladores. A través del programa, los participantes se ponen en contacto con empresas de TI locales para encontrar oportunidades de empleo con sus nuevos conocimientos.</span></div><div style="text-align: justify;"><br /></div><span style="caret-color: rgb(0, 0, 0); font-family: -webkit-standard; text-size-adjust: auto;"><div style="text-align: justify;">Dos años después del lanzamiento, ampliamos el programa a un total de siete países y regiones de alto crecimiento: Europa, India, <a href="https://blog.google/around-the-globe/google-asia/the-global-machine-learning-training-program-born-out-of-south-korea/#:~:text=%2C%20India%2C-,LATAM,-%2C%20Africa%2C" rel="nofollow" target="_blank">LATAM</a>, África, Turquía, Japón y Corea. En el programa más reciente, recibimos más de 36.000 solicitudes de todo el mundo y seleccionamos a 1.600 finalistas. El programa en sí fue virtual, creando una experiencia de aprendizaje flexible para que los participantes de todo el mundo pudieran unirse sin importar dónde estuvieran o cómo fueran sus horarios. Durante la duración del bootcamp, los participantes estudiaron teoría de ML y TensorFlow a través de la Especialización en Aprendizaje Profundo de Coursera, practicaron sus habilidades a través de competiciones de Kaggle y obtuvieron el certificado TensorFlow o la certificación Google Cloud ML Engineer.</div></span></div><div><span style="font-family: -webkit-standard;"><br /></span></div><div><span style="font-family: -webkit-standard;"><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEh9G7kvRqWKrzbpjNNZhbmTGRxyxNfrFEZI_Qs5gjYXKbb7fN9v8VzFvVEBEVDRIbt5LOw7uJ8O1BcqNKyygVbz_ocwERe8aWNZFrv7g1jpOJBkighaEz200moSpSmbTXASi4b-AeREBUMBSAMi__zd1XzVFKRwkQgFb-xKPcBIUz_lBnIMVsX23Ylj5w" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="764" data-original-width="1514" height="322" src="https://blogger.googleusercontent.com/img/a/AVvXsEh9G7kvRqWKrzbpjNNZhbmTGRxyxNfrFEZI_Qs5gjYXKbb7fN9v8VzFvVEBEVDRIbt5LOw7uJ8O1BcqNKyygVbz_ocwERe8aWNZFrv7g1jpOJBkighaEz200moSpSmbTXASi4b-AeREBUMBSAMi__zd1XzVFKRwkQgFb-xKPcBIUz_lBnIMVsX23Ylj5w=w640-h322" width="640" /></a></div><br /><div style="text-align: justify;"><br /></div></span><div style="text-align: justify;">Para ayudar a los estudiantes en su trayectoria profesional, organizamos horas de oficina y talleres de preparación de currículos para ayudarles a buscar trabajo, hacer entrevistas y mucho más. Y para ofrecer una experiencia de inmersión en lo que es trabajar en tecnología, también organizamos charlas técnicas con empresas locales de TI, así como visitas a sus oficinas.</div></div><div><br /></div><blockquote><div><q class="uni-pull-quote__text" style="background-color: white; box-sizing: border-box; color: #202124; font-family: Roboto, sans-serif; font-size: 22px; hyphens: none; position: relative;">Through the Tech Talks, I was able to learn more about what each company was looking for, and through the Q&A sessions, I was able to get a clear picture of what I needed to work on.</q><span style="background-color: white; color: #202124; font-family: Roboto, sans-serif; font-size: 16px;"></span><cite class="uni-pull-quote__author" style="background-color: white; box-sizing: border-box; color: #202124; display: flex; font-family: Roboto, sans-serif; font-size: 16px; font-style: normal; line-height: 1.5; margin-top: 24px;"><span class="uni-pull-quote__author-meta" style="box-sizing: border-box;"><span class="h-u-font-weight-medium" style="box-sizing: border-box;">Woosuk Jung</span><br style="box-sizing: border-box;" />Program alumni, now a data scientist at KEARNEY</span></cite></div></blockquote><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEghTlPwh907X_FcT-gvQC23ocAeMQlNM_F-KXjxxHGP9vXY4Vm3yQZbrGMpqnm3aIEmh8a-yqI1lqccPbayfV8wrCFSv_NDQDjRI_3Fuo2QLVjw11kl4jnMLnGpKAZPFysY_kIXBpVi7YedexDkmaPZ7N_SHUYzOe9vFbKoj_HCqzXTBSnobvgBHx2h2Q" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="485" data-original-width="983" height="316" src="https://blogger.googleusercontent.com/img/a/AVvXsEghTlPwh907X_FcT-gvQC23ocAeMQlNM_F-KXjxxHGP9vXY4Vm3yQZbrGMpqnm3aIEmh8a-yqI1lqccPbayfV8wrCFSv_NDQDjRI_3Fuo2QLVjw11kl4jnMLnGpKAZPFysY_kIXBpVi7YedexDkmaPZ7N_SHUYzOe9vFbKoj_HCqzXTBSnobvgBHx2h2Q=w640-h316" width="640" /></a></div><br /><div style="text-align: justify;"><span style="caret-color: rgb(0, 0, 0); font-family: -webkit-standard;">Empresas tecnológicas de varias regiones han contratado a más de 100 graduados del Google Machine Learning Bootcamp como becarios, desarrolladores o investigadores en empresas como Amazon, MasterCard, Samsung y LG. Estamos encantados de ver a dónde van nuestros participantes a medida que avanzan en sus carreras y tienen un impacto en la solución de problemas del mundo real. Mientras tanto, seguiremos organizando Google Machine Learning Bootcamps en todo el mundo para formar a la próxima generación de desarrolladores de aprendizaje automático.</span></div><p></p>Google Developers LATAMhttp://www.blogger.com/profile/05105089662475084319noreply@blogger.com0tag:blogger.com,1999:blog-218264512262097577.post-24301827224594644802023-04-17T13:12:00.005-03:002023-05-16T15:38:45.305-03:00 Google For Startups Accelerator Latino Founders anuncia su primera cohorte de 2023<span id="docs-internal-guid-c0f95f6b-7fff-52f8-c778-6408454da63e"><br /><br /><ul style="margin-bottom: 0px; margin-top: 0px; padding-inline-start: 48px;"><li aria-level="1" dir="ltr" style="font-family: "Google Sans", sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;"><p dir="ltr" role="presentation" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;"><span style="font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">15 startups tecnológicas de EE.UU. y LATAM, con al menos un fundador latino, serán impulsadas por el impacto y listas para crecer con el apoyo de Google</span></p></li><li aria-level="1" dir="ltr" style="font-family: "Google Sans", sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;"><p dir="ltr" role="presentation" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;"><span style="font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">Miami es el nuevo punto de acumulación para startups tecnológicas y el programa acelerador de Google para founders latinos, también formará parte de este ecosistema</span></p></li></ul><br /><p dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-align: justify;"><span face=""Google Sans", sans-serif" style="font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-weight: 700; vertical-align: baseline; white-space: pre-wrap;">Miami, 17 de Abril, 2023.</span><span face=""Google Sans", sans-serif" style="font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;"> Google for Startups se complace en anunciar la cohorte más reciente de su programa Google for Startups Accelerator Latino Founders. El programa se llevará a cabo de forma virtual y se desarrollará del 17 de abril al 28 de junio, y buscará crear puentes entre las startups fundadas por latinos en EE.UU. y las startups tecnológicas latinoamericanas de habla hispana.</span></p><p dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-align: justify;"><span face=""Google Sans", sans-serif" style="font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;"><br /></span></p><p dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-align: justify;"><span face=""Google Sans", sans-serif" style="font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;"></span></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEiL45QWJij-B91O63nW4H6LhTF9bzxeoS3FjuQr8bZYbRr3WfnSa4jyZzcG0m-HlgRMahydBQfQEL43kU8hilfk7vfq-vyDzAi43i-DTi1svzgwfPN4SidyaNQxTnwhE-2LNjfgGvQ6VKA6680kkV0bexrj0s6QOV7GaKfUgxQrfm22p5sQOzv-1w6zlA" style="margin-left: 1em; margin-right: 1em;"><img data-original-height="1080" data-original-width="1860" height="372" src="https://blogger.googleusercontent.com/img/a/AVvXsEiL45QWJij-B91O63nW4H6LhTF9bzxeoS3FjuQr8bZYbRr3WfnSa4jyZzcG0m-HlgRMahydBQfQEL43kU8hilfk7vfq-vyDzAi43i-DTi1svzgwfPN4SidyaNQxTnwhE-2LNjfgGvQ6VKA6680kkV0bexrj0s6QOV7GaKfUgxQrfm22p5sQOzv-1w6zlA=w640-h372" width="640" /></a></div><br /><br /></span><p></p><br /><p dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-align: justify;"><span face=""Google Sans", sans-serif" style="font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">Las 15 startups seleccionadas trabajan en sectores como educación, </span><span face=""Google Sans", sans-serif" style="font-size: 11pt; font-style: italic; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">e-commerce</span><span face=""Google Sans", sans-serif" style="font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">, salud, y fintech. Ocho de ellas tienen mujeres o personas de la comunidad LGBT en sus equipos de liderazgo y tres de ellas tienen equipos tanto en Estados Unidos como en países de Latinoamérica.</span></p><br /><p dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-align: justify;"><span face=""Google Sans", sans-serif" style="font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">“Nos complace haber logrado crear un espacio de intercambio entre las comunidades de </span><span face=""Google Sans", sans-serif" style="font-size: 11pt; font-style: italic; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">founders</span><span face=""Google Sans", sans-serif" style="font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;"> de Latinoamérica y de Estados Unidos en habla hispana. Creemos que esto fortalecerá aún más la robusta comunidad de Google for Startups y les dará nuevas oportunidades a los emprendedores”, dijo Francisco Solsona, </span><span face=""Google Sans", sans-serif" style="font-size: 11pt; font-style: italic; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">Lead</span><span face=""Google Sans", sans-serif" style="font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;"> de Google For Startups Accelerator Latino Founders.</span></p><br /><p dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-align: justify;"><span face=""Google Sans", sans-serif" style="font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">El programa apoyará a startups con las mejores prácticas, productos y tecnologías de Google, además de nuestra amplia red de expertos y mentores de EE.UU. y América Latina; para ayudarles a construir grandes productos y ampliar su impacto en toda la región. Las compañías recibirán mentoría y apoyo de Google y expertos externos en UX (diseño y producto), ingeniería (AI/ML, Cloud, Android, Web), marketing y ventas, finanzas y liderazgo, entre otros.</span></p><br /><p dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-align: justify;"><span face=""Google Sans", sans-serif" style="font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">Las empresas fueron seleccionadas por tener un producto en funcionamiento, un modelo de negocio validado y tracción. Además, por la solidez y la capacidad tecnológica y de ejecución de sus equipos, así como un gran potencial para aprovechar nuevas tecnologías de inteligencia artificial generativa y aprendizaje automático. Las startups seleccionadas son las siguientes:</span></p><br /><ul style="margin-bottom: 0px; margin-top: 0px; padding-inline-start: 48px;"><li aria-level="1" dir="ltr" style="font-family: "Google Sans", sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;"><p dir="ltr" role="presentation" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;"><a href="https://www.amplifica.io/" style="text-decoration-line: none;"><span style="color: #1155cc; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space: pre-wrap;">Amplifica</span></a><span style="font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;"> (Chile) - Ofrece soluciones de envío de última milla a las tiendas en línea</span></p></li><li aria-level="1" dir="ltr" style="font-family: "Google Sans", sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;"><p dir="ltr" role="presentation" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;"><a href="https://botmaker.com/es/" style="text-decoration-line: none;"><span style="color: #1155cc; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space: pre-wrap;">Botmaker</span></a><span style="font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;"> (EE. UU / Argentina) - Facilita la creación de </span><span style="font-size: 11pt; font-style: italic; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">chatbots</span><span style="font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;"> para servicio al cliente.</span></p></li><li aria-level="1" dir="ltr" style="font-family: "Google Sans", sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;"><p dir="ltr" role="presentation" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;"><a href="https://www.cirkulaapp.com/" style="text-decoration-line: none;"><span style="color: #1155cc; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space: pre-wrap;">Cirkula</span></a><span style="font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;"> (Peru) - </span><span style="font-size: 11pt; font-style: italic; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">Ecommerce</span><span style="font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;"> que ayuda a los restaurantes a minimizar sus excedentes de comida y ayuda a los usuarios a conseguir mejores precios en alimentos.</span></p></li><li aria-level="1" dir="ltr" style="font-family: "Google Sans", sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;"><p dir="ltr" role="presentation" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;"><a href="https://ettos.co/" style="text-decoration-line: none;"><span style="color: #1155cc; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space: pre-wrap;">Ettos</span></a><span style="font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;"> (Colombia) - Marketplace especializado en el sector de belleza y estética.</span></p></li><li aria-level="1" dir="ltr" style="font-family: "Google Sans", sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;"><p dir="ltr" role="presentation" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;"><a href="https://sellercenter.instancelatam.com/hc/es-419" style="text-decoration-line: none;"><span style="color: #1155cc; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space: pre-wrap;">Instance</span></a><span style="font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;"> (Chile) - Ofrece tecnología para que las empresas puedan acelerar sus procesos de ecommerce.</span></p></li><li aria-level="1" dir="ltr" style="font-family: "Google Sans", sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;"><p dir="ltr" role="presentation" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;"><a href="https://leadsales.io/" style="text-decoration-line: none;"><span style="color: #1155cc; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space: pre-wrap;">Leadsales</span></a><span style="font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;"> (México) - CRM especializado en comunicaciones con clientes a través de WhatsApp</span></p></li><li aria-level="1" dir="ltr" style="font-family: "Google Sans", sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;"><p dir="ltr" role="presentation" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;"><a href="https://www.mend.com.mx/sobre-mend" style="text-decoration-line: none;"><span style="color: #1155cc; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space: pre-wrap;">Mend</span></a><span style="font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;"> (México) - Facilita el acceso y la financiación de seguros de salud privados.</span></p></li><li aria-level="1" dir="ltr" style="font-family: "Google Sans", sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;"><p dir="ltr" role="presentation" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;"><a href="https://www.noktos.com/" style="text-decoration-line: none;"><span style="color: #1155cc; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space: pre-wrap;">Noktos</span></a><span style="font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;"> (EE. UU) - Es una plataforma que simplifica la gestión de viajes corporativos.</span></p></li><li aria-level="1" dir="ltr" style="font-family: "Google Sans", sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;"><p dir="ltr" role="presentation" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;"><a href="https://www.perfekto.mx/" style="text-decoration-line: none;"><span style="color: #1155cc; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space: pre-wrap;">Perfekto</span></a><span style="font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;"> (México) - Marketplace de alimentos en perfecto estado, pero descartados por los supermercados por razones estéticas, a buen precio </span></p></li><li aria-level="1" dir="ltr" style="font-family: "Google Sans", sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;"><p dir="ltr" role="presentation" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;"><a href="http://www.protalento.com" style="text-decoration-line: none;"><span style="color: #1155cc; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space: pre-wrap;">PROtalento</span></a><span style="font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;"> (Colombia) - Ofrece experiencias de </span><span style="font-size: 11pt; font-style: italic; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">customer experience</span><span style="font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;"> para clientes internos y externos de las organizaciones</span></p></li><li aria-level="1" dir="ltr" style="font-family: "Google Sans", sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;"><p dir="ltr" role="presentation" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;"><a href="https://remoovit.com/" style="text-decoration-line: none;"><span style="color: #1155cc; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space: pre-wrap;">Remoov</span></a><span style="font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;"> (EE.UU.) - Se especializa en remover, reciclar o vender las cosas que sus usuarios ya no usan.</span></p></li><li aria-level="1" dir="ltr" style="font-family: "Google Sans", sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;"><p dir="ltr" role="presentation" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;"><a href="https://uali.co/" style="text-decoration-line: none;"><span style="color: #1155cc; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space: pre-wrap;">Uali</span></a><span style="font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;"> (Argentina) - Ofrece tecnologías de gestión de datos e inteligencia artificial a empresas del sector energético</span></p></li><li aria-level="1" dir="ltr" style="font-family: "Google Sans", sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;"><p dir="ltr" role="presentation" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;"><a href="https://www.weship.com/" style="text-decoration-line: none;"><span style="color: #1155cc; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space: pre-wrap;">WeShip</span></a><span style="font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;"> (México) - Ofrece una plataforma de envíos a tiendas en línea que se conecta con plataformas de comercio electrónico</span></p></li><li aria-level="1" dir="ltr" style="font-family: "Google Sans", sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;"><p dir="ltr" role="presentation" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;"><a href="https://www.woowup.com/" style="text-decoration-line: none;"><span style="color: #1155cc; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space: pre-wrap;">Woowup</span></a><span style="font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;"> (Argentina) . Simplifica la gestión de datos de los clientes a las compañías, para fortalecer procesos de marketing y segmentación.</span></p></li><li aria-level="1" dir="ltr" style="font-family: "Google Sans", sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;"><p dir="ltr" role="presentation" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;"><a href="https://wuru.site/" style="text-decoration-line: none;"><span style="color: #1155cc; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space: pre-wrap;">Wuru</span></a><span style="font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;"> (EE.UU. / Argentina) - Optimiza el acceso a datos en los servicios de salud para optimizar la toma de decisiones</span></p></li></ul><br /><p dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;"><span face=""Google Sans", sans-serif" style="font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">Al finalizar el programa, la cohorte seleccionada formará parte del prestigioso grupo internacional de ex alumnos de Google Accelerator, donde se unirán a otras empresas latinoamericanas y estadounidenses de escala global como Platzi, Transparent Business, Crack the Code, La Haus, Jüsto, ComparaOnline, Tienda Nube y Miroculus, entre otras.</span></p><p dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;"><span face=""Google Sans", sans-serif" style="font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;"><br /></span></p><p dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;"><span face=""Google Sans", sans-serif" style="font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;"><br /></span></p><p dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;"><span face=""Google Sans", sans-serif" style="font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;"></span></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEhQ7cQgDeitmreIfuK7DfuTbYZNddQGr35K81GWQN4mpN2CE99UFQL5iMbBgQywYK40_D12NFy1EtE0CmPAPJ1E-ZF3qTz08VQ9iPim-U4B49yfK4i2Y7XZ9bplhJERknCUeGbAqIsA9-ipPWPS8QcalgjjPUnfJXcJigpwRFLQVW8V2s9d9maYwt11fg" style="margin-left: 1em; margin-right: 1em;"><img data-original-height="800" data-original-width="1500" height="342" src="https://blogger.googleusercontent.com/img/a/AVvXsEhQ7cQgDeitmreIfuK7DfuTbYZNddQGr35K81GWQN4mpN2CE99UFQL5iMbBgQywYK40_D12NFy1EtE0CmPAPJ1E-ZF3qTz08VQ9iPim-U4B49yfK4i2Y7XZ9bplhJERknCUeGbAqIsA9-ipPWPS8QcalgjjPUnfJXcJigpwRFLQVW8V2s9d9maYwt11fg=w640-h342" width="640" /></a></div><br /><br /><p></p><br /><p dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;"><span face=""Google Sans", sans-serif" style="font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">***</span></p><p dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-align: justify;"><span face=""Google Sans", sans-serif" style="font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-weight: 700; vertical-align: baseline; white-space: pre-wrap;">Acerca de Google for Startups Accelerator LATAM</span></p><p dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-align: justify;"><span face=""Google Sans", sans-serif" style="font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">Google for Startups Accelerator es la evolución de más de seis años de experiencia del equipo de desarrolladores de Google trabajando con startups en más de 40 países a través de su programa Launchpad. Google for Startups Accelerator incluye programación de vanguardia sobre temas críticos, y el apoyo de diferentes expertos y mentores de Google, y nuestra red en la región, tales como fondos de inversión, aceleradoras y empresas.</span></p><br /><p dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-align: justify;"><span face=""Google Sans", sans-serif" style="font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">Google for Startups Accelerator América Latina se ejecuta en colaboración con aliados estratégicos en diferentes países, BBVA Open Innovation en México y Colombia, y Centraal México.</span></p><p dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;"><span face=""Google Sans", sans-serif" style="font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">Redes Sociales: </span></p><p dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;"><span face=""Google Sans", sans-serif" style="font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">Twitter: @GoogleDevsLATAM </span></p><p dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;"><span face=""Google Sans", sans-serif" style="font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">Youtube: https://www.youtube.com/@GoogleDevelopersLATAM/about</span></p><p dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;"><span face=""Google Sans", sans-serif" style="font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">Blog: https://developers-latam.googleblog.com/</span></p><p dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;"><span face=""Google Sans", sans-serif" style="font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">URL: https://startup.google.com/accelerator/latino-founders/</span></p><br />Google Developers LATAMhttp://www.blogger.com/profile/05105089662475084319noreply@blogger.com0tag:blogger.com,1999:blog-218264512262097577.post-39152586801455732012023-03-30T13:34:00.005-03:002023-03-30T13:34:38.364-03:00¡Hola, desarrolladores de juegos!<div class="_date_dz9rr_96 post-date launch"><br /></div><p>En el último tiempo hubo muchos avances y mejoras en el ámbito de los juegos. Los juegos fueron —y siguen siendo— una parte importante del ecosistema de apps que representa un mundo dinámico que promueve activamente la colaboración, la creatividad y la diversión tanto para los desarrolladores como para los jugadores. En Firebase hemos trabajado duro en la mejora de nuestras herramientas y recursos de desarrollo de juegos para ayudarte a crear juegos seguros y de alta calidad, a fin de que tus jugadores sigan estando contentos e involucrados.</p><p>En la <a href="https://gamedevsummit.withgoogle.com/">Cumbre de Desarrolladores Google for Games</a> de este año, anunciamos funciones nuevas para ayudarte a crear juegos más estables y seguros, y compartimos cómo fortalecemos nuestra asociación con Google Ads para permitirte utilizar el aprendizaje automático para perfeccionar tu estrategia de anuncios. Analicemos en detalle nuestros anuncios de este año.</p><ol class="_launchPointsList_1hker_1"><li>Reduce las trampas con Verificación de aplicaciones</li><li>Perfecciona la estabilidad de los juegos con las mejoras en Crashlytics</li><li>Mejor priorización para excepciones de Unity no detectadas</li><li>Asistencia de Crashlytics para la depuración de memoria y errores ANR nativos</li><li>Optimización de experiencias de anuncios e ingresos con datos</li></ol><p>¡Comencemos!</p><section class="_launchSection_kesip_1"><div class="_sectionLabel_2ropc_1">Protección de acceso no autorizado</div><h3 id="reduce-cheating-with-app-check"><span class="firebase-yellow">Reduce las trampas</span> con Verificación de aplicaciones</h3></section><p>Las trampas en los juegos multijugador, tanto en tiempo real como en los asíncronos, han sido un problema que persigue a los desarrolladores de juegos desde hace años. Las personas malintencionadas pueden arruinar tu experiencia de juego con cantidad de estrategias: hackeando los clientes de videojuego, directamente falsificando mensajes mediante la ingeniería inversa, o comprometiendo el hardware o el firmware. Cuando un jugador siente que otro está haciendo trampa, su diversión puede verse arruinada, lo que podría alejar a algunos de los jugadores más leales y afectar negativamente tus reseñas e ingresos. Para prevenir esto y atender todos estos temas, un desarrollador de juegos tendría que invertir en un sistema de distintas herramientas que cubran cada una de estas vulnerabilidades.</p><h4 id="using-attestations-with-app-check">Uso de atestaciones con Verificación de aplicaciones</h4><p><a href="https://firebase.google.com/products/app-check">¡Verificación de aplicaciones</a> dice lo contrario! <a href="https://firebase.google.com/products/app-check">Verificación de aplicaciones</a> ayuda a proteger recursos de backend de abusos previniendo accesos no autorizados de hackers y/o de clientes modificados. Trabaja con servicios de Firebase, servicios de Google Cloud y API personalizadas para mantener tus recursos a salvo. Verificación de aplicaciones ya está disponible en los SDK de Firebase para iOS y Android. Dentro de poco, a los desarrolladores de juegos les será más fácil integrar Verificación de aplicaciones a sus juegos a través de SDK de C++ y de Unity. Esto les permitirá protegerse contra tramposos y hackers al solicitar y utilizar <a href="https://firebase.google.com/docs/app-check">atestaciones</a>. Las atestaciones funcionan como pruebas de la autenticidad de las apps y de los dispositivos, por lo que interceptan de forma automática los mensajes de red con atestaciones sospechosas o ausentes antes siquiera de alcanzar las reglas de seguridad de Firebase o, peor aún, los recursos de backend. Además, puedes <a href="https://firebase.google.com/docs/app-check/custom-resource-backend">personalizar tu uso de Verificación de aplicaciones</a> seleccionando un proveedor de atestación, y configurando parámetros para establecer cómo tus backends abordan los distintos estados/veredictos de atestación.</p><iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="" frameborder="0" height="364" src="https://www.youtube.com/embed/K1XU2y0YVtU" title="YouTube video player" width="100%"></iframe><p><a href="https://www.youtube.com/watch?v=K1XU2y0YVtU">Mira</a> cómo Verificación de aplicaciones previene que el hackeo de clientes, la manipulación de dispositivos y la falsificación de tráfico interfieran con los servicios de backend como bases de datos y funciones de la nube.</p><p>Para más información consulta los <a href="https://firebase.google.com/docs/app-check">documentos de Verificación de aplicaciones</a>.</p><section class="_launchSection_kesip_1"><div class="_sectionLabel_2ropc_1">Mejores pilas de llamadas nativas</div><h3 id="improve-game-stability-with-crashlytics-enhancements">Perfecciona <span class="firebase-yellow">la estabilidad de los juegos</span> con mejoras en Crashlytics</h3></section><p>Mantener la estabilidad de los juegos es importante para asegurar no solo el compromiso de tus jugadores, sino también la visibilidad de tu juego en puntos de venta como <a href="https://developer.android.com/topic/performance/vitals">Google Play</a>. Sin embargo, la escala del desarrollo de juegos moderna y el marco económico de las aplicaciones hace que recolectar datos de fallas en varios dispositivos, identificar las más persistentes, reproducirlas y probarlas de forma manual consuma muchísimo tiempo.</p><p><a href="https://firebase.google.com/products/crashlytics">Crashlytics</a> es una herramienta de informe de fallas en tiempo real que te ayuda a priorizar y reparar los errores y las fallas más persistentes en base al impacto en usuarios reales. Mejor aún, puedes usar Crashlytics para comprender exactamente dónde se origina el error en tu código fuente y con cuál funcionalidad <a href="https://firebase.google.com/docs/crashlytics/customize-crash-reports?platform=unity">—como registro y claves personalizadas—</a>, cómo llegó allí y en qué estado estaba tu juego.</p><p>Este año, el soporte de Crashlytics para juegos, aplicaciones nativas y Unity en particular se volverá cada vez mejor. El equipo ha trabajado mucho para mejorar la forma en la que Crashlytics reúne, recopila y muestra eventos, incluidas fallas, errores ANR y más.</p><h4 id="more-readable-callstacks-for-native-unity-games">Pilas de llamadas más legibles para juegos nativos de Unity</h4><p>En lo que respecta a Unity, hemos hecho que la depuración de juegos compilados a binarios nativos con IL2CPP sea mucho más fácil. Ahora, en lugar de mostrar los nombres intermedios generados por C++, Crashlytics tomará la mayoría de las pilas de llamadas nativas y mostrará el código fuente en el C# equivalente, lo que eliminará la necesidad de “traducir” de tu parte y te permitirá reparar el problema directamente en tu código.</p><iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="" frameborder="0" height="364" src="https://www.youtube.com/embed/AUZBmvBWsRg" title="YouTube video player" width="100%"></iframe><p><em>Obtén más información sobre las <a href="https://youtu.be/AUZBmvBWsRg?t=758">mejoras a los seguimientos de pilas de Unity en Crashlytics</a> y sobre cómo puedes usarlos para estabilizar y mejorar la experiencia del usuario.</em></p><section class="_launchSection_kesip_1"><div class="_sectionLabel_2ropc_1">Errores fatales on demand</div><h3 id="better-prioritization-for-uncaught-unity-exceptions"><span class="firebase-yellow">Mejor priorización</span> para excepciones de Unity no detectadas</h3></section><p>En Unity, cuando un juego tenía una excepción no detectada y tus secuencias de comandos ya no se ejecutaban pero el juego no finalizaba, nunca se contabilizaba como falla. Cada vez que esto ocurre y tu juego falla sigilosamente, tus usuarios sufren una mala experiencia que los hace perder tiempo y recursos.</p><h4 id="crashlytics-on-demand-fatals-support-in-unity">Asistencia en errores fatales on demand de Crashlytics en Unity</h4><p>Ahora la SDK de Crashlytics para Unity ofrece <a href="https://firebase.google.com/docs/crashlytics/customize-crash-reports?platform=unity#report-uncaught-exceptions">Errores fatales on demand</a>, una manera de habilitar tu app para contabilizar excepciones no detectadas como fallas, independientemente de que hayan hecho fallar el programa en su totalidad o solo la lógica del juego. Esto te permite usar métricas de usuarios que experimentan fallas para ayudarte a identificar, contar, priorizar y resolver mejor los errores entrantes.</p><p>Aprende <a href="https://firebase.google.com/docs/crashlytics/get-started?platform=unity">a activar el seguimiento de errores fatales on demand de Unity</a> en la consola de Crashlytics y a usarlo para lograr una mayor comprensión y mejorar los funcionamientos de tu juego.</p><section class="_launchSection_kesip_1"><div class="_sectionLabel_2ropc_1">Compatibilidad con GWP-ASan</div><h3 id="crashlytics-support-for-native-anrs-and-memory-debugging">Asistencia de Crashlytics para la depuración de memoria y <span class="firebase-yellow">errores ANR nativos</span></h3></section><p>Más allá de Unity, Crashlytics ha agregado una mejor asistencia para depurar código nativo (incluidas apps IL2CPP compiladas en Unity), y errores ANR nativos (es decir, la aplicación no responde). Crashlytics lo hace simbolizando marcos nativos usando los archivos de símbolos subidos, lo que te brinda información valiosa, como qué archivos y números de líneas en tus marcos de aplicación corresponden al error/problema. Esto te permite determinar el problema con mayor rapidez, lo que implica menos conjeturas y más resolución de fallas.</p><h4 id="gwp-asan-support">Compatibilidad con GWP-ASan</h4><p>Otra de las causas de pérdida de tiempo y dificultad para detectar problemas son los errores nativos de memoria como desbordamientos del búfer y errores de uso después de liberación. Ahora Crashlytics es compatible con GWP-ASan, un limpiador de direcciones de Android que ayuda a detectar problemas de memoria en la etapa de producción. Cuando GWP-ASan esté habilitado en juegos, los desarrolladores verán la causa raíz de los daños en la memoria y pilas adicionales que indican detalles de asignaciones y desasignaciones relevantes para ayudar a depurar y resolver el problema. Obtén más información sobre cómo habilitar GWP-ASan en la <a href="https://developer.android.com/ndk/guides/gwp-asan#opt-in">Guía de GWP-ASan</a>.</p><section class="_launchSection_kesip_1"><div class="_sectionLabel_2ropc_1">Implementación de formatos nuevos de anuncios en forma progresiva</div><h3 id="optimizing-ad-experiences-and-revenue-with-data"><span class="firebase-yellow">Optimización</span> de experiencias de anuncios e ingresos con datos</h3></section><p>Por último, Firebase ofrece una amplia variedad de productos que pueden mejorar la estrategia de anuncios de tu app, entre los que se incluyen <a href="https://firebase.google.com/products/analytics">Google Analytics para Firebase</a>, <a href="https://firebase.google.com/products/remote-config">Firebase Remote Config</a> y <a href="https://firebase.google.com/products/ab-testing">Firebase A/B Testing</a>. Con tanta información y herramientas disponibles, puede llevar tiempo encontrar la mejor manera de crear, personalizar y probar una estrategia de monetización de una aplicación. Firebase lo facilita al combinar las capacidades de Google Analytics para Firebase y Firebase Remote Config para ayudarte a establecer la frecuencia de anuncios ideal para jugadores individuales a fin de aumentar los ingresos sin dañar las retenciones. Además, Firebase A/B Testing te brinda la capacidad de implementar formatos de anuncios nuevos a porcentajes cada vez mayores de tu base de jugadores, a fin de que puedas asegurar que los usuarios interactúan con los formatos de anuncios correctos.</p><iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="" frameborder="0" height="364" src="https://www.youtube.com/embed/nOPlbtJX43o" title="YouTube video player" width="100%"></iframe><p><a href="https://www.youtube.com/watch?v=nOPlbtJX43o&list=PLOU2XLYxmsIJu5QftXLRJWyR-l5jLRllL&index=17">Obtén más información</a> <em>cómo reunir todo y usar Firebase para comprender, probar y personalizar mejor las experiencias de anuncios.</em></p><h3 id="whats-next">Qué sigue</h3><p>Estas son solo algunas de las maneras en que hacemos que Firebase funcione mejor con los productos de Google para ayudarte en el ciclo de vida del desarrollo de juegos. Mientras miramos hacia el futuro, continuaremos ayudando a que tus juegos sean de lo mejor para tus usuarios y tu empresa.</p><p>Para saber más sobre cómo impulsar tus juegos con Firebase, visita nuestra <a href="https://firebase.google.com/games">página de juegos</a> y ¡suscríbete a nuestro <a href="https://www.youtube.com/channel/UCP4bf6IHJJQehibu6ai__cg">canal de YouTube</a> y síguenos en <a href="https://twitter.com/Firebase">Twitter</a> para recibir más novedades!</p>Google Developers LATAMhttp://www.blogger.com/profile/05105089662475084319noreply@blogger.com0tag:blogger.com,1999:blog-218264512262097577.post-24627005480586843862023-03-20T13:54:00.003-03:002023-03-20T13:54:45.523-03:00API de PaLM y MakerSuite: una manera accesible de comenzar a generar prototipos y compilar aplicaciones de IA generativa<p style="color: #202124; font-family: Roboto, sans-serif; font-size: 16px;"><em>Publicado por Scott Huffman, vicepresidente de Ingeniería, y Josh Woodward, director principal de Administración de productos</em></p><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiGh2voutdeA7Ro1Wir8V6_RsNATq8KRWrYjVqYWHpLx3K9b_ir1xvzSl1L07amRow7nxPKeKH8FOmpwVgUsNpiJsqgP2tzoFQk1vYlhTsoypaVEH6gYVH7hBFNTSk_BWCO1oXzytS_uRa-WffJIrAmo6kI1oI05tvXOH5PnJKauTB1FAGLw70ev_pM/s1600/banner%20artwork%202B.png" style="color: #4184f3; font-family: Roboto, sans-serif; font-size: 16px; text-decoration-line: none;"><img border="0" data-original-height="800" data-original-width="1058" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiGh2voutdeA7Ro1Wir8V6_RsNATq8KRWrYjVqYWHpLx3K9b_ir1xvzSl1L07amRow7nxPKeKH8FOmpwVgUsNpiJsqgP2tzoFQk1vYlhTsoypaVEH6gYVH7hBFNTSk_BWCO1oXzytS_uRa-WffJIrAmo6kI1oI05tvXOH5PnJKauTB1FAGLw70ev_pM/s1600/banner%20artwork%202B.png" style="border: 0px; height: auto; max-width: 100%;" /></a><span style="color: #202124; font-family: Roboto, sans-serif; font-size: 16px;"></span><a name="more" style="color: #4184f3; font-family: Roboto, sans-serif; font-size: 16px;"></a><p style="color: #202124; font-family: Roboto, sans-serif; font-size: 16px;"></p><p style="color: #202124; font-family: Roboto, sans-serif; font-size: 16px;">Estamos ante una nueva ola de aplicaciones de IA generativa que están transformando la forma en que las personas interactúan con la tecnología, desde juegos y agentes de diálogo hasta intercambios creativos de ideas y herramientas de codificación. En Google, queremos que la IA siga siendo accesible. Para ello, alentamos a todos los desarrolladores a que creen la próxima generación de aplicaciones con IA generativa, por eso les brindamos API y herramientas fáciles de usar.</p><p style="color: #202124; font-family: Roboto, sans-serif; font-size: 16px;">Hoy más temprano <a href="https://blog.google/technology/ai/ai-developers-google-cloud-workspace/" style="color: #4184f3; text-decoration-line: none;" target="_blank">presentamos la API de PaLM</a>, una nueva oferta para desarrolladores que permite experimentar con modelos de lenguaje grandes de Google de forma más fácil y segura. Junto con la API, lanzamos MakerSuite, una herramienta que permite a los desarrolladores comenzar a generar prototipos de forma rápida y sencilla. Estas herramientas estarán disponibles para algunos desarrolladores a través de una versión preliminar privada, de modo que deberás estar atento a nuestra lista de espera.</p><div style="color: #202124; font-family: Roboto, sans-serif; font-size: 16px;"><br /></div><div align="left" dir="ltr" style="color: #202124; font-family: Roboto, sans-serif; font-size: 16px; margin-left: 0pt;"><table style="border-collapse: collapse; border: none;"><tbody><tr style="height: 0pt;"><td style="border-color: rgb(255, 255, 255); border-style: solid; border-width: 1pt; overflow-wrap: break-word; overflow: hidden; padding: 5pt; vertical-align: top;"><p dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt; text-align: right;"><span style="font-family: Arial; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-weight: 700; vertical-align: baseline; white-space: pre-wrap;"><span style="border: none; display: inline-block; height: 43px; overflow: hidden; width: 43px;"><img height="43" src="https://lh4.googleusercontent.com/6STNNCVYcCk7dGYt-ANl6pOQYn4oQCcfVG5TS3WHQ_krALciN6VXYc2RkB44S_e7BAZio7q7u_F_d9tSxa5o_Tl9UwvCDtjhbt9hyYas1v4unBhJdebVDhRMIqeVc-lpzKpNd3sc-gb8b6B8xfNtWEN2J9g7qICc9Em8YBniJG8zirpyML8XqdMMxRJ_CiU" style="border: 0px; height: auto; max-width: 100%;" width="43" /></span></span></p></td><td style="border-color: rgb(255, 255, 255); border-style: solid; border-width: 1pt; overflow-wrap: break-word; overflow: hidden; padding: 5pt; vertical-align: top;"><strong><h3 style="font-family: "Google Sans Display", sans-serif; font-size: 24px; line-height: 32px;">Accede a los modelos de lenguaje grandes de Google mediante la API de PaLM</h3></strong>La API de PaLM es un punto de entrada simple para modelos de lenguaje grandes de Google, que pueden usarse para una variedad de aplicaciones. Brindará a los desarrolladores acceso a modelos que son optimizados para diferentes casos de uso, como generación de contenido y chat, y modelos con fines generales que son optimizados para casos de uso como generación de resúmenes, clasificación y más. Desde hoy, ofreceremos un modelo eficaz en términos de tamaño y capacidades, y pronto agregaremos otros modelos y tamaños.<br /><div><br /></div></td></tr><tr style="height: 0pt;"><td style="border-color: rgb(255, 255, 255); border-style: solid; border-width: 1pt; overflow-wrap: break-word; overflow: hidden; padding: 5pt; vertical-align: top;"><p dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt; text-align: right;"><span style="font-family: Arial; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-weight: 700; vertical-align: baseline; white-space: pre-wrap;"><span style="border: none; display: inline-block; height: 43px; overflow: hidden; width: 43px;"><img height="43" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnJ_ztzDqipzwJfkFvNp6ZZAy1NZdTtmZB-kPbzgbdWvi6oRlQVp11Ukdb2XpXrxcrv9oGYfn6rC-17Rp2NjDQQVLNRf1oC2zSpFeRhRqp3-h4l91qYGhhDJELbO01c-9xGZs9sCX0RTAf7h7DEv6rSN-1Vzo8J-zGjRQhf5pEi2QrSdUdVy6bcJtY/s1600/1_Start%20building%20quickly.png" style="border: 0px; height: auto; max-width: 100%;" width="43" /></span></span></p></td><td style="border-color: rgb(255, 255, 255); border-style: solid; border-width: 1pt; overflow-wrap: break-word; overflow: hidden; padding: 5pt; vertical-align: top;"><strong><h3 style="font-family: "Google Sans Display", sans-serif; font-size: 24px; line-height: 32px;">Comienza a compilar rápido</h3></strong>Pasamos los últimos años creando e implementando modelos de lenguaje grandes, desde llevar <a href="https://blog.google/products/search/introducing-mum/" style="color: #4184f3; text-decoration-line: none;" target="_blank">MUM a Búsqueda</a> hasta explorar aplicaciones con LaMDA en <a href="https://blog.google/technology/ai/join-us-in-the-ai-test-kitchen/" style="color: #4184f3; text-decoration-line: none;" target="_blank">AI Test Kitchen</a>. Aprendimos muchísimo sobre flujos de trabajo de desarrollo de IA generativa y cómo pueden fragmentarse. Los desarrolladores tienen que usar distintas herramientas para realizar tareas como diseñar e iterar una solicitud, generar datos sintéticos o ajustar un modelo personalizado.<br /><br />Por eso lanzamos MakerSuite, una herramienta que simplifica este flujo de trabajo. Con MakerSuite, podrás iterar solicitudes, ampliar tu conjunto de datos con datos sintéticos y ajustar fácilmente modelos personalizados. Cuando tengas todo listo para pasar al código, MakerSuite te permitirá exportar tu solicitud como código en tus lenguajes y marcos de trabajo favoritos, como Python y Node.js.<br /><div><br /></div></td></tr><tr style="height: 0pt;"><td style="border-color: rgb(255, 255, 255); border-style: solid; border-width: 1pt; overflow-wrap: break-word; overflow: hidden; padding: 5pt; vertical-align: top;"><p dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt; text-align: right;"><span style="font-family: Arial; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-weight: 700; vertical-align: baseline; white-space: pre-wrap;"><span style="border: none; display: inline-block; height: 43px; overflow: hidden; width: 43px;"><img height="43" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiKTZhXyZOtZQUssYGG_ZLrTqJbCH57Ge4UiPHDFCHD16dSDrGiKrwYXjlY5hsbJUn2q1J1eMdq6LC7Ncp81uHrQpmdCc5FqrFYQJwV_WnJQEN5R2agP8l29xqDfILNY5iUu_j5luyTXZPbjR-5HOep8WTuhIp4G42EnC96FVP0eAOvTNiMJkUcNqKh/s1600/2_Tune%20a%20model%20on%20your%20own%20data.png" style="border: 0px; height: auto; max-width: 100%;" width="86" /></span></span></p></td><td style="border-color: rgb(255, 255, 255); border-style: solid; border-width: 1pt; overflow-wrap: break-word; overflow: hidden; padding: 5pt; vertical-align: top;"><h3 style="font-family: "Google Sans Display", sans-serif; font-size: 24px; line-height: 32px;">Ajusta un modelo</h3>Los modelos generativos ofrecen a los desarrolladores una funcionalidad poderosa lista para usar. Pero para tareas especializadas, el ajuste permite lograr mejores resultados. Nuestra herramienta permitirá a los desarrolladores aprovechar <a href="http://proceedings.mlr.press/v97/houlsby19a/houlsby19a.pdf" style="color: #4184f3; text-decoration-line: none;" target="_blank">técnicas de ajuste eficaces según los parámetros</a> para crear modelos personalizados para sus casos de uso. Y con MakerSuite, podrás probar e iterar rápidamente en tu modelo ajustado justo en el navegador.<br /><div><br /></div></td></tr><tr style="height: 0pt;"><td style="border-color: rgb(255, 255, 255); border-style: solid; border-width: 1pt; overflow-wrap: break-word; overflow: hidden; padding: 5pt; vertical-align: top;"><p dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt; text-align: right;"><span style="font-family: Arial; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-weight: 700; vertical-align: baseline; white-space: pre-wrap;"><span style="border: none; display: inline-block; height: 43px; overflow: hidden; width: 43px;"><img height="43" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj93FXzSNmGOnCU8Mo5qOWTGw37XlCALTAsmOV_DOPzIeaaHPTQoehfa6C8b-Ud55yZ3uCCYo2ueWSKpVOrYPFmWhLH7_mPHX8ik-zfcXnOKV6EzOw3VumCF-JPR6JS1RRF0PE4fOPHKmyBskggXyX8vqzgSO49bKHgXk38j20po-gPhwtkGImtahPe/s192/3_Augment%20your%20dataset.png" style="border: 0px; height: auto; max-width: 100%;" width="43" /></span></span></p></td><td style="border-color: rgb(255, 255, 255); border-style: solid; border-width: 1pt; overflow-wrap: break-word; overflow: hidden; padding: 5pt; vertical-align: top;"><h3 style="font-family: "Google Sans Display", sans-serif; font-size: 24px; line-height: 32px;">Amplía tu conjunto de datos con datos sintéticos</h3>Es fundamental contar con datos de alta calidad al desarrollar con IA, algo que suele limitar a los desarrolladores. Nuestra herramienta te permitirá generar datos adicionales basados en unos pocos ejemplos, que luego podrás administrar y manipular. Estos datos sintéticos pueden usarse en varios escenarios, como ajustes o evaluaciones.<br /><div><br /></div></td></tr><tr style="height: 0pt;"><td style="border-color: rgb(255, 255, 255); border-style: solid; border-width: 1pt; overflow-wrap: break-word; overflow: hidden; padding: 5pt; vertical-align: top;"><p dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt; text-align: right;"><span style="font-family: Arial; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-weight: 700; vertical-align: baseline; white-space: pre-wrap;"><span style="border: none; display: inline-block; height: 43px; overflow: hidden; width: 43px;"><img height="43" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg8c-XxEYrOi-aB1L6IrPV8gt4gCgRY6ye-Dc3ipxVoQwFe6GCzOjU3nY7EgMBupJBhnvFQW990yP63hmK03QcWz3TNU_fBJU79fSj_KNBiqr0Xn3lpzA2qOpsQr0LXQM4iW9QjD91jcDa9itoTObm71nJRrh64Dpn-B1psyGAkuD_hL82axE7vze2W/s192/4_Generate%20state%20of%20the%20art%20embeddings.png" style="border: 0px; height: auto; max-width: 100%;" width="43" /></span></span></p></td><td style="border-color: rgb(255, 255, 255); border-style: solid; border-width: 1pt; overflow-wrap: break-word; overflow: hidden; padding: 5pt; vertical-align: top;"><h3 style="font-family: "Google Sans Display", sans-serif; font-size: 24px; line-height: 32px;">Genera incorporaciones de última generación</h3>Nos emociona ver la variedad de aplicaciones que los desarrolladores encontraron para incorporar, desde búsquedas semánticas hasta recomendaciones y clasificaciones. Con las incorporaciones generadas a través de la API de PaLM, los desarrolladores podrán crear aplicaciones con sus propios datos o a partir de fuentes de datos externas. Las incorporaciones también pueden usarse en aplicaciones posteriores compiladas con TensorFlow, Keras, JAX y otras bibliotecas de código abierto.<br /><div><br /></div></td></tr><tr style="height: 0pt;"><td style="border-color: rgb(255, 255, 255); border-style: solid; border-width: 1pt; overflow-wrap: break-word; overflow: hidden; padding: 5pt; vertical-align: top;"><p dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt; text-align: right;"><span style="font-family: Arial; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-weight: 700; vertical-align: baseline; white-space: pre-wrap;"><span style="border: none; display: inline-block; height: 43px; overflow: hidden; width: 43px;"><img height="43" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiPJrqCnRKwh5WEHxWjR9LphiXXMOCdHnqWMPwm2o1fWsnpG0rFcSj6YXdVeGuauFOOd7tLURGaHNqCVlCJOxMR5k90sYgrZpjxr4XsdjFiquUJ0MqdRmut-EgQu2kfJ_WvFHjSsurPWcExnRFoMT6rTZyNPO0if-PNFx4YFedH6LdiaXU7Wx_uZ6qp/s192/5_Build%20responsibly%20and%20safely.png" style="border: 0px; height: auto; max-width: 100%;" width="86" /></span></span></p></td><td style="border-color: rgb(255, 255, 255); border-style: solid; border-width: 1pt; overflow-wrap: break-word; overflow: hidden; padding: 5pt; vertical-align: top;"><h3 style="font-family: "Google Sans Display", sans-serif; font-size: 24px; line-height: 32px;">Crea de forma segura y responsable</h3>Creamos nuestros modelos siguiendo los <a href="https://ai.google/principles/" style="color: #4184f3; text-decoration-line: none;" target="_blank">Principios de IA</a> de Google para brindar a los desarrolladores una base de IA responsable desde donde pueden comenzar. Sabemos que el control es necesario para que los desarrolladores puedan definir y aplicar la responsabilidad y la seguridad en el contexto de sus propias aplicaciones. Nuestras herramientas brindarán a los desarrolladores una forma fácil de probar y ajustar las dimensiones de seguridad que mejor se ajusten a cada aplicación y caso de uso únicos.<br /><div><br /></div></td></tr><tr style="height: 0pt;"><td style="border-color: rgb(255, 255, 255); border-style: solid; border-width: 1pt; overflow-wrap: break-word; overflow: hidden; padding: 5pt; vertical-align: top;"><p dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt; text-align: right;"><span style="font-family: Arial; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-weight: 700; vertical-align: baseline; white-space: pre-wrap;"><span style="border: none; display: inline-block; height: 43px; overflow: hidden; width: 43px;"><img height="43" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiBDRd4dcJyO1U0kElVfGnxLxCYHpg1uNJrJyIjw1mVte5ONdPABQlQtXG1HWGcngWv0-8oAI6LYCn3CwJVEPQvXPTDVf4LYkSat_6iHPfnt_-tpXNXezqS4pVjmXpY-4_L0myWVVEZA0DFw5bXmJpnApi1N2Z81GVx5OhkIIdXki79oBLyXMOIXEvO/s192/6_Scale%20your%20generative%20AI%20application.png" style="border: 0px; height: auto; max-width: 100%;" width="43" /></span></span></p></td><td style="border-color: rgb(255, 255, 255); border-style: solid; border-width: 1pt; overflow-wrap: break-word; overflow: hidden; padding: 5pt; vertical-align: top;"><h3 style="font-family: "Google Sans Display", sans-serif; font-size: 24px; line-height: 32px;">Escala tu aplicación de IA generativa</h3>Estas herramientas para desarrolladores facilitan la generación de prototipos y la creación de aplicaciones de IA generativa, pero cuando debas escalar, queremos que tengas la seguridad de que tendrás el soporte que necesitas. La infraestructura de Google es compatible con la API de PaLM y MakerSuite, así que no debes preocuparte por el hosting ni el procesamiento. Los desarrolladores que deseen escalar sus ideas y obtener soporte, seguridad y cumplimiento de nivel empresarial, y un Acuerdo de nivel de servicio (ANS), pueden ingresar a <a href="https://cloud.google.com/blog/products/ai-machine-learning/generative-ai-for-businesses-and-governments" style="color: #4184f3; text-decoration-line: none;" target="_blank">Google Cloud Vertex IA</a> y acceder a los mismos modelos, junto con un host de capacidades avanzadas, como búsqueda de empresa e IA conversacional.</td></tr></tbody></table></div><p style="color: #202124; font-family: Roboto, sans-serif; font-size: 16px;"><span id="docs-internal-guid-6443c9ef-7fff-f805-f76b-f9ef7d4f0f7b"></span></p><p style="color: #202124; font-family: Roboto, sans-serif; font-size: 16px;">Son tiempos emocionantes para los desarrolladores de IA y queremos asegurarnos de seguir creando herramientas de IA que simplifiquen el proceso de desarrollo. Planeamos incorporar nuevos desarrolladores, implementar nuevas funcionalidades y hacer que pronto esta tecnología esté disponible para una comunidad de desarrolladores más amplia. Mientras tanto, escuchamos tus comentarios, aprendemos y mejoramos estas herramientas para cumplir con las necesidades de los desarrolladores.</p><p style="color: #202124; font-family: Roboto, sans-serif; font-size: 16px;">Para estar al tanto de nuestro progreso, <a href="https://developers.google.com/newsletter" style="color: #4184f3; text-decoration-line: none;" target="_blank">suscríbete al boletín informativo de Google Developers</a>.</p>Google Developers LATAMhttp://www.blogger.com/profile/05105089662475084319noreply@blogger.com0tag:blogger.com,1999:blog-218264512262097577.post-48126923764889563952023-01-19T18:17:00.001-03:002023-01-19T18:17:57.130-03:00Google for Startups Accelerator Latino Founders abre sus puertas a su primera cohorte del 2023 en Miami<span id="docs-internal-guid-ecc5268d-7fff-f16f-d8c1-de3abe83ced1"><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi5sRzbdSvRxoHFVNI4GVcieUQ1X9ABEzhAHUK6r5oKijjikeK4WsOjfnbyL7Sj79ACd6CqNDlF_jPvGKqiC4YqpD877AeyQqrzEbUaWMZiDd0XQn5TwvtP53NUOiDvpO-o2YyVfEwyXYrb-G0rAm46JQfHq9B1CK2aWM93ozbOV_Afld7x01pD5_1APw/s1860/LF-GFSA3%20(1).png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1080" data-original-width="1860" height="372" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi5sRzbdSvRxoHFVNI4GVcieUQ1X9ABEzhAHUK6r5oKijjikeK4WsOjfnbyL7Sj79ACd6CqNDlF_jPvGKqiC4YqpD877AeyQqrzEbUaWMZiDd0XQn5TwvtP53NUOiDvpO-o2YyVfEwyXYrb-G0rAm46JQfHq9B1CK2aWM93ozbOV_Afld7x01pD5_1APw/w640-h372/LF-GFSA3%20(1).png" width="640" /></a></div><ul style="margin-bottom: 0; margin-top: 0; padding-inline-start: 48px;"><li aria-level="1" dir="ltr" style="font-family: Arial; font-size: 12pt; font-variant-east-asian: normal; font-variant-numeric: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;"><p dir="ltr" role="presentation" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 12pt; text-align: center;"><span style="font-size: 12pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">El Google For Startups Accelerator Latino es el nuevo nombre que recibe el programa de aceleración de Google para la región</span></p></li><li aria-level="1" dir="ltr" style="font-family: Arial; font-size: 12pt; font-variant-east-asian: normal; font-variant-numeric: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;"><p dir="ltr" role="presentation" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-align: center;"><span style="font-size: 12pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">El programa se centrará en </span><span style="font-size: 12pt; font-style: italic; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">startups</span><span style="font-size: 12pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;"> de EE.UU. y Latinoamérica que estén en etapas entre </span><span style="font-size: 12pt; font-style: italic; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">seed</span><span style="font-size: 12pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;"> y </span><span style="font-size: 12pt; font-style: italic; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">series-A </span><span style="font-size: 12pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">y tengan al menos un fundador latino, que busquen tener impacto y estén listas para crecer con el apoyo de Google.</span></p></li><li aria-level="1" dir="ltr" style="font-family: Arial; font-size: 12pt; font-variant-east-asian: normal; font-variant-numeric: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;"><p dir="ltr" role="presentation" style="line-height: 1.38; margin-bottom: 20pt; margin-top: 0pt; text-align: center;"><span style="font-size: 12pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">Miami se ha convertido en un punto estratégico para las </span><span style="font-size: 12pt; font-style: italic; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">startups</span><span style="font-size: 12pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;"> estadounidenses y latinoamericanas, y el programa de Google For Startups Accelerator se integrará a este dinámico ecosistema.</span></p></li></ul><p dir="ltr" style="line-height: 1.38; margin-bottom: 8pt; margin-top: 0pt; text-align: justify;"><span style="font-family: Arial; font-size: 12pt; font-variant-east-asian: normal; font-variant-numeric: normal; font-weight: 700; vertical-align: baseline; white-space: pre-wrap;">Miami, TKTKTK. </span><span style="font-family: Arial; font-size: 12pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">Google for Startups se complace en anunciar que ya están abiertas las</span><a href="https://docs.google.com/forms/d/e/1FAIpQLSdxfgddqLYkLid9pLigDy3nJMUn3_CsAvI8CvHT9c" style="text-decoration-line: none;"><span style="color: black; font-family: Arial; font-size: 12pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;"> </span><span style="color: #1155cc; font-family: Arial; font-size: 12pt; font-variant-east-asian: normal; font-variant-numeric: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space: pre-wrap;">solicitudes para el</span></a><a href="https://docs.google.com/forms/d/e/1FAIpQLSdxfgddqLYkLid9pLigDy3nJMUn3_CsAvI8CvHT9c4XVMGwow/viewform" style="text-decoration-line: none;"><span style="color: #1155cc; font-family: Arial; font-size: 12pt; font-variant-east-asian: normal; font-variant-numeric: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space: pre-wrap;"> programa Google for Startups Accelerator Latino Founders</span></a><span style="font-family: Arial; font-size: 12pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">, y que las </span><span style="font-family: Arial; font-size: 12pt; font-style: italic; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">startups</span><span style="font-family: Arial; font-size: 12pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;"> interesadas podrán postular hasta el 12 de marzo. El programa será realizado en Miami y tendrá un nuevo enfoque en startups fundadas por latinos en Estados Unidos, además de las startups tecnológicas latinoamericanas de países de habla hispana.</span></p><p dir="ltr" style="line-height: 1.38; margin-bottom: 8pt; margin-top: 0pt; text-align: justify;"><span style="font-family: Arial; font-size: 12pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">El programa apoya a </span><span style="font-family: Arial; font-size: 12pt; font-style: italic; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">startups</span><span style="font-family: Arial; font-size: 12pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;"> prometedoras para ayudarles a construir grandes productos y servicios que contribuyan a ampliar su impacto en toda la región. Les ofrece asesoría en buenas prácticas, retroalimentación y conocimientos de los productos de Google; y contacto con nuestra amplia red de expertos y mentores de EE.UU. y América Latina. Esta edición del Accelerator se celebrará del </span><span style="font-family: Arial; font-size: 12pt; font-variant-east-asian: normal; font-variant-numeric: normal; font-weight: 700; vertical-align: baseline; white-space: pre-wrap;">17 de abril al 16 de junio</span><span style="font-family: Arial; font-size: 12pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">.</span></p><p dir="ltr" style="line-height: 1.38; margin-bottom: 8pt; margin-top: 0pt; text-align: justify;"><span style="font-family: Arial; font-size: 12pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">Durante el programa, hasta 20 startups seleccionadas recibirán tutoría gratuita, y apoyo de Google y expertos externos en temas como UX (Diseño y Producto), ingeniería (AI/ML, Cloud, Android, Web), marketing y ventas, finanzas y liderazgo, entre otros.</span></p><p dir="ltr" style="line-height: 1.38; margin-bottom: 8pt; margin-top: 0pt; text-align: justify;"><span style="font-family: Arial; font-size: 12pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">"Miami se ha convertido en un lugar clave para las startups tecnológicas que le apuntan tanto al mercado estadounidense como al latinoamericano, por lo que crear un programa de alto nivel para apoyarlas era un paso natural en la evolución de nuestra aceleradora en la región", afirma Francisco Solsona, Lead de Google For Startups Accelerator Latino Founders.</span></p><p dir="ltr" style="line-height: 1.38; margin-bottom: 8pt; margin-top: 0pt; text-align: justify;"><span style="font-family: Arial; font-size: 12pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">Estos son los requisitos que buscamos en las </span><span style="font-family: Arial; font-size: 12pt; font-style: italic; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">startups</span><span style="font-family: Arial; font-size: 12pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;"> que deseen presentarse a Google for Startups Accelerator</span></p><ul style="margin-bottom: 0; margin-top: 0; padding-inline-start: 48px;"><li aria-level="1" dir="ltr" style="font-family: Arial; font-size: 12pt; font-variant-east-asian: normal; font-variant-numeric: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;"><p dir="ltr" role="presentation" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 12pt; text-align: justify;"><span style="font-size: 12pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">Tener un producto en funcionamiento, un modelo de negocio validado y tracción. </span></p></li><li aria-level="1" dir="ltr" style="font-family: Arial; font-size: 12pt; font-variant-east-asian: normal; font-variant-numeric: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;"><p dir="ltr" role="presentation" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-align: justify;"><span style="font-size: 12pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">Preferiblemente, estar en pleno crecimiento, y estar en etapas entre </span><span style="font-size: 12pt; font-style: italic; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">seed</span><span style="font-size: 12pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;"> y </span><span style="font-size: 12pt; font-style: italic; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">series-</span><span style="font-size: 12pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">A.</span></p></li><li aria-level="1" dir="ltr" style="font-family: Arial; font-size: 12pt; font-variant-east-asian: normal; font-variant-numeric: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;"><p dir="ltr" role="presentation" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-align: justify;"><span style="font-size: 12pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">Tener al menos dos cofundadores y un equipo sólido de ingeniería o producto que trabajen tiempo completo en la compañía. Al menos uno de los fundadores tiene que ser estadounidense de origen latino, o venir de un país hispanohablante de Latinoamérica.</span></p></li><li aria-level="1" dir="ltr" style="font-family: Arial; font-size: 12pt; font-variant-east-asian: normal; font-variant-numeric: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;"><p dir="ltr" role="presentation" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-align: justify;"><span style="font-size: 12pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">La mayoría de las actividades se desarrollarán en inglés, por lo que todos los participantes deberán dominar este idioma. Durante el programa, al menos un cofundador o cofundadora, o un ejecutivo o ejecutiva </span><span style="font-size: 12pt; font-style: italic; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">C-level</span><span style="font-size: 12pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">, deberá participar activamente en la mayoría de las actividades.</span></p></li><li aria-level="1" dir="ltr" style="font-family: Arial; font-size: 12pt; font-variant-east-asian: normal; font-variant-numeric: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;"><p dir="ltr" role="presentation" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-align: justify;"><span style="font-size: 12pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">Debe tener tecnología o propiedad intelectual que utilice o pueda aprovechar el </span><span style="font-size: 12pt; font-style: italic; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">aprendizaje automático</span><span style="font-size: 12pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;"> y la inteligencia artificial (ML/AI por sus siglas en inglés).</span></p></li><li aria-level="1" dir="ltr" style="font-family: Arial; font-size: 12pt; font-variant-east-asian: normal; font-variant-numeric: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;"><p dir="ltr" role="presentation" style="line-height: 1.38; margin-bottom: 20pt; margin-top: 0pt; text-align: justify;"><span style="font-size: 12pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">Debe contar con un equipo incluyente y diverso, y debe aspirar a que sus productos o servicios tengan un impacto positivo en su país o en la región.</span></p></li></ul><p dir="ltr" style="line-height: 1.38; margin-bottom: 8pt; margin-top: 0pt; text-align: justify;"><span style="font-family: Arial; font-size: 12pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">Las </span><span style="font-family: Arial; font-size: 12pt; font-style: italic; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">startups</span><span style="font-family: Arial; font-size: 12pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;"> interesadas pueden presentar su candidatura</span><a href="https://docs.google.com/forms/d/e/1FAIpQLSdxfgddqLYkLid9pLigDy3nJMUn3_CsAvI8CvHT9c4XVMGwow/viewform" style="text-decoration-line: none;"><span style="color: black; font-family: Arial; font-size: 12pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;"> </span><span style="color: #1155cc; font-family: Arial; font-size: 12pt; font-variant-east-asian: normal; font-variant-numeric: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space: pre-wrap;">en este enlace</span></a><span style="font-family: Arial; font-size: 12pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">.</span></p><p dir="ltr" style="line-height: 1.38; margin-bottom: 8pt; margin-top: 0pt; text-align: justify;"><span style="font-family: Arial; font-size: 12pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">Al finalizar el programa, la cohorte seleccionada formará parte del prestigioso grupo internacional de </span><span style="font-family: Arial; font-size: 12pt; font-style: italic; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">alumni</span><span style="font-family: Arial; font-size: 12pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;"> de Google Accelerator, junto a empresas latinoamericanas y estadounidenses de escala global como Platzi, Transparent Business, Crack the Code, La Haus, Jüsto, ComparaOnline, Tienda Nube y Miroculus, entre otras.</span></p><p dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-align: center;"><span style="color: #434343; font-family: Arial; font-size: 12pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">***</span></p><p dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-align: justify;"><span style="color: #434343; font-family: Arial; font-size: 12pt; font-variant-east-asian: normal; font-variant-numeric: normal; font-weight: 700; vertical-align: baseline; white-space: pre-wrap;">Acerca de Google for Startups Accelerator LATAM</span></p><p dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-align: justify;"><span style="color: #434343; font-family: Arial; font-size: 12pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">Google for Startups Accelerator es producto de la experiencia de más de seis años del equipo de Google Developers trabajando con </span><span style="color: #434343; font-family: Arial; font-size: 12pt; font-style: italic; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">startups</span><span style="color: #434343; font-family: Arial; font-size: 12pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;"> en más de 40 países a través de su</span><a href="https://www.youtube.com/watch?v=9WyQpqx7r5w&list=PLuC7OUdarKuZGVDcjKZJtAf07rM3b7oew" style="text-decoration-line: none;"><span style="color: #434343; font-family: Arial; font-size: 12pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;"> </span><span style="color: #1155cc; font-family: Arial; font-size: 12pt; font-variant-east-asian: normal; font-variant-numeric: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space: pre-wrap;">programa Launchpad</span></a><span style="color: #434343; font-family: Arial; font-size: 12pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">. Google for Startups Accelerator incluye contenidos de vanguardia sobre temas críticos, y el apoyo de diferentes expertos y mentores de Google y de nuestra red en la región, como fondos de inversión, aceleradoras y empresas.</span></p><br /><p dir="ltr" style="line-height: 1.38; margin-bottom: 8pt; margin-top: 0pt; text-align: justify;"><span style="color: #434343; font-family: Arial; font-size: 12pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">Google for Startups Accelerator América Latina se ejecuta en asociación con aliados estratégicos en diferentes países, BBVA Open Innovation en México y Colombia, y Centraal en México.</span></p><p dir="ltr" style="line-height: 1.38; margin-bottom: 8pt; margin-top: 0pt; text-align: justify;"><span style="color: #434343; font-family: Arial; font-size: 12pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">Redes sociales: </span></p><p dir="ltr" style="line-height: 1.38; margin-bottom: 8pt; margin-top: 0pt; text-align: justify;"><span style="color: #434343; font-family: Arial; font-size: 12pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">Twitter: <a href="https://twitter.com/GoogleDevsLATAM" target="_blank">@GoogleDevsLATAM </a></span></p><p dir="ltr" style="line-height: 1.38; margin-bottom: 8pt; margin-top: 0pt; text-align: justify;"><span style="color: #434343; font-family: Arial; font-size: 12pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">Youtube:</span><a href="https://www.youtube.com/@GoogleDevelopersLATAM/about" style="text-decoration-line: none;"><span style="color: #434343; font-family: Arial; font-size: 12pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;"> </span><span style="color: #1155cc; font-family: Arial; font-size: 12pt; font-variant-east-asian: normal; font-variant-numeric: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space: pre-wrap;">https://www.youtube.com/@GoogleDevelopersLATAM/about</span></a></p><p dir="ltr" style="line-height: 1.38; margin-bottom: 8pt; margin-top: 0pt; text-align: justify;"><span style="color: #434343; font-family: Arial; font-size: 12pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">Blog:</span><a href="https://developers-latam.googleblog.com/" style="text-decoration-line: none;"><span style="color: #434343; font-family: Arial; font-size: 12pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;"> </span><span style="color: #1155cc; font-family: Arial; font-size: 12pt; font-variant-east-asian: normal; font-variant-numeric: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space: pre-wrap;">https://developers-latam.googleblog.com/</span></a></p><p dir="ltr" style="line-height: 1.38; margin-bottom: 8pt; margin-top: 0pt; text-align: justify;"><span style="color: #434343; font-family: Arial; font-size: 12pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">URL:</span><a href="https://startup.google.com/accelerator/latino-founders/" style="text-decoration-line: none;"><span style="color: #434343; font-family: Arial; font-size: 12pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;"> </span><span style="color: #1155cc; font-family: Arial; font-size: 12pt; font-variant-east-asian: normal; font-variant-numeric: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space: pre-wrap;">https://startup.google.com/accelerator/latino-founders/</span></a></p><br /></span>Google Developers LATAMhttp://www.blogger.com/profile/05105089662475084319noreply@blogger.com0tag:blogger.com,1999:blog-218264512262097577.post-198479584570393392022-12-20T15:59:00.010-03:002022-12-20T16:23:07.187-03:00Cómo mejorar el doblaje en videos mediante el aprendizaje profundo<p class="p1" style="font-family: Roboto; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: normal; margin: 0px; text-align: justify;"><br /></p><p class="p3" style="font-family: Arial; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: normal; margin: 0px; text-align: justify;"><i>Entrada publicada por Paul McCartney, ingeniero de software, Vivek Kwatra, científico investigador, Yu Zhang, científico investigador, Brian Colonna, ingeniero de software, y Mor Miller, ingeniero de software.</i></p><p class="p3" style="font-family: Arial; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: normal; margin: 0px; text-align: justify;"><i><br /><br /></i></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj7jIkxOc_7OwRlAOzHVu4UPV8UVRqRZ2kjkkbilR0612R05FZ-V4YBKQwnv3_OrAzERGdCTlD3WiZJkSmbL5Z9N8hBLyQjRRTZkMIKII0WgF8BjvyGPerpCbZPvPZLd8RAsUpjKWfnP32DO6Syy93chnQyOIelH9sDL8CsrBknka_H31uz-Sg6ZRf0Zg/s1600/GoogleDev-UT-02.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="477" data-original-width="1600" height="191" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj7jIkxOc_7OwRlAOzHVu4UPV8UVRqRZ2kjkkbilR0612R05FZ-V4YBKQwnv3_OrAzERGdCTlD3WiZJkSmbL5Z9N8hBLyQjRRTZkMIKII0WgF8BjvyGPerpCbZPvPZLd8RAsUpjKWfnP32DO6Syy93chnQyOIelH9sDL8CsrBknka_H31uz-Sg6ZRf0Zg/w640-h191/GoogleDev-UT-02.png" width="640" /></a></div><p></p><p class="p4" style="font-family: Arial; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: normal; margin: 0px; min-height: 12px; text-align: justify;"><br /></p><p class="p1" style="font-family: Roboto; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: normal; margin: 0px; text-align: justify;">Son cada vez más las personas que consideran a los videos la mejor manera de mantenerse informadas, explorar sus intereses y entretenerse. Sin embargo, el idioma que se habla en los videos suele impedir la comprensión.<span class="Apple-converted-space"> </span>Por ejemplo, un alto porcentaje de los videos de YouTube están en inglés, pero <a href="https://en.wikipedia.org/wiki/List_of_languages_by_total_number_of_speakers"><span class="s2" style="background-color: white; color: #103cc0; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: normal;">menos que el 20% de la población mundial habla </span><span class="s3" style="color: #103cc0;">inglés</span></a> como su primera o segunda lengua.<span class="Apple-converted-space"> </span>El doblaje, método por el que se traduce y se reemplaza el diálogo original del video, <a href="https://www.hollywoodreporter.com/tv/tv-news/netflix-s-global-reach-sparks-dubbing-revolution-public-demands-it-1229761/"><span class="s3" style="color: #103cc0;">se usa con cada vez más frecuencia</span></a> para trasladar el video a otros idiomas.<span class="Apple-converted-space"> </span>De esta manera, se eliminan eficazmente las barreras lingüísticas y se ofrece una mejor opción de accesibilidad en cuanto a nivel de educación y visión, en comparación con los subtítulos.</p><p class="p5" style="font-family: Roboto; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: normal; margin: 0px; min-height: 15px; text-align: justify;"><br /></p><p class="p1" style="font-family: Roboto; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: normal; margin: 0px; text-align: justify;">En la entrada de hoy, compartimos los resultados de nuestra investigación a fin de mejorar la calidad del doblaje mediante el aprendizaje profundo y proporcionar una experiencia de visualización más cercana a la de un video producido directamente para el idioma de destino.<span class="Apple-converted-space"> </span>En especial, describimos nuestro trabajo con tecnologías de transferencia de voz entre idiomas y reanimación labial, que mantiene la voz similar a la del hablante original y ajusta los movimientos de los labios de este en el video de modo que coincidan mejor con el audio generado en el idioma de destino.<span class="Apple-converted-space"> </span>Estas funcionalidades se desarrollaron con Tensor, <span class="s4" style="background-color: white;">que proporciona una plataforma escalable para el aprendizaje automático multimodal</span>.<span class="Apple-converted-space"> </span>Compartimos <span class="s5" style="background-color: white; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: normal;">videos producidos con nuestro </span><span class="s6" style="font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: normal;">prototipo de investigación</span><span class="s5" style="background-color: white; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: normal;"> y demostramos que distraen menos y que —esperamos— serán más disfrutables para los espectadores.</span></p><p class="p6" style="font-family: Arial; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: normal; margin: 0px 0px 8px; min-height: 12px; text-align: justify;"><br /></p><p class="p7" style="color: #4d5055; font-family: "Google Sans"; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: normal; margin: 0px; text-align: justify;"><b>Transferencia de voz entre idiomas</b></p><p class="p1" style="font-family: Roboto; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: normal; margin: 0px; text-align: justify;">El casting de voces es el proceso de selección de voces que representen de forma adecuada a cada persona que aparece en pantalla. Mantener la suspensión de la incredulidad del público con voces creíbles es importante en la producción de un doblaje de calidad para que el video sea atractivo, en lugar de distractivo. Para lograrlo, utilizamos una transferencia de voz entre idiomas en la que creamos voces sintéticas en el idioma de destino que suenan similares a las de las personas que hablan en el video original. Por ejemplo, en el siguiente video se utilizó una voz doblada en inglés que se creó a partir de la voz del hablante de español del original.</p><p class="p1" style="font-family: Roboto; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: normal; margin: 0px; text-align: justify;"><br /></p><div class="separator" style="clear: both; text-align: center;"><div class="separator" style="clear: both; text-align: center;"><iframe allowfullscreen="" class="BLOG_video_class" height="327" src="https://www.youtube.com/embed/49EGKa0No4M" width="490" youtube-src-id="49EGKa0No4M"></iframe> </div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: center;"><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="BLOG_video_class" height="309" src="https://www.youtube.com/embed/13nOIubaXaw" width="487" youtube-src-id="13nOIubaXaw"></iframe></div></div><div style="text-align: justify;"><br /></div><div style="text-align: justify;"><br /></div><p class="p8" style="color: #878787; font-family: Arial; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: normal; margin: 0px; min-height: 12px; text-align: justify;"><br /><i></i></p><p class="p3" style="font-family: Arial; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: normal; margin: 0px; text-align: justify;">Inspirados por el aprendizaje en pocas tomas, primero preentrenamos un modelo TTS multilingüe basado en nuestro <a href="https://arxiv.org/abs/1907.04448"><span class="s3" style="color: #103cc0;">enfoque de transferencia de voz entre idiomas</span></a>. En este enfoque, utilizamos un modelo de secuencia a secuencia basado en la atención para generar una serie de fotogramas de espectrograma Log-Mel a partir de una secuencia de texto de entrada multilingüe con un codificador residual de tipo autocodificador variacional. Luego, ajustamos los parámetros del modelo. Para ello, volvemos a programar el decodificador y los módulos de atención con una relación de mezcla fija de los datos de adaptación y los datos multilingües originales, como se muestra en la Figura 1.</p><p class="p12" style="font-family: Arial; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: normal; margin: 0px; min-height: 12px; text-align: justify;"></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEgIvN2MA8o2aWZ66EHEmTY2AhNCaz4OZKjlzfqwWpoVy0YEwJQqnZ0LSshpVBMAPy-12pJ1er_3Nouiay1iF0xjg3WwnWvJQZ3SXgMmGt43AU1sVDue7biksxX5ye64MxvQFlD7etypYCQAPlqgImNuC-ZH2_aSwnkcz0fqnEYIMzRQBYJT13kWDf-0oA" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="430" data-original-width="910" height="151" src="https://blogger.googleusercontent.com/img/a/AVvXsEgIvN2MA8o2aWZ66EHEmTY2AhNCaz4OZKjlzfqwWpoVy0YEwJQqnZ0LSshpVBMAPy-12pJ1er_3Nouiay1iF0xjg3WwnWvJQZ3SXgMmGt43AU1sVDue7biksxX5ye64MxvQFlD7etypYCQAPlqgImNuC-ZH2_aSwnkcz0fqnEYIMzRQBYJT13kWDf-0oA" width="320" /></a></div><p></p><p class="p13" style="font-family: Roboto; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: normal; margin: 0px; min-height: 15px; text-align: justify;"><span class="Apple-converted-space"> </span></p><p class="p14" style="font-family: Arial; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: normal; margin: 0px; text-align: center;"><span style="font-size: x-small;">Figura 1: Arquitectura de transferencia de voz</span></p><p class="p8" style="color: #878787; font-family: Arial; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: normal; margin: 0px; min-height: 12px; text-align: justify;"><i></i><br /></p><p class="p15" style="font-family: Roboto; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: normal; margin: 0px 0px 8px; text-align: justify;">Ten en cuenta que la transferencia de voz y la reanimación labial solo se realizan si el propietario del contenido y los actores dan su consentimiento.</p><p class="p7" style="color: #4d5055; font-family: "Google Sans"; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: normal; margin: 0px; text-align: justify;"><b>Reanimación labial</b></p><p class="p3" style="font-family: Arial; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: normal; margin: 0px; text-align: justify;">En los videos doblados de manera convencional, se escuchan las voces traducidas/dobladas, mientras que se ven a los actores originales hablar en el idioma de origen. Por lo general, los movimientos de los labios que se ven en el video no coinciden con el doblaje que se escucha, de modo que la combinación de audio y video parece poco natural. Esto puede distraer y hacer que a los espectadores no les atraiga el contenido. De hecho, a veces incluso de manera intencional, las personas <a href="https://jostrans.org/issue33/art_romero.pdf"><span class="s3" style="color: #103cc0;">no miran las bocas de las personas que hablan en los videos doblados</span></a> para evitar ver esta discrepancia.</p><p class="p4" style="font-family: Arial; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: normal; margin: 0px; min-height: 12px; text-align: justify;"><br /></p><p class="p3" style="font-family: Arial; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: normal; margin: 0px; text-align: justify;">A fin de atraer al público, los productores de videos doblados de mayor calidad se esfuerzan más a la hora de adaptar cuidadosamente el diálogo y la voz de modo que coincidan parcialmente con el movimiento de labios de las personas que aparecen en los videos.<span class="Apple-converted-space"> </span>Sin embargo, esta técnica consume mucho tiempo y es muy costosa, por lo que es prohibitiva para muchos productores de contenido.<span class="Apple-converted-space"> </span>Además, requiere cambios que pueden afectar levemente el rendimiento de las voces y la precisión de la traducción.</p><p class="p4" style="font-family: Arial; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: normal; margin: 0px; min-height: 12px; text-align: justify;"><br /></p><p class="p3" style="font-family: Arial; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: normal; margin: 0px; text-align: justify;">Para obtener el beneficio de una correcta sincronización labial, pero sin estos problemas, desarrollamos una arquitectura de reanimación labial a fin de corregir el video de modo que coincida con las voces dobladas. Es decir, ajustamos los movimientos labiales de las personas que hablan en el video para que se alineen con el diálogo doblado. De esta manera, parece que el video hubiera sido filmado con personas que hablan en el idioma del diálogo traducido o doblado.<span class="Apple-converted-space"> </span>Este enfoque se puede aplicar cuando lo permiten el propietario del contenido y los actores.</p><p class="p4" style="font-family: Arial; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: normal; margin: 0px; min-height: 12px; text-align: justify;"><br /></p><p class="p3" style="font-family: Arial; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: normal; margin: 0px; text-align: justify;">Por ejemplo, el siguiente es un clip de video que se dobló con el método convencional (sin reanimación labial):<span class="Apple-converted-space"> </span></p><p class="p4" style="font-family: Arial; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: normal; margin: 0px; min-height: 12px; text-align: justify;"><br /></p><div style="text-align: justify;"><br /></div><div class="separator" style="clear: both; text-align: center;"><iframe allowfullscreen="" class="BLOG_video_class" height="401" src="https://www.youtube.com/embed/OuIWLEe-9xI" width="482" youtube-src-id="OuIWLEe-9xI"></iframe></div><p class="p4" style="font-family: Arial; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: normal; margin: 0px; min-height: 12px; text-align: justify;"><br /></p><p class="p4" style="font-family: Arial; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: normal; margin: 0px; min-height: 12px; text-align: justify;"><br /></p><p class="p3" style="font-family: Arial; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: normal; margin: 0px; text-align: justify;">Como se puede observar, la boca de la persona que habla no parece moverse de forma natural con relación a la voz. El video que aparece a continuación es el mismo, pero con reanimación labial, de modo que los movimientos labiales se ven más naturales con respecto al idioma del doblaje.</p><p class="p5" style="font-family: Roboto; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: normal; margin: 0px; min-height: 15px; text-align: justify;"><br /></p><div class="separator" style="clear: both; text-align: center;"><iframe allowfullscreen="" class="BLOG_video_class" height="405" src="https://www.youtube.com/embed/axVgDju48XM" width="487" youtube-src-id="axVgDju48XM"></iframe></div><div style="text-align: justify;"><br /></div><div style="text-align: justify;"><br /></div><p class="p8" style="color: #878787; font-family: Arial; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: normal; margin: 0px; min-height: 12px; text-align: justify;"><br /></p><p class="p3" style="font-family: Arial; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: normal; margin: 0px; text-align: justify;">Para la reanimación labial, entrenamos un modelo multietapa personalizado que aprende a asignar el audio a las formas de los labios y el aspecto facial de la persona que habla, como se muestra en la Figura 2. Usamos videos originales de las personas que hablan para aislar y representar las caras en un espacio normalizado que desacopla la geometría en 3D, la postura de la cabeza, la textura y la iluminación, como se describe <a href="https://arxiv.org/abs/2106.04185"><span class="s3" style="color: #103cc0;">en este informe</span></a>. Este enfoque nos permite concentrarnos, en nuestra primera etapa, en sintetizar la geometría en 3D y la textura de la sincronización labial compatibles con el audio doblado, sin tener que preocuparnos por la postura ni la iluminación. En la segunda etapa, se utiliza un enfoque basado en RGA condicional para fusionar estas texturas sintetizadas con el video original a fin de generar caras con posturas e iluminación coherentes. Esta etapa se entrena de manera adversa usando discriminadores múltiples para conservar simultáneamente la calidad visual, la fluidez temporal y la consistencia de la sincronización labial. Finalmente, acotamos el resultado usando una red de superresolución personalizada para generar un video con reanimación labial fotorrealista. También puedes ver <a href="https://www.youtube.com/playlist?list=PLuC7OUdarKuYEJmFRBuVarMHxWCzl2NIJ"><span class="s8" style="color: blue;">aquí</span></a> los videos comparativos que se muestran arriba.</p><p class="p4" style="font-family: Arial; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: normal; margin: 0px; min-height: 12px; text-align: justify;"><br /></p><p class="p5" style="font-family: Roboto; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: normal; margin: 0px; min-height: 15px; text-align: justify;"><span class="Apple-converted-space"> </span></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEi8D1kZ_Hm6qUC1vhTtS60uLTfAKJFg4PcdcokRXfwCAaB83xmhV4cbFo5sjXaVXRUFpIIH6JyOEKttmEZ6_M8ZZbq2hghyzxkj79vhoBUsg5JCbE3tZ_Ghi5h5j-8Ct_5_ZKFB5mDtHMd0LvbsqM7TUeJWy3LP5ezduPUa7jAg-PmbXXDqMKB_K3xuLA" style="margin-left: 1em; margin-right: 1em;"><span style="font-size: x-small;"><img alt="" data-original-height="479" data-original-width="1274" height="163" src="https://blogger.googleusercontent.com/img/a/AVvXsEi8D1kZ_Hm6qUC1vhTtS60uLTfAKJFg4PcdcokRXfwCAaB83xmhV4cbFo5sjXaVXRUFpIIH6JyOEKttmEZ6_M8ZZbq2hghyzxkj79vhoBUsg5JCbE3tZ_Ghi5h5j-8Ct_5_ZKFB5mDtHMd0LvbsqM7TUeJWy3LP5ezduPUa7jAg-PmbXXDqMKB_K3xuLA=w434-h163" width="434" /></span></a></div><div style="text-align: center;"><span style="font-size: x-small;"><br /></span></div><p></p><p class="p14" style="font-family: Arial; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: normal; margin: 0px; text-align: center;"><span style="font-size: x-small;">Figura 2: Flujo de procesamiento de reanimación labial: bloques de inferencia en azul, bloques de entrenamiento en rojo.<span class="Apple-converted-space"> </span></span></p><p class="p5" style="font-family: Roboto; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: normal; margin: 0px; min-height: 15px; text-align: justify;"><span class="s9" style="text-decoration-line: line-through;"></span></p><p class="p5" style="font-family: Roboto; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: normal; margin: 0px; min-height: 15px; text-align: justify;"><br /></p><p class="p7" style="color: #4d5055; font-family: "Google Sans"; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: normal; margin: 0px; text-align: justify;"><b>Alineación con nuestros principios de IA</b></p><p class="p1" style="font-family: Roboto; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: normal; margin: 0px; text-align: justify;"><span class="s10" style="font-family: Arial; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: normal;">Las técnicas que aquí se describen entran en la categoría más amplia de generación de contenido multimedia sintético, que atrajo un análisis minucioso debido a su potencial de abuso.<span class="Apple-converted-space"> </span></span>La manipulación fotorrealista de videos podría utilizarse incorrectamente para producir información falsa o engañosa que puede generar daños en la sociedad en general, por lo que los investigadores deberían ser conscientes de estos riesgos.<span class="Apple-converted-space"> </span>No obstante, nuestro caso de uso de doblaje de video destaca los beneficios sociales potenciales de estas tecnologías.<span class="Apple-converted-space"> </span>Nuestra nueva investigación en el campo del doblaje podría brindar una mayor accesibilidad a las lecciones educativas, los blogs de video, los discursos públicos y otros formatos ante un público global.<span class="Apple-converted-space"> </span>Además, esta tecnología solo se aplica si los propietarios y actores del contenido otorgaron su consentimiento.</p><p class="p18" style="background-color: white; color: #1a1a1a; font-family: Arial; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: normal; margin: 0px; min-height: 12px; text-align: justify;"><br /></p><p class="p3" style="font-family: Arial; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: normal; margin: 0px; text-align: justify;"><span class="s11" style="background-color: white; color: #1a1a1a;">Durante nuestra investigación, seguimos nuestros <a href="https://ai.google/principles"><span class="s12" style="background-color: transparent; color: #103cc0;">principios de IA</span></a></span> a fin de desarrollar e implementar esta tecnología de manera responsable. Primero, trabajamos con los creadores para garantizar que todo el contenido doblado se produzca con su consentimiento y que todo contenido multimedia generado se identifique como tal. En segundo lugar, estamos desarrollando herramientas <span class="s13" style="font-family: Roboto; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: normal;">y técnicas para atribuir la propiedad de contenido original y modificado usando técnicas de indicación de procedencia y marca de agua digital. </span>Finalmente, nuestro objetivo central es la fidelidad al video en su idioma de origen. Las técnicas aquí analizadas solo sirven a ese propósito, es decir, el de amplificar el beneficio social potencial que se ofrece al usuario, al tiempo que se pretende conservar la naturaleza original, el estilo y la intención de los creadores del contenido. <span class="s13" style="font-family: Roboto; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: normal;">Continuamos determinando la mejor manera de conservar e implementar los estándares de privacidad y medidas de protección de datos antes de la implementación general de nuestra investigación.</span></p><p class="p4" style="font-family: Arial; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: normal; margin: 0px; min-height: 12px; text-align: justify;"><br /></p><p class="p6" style="font-family: Arial; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: normal; margin: 0px 0px 8px; min-height: 12px; text-align: justify;"><br /></p><p class="p7" style="color: #4d5055; font-family: "Google Sans"; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: normal; margin: 0px; text-align: justify;"><b>La oportunidad que se viene</b></p><p class="p1" style="font-family: Roboto; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: normal; margin: 0px; text-align: justify;">Creemos firmemente que el doblaje es un proceso creativo.<span class="Apple-converted-space"> </span>Con estas técnicas, nos esforzamos por hacer que una oferta más amplia de contenidos esté disponible y se pueda disfrutar en una serie de otros idiomas.</p><p class="p5" style="font-family: Roboto; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: normal; margin: 0px; min-height: 15px; text-align: justify;"><br /></p><p class="p1" style="font-family: Roboto; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: normal; margin: 0px; text-align: justify;">Esperamos que nuestra investigación inspire el desarrollo de nuevas herramientas que democraticen el contenido de una manera responsable. Para demostrar su potencial, hoy lanzamos contenido doblado de dos series educativas, <a href="https://www.youtube.com/playlist?list=PLuC7OUdarKuZtTUW7u7S-_pg7HTlFRxxm"><span class="s3" style="color: #103cc0;">AI for Anyone</span></a> y <a href="https://www.youtube.com/playlist?list=PLuC7OUdarKubUBYOITF1v2PTom_MOo2fU"><span class="s3" style="color: #103cc0;">Machine Learning Foundations</span></a> con Tensorflow en el canal Google Developers LATAM.</p><p class="p5" style="font-family: Roboto; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: normal; margin: 0px; min-height: 15px; text-align: justify;"><br /></p><p class="p1" style="font-family: Roboto; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: normal; margin: 0px; text-align: justify;">Hemos trabajado activamente para ampliar nuestro alcance a más idiomas y a hablantes de más regiones y países. Ya detallamos este trabajo, junto con un análisis más amplio, en nuestros informes de investigaciones sobre <a href="https://arxiv.org/abs/1907.04448"><span class="s14" style="color: #103cc0; font-family: Arial; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: normal;">transferencia de voz</span></a><span class="s10" style="font-family: Arial; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: normal;"> y <a href="https://arxiv.org/abs/2106.04185"><span class="s3" style="color: #103cc0;">reanimación labial</span></a>.</span></p><div class="separator" style="clear: both; text-align: justify;"><br /></div><div style="text-align: justify;"><br /></div>Google Developers LATAMhttp://www.blogger.com/profile/05105089662475084319noreply@blogger.com0tag:blogger.com,1999:blog-218264512262097577.post-10639787872144343462022-12-02T16:22:00.004-03:002022-12-02T16:22:57.659-03:00Novedades de la Firebase Summit 2022<div class="_headline_1o14o_71" style="caret-color: rgb(0, 0, 0); font-family: -webkit-standard; text-size-adjust: auto;"><h2><br /></h2><div class="_bylinelist_1o14o_228"><div aria-hidden="true" class="_byline_1oopl_1"><img alt="Kara Yu" class="_img_1oopl_18" height="41" src="https://firebasestorage.googleapis.com/v0/b/first-class-blog.appspot.com/o/authors%2Fkara_yu_466x466.webp?alt=media" style="max-width: 100%;" width="41" /><div class="_bylineMeta_1oopl_51"><div class="_name_1oopl_25">Kara Yu</div><div class="_role_1oopl_30">Gerente de producto</div></div></div></div></div><article class="content imageCaptions" style="caret-color: rgb(0, 0, 0); font-family: -webkit-standard; text-size-adjust: auto;"><div class="_date_1ahq3_96 post-date">18 de octubre de 2022</div><p>Pasaron tres años desde que estuvimos en persona en la Firebase Summit y nos da mucha alegría organizar la primera Firebase Summit híbrida, que se llevará a cabo en Nueva York y en línea. Echamos de menos conectarnos con nuestra comunidad de desarrolladores y aprender sobre las apps extraordinarias que han estado compilando.</p><p>En Firebase, creemos que las apps mejoran la forma en las que las personas viven, trabajan y aprenden. En los últimos meses, conocimos historias inspiradoras de desarrolladores que promueven cambios positivos en sus comunidades. Por ejemplo, los casos de<span class="Apple-converted-space"> </span><a href="https://firebase.blog/posts/2022/07/firebase-stories-moia">MOIA</a>, una empresa de transporte que trabaja para mejorar la movilidad urbana;<span class="Apple-converted-space"> </span><a href="https://firebase.blog/posts/2022/07/firebase-stories-faves">FAVES</a>, una app para simplificar la compra de ropa para pequeños negocios; y<span class="Apple-converted-space"> </span><a href="https://firebase.blog/posts/2022/09/firebase-stories-classkick">Classkick</a>, una plataforma de aprendizaje que reduce las barreras en la educación. Son apenas algunos ejemplos de los millones de apps de startups y grandes empresas que usan Firebase de forma activa cada mes.</p><p>Es por esto que nos comprometemos a brindarte soluciones flexibles e integradas para que puedas seguir compilando las apps que los usuarios adoran. En la Firebase Summit de este año, compartiremos novedades sobre cómo seguimos integrando Firebase a los productos de los desarrolladores más populares de Google y cómo hacemos que nuestra plataforma funcione mejor con un ecosistema abierto de herramientas, de modo que puedas acelerar el desarrollo de apps y publicarlas con confianza. ¡Continúa leyendo para conocer más detalles sobre las novedades y no te olvides de consultar todo el gran contenido (que incluye sesiones técnicas, demostraciones, vías de aprendizaje y mucho más) de la cumbre en el<span class="Apple-converted-space"> </span><a href="https://firebase.google.com/summit">sitio web del evento</a>!</p><h3 id="accelerate-app-development">Acelera el desarrollo de apps</h3><p>Firebase te ayuda publicar tus apps porque te proporciona las herramientas que optimizan las tareas que demandan mucho tiempo. Así podrás entregar productos de calidad a tus usuarios en menos tiempo.</p><h4 id="faster-deployment-of-modern-web-apps-with-firebase-hosting">Desarrollo rápido de apps web modernas con Firebase Hosting</h4><p><a href="https://firebase.google.com/products/hosting">Firebase Hosting</a><span class="Apple-converted-space"> </span>es un servicio que te permite compilar e implementar con facilidad tus sitios web en todo el mundo sin gestionar ninguna infraestructura, con seguridad integrada y una experiencia de desarrollador optimizada.</p><p>Hoy nos entusiasma lanzar una<span class="Apple-converted-space"> </span><a href="http://firebase.google.com/docs/hosting/frameworks-overview">actualización</a><span class="Apple-converted-space"> </span>que lleva a Firebase Hosting más allá de los sitios web estáticos: permite difundir con facilidad frameworks web dinámicos, como Next.js y Angular Universal. Puedes desplegar todos estos frameworks con la misma interfaz de línea de comando (CLI) que ya estás usando,<span class="Apple-converted-space"> </span><strong><code>firebase deploy</code></strong>. Nuestra CLI detecta qué framework estás usando de forma automática, ejecuta la compilación, genera Cloud Function cuando es necesario, realiza cualquier configuración y administra la implementación. También agregamos compatibilidad para compilación del cliente con frameworks como Vite, Preact, Lit y Svelte.</p><figure class="figure-block"><img alt="Implementa apps web modernas compiladas con tus frameworks web favoritos con un simple comando." class="figure-image" src="https://firebasestorage.googleapis.com/v0/b/first-class-blog.appspot.com/o/posts%2Fwnif2022-firebase-deploy.gif?alt=media&token=f518a160-56f6-47bb-9abe-45f1a9a5b7e1" style="max-width: 100%;" title="Deploy modern web apps built with your favorite web frameworks using a single command" /><figcaption class="figure-caption">Implementa apps web modernas compiladas con tus frameworks web favoritos con un simple comando.</figcaption></figure><p>Ahora puedes pasar menos tiempo preocupándote sobre detalles del backend y más tiempo compilando las apps web potentes y escalables que tus usuarios adoran.</p><p>Prueba esta actualización en versión preliminar con la<span class="Apple-converted-space"> </span><a href="https://firebase.google.com/docs/cli">descarga de la última versión</a><span class="Apple-converted-space"> </span>de Firebase CLI, que te permitirá experimentar con<span class="Apple-converted-space"> </span><code>firebase experiments:enable webframeworks</code></p><h4 id="reduce-time-spent-managing-your-database-with-firestore">Pasa menos tiempo gestionando tu base de datos con Firestore</h4><p><a href="https://firebase.google.com/products/firestore">Cloud Firestore</a><span class="Apple-converted-space"> </span>es una base de datos de documentos NoSQL que te permite almacenar, sincronizar y consultar datos para tus apps web y móviles a escala sin ni siquiera tocar un servidor. Nos entusiasma anunciar tres actualizaciones para Cloud Firestore que te ayudarán a administrar y consultar tu base de datos.</p><p><strong>[Versión preliminar para desarrolladores] Función Count():</strong><span class="Apple-converted-space"> </span>Con la nueva función count de Firestore, puedes obtener el recuento de los documentos compatibles cuando ejecutas una consulta o lees información de una colección sin cargar los documentos actuales. Esto te ahorrará mucho tiempo.</p><p><strong>[Disponibilidad general] BaaS escalable:</strong><span class="Apple-converted-space"> </span>Mejoramos la capacidad principal para administrar la escritura y las conexiones de la base de datos sin límites absolutos. De esta manera, es más fácil escalar y apoyar el crecimiento de tu app durante grandes picos de tráfico.</p><p><strong>[Disponibilidad general] Tiempo de actividad (TTL)</strong>: Ahora puedes especificar un campo en tus documentos que determine la vida útil de ese documento. Firestore eliminará ese documento cuando caduque, de modo que no tendrás que pasar tiempo administrando las políticas de conservación de datos y podrás ahorrar en costos de almacenamiento.</p><figure class="figure-block"><img alt="Pasa menos tiempo administrando las políticas de conservación de datos con la nueva función de tiempo de actividad en Firestore." class="figure-image" src="https://firebasestorage.googleapis.com/v0/b/first-class-blog.appspot.com/o/posts%2Fwnif2022-ttl_1600x800.webp?alt=media&token=f5e837b8-9826-4a83-bc03-90f87ffd378c" style="max-width: 100%;" title="Spend less time managing data retention policies with the new Time to Live feature in Firestore" /><figcaption class="figure-caption">Pasa menos tiempo administrando las políticas de conservación de datos con la nueva función de tiempo de actividad en Firestore.</figcaption></figure><p>Para obtener más información sobre estas características, echa un vistazo a nuestra<span class="Apple-converted-space"> </span><a href="https://firebase.google.com/docs/firestore">documentación</a>.</p><h4 id="help-protect-users-and-data-with-authentication-and-security-rules">Ayuda a proteger a los usuarios y datos con las reglas de autenticación y seguridad.</h4><p>Proteger los datos de los usuarios y la privacidad de los clientes es un desafío difícil que todo desarrollador debe afrontar.<span class="Apple-converted-space"> </span><a href="https://firebase.google.com/products/auth">Firebase Authentication</a><span class="Apple-converted-space"> </span>es una solución de identidad de extremo a extremo que facilita el registro y la administración de tus usuarios.</p><p>Nos entusiasma compartir la nueva función de autenticación en colaboración con<span class="Apple-converted-space"> </span><a href="https://cloud.google.com/identity-platform">Google Cloud Identity Platform</a><span class="Apple-converted-space"> </span>que te ayuda a proteger tus usuarios.</p><figure class="figure-block"><img alt="Nueva Firebase Authentication con funciones de Identity Platform" class="figure-image" src="https://firebasestorage.googleapis.com/v0/b/first-class-blog.appspot.com/o/posts%2Fwnif2022-auth_1600x800.webp?alt=media&token=74afe156-4eb9-4f72-b238-c1e214604273" style="max-width: 100%;" title="New Firebase Authentication with Identity Platform features" /><figcaption class="figure-caption">Nueva Firebase Authentication con funciones de Identity Platform</figcaption></figure><p>En primer lugar, lanzamos la autenticación de varios factores (MFA) para ayudar a proteger las cuentas de tus usuarios, incluso si sus contraseñas están comprometidas. En segundo lugar, agregamos compatibilidad con OpenID Connect estándar y SAML, así puedes usar una gran variedad de métodos de registro, como Slack y Discord, sin tener que esperar integraciones personalizadas.</p><p>En tercer lugar, para ayudarte a crear requisitos personalizados para el registro o inicio de sesión, lanzamos funciones de bloqueo que se ejecutan de forma sincrónica y pueden implementar cualquier lógica que admita Cloud Functions para Firebase. Finalmente, para garantizar que todos los cambios de la configuración de autenticación sean auditables y que puedas obtener estadísticas del uso de la autenticación, agregamos una auditoría completa y registro de actividad.</p><p>Puedes probar todas estas funciones hoy si actualizas la instancia de Firebase Authentication en<span class="Apple-converted-space"> </span><a href="http://firebase.google.com/console">Firebase Console</a>.</p><p>Además, también actualizamos las reglas de seguridad en<span class="Apple-converted-space"> </span><a href="https://firebase.google.com/products/storage">Cloud Storage</a> para Firebase para respaldar las solicitudes del servidor y asegurar que cada usuario solo tenga acceso a sus propios datos. Esta nueva funcionalidad te permite crear permisos flexibles para proteger el acceso a archivos de almacenamiento basados en datos dentro de Firestore.</p><figure class="figure-block"><img alt="El nuevo método firestore.get en las reglas de seguridad de Cloud Storage para Firebase te permite configurar permisos basados en datos dentro de Firestore." class="figure-image" src="https://firebasestorage.googleapis.com/v0/b/first-class-blog.appspot.com/o/posts%2Fwnif2022-rules_1600x800.webp?alt=media&token=64c86804-9e30-4247-83be-49abbb1e8838" style="max-width: 100%;" title="New `firestore.get` method in the security rules for Cloud Storage for Firebase to set file permissions based on data in Firestore." /><figcaption class="figure-caption">El nuevo método firestore.get en las reglas de seguridad de Cloud Storage para Firebase te permite configurar permisos basados en datos dentro de Firestore.</figcaption></figure><p>Consulta nuestra<span class="Apple-converted-space"> </span><a href="https://firebase.google.com/docs/rules/simulator">documentación</a><span class="Apple-converted-space"> </span>en Playground Rules, a las que puedes acceder en Firebase Console.</p><h4 id="new-extension-marketplace-to-easily-browse-and-find-extensions">Nueva extensión de Marketplace para navegar fácilmente y encontrar extensiones.</h4><p><a href="https://firebase.google.com/products/extensions">Las extensiones de Firebase<span class="Apple-converted-space"> </span></a>son conjuntos de código preempaquetados que permiten agregar con facilidad funciones principales a tu app desde Google y otras empresas en las que confías, con un código mínimo y sin necesidad de aprender muchas API de terceros diferentes.</p><p>Nos entusiasma presentar<span class="Apple-converted-space"> </span><a href="https://extensions.dev">Extensions Marketplace</a>, una nueva plataforma para descubrir y encontrar las extensiones que se adaptan a tus necesidades. También vamos a presentar la nueva extensión de terceros para agregar búsqueda, chat y procesamiento de pagos a tu app. Con la nueva extensión<span class="Apple-converted-space"> </span><a href="https://www.vonage.com/">Vonage</a>, puedes brindar soporte técnico a tus clientes con videochat. La extensión<span class="Apple-converted-space"> </span><a href="https://www.meilisearch.com/">Meilisearch</a><span class="Apple-converted-space"> </span>te permite buscar fácilmente documentos en Firestore y la extensión<span class="Apple-converted-space"> </span><a href="https://www.purchasely.com/">Purchasely</a><span class="Apple-converted-space"> </span>simplifica la integración de pagos en apps.</p><figure class="figure-block"><img alt="Nuevo Extensions Marketplace" class="figure-image" src="https://firebasestorage.googleapis.com/v0/b/first-class-blog.appspot.com/o/posts%2Fwnif2022-marketplace_1600x800.webp?alt=media&token=d0c69466-83f0-4cb7-b771-aedc31bf28c6" style="max-width: 100%;" title="New Extensions Marketplace" /><figcaption class="figure-caption">Nuevo Extensions Marketplace</figcaption></figure><p>¡También te brindamos la habilidad de compilar extensiones para tus propias apps por medio del programa Provider Alpha!</p><p>Echa un vistazo a<span class="Apple-converted-space"> </span><a href="https://extensions.dev">extensions.dev</a>, explora las Extensiones de Firebase y regístrate en el programa de extensiones Provider Alpha para comenzar a compilar tus propias extensiones. Nos encantará conocer tus comentarios.</p><h3 id="improve-app-quality-and-user-engagement">Mejora la calidad de la app y la interacción de los usuarios</h3><p>Además de acelerar el desarrollo de apps, Firebase brinda estadísticas viables y herramientas fáciles de usar que te ayudarán a ejecutar apps de alto rendimiento y ofrecer la mejor experiencia a los usuarios.</p><h4 id="more-efficient-testing-across-devices-with-test-lab">Pruebas más eficientes entre dispositivos con Test Lab</h4><p>Una investigación demostró que el<span class="Apple-converted-space"> </span><a href="https://qualitestgroup.com/news/survey-88-of-app-users-will-abandon-apps-based-on-bugs-and-glitches/">88 %</a><span class="Apple-converted-space"> </span>de los usuarios dejan de usar las apps en función de los errores y las fallas. Por lo tanto, mantener una app de calidad es crucial para alcanzar el éxito. Es por esto que Firebase te brinda herramientas para ejecutar pruebas e identificar problemas a tiempo, de modo que puedas mantener tantos usuarios como sea posible.</p><p><a href="https://firebase.google.com/products/test-lab">Firebase Test Lab</a><span class="Apple-converted-space"> </span>es una app basada en la nube que permite probar productos que se integran con tu flujo de trabajo actual. Además, te permite hacer pruebas en tu app en miles de dispositivos físicos y virtuales, de modo que puedas detectar los errores antes del lanzamiento. Sin embargo, a medida que tus apps crecen, se vuelve mucho más difícil administrar y ejecutar pruebas de configuración consistentes y a escala. Para ayudar a estandarizar la configuración de pruebas, presentamos<span class="Apple-converted-space"> </span><strong>la nueva versión preliminar de compatibilidad con Firebase Test Lab en dispositivos administrados por Gradle</strong></p><figure class="figure-block"><img alt="Compatibilidad con Firebase Test Lab en dispositivos administrados por Gradle" class="figure-image" src="https://firebasestorage.googleapis.com/v0/b/first-class-blog.appspot.com/o/posts%2Fwnif2022-testlab_1600x800.webp?alt=media&token=274d3698-ec3f-40f4-81eb-e1ae08f6adb8" style="max-width: 100%;" title="Firebase Test Lab support in Gradle Managed Devices" /><figcaption class="figure-caption">Compatibilidad con Firebase Test Lab en dispositivos administrados por Gradle</figcaption></figure><p>Con esta integración, puedes obtener acceso a todos los dispositivos compatibles con Firebase Test Lab con un formato de configuración de prueba simple y consistente, que se implementó en dispositivos Android administrados por Gradle. Solo debes usar una línea de comandos y no deberás ingresar a Firebase Console.</p><p>Parar probarlo, actualiza a la última versión preliminar del complemento de Gradle para Android 8.0.0.</p><h4 id="even-more-features-come-to-our-crashlytics--android-studio-integration">Más funciones se incluyen en nuestra integración de Crashlytics + Android Studio.</h4><p><a href="https://firebase.blog/posts/2022/05/whats-new-at-google-io#crashlytics-integration-with-android--play-streamline-troubleshooting">A principios de este año,</a><span class="Apple-converted-space"> </span>presentamos la nueva ventana<span class="Apple-converted-space"> </span><strong><a href="https://developer.android.com/studio/preview/features#aqi">Insights de calidad de la app</a></strong>, una integración entre Crashlytics y Android Studio que te permite ver informes de fallas y navegar desde estas hasta el código dentro del contexto del IDE, lo que te permite encontrar y corregir fallas mucho más rápido. Nos complace informar que la ventana “Insights de calidad de la app” pasó al canal beta en Android Studio Electric Eel.</p><figure class="figure-block"><img alt="Actualiza a la última versión Canary de Android Studio Flamingo para probar nuevas funciones en la ventana “Insights de calidad de la app”." class="figure-image" src="https://firebasestorage.googleapis.com/v0/b/first-class-blog.appspot.com/o/posts%2Fintegration-crashlytics-android-studio_1600x800.webp?alt=media&token=4214023e-efbb-4acd-a17d-072405520de8" style="max-width: 100%;" title="Upgrade to the latest canary release of Android Studio Flamingo to try new features in the App Quality Insights Window" /><figcaption class="figure-caption">Actualiza a la última versión Canary de Android Studio Flamingo para probar nuevas funciones en la ventana “Insights de calidad de la app”.</figcaption></figure><p>Además, presentaremos más funciones de Crashlytics<span class="Apple-converted-space"> </span><em>directamente</em><span class="Apple-converted-space"> </span>en Android Studio, en la última versión Canary de Android Studio Flamingo. Ahora puedes filtrar por fallas en Play Tracks, lo que significa que puedes filtrar las fallas que se encontraron en tu compilación interna y dar prioridad a los problemas que afectan a tus usuarios en producción. Por otra parte, agregamos<span class="Apple-converted-space"> </span><a href="https://firebase.blog/posts/2021/11/whats-new-at-Firebase-Summit-2021#crashlytics-adds-application-not-responding-anr-reports-and-signals">señales</a><span class="Apple-converted-space"> </span>a la ventana “Insights de calidad de la app” para ayudarte a identificar rápidamente las características de las fallas, por ejemplo, si son nuevas, antiguas, repetitivas o una regresión. Por último, ahora puedes agregar notas a las fallas para informarle a tu equipo cómo progresa tu corrección y cerrar el problema de forma adecuada en Android Studio.</p><p>Prueba estas características en el último<span class="Apple-converted-space"> </span><a href="d.android.com/studio/preview">lanzamiento Canary de Android Studio Flamingo</a>.</p><h4 id="improve-user-engagement-with-remote-config-personalization">Mejora la participación del usuario con personalización de Remote Config</h4><p>Una parte importante de brindar una gran experiencia es adaptar tu app a las necesidades y preferencias individuales de cada usuario. Pero hacer esto de forma manual es un proceso engorroso que lleva mucho tiempo.<span class="Apple-converted-space"> </span><a href="https://firebase.google.com/docs/remote-config/personalization">La personalización de Remote Config</a><span class="Apple-converted-space"> </span>puede ayudar<span class="Apple-converted-space"> </span><em>de forma automática</em><span class="Apple-converted-space"> </span>a optimizar las experiencias del usuario a fin de maximizar los objetivos que quieres, como el tiempo de participación del usuario, la utilización de funciones o los clics en anuncios con la potencia del aprendizaje automático de Google.</p><p>Ahora, además de ofrecer una optimización para un tipo de evento en particular en tu app, la personalización también tiene en cuenta el valor de ese evento. Entonces, por ejemplo, además de maximizar el número total de compra directa desde la app, puedes optimizar la<span class="Apple-converted-space"> </span><em>cantidad de dólares</em><span class="Apple-converted-space"> </span>en esas compras directas.</p><figure class="figure-block"><img alt="Lyrebird aumenta los ingresos por anuncios un 4% con la personalización de Remote Config." class="figure-image" src="https://firebasestorage.googleapis.com/v0/b/first-class-blog.appspot.com/o/posts%2Fwnif2022-lyrbird_1600x800.webp?alt=media&token=83b4e9c8-8b14-4cf0-9ae0-e47c1515aab5" style="max-width: 100%;" title="Lyrebird increases ad revenue by 4% using the Remote Config Personalization" /><figcaption class="figure-caption">Lyrebird aumenta los ingresos por anuncios un 4% con la personalización de Remote Config.</figcaption></figure><p><a href="https://lyrebirdstudio.net/">Lyrebird Studio</a>, una empresa que hace una colección de apps móviles para editar fotos, quiso encontrar la frecuencia exacta de muestra de anuncios, pero sabía que no sería una solución que le sirviera a todo el mundo. Con la personalización de Remote Config, proporcionó los valores de impresión de los anuncios en sus apps y permitió optimizar la frecuencia de los anuncios mientras se tiene en cuenta el valor de los que se muestran. Esto generó un<span class="Apple-converted-space"> </span><strong>aumento de un 4% de los ingresos</strong><span class="Apple-converted-space"> </span>con un mínimo esfuerzo.</p><p>Para comenzar a usar la personalización, echa un vistazo a nuestra<span class="Apple-converted-space"> </span><a href="https://firebase.google.com/docs/remote-config">documentación</a>.</p><h3 id="looking-ahead">Planes futuros</h3><p>Estas son algunas de las muchas formas en las que hacemos funcionar mejor a Firebase con productos Google y el amplio ecosistema de herramientas de terceros. De esta manera, puedes acelerar el desarrollo de tu app y publicarla con confianza. Mientras miramos hacia el futuro, continuaremos ayudándote a que tu app ofrezca a tus usuarios y tu empresa la mejor solución posible.</p><p>Para obtener más recursos y contenido de la Firebase Summit 2022, echa un vistazo a nuestro<span class="Apple-converted-space"> </span><a href="https://firebase.google.com/summit">sitio web del evento</a><span class="Apple-converted-space"> </span>y si quieres espiar lo que se viene,<span class="Apple-converted-space"> </span><a href="http://firebase.google.com/alpha">regístrate en nuestro programa Alpha.</a></p><p>Y, como siempre, puedes mantenerte al tanto de las últimas novedades y las prácticas recomendadas sobre el uso de todos los productos de Firebase suscribiéndote a<span class="Apple-converted-space"> </span><a href="https://www.youtube.com/firebase">nuestro canal de YouTube</a><span class="Apple-converted-space"> </span>o<span class="Apple-converted-space"> </span><a href="https://firebase.blog/">siguiéndonos en nuestro blog</a><span class="Apple-converted-space"> </span>o<span class="Apple-converted-space"> </span><a href="https://twitter.com/firebase">en Twitter</a>.</p></article>Google Developers LATAMhttp://www.blogger.com/profile/05105089662475084319noreply@blogger.com0tag:blogger.com,1999:blog-218264512262097577.post-44181934513469733342022-11-17T15:54:00.004-03:002022-11-17T15:54:47.159-03:00 Indie Games Fund de Google Play: anunciamos los 10 estudios seleccionados<span id="docs-internal-guid-934ec2aa-7fff-ed14-fadb-23ea5d02740a"><p dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;"><span style="background-color: white; font-family: "Google Sans", sans-serif; font-size: 12pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">En toda América Latina, no falta talento o potencial entre los desarrolladores de juegos de la región. El nuevo </span><a href="https://developersonair.withgoogle.com/events/indie-games-fund" style="text-decoration-line: none;"><span style="background-color: white; color: #1155cc; font-family: "Google Sans", sans-serif; font-size: 12pt; font-variant-east-asian: normal; font-variant-numeric: normal; font-weight: 700; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space: pre-wrap;">Indie Games Fund</span><span style="background-color: white; color: #1155cc; font-family: "Google Sans", sans-serif; font-size: 12pt; font-variant-east-asian: normal; font-variant-numeric: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space: pre-wrap;"> </span><span style="background-color: white; color: #1155cc; font-family: "Google Sans", sans-serif; font-size: 12pt; font-variant-east-asian: normal; font-variant-numeric: normal; font-weight: 700; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space: pre-wrap;">de Google Play</span></a><span style="background-color: white; font-family: "Google Sans", sans-serif; font-size: 12pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;"> fue creado para ayudar a los pequeños estudios de juegos nacidos en América Latina, uno de los mercados de juegos de más rápido crecimiento. El fondo ofrece a los estudios seleccionados ayuda y apoyo para construir y crecer sus negocios en Google Play y no exige equity o participación a cambio</span><span style="background-color: white; font-family: Roboto, sans-serif; font-size: 12pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">.</span></p><br /><br /><p dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;"><span style="background-color: white; font-family: "Google Sans", sans-serif; font-size: 12pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;"><span style="border: none; display: inline-block; height: 196px; overflow: hidden; width: 618px;"><img height="196" src="https://lh4.googleusercontent.com/obU_PMfbEYop5qyTvWGniQHFDKtp22N2bWZc9ChQuUYw4r1FVVPnAQV7so8RS37r4SKQ2bJBhSYlVUy22i_qDM_sQ4H4bLILuZRf5KPfxI1oTJA9kdiEjJhyNw8Sc4H7mMekY0okQt-UZUNzYdrv5BwlmxfTu1QUcAEZBqERU-TezGqdrHIMPdES1w_95RkPclwenopsF4sWbXmsfNUfq_uj6oTwtL_2U5Hx" style="margin-left: 0px; margin-top: 0px;" width="618" /></span></span></p><br /><p dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;"><span style="background-color: white; font-family: "Google Sans", sans-serif; font-size: 12pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">Hoy, anunciamos los </span><a href="https://developersonair.withgoogle.com/events/indie-games-fund" style="text-decoration-line: none;"><span style="background-color: white; color: #1155cc; font-family: "Google Sans", sans-serif; font-size: 12pt; font-variant-east-asian: normal; font-variant-numeric: normal; font-weight: 700; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space: pre-wrap;">10 estudios seleccionados</span></a><span style="background-color: white; font-family: "Google Sans", sans-serif; font-size: 12pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;"> y los juegos indies:</span></p><br /><ul style="margin-bottom: 0; margin-top: 0; padding-inline-start: 48px;"><li aria-level="1" dir="ltr" style="font-family: "Google Sans", sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;"><p dir="ltr" role="presentation" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 12pt;"><span style="font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; font-weight: 700; vertical-align: baseline; white-space: pre-wrap;">AgonaleaGames,</span><a href="https://play.google.com/store/apps/details?id=com.Agonalea.BeatArena" style="text-decoration-line: none;"><span style="color: black; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;"> </span><span style="color: #1155cc; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space: pre-wrap;">Beat Arena</span></a><span style="font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;"> (Argentina)</span></p></li><li aria-level="1" dir="ltr" style="font-family: "Google Sans", sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;"><p dir="ltr" role="presentation" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;"><span style="font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; font-weight: 700; vertical-align: baseline; white-space: pre-wrap;">Aoca Game Lab,</span><a href="https://play.google.com/store/apps/details?id=com.AocaGameLab.Arida" style="text-decoration-line: none;"><span style="color: black; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;"> </span><span style="color: #1155cc; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space: pre-wrap;">ARIDA: Backland’s Awakening</span></a><span style="font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;"> (Brazil)</span></p></li><li aria-level="1" dir="ltr" style="font-family: "Google Sans", sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;"><p dir="ltr" role="presentation" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;"><span style="font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; font-weight: 700; vertical-align: baseline; white-space: pre-wrap;">Asantee Games,</span><a href="https://play.google.com/store/apps/details?id=com.asanteegames.magicrampage" style="text-decoration-line: none;"><span style="color: black; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; font-weight: 700; vertical-align: baseline; white-space: pre-wrap;"> </span><span style="color: #1155cc; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space: pre-wrap;">Magic Rampage</span></a><span style="font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;"> (Brazil)</span></p></li><li aria-level="1" dir="ltr" style="font-family: "Google Sans", sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;"><p dir="ltr" role="presentation" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;"><span style="font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; font-weight: 700; vertical-align: baseline; white-space: pre-wrap;">AVIX,</span><a href="https://play.google.com/store/apps/details?id=tv.avix.hiddenlands" style="text-decoration-line: none;"><span style="color: black; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; font-weight: 700; vertical-align: baseline; white-space: pre-wrap;"> </span><span style="color: #1155cc; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space: pre-wrap;">Hidden Lands</span></a><span style="font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;"> (Argentina)</span></p></li><li aria-level="1" dir="ltr" style="font-family: "Google Sans", sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;"><p dir="ltr" role="presentation" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;"><span style="font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; font-weight: 700; vertical-align: baseline; white-space: pre-wrap;">Boomware Studio,</span><a href="https://play.google.com/store/apps/details?id=com.Boomware.CafePanic" style="text-decoration-line: none;"><span style="color: black; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; font-weight: 700; vertical-align: baseline; white-space: pre-wrap;"> </span><span style="color: #1155cc; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space: pre-wrap;">Cafe Panic</span></a><span style="font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;"> (Peru)</span></p></li><li aria-level="1" dir="ltr" style="font-family: "Google Sans", sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;"><p dir="ltr" role="presentation" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;"><span style="font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; font-weight: 700; vertical-align: baseline; white-space: pre-wrap;">Cafundo E Criativo,</span><a href="https://store.steampowered.com/app/1545850/Tetragon/" style="text-decoration-line: none;"><span style="color: black; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;"> </span><span style="color: #1155cc; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space: pre-wrap;">Tetragon</span></a><span style="font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;"> (Brazil)</span></p></li><li aria-level="1" dir="ltr" style="font-family: "Google Sans", sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;"><p dir="ltr" role="presentation" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;"><span style="font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; font-weight: 700; vertical-align: baseline; white-space: pre-wrap;">Glitch Factory,</span><a href="https://store.steampowered.com/app/1039100/No_Place_for_Bravery/" style="text-decoration-line: none;"><span style="color: black; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;"> </span><span style="color: #1155cc; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space: pre-wrap;">No Place for Bravery</span></a><span style="font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;"> (Brazil)</span></p></li><li aria-level="1" dir="ltr" style="font-family: "Google Sans", sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;"><p dir="ltr" role="presentation" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;"><span style="font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; font-weight: 700; vertical-align: baseline; white-space: pre-wrap;">Orube Game Studio,</span><a href="https://play.google.com/store/apps/details?id=com.orube.supermomboquest" style="text-decoration-line: none;"><span style="color: black; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; font-weight: 700; vertical-align: baseline; white-space: pre-wrap;"> </span><span style="color: #1155cc; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space: pre-wrap;">Super Mombo Quest</span></a><span style="font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;"> (Brazil)</span></p></li><li aria-level="1" dir="ltr" style="font-family: "Google Sans", sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;"><p dir="ltr" role="presentation" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;"><span style="font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; font-weight: 700; vertical-align: baseline; white-space: pre-wrap;">Selva Interactive,</span><a href="https://store.steampowered.com/app/1719240/Illuminaria/" style="text-decoration-line: none;"><span style="color: black; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;"> </span><span style="color: #1155cc; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space: pre-wrap;">Illuminaria</span></a><span style="font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;"> (Guatemala)</span></p></li><li aria-level="1" dir="ltr" style="font-family: "Google Sans", sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;"><p dir="ltr" role="presentation" style="line-height: 1.38; margin-bottom: 12pt; margin-top: 0pt;"><span style="font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; font-weight: 700; vertical-align: baseline; white-space: pre-wrap;">Somber Pixel,</span><a href="https://store.steampowered.com/app/1254670/Night_Reverie/" style="text-decoration-line: none;"><span style="color: black; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; font-weight: 700; vertical-align: baseline; white-space: pre-wrap;"> </span><span style="color: #1155cc; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space: pre-wrap;">Night Reverie</span></a><span style="font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;"> (Peru) </span></p></li></ul><br /><p dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;"><span style="background-color: white; font-family: "Google Sans", sans-serif; font-size: 12pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">Además del Indie Games Fund, Google Play ofrece otros </span><a href="https://play.google.com/console/about/programs/indiegames/" style="text-decoration-line: none;"><span style="background-color: white; color: #1155cc; font-family: "Google Sans", sans-serif; font-size: 12pt; font-variant-east-asian: normal; font-variant-numeric: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space: pre-wrap;">programas para ayudar a empresas independientes que desarrollan juegos</span></a><span style="background-color: white; font-family: "Google Sans", sans-serif; font-size: 12pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;"> a crecer su negocio. 29 estudios latinoamericanos también ya han participado en el </span><a href="https://developersonair.withgoogle.com/events/indie-games-accelerator" style="text-decoration-line: none;"><span style="background-color: white; color: #1155cc; font-family: "Google Sans", sans-serif; font-size: 12pt; font-variant-east-asian: normal; font-variant-numeric: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space: pre-wrap;">Indie Games Accelerator</span></a><span style="background-color: white; font-family: "Google Sans", sans-serif; font-size: 12pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">, un programa global que ofrece educación y tutoría. </span></p><br /><p dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;"><span style="background-color: white; font-family: "Google Sans", sans-serif; font-size: 12pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">Para mantenerte al día sobre todos los programas y recursos de Google Play para desarrolladores independientes de juegos, síguenos en</span><a href="https://twitter.com/GooglePlayBiz" style="text-decoration-line: none;"><span style="background-color: white; color: #1155cc; font-family: "Google Sans", sans-serif; font-size: 12pt; font-variant-east-asian: normal; font-variant-numeric: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space: pre-wrap;"> Twitter </span></a><a href="https://www.linkedin.com/showcase/googleplaybiz" style="text-decoration-line: none;"><span style="background-color: white; color: #1155cc; font-family: "Google Sans", sans-serif; font-size: 12pt; font-variant-east-asian: normal; font-variant-numeric: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space: pre-wrap;">y LinkedIn.</span></a></p><div><br /></div></span>Google Developers LATAMhttp://www.blogger.com/profile/05105089662475084319noreply@blogger.com0tag:blogger.com,1999:blog-218264512262097577.post-25323078837483221032022-11-03T11:57:00.007-03:002022-11-03T11:57:52.514-03:00Novedades de la Firebase Summit 2022<div class="_headline_1o14o_71" style="caret-color: rgb(0, 0, 0); font-family: -webkit-standard; text-size-adjust: auto;"><h2><br /></h2><div class="_bylinelist_1o14o_228"><div aria-hidden="true" class="_byline_1oopl_1"><img alt="Kara Yu" class="_img_1oopl_18" height="51" src="https://firebasestorage.googleapis.com/v0/b/first-class-blog.appspot.com/o/authors%2Fkara_yu_466x466.webp?alt=media" style="max-width: 100%;" width="51" /><div class="_bylineMeta_1oopl_51"><div class="_name_1oopl_25">Por Kara Yu</div><div class="_role_1oopl_30">Gerente de producto</div></div></div></div></div><article class="content imageCaptions" style="caret-color: rgb(0, 0, 0); font-family: -webkit-standard; text-size-adjust: auto;"><p>Pasaron tres años desde que estuvimos en persona en la Firebase Summit y nos da mucha alegría organizar la primera Firebase Summit híbrida, que se llevará a cabo en Nueva York y en línea. Echamos de menos conectarnos con nuestra comunidad de desarrolladores y aprender sobre las apps extraordinarias que han estado compilando.</p><p>En Firebase, creemos que las apps mejoran la forma en las que las personas viven, trabajan y aprenden. En los últimos meses, conocimos historias inspiradoras de desarrolladores que promueven cambios positivos en sus comunidades. Por ejemplo, los casos de<span class="Apple-converted-space"> </span><a href="https://firebase.blog/posts/2022/07/firebase-stories-moia">MOIA</a>, una empresa de transporte que trabaja para mejorar la movilidad urbana;<span class="Apple-converted-space"> </span><a href="https://firebase.blog/posts/2022/07/firebase-stories-faves">FAVES</a>, una app para simplificar la compra de ropa para pequeños negocios; y<span class="Apple-converted-space"> </span><a href="https://firebase.blog/posts/2022/09/firebase-stories-classkick">Classkick</a>, una plataforma de aprendizaje que reduce las barreras en la educación. Son apenas algunos ejemplos de los millones de apps de startups y grandes empresas que usan Firebase de forma activa cada mes.</p><p>Es por esto que nos comprometemos a brindarte soluciones flexibles e integradas para que puedas seguir compilando las apps que los usuarios adoran. En la Firebase Summit de este año, compartiremos novedades sobre cómo seguimos integrando Firebase a los productos de los desarrolladores más populares de Google y cómo hacemos que nuestra plataforma funcione mejor con un ecosistema abierto de herramientas, de modo que puedas acelerar el desarrollo de apps y publicarlas con confianza. ¡Continúa leyendo para conocer más detalles sobre las novedades y no te olvides de consultar todo el gran contenido (que incluye sesiones técnicas, demostraciones, vías de aprendizaje y mucho más) de la cumbre en el<span class="Apple-converted-space"> </span><a href="https://firebase.google.com/summit">sitio web del evento</a>!</p><h3 id="accelerate-app-development">Acelera el desarrollo de apps</h3><p>Firebase te ayuda publicar tus apps porque te proporciona las herramientas que optimizan las tareas que demandan mucho tiempo. Así podrás entregar productos de calidad a tus usuarios en menos tiempo.</p><h4 id="faster-deployment-of-modern-web-apps-with-firebase-hosting">Desarrollo rápido de apps web modernas con Firebase Hosting</h4><p><a href="https://firebase.google.com/products/hosting">Firebase Hosting</a><span class="Apple-converted-space"> </span>es un servicio que te permite compilar e implementar con facilidad tus sitios web en todo el mundo sin gestionar ninguna infraestructura, con seguridad integrada y una experiencia de desarrollador optimizada.</p><p>Hoy nos entusiasma lanzar una<span class="Apple-converted-space"> </span><a href="http://firebase.google.com/docs/hosting/frameworks-overview">actualización</a><span class="Apple-converted-space"> </span>que lleva a Firebase Hosting más allá de los sitios web estáticos: permite difundir con facilidad frameworks web dinámicos, como Next.js y Angular Universal. Puedes desplegar todos estos frameworks con la misma interfaz de línea de comando (CLI) que ya estás usando,<span class="Apple-converted-space"> </span><strong><code>firebase deploy</code></strong>. Nuestra CLI detecta qué framework estás usando de forma automática, ejecuta la compilación, genera Cloud Function cuando es necesario, realiza cualquier configuración y administra la implementación. También agregamos compatibilidad para compilación del cliente con frameworks como Vite, Preact, Lit y Svelte.</p><figure class="figure-block"><img alt="Implementa apps web modernas compiladas con tus frameworks web favoritos con un simple comando." class="figure-image" src="https://firebasestorage.googleapis.com/v0/b/first-class-blog.appspot.com/o/posts%2Fwnif2022-firebase-deploy.gif?alt=media&token=f518a160-56f6-47bb-9abe-45f1a9a5b7e1" style="max-width: 100%;" title="Deploy modern web apps built with your favorite web frameworks using a single command" /><figcaption class="figure-caption">Implementa apps web modernas compiladas con tus frameworks web favoritos con un simple comando.</figcaption></figure><p>Ahora puedes pasar menos tiempo preocupándote sobre detalles del backend y más tiempo compilando las apps web potentes y escalables que tus usuarios adoran.</p><p>Prueba esta actualización en versión preliminar con la<span class="Apple-converted-space"> </span><a href="https://firebase.google.com/docs/cli">descarga de la última versión</a><span class="Apple-converted-space"> </span>de Firebase CLI, que te permitirá experimentar con<span class="Apple-converted-space"> </span><code>firebase experiments:enable webframeworks</code></p><h4 id="reduce-time-spent-managing-your-database-with-firestore">Pasa menos tiempo gestionando tu base de datos con Firestore</h4><p><a href="https://firebase.google.com/products/firestore">Cloud Firestore</a><span class="Apple-converted-space"> </span>es una base de datos de documentos NoSQL que te permite almacenar, sincronizar y consultar datos para tus apps web y móviles a escala sin ni siquiera tocar un servidor. Nos entusiasma anunciar tres actualizaciones para Cloud Firestore que te ayudarán a administrar y consultar tu base de datos.</p><p><strong>[Versión preliminar para desarrolladores] Función Count():</strong><span class="Apple-converted-space"> </span>Con la nueva función count de Firestore, puedes obtener el recuento de los documentos compatibles cuando ejecutas una consulta o lees información de una colección sin cargar los documentos actuales. Esto te ahorrará mucho tiempo.</p><p><strong>[Disponibilidad general] BaaS escalable:</strong><span class="Apple-converted-space"> </span>Mejoramos la capacidad principal para administrar la escritura y las conexiones de la base de datos sin límites absolutos. De esta manera, es más fácil escalar y apoyar el crecimiento de tu app durante grandes picos de tráfico.</p><p><strong>[Disponibilidad general] Tiempo de actividad (TTL)</strong>: Ahora puedes especificar un campo en tus documentos que determine la vida útil de ese documento. Firestore eliminará ese documento cuando caduque, de modo que no tendrás que pasar tiempo administrando las políticas de conservación de datos y podrás ahorrar en costos de almacenamiento.</p><figure class="figure-block"><img alt="Pasa menos tiempo administrando las políticas de conservación de datos con la nueva función de tiempo de actividad en Firestore." class="figure-image" src="https://firebasestorage.googleapis.com/v0/b/first-class-blog.appspot.com/o/posts%2Fwnif2022-ttl_1600x800.webp?alt=media&token=f5e837b8-9826-4a83-bc03-90f87ffd378c" style="max-width: 100%;" title="Spend less time managing data retention policies with the new Time to Live feature in Firestore" /><figcaption class="figure-caption">Pasa menos tiempo administrando las políticas de conservación de datos con la nueva función de tiempo de actividad en Firestore.</figcaption></figure><p>Para obtener más información sobre estas características, echa un vistazo a nuestra<span class="Apple-converted-space"> </span><a href="https://firebase.google.com/docs/firestore">documentación</a>.</p><h4 id="help-protect-users-and-data-with-authentication-and-security-rules">Ayuda a proteger a los usuarios y datos con las reglas de autenticación y seguridad.</h4><p>Proteger los datos de los usuarios y la privacidad de los clientes es un desafío difícil que todo desarrollador debe afrontar.<span class="Apple-converted-space"> </span><a href="https://firebase.google.com/products/auth">Firebase Authentication</a><span class="Apple-converted-space"> </span>es una solución de identidad de extremo a extremo que facilita el registro y la administración de tus usuarios.</p><p>Nos entusiasma compartir la nueva función de autenticación en colaboración con<span class="Apple-converted-space"> </span><a href="https://cloud.google.com/identity-platform">Google Cloud Identity Platform</a><span class="Apple-converted-space"> </span>que te ayuda a proteger tus usuarios.</p><figure class="figure-block"><img alt="Nueva Firebase Authentication con funciones de Identity Platform" class="figure-image" src="https://firebasestorage.googleapis.com/v0/b/first-class-blog.appspot.com/o/posts%2Fwnif2022-auth_1600x800.webp?alt=media&token=74afe156-4eb9-4f72-b238-c1e214604273" style="max-width: 100%;" title="New Firebase Authentication with Identity Platform features" /><figcaption class="figure-caption">Nueva Firebase Authentication con funciones de Identity Platform</figcaption></figure><p>En primer lugar, lanzamos la autenticación de varios factores (MFA) para ayudar a proteger las cuentas de tus usuarios, incluso si sus contraseñas están comprometidas. En segundo lugar, agregamos compatibilidad con OpenID Connect estándar y SAML, así puedes usar una gran variedad de métodos de registro, como Slack y Discord, sin tener que esperar integraciones personalizadas.</p><p>En tercer lugar, para ayudarte a crear requisitos personalizados para el registro o inicio de sesión, lanzamos funciones de bloqueo que se ejecutan de forma sincrónica y pueden implementar cualquier lógica que admita Cloud Functions para Firebase. Finalmente, para garantizar que todos los cambios de la configuración de autenticación sean auditables y que puedas obtener estadísticas del uso de la autenticación, agregamos una auditoría completa y registro de actividad.</p><p>Puedes probar todas estas funciones hoy si actualizas la instancia de Firebase Authentication en<span class="Apple-converted-space"> </span><a href="http://firebase.google.com/console">Firebase Console</a>.</p><p>Además, también actualizamos las reglas de seguridad en<span class="Apple-converted-space"> </span><a href="https://firebase.google.com/products/storage">Cloud Storage</a> para Firebase para respaldar las solicitudes del servidor y asegurar que cada usuario solo tenga acceso a sus propios datos. Esta nueva funcionalidad te permite crear permisos flexibles para proteger el acceso a archivos de almacenamiento basados en datos dentro de Firestore.</p><figure class="figure-block"><img alt="El nuevo método firestore.get en las reglas de seguridad de Cloud Storage para Firebase te permite configurar permisos basados en datos dentro de Firestore." class="figure-image" src="https://firebasestorage.googleapis.com/v0/b/first-class-blog.appspot.com/o/posts%2Fwnif2022-rules_1600x800.webp?alt=media&token=64c86804-9e30-4247-83be-49abbb1e8838" style="max-width: 100%;" title="New `firestore.get` method in the security rules for Cloud Storage for Firebase to set file permissions based on data in Firestore." /><figcaption class="figure-caption">El nuevo método firestore.get en las reglas de seguridad de Cloud Storage para Firebase te permite configurar permisos basados en datos dentro de Firestore.</figcaption></figure><p>Consulta nuestra<span class="Apple-converted-space"> </span><a href="https://firebase.google.com/docs/rules/simulator">documentación</a><span class="Apple-converted-space"> </span>en Playground Rules, a las que puedes acceder en Firebase Console.</p><h4 id="new-extension-marketplace-to-easily-browse-and-find-extensions">Nueva extensión de Marketplace para navegar fácilmente y encontrar extensiones.</h4><p><a href="https://firebase.google.com/products/extensions">Las extensiones de Firebase<span class="Apple-converted-space"> </span></a>son conjuntos de código preempaquetados que permiten agregar con facilidad funciones principales a tu app desde Google y otras empresas en las que confías, con un código mínimo y sin necesidad de aprender muchas API de terceros diferentes.</p><p>Nos entusiasma presentar<span class="Apple-converted-space"> </span><a href="https://extensions.dev">Extensions Marketplace</a>, una nueva plataforma para descubrir y encontrar las extensiones que se adaptan a tus necesidades. También vamos a presentar la nueva extensión de terceros para agregar búsqueda, chat y procesamiento de pagos a tu app. Con la nueva extensión<span class="Apple-converted-space"> </span><a href="https://www.vonage.com/">Vonage</a>, puedes brindar soporte técnico a tus clientes con videochat. La extensión<span class="Apple-converted-space"> </span><a href="https://www.meilisearch.com/">Meilisearch</a><span class="Apple-converted-space"> </span>te permite buscar fácilmente documentos en Firestore y la extensión<span class="Apple-converted-space"> </span><a href="https://www.purchasely.com/">Purchasely</a><span class="Apple-converted-space"> </span>simplifica la integración de pagos en apps.</p><figure class="figure-block"><img alt="Nuevo Extensions Marketplace" class="figure-image" src="https://firebasestorage.googleapis.com/v0/b/first-class-blog.appspot.com/o/posts%2Fwnif2022-marketplace_1600x800.webp?alt=media&token=d0c69466-83f0-4cb7-b771-aedc31bf28c6" style="max-width: 100%;" title="New Extensions Marketplace" /><figcaption class="figure-caption">Nuevo Extensions Marketplace</figcaption></figure><p>¡También te brindamos la habilidad de compilar extensiones para tus propias apps por medio del programa Provider Alpha!</p><p>Echa un vistazo a<span class="Apple-converted-space"> </span><a href="https://extensions.dev">extensions.dev</a>, explora las Extensiones de Firebase y regístrate en el programa de extensiones Provider Alpha para comenzar a compilar tus propias extensiones. Nos encantará conocer tus comentarios.</p><h3 id="improve-app-quality-and-user-engagement">Mejora la calidad de la app y la interacción de los usuarios</h3><p>Además de acelerar el desarrollo de apps, Firebase brinda estadísticas viables y herramientas fáciles de usar que te ayudarán a ejecutar apps de alto rendimiento y ofrecer la mejor experiencia a los usuarios.</p><h4 id="more-efficient-testing-across-devices-with-test-lab">Pruebas más eficientes entre dispositivos con Test Lab</h4><p>Una investigación demostró que el<span class="Apple-converted-space"> </span><a href="https://qualitestgroup.com/news/survey-88-of-app-users-will-abandon-apps-based-on-bugs-and-glitches/">88 %</a><span class="Apple-converted-space"> </span>de los usuarios dejan de usar las apps en función de los errores y las fallas. Por lo tanto, mantener una app de calidad es crucial para alcanzar el éxito. Es por esto que Firebase te brinda herramientas para ejecutar pruebas e identificar problemas a tiempo, de modo que puedas mantener tantos usuarios como sea posible.</p><p><a href="https://firebase.google.com/products/test-lab">Firebase Test Lab</a><span class="Apple-converted-space"> </span>es una app basada en la nube que permite probar productos que se integran con tu flujo de trabajo actual. Además, te permite hacer pruebas en tu app en miles de dispositivos físicos y virtuales, de modo que puedas detectar los errores antes del lanzamiento. Sin embargo, a medida que tus apps crecen, se vuelve mucho más difícil administrar y ejecutar pruebas de configuración consistentes y a escala. Para ayudar a estandarizar la configuración de pruebas, presentamos<span class="Apple-converted-space"> </span><strong>la nueva versión preliminar de compatibilidad con Firebase Test Lab en dispositivos administrados por Gradle</strong></p><figure class="figure-block"><img alt="Compatibilidad con Firebase Test Lab en dispositivos administrados por Gradle" class="figure-image" src="https://firebasestorage.googleapis.com/v0/b/first-class-blog.appspot.com/o/posts%2Fwnif2022-testlab_1600x800.webp?alt=media&token=274d3698-ec3f-40f4-81eb-e1ae08f6adb8" style="max-width: 100%;" title="Firebase Test Lab support in Gradle Managed Devices" /><figcaption class="figure-caption">Compatibilidad con Firebase Test Lab en dispositivos administrados por Gradle</figcaption></figure><p>Con esta integración, puedes obtener acceso a todos los dispositivos compatibles con Firebase Test Lab con un formato de configuración de prueba simple y consistente, que se implementó en dispositivos Android administrados por Gradle. Solo debes usar una línea de comandos y no deberás ingresar a Firebase Console.</p><p>Parar probarlo, actualiza a la última versión preliminar del complemento de Gradle para Android 8.0.0.</p><h4 id="even-more-features-come-to-our-crashlytics--android-studio-integration">Más funciones se incluyen en nuestra integración de Crashlytics + Android Studio.</h4><p><a href="https://firebase.blog/posts/2022/05/whats-new-at-google-io#crashlytics-integration-with-android--play-streamline-troubleshooting">A principios de este año,</a><span class="Apple-converted-space"> </span>presentamos la nueva ventana<span class="Apple-converted-space"> </span><strong><a href="https://developer.android.com/studio/preview/features#aqi">Insights de calidad de la app</a></strong>, una integración entre Crashlytics y Android Studio que te permite ver informes de fallas y navegar desde estas hasta el código dentro del contexto del IDE, lo que te permite encontrar y corregir fallas mucho más rápido. Nos complace informar que la ventana “Insights de calidad de la app” pasó al canal beta en Android Studio Electric Eel.</p><figure class="figure-block"><img alt="Actualiza a la última versión Canary de Android Studio Flamingo para probar nuevas funciones en la ventana “Insights de calidad de la app”." class="figure-image" src="https://firebasestorage.googleapis.com/v0/b/first-class-blog.appspot.com/o/posts%2Fintegration-crashlytics-android-studio_1600x800.webp?alt=media&token=4214023e-efbb-4acd-a17d-072405520de8" style="max-width: 100%;" title="Upgrade to the latest canary release of Android Studio Flamingo to try new features in the App Quality Insights Window" /><figcaption class="figure-caption">Actualiza a la última versión Canary de Android Studio Flamingo para probar nuevas funciones en la ventana “Insights de calidad de la app”.</figcaption></figure><p>Además, presentaremos más funciones de Crashlytics<span class="Apple-converted-space"> </span><em>directamente</em><span class="Apple-converted-space"> </span>en Android Studio, en la última versión Canary de Android Studio Flamingo. Ahora puedes filtrar por fallas en Play Tracks, lo que significa que puedes filtrar las fallas que se encontraron en tu compilación interna y dar prioridad a los problemas que afectan a tus usuarios en producción. Por otra parte, agregamos<span class="Apple-converted-space"> </span><a href="https://firebase.blog/posts/2021/11/whats-new-at-Firebase-Summit-2021#crashlytics-adds-application-not-responding-anr-reports-and-signals">señales</a><span class="Apple-converted-space"> </span>a la ventana “Insights de calidad de la app” para ayudarte a identificar rápidamente las características de las fallas, por ejemplo, si son nuevas, antiguas, repetitivas o una regresión. Por último, ahora puedes agregar notas a las fallas para informarle a tu equipo cómo progresa tu corrección y cerrar el problema de forma adecuada en Android Studio.</p><p>Prueba estas características en el último<span class="Apple-converted-space"> </span><a href="d.android.com/studio/preview">lanzamiento Canary de Android Studio Flamingo</a>.</p><h4 id="improve-user-engagement-with-remote-config-personalization">Mejora la participación del usuario con personalización de Remote Config</h4><p>Una parte importante de brindar una gran experiencia es adaptar tu app a las necesidades y preferencias individuales de cada usuario. Pero hacer esto de forma manual es un proceso engorroso que lleva mucho tiempo.<span class="Apple-converted-space"> </span><a href="https://firebase.google.com/docs/remote-config/personalization">La personalización de Remote Config</a><span class="Apple-converted-space"> </span>puede ayudar<span class="Apple-converted-space"> </span><em>de forma automática</em><span class="Apple-converted-space"> </span>a optimizar las experiencias del usuario a fin de maximizar los objetivos que quieres, como el tiempo de participación del usuario, la utilización de funciones o los clics en anuncios con la potencia del aprendizaje automático de Google.</p><p>Ahora, además de ofrecer una optimización para un tipo de evento en particular en tu app, la personalización también tiene en cuenta el valor de ese evento. Entonces, por ejemplo, además de maximizar el número total de compra directa desde la app, puedes optimizar la<span class="Apple-converted-space"> </span><em>cantidad de dólares</em><span class="Apple-converted-space"> </span>en esas compras directas.</p><figure class="figure-block"><img alt="Lyrebird aumenta los ingresos por anuncios un 4% con la personalización de Remote Config." class="figure-image" src="https://firebasestorage.googleapis.com/v0/b/first-class-blog.appspot.com/o/posts%2Fwnif2022-lyrbird_1600x800.webp?alt=media&token=83b4e9c8-8b14-4cf0-9ae0-e47c1515aab5" style="max-width: 100%;" title="Lyrebird increases ad revenue by 4% using the Remote Config Personalization" /><figcaption class="figure-caption">Lyrebird aumenta los ingresos por anuncios un 4% con la personalización de Remote Config.</figcaption></figure><p><a href="https://lyrebirdstudio.net/">Lyrebird Studio</a>, una empresa que hace una colección de apps móviles para editar fotos, quiso encontrar la frecuencia exacta de muestra de anuncios, pero sabía que no sería una solución que le sirviera a todo el mundo. Con la personalización de Remote Config, proporcionó los valores de impresión de los anuncios en sus apps y permitió optimizar la frecuencia de los anuncios mientras se tiene en cuenta el valor de los que se muestran. Esto generó un<span class="Apple-converted-space"> </span><strong>aumento de un 4% de los ingresos</strong><span class="Apple-converted-space"> </span>con un mínimo esfuerzo.</p><p>Para comenzar a usar la personalización, echa un vistazo a nuestra<span class="Apple-converted-space"> </span><a href="https://firebase.google.com/docs/remote-config">documentación</a>.</p><h3 id="looking-ahead">Planes futuros</h3><p>Estas son algunas de las muchas formas en las que hacemos funcionar mejor a Firebase con productos Google y el amplio ecosistema de herramientas de terceros. De esta manera, puedes acelerar el desarrollo de tu app y publicarla con confianza. Mientras miramos hacia el futuro, continuaremos ayudándote a que tu app ofrezca a tus usuarios y tu empresa la mejor solución posible.</p><p>Para obtener más recursos y contenido de la Firebase Summit 2022, echa un vistazo a nuestro<span class="Apple-converted-space"> </span><a href="https://firebase.google.com/summit">sitio web del evento</a><span class="Apple-converted-space"> </span>y si quieres espiar lo que se viene,<span class="Apple-converted-space"> </span><a href="http://firebase.google.com/alpha">regístrate en nuestro programa Alpha.</a></p><p>Y, como siempre, puedes mantenerte al tanto de las últimas novedades y las prácticas recomendadas sobre el uso de todos los productos de Firebase suscribiéndote a<span class="Apple-converted-space"> </span><a href="https://www.youtube.com/firebase">nuestro canal de YouTube</a><span class="Apple-converted-space"> </span>o<span class="Apple-converted-space"> </span><a href="https://firebase.blog/">siguiéndonos en nuestro blog</a><span class="Apple-converted-space"> </span>o<span class="Apple-converted-space"> </span><a href="https://twitter.com/firebase">en Twitter</a>.</p></article>Google Developers LATAMhttp://www.blogger.com/profile/05105089662475084319noreply@blogger.com0tag:blogger.com,1999:blog-218264512262097577.post-38531796119944976562022-10-12T13:45:00.000-03:002022-10-20T13:45:36.999-03:00Presentación de Flutter 3<span id="docs-internal-guid-db7e6524-7fff-f67b-5bfe-60de020b9498"><h1 dir="ltr" style="line-height: 1.3800000000000001; margin-bottom: 0pt; margin-top: 18pt;"><br /></h1><p dir="ltr" style="line-height: 1.3800000000000001; margin-bottom: 0pt; margin-top: 0pt;"><span style="color: #666666; font-family: "Google Sans", sans-serif; font-size: 12pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">El fin de nuestro recorrido hacia el desarrollo de la IU multiplataforma en teléfonos, computadoras de escritorio y la Web</span></p><br /><p dir="ltr" style="line-height: 1.3800000000000001; margin-bottom: 0pt; margin-top: 0pt;"><span style="font-family: "Google Sans", sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; font-weight: 700; vertical-align: baseline; white-space: pre-wrap;">Nos complace anunciar el lanzamiento de Flutter 3 como parte de la presentación de Google I/O. Flutter 3 completa nuestro paso de un marco de trabajo centrado en dispositivos móviles a uno multiplataforma, con compatibilidad con apps de escritorio macOS y Linux, además de mejoras en la integración de Firebase, nuevas funciones de productividad y rendimiento, y compatibilidad con Apple Silicon. </span></p><br /><p dir="ltr" style="line-height: 1.3800000000000001; margin-bottom: 0pt; margin-top: 0pt;"><span style="font-family: "Google Sans", sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;"><span style="border: none; display: inline-block; height: 395px; overflow: hidden; width: 701px;"><img height="395" src="https://lh4.googleusercontent.com/x7lkraQk0gS-ufejDcixD9Jgz24kMDlj2Deti_RMi-89eYp5vbnRuDWbvzm7ZeqZc_jVgYW57WT7Jchhkt7LcO6MTzlV5NXI0YEjfJ3NZcxVOpRc7OM514POtOr8SwViWqDdMAKzw_OChbKXlTU-ibAKGFp2HCZs0ygdVgvJ7egd7Yw2bopO1L54W-Mx1yl1DEEd" style="margin-left: 0px; margin-top: 0px;" width="701" /></span></span></p><br /><h2 dir="ltr" style="line-height: 1.3800000000000001; margin-bottom: 6pt; margin-top: 18pt;"><span style="font-family: "Google Sans", sans-serif; font-size: 16pt; font-variant-east-asian: normal; font-variant-numeric: normal; font-weight: 400; vertical-align: baseline; white-space: pre-wrap;">El recorrido hacia Flutter 3</span></h2><p dir="ltr" style="line-height: 1.3800000000000001; margin-bottom: 0pt; margin-top: 0pt;"><span style="font-family: "Google Sans", sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">Comenzamos Flutter como un intento de revolucionar el desarrollo de apps: combinamos el modelo de desarrollo repetitivo de la Web con la renderización de gráficos acelerada por hardware y el control a nivel de píxeles, que antes eran exclusivos de los juegos. Durante los últimos cuatro años desde la versión beta de Flutter 1.0, compilamos de forma gradual sobre esta base, agregando nuevas capacidades de marco de trabajo y nuevos widgets, una integración más profunda con las plataformas subyacentes, una gran biblioteca de paquetes y muchas mejoras de rendimiento y herramientas.</span></p><br /><p dir="ltr" style="line-height: 1.3800000000000001; margin-bottom: 0pt; margin-top: 0pt;"><span style="font-family: "Google Sans", sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;"><span style="border: none; display: inline-block; height: 147px; overflow: hidden; width: 701px;"><img height="147" src="https://lh3.googleusercontent.com/9NBF3Qj8FXFkn9eog2ER0yAa_F8P1rkjV7k4uvAno-5W8Tb1Tlzb_5HGejNBAooQYsG-yuVhPI8tGDfn2otfcI-C_bfqk5pU6xpIPh2-BM-2TL69dxHVVqjRs_ytHPIRg-1Q_e41oT6Oh_GVGH6Ko_h0ahSYNV92CEmLTDUr2R-9LVd_Sk8IgCyZyVQFK8u3N0o_" style="margin-left: 0px; margin-top: 0px;" width="701" /></span></span></p><br /><p dir="ltr" style="line-height: 1.3800000000000001; margin-bottom: 0pt; margin-top: 0pt;"><span style="font-family: "Google Sans", sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">A medida que el producto maduraba, más desarrolladores comenzaron a usarlo para compilar apps. Hoy en día, existen más de 500 000 apps publicadas con Flutter. Los análisis de empresas de investigación como </span><a href="https://www.data.ai/en/" style="text-decoration-line: none;"><span style="color: #1155cc; font-family: "Google Sans", sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">data.ai</span></a><span style="font-family: "Google Sans", sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">, junto con los testimonios públicos, demuestran que una </span><a href="https://flutter.dev/showcase" style="text-decoration-line: none;"><span style="color: #1155cc; font-family: "Google Sans", sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space: pre-wrap;">amplia lista de clientes</span></a><span style="font-family: "Google Sans", sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;"> usan Flutter en muchos ámbitos: desde apps de redes sociales como </span><a href="https://play.google.com/store/apps/details?id=com.tencent.mm&hl=en_US&gl=US" style="text-decoration-line: none;"><span style="color: #1155cc; font-family: "Google Sans", sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space: pre-wrap;">WeChat</span></a><span style="font-family: "Google Sans", sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;"> hasta apps financieras y bancarias como </span><a href="https://apps.apple.com/us/app/betterment-investing-saving/id393156562" style="text-decoration-line: none;"><span style="color: #1155cc; font-family: "Google Sans", sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space: pre-wrap;">Betterment</span></a><span style="font-family: "Google Sans", sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;"> y </span><a href="https://play.google.com/store/apps/details?id=com.nu.production&hl=en_US&gl=US" style="text-decoration-line: none;"><span style="color: #1155cc; font-family: "Google Sans", sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space: pre-wrap;">Nubank</span></a><span style="font-family: "Google Sans", sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">; desde apps comerciales como </span><a href="https://play.google.com/store/apps/details?id=com.zzkko&hl=en_US&gl=US" style="text-decoration-line: none;"><span style="color: #1155cc; font-family: "Google Sans", sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space: pre-wrap;">SHEIN</span></a><span style="font-family: "Google Sans", sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;"> y </span><a href="https://apps.apple.com/us/app/trip-com-hotels-flights-trains/id681752345" style="text-decoration-line: none;"><span style="color: #1155cc; font-family: "Google Sans", sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space: pre-wrap;">trip.com</span></a><span style="font-family: "Google Sans", sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;"> hasta apps de estilo de vida como </span><a href="https://fastic.com/" style="text-decoration-line: none;"><span style="color: #1155cc; font-family: "Google Sans", sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space: pre-wrap;">Fastic</span></a><span style="font-family: "Google Sans", sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;"> y </span><a href="https://auspreneur.com.au/tabcorp-adopts-googles-flutter-platform/" style="text-decoration-line: none;"><span style="color: #1155cc; font-family: "Google Sans", sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space: pre-wrap;">Tabcorp</span></a><span style="font-family: "Google Sans", sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">; desde apps complementarias como </span><a href="https://www.press.bmwgroup.com/global/article/detail/T0328610EN/the-my-bmw-app:-new-features-and-tech-insights-for-march-2021?language=en" style="text-decoration-line: none;"><span style="color: #1155cc; font-family: "Google Sans", sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space: pre-wrap;">My BMW</span></a><span style="font-family: "Google Sans", sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;"> hasta instituciones públicas como el </span><a href="https://apps.apple.com/app/id1506827551" style="text-decoration-line: none;"><span style="color: #1155cc; font-family: "Google Sans", sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space: pre-wrap;">gobierno de Brasil</span></a><span style="font-family: "Google Sans", sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">. </span></p><br /><p dir="ltr" style="line-height: 1.3800000000000001; margin-bottom: 0pt; margin-top: 0pt;"><span style="font-family: "Google Sans", sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;"><span style="border: none; display: inline-block; height: 343px; overflow: hidden; width: 701px;"><img height="343" src="https://lh3.googleusercontent.com/dB-YOc0e7U5xBGIK9Ol9Pa6NCslk3L356InSZHkghrJEBlycZhnDthizaZRyJfzc2nlqSLcZnygSKRvHRjBdAgW3tSLkXTGafigJd2VPn-EhNHMcjDHcpq4r0Xwi-8vjjB6UYMmXTknlCIgM4e-GwUKnAmmZQJFhyDo4D4lv9taC7whoz38RGPPN7lipC6i5ELMj" style="margin-left: 0px; margin-top: 0px;" width="701" /></span></span></p><p dir="ltr" style="line-height: 1.3800000000000001; margin-bottom: 0pt; margin-top: 0pt;"><a href="https://www.youtube.com/watch?v=8RmsstcNE1Y" style="text-decoration-line: none;"><span style="color: #1155cc; font-family: "Google Sans", sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">https://www.youtube.com/watch?v=8RmsstcNE1Y</span></a></p><br /><p dir="ltr" style="line-height: 1.3800000000000001; margin-bottom: 0pt; margin-top: 0pt;"><span style="font-family: "Google Sans", sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">Los desarrolladores nos cuentan que Flutter ayuda a compilar apps atractivas de forma más rápida para más plataformas. Nuestro estudio de usuarios reciente demostró lo siguiente:</span></p><ul style="margin-bottom: 0; margin-top: 0; padding-inline-start: 48px;"><li aria-level="1" dir="ltr" style="font-family: "Google Sans", sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;"><p dir="ltr" role="presentation" style="line-height: 1.3800000000000001; margin-bottom: 0pt; margin-top: 0pt;"><span style="font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">91% de los desarrolladores coincidieron en que Flutter redujo el tiempo de compilación y publicación de una app.</span></p></li><li aria-level="1" dir="ltr" style="font-family: "Google Sans", sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;"><p dir="ltr" role="presentation" style="line-height: 1.3800000000000001; margin-bottom: 0pt; margin-top: 0pt;"><span style="font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">85% de los desarrolladores coincidieron en que Flutter hizo que sus apps se vieran más atractivas que antes.</span></p></li><li aria-level="1" dir="ltr" style="font-family: "Google Sans", sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;"><p dir="ltr" role="presentation" style="line-height: 1.3800000000000001; margin-bottom: 0pt; margin-top: 0pt;"><span style="font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">85% coincidió en que les permitió publicar sus apps para más plataformas que antes.</span></p></li></ul><br /><p dir="ltr" style="line-height: 1.3800000000000001; margin-bottom: 0pt; margin-top: 0pt;"><span style="font-family: "Google Sans", sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">En una </span><a href="https://tech-blog.sonos.com/posts/renovating-setup-with-flutter/" style="text-decoration-line: none;"><span style="color: #1155cc; font-family: "Google Sans", sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space: pre-wrap;">entrada de blog reciente de Sonos</span></a><span style="font-family: "Google Sans", sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;"> sobre su experiencia de configuración renovada, se recalcó este segundo punto.</span></p><p dir="ltr" style="line-height: 1.3800000000000001; margin-bottom: 0pt; margin-left: 36pt; margin-top: 0pt;"><span style="font-family: "Google Sans", sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">“No es una exageración decir que [Flutter] desbloqueó un grado ‘</span><span style="font-family: "Google Sans", sans-serif; font-size: 11pt; font-style: italic; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">premium</span><span style="font-family: "Google Sans", sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">’ diferente a todo lo que nuestro equipo entregó antes. Lo más importante para nuestros diseñadores es la facilidad con la que se pueden crear nuevas IU, ya que significa que nuestro equipo dedica menos tiempo a decir ‘no’ a las especificaciones y más tiempo a aplicar iteraciones en ellas. Si esto parece valer la pena, te recomendamos que pruebes Flutter. Nosotros nos alegramos de haberlo hecho”.</span></p><h2 dir="ltr" style="line-height: 1.3800000000000001; margin-bottom: 6pt; margin-top: 18pt;"><span style="font-family: "Google Sans", sans-serif; font-size: 16pt; font-variant-east-asian: normal; font-variant-numeric: normal; font-weight: 400; vertical-align: baseline; white-space: pre-wrap;">Presentación de Flutter 3</span></h2><p dir="ltr" style="line-height: 1.3800000000000001; margin-bottom: 0pt; margin-top: 0pt;"><span style="font-family: "Google Sans", sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">Hoy presentamos Flutter 3, que es el fin de nuestro recorrido para completar las plataformas compatibles con Flutter. Con Flutter 3, puedes compilar experiencias atractivas para seis plataformas a partir de una sola base de código, brindar a los desarrolladores una productividad sin precedentes y permitir que las startups aporten nuevas ideas al mercado accesible desde el primer día. </span></p><br /><p dir="ltr" style="line-height: 1.3800000000000001; margin-bottom: 0pt; margin-top: 0pt;"><span style="font-family: "Google Sans", sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">En versiones anteriores, complementamos iOS y Android con la </span><a href="https://medium.com/flutter/flutter-web-support-hits-the-stable-milestone-d6b84e83b425" style="text-decoration-line: none;"><span style="color: #1155cc; font-family: "Google Sans", sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space: pre-wrap;">Web</span></a><span style="font-family: "Google Sans", sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;"> y la </span><a href="https://medium.com/flutter/announcing-flutter-for-windows-6979d0d01fed" style="text-decoration-line: none;"><span style="color: #1155cc; font-family: "Google Sans", sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space: pre-wrap;">compatibilidad con Windows</span></a><span style="font-family: "Google Sans", sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">, y ahora </span><span style="font-family: "Google Sans", sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; font-weight: 700; vertical-align: baseline; white-space: pre-wrap;">Flutter 3 agrega compatibilidad estable con las apps de macOS y Linux.</span><span style="font-family: "Google Sans", sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;"> Agregar compatibilidad con la plataforma no es tan solo renderizar píxeles: incluye nuevos modelos de entrada e interacción, compatibilidad con la recopilación y compilación, accesibilidad e internacionalización e integración específica de la plataforma. Nuestro objetivo es brindarte flexibilidad para que aproveches el sistema operativo subyacente mientras compartes tantos elementos de IU y lógica como quieras. </span></p><br /><p dir="ltr" style="line-height: 1.3800000000000001; margin-bottom: 0pt; margin-top: 0pt;"><span style="font-family: "Google Sans", sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">En macOS, invertimos en la compatibilidad con Intel y Apple Silicon, con la compatibilidad con </span><a href="https://developer.apple.com/documentation/apple-silicon/building-a-universal-macos-binary" style="text-decoration-line: none;"><span style="color: #1155cc; font-family: "Google Sans", sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space: pre-wrap;">Universal Binary</span></a><span style="font-family: "Google Sans", sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">, que permite a las apps empaquetar ejecutables que se ejecutan de forma nativa en ambas arquitecturas. En Linux, Canonical y Google colaboraron para ofrecer la mejor opción de desarrollo altamente integrada. </span></p><br /><p dir="ltr" style="line-height: 1.3800000000000001; margin-bottom: 0pt; margin-top: 0pt;"><span style="font-family: "Google Sans", sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">Un buen ejemplo de cómo Flutter permite disfrutar de experiencias de escritorio atractivas es </span><a href="https://superlist.com/" style="text-decoration-line: none;"><span style="color: #1155cc; font-family: "Google Sans", sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space: pre-wrap;">Superlist</span></a><span style="font-family: "Google Sans", sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">, cuya versión beta se lanza hoy. Superlist brinda colaboración sobrealimentada mediante una nueva app que combina listas, tareas y contenido de forma libre en una nueva versión de las listas de tareas pendientes y la planificación personal. El equipo de Superlist eligió Flutter por su capacidad para ofrecer una experiencia de escritorio rápida y de gran marca, y creemos que su progreso hasta la fecha acredita por qué demostró ser una excelente opción. </span></p><br /><p dir="ltr" style="line-height: 1.3800000000000001; margin-bottom: 0pt; margin-top: 0pt;"><span style="font-family: "Google Sans", sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;"><span style="border: none; display: inline-block; height: 395px; overflow: hidden; width: 701px;"><img height="452.6235353946686" src="https://lh4.googleusercontent.com/Lb8_9c8rlCfeX5RdSu-pc0e9ZS2t-ftKFvuQLWW7r4UE1W2JpvwMapocNTFuUPwtbeL55A0djizdtqcRbbikjrFpyjTrONYoJ2kg5pPjKAt0NZSnkNnc6eeyoYgoiV1ZU_UElM0seT28xgr9A40c46GQJQFYg1Z9ObdEZ9KkzVzHO241fdaRyCgVUGK5ONXrXs9D" style="margin-left: 0px; margin-top: -28.791381679475307px;" width="701" /></span></span></p><p dir="ltr" style="line-height: 1.3800000000000001; margin-bottom: 0pt; margin-top: 0pt;"><a href="https://www.youtube.com/watch?v=YRuQj7mlH2I&amp;amp;feature=youtu.be" style="text-decoration-line: none;"><span style="color: #1155cc; font-family: "Google Sans", sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">https://www.youtube.com/watch?v=YRuQj7mlH2I&feature=youtu.be</span></a><span style="font-family: "Google Sans", sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;"> </span></p><br /><p dir="ltr" style="line-height: 1.3800000000000001; margin-bottom: 0pt; margin-top: 0pt;"><span style="font-family: "Google Sans", sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">Flutter 3 también mejora muchos de los aspectos básicos, gracias al rendimiento mejorado, la compatibilidad con Material You y las actualizaciones de productividad. </span></p><br /><p dir="ltr" style="line-height: 1.3800000000000001; margin-bottom: 0pt; margin-top: 0pt;"><span style="font-family: "Google Sans", sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">Además del trabajo ya mencionado, con esta versión Flutter es totalmente nativa en </span><a href="https://support.apple.com/en-us/HT211814" style="text-decoration-line: none;"><span style="color: #1155cc; font-family: "Google Sans", sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">Apple Silicon</span></a><span style="font-family: "Google Sans", sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;"> para el </span><span style="font-family: "Google Sans", sans-serif; font-size: 11pt; font-style: italic; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">desarrollo</span><span style="font-family: "Google Sans", sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">. Si bien Flutter es compatible desde su lanzamiento con dispositivos Apple con tecnología M1, ahora aprovecha al máximo la </span><a href="https://medium.com/dartlang/announcing-dart-2-14-b48b9bb2fb67" style="text-decoration-line: none;"><span style="color: #1155cc; font-family: "Google Sans", sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space: pre-wrap;">compatibilidad de Dart con Apple Silicon</span></a><span style="font-family: "Google Sans", sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">, lo que permite una compilación mucho más rápida en dispositivos con tecnología M1 y compatibilidad con </span><a href="https://developer.apple.com/documentation/apple-silicon/building-a-universal-macos-binary" style="text-decoration-line: none;"><span style="color: #1155cc; font-family: "Google Sans", sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space: pre-wrap;">binarios universales</span></a><span style="font-family: "Google Sans", sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;"> para apps de macOS. </span></p><br /><p dir="ltr" style="line-height: 1.3800000000000001; margin-bottom: 0pt; margin-top: 0pt;"><span style="font-family: "Google Sans", sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">Nuestro trabajo para </span><a href="https://m3.material.io/" style="text-decoration-line: none;"><span style="color: #1155cc; font-family: "Google Sans", sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space: pre-wrap;">Material Design 3</span></a><span style="font-family: "Google Sans", sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;"> está prácticamente completo en esta versión, lo que permite a los desarrolladores aprovechar un sistema de diseño multiplataforma adaptable que ofrece esquemas de colores dinámicos y componentes visuales actualizados:</span></p><p dir="ltr" style="line-height: 1.3800000000000001; margin-bottom: 0pt; margin-top: 0pt;"><span style="font-family: "Google Sans", sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;"><span style="border: none; display: inline-block; height: 364px; overflow: hidden; width: 701px;"><img height="364" src="https://lh4.googleusercontent.com/s-MCDLjxtmYpDdxKPR-nbX2zrF1Bm5bQ1AMMEnxQc9xTRrioRb16hMQGniAviE2A4h9g_o8Y2WNhnmSnFSTVeXgyOkxe7DsrFtmR5CF6vtNptywYsCOLY6bqdhZ72b6DN2PFTMvuH2B1P6YH46BEhE3rwP9jiCEclth7ErY8O1qmg3OFILrD79SX81JKVtbr8CAF" style="margin-left: 0px; margin-top: 0px;" width="701" /></span></span></p><br /><p dir="ltr" style="line-height: 1.3800000000000001; margin-bottom: 0pt; margin-top: 0pt;"><span style="font-family: "Google Sans", sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">En nuestra entrada de blog técnica y detallada se explican estas y muchas otras funciones nuevas en Flutter 3. </span></p><br /><p dir="ltr" style="line-height: 1.3800000000000001; margin-bottom: 0pt; margin-top: 0pt;"><span style="font-family: "Google Sans", sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">Flutter funciona con Dart, un lenguaje portátil de alta productividad para el desarrollo multiplataforma. En este ciclo, nuestro trabajo en Dart incluye nuevas funciones de lenguaje que reducen el código estándar y ayudan a la legibilidad, compatibilidad con RISC-V experimental, un linter actualizado y nueva documentación. Para obtener más detalles sobre todas las nuevas mejoras en Dart 2.17, consulta el </span><a href="https://medium.com/dartlang" style="text-decoration-line: none;"><span style="color: #1155cc; font-family: "Google Sans", sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space: pre-wrap;">blog</span></a><span style="font-family: "Google Sans", sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">.</span></p><h2 dir="ltr" style="line-height: 1.3800000000000001; margin-bottom: 6pt; margin-top: 18pt;"><span style="font-family: "Google Sans", sans-serif; font-size: 16pt; font-variant-east-asian: normal; font-variant-numeric: normal; font-weight: 400; vertical-align: baseline; white-space: pre-wrap;">Firebase y Flutter</span></h2><p dir="ltr" style="line-height: 1.3800000000000001; margin-bottom: 0pt; margin-top: 0pt;"><span style="font-family: "Google Sans", sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">Desde luego, la compilación de una app no es solo un marco de trabajo de IU. Las personas que publican apps necesitan un paquete completo de herramientas que les sirvan para compilar, lanzar y operar tus apps, incluidos servicios como autenticación, almacenamiento de datos, funciones en la nube y pruebas de dispositivos. Existe una variedad de servicios compatibles con Flutter, como </span><a href="https://docs.sentry.io/platforms/flutter/" style="text-decoration-line: none;"><span style="color: #1155cc; font-family: "Google Sans", sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space: pre-wrap;">Sentry</span></a><span style="font-family: "Google Sans", sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">, </span><a href="https://appwrite.io/docs/getting-started-for-flutter" style="text-decoration-line: none;"><span style="color: #1155cc; font-family: "Google Sans", sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space: pre-wrap;">AppWrite</span></a><span style="font-family: "Google Sans", sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;"> y </span><a href="https://docs.amplify.aws/start/q/integration/flutter/" style="text-decoration-line: none;"><span style="color: #1155cc; font-family: "Google Sans", sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space: pre-wrap;">AWS Amplify</span></a><span style="font-family: "Google Sans", sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">. </span></p><br /><p dir="ltr" style="line-height: 1.3800000000000001; margin-bottom: 0pt; margin-top: 0pt;"><span style="font-family: "Google Sans", sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">Google ofrece Firebase para servicios de apps y </span><a href="https://www.slashdata.co/developer-program-benchmarking/?" style="text-decoration-line: none;"><span style="color: #1155cc; font-family: "Google Sans", sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space: pre-wrap;">estudios de análisis comparativos de desarrolladores realizados por SlashData</span></a><span style="font-family: "Google Sans", sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;"> demuestran que el 63% de los desarrolladores de Flutter usan Firebase en sus apps. Entonces, en las últimas versiones, trabajamos con Firebase para expandir e integrar mejor a Flutter como una integración de primera clase. Por ejemplo, pasamos los complementos de Firebase para Flutter a la versión 1.0, agregamos mejores documentación y herramientas e incluimos nuevos widgets, como </span><a href="https://pub.dev/packages/flutterfire_ui" style="text-decoration-line: none;"><span style="color: #1155cc; font-family: "Google Sans", sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space: pre-wrap;">FlutterFire UI</span></a><span style="font-family: "Google Sans", sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">, que brindan a los desarrolladores una IU reutilizable para las pantallas de autenticación y perfil.</span></p><br /><p dir="ltr" style="line-height: 1.3800000000000001; margin-bottom: 0pt; margin-top: 0pt;"><span style="font-family: "Google Sans", sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">Hoy anunciamos la graduación de la integración de Flutter/Firebase a una parte central totalmente compatible de la oferta de Firebase. Transferiremos el código fuente y la documentación al repositorio y al sitio principal de Firebase, y puedes contar con que desarrollaremos la compatibilidad de Firebase para Flutter al mismo tiempo que Android e iOS. </span></p><br /><p dir="ltr" style="line-height: 1.3800000000000001; margin-bottom: 0pt; margin-top: 0pt;"><span style="font-family: "Google Sans", sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">Además, realizamos importantes mejoras para compatibilizar las apps de Flutter mediante Crashlytics, el popular servicio de informes de fallas en tiempo real de Firebase. Con las actualizaciones del </span><a href="https://firebase.google.com/docs/crashlytics" style="text-decoration-line: none;"><span style="color: #1155cc; font-family: "Google Sans", sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space: pre-wrap;">complemento de Crashlytics para Flutter</span></a><span style="font-family: "Google Sans", sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">, puedes hacer un seguimiento de errores fatales en tiempo real, con el mismo conjunto de funciones que están disponibles para otros desarrolladores de iOS y Android. Esto incluye alertas y métricas importantes como “usuarios sin fallas”, que te ayudan a estar al tanto de la estabilidad de tus apps. El flujo de procesamiento del análisis de Crashlytics se actualizó para </span><span style="font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">mejorar la agrupación de las fallas de Flutter, lo que agiliza la clasificación, priorización y solución de problemas</span><span style="font-family: "Google Sans", sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">. Y, por último, optimizamos el proceso de configuración de los complementos para que en tan solo un par de pasos puedas comenzar a usar Crashlytics, directamente desde tus códigos Dart.</span></p><h2 dir="ltr" style="line-height: 1.3800000000000001; margin-bottom: 6pt; margin-top: 18pt;"><span style="font-family: "Google Sans", sans-serif; font-size: 16pt; font-variant-east-asian: normal; font-variant-numeric: normal; font-weight: 400; vertical-align: baseline; white-space: pre-wrap;">Kit de herramientas de juegos casuales en Flutter</span></h2><p dir="ltr" style="line-height: 1.3800000000000001; margin-bottom: 0pt; margin-top: 0pt;"><span style="font-family: "Google Sans", sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">Para la mayoría de los desarrolladores, Flutter es un marco de trabajo de apps. Sin embargo, también existe una comunidad creciente en torno al desarrollo de juegos casuales, que aprovecha la compatibilidad con gráficos acelerados por hardware que brinda Flutter, junto con motores de juegos de código abierto como </span><a href="https://flame-engine.org/" style="text-decoration-line: none;"><span style="color: #1155cc; font-family: "Google Sans", sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">Flame</span></a><span style="font-family: "Google Sans", sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">. Queremos que para los desarrolladores de juegos casuales sea más fácil comenzar su trabajo, por lo que hoy en I/O presentamos el Kit de herramientas de juegos casuales, que incluye un kit inicial de plantillas y prácticas recomendadas junto con créditos para anuncios y servicios en la nube.</span></p><br /><p dir="ltr" style="line-height: 1.3800000000000001; margin-bottom: 0pt; margin-top: 0pt;"><span style="font-family: "Google Sans", sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;"><span style="border: none; display: inline-block; height: 265px; overflow: hidden; width: 661px;"><img height="265" src="https://lh6.googleusercontent.com/dlNvUMBSFETWWi7F1Ab8uJveQJFzdU1Tx5G7qv1ngcy8zVI8HHe-nBC7vjeMWVe1asK7Ynd4Gy4QNVfF3jbf9pnVwverefOPMudSfMwdzsVfxLimTzRS_d_7Yp9jUtmj72rJ3TX1aEz8p2sdIAYKhVNRx4ds_gmLBk1BEnP5h9ew6YrrOvRUzkNzcWPlZ0JJ042t" style="margin-left: 0px; margin-top: 0px;" width="661" /></span></span></p><br /><p dir="ltr" style="line-height: 1.3800000000000001; margin-bottom: 0pt; margin-top: 0pt;"><span style="font-family: "Google Sans", sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">Aunque Flutter no está diseñado para juegos de acción en 3D de alta intensidad, incluso algunos de esos juegos recurrieron a Flutter por una IU que no es de juego, por ejemplo, títulos populares como </span><a href="https://play.google.com/store/apps/details?id=com.tencent.ig" style="text-decoration-line: none;"><span style="color: #1155cc; font-family: "Google Sans", sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space: pre-wrap;">PUBG Mobile</span></a><span style="font-family: "Google Sans", sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">, que tienen cientos de millones de usuarios. Y para I/O pensamos que veríamos hasta dónde podíamos impulsar nuestra tecnología, por lo que creamos un divertido juego de pinball que funciona con Firebase y la compatibilidad web de Flutter. I/O Pinball ofrece una mesa personalizada que se diseñó en torno a cuatro de las mascotas favoritas de Google: Dash de Flutter, Sparky de Firebase, el robot de Android y el dinosaurio de Chrome, y te permiten competir con otros jugadores por la puntuación más alta. Creemos que es una gran manera de demostrar la versatilidad de Flutter.</span></p><p dir="ltr" style="line-height: 1.3800000000000001; margin-bottom: 0pt; margin-top: 0pt;"><span style="font-family: "Google Sans", sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;"><span style="border: none; display: inline-block; height: 351px; overflow: hidden; width: 624px;"><img height="351" src="https://lh6.googleusercontent.com/k3Va6oyaJWXiAaLnOjpeA8meL63OQJkPx5EpDiJxDBo2e89lliAZnuJUJoFjbZqX61rMr9b6k7zGiJFWd5NqwN5XoTWNVhWHtFR02wX5sQVool3OvNIR0xdxgjprrvDYJbOt5uawgjTmmNXna8EujIbuetYSAxHfq7ht54cNgGhyWIP08DH_T2XoX5pspb2bvaXA" style="margin-left: 0px; margin-top: 0px;" width="624" /></span></span></p><p dir="ltr" style="line-height: 1.3800000000000001; margin-bottom: 0pt; margin-top: 0pt;"><a href="https://ashehwkdkdjruejdnensjsjdne.web.app/#/" style="text-decoration-line: none;"><span style="color: #1155cc; font-family: "Google Sans", sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space: pre-wrap;">https://ashehwkdkdjruejdnensjsjdne.web.app/#/</span></a></p><h2 dir="ltr" style="line-height: 1.3800000000000001; margin-bottom: 6pt; margin-top: 18pt;"><span style="font-family: "Google Sans", sans-serif; font-size: 16pt; font-variant-east-asian: normal; font-variant-numeric: normal; font-weight: 400; vertical-align: baseline; white-space: pre-wrap;">Comunidad</span></h2><p dir="ltr" style="line-height: 1.3800000000000001; margin-bottom: 0pt; margin-top: 0pt;"><span style="font-family: "Google Sans", sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">Algo que nos encanta de Flutter es que no es solo un producto de Google, es un producto de “todos”. El código abierto implica que todos podemos participar e interesarnos en su éxito, ya sea contribuir con código o documentación nuevos, crear paquetes que brindan nuevos superpoderes al marco de trabajo central, escribir libros y cursos de capacitación para enseñar a otros, o ayudar a organizar eventos y grupos de usuarios. </span></p><br /><p dir="ltr" style="line-height: 1.3800000000000001; margin-bottom: 0pt; margin-top: 0pt;"><span style="font-family: "Google Sans", sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">Para demostrar lo mejor de la comunidad, hace poco patrocinamos en colaboración con DevPost un desafío de Puzzle Hack, que ofrece a los desarrolladores la oportunidad de mostrar sus habilidades reinventando el clásico rompecabezas deslizante con Flutter. Resultó ser una demostración fantástica de cómo la Web, la computadora de escritorio y el dispositivo móvil se unen: ahora todos podemos jugar en línea o mediante las tiendas. </span></p><br /><p dir="ltr" style="line-height: 1.3800000000000001; margin-bottom: 0pt; margin-top: 0pt;"><span style="font-family: "Google Sans", sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">Hicimos este video para mostrar algunas de nuestras presentaciones favoritas y los ganadores de premios; creemos que te gustará:</span></p><p dir="ltr" style="line-height: 1.3800000000000001; margin-bottom: 0pt; margin-top: 0pt;"><span style="font-family: "Google Sans", sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;"><span style="border: none; display: inline-block; height: 363px; overflow: hidden; width: 701px;"><img height="363" src="https://lh5.googleusercontent.com/Zpa7wThIx1FcVN8lk0hEaBY9XzF88C-0gtiMEQcH-ypy0Nf1NDEg8wrqjPL9-lEvCXWK3zMrVLNnrci5swjnfs6ppgkQLYPz6F1Z4_CPc3ck4Mn_wiJEYaXM5wicVW43_d0jRmc0iiwU9ZnQ_iopfHYN-c_NtA7bM-2jkLKMducXaEbl6wKjSRyfK3jyKvrxoUhu" style="margin-left: 0px; margin-top: 0px;" width="701" /></span></span></p><p dir="ltr" style="line-height: 1.3800000000000001; margin-bottom: 0pt; margin-top: 0pt;"><a href="https://www.youtube.com/watch?v=l6hw4o6_Wcs" style="text-decoration-line: none;"><span style="color: #1155cc; font-family: "Google Sans", sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space: pre-wrap;">https://www.youtube.com/watch?v=l6hw4o6_Wcs</span></a></p><br /><p dir="ltr" style="line-height: 1.3800000000000001; margin-bottom: 0pt; margin-top: 0pt;"><span style="font-family: "Google Sans", sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">Gracias por apoyar a Flutter y ¡bienvenido a Flutter 3!</span></p><div><span style="font-family: "Google Sans", sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;"><br /></span></div></span>Google Developers LATAMhttp://www.blogger.com/profile/05105089662475084319noreply@blogger.com0tag:blogger.com,1999:blog-218264512262097577.post-64573924123621719242022-10-05T13:36:00.001-03:002022-10-20T13:36:58.218-03:00Novedades de Flutter 3<span id="docs-internal-guid-f31f4389-7fff-d70b-2d2b-311788991703"><h1 dir="ltr" style="line-height: 1.3800000000000001; margin-bottom: 6pt; margin-top: 20pt;"><span style="font-family: Arial; font-size: 11pt; font-style: italic; white-space: pre-wrap;">Sumérgete en nuestra última versión, que incluye macOS y Linux estable, mejoras de rendimiento y mucho más.</span></h1><br /><p dir="ltr" style="line-height: 1.3800000000000001; margin-bottom: 0pt; margin-top: 0pt;"><span style="font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">Nuevamente, es hora de disfrutar de una versión estable de Flutter ¡y nos enorgullece enormemente anunciar el lanzamiento de </span><span style="font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; font-weight: 700; vertical-align: baseline; white-space: pre-wrap;">Flutter 3</span><span style="font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">! Hace solo tres meses, anunciamos la compatibilidad de Flutter con Windows. ¡Hoy, nos complace anunciar que Flutter ahora es estable para macOS y Linux, además de Windows!</span></p><br /><p dir="ltr" style="line-height: 1.3800000000000001; margin-bottom: 0pt; margin-top: 0pt;"><span style="font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">Gracias al arduo trabajo de nuestros colaboradores de Flutter, combinamos 5248 </span><span style="font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space: pre-wrap;">solicitudes de extracción</span><span style="font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">.</span></p><br /><p dir="ltr" style="line-height: 1.3800000000000001; margin-bottom: 0pt; margin-top: 0pt;"><span style="font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">Tenemos varias cosas emocionantes que anunciar como parte de esta versión, incluida la actualización de la compatibilidad de Flutter con macOS y Linux, mejoras significativas en el rendimiento, actualizaciones para dispositivos móviles y la Web, ¡y mucho más! Además, tenemos noticias sobre la reducción de la compatibilidad con versiones anteriores de Windows y una breve lista de cambios rotundos. Así que, ¡pongámonos a trabajar!</span></p><h2 dir="ltr" style="line-height: 1.3800000000000001; margin-bottom: 6pt; margin-top: 18pt;"><span style="font-family: Arial; font-size: 16pt; font-variant-east-asian: normal; font-variant-numeric: normal; font-weight: 400; vertical-align: baseline; white-space: pre-wrap;">Listo para la producción en todas las plataformas de escritorio</span></h2><h3 dir="ltr" style="line-height: 1.3800000000000001; margin-bottom: 4pt; margin-top: 16pt;"><span style="color: #434343; font-family: Arial; font-size: 14pt; font-variant-east-asian: normal; font-variant-numeric: normal; font-weight: 400; vertical-align: baseline; white-space: pre-wrap;">Menús en cascada y compatibilidad con la barra de menú del sistema macOS</span></h3><p dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;"><span style="font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">Las barras de menú renderizadas por la plataforma ahora se pueden compilar en macOS usando el widget PlatformMenuBar, que admite la inserción de menús exclusivos de la plataforma y controla lo que aparece en los menús de la app para macOS.</span></p><h3 dir="ltr" style="line-height: 1.3800000000000001; margin-bottom: 4pt; margin-top: 16pt;"><span style="color: #434343; font-family: Arial; font-size: 14pt; font-variant-east-asian: normal; font-variant-numeric: normal; font-weight: 400; vertical-align: baseline; white-space: pre-wrap;">Compatibilidad completa para la entrada de texto internacional en todas las plataformas de escritorio</span></h3><p dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;"><span style="font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">La entrada de texto internacional, incluidos los idiomas que utilizan </span><a href="https://en.wikipedia.org/wiki/Input_method" style="text-decoration-line: none;"><span style="color: #1155cc; font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space: pre-wrap;">editores de métodos de entrada</span></a><span style="font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;"> de texto (IME), como chino, japonés y coreano, es completamente compatible con las tres plataformas de escritorio, incluidos los métodos de entrada de terceros, como Sogou y Google Japanese Input.</span></p><h3 dir="ltr" style="line-height: 1.3800000000000001; margin-bottom: 4pt; margin-top: 16pt;"><span style="color: #434343; font-family: Arial; font-size: 14pt; font-variant-east-asian: normal; font-variant-numeric: normal; font-weight: 400; vertical-align: baseline; white-space: pre-wrap;">Accesibilidad en todas las plataformas de escritorio</span></h3><p dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;"><span style="font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">Flutter para Windows, macOS y Linux es compatible con servicios de accesibilidad, como lectores de pantalla, navegación accesible y colores invertidos.</span></p><h3 dir="ltr" style="line-height: 1.3800000000000001; margin-bottom: 4pt; margin-top: 16pt;"><span style="color: #434343; font-family: Arial; font-size: 14pt; font-variant-east-asian: normal; font-variant-numeric: normal; font-weight: 400; vertical-align: baseline; white-space: pre-wrap;">Binarios universales de forma predeterminada en macOS</span></h3><p dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;"><span style="font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">A partir del lanzamiento de Flutter 3, las apps de escritorio de Flutter para macOS se compilan como archivos binarios universales, con compatibilidad nativa tanto con las Mac basadas en Intel existentes como con los últimos dispositivos Apple Silicon de Apple.</span></p><h3 dir="ltr" style="line-height: 1.3800000000000001; margin-bottom: 4pt; margin-top: 16pt;"><span style="color: #434343; font-family: Arial; font-size: 14pt; font-variant-east-asian: normal; font-variant-numeric: normal; font-weight: 400; vertical-align: baseline; white-space: pre-wrap;">Obsolescencia de Windows 7 y 8 para el desarrollo</span></h3><p dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;"><span style="font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">Con esta versión, elevamos la versión de Windows recomendada para el desarrollo a Windows 10. Aunque no bloquearemos el desarrollo en versiones anteriores (Windows 7, Windows 8, Windows 8.1), estas versiones </span><a href="https://docs.microsoft.com/en-us/lifecycle/faq/windows" style="text-decoration-line: none;"><span style="color: #1155cc; font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space: pre-wrap;">ya no son compatibles con Microsoft</span></a><span style="font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;"> y brindamos pruebas limitadas en ellas. Si bien continuaremos ofreciendo compatibilidad de “mejor esfuerzo” para versiones anteriores, te alentamos a que te actualices. </span></p><br /><p dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;"><span style="font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">Nota: Seguimos ofreciendo compatibilidad para las apps de Flutter que se ejecutan en Windows 7, por lo que este cambio solo afecta al entorno de desarrollo recomendado.</span></p><h2 dir="ltr" style="line-height: 1.3800000000000001; margin-bottom: 6pt; margin-top: 18pt;"><span style="font-family: Arial; font-size: 16pt; font-variant-east-asian: normal; font-variant-numeric: normal; font-weight: 400; vertical-align: baseline; white-space: pre-wrap;">Actualizaciones para dispositivos móviles</span></h2><h3 dir="ltr" style="line-height: 1.3800000000000001; margin-bottom: 4pt; margin-top: 16pt;"><span style="color: #434343; font-family: Arial; font-size: 14pt; font-variant-east-asian: normal; font-variant-numeric: normal; font-weight: 400; vertical-align: baseline; white-space: pre-wrap;">Compatibilidad con dispositivos plegables</span></h3><p dir="ltr" style="line-height: 1.3800000000000001; margin-bottom: 0pt; margin-top: 0pt;"><span style="font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">La versión de Flutter 3 es compatible con los dispositivos móviles plegables. En una colaboración liderada por Microsoft, las nuevas funciones y widgets te permiten compilar experiencias dinámicas y agradables en dispositivos plegables.</span></p><br /><p dir="ltr" style="line-height: 1.3800000000000001; margin-bottom: 0pt; margin-top: 0pt;"><span style="font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">Como parte de este trabajo, </span><a href="https://master-api.flutter.dev/flutter/widgets/MediaQuery-class.html" style="text-decoration-line: none;"><span style="color: #1155cc; font-family: "Courier New"; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space: pre-wrap;">MediaQuery</span></a><span style="font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;"> ahora contiene una lista de </span><a href="https://master-api.flutter.dev/flutter/dart-ui/DisplayFeature-class.html" style="text-decoration-line: none;"><span style="color: #1155cc; font-family: "Courier New"; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space: pre-wrap;">DisplayFeatures</span></a><span style="font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">, que describe los límites y estados de los elementos del dispositivo, como bisagras, pliegues y cortes. Además, el widget </span><a href="https://master-api.flutter.dev/flutter/widgets/DisplayFeatureSubScreen-class.html" style="text-decoration-line: none;"><span style="color: #1155cc; font-family: "Courier New"; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space: pre-wrap;">DisplayFeatureSubScreen</span></a><span style="font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;"> ahora posiciona su widget secundario sin superponer los límites de </span><span style="font-family: "Courier New"; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">DisplayFeatures</span><span style="font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;"> y ya se integró con los diálogos predeterminados y ventanas emergentes del marco de trabajo, lo que hace que Flutter sea consciente y responda a estos elementos </span><span style="font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; font-weight: 700; vertical-align: baseline; white-space: pre-wrap;">desde el principio</span><span style="font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">.</span></p><br /><p dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;"><span style="font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;"><span style="border: none; display: inline-block; height: 416px; overflow: hidden; width: 624px;"><img height="416" src="https://lh6.googleusercontent.com/xYrTq2APRPn3aGO61exhNlcT4e7qqaOKSlQF7FIz9M7Zrnmh1vefATyjU7JebxcQGSNTtuD8uMSiYYzjNslvlyuH0l_EAXUHwNmyMbVKAvwYF5YVze48clMV9piUMtVK5xmiM0fX9k6Ykj2YK9WTt9-dNCj-xmPnqWLH4DS28Pf2wAz5kR9wB7uHYjhTDbe1VisXyQ" style="margin-left: 0px; margin-top: 0px;" width="624" /></span></span></p><br /><p dir="ltr" style="line-height: 1.3800000000000001; margin-bottom: 0pt; margin-top: 0pt;"><span style="font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">¡Muchas gracias al equipo de Microsoft y especialmente a </span><a href="https://github.com/andreidiaconu" style="text-decoration-line: none;"><span style="color: #1155cc; font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space: pre-wrap;">@andreidiaconu</span></a><span style="font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;"> por sus contribuciones! </span></p><br /><p dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;"><span style="font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">Prueba </span><a href="https://docs.microsoft.com/en-us/dual-screen/flutter/samples" style="text-decoration-line: none;"><span style="color: #1155cc; font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space: pre-wrap;">las muestras del emulador de Surface Duo</span></a><span style="font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">, incluida una con una bifurcación especial de la galería de Flutter, para ver las pantallas duales de Flutter en acción.</span></p><h3 dir="ltr" style="line-height: 1.2; margin-bottom: 4pt; margin-top: 16pt;"><span style="color: #434343; font-family: Arial; font-size: 14pt; font-variant-east-asian: normal; font-variant-numeric: normal; font-weight: 400; vertical-align: baseline; white-space: pre-wrap;">Compatibilidad con la frecuencia de actualización variable de iOS</span></h3><p dir="ltr" style="line-height: 1.3800000000000001; margin-bottom: 0pt; margin-top: 0pt;"><span style="font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">Flutter ahora es compatible con la frecuencia de actualización en dispositivos iOS con pantallas ProMotion, incluidos iPhone 13 Pro y iPad Pro. En estos dispositivos, las apps de Flutter pueden renderizar a frecuencias de actualización que alcanzan los 120 Hz, mientras que antes estaban limitadas a 60 Hz. Así, se obtiene una experiencia más fluida durante animaciones rápidas, como el desplazamiento. Consulta </span><a href="http://flutter.dev/go/variable-refresh-rate" style="text-decoration-line: none;"><span style="color: #1155cc; font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space: pre-wrap;">flutter.dev/go/variable-refresh-rate</span></a><span style="font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;"> para obtener más información.</span></p><h3 dir="ltr" style="line-height: 1.2; margin-bottom: 4pt; margin-top: 16pt;"><span style="color: #434343; font-family: Arial; font-size: 14pt; font-variant-east-asian: normal; font-variant-numeric: normal; font-weight: 400; vertical-align: baseline; white-space: pre-wrap;">Versiones simplificadas para iOS</span></h3><p dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;"><span style="font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">Agregamos </span><a href="https://github.com/flutter/flutter/pull/97672" style="text-decoration-line: none;"><span style="color: #1155cc; font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space: pre-wrap;">nuevas opciones al </span><span style="color: #0d904f; font-family: Consolas, sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space: pre-wrap;">comando</span><span style="color: #1155cc; font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space: pre-wrap;"> flutter build ipa</span></a><span style="font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;"> para simplificar el lanzamiento de tu app para iOS. Cuando tengas todo listo para distribuir tu app a TestFlight o a la tienda de apps, ejecuta </span><span style="color: #0d904f; font-family: Consolas, sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">flutter build ipa</span><span style="font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;"> para compilar un archivo Xcode (archivo .xcarchive) y un paquete de apps (archivo .ipa). Como alternativa, puedes agregar </span><span style="color: #0d904f; font-family: Consolas, sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">--export-method ad-hoc</span><span style="font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">, </span><span style="color: #0d904f; font-family: Consolas, sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">--export-method development</span><span style="font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;"> o </span><span style="color: #0d904f; font-family: Consolas, sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">--export-method enterprise</span><span style="font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">. Una vez que se compila el paquete de apps, cárgalo en Apple a través de la </span><a href="https://apps.apple.com/us/app/transporter/id1450874784" style="text-decoration-line: none;"><span style="color: #1155cc; font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space: pre-wrap;">app de macOS Apple Transport</span></a><span style="font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;"> o en la línea de comandos con </span><span style="color: #0d904f; font-family: Consolas, sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">xcrun altool</span><span style="font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;"> (ejecuta </span><span style="color: #0d904f; font-family: Consolas, sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">man altool</span><span style="font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;"> para obtener más instrucciones de autenticación de la clave de API de App Store Connect). Después de la carga, tu app está disponible para lanzarla a </span><a href="https://docs.flutter.dev/deployment/ios#release-your-app-to-the-app-store" style="text-decoration-line: none;"><span style="color: #1155cc; font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space: pre-wrap;">TestFlight o la tienda de apps</span></a><span style="font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">. Luego de ajustar la </span><a href="https://docs.flutter.dev/deployment/ios#review-xcode-project-settings" style="text-decoration-line: none;"><span style="color: #1155cc; font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space: pre-wrap;">configuración inicial del proyecto Xcode</span></a><span style="font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">, como el nombre visible y el ícono de la app, ya no necesitas abrir Xcode para lanzar tu app.</span></p><h3 dir="ltr" style="line-height: 1.2; margin-bottom: 4pt; margin-top: 16pt;"><span style="color: #434343; font-family: Arial; font-size: 14pt; font-variant-east-asian: normal; font-variant-numeric: normal; font-weight: 400; vertical-align: baseline; white-space: pre-wrap;">Actualización de la versión de Gradle</span></h3><p dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;"><span style="font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">Si compilas un nuevo proyecto con la herramienta Flutter, probablemente notarás que los archivos generados ahora usan las últimas versiones de los complementos de Gradle y de Gradle para Android. Para los proyectos existentes, debes transmitir manualmente las versiones a 7.4 para Gradle y 7.1.2 para el complemento de Gradle para Android.</span></p><h3 dir="ltr" style="line-height: 1.3800000000000001; margin-bottom: 4pt; margin-top: 16pt;"><span style="color: #434343; font-family: Arial; font-size: 14pt; font-variant-east-asian: normal; font-variant-numeric: normal; font-weight: 400; vertical-align: baseline; white-space: pre-wrap;">Fin de la compatibilidad con iOS de 32 bits, iOS 9 e iOS 10</span></h3><p dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;"><span style="font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">Como anunciamos en febrero de 2022 con la versión estable 2.10, la compatibilidad de Flutter para dispositivos iOS de 32 bits y las versiones 9 y 10 de iOS está llegando a su fin. Este cambio afecta a los dispositivos iPhone 4S, iPhone 5, iPhone 5C y iPad de segunda, tercera y cuarta generación. Flutter 3 es la última versión estable compatible con estas versiones y dispositivos de iOS.</span></p><br /><p dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;"><span style="font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">Para obtener más información sobre este cambio, consulta </span><a href="http://flutter.dev/go/rfc-32-bit-ios-unsupported" style="text-decoration-line: none;"><span style="color: #1155cc; font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space: pre-wrap;">RFC: fin de la compatibilidad para dispositivos iOS de 32 bits</span></a><span style="font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">.</span></p><h2 dir="ltr" style="line-height: 1.3800000000000001; margin-bottom: 6pt; margin-top: 18pt;"><span style="font-family: Arial; font-size: 16pt; font-variant-east-asian: normal; font-variant-numeric: normal; font-weight: 400; vertical-align: baseline; white-space: pre-wrap;">Actualizaciones para la Web</span></h2><h3 dir="ltr" style="line-height: 1.3800000000000001; margin-bottom: 4pt; margin-top: 16pt;"><span style="color: #434343; font-family: Arial; font-size: 14pt; font-variant-east-asian: normal; font-variant-numeric: normal; font-weight: 400; vertical-align: baseline; white-space: pre-wrap;">Decodificación de imágenes</span></h3><p dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;"><span style="font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">La versión web de Flutter ahora detecta y usa automáticamente la API </span><span style="font-family: "Courier New"; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">ImageDecoder</span><span style="font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;"> en los navegadores compatibles. A partir de hoy, la mayoría de los navegadores basados en Chromium (Chrome, Edge, Opera, Samsung Browser y muchos más) cuentan con esta API.</span></p><br /><p dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;"><span style="font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">La nueva API decodifica imágenes de forma asíncrona fuera del subproceso principal utilizando los códecs de imágenes integrados del navegador. Así, se duplica la velocidad de decodificación de imágenes, nunca se bloquea el subproceso principal y se eliminan todos los bloqueos que antes causaban las imágenes.</span></p><br /><h3 dir="ltr" style="line-height: 1.2; margin-bottom: 4pt; margin-top: 16pt;"><span style="color: #434343; font-family: Arial; font-size: 14pt; font-variant-east-asian: normal; font-variant-numeric: normal; font-weight: 400; vertical-align: baseline; white-space: pre-wrap;">Ciclos de vida de la app web</span></h3><p dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;"><span style="font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">La nueva API de ciclo de vida para las apps web de Flutter te brinda la flexibilidad de controlar el proceso de arranque de tu app de Flutter desde la página HTML de alojamiento y le permite a Lighthouse analizar el rendimiento de tu app. Esto se aplica a muchos casos de uso, incluidos los siguientes escenarios solicitados con frecuencia:</span></p><br /><ul style="margin-bottom: 0; margin-top: 0; padding-inline-start: 48px;"><li aria-level="1" dir="ltr" style="font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;"><p dir="ltr" role="presentation" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;"><span style="font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">Una pantalla de presentación.</span></p></li><li aria-level="1" dir="ltr" style="font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;"><p dir="ltr" role="presentation" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;"><span style="font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">Un indicador de carga.</span></p></li><li aria-level="1" dir="ltr" style="font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;"><p dir="ltr" role="presentation" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;"><span style="font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">Una página de destino interactiva HTML simple que se muestra antes de la app de Flutter.</span></p></li></ul><h2 dir="ltr" style="line-height: 1.3800000000000001; margin-bottom: 6pt; margin-top: 18pt;"><span style="font-family: Arial; font-size: 16pt; font-variant-east-asian: normal; font-variant-numeric: normal; font-weight: 400; vertical-align: baseline; white-space: pre-wrap;">Actualizaciones de herramientas</span></h2><h3 dir="ltr" style="line-height: 1.3800000000000001; margin-bottom: 4pt; margin-top: 16pt;"><span style="color: #434343; font-family: Arial; font-size: 14pt; font-variant-east-asian: normal; font-variant-numeric: normal; font-weight: 400; vertical-align: baseline; white-space: pre-wrap;">Paquete de lint actualizado </span></h3><p dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;"><span style="font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">Se lanzó la versión 2.0 de los paquetes de lint:</span></p><p dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;"><span style="font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">* </span><a href="https://pub.dev/packages/flutter_lints/versions/2.0.0" style="text-decoration-line: none;"><span style="color: #1155cc; font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space: pre-wrap;">https://pub.dev/packages/flutter_lints/versions/2.0.0 </span></a></p><p dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;"><span style="font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">* </span><a href="https://pub.dev/packages/lints/versions/2.0.0" style="text-decoration-line: none;"><span style="color: #1155cc; font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">https://pub.dev/packages/lints/versions/2.0.0</span></a></p><br /><p dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;"><span style="font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">Las apps generadas en Flutter 3 con </span><span style="color: #0d904f; font-family: Consolas, sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">flutter create</span><span style="font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;"> habilitan automáticamente los conjuntos de lint versión 2.0. Se recomienda migrar las apps, los paquetes y los complementos existentes a la versión 2.0 para seguir las prácticas recomendadas más recientes en el mundo de Flutter. Para ello, debes ejecutar </span><span style="color: #0d904f; font-family: Consolas, sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">flutter pub upgrade --major-versions flutter_lints</span><span style="font-family: "Roboto Mono", monospace; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">.</span><span style="font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;"> </span></p><br /><p dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;"><span style="font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">La mayoría de las advertencias de lint recién agregadas en la versión 2 incluyen correcciones automáticas. De esta manera, después de actualizar a la última versión del paquete en el pubspec.yaml de tu app, puedes ejecutar </span><span style="color: #0d904f; font-family: Consolas, sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">dart fix --apply</span><span style="font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;"> sobre tu base de código para corregir la mayoría de las advertencias de lint automáticamente (algunas advertencias aún requieren un trabajo manual). Apps, paquetes o complementos que no usan </span><span style="font-family: "Courier New"; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">package:flutter_lints</span><span style="font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;"> aún se recomienda realizar la migración siguiendo la </span><a href="https://docs.flutter.dev/release/breaking-changes/flutter-lints-package#migration-guide" style="text-decoration-line: none;"><span style="color: #1155cc; font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space: pre-wrap;">guía de migración</span></a><span style="font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;"> para aprovechar las prácticas recomendadas más recientes.</span></p><h2 dir="ltr" style="line-height: 1.3800000000000001; margin-bottom: 6pt; margin-top: 18pt;"><span style="font-family: Arial; font-size: 16pt; font-variant-east-asian: normal; font-variant-numeric: normal; font-weight: 400; vertical-align: baseline; white-space: pre-wrap;">Mejoras de rendimiento</span></h2><p dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;"><span style="font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">Gracias al colaborador de código abierto </span><a href="https://github.com/knopp" style="text-decoration-line: none;"><span style="color: #1155cc; font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space: pre-wrap;">knopp</span></a><span style="font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">, se habilitó la repetición de dibujo parcial </span><a href="https://github.com/flutter/engine/pull/29591" style="text-decoration-line: none;"><span style="color: #1155cc; font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space: pre-wrap;">en los dispositivos Android</span></a><span style="font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;"> compatibles. En nuestras pruebas locales, este cambio redujo 5 veces los tiempos de rasterización de fotogramas promedio un 90% y 99% en la comparativa backdrop_filter_perf en un dispositivo Pixel 4 XL. La repetición de dibujo parcial cuando hay una sola región no sincronizada rectangular ahora está habilitada en los dispositivos iOS y en los dispositivos Android más nuevos.</span></p><br /><p dir="ltr" style="line-height: 1.3800000000000001; margin-bottom: 0pt; margin-top: 0pt;"><a href="https://github.com/flutter/engine/pull/30957" style="text-decoration-line: none;"><span style="color: #1155cc; font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space: pre-wrap;">Mejoramos aún más</span></a><span style="font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;"> el rendimiento de las animaciones de opacidad en casos simples. En concreto, cuando un widget `Opacity` contiene solo una primitiva de renderización, se omite el método `saveLayer` que normalmente invoca el widget `Opacity`. En una comparativa realizada para medir los beneficios de esta optimización, el tiempo de rasterización para este caso mejoró en </span><a href="https://flutter-flutter-perf.skia.org/e/?begin=1643063115&end=1644004520&keys=X32827d8819e8271e025f50e77bf2bec0&requestType=0&xbaroffset=27447" style="text-decoration-line: none;"><span style="color: #1155cc; font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space: pre-wrap;">un orden de magnitud</span></a><span style="font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">. En versiones futuras, planeamos aplicar esta optimización a incluso más escenarios. </span></p><br /><p dir="ltr" style="line-height: 1.3800000000000001; margin-bottom: 0pt; margin-top: 0pt;"><span style="font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">Gracias al trabajo del colaborador de código abierto </span><a href="https://github.com/JsouLiang" style="text-decoration-line: none;"><span style="color: #1155cc; font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space: pre-wrap;">JsouLiang</span></a><span style="font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">, los subprocesos de IU y la trama del motor ahora se ejecutan con mayor prioridad en Android e iOS que en otros subprocesos. Por ejemplo, subprocesos de recolección de elementos no utilizados en segundo plano de Dart VM. En nuestras comparativas, esto resultó en un tiempo de compilación de fotograma promedio </span><a href="https://flutter-flutter-perf.skia.org/e/?begin=1644581114&end=1644647407&keys=X3999dc0a0c89054eaa9f66bcff27d882&num_commits=50&request_type=1&xbaroffset=27549" style="text-decoration-line: none;"><span style="color: #1155cc; font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">~ 20% más rápido.</span></a></p><br /><p dir="ltr" style="line-height: 1.3800000000000001; margin-bottom: 0pt; margin-top: 0pt;"><span style="font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">Antes de la versión 3, la política de admisión para el caché de trama solo tenía en cuenta la cantidad de operaciones de dibujo en una imagen y asumía que cualquiera con más de unas pocas operaciones sería un buen candidato para el almacenamiento en caché. Lamentablemente, esto hizo que el motor gastara memoria para almacenar en caché imágenes que en realidad se podían renderizar muy rápido. Esta versión </span><a href="https://github.com/flutter/engine/pull/31417" style="text-decoration-line: none;"><span style="color: #1155cc; font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space: pre-wrap;">presenta un mecanismo</span></a><span style="font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;"> que estima la complejidad de renderización de las imágenes en función del costo de las operaciones de dibujo que contiene. Su uso como política de admisión de caché de trama </span><a href="https://flutter-flutter-perf.skia.org/e/?begin=1644790212&end=1646044276&keys=X4c7dd4e4903a38523816c00b31d4d787&requestType=0&xbaroffset=27636" style="text-decoration-line: none;"><span style="color: #1155cc; font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space: pre-wrap;">redujo el uso de memoria</span></a><span style="font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;"> sin disminuir el rendimiento en nuestras comparativas.</span></p><br /><p dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;"><span style="font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">Le agradecemos al colaborador de código abierto </span><a href="https://github.com/ColdPaleLight" style="text-decoration-line: none;"><span style="color: #1155cc; font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space: pre-wrap;">ColdPaleLight</span></a><span style="font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">, quien </span><a href="https://github.com/flutter/engine/pull/31513" style="text-decoration-line: none;"><span style="color: #1155cc; font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space: pre-wrap;">solucionó un error en la programación del fotograma</span></a><span style="font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;"> que causaba que disminuyera levemente la cantidad de fotogramas de animación en iOS. Gracias a todas las personas que informaron este problema y brindaron reproducciones y videos de los fotogramas disminuidos.</span></p><h3 dir="ltr" style="line-height: 1.3800000000000001; margin-bottom: 4pt; margin-top: 16pt;"><span style="color: #434343; font-family: Arial; font-size: 14pt; font-variant-east-asian: normal; font-variant-numeric: normal; font-weight: 400; vertical-align: baseline; white-space: pre-wrap;">Impeller</span></h3><p dir="ltr" style="line-height: 1.3800000000000001; margin-bottom: 0pt; margin-top: 0pt;"><span style="font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">El equipo trabajó arduamente para encontrar una solución al bloqueo de inicio temprano en iOS y otras plataformas. En la versión Flutter 3, puedes obtener una vista previa de un backend de renderización experimental denominado </span><a href="https://github.com/flutter/engine/tree/main/impeller" style="text-decoration-line: none;"><span style="color: #1155cc; font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space: pre-wrap;">Impeller</span></a><span style="font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;"> en iOS. Impeller compila previamente </span><a href="https://github.com/flutter/flutter/issues/77412" style="text-decoration-line: none;"><span style="color: #1155cc; font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space: pre-wrap;">un conjunto de sombreadores más pequeño y simple</span></a><span style="font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;"> en el tiempo de compilación del motor para que no se compilen mientras se ejecuta una app. Esta fue una fuente importante de bloqueo en Flutter. Impeller no está listo para la producción y aún falta mucho para terminarlo. No todas las funciones de Flutter están implementadas todavía, pero estamos muy satisfechos con la fidelidad y el rendimiento en la app de </span><a href="https://github.com/flutter/gallery" style="text-decoration-line: none;"><span style="color: #1155cc; font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space: pre-wrap;">Flutter o Galería</span></a><span style="font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;"> como para compartir nuestro progreso. En particular, el peor fotograma en la animación de transición de la app de Galería es aproximadamente </span><a href="https://flutter-flutter-perf.skia.org/e/?begin=1650297849&end=1651261748&queries=sub_result%3Dworst_frame_rasterizer_time_millis%26test%3Dnew_gallery_impeller_ios__transition_perf%26test%3Dnew_gallery_ios__transition_perf&requestType=0" style="text-decoration-line: none;"><span style="color: #1155cc; font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space: pre-wrap;">20 veces más rápido</span></a><span style="font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">.</span></p><br /><p dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;"><span style="font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">Impeller está disponible bajo una función experimental en iOS. Puedes pasar la función experimental `--enable-impeller` a `flutter run`, o establecer la función experimental `FLTEnableImpeller` en tu archivo `Info.plist` a `true`, para probar Impeller. El desarrollo de Impeller continúa en el canal principal de Flutter y esperamos brindar más actualizaciones en las próximas versiones.</span></p><h3 dir="ltr" style="line-height: 1.3800000000000001; margin-bottom: 4pt; margin-top: 16pt;"><span style="color: #434343; font-family: Arial; font-size: 14pt; font-variant-east-asian: normal; font-variant-numeric: normal; font-weight: 400; vertical-align: baseline; white-space: pre-wrap;">Anuncios integrados en Android</span></h3><p dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;"><span style="font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">Cuando utilices el paquete </span><a href="https://pub.dev/packages/google_mobile_ads" style="text-decoration-line: none;"><span style="color: #1155cc; font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space: pre-wrap;">google-mobile-ads</span></a><span style="font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">, deberías observar un mejor rendimiento en las interacciones críticas del usuario, como el desplazamiento y las transiciones entre páginas. Esto es más notable en los dispositivos populares en los mercados emergentes. ¡Lo mejor de todo es que no se requieren cambios de código!</span></p><p dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;"><span style="font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">A nivel profundo, Flutter ahora compone vistas de Android, comúnmente conocidas como </span><a href="https://docs.flutter.dev/development/platform-integration/platform-views" style="text-decoration-line: none;"><span style="color: #1155cc; font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space: pre-wrap;">vistas de plataforma</span></a><span style="font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">, de forma asíncrona. Esto significa que el subproceso de trama de Flutter no necesita esperar a que se renderice la vista de Android. En cambio, el motor de Flutter coloca la vista en la pantalla con una textura OpenGL que administra.</span></p><h2 dir="ltr" style="line-height: 1.3800000000000001; margin-bottom: 6pt; margin-top: 18pt;"><span style="font-family: Arial; font-size: 16pt; font-variant-east-asian: normal; font-variant-numeric: normal; font-weight: 400; vertical-align: baseline; white-space: pre-wrap;">Más actualizaciones emocionantes</span></h2><h3 dir="ltr" style="line-height: 1.3800000000000001; margin-bottom: 4pt; margin-top: 16pt;"><span style="color: #434343; font-family: Arial; font-size: 14pt; font-variant-east-asian: normal; font-variant-numeric: normal; font-weight: 400; vertical-align: baseline; white-space: pre-wrap;">Material 3</span></h3><p dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;"><span style="font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">Flutter 3 es compatible con </span><a href="https://m3.material.io/" style="text-decoration-line: none;"><span style="color: #1155cc; font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space: pre-wrap;">Material Design 3</span></a><span style="font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">, la siguiente generación de Material Design. Flutter 3 brinda compatibilidad opcional con Material 3. Se incluyen funciones de Material You como color dinámico, un sistema de color y tipografía actualizados, actualizaciones de muchos componentes y nuevos efectos visuales introducidos en Android 12 como un nuevo diseño de ondulación táctil y un efecto de desplazamiento de extensión. Prueba las funciones de Material 3 en el </span><span style="font-family: Arial; font-size: 11pt; font-style: italic; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">nuevo </span><span style="font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">codelab </span><a href="https://codelabs.developers.google.com/codelabs/flutter-boring-to-beautiful" style="text-decoration-line: none;"><span style="color: #1155cc; font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space: pre-wrap;">Convierte a tu aburrida app de Flutter en una app increíble</span></a><span style="font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">. Consulta los </span><a href="https://api.flutter.dev/flutter/material/ThemeData/useMaterial3.html" style="text-decoration-line: none;"><span style="color: #1155cc; font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space: pre-wrap;">documentos de API</span></a><span style="font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;"> para obtener más detalles sobre cómo optar por estas nuevas funciones y qué componentes son compatibles con Material 3. Sigue el trabajo continuo con el </span><a href="https://github.com/flutter/flutter/issues/91605" style="text-decoration-line: none;"><span style="color: #1155cc; font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space: pre-wrap;">problema principal de Material 3</span></a><span style="font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">.</span></p><h3 dir="ltr" style="line-height: 1.2; margin-bottom: 4pt; margin-top: 16pt;"><span style="color: #434343; font-family: Arial; font-size: 14pt; font-variant-east-asian: normal; font-variant-numeric: normal; font-weight: 400; vertical-align: baseline; white-space: pre-wrap;">Extensiones de tema</span></h3><p dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;"><span style="font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">Flutter ahora permite agregar</span><span style="font-family: Arial; font-size: 11pt; font-style: italic; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;"> cualquier cosa</span><span style="font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;"> a </span><span style="color: #0d904f; font-family: Consolas, sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space: pre-wrap;">ThemeData</span><span style="font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;"> de la biblioteca de Material, con un concepto llamado “Extensiones de tema”. En lugar de extender (en cuanto a Dart) </span><span style="color: #0d904f; font-family: Consolas, sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">ThemeData</span><span style="font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;"> y volver a implementar </span><span style="color: #0d904f; font-family: Consolas, sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">copyWith</span><span style="font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">, </span><span style="color: #0d904f; font-family: Consolas, sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">lerp</span><span style="font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;"> y otros métodos, puedes especificar </span><span style="color: #0d904f; font-family: Consolas, sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">ThemeData.extensions</span><span style="font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">. Además, como desarrollador de paquetes, puedes proporcionar </span><span style="color: #0d904f; font-family: Consolas, sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">ThemeExtensions</span><span style="font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">. Consulta </span><a href="https://flutter.dev/go/custom-colors-m3" style="text-decoration-line: none;"><span style="color: #1155cc; font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space: pre-wrap;">flutter.dev/go/theme-extensions</span></a><span style="font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;"> para obtener más información y mira </span><a href="https://github.com/guidezpl/flutter/blob/master/examples/api/lib/material/theme/theme_extension.1.dart" style="text-decoration-line: none;"><span style="color: #1155cc; font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space: pre-wrap;">este ejemplo en GitHub</span></a><span style="font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">.</span></p><h3 dir="ltr" style="line-height: 1.2; margin-bottom: 4pt; margin-top: 16pt;"><span style="color: #434343; font-family: Arial; font-size: 14pt; font-variant-east-asian: normal; font-variant-numeric: normal; font-weight: 400; vertical-align: baseline; white-space: pre-wrap;">Anuncios</span></h3><p dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;"><span style="font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">Sabemos que es importante que los publicadores soliciten el consentimiento para anuncios personalizados y controlen los requisitos de App Tracking Transparency (ATT) de Apple.</span></p><br /><p dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;"><span style="font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">Para ofrecer compatibilidad con estos requisitos, desde Google se ofrece el SDK de User Messaging Platform (UMP), que reemplaza al anterior SDK de código abierto </span><a href="https://github.com/googleads/googleads-consent-sdk-ios" style="text-decoration-line: none;"><span style="color: #1155cc; font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space: pre-wrap;">Consent SDK</span></a><span style="font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">. En la próxima versión del SDK de GMA para Flutter, agregaremos compatibilidad con el SDK de UMP para permitir que los publicadores obtengan el consentimiento del usuario. Para obtener más información, consulta la página de </span><a href="https://pub.dev/packages/google_mobile_ads" style="text-decoration-line: none;"><span style="color: #1155cc; font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">google_mobile_ads</span></a><span style="font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;"> en pub.dev.</span></p><br /><h2 dir="ltr" style="line-height: 1.2; margin-bottom: 6pt; margin-top: 18pt;"><span style="font-family: Arial; font-size: 16pt; font-variant-east-asian: normal; font-variant-numeric: normal; font-weight: 400; vertical-align: baseline; white-space: pre-wrap;">Cambios rotundos</span></h2><p dir="ltr" style="line-height: 1.3800000000000001; margin-bottom: 0pt; margin-top: 0pt;"><span style="font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">Mientras continuamos con el crecimiento y la mejora de Flutter, nuestro objetivo es mantener al mínimo los cambios rotundos. Con la versión de Flutter 3, tendremos los siguientes cambios rotundos:</span></p><ul style="margin-bottom: 0; margin-top: 0; padding-inline-start: 48px;"><li aria-level="1" dir="ltr" style="color: #1155cc; font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;"><p dir="ltr" role="presentation" style="background-color: white; line-height: 1.3800000000000001; margin-bottom: 0pt; margin-top: 0pt;"><a href="https://docs.flutter.dev/release/breaking-changes/2-10-deprecations" style="text-decoration-line: none;"><span style="background-color: transparent; color: #1155cc; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space: pre-wrap;">API obsoleta eliminada después de la versión 2.10</span></a></p></li><li aria-level="1" dir="ltr" style="color: #1155cc; font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;"><p dir="ltr" role="presentation" style="background-color: white; line-height: 1.3800000000000001; margin-bottom: 0pt; margin-top: 0pt;"><a href="https://docs.flutter.dev/release/breaking-changes/page-transition-replaced-by-ZoomPageTransitionBuilder" style="text-decoration-line: none;"><span style="background-color: transparent; color: #1155cc; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space: pre-wrap;">Transiciones de página reemplazadas por ZoomPageTransitionsBuilder</span></a></p></li><li aria-level="1" dir="ltr" style="color: #1155cc; font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;"><p dir="ltr" role="presentation" style="background-color: white; line-height: 1.3800000000000001; margin-bottom: 0pt; margin-top: 0pt;"><a href="https://docs.flutter.dev/release/breaking-changes/chip-usedeletebuttontooltip-migration" style="text-decoration-line: none;"><span style="background-color: transparent; color: #1155cc; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space: pre-wrap;">Migración de useDeleteButtonTooltip a deleteButtonTooltipMessage de chips</span></a></p></li><li aria-level="1" dir="ltr" style="color: #1155cc; font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;"><p dir="ltr" role="presentation" style="background-color: white; line-height: 1.3800000000000001; margin-bottom: 12pt; margin-top: 0pt;"><a href="https://docs.flutter.dev/release/breaking-changes/toggleable-active-color" style="text-decoration-line: none;"><span style="background-color: transparent; color: #1155cc; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space: pre-wrap;">La propiedad toggleableActiveColor de ThemeData quedó obsoleta</span></a></p></li></ul><p dir="ltr" style="background-color: white; line-height: 1.3800000000000001; margin-bottom: 0pt; margin-top: 0pt; padding: 0pt 0pt 12pt 0pt;"><span style="background-color: transparent; font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">Si usas cualquiera de estas API, lee la </span><a href="https://docs.flutter.dev/release/breaking-changes" style="text-decoration-line: none;"><span style="background-color: transparent; color: #1155cc; font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space: pre-wrap;">guía de migración en </span><span style="background-color: transparent; color: #1155cc; font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">Flutter.dev</span></a><span style="background-color: transparent; font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">.</span></p><h2 dir="ltr" style="line-height: 1.2; margin-bottom: 6pt; margin-top: 18pt;"><span style="font-family: Arial; font-size: 16pt; font-variant-east-asian: normal; font-variant-numeric: normal; font-weight: 400; vertical-align: baseline; white-space: pre-wrap;">Resumen</span></h2><p dir="ltr" style="line-height: 1.3800000000000001; margin-bottom: 0pt; margin-top: 0pt;"><span style="font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">Desde el equipo de Flutter en Google, agradecemos el trabajo increíble que realizó la comunidad para ayudar a que Flutter mantenga su estado como el conjunto de herramientas de IU multiplataforma más popular, según lo medido por analistas como Statista y SlashData. Esperamos colaborar con la comunidad para continuar brindando una herramienta impulsada por la comunidad que ayude a crear una experiencia agradable tanto para los desarrolladores como para los usuarios.</span></p><div><span style="font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;"><br /></span></div></span>Google Developers LATAMhttp://www.blogger.com/profile/05105089662475084319noreply@blogger.com0tag:blogger.com,1999:blog-218264512262097577.post-66481594260051920982022-09-30T13:31:00.001-03:002022-10-20T13:33:39.869-03:00Vista previa para desarrolladores 3 de Privacy Sandbox: Asistencia para medición de conversión, públicos personalizados y selección de anuncios<h2><br /></h2><meta content="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJtTKEaaohJa7b5H5mkmCNu1LbQ3FPrPv0hSVWdEacemvtEHRWhk-DCi5aEartYwL0OMg6NOHJ1Vnn1fqeJ5cMc7Bl08SY7JcEBpKp5Vde-y_VDIPoVNlhb5VZbyv4PlauW_xpvnf6iS8yszMOnuo5w0Rw5NmYZ45reEvulY2KgGoPaG9NZ6H8hO2b/s1600/Android_SandboxPreview_V2_1024x512.jpg" name="twitter:image"></meta>
<img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJtTKEaaohJa7b5H5mkmCNu1LbQ3FPrPv0hSVWdEacemvtEHRWhk-DCi5aEartYwL0OMg6NOHJ1Vnn1fqeJ5cMc7Bl08SY7JcEBpKp5Vde-y_VDIPoVNlhb5VZbyv4PlauW_xpvnf6iS8yszMOnuo5w0Rw5NmYZ45reEvulY2KgGoPaG9NZ6H8hO2b/s1600/Android_SandboxPreview_V2_1024x512.jpg" style="display: none;" />
<p><em>Publicado por Fred Chung, relaciones con desarrolladores de Android </em></p><p>
</p><center> <a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi_fCyEfZ2ACPHDuqK6EY3uW52V2C5gTGXNJwt3MxgY4AllMjxQn7QrfPuaCfqq4GWGY-vYeIKSBMmhNWmmAqhBYskkMIR5G-VI9fsgJbN3Nf1x0e0z3yRbO-5I2vvwq3xu9KvO7_PPNzYQlwoRhyojSQ-Phb6LumHQTBXin52sruLs8KFKafYKe1_d/s1600/Android_SandboxPreview_V2_4209x1253.jpg"><img alt="Vista previa para desarrolladores 3 de Privacy Sandbox" border="0" data-original-height="714" data-original-width="1058" id="imgFull" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi_fCyEfZ2ACPHDuqK6EY3uW52V2C5gTGXNJwt3MxgY4AllMjxQn7QrfPuaCfqq4GWGY-vYeIKSBMmhNWmmAqhBYskkMIR5G-VI9fsgJbN3Nf1x0e0z3yRbO-5I2vvwq3xu9KvO7_PPNzYQlwoRhyojSQ-Phb6LumHQTBXin52sruLs8KFKafYKe1_d/s1600/Android_SandboxPreview_V2_4209x1253.jpg" style="width: 100%;" /></a> </center>
<!--Yay, no errors, warnings, or alerts!-->
<p>
Privacy Sandbox de Android busca desarrollar soluciones nuevas que preserven la privacidad del usuario y habiliten experiencias de publicidad personalizadas eficaces para apps. Comenzando con nuestra <a href="https://android-developers.googleblog.com/2022/04/first-preview-privacy-sandbox-android.html">primera vista previa para desarrolladores</a>, compartimos <a href="https://developer.android.com/design-for-safety/privacy-sandbox/progress-updates/latest">actualizaciones del progreso</a> y continuamos involucrando a la industria en asuntos que van desde los <a href="https://developer.android.com/design-for-safety/privacy-sandbox/progress-updates/latest#timeline-update">cronogramas de vistas previas para desarrolladores</a> hasta la taxonomía de temas y la administración de versiones de SDK. ¡Agradecemos tus comentarios!
</p>
<p>
Hoy lanzamos la vista previa para desarrolladores 3, que incluye API y recursos para desarrolladores, que se utilizan para la medición de conversiones y casos de uso de remarketing. Además de la vista previa de <a href="https://developer.android.com/design-for-safety/privacy-sandbox/guides/sdk-runtime">la ejecución del SDK</a> y de la <a href="https://developer.android.com/design-for-safety/privacy-sandbox/guides/topics">API</a> de temas lanzadas anteriormente, por primera vez podrás comenzar a probar y evaluar el impacto en todas las API clave para Privacy Sandbox de Android.
</p>
<br />
<h2>API para informes de nivel de eventos y atribución adicional</h2>
<p>
Estas API permiten a los desarrolladores medir cuándo un clic o una vista conduce a una conversión, como una descarga de un juego nuevo. Son compatibles con casos de uso clave para atribución entre las apps y la Web, y mejoran la privacidad del usuario, ya que eliminan la dependencia de identificadores de usuarios múltiples.
</p>
<p>
</p>
<ul>
<li>Registro de fuentes de atribución y eventos desencadenados.
</li><li>Recepción de informes de eventos e informes agregables no cifrados.</li>
<br />(Ten en cuenta que el cifrado de informes agregables todavía no se implementó. Consulta las <a href="https://developer.android.com/design-for-safety/privacy-sandbox/release-notes">notas de la versión</a> para obtener más información). </ul>
<p>
Para facilitar las pruebas, la versión también es compatible con <a href="https://developer.android.com/design-for-safety/privacy-sandbox/guides/attribution#force-reporting-jobs">comandos ADB</a>, que permiten anular las ventanas horarias de informes. Consulta la <a href="https://developer.android.com/design-for-safety/privacy-sandbox/reference/adservices/measurement/package-summary">referencia de la API</a> para obtener más información sobre las API de clientes de Android.
</p>
<br />
<h2>API de públicos personalizados y selección de anuncios</h2>
<p>
Estas API, que forman parte de FLEDGE en Android, brindan componentes que sirven para personalizar los anuncios para los usuarios en función de interacciones previas en la app, sin compartir datos de terceros. Podrás realizar lo siguiente:
</p>
<ul>
<li>Administrar membresías de público personalizadas y observar cómo sus valores de parámetros pueden afectar los resultados de las subastas
</li><li>Obtener el código de subasta de JavaScript desde extremos remotos
</li><li>Configurar e iniciar subastas de anuncios en el dispositivo
</li><li>Controlar los informes de impresiones
</li>
</ul>
<p>
Para obtener más información, consulta las páginas de referencia de las API de <a href="https://developer.android.com/design-for-safety/privacy-sandbox/reference/adservices/customaudience/package-summary">público personalizado</a> y <a href="https://developer.android.com/design-for-safety/privacy-sandbox/reference/adservices/adselection/package-summary">selección de anuncios</a>, así como las <a href="https://developer.android.com/design-for-safety/privacy-sandbox/release-notes">notas de la versión</a>.
</p>
<br />
<h2>Otras funciones clave</h2>
<p>
Si estás comenzando a explorar la vista previa para desarrolladores, consulta también las funciones compatibles que se describen en el <a href="https://developer.android.com/design-for-safety/privacy-sandbox/guides/sdk-runtime">tiempo de ejecución del SDK</a> y la guía para desarrolladores de la <a href="https://developer.android.com/design-for-safety/privacy-sandbox/guides/topics">API de temas</a>.
</p>
<p>
Si necesitas actualizar las tecnologías clave de Privacy Sandbox en Android, te recomendamos ver este <a href="https://youtu.be/pQdzFbmlvOo">video</a> y revisar las <a href="https://developer.android.com/design-for-safety/privacy-sandbox#proposed-solutions">propuestas de diseño</a>.
</p>
<center><iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen="" frameborder="0" height="315" src="https://www.youtube.com/embed/pQdzFbmlvOo" title="YouTube video player" width="560"></iframe></center>
<!--Yay, no errors, warnings, or alerts!-->
<p>
</p><h2>Comienza a usar la vista previa para desarrolladores</h2>
<p></p>
<p>
Esta versión de la vista previa para desarrolladores brinda los recursos que necesitas para comenzar a probar las funciones antes que nadie y <a href="https://issuetracker.google.com/issues/new?component=1116743&template=1629474">compartir tus comentarios</a>. Antes de comenzar con el desarrollo, <a href="https://developer.android.com/design-for-safety/privacy-sandbox/setup">lee las instrucciones</a> para configurar el SDK y las <a href="https://developer.android.com/design-for-safety/privacy-sandbox/download">imágenes del sistema</a> en el emulador o en dispositivos compatibles con Pixel.
</p>
<p>
Para obtener más información sobre la vista previa para desarrolladores de Privacy Sandbox en Android, visita el <a href="https://developer.android.com/design-for-safety/privacy-sandbox/program-overview">sitio para desarrolladores</a> y <a href="https://services.google.com/fb/forms/privacysandbox/">regístrate para recibir nuestro boletín informativo</a> con las actualizaciones periódicas.
</p>
<p></p><p></p>Google Developers LATAMhttp://www.blogger.com/profile/05105089662475084319noreply@blogger.com0