{"id":3098,"date":"2022-03-06T22:58:04","date_gmt":"2022-03-07T01:58:04","guid":{"rendered":"https:\/\/www.geekosas.com\/?p=3098"},"modified":"2022-05-06T23:33:38","modified_gmt":"2022-05-07T02:33:38","slug":"mide-el-desempano-de-tu-equipo","status":"publish","type":"post","link":"https:\/\/geekosas.com\/index.php\/es\/2022\/03\/06\/mide-el-desempano-de-tu-equipo\/","title":{"rendered":"Mide el desempe\u00f1o de tu equipo"},"content":{"rendered":"<p>Hoy en d\u00eda con la digitalizaci\u00f3n, todas las actividades humanas van dejando una traza de c\u00f3mo se desarrollo la historia y son los Data Scientists los encargados de leer esta traza y poder as\u00ed contar una historia cuantificada y neutra.<\/p>\n<p>Una de las cosas m\u00e1s dif\u00edciles de medir es el desempe\u00f1o de las personas, para esto, la mejor pr\u00e1ctica es poner metas medibles y alcanzables (metas S.M.A.R.T.), pero esto muchas veces puede no ser pr\u00e1ctico, en especial cuando hay mucho trabajo en equipo.<\/p>\n<p>En el desarrollo de software, se utiliza una herramienta llamada GIT para llevar el versionamiento del c\u00f3digo de software escrito, al ir guardando un registro de las modificaciones en el c\u00f3digo fuente del software, al hacer esto, tambi\u00e9n estamos guardando una traza de cuantas lineas se han escrito, lo que podr\u00eda tener una alta correlaci\u00f3n con el aporte al software desarrollado por el equipo.<\/p>\n<p>En este art\u00edculo veremos un ejemplo de como realizar estas mediciones usando R.<\/p>\n<p>Primero vamos a explicar la idea:<br \/>\nsi entramos a un repositorio GIT podemos usar el <strong>git log<\/strong> para extraer informaci\u00f3n de los cambios realizados&gt;<\/p>\n<pre><code> ~\/Documents\/anasac\/corp_fact_ventas_v2  master  git log                                                                     \u2714  21:48:50 \ncommit 22049b2cfefac3aa42d83d942e836d8f79013cbf (HEAD -&gt; master, origin\/master, origin\/HEAD)\nAuthor: Daniel Fischer &lt;dfischer@anasac.cl&gt;\nDate:   Sat Mar 5 02:13:28 2022 +0000\n\n    fvfddffd\n\ncommit 0e16e038f0816088450d2a5fb211adda0db5bd92\nAuthor: Daniel Fischer &lt;dfischer@anasac.cl&gt;\nDate:   Sat Mar 5 02:09:58 2022 +0000\n\n    disale index\n\ncommit 855344eec9231706d56906aeb3853e940a2acef0\nAuthor: Daniel Fischer &lt;dfischer@anasac.cl&gt;\nDate:   Sat Mar 5 01:13:29 2022 +0000\n\n    col ano para particion\n\ncommit 0cdfe0029730dbbfe6188f3ae097f6ced73762cb\nAuthor: Daniel Fischer &lt;dfischer@anasac.cl&gt;\nDate:   Fri Mar 4 21:45:24 2022 +0000\n\n    id_pedido_venta\n\ncommit aaa15bee0f906e100e554c951658595b51900870\nAuthor: Valentina &lt;vcastro@anasac.cl&gt;\nDate:   Wed Mar 2 19:28:23 2022 +0000\n\n    fix fecha\n\ncommit 5cd1314b6e47901925c27cdcdfd9b25ca257aa1b\nAuthor: Daniel Fischer &lt;dfischer@anasac.cl&gt;\nDate:   Wed Mar 2 18:54:33 2022 +0000<\/code><\/pre>\n<p>Pero ese es un formato un poco, incomodo, por suerte git log, nos permite seleccionar el formato de salida del log, en este caso le pediremos que nos de el log en formato CSV con las sigueintes columnas:<br \/>\nid del cambio o hash, fecha del cambio, usuario o desarrollador y por ultimo el comentario del commit<\/p>\n<pre><code>\n~\/Documents\/anasac\/corp_fact_ventas_v2  master  git log --date=format:&#039;%Y-%m-%d&#039; --pretty=&#039;%H;%ad;%al;%s&#039;                   \u2714  21:48:56 \n22049b2cfefac3aa42d83d942e836d8f79013cbf;2022-03-05;dfischer;fvfddffd\n0e16e038f0816088450d2a5fb211adda0db5bd92;2022-03-05;dfischer;disale index\n855344eec9231706d56906aeb3853e940a2acef0;2022-03-05;dfischer;col ano para particion\n0cdfe0029730dbbfe6188f3ae097f6ced73762cb;2022-03-04;dfischer;id_pedido_venta\naaa15bee0f906e100e554c951658595b51900870;2022-03-02;vcastro;fix fecha\n5cd1314b6e47901925c27cdcdfd9b25ca257aa1b;2022-03-02;dfischer;relleno fcast\n4bf9db5250fe688348d58c602082e089fdaa32c7;2022-03-02;dfischer;fixes\n370b760d3e58428ce328ad5aa281146fc6aefec1;2022-03-02;dfischer;pasado forecasts\n24140747f0236b812c7b7a68df1fb33a2b3090c4;2022-03-02;dfischer;fix ppto\n22ed8b64d58c1164b1119d6371913cbcd2c7b60b;2022-03-01;vcastro;ventas smk\nbae35b891d9c91d0941104c9ad53725e91a953f2;2022-03-01;vcastro;ventas en usd\n6f29aad5a5738d2e6a6235764767ac04e81b0503;2022-03-01;vcastro;ventas en usd\nca1201cb7984778affc6d24e33e2c2098973f383;2022-03-01;dfischer;corr an02\n2e534c9e72c892274619497f4fa131bb059c9776;2022-03-01;dfischer;Merge branch &#039;master&#039; of bitbucket.org:anasac-analytics\/corp_fact_ventas_v2\n64a57e1acbeb76be05b9d9ee34429cf3db3cee6a;2022-03-01;dfischer;pedido_venta\n4d6874c9c177c8c385ef7211c006a451bc42f64c;2022-02-24;vcastro;inicial todas las filiales\ne0342bafd7c4cb50f58ecbce87ff2dfb9034b94b;2022-02-23;dfischer;cambio fecha\n26e9fb44d7d5d833b75691671e27da83946780d2;2022-02-23;dfischer;checkpint\nbd3f10a03d726d7f8a9341de34ef17f01a6c9ea6;2022-02-23;dfischer;cantidad mat pedido\n05c3b87b411fc46bcfd893d1b7f7defdb4df14c1;2022-02-23;dfischer;fix\n2def3cee8dc2a6a3866004387fea260b96f7e7d6;2022-02-23;dfischer;fix\n7f0e52b4f1cb57ccb9aa7578714675f609cbf18b;2022-02-23;dfischer;cantidad al costo\n528342724ea6be43f7254f96fa58c1ea94c4d980;2022-02-23;dfischer;material inac\n7e17a96bf632c61fd146eaa3511c06ea8fd00e7a;2022-02-23;dfischer;incompletos\n7e267729d078e8b37efd8369cf9578ff85a58572;2022-02-22;dfischer;vta_int\nf25f2cde9be373b5a405fab9eac91a3f0303fefb;2022-02-22;dfischer;NC a libro diario\necb747106321459463aa29220d3f87984650829f;2022-02-22;dfischer;cantidad de material en ingreso\nbd0e5842d76841bb785c13f24660d1dc22dbcf8a;2022-02-21;dfischer;nc out<\/code><\/pre>\n<p>con la tabla anterior ya tendr\u00edamos una metrica sobre cuantos commit hizo cada desarrollador, pero no todos los commit son iguales, con el id\/hash del commit podemos acceder al detalle de este.<\/p>\n<p>La primera columna es el numero de lineas agregadas, la segunda es el numero de lineas borradas y la ultima es el archivo modificado, en el ejemplo a continuaci\u00f3n podemos ver claramente que hay commits que tienen m\u00e1s trabajo que otros, por lo que lo mejor es contar las lineas agregadas.<\/p>\n<pre><code> ~ \ue0b0 git -C \/home\/dfischer\/Documents\/anasac\/acl_etl show --numstat e7040035cf5bc4bdf3eaa75e9371a31de00bff30               \ue0b2 \u2714 \ue0b3 22:27:05 \ncommit e7040035cf5bc4bdf3eaa75e9371a31de00bff30 (HEAD -&gt; master, origin\/master, origin\/HEAD)\nAuthor: cinostroza &lt;cinostroza@anasac.cl&gt;\nDate:   Fri Apr 8 20:31:08 2022 +0000\n\n    extraccion fm clientes\n\n93      57      preprocessing\/fm.clientes.py\n3       0       run.sh\n<\/code><\/pre>\n<p>Por \u00faltimo, un equipo puede estar trabajando en varios proyectos a la vez por lo que adem\u00e1s de sacar las m\u00e9tricas para cada commit, se deben sacar para cada repositorio.<\/p>\n<p>Lo primero es Clonar todos los repositorios en los que se esta trabajando en una carpeta, tal como en la foto a continuaci\u00f3n:<br \/>\n<img data-recalc-dims=\"1\" decoding=\"async\" src=\"https:\/\/i0.wp.com\/www.geekosas.com\/wp-content\/uploads\/2022\/03\/image-1646613967864.png?ssl=1\" alt=\"file\" \/><\/p>\n<p>y ejecutaremos el siguiente Script de R:<\/p>\n<pre><code class=\"language-r\">cabecera = data.frame()\nfor(g in gits){\n  # g = gits[5]\n  cab = system(paste(&quot;git -C&quot;,g,&quot;log --date=format:&#039;%Y-%m-%d %H:%M:%S&#039; --pretty=&#039;%H\\t%ad\\t%al\\t%s&#039;&quot;),intern = T)\n  cab = do.call(rbind,str_split(cab,&quot;\\t&quot;)) %&gt;% data.frame() %&gt;% select(1:4)\n  colnames(cab) = c(&quot;hash&quot;,&quot;date&quot;,&quot;user&quot;,&quot;comment&quot;)\n  cab$date = ymd_hms(cab$date)\n  cab$repo = basename(g)\n  cabecera = bind_rows(cabecera,cab)\n}\n\ndetalle = list\nfor(n_cab in 1:nrow(cabecera)){\n  # n_cab = 1\n  cab = cabecera[n_cab,]\n  # ant = cabecera[n_cab + 1,]\n  # print(cab)\n  try({\n    det = system(paste0(&quot;git -C &quot;,git_path,cab$repo,&quot; show --numstat &quot;,cab$hash),intern = T)\n    det = det[-1:-6]\n    det = do.call(rbind,str_split(det,&quot;\\t&quot;)) %&gt;% data.frame() %&gt;% select(1:3)\n    # print(det)\n    colnames(det) = c(&quot;added&quot;,&quot;removed&quot;,&quot;filename&quot;)\n    det = det %&gt;% mutate(\n      repo = cab$repo,\n      hash = cab$hash,\n      added = as.numeric(added),\n      removed = as.numeric(removed)\n    )\n    det$repo = cab$repo\n    det$hash = cab$hash\n    # detalle = bind_rows(detalle,det)\n    detalle = append(detalle,det)\n  })\n}\ndetalle = bind_rows(detalle)\n\ndataset = cabecera %&gt;% inner_join(detalle, by =c(&quot;hash&quot;,&quot;repo&quot;))\n\n#eliminamos los hash duplicados por forks\ndataset = dataset %&gt;% group_by(hash) %&gt;% \n  filter(row_number() == 1) %&gt;% \n  ungroup()\n<\/code><\/pre>\n<p>obteniendo una tabla del siguiente modo:<br \/>\n<img data-recalc-dims=\"1\" decoding=\"async\" src=\"https:\/\/i0.wp.com\/www.geekosas.com\/wp-content\/uploads\/2022\/03\/image-1646617234614.png?ssl=1\" alt=\"file\" \/><\/p>\n<p>con este podemos construir m\u00e9tricas como:<\/p>\n<p>Cuales son los proyectos que mas han recibido trabajo:<\/p>\n<pre><code class=\"language-r\">> dataset %&gt;% \n+   group_by(repo) %&gt;% \n+   summarise(added = sum(added,na.rm = T),.groups = &quot;drop&quot;) %&gt;% \n+   arrange(desc(added)) %&gt;% \n+   print(n=100) %&gt;% \n+   View()<\/code><\/pre>\n<p><img data-recalc-dims=\"1\" decoding=\"async\" src=\"https:\/\/i0.wp.com\/www.geekosas.com\/wp-content\/uploads\/2022\/03\/image-1646617549497.png?ssl=1\" alt=\"file\" \/><\/p>\n<p>Que repositorios han recibido la mayor cantidad de trabajo en los \u00faltimos 2 meses:<br \/>\n<img data-recalc-dims=\"1\" decoding=\"async\" src=\"https:\/\/i0.wp.com\/www.geekosas.com\/wp-content\/uploads\/2022\/03\/image-1646617627027.png?ssl=1\" alt=\"file\" \/><\/p>\n<p>por ultimo, quienes son los usuarios que mas han colaborado a cada repositorio en los ultimos 2 meses (nombre de desarrollador tapado):<\/p>\n<pre><code class=\"language-r\">> dataset %&gt;% \n+   filter(date&gt;=as.Date(&quot;2022-01-01&quot;), !repo %in% c(&quot;backup_tabla_manual&quot;,&quot;mantencion_atenea&quot;,&quot;script_configuracion&quot;,&quot;sandobox_dfischer&quot;)) %&gt;%\n+   group_by(user,repo) %&gt;% \n+   summarise(added = sum(added,na.rm = T),.groups = &quot;drop&quot;) %&gt;% \n+   arrange(desc(added)) %&gt;% \n+   spread(user,added) %&gt;% \n+   print(n=100) %&gt;%\n+   View()<\/code><\/pre>\n<p><img data-recalc-dims=\"1\" decoding=\"async\" src=\"https:\/\/i0.wp.com\/www.geekosas.com\/wp-content\/uploads\/2022\/03\/image-1646617892304.png?ssl=1\" alt=\"file\" \/><\/p>\n<p>y as\u00ed se pueden crear infinitas m\u00e9tricas.<\/p>\n<p>como bonus les dejo el siguiente script en python para actualizar todos los repositorios de una carpeta<\/p>\n<pre><code class=\"language-python\">#!\/bin\/python3\nimport os\n\ndirs = os.listdir()\npath = os.getcwd()\n\nrepos = [path + &quot;\/&quot; + d for d in dirs if d[0] != &#039;.&#039;]\n\nfor r in repos:\n    if os.path.isdir(r):\n        print(r)\n        os.chdir(r)\n        os.system(&quot;git pull&quot;)<\/code><\/pre>\n<p>Saludos!<\/p>\n<p>como siempre el repositorio con el codigo en git:<br \/>\n<a href=\"https:\/\/github.com\/danielfm123\/git-metrics\">https:\/\/github.com\/danielfm123\/git-metrics<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div class=\"mh-excerpt\"><p>Hoy en d\u00eda con la digitalizaci\u00f3n, todas las actividades humanas van dejando una traza de c\u00f3mo se desarrollo la historia y son los Data Scientists <a class=\"mh-excerpt-more\" href=\"https:\/\/geekosas.com\/index.php\/es\/2022\/03\/06\/mide-el-desempano-de-tu-equipo\/\" title=\"Mide el desempe\u00f1o de tu equipo\">[&#8230;]<\/a><\/p>\n<\/div>","protected":false},"author":1,"featured_media":3099,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2},"jetpack_post_was_ever_published":false},"categories":[1],"tags":[],"class_list":["post-3098","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-sin-categoria"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"https:\/\/i0.wp.com\/geekosas.com\/wp-content\/uploads\/2022\/03\/performance.png?fit=578%2C492&ssl=1","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p8vjqF-NY","jetpack-related-posts":[{"id":3115,"url":"https:\/\/geekosas.com\/index.php\/es\/2022\/05\/07\/buenas-practicas-al-programar-con-codigo\/","url_meta":{"origin":3098,"position":0},"title":"Buenas pr\u00e1cticas al programar (con c\u00f3digo)","author":"Daniel Fischer","date":"2022-05-07","format":false,"excerpt":"Muchos disfrutan programar y resolver laberintos algor\u00edtmicos en su lenguaje favorito, pero lo que a nadie le gusta, es meterse en un c\u00f3digo viejo o incluso peor, en un c\u00f3digo escrito por otro. A m\u00ed me ha tocado hacerlo ya varias veces, algunas veces ha sido malo, otras veces peor,\u2026","rel":"","context":"In &quot;Sin categor\u00eda&quot;","block_context":{"text":"Sin categor\u00eda","link":"https:\/\/geekosas.com\/index.php\/category\/sin-categoria\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/geekosas.com\/wp-content\/uploads\/2022\/05\/logo.png?fit=1200%2C600&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/geekosas.com\/wp-content\/uploads\/2022\/05\/logo.png?fit=1200%2C600&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/geekosas.com\/wp-content\/uploads\/2022\/05\/logo.png?fit=1200%2C600&ssl=1&resize=525%2C300 1.5x, https:\/\/i0.wp.com\/geekosas.com\/wp-content\/uploads\/2022\/05\/logo.png?fit=1200%2C600&ssl=1&resize=700%2C400 2x, https:\/\/i0.wp.com\/geekosas.com\/wp-content\/uploads\/2022\/05\/logo.png?fit=1200%2C600&ssl=1&resize=1050%2C600 3x"},"classes":[]},{"id":2771,"url":"https:\/\/geekosas.com\/index.php\/es\/2020\/04\/07\/comparativa-entre-julia-python-y-r\/","url_meta":{"origin":3098,"position":1},"title":"Comparativa entre Julia, Python y R","author":"Daniel Fischer","date":"2020-04-07","format":false,"excerpt":"La discusi\u00f3n sobre que lenguaje es el mejor para analizar datos puede llevarnos a conversaciones mas apasionadas que por temas como religi\u00f3n o pol\u00edtica. Pero como Data-Scientist debemos enfocarnos en la evidencia emp\u00edrica, las dimensiones con las que se podr\u00edan comparar son muchas: Comunidad, Performance, Editores, Gestor de Paquetes, Encapsulaci\u00f3n\u2026","rel":"","context":"In &quot;Sin categor\u00eda&quot;","block_context":{"text":"Sin categor\u00eda","link":"https:\/\/geekosas.com\/index.php\/category\/sin-categoria\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/geekosas.com\/wp-content\/uploads\/2019\/09\/external-content.duckduckgo.com_.jpg?fit=474%2C312&ssl=1&resize=350%2C200","width":350,"height":200},"classes":[]},{"id":21,"url":"https:\/\/geekosas.com\/index.php\/es\/2016\/04\/11\/como-elegir-celular\/","url_meta":{"origin":3098,"position":2},"title":"Como elegir celular?","author":"Daniel Fischer","date":"2016-04-11","format":false,"excerpt":"Pasamos m\u00e1s tiempo con nuestro celular que con nuestra familia, es m\u00e1s, lo usamos para comunicarlos con ella y para muchos es una herramienta fundamental de trabajo. Un celular, quiera admitirlo o no, es un compa\u00f1ero de vida, que seg\u00fan sea la relaci\u00f3n te podr\u00eda acompa\u00f1ar el ba\u00f1o por varios\u2026","rel":"","context":"In &quot;Sin categor\u00eda&quot;","block_context":{"text":"Sin categor\u00eda","link":"https:\/\/geekosas.com\/index.php\/category\/sin-categoria\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/geekosas.com\/wp-content\/uploads\/2016\/04\/mensagens_amor_namorados_para_celular.jpg?fit=400%2C225&ssl=1&resize=350%2C200","width":350,"height":200},"classes":[]},{"id":23,"url":"https:\/\/geekosas.com\/index.php\/es\/2016\/04\/12\/sobre-linux\/","url_meta":{"origin":3098,"position":3},"title":"Sobre Linux","author":"Daniel Fischer","date":"2016-04-12","format":false,"excerpt":"Si un d\u00eda por la ma\u00f1ana, despiertas con la inspiraci\u00f3n de descubrir algo nuevo y pones en wikipedia el bot\u00f3n Pagina Aleatorea, con una probabilidad de 1\/1.233.000, caer\u00e1s en el articulo sobre Linux. Si quieres esperar a ese evento, puedes seguir intentando, si no, puedes seguir leyendo este articulo sobre\u2026","rel":"","context":"In &quot;Sin categor\u00eda&quot;","block_context":{"text":"Sin categor\u00eda","link":"https:\/\/geekosas.com\/index.php\/category\/sin-categoria\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/geekosas.com\/wp-content\/uploads\/2016\/04\/linux.png?fit=387%2C442&ssl=1&resize=350%2C200","width":350,"height":200},"classes":[]},{"id":2560,"url":"https:\/\/geekosas.com\/index.php\/es\/2018\/08\/18\/escribir-en-redshift-desde-r-a-toda-velocidad\/","url_meta":{"origin":3098,"position":4},"title":"Escribir en Redshift desde R a toda velocidad","author":"Daniel Fischer","date":"2018-08-18","format":false,"excerpt":"Como muchos saben, Redshift es un fork de Postgres hecho por Amazon para entregar un servicio de Data Warehouse, la gran diferencia entre estos 2 productos es que el primero es una base de datos columnar y comprimida, mientras que el segundo no. Las bases de datos columnares son muy\u2026","rel":"","context":"In &quot;Sin categor\u00eda&quot;","block_context":{"text":"Sin categor\u00eda","link":"https:\/\/geekosas.com\/index.php\/category\/sin-categoria\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/geekosas.com\/wp-content\/uploads\/2018\/08\/RtoRedshift.png?fit=600%2C300&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/geekosas.com\/wp-content\/uploads\/2018\/08\/RtoRedshift.png?fit=600%2C300&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/geekosas.com\/wp-content\/uploads\/2018\/08\/RtoRedshift.png?fit=600%2C300&ssl=1&resize=525%2C300 1.5x"},"classes":[]},{"id":87,"url":"https:\/\/geekosas.com\/index.php\/es\/2016\/03\/29\/strava-el-facebook-de-los-ciclistas\/","url_meta":{"origin":3098,"position":5},"title":"Strava &#8211; El Facebook de los Ciclistas","author":"Daniel Fischer","date":"2016-03-29","format":false,"excerpt":"Strava es el Facebook de los ciclistas, al comienzo cuesta entender esta app, pero una vez que la entiendes, se convierte en una saludable dependencia. Antes de comenzar quiero decir que esto no es\u00a0Spronsored Content, aun no no alcanzo ese nivel de desarrollo en este blog. En Facebook vemos las\u2026","rel":"","context":"In &quot;Uncategorized&quot;","block_context":{"text":"Uncategorized","link":"https:\/\/geekosas.com\/index.php\/es\/category\/uncategorized-es\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/www.geekosas.com\/wp-content\/uploads\/2016\/03\/capture-300x234.png?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/www.geekosas.com\/wp-content\/uploads\/2016\/03\/capture-300x234.png?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/www.geekosas.com\/wp-content\/uploads\/2016\/03\/capture-300x234.png?resize=525%2C300&ssl=1 1.5x"},"classes":[]}],"_links":{"self":[{"href":"https:\/\/geekosas.com\/index.php\/wp-json\/wp\/v2\/posts\/3098","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/geekosas.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/geekosas.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/geekosas.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/geekosas.com\/index.php\/wp-json\/wp\/v2\/comments?post=3098"}],"version-history":[{"count":6,"href":"https:\/\/geekosas.com\/index.php\/wp-json\/wp\/v2\/posts\/3098\/revisions"}],"predecessor-version":[{"id":3121,"href":"https:\/\/geekosas.com\/index.php\/wp-json\/wp\/v2\/posts\/3098\/revisions\/3121"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/geekosas.com\/index.php\/wp-json\/wp\/v2\/media\/3099"}],"wp:attachment":[{"href":"https:\/\/geekosas.com\/index.php\/wp-json\/wp\/v2\/media?parent=3098"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/geekosas.com\/index.php\/wp-json\/wp\/v2\/categories?post=3098"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/geekosas.com\/index.php\/wp-json\/wp\/v2\/tags?post=3098"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}