{"action":"created","comment":{"url":"https://api.github.com/repos/flutter-es/website/pulls/comments/222357326","pull_request_review_id":161224258,"id":222357326,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDIyMjM1NzMyNg==","diff_hunk":"@@ -0,0 +1,239 @@\n+---\n+layout: page\n+title: Filosofía de Desarrollo de Flutter\n+\n+permalink: /design-principles/\n+---\n+\n+* TOC Placeholder\n+{:toc}\n+\n+Introducción\n+------------\n+\n+Flutter está escrito sobre la base de algunos principios básicos que fueron en su mayoría\n+intuidos a partir de experiencias pasadas con otras plataformas como la Web\n+y Android, algunos de los cuales se resumen a continuación.\n+\n+Este documento es muy útil si quieres contribuir a Flutter, ya que esperamos que también sigas estas filosofías. Por favor, lee también nuestra [guía de estilo](https://github.com/flutter/flutter/wiki/Style-guide-for-Flutter-repo)\n+para obtener pautas más específicas sobre cómo escribir código Dart para Flutter.\n+\n+\n+Revisión y comprobación de código\n+--------------------------------\n+\n+Antes del check-in, se debe revisar el código de cada PR, incluyendo cosas como la existencia de una dependencia. Obtener una reseña significa que un colaborador regular de Flutter (alguien con acceso al commit) ha escrito un comentario diciendo \"LGTM\" en tu PR, y tú has respondido a todos sus comentarios. \"LGTM\" significa \"Look Good To Me\" (\"Luce bien para mí\"). \n+\n+La revisión del código sirve para muchos propósitos críticos. Hay un propósito obvio: detectar errores. Incluso los ingenieros más experimentados frecuentemente cometen errores que son detectados por la revisión de código. Pero también hay muchos otros beneficios de las revisiones de código:\n+\n+ * Difunde el conocimiento entre el equipo. Como cada línea de código habrá sido leída por dos personas, es más probable que una vez que sigas adelante, alguien más entienda el código.\n+\n+ * Te mantiene honesto. Sabiendo que alguien va a leer tu código, estas menos tentado de hacer mal código, tomando atajos en lugar de hacer un código legible.\n+\n+ * Te expone a diferentes modos de pensar. Tu revisor de código probablemente no ha pensado en el problema de la misma manera que tú, y por lo tanto puede tener una perspectiva fresca y puede encontrar una mejor manera de resolver el problema.\n+\n+Te recomendamos que consideres\n+[estas sugerencias](https://testing.googleblog.com/2017/06/code-health-too-many-comments-on-your.html)\n+para abordar los comentarios de revisión de código en tu PR.\n+\n+Si estás realizando una gran modificación al código, no dudes en obtener revisiones antes de que estés listo para comprobar el código. Además, no dudes en pedir a varias personas que revisen tu código, y no dudes en proporcionar comentarios no solicitados sobre los PRs de otras personas. Cuantas más revisiones, mejor.\n+\n+Los revisores deben leer cuidadosamente el código y asegurarse de que lo entienden. Un revisor debe revisar el código para ver si tiene sentido, por ejemplo, si la estructura del código tiene sentido, así como la legibilidad y la adherencia a la [guía de estilo flutter](https://github.com/flutter/flutter/wiki/Style-guide-for-Flutter-repo).\n+Aplicar [usar estas mejores prácticas](https://mtlynch.io/human-code-reviews-1/)\n+cuando revises el código y envíes comentarios.\n+\n+Los revisores no deben dar un LGTM a menos que el parche tenga pruebas que verifiquen todo el código afectado, o a menos que una prueba no tenga sentido. Si revisas un parche, estás compartiendo la responsabilidad del parche con su autor. Debes dar un LGTM sólo si te sientes seguro respondiendo preguntas sobre el código.\n+\n+Un revisor puede en algunas circunstancias considerar el código satisfactorio sin haberlo revisado o entendido completamente. Si un revisor no ha revisado completamente el código, lo admite diciendo \"RSLGTM\" en lugar de \"LGTM\". Si sientes que tu código necesita una revisión real, por favor encuentra a alguien que realmente lo revise. \"Si marcas un parche como RSLGTM, sigues compartiendo la responsabilidad del parche con su autor. Revisar un parche como RSLGTM debería ser un evento raro.\n+(RSLGTM : \"Rubber stamp looks good to me\", se usa cuando el revisor simplemente está otorgando la aprobación sin realizar una revisión de código adecuada.\n+\n+Si realmente necesitas revisar algo a toda prisa, por ejemplo, porque todo está roto y puedes arreglarlo, entonces elige a alguien del equipo que quieras que revise el código, y luego marca al RP como \"TBR\" con su nombre. \"(\"TBR\" significa \"To Be Reviewed\".) Esto sólo debe usarse en emergencias. (¡No es una emergencia que no haya nadie alrededor para revisar tu parche de 50,000 líneas a la medianoche del 31 de diciembre!. Si alguien marca un parche como TBR y te nombra como revisor, debe revisar el parche lo antes posible. Si alguien marca un parche como TBR y te nombra revisor, los problemas deben solucionarse tan pronto como sea posible.\n+\n+Espera a que Cirrus dé luz verde antes de hacer merge a un PR. Cirrus realiza un montón de comprobaciones previas (ver las pruebas para el\n+[framework](https://github.com/flutter/flutter/blob/master/dev/bots/test.dart),\n+los [engine](https://github.com/flutter/engine/blob/master/ci/build.sh),\n+y el sitio web).\n+!Estas comprobaciones incluyen comprobaciones de los comentarios, así que asegúrate de esperar la luz verde incluso si tu parche está _obviamente_ bien!\n+\n+Para el repositorio del engine, Travis no compila realmente el engine, así que deberías asegurarse de hacerlo localmente antes de comprobar nada.\n+\n+Asegúrate de que todos los árboles y tableros estén verdes antes de realizar el check-in:\n+la [infra waterfall](https://build.chromium.org/p/client.flutter/waterfall),\n+nuestro [Cirrus dashboard](https://cirrus-ci.com/github/flutter/flutter/master),\n+nuestro [test dashboard](https://flutter-dashboard.appspot.com/build.html), y\n+nuestro [benchmarks dashboard](https://flutter-dashboard.appspot.com/benchmarks.html) (Exclusivo de Google, lo sentimos).\n+\n+**Si los árboles o los cuadros de mando muestran alguna regresión, sólo se permiten las correcciones que mejoren la situación.**\n+\n+\n+Manejo de breaking changes\n+-------------------------\n+\n+Estamos tratando de estabilizar las APIs para los\n+[paquetes en el SDK](https://github.com/flutter/flutter/tree/master/packages).\n+Para hacer un cambio que requiera que los desarrolladores cambien su código:\n+\n+ 1. Crea un issue o crea un pull request con la etiqueta `prod: API break`.\n+\n+ 2. Envía un correo electrónico a <mailto:{{site.email}}> para socializar el cambio propuesto. El propósito de este correo electrónico es ver si puedes obtener consenso en torno a su cambio. **No le dices a la gente que el cambio ocurrirá, les pides permiso.**\n+    El correo electrónico debe incluir lo siguiente:\n+\n+    - Una asunto que resuma claramente el cambio propuesto y suene como si fuera importante (para que la gente pueda detectar estos correos electrónicos entre el ruido). Ponle al asunto el prefijo `[Breaking Change]`.\n+\n+    - Un resumen de cada cambio que propongas.\n+\n+    - Una breve justificación del cambio.\n+\n+    - Un enlace al asunto que presentaste en el paso 1, y a cualquier PR que ya hayas publicado relacionado con este cambio.\n+\n+    - Aclara los pasos mecánicos para portar el código de la forma antigua a la forma nueva, si es posible. Si no es posible, sigue pasos claros para averiguar cómo portar el código.\n+\n+    - Una propuesta sincera que ayude a portar el código que incluye el canal preferido para contactar a la persona que hizo el cambio.\n+\n+    - Una solicitud para que la gente te notifique si este cambio va a ser un problema, tal vez discutiendo el cambio en el issue tracker o en el pull request.\n+\n+ 3. **Si la gente está de acuerdo en que los beneficios de cambiar la API superan los costos de estabilidad**, puedes continuar con el proceso normal de revisión de código para realizar cambios. Debes dejar algún tiempo entre los pasos 2 y 3 (como mínimo 24 horas durante la semana laboral para que la gente de todas las zonas horarias hayan tenido la oportunidad de verlo, pero lo ideal sería una semana más o menos).\n+\n+ 4. Si has conseguido un breaking change, añade un punto a la sección superior de la [página Changelog en la wiki](https://github.com/flutter/flutter/wiki/Changelog),\n+    describiendo tu cambio y enlazándolo a tu correo electrónico en [los archivos de la lista de correo](https://groups.google.com/forum/#!forum/flutter-dev).\n+    Para averiguar la versión correcta dirígete al changelog y ejecuta\n+    `git fetch upstream && flutter --version`. Por ejemplo, si dice “Flutter 0.0.23-pre.10” en la salida, tu entrada en el changelog debe estar bajo el encabezado “Changes since 0.0.22”.\n+\n+En la medida de lo posible, incluso los “breaking” changes deben hacerse a modo de compatibilidad retroactiva, por ejemplo, introduciendo una nueva clase y marcando la antigua clase `@deprecated`. Al hacerlo, incluye una descripción de cómo realizar la transición en la notificación de depreciación, por ejemplo:\n+\n+<!-- skip -->\n+```dart\n+@deprecated('FooInterface has been deprecated because ...; it is recommended that you transition to the new FooDelegate.')\n+class FooInterface {\n+/// ...\n+}\n+```\n+\n+Si usas `@deprecated`, asegúrate de recordar eliminar realmente la funcionalidad unas semanas más tarde (después de la próxima versión beta), ¡no la dejes para siempre!\n+\n+\n+#### Responsabilidades exclusivas de Google\n+\n+Si trabajas para Google, tienes la responsabilidad adicional de actualizar la copia interna de Flutter de Google y arreglar cualquier enlace roto a otros sitios web de forma razonablemente rápida después de realizar el merge de los cambios en el upstream.\n+\n+Programación lazy\n+----------------\n+\n+Escribe lo que necesites y nada más, pero cuando lo escribas, hazlo bien.\n+\n+Evita implementar funciones que no necesites. No se puede diseñar una funcionalidad sin saber cuáles son las restricciones. La implementación de funcionalidades \"por completar\" resulta en código sin usar que es costoso de mantener, conocer, documentar, probar, etc.\n+\n+Cuando implementes una funcionalidad, hazlo de la manera correcta. Evita los workarounds. Los workarounds no hacen más que agravar el problema, pero a un coste más elevado: alguien tendrá que volver a estudiar el problema, averiguar cómo solucionarlo y desmontarlo (y todos los lugares que ahora lo utilizan), e implementar la funcionalidad. Es mucho mejor tomarse más tiempo para arreglar un problema correctamente, que ser el que arregla todo rápidamente pero de una manera que requerirá de una posterior limpieza.\n+\n+Es posible que escuches a los miembros del equipo decir \"embrace the [yak\n+shave](http://www.catb.org/jargon/html/Y/yak-shaving.html)!\". Esto es un estímulo para tomar el esfuerzo más grande necesario para realizar una solución adecuada para un problema en lugar de simplemente aplicar soluciones paliativas.\n+\n+\n+Pruebas\n+-----\n+\n+**Escribe Pruebas, Encuentra Errores**\n+\n+Cuando arregles un error, primero escribe una prueba que falle, luego arregla el error y verifica que la prueba pasa.\n+\n+Cuando implementes una nueva característica, escribe pruebas para ella.\n+\n+\n+Documentación\n+-------------\n+\n+Cuando trabajes en Flutter, si te encuentras haciendo una pregunta sobre nuestros sistemas, por favor coloca la respuesta que descubras en la documentación en el mismo lugar donde buscaste la respuesta por primera vez.\n+\n+Tratamos de evitar la dependencia de la \"tradición oral\". Debería ser posible para cualquiera empezar a contribuir sin haber tenido que aprender todos los secretos de los actuales miembros del equipo. Para ello, todos los procesos deben estar documentados (normalmente en los wikis), el código debe ser auto explicativo o comentado, y las convenciones deben estar escritas, por ejemplo, en nuestra guía de estilo.\n+\n+Hay una excepción: es mejor no documentar algo en nuestros documentos de la API que documentarlo pobremente. Esto se debe a que si no la documentas, sigue apareciendo en nuestra lista de cosas por documentar. Siéntete libre de eliminar la documentación que viole nuestra\n+[guía de estilo](https://github.com/flutter/flutter/wiki/Style-guide-for-Flutter-repo),\n+para que vuelva a aparecer en la lista.\n+\n+\n+Diseño de APIs\n+----------\n+\n+Hemos aprendido varias lecciones a lo largo de los años.\n+\n+* No debe haber objetos que representen el estado real que reflejen algún estado de otra fuente, ya que son costosos de mantener. (El objeto `HTMLCollection` de la Web es un ejemplo de dicho objeto.) En otras palabras, **mantenga sólo una fuente de verdad**, y **no replique el estado real**.\n+\n+* Los constructores getters deben ser eficientes (por ejemplo, sólo devolver un valor en caché o una tabla O(1) de búsqueda).  Si una operación es ineficiente, debe ser un método a cambio. p.e.g. `document.getForms()`, no `document.forms` (pasea por todo el árbol).\n+\n+  - Las operaciones asíncronas costosas pueden ser representadas por futures. Un método puede iniciar el trabajo y devolver un future; un getter puede devolver un future correspondiente al trabajo en curso. Un getter no debe iniciar el trabajo y devolver el future, ya que los getters parecen idempotentes y sin efectos secundarios.\n+\n+* No debería haber APIs que requieran completar sincrónicamente una operación costosa (por ejemplo, calcular un layout completo fuera de la fase de diseño). El trabajo costoso debe ser asincrónico.\n+\n+* Utilizamos un framework diseñado por niveles, en el que cada nivel aborda un problema de alcance limitado y luego es utilizado por el siguiente nivel para resolver un problema de mayor envergadura. Esto es cierto tanto a un alto nivel (los widgets que se basan en la renderización se basan en el pintado) como a nivel de clases y métodos individuales (por ejemplo, en la librería de renderización, teniendo una clase para el clipping y una clase para la opacidad en lugar de una clase que haga las dos cosas a la vez).\n+\n+  - Las APIs de conveniencia pertenecen a la capa superior a la que están simplificando.\n+\n+  - Tener APIs dedicadas por razones de rendimiento está bien. Si una operación específica, por ejemplo, hacer clipping a un rectángulo redondeado, es costoso utilizando la API genérica pero podría ser implementada más eficientemente usando una API dedicada, en ese caso, una API dedicada es suficiente.\n+\n+* Las APIs que fomentan las malas prácticas no deberían existir, p.e.g., `document.write()`, `innerHTML`, `insertAdjacentHTML()`, etc.\n+\n+  - Es una mala práctica la manipulación de Strings para generar datos o código que posteriormente serán interpretados o analizados, ya que conduce a vulnerabilidades de inyección de código.\n+\n+  - Si una operación es costosa, ese coste debe representarse en la API (por ejemplo, devolviendo un `Future` o un `Stream`). Evita proporcionar APIs que oculten el coste de las tareas.\n+\n+* Las APIs de conveniencia que envuelven algún aspecto de un servicio de un entorno para su exposición en otro entorno (por ejemplo, exponer una API Android en Dart), deberían exponer/envolver la API completa, de modo que no haya abismos cognoscitivos a la hora de interactuar con ese servicio (en el que está bien usar la API expuesta hasta cierto punto, pero más allá de eso debe aprender todo sobre el servicio subyacente).\n+\n+* Las APIs que envuelven los servicios subyacentes, pero impiden el acceso directo a la API subyacente (por ejemplo, cómo se expone Skia en `dart:ui`) deben exponer cuidadosamente sólo las mejores partes de la API subyacente. Esto puede requerir funcionalidades de refactorización para que sean más útiles. Puede significar el evitar exponer funcionalidades de conveniencia que se abstraen sobre operaciones costosas, a menos que haya una clara ganancia de rendimiento al hacerlo. Una superficie API más pequeña es más fácil de entender.\n+\n+  - Es por eso que `dart:ui` no expone `Path.fromSVG()`: lo comprobamos, y es igual de rápido hacer ese trabajo directamente en Dart, así que no hay beneficio en exponerlo. De esta manera, evitamos los costes (las estructuras de API más grandes son más caras de mantener, documentar y probar, y suponen una carga de compatibilidad para la API subyacente).\n+\n+\n+Errores\n+----\n+\n+Asígnate un error sólo cuando estés trabajando activamente en él. Si no estás trabajando en ello, déjalo sin asignar. No asignes errores a las personas a menos que sepas que van a trabajar en ello. Si te encuentras con errores asignados en los que no vas a trabajar en un futuro muy cercano, desasigna los errores para que otras personas se sientan facultadas para trabajar en ellos.\n+\n+Puedes escuchar a los miembros del equipo referirse a \"licking the cookie\". Asignarse un error a sí mismo, o indicar que se va a trabajar en él, les dice a otros miembros del equipo que no lo solucionen. Si entonces no trabajas en ello inmediatamente, estás actuando como alguien que ha tomado una galleta, la ha lamido para no hacerla agradable a otras personas, y luego no se la ha comido de inmediato. Por otra parte, “unlicking the cookie” significa indicar al resto del equipo que no vas a trabajar en el error de inmediato, por ejemplo, desasignándote el error.\n+\n+Registra los errores de cualquier cosa que encuentres y que necesites hacer. Cuando implementas algo, pero sabes que no está completo, registras errores por aquello que no has hecho. De esa manera, podemos seguir la pista de lo que todavía hay que hacer.\n+\n+\n+Regresiónes\n+-----------\n+\n+Si un check-in ha causado una regresión en el árbol, retrocede el check-in (incluso si no es el tuyo) a menos que hacerlo lleve más tiempo que arreglar el error. Cuando el árbol se daña, ralentiza a todos los demás en el proyecto.\n+\n+\n+Si las cosas se estropean, la prioridad de todos los miembros del equipo debe ser ayudar al equipo a solucionar el problema. Alguien debe ser el dueño del tema y puede delegar responsabilidades a otros miembros del equipo. Una vez que se resuelva el problema, escribe un informe\n+[post-mortem](https://github.com/flutter/flutter/wiki/Postmortems).\n+ Los post-mortem son para documentar lo que salió mal y cómo evitar que el problema (y toda la clase de problemas como éste) se repita en el futuro. Los postmortem no se refieren en absoluto a la asignación de culpas.\n+\n+No hay nada vergonzoso en cometer errores.\n+\n+\n+Preguntas\n+---------\n+\n+Siempre está bien hacer preguntas. Nuestros sistemas son grandes, nadie será un experto en todos los sistemas.\n+\n+\n+Resolución de conflictos\n+-------------------\n+\n+Cuando varios colaboradores no están de acuerdo en la dirección de un parche en particular o en la dirección general del proyecto, el conflicto debe resolverse mediante la comunicación. Las personas que no están de acuerdo deben reunirse, tratar de entender los puntos de vista de los demás y trabajar para encontrar un diseño que responda a las preocupaciones de todos.\n+\n+Por lo general, esto es suficiente para resolver los problemas. Si no puedes llegar a un acuerdo, pidae consejo a un miembro senior del equipo.\n+\n+Desconfía del acuerdo por agotamiento, en el que una persona argumenta un punto repetidamente hasta que otros participantes se rinden en interés de seguir adelante. No se trata de una resolución de conflictos, ya que no aborda las preocupaciones de todos. Desconfía del acuerdo por compromiso, en el que dos buenas soluciones competidoras se fusionan en una solución mediocre. Un conflicto se resuelve cuando los participantes están de acuerdo en que la solución final es mejor que todas las propuestas en conflicto. A veces la solución requiere más trabajo que cualquiera de las otras propuestas. Por favor, ve los comentarios anteriores donde introducimos la frase “embrace the yak shave”.\n+\n+\n+Código de conducta\n+---------------","path":"es_ES/design-principles.md","position":226,"original_position":226,"commit_id":"4cdb1ddbe1d783a92abb440624fb2b5159eaf327","original_commit_id":"4cdb1ddbe1d783a92abb440624fb2b5159eaf327","user":{"login":"juanmorillios","id":4824933,"node_id":"MDQ6VXNlcjQ4MjQ5MzM=","avatar_url":"https://avatars0.githubusercontent.com/u/4824933?v=4","gravatar_id":"","url":"https://api.github.com/users/juanmorillios","html_url":"https://github.com/juanmorillios","followers_url":"https://api.github.com/users/juanmorillios/followers","following_url":"https://api.github.com/users/juanmorillios/following{/other_user}","gists_url":"https://api.github.com/users/juanmorillios/gists{/gist_id}","starred_url":"https://api.github.com/users/juanmorillios/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/juanmorillios/subscriptions","organizations_url":"https://api.github.com/users/juanmorillios/orgs","repos_url":"https://api.github.com/users/juanmorillios/repos","events_url":"https://api.github.com/users/juanmorillios/events{/privacy}","received_events_url":"https://api.github.com/users/juanmorillios/received_events","type":"User","site_admin":false},"body":"Doy por finalizada la revisión.","created_at":"2018-10-03T15:29:49Z","updated_at":"2018-10-03T15:29:49Z","html_url":"https://github.com/flutter-es/website/pull/347#discussion_r222357326","pull_request_url":"https://api.github.com/repos/flutter-es/website/pulls/347","author_association":"NONE","_links":{"self":{"href":"https://api.github.com/repos/flutter-es/website/pulls/comments/222357326"},"html":{"href":"https://github.com/flutter-es/website/pull/347#discussion_r222357326"},"pull_request":{"href":"https://api.github.com/repos/flutter-es/website/pulls/347"}},"in_reply_to_id":222161139},"pull_request":{"url":"https://api.github.com/repos/flutter-es/website/pulls/347","id":219209550,"node_id":"MDExOlB1bGxSZXF1ZXN0MjE5MjA5NTUw","html_url":"https://github.com/flutter-es/website/pull/347","diff_url":"https://github.com/flutter-es/website/pull/347.diff","patch_url":"https://github.com/flutter-es/website/pull/347.patch","issue_url":"https://api.github.com/repos/flutter-es/website/issues/347","number":347,"state":"open","locked":false,"title":"Design principles","user":{"login":"juanmorillios","id":4824933,"node_id":"MDQ6VXNlcjQ4MjQ5MzM=","avatar_url":"https://avatars0.githubusercontent.com/u/4824933?v=4","gravatar_id":"","url":"https://api.github.com/users/juanmorillios","html_url":"https://github.com/juanmorillios","followers_url":"https://api.github.com/users/juanmorillios/followers","following_url":"https://api.github.com/users/juanmorillios/following{/other_user}","gists_url":"https://api.github.com/users/juanmorillios/gists{/gist_id}","starred_url":"https://api.github.com/users/juanmorillios/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/juanmorillios/subscriptions","organizations_url":"https://api.github.com/users/juanmorillios/orgs","repos_url":"https://api.github.com/users/juanmorillios/repos","events_url":"https://api.github.com/users/juanmorillios/events{/privacy}","received_events_url":"https://api.github.com/users/juanmorillios/received_events","type":"User","site_admin":false},"body":"close #41 ","created_at":"2018-09-30T15:09:14Z","updated_at":"2018-10-03T15:29:49Z","closed_at":null,"merged_at":null,"merge_commit_sha":"78fcd0154c285ecfa48c4527d05c28881238141e","assignee":{"login":"juanmorillios","id":4824933,"node_id":"MDQ6VXNlcjQ4MjQ5MzM=","avatar_url":"https://avatars0.githubusercontent.com/u/4824933?v=4","gravatar_id":"","url":"https://api.github.com/users/juanmorillios","html_url":"https://github.com/juanmorillios","followers_url":"https://api.github.com/users/juanmorillios/followers","following_url":"https://api.github.com/users/juanmorillios/following{/other_user}","gists_url":"https://api.github.com/users/juanmorillios/gists{/gist_id}","starred_url":"https://api.github.com/users/juanmorillios/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/juanmorillios/subscriptions","organizations_url":"https://api.github.com/users/juanmorillios/orgs","repos_url":"https://api.github.com/users/juanmorillios/repos","events_url":"https://api.github.com/users/juanmorillios/events{/privacy}","received_events_url":"https://api.github.com/users/juanmorillios/received_events","type":"User","site_admin":false},"assignees":[{"login":"juanmorillios","id":4824933,"node_id":"MDQ6VXNlcjQ4MjQ5MzM=","avatar_url":"https://avatars0.githubusercontent.com/u/4824933?v=4","gravatar_id":"","url":"https://api.github.com/users/juanmorillios","html_url":"https://github.com/juanmorillios","followers_url":"https://api.github.com/users/juanmorillios/followers","following_url":"https://api.github.com/users/juanmorillios/following{/other_user}","gists_url":"https://api.github.com/users/juanmorillios/gists{/gist_id}","starred_url":"https://api.github.com/users/juanmorillios/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/juanmorillios/subscriptions","organizations_url":"https://api.github.com/users/juanmorillios/orgs","repos_url":"https://api.github.com/users/juanmorillios/repos","events_url":"https://api.github.com/users/juanmorillios/events{/privacy}","received_events_url":"https://api.github.com/users/juanmorillios/received_events","type":"User","site_admin":false}],"requested_reviewers":[{"login":"cronos88","id":5728603,"node_id":"MDQ6VXNlcjU3Mjg2MDM=","avatar_url":"https://avatars1.githubusercontent.com/u/5728603?v=4","gravatar_id":"","url":"https://api.github.com/users/cronos88","html_url":"https://github.com/cronos88","followers_url":"https://api.github.com/users/cronos88/followers","following_url":"https://api.github.com/users/cronos88/following{/other_user}","gists_url":"https://api.github.com/users/cronos88/gists{/gist_id}","starred_url":"https://api.github.com/users/cronos88/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cronos88/subscriptions","organizations_url":"https://api.github.com/users/cronos88/orgs","repos_url":"https://api.github.com/users/cronos88/repos","events_url":"https://api.github.com/users/cronos88/events{/privacy}","received_events_url":"https://api.github.com/users/cronos88/received_events","type":"User","site_admin":false}],"requested_teams":[],"labels":[{"id":1009652726,"node_id":"MDU6TGFiZWwxMDA5NjUyNzI2","url":"https://api.github.com/repos/flutter-es/website/labels/Traducci%C3%B3n","name":"Traducción","color":"4629a5","default":false}],"milestone":null,"commits_url":"https://api.github.com/repos/flutter-es/website/pulls/347/commits","review_comments_url":"https://api.github.com/repos/flutter-es/website/pulls/347/comments","review_comment_url":"https://api.github.com/repos/flutter-es/website/pulls/comments{/number}","comments_url":"https://api.github.com/repos/flutter-es/website/issues/347/comments","statuses_url":"https://api.github.com/repos/flutter-es/website/statuses/4cdb1ddbe1d783a92abb440624fb2b5159eaf327","head":{"label":"flutter-es:design_principles","ref":"design_principles","sha":"4cdb1ddbe1d783a92abb440624fb2b5159eaf327","user":{"login":"flutter-es","id":41843975,"node_id":"MDEyOk9yZ2FuaXphdGlvbjQxODQzOTc1","avatar_url":"https://avatars3.githubusercontent.com/u/41843975?v=4","gravatar_id":"","url":"https://api.github.com/users/flutter-es","html_url":"https://github.com/flutter-es","followers_url":"https://api.github.com/users/flutter-es/followers","following_url":"https://api.github.com/users/flutter-es/following{/other_user}","gists_url":"https://api.github.com/users/flutter-es/gists{/gist_id}","starred_url":"https://api.github.com/users/flutter-es/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/flutter-es/subscriptions","organizations_url":"https://api.github.com/users/flutter-es/orgs","repos_url":"https://api.github.com/users/flutter-es/repos","events_url":"https://api.github.com/users/flutter-es/events{/privacy}","received_events_url":"https://api.github.com/users/flutter-es/received_events","type":"Organization","site_admin":false},"repo":{"id":142719942,"node_id":"MDEwOlJlcG9zaXRvcnkxNDI3MTk5NDI=","name":"website","full_name":"flutter-es/website","private":false,"owner":{"login":"flutter-es","id":41843975,"node_id":"MDEyOk9yZ2FuaXphdGlvbjQxODQzOTc1","avatar_url":"https://avatars3.githubusercontent.com/u/41843975?v=4","gravatar_id":"","url":"https://api.github.com/users/flutter-es","html_url":"https://github.com/flutter-es","followers_url":"https://api.github.com/users/flutter-es/followers","following_url":"https://api.github.com/users/flutter-es/following{/other_user}","gists_url":"https://api.github.com/users/flutter-es/gists{/gist_id}","starred_url":"https://api.github.com/users/flutter-es/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/flutter-es/subscriptions","organizations_url":"https://api.github.com/users/flutter-es/orgs","repos_url":"https://api.github.com/users/flutter-es/repos","events_url":"https://api.github.com/users/flutter-es/events{/privacy}","received_events_url":"https://api.github.com/users/flutter-es/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/flutter-es/website","description":"Flutter web en español (trabajo en proceso)","fork":true,"url":"https://api.github.com/repos/flutter-es/website","forks_url":"https://api.github.com/repos/flutter-es/website/forks","keys_url":"https://api.github.com/repos/flutter-es/website/keys{/key_id}","collaborators_url":"https://api.github.com/repos/flutter-es/website/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/flutter-es/website/teams","hooks_url":"https://api.github.com/repos/flutter-es/website/hooks","issue_events_url":"https://api.github.com/repos/flutter-es/website/issues/events{/number}","events_url":"https://api.github.com/repos/flutter-es/website/events","assignees_url":"https://api.github.com/repos/flutter-es/website/assignees{/user}","branches_url":"https://api.github.com/repos/flutter-es/website/branches{/branch}","tags_url":"https://api.github.com/repos/flutter-es/website/tags","blobs_url":"https://api.github.com/repos/flutter-es/website/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/flutter-es/website/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/flutter-es/website/git/refs{/sha}","trees_url":"https://api.github.com/repos/flutter-es/website/git/trees{/sha}","statuses_url":"https://api.github.com/repos/flutter-es/website/statuses/{sha}","languages_url":"https://api.github.com/repos/flutter-es/website/languages","stargazers_url":"https://api.github.com/repos/flutter-es/website/stargazers","contributors_url":"https://api.github.com/repos/flutter-es/website/contributors","subscribers_url":"https://api.github.com/repos/flutter-es/website/subscribers","subscription_url":"https://api.github.com/repos/flutter-es/website/subscription","commits_url":"https://api.github.com/repos/flutter-es/website/commits{/sha}","git_commits_url":"https://api.github.com/repos/flutter-es/website/git/commits{/sha}","comments_url":"https://api.github.com/repos/flutter-es/website/comments{/number}","issue_comment_url":"https://api.github.com/repos/flutter-es/website/issues/comments{/number}","contents_url":"https://api.github.com/repos/flutter-es/website/contents/{+path}","compare_url":"https://api.github.com/repos/flutter-es/website/compare/{base}...{head}","merges_url":"https://api.github.com/repos/flutter-es/website/merges","archive_url":"https://api.github.com/repos/flutter-es/website/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/flutter-es/website/downloads","issues_url":"https://api.github.com/repos/flutter-es/website/issues{/number}","pulls_url":"https://api.github.com/repos/flutter-es/website/pulls{/number}","milestones_url":"https://api.github.com/repos/flutter-es/website/milestones{/number}","notifications_url":"https://api.github.com/repos/flutter-es/website/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/flutter-es/website/labels{/name}","releases_url":"https://api.github.com/repos/flutter-es/website/releases{/id}","deployments_url":"https://api.github.com/repos/flutter-es/website/deployments","created_at":"2018-07-29T00:46:28Z","updated_at":"2018-10-02T21:31:28Z","pushed_at":"2018-10-02T21:31:30Z","git_url":"git://github.com/flutter-es/website.git","ssh_url":"git@github.com:flutter-es/website.git","clone_url":"https://github.com/flutter-es/website.git","svn_url":"https://github.com/flutter-es/website","homepage":"https://flutter-es.io","size":79901,"stargazers_count":19,"watchers_count":19,"language":"Dart","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":2,"mirror_url":null,"archived":false,"open_issues_count":11,"license":null,"forks":2,"open_issues":11,"watchers":19,"default_branch":"master"}},"base":{"label":"flutter-es:master","ref":"master","sha":"4bb86269db1fb567cc2f612cc25a546afddb3b4c","user":{"login":"flutter-es","id":41843975,"node_id":"MDEyOk9yZ2FuaXphdGlvbjQxODQzOTc1","avatar_url":"https://avatars3.githubusercontent.com/u/41843975?v=4","gravatar_id":"","url":"https://api.github.com/users/flutter-es","html_url":"https://github.com/flutter-es","followers_url":"https://api.github.com/users/flutter-es/followers","following_url":"https://api.github.com/users/flutter-es/following{/other_user}","gists_url":"https://api.github.com/users/flutter-es/gists{/gist_id}","starred_url":"https://api.github.com/users/flutter-es/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/flutter-es/subscriptions","organizations_url":"https://api.github.com/users/flutter-es/orgs","repos_url":"https://api.github.com/users/flutter-es/repos","events_url":"https://api.github.com/users/flutter-es/events{/privacy}","received_events_url":"https://api.github.com/users/flutter-es/received_events","type":"Organization","site_admin":false},"repo":{"id":142719942,"node_id":"MDEwOlJlcG9zaXRvcnkxNDI3MTk5NDI=","name":"website","full_name":"flutter-es/website","private":false,"owner":{"login":"flutter-es","id":41843975,"node_id":"MDEyOk9yZ2FuaXphdGlvbjQxODQzOTc1","avatar_url":"https://avatars3.githubusercontent.com/u/41843975?v=4","gravatar_id":"","url":"https://api.github.com/users/flutter-es","html_url":"https://github.com/flutter-es","followers_url":"https://api.github.com/users/flutter-es/followers","following_url":"https://api.github.com/users/flutter-es/following{/other_user}","gists_url":"https://api.github.com/users/flutter-es/gists{/gist_id}","starred_url":"https://api.github.com/users/flutter-es/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/flutter-es/subscriptions","organizations_url":"https://api.github.com/users/flutter-es/orgs","repos_url":"https://api.github.com/users/flutter-es/repos","events_url":"https://api.github.com/users/flutter-es/events{/privacy}","received_events_url":"https://api.github.com/users/flutter-es/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/flutter-es/website","description":"Flutter web en español (trabajo en proceso)","fork":true,"url":"https://api.github.com/repos/flutter-es/website","forks_url":"https://api.github.com/repos/flutter-es/website/forks","keys_url":"https://api.github.com/repos/flutter-es/website/keys{/key_id}","collaborators_url":"https://api.github.com/repos/flutter-es/website/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/flutter-es/website/teams","hooks_url":"https://api.github.com/repos/flutter-es/website/hooks","issue_events_url":"https://api.github.com/repos/flutter-es/website/issues/events{/number}","events_url":"https://api.github.com/repos/flutter-es/website/events","assignees_url":"https://api.github.com/repos/flutter-es/website/assignees{/user}","branches_url":"https://api.github.com/repos/flutter-es/website/branches{/branch}","tags_url":"https://api.github.com/repos/flutter-es/website/tags","blobs_url":"https://api.github.com/repos/flutter-es/website/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/flutter-es/website/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/flutter-es/website/git/refs{/sha}","trees_url":"https://api.github.com/repos/flutter-es/website/git/trees{/sha}","statuses_url":"https://api.github.com/repos/flutter-es/website/statuses/{sha}","languages_url":"https://api.github.com/repos/flutter-es/website/languages","stargazers_url":"https://api.github.com/repos/flutter-es/website/stargazers","contributors_url":"https://api.github.com/repos/flutter-es/website/contributors","subscribers_url":"https://api.github.com/repos/flutter-es/website/subscribers","subscription_url":"https://api.github.com/repos/flutter-es/website/subscription","commits_url":"https://api.github.com/repos/flutter-es/website/commits{/sha}","git_commits_url":"https://api.github.com/repos/flutter-es/website/git/commits{/sha}","comments_url":"https://api.github.com/repos/flutter-es/website/comments{/number}","issue_comment_url":"https://api.github.com/repos/flutter-es/website/issues/comments{/number}","contents_url":"https://api.github.com/repos/flutter-es/website/contents/{+path}","compare_url":"https://api.github.com/repos/flutter-es/website/compare/{base}...{head}","merges_url":"https://api.github.com/repos/flutter-es/website/merges","archive_url":"https://api.github.com/repos/flutter-es/website/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/flutter-es/website/downloads","issues_url":"https://api.github.com/repos/flutter-es/website/issues{/number}","pulls_url":"https://api.github.com/repos/flutter-es/website/pulls{/number}","milestones_url":"https://api.github.com/repos/flutter-es/website/milestones{/number}","notifications_url":"https://api.github.com/repos/flutter-es/website/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/flutter-es/website/labels{/name}","releases_url":"https://api.github.com/repos/flutter-es/website/releases{/id}","deployments_url":"https://api.github.com/repos/flutter-es/website/deployments","created_at":"2018-07-29T00:46:28Z","updated_at":"2018-10-02T21:31:28Z","pushed_at":"2018-10-02T21:31:30Z","git_url":"git://github.com/flutter-es/website.git","ssh_url":"git@github.com:flutter-es/website.git","clone_url":"https://github.com/flutter-es/website.git","svn_url":"https://github.com/flutter-es/website","homepage":"https://flutter-es.io","size":79901,"stargazers_count":19,"watchers_count":19,"language":"Dart","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":2,"mirror_url":null,"archived":false,"open_issues_count":11,"license":null,"forks":2,"open_issues":11,"watchers":19,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/flutter-es/website/pulls/347"},"html":{"href":"https://github.com/flutter-es/website/pull/347"},"issue":{"href":"https://api.github.com/repos/flutter-es/website/issues/347"},"comments":{"href":"https://api.github.com/repos/flutter-es/website/issues/347/comments"},"review_comments":{"href":"https://api.github.com/repos/flutter-es/website/pulls/347/comments"},"review_comment":{"href":"https://api.github.com/repos/flutter-es/website/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/flutter-es/website/pulls/347/commits"},"statuses":{"href":"https://api.github.com/repos/flutter-es/website/statuses/4cdb1ddbe1d783a92abb440624fb2b5159eaf327"}},"author_association":"NONE"}}
{"actor":{"display_login":"juanmorillios"}}