Noticias rmgss.net https://www.rmgss.net/rss Sitio personal de Rodrigo Garcia es python Flask - Jinja2 Navidad 2020 https://rmgss.net/posts/navidad-2020 https://rmgss.net/posts/navidad-2020 Sat Jan 2 09:02:45 2021 text/html Rodrigo Garcia reflexión , navidad (' \nDe nuevo reflexionando en los días finales de 2020, ya son algunos días luego de la navidad y es buena oportunidad también para reflexionar.\n\nnavidad2020\n\nEl año 2020 fue de nuevas experiencias y oportunidades, el mundo ha empezado un año que de a poco empezó a hacer notar que las circunstancias están en constante cambio. Como todo cambio viene acompañado de consecuencias, justo en los últimos días se sienten y se seguirán sintiendo.\n\n \nDesde finales de 2019 e inicios del 2020 el coronavirus fue el tema principal, una combinación de varios sentimientos estuvo presente en las personas entre ellas miedo e incertidumbre. Las medidas de confinamiento tomadas por los diferentes países han obligado a parar muchas actividades y muchas personas que las realizaban se han visto afectadas.\n\nMuchos gobiernos tomaron medidas de protección a la población para evitar contagios pero con estrategias inadecuadas. En Bolivia que estaba bajo un gobierno de transición, las necesidades de la población rebasaron por mucho las capacidades de este que era un gobierno con una presidenta, autoridades y estructura improvisadas. No tomó medidas ni aplicó las políticas necesarias para disminuir el efecto de la pandemia del covid 2019. Sumado a eso, este gobierno de transición invirtió muchos recursos y esfuerzos en sembrar desprecio hacia sus partidos políticos opositores.\n\nLa población que empezó a sufrir los efectos de la pandemia, también tuvo que sufrir la incompetencia y pugnas de poder por parte de aquellos que tenian la tarea de gobernarlos para bien. Durante la (aún por tiempo indefinido) pandemia del coronavirus, se han revelado muchos defectos de los sistemas de gobierno, administración pública, sistemas de salud y de las mismas sociedades.\n\nEsto ha hecho que en 2020 se haya dado lugar a una serie de protestas a nivel mundial, protestas de la población descontenta exigiendo a sus gobiernos entre otras cosas igualdad de condiciones, transparencia y toma de medidas para solucionar problemas desatentidos o negados por estos mismos. Por ejemplo en Estados Unidos tras la muerte de Goerge Floyd, se desató una oleada de indignación en contra de males de fondo como el racismo y abuso policial.\n\nLas protestas en varios países «desarrollados» y «sub desarrollados» estaban creciendo a escalas alarmantes y rebasando la capacidad de los gobiernos de apaciguarlas. Como si estuviese planificado, los contagios por coronavirus se incrementaron rápidamente y esto en cierta forma sirvio para frenar y hasta acabar con varios movimientos de protesta. La población que protestaba ahora también se vío forzada a tener que dejar de hacerlo para cuidar su propia salud y la salud de sus seres queridos.\n\nAlgo que también he confirmado es la evidente dificultad para enfrentar los males de fondo por parte de la sociedad. En mi opinión la pandemia del coronavirus es una consecuencia del daño a la naturaleza causado por los hábitos depredadores de la misma sociedad que la sufre, y he intentado explicarlo en el post "coronavirus y su relación con el trato a la naturaleza". Las sociedades en su mayoría se han ocupado de mitigar los daños causados por la pandemia pero poca acción se le ha dado a comprender las causas y tomar medidas para tratarlas. Esto quiere decir que no se están tomando acciones suficientes para vivir en armonía con la naturaleza y así evitar futuros desastres.\n\n \nCada persona vive su vida y muchas ahora la ven desde otro enfoque, las dificultades del 2020 han resultado en pérdida de empleos, vidas, y entre otras —aumento de la brecha entre ricos y pobres—, también ha hecho que veamos las cosas desde otra perspectiva. En mi caso, una mas consciente de la realidad y de que para seguir avanzando es útil tener una visión amplia e inclusiva.\n\nUn enfoque que aproveche las oportunidades y ayude a comprender que ayudarse y ayudar es una tarea de todos los días y no solo en navidad o días predefinidos. Cuando las cosas cambian o nosotros mismos cambiamos, es buena idea tomar acciones y medidas para adaptarse al cambio e incluirlo en nuestro ser para usarlo a nuestro favor, respetando siempre a los demás y lo que amamos.\n\nComo dice el poema "Ítaca" de Konstantínos Kaváfis. y las reflexiones que alguien puso sobre este:\n\n> Ten siempre en tu mente a Ítaca. Llegar ahí es tu destino.\n\nÍtaca representa la meta, el sueño, los sueños son la fuerza que nos empuja al camino, lo que nos mueve.\n\n> No has de esperar qué Ítaca te enriquezca:\n> \n> Ítaca te ha concedido ya un hermoso viaje.\n\nEl bello viaje es el camino, y —lo que te da la meta, es el camino—.\n\nbocho en flores 1\n\nFelices fiestas y a seguir el 2021 :)\n', ['reflexión', 'navidad'])

]]>
Coronavirus y su relación con el trato a la naturaleza https://rmgss.net/posts/Coronavirus-y-su-relación-con-el-trato-a-la-naturaleza https://rmgss.net/posts/Coronavirus-y-su-relación-con-el-trato-a-la-naturaleza Sun Sep 20 11:13:24 2020 text/html Rodrigo Garcia reflexión , naturaleza ('Desde los primeros meses de 2020 gran parte del mundo, ha sido forzado a detener el estilo de vida habitual por las medidas que tomaron varios países para evitar el contagio acelerado del coronavirus, una enfermedad causada por el síndrome respiratorio agudo grave SARS-CoV-2.\n\nEste post esta dividido en secciones, con el fin de analizar y compartir algunos artículos y reflexiones sobre como debería cambiar nuestra relación con la naturaleza a causa de la pandemia.\n\n \n<img src="https://upload.wikimedia.org/wikipedia/commons/d/d2/Pandemics_transmitted_by_Eating_Animals_ENG_%26_CHINESE_%28blue%29.-1.jpg" width="620">\n\n<span class="foto_nota">Epidemias y pandemias provenientes del consumo de carne animal y ganado. Imagen de Fangpila</span>\n\nHay varias teorías sobre el posible origen, pero una de las mejores respaldadas es que el SARS-CoV-2 es de origen zoonótico y que fue transmitida de animales a humanos, una enfermedad infecciosa desde una especie animal a la nuestra. Por ejemplo un estudio dice que el SARS-CoV-2 no es un diseño de laboratorio o un virus fabricado a propósito[3]. Al parecer el SARS-CoV-2 no tiene como pariente más cercano al SARS-CoV-1, sino se han encontrado más parecidos en virus presentes en murciélagos y en pangolines malayos, aunque la transmisión directa desde estos mamíferos a los humanos es poco probable[1]. Si la transmisión es poco probable, ¿qué ha causado que se den las condiciones?.\n\nHay un dato que dice que más del 70% de las infecciones emergentes en los últimos cuarenta años han sido zoonosis[17], es decir, enfermedades infecciosas causadas por bacterias, virus, hongos o parásitos que se transmiten de los animales a los humanos[2]. Nuestra especie ha estado en contacto con animales desde tiempos inmemorables y siempre ha estado expuesta a enfermedades infecciosas, por tanto el «intercambio» de microorganismos entre humanos y animales está presente y es un proceso natural. Sin embargo, todo proceso natural lleva tiempo y cada especie asimila ese intercambio a su ritmo.\n\nEl contacto progresivo hace que se generen cambios biológicos progresivos, pero el contacto súbito o en condiciones desfavorables para una especie provoca cambios súbitos. Un ejemplo claro son las especies amenazadas o en peligro de extinción, el estrés y sufrimiento que experimentan hace que sus defensas bajen y por tanto no puedan generar anticuerpos por si mismas para controlar enfermedades que en condiciones normales podían.\n\nEn el caso del SARS-CoV-2, las investigaciones apuntan a que la transmisión se hizo de un animal a un animal intermedio y luego a un ser humano. El animal que transmitió el virus a otro animal intermedio era un murciélago, y el animal intermedio con toda seguridad era un pangolín de acuerdo con el genoma del coronavirus encontrado en estos animales y que se transmitió hasta los humanos. Según esa hipótesis, las características genéticas que hacen que el nuevo coronavirus sea tan patógeno para infectar células humanas, es que residían en esos animales antes de saltar a los humanos.\n\nEn China la caza de pangolines los ha puesto en peligro de extición, se mantienen poblaciones de pangolines en cautividad y enjaulados para luego venderlos en mercados o cocinarlos. El mal estado sanitario y la baja inmunidad que afecta a las poblaciones en cautividad son un importante riesgo potencial para la salud humana[2].\n\nResumiendo, mucho apunta a que el SARS-COV-2 (causa del coronavirus) se originó por una mutación en animales víctimas de la caza furtiva y — es una consecuencia directa de la insensibilidad de muchas personas hacia los animales.\n\nUn pangolín. Imagen de A. J. T. Johnsingh, WWF-India and NCF\n\n<span class="foto_nota">Un pangolín. Imagen de A. J. T. Johnsingh, WWF-India and NCF</span>\n\n\n \nLa respuesta es; la pandemia por el coronavirus de 2019 y 2020 es una clara consecuencia de las acciones de los seres humanos, en especial las relacionadas a la destrucción de ecosistemas naturales y vida silvestre.\n\n \nSe sabe que una especie vegetal o animal no es amenazada sólo por la caza o consumo, también esta la pérdida de su ecosistema u otros cambios desfavorables. La destrucción de ecosistemas naturales ha crecido de forma alarmante en las últimas décadas. Sin las condiciones ni el lugar adecuado los seres vivos no pueden prosperar y la supervivencia se vuelve cada vez más difícil.\n\n \n<img src="https://upload.wikimedia.org/wikipedia/commons/b/b9/Deforestation_2074483b.jpg" width="560" alt="Deforestation 2074483b" >\n\n<span class="foto_nota">Deforestación. Imagen de Dikshajhingan</span>\n\nUn bosque primario o virgen, es un bosque que no ha sido intervenido por la especie humana, es un lugar con gran biodiversidad y tiene gran capacidad de atrapar el CO2 de la atmósfera, mitigando el cambio climático. Los manglares y humedales son otro ejemplo de ecosistema que atrapa gran cantidad de CO2[9].\n\nA nivel global, un informe señala que la pérdida de bosque primario en 2019 representa un aumento global de 2.8% respecto a la pérdida del año anterior. Y aunque fue menor que la de los años record de 2016 y 2017, es la tercera peor tasa de pérdida en los últimos 20 años[8].\n\nLa amazonía es un área rica en bosques vírgenes, pero esa riqueza se va perdiendo debido a la desenfrenada deforestación en países como Brasil, Argentina, Bolivia, Perú y otros en América Latina. Es difícil imaginar la destrucción causada, pero según datos publicados en Global Forest Watch (GFW), en 2019 los trópicos perdieron 11,9 millones de hectáreas de cobertura arbórea. Casi un tercio de esa pérdida, 3,8 millones de hectáreas, ocurrió en bosques primarios tropicales húmedos. Esto es equivalente a perder un campo de Futbol de selva cada 6 segundos[10].\n\nMapa de pérdida, ganancia y cobertura arbórea de 2001 a 2019\n\n<span class="foto_nota">Mapa de pérdida, ganancia y cobertura arbórea de 2001 a 2019. Extraído de https://www.globalforestwatch.org/map/ en Julio de 2020.</span>\n\nEl gráfico anterior se centra en América, muestra en color rosado la pérdida de cobertura arbórea de 2001 a 2019. La ganancia en azul de 2001 a 2012 y en color verde la cobertura arbórea que se mantiene.\n\nVemos claramente que la pérdida es especialmente alta en la región de la amazonía en Brasil, Perú y Bolivia. El norte argentino y Paraguay también muestran gran pérdida seguidos de Colombia, Ecuador y otros países.\n\nEn contraste, en Norteamérica a pesar de también existir una gran pérdida de cobertura árborea, también hay zonas con una considerable ganancia. Sin embargo, hay estudios que indican que estos nuevos árboles ganados en el hemisferio norte a nivel mundial «no se comparan» con el bosque primario perdido en Sudamérica en términos de biodiversidad. Un artículo dice: "Los árboles establecidos en el hemisferio norte en años recientes no tienen el mismo impacto que los bosques primarios de Brasil en dos parámetros clave: la capacidad de albergar biodiversidad y la capacidad de absorber y secuestrar dióxido de carbono" [11].\n\nEn 2019, los bosques sufrieron masivos incendios en especial en Brasil, Bolivia y Australia, pero aún así, los incendios no fueron la principal causa de pérdida de bosque primario en Brasil [8]. Las causas principales de la deforestación en nuestros países tienen que ver con factores que analizaremos más adelante.\n\nBolivia tuvo una pérdida de cobertura arbórea sin precedentes en bosques primarios y zonas circundantes. Según GFW, en el 2019, la pérdida total en el país fue un 80 % más alta que la del año con la mayor pérdida registrada hasta la fecha (que fue 2016). GFW indica que la actividad agropecuaria a gran escala fue el conductor principal de la deforestación en Bolivia, especialmente para la siembra de soya y ganadería[12]. \n\nDe acuerdo con GFW la pandemia del coronavirus plantea más amenazas para los bosques del mundo en los meses y años por delante. Y a corto plazo, los bosques pueden verse afectados por una falta de vigilancia y control, lo que puede dar lugar a una mayor incidencia de desmonte ilegal e incendios[12]. Entonces es lógico suponer que mientras la mayoría de la población en Bolivia debe acatar el confinamiento para controlar el contagio masivo del coronavirus, los desmontes van avanzando sin parar.\n\nArgentina que es uno de los 10 países del mundo con más deforestación, de igual forma ha suspendido la mayoría de las actividades, pero el agronegocio destruyó 200 hectáreas por día de monte nativo [13]. —¿Cúanto daño más va a sufrir la selva y los bosques antes de que se tomen medidas y políticas de protección?. \n\nLa destrucción de los ecosistemas naturales tiene graves consecuencias no sólo para las especies que viven en ellas, también tienen su efecto a nivel global, y, permitiendo que continúe, se permite que quienes destruyen la vida del planeta que nos acoge, queden impunes y sean cada vez más insensibles realizando estos actos.\n\n \n<img width="460" alt="Sumatran Rhinoceros - Rapunzel" src="https://upload.wikimedia.org/wikipedia/commons/thumb/7/7e/Sumatran_Rhinoceros_-Rapunzel.jpg/512px-Sumatran_Rhinoceros-Rapunzel.jpg">\n\n<span class="foto_nota">Rinoceronte de Sumatra, una especie muy afectada por la destrucción de sus bosques. Foto de nicolaitan</span>\n\nIncluso luego de la deforestación y si la zona deforestada se deja intacta, los árboles pueden vuelven a crecer y en el mediano plazo se podría restaurar la flora del bosque. Pero los animales (la fauna) no, una especie animal puede requerir mucho más tiempo para recuperarse y puede que no lo haga nunca más.\n\nSólo en el caso de Bolivia durante los incendios forestales del bosque seco Chiquitano, hay varias estimaciones sobre la muerte de animales pero se maneja una cifra de mas de dos millones de animales salvajes[14] y hay algunos que opinan que la Chiquitania no podrá recuperarse.\n\nCon relación a los incendios del bosque Seco Chiquitano en 2019, no encontré muchos estudios que cuantifiquen los daños en la fauna. Un estudio que analiza el impacto en el hábitat del Jaguar (por el rol ecológico de este) indica que el 17% del área total de su hábitat en el bosque Modelo Chiquitano resultó quemada[15]. El hábitat del Jaguar es muy extenso, en el bosque Chiquitano existen otras especies cuyos ecosistemas fuerón afectados y cubren menos extensión, y por el daño a estos ecosistemas seguramente estas resultarón diezmadas.\n\nEn ecosistemas diversos como los bosques, cuando el hábitat de los animales es destruido estos pierden el lugar en donde viven y se alimentan. Los que consiguen huir de la destrucción sufren de hambruna y buscan nuevos territorios para vivir. En ese proceso se pueden convertir en especies invasoras porque ocupan el territorio en el que otras especies viven y si llegan a sobrevivir en el nuevo hábitat, causan un impacto sobre este. Por ejemplo consumen el alimento que normalmente consumían otras especies, modifican el ecosistema, pueden traer nuevas enfermedades, etc. Aunque la «invasión» de hábitats es normal en especies animales, la «invasión forzada» (en este caso por la destrucción provocada por el hombre) resulta en desbalances descontrolados.\n\n \n¿Qué es lo que hace que muchas personas se ocupen en causar los daños mencionados por la destrucción de ecosistemas y el tráfico ilegal de animales? ¿cúales son las causas?\n\nDe seguro que hay muchas y hasta cierto punto se pueden considerar muy difíciles de evitar, pero la forma en que esto ocurre como ha estado ocurriendo en los últimos años hace que se noten motivaciones comunes como ser:\n\n- Agricultura\n- Industria maderera\n- Industria de bio combustibles\n- Ganadería\n- Minería\n- Caza Furtiva\n- Construcción de carreteras\n- Asentamientos\n\nLas causas citadas anteriormente comparten su origen en intereses económicos, analizaremos brevemente algunas de estas a continuación:\n\n \n<img width="512" alt="Train in corn field (15320086036)" src="https://upload.wikimedia.org/wikipedia/commons/thumb/7/76/Train_in_corn_field%2815320086036%29.jpg/512px-Train_in_corn_field_%2815320086036%29.jpg">\n\n<span class="foto_nota">Tren en un campo de maíz. Foto de David McCormack.</span>\n\nLa agricultura una actividad milenaria y de vital importancia para la producción de alimentos pero que últimamente ha sido llevada una escala difícil de imaginar hace unos siglos, a esta actividad masiva se le conoce como agricultura industrial o intensiva. \n\nDebido a la población mundial, hay una gran necesidad de alimentos y otros productos de la actividad agrícola. Pero muchas «técnicas» que se usan masivamente deterioran los suelos y ecosistemas. Por ejemplo el monocultivo o el exceso de producción, el ignorar el rol ecológico que cumple una zona que se va a destinar a la agricultura, la aplicación irresponsable de químicos agrotóxicos y uso de otras especies invasoras para mejorar la rentabilidad agrícola, etc. La agricultura industrial usa enormes cantidades de agua, energía y químicos industriales, lo que incrementa la contaminación en la tierra cultivable y agua [18].\n\nExisten grupos de empresarios y gobiernos que prefieren "enriquecerse" y no detenerse a pesar de las consecuencias de su enriquecimiento, por ejemplo en Bolivia hay quienes responsabilizan al agronegocio ya que el 90% de los incendios forestales anuales se dan entre Santa Cruz y Beni que son los departamentos que concentran prácticamente al empresariado agropecuario del país[19]. En Argentina los monocultivos transgénicos de soja y maíz se plantan sobre zonas boscosas devastadas masivamente incluso durante la cuarentena por el coronavirus [13].\n\nSi bien debido al crecimiento poblacional esta actividad es importante, muchas empresas aprovechan la situación para expandir su actividad de forma descontrolada y como esta actividad genera ganancias económicas importantes, muchos empresarios se convierten en una poderosa influencia política en los gobiernos que flexibilizan las regulaciones y se deslindan de implementar políticas de protección al medio ambiente. En países como Argentina, Brasil, Bolivia, Uruguay, Paraguay, Ecuador, Chile entre otros, se desplazan de sus territorios a poblaciones indígenas originarias en favor de la agricultura, ganadería y minería. \n\nAdemás del desplazamiento, la concentración de tierras recae en su mayoría en grandes empresas y cada vez menos en productores agropecuarios independientes. En Argentina a 2018 donde menos del 1% de las explotaciones agropecuarias controla el 36.4% de tierra y el 55% de los pequeños productores concentran el 2.2% de la tierra, en Bolivia el 70% de la tierra es controlada por el 2% de los productores[20]. Este y otros hechos son signos claros de una gran influencia que ejercen las personas que controlan este negocio en los países de Sudamérica.\n\n \n<img width="540" alt="Ganado en Apure" src="https://upload.wikimedia.org/wikipedia/commons/4/46/Ganado_en_Apure.jpg">\n\n<span class="foto_nota">Gnando en Apure, Venezuela. Foto de Fhaidel</span>\n\nLa ganadería es otro gran impulso para la depredación de ecosistemas y amenaza a la vida salvaje en todo el mundo. Esta actividad requiere mucho más espacio abierto que la agricultura y por los desechos que produce el ganado se libera gas metano que contribuye al efecto invernadero y cambio climático.\n\n250 gramos de hamburguesa\n\n<span class="foto_nota">¿Qué se necesita para hacer una hamburguesa de 250 gramos?. Ilustración de extraída de "El precio de la carne" - Tunupa 103/2017, Fundación Solón.</span>\n\nLa ganadería principalmente bovina es también causante de desmontes e incendios forestales para que el ganado se alimente de pastizales, la selva tropical más grande del mundo está siendo destruida principalmente para alimentar ganado y los costos de derribar árboles y convertir la tierra en praderas se pueden cubrir con la venta de madera[21]. Este es por tanto un gran impulso para inversionistas que buscan generar ingresos con la menor pérdida económica posible. Un artículo[13] dice sobre los estragos causados por el agronegocio en Argentina:\n\n> Las vacas pastando apacibles, esas imágenes que aparecen impresas en etiquetas de supermercado, esconden la violencia del fuego y también lo que ocurre después, el paso a paso del agronegocio que muchas personas desconocen. Los monocultivos transgénicos de soja y maíz que se implantan sobre las cenizas y son regados con venenos, bajo un sol de 50 grados.\n\nSegún éste mismo, 50% de los niños son pobres y comen poco. Es importante recordar que el consumo de carne tiene un precio alto sobre el medio ambiente, y al no controlar los hábitos de consumo de carne se contribuye a que desastres como el covid-19 y mucho peores sigan ocurriendo por ser este una consecuencia de invadir espacios naturales motivados por el agronegocio.\n\n \nLa caza furtiva de murciélagos y pangolines en China es un negocio lucrativo que prefiere ignorar las consecuencias para estas especies y por ende para toda la humanidad. Asumiendo que el SARS-CoV-2 tiene origen zoonótico, — el covid-19 es una de las consecuencias del tráfico de animales silvestres.\n\nLa caza furtiva es un multimillonario negocio que genera hasta 23000 millones de dólares americanos, donde la cadena empieza con el cazador, que por un intermediario o mercados locales, contacta con el comerciante de un país en tránsito. Al llegar al país comprador, las especies pueden terminar como mascotas, comida, medicamentos o bienes de consumo. Y donde el 80% del comercio ilegal corresponde a marfil, reptiles, aves, pangolines, otros mamíferos y productos marinos[22].\n\nEn la actualidad se sabe que hay más tigres en cautiverio que en la vida salvaje en todo el mundo, y mientras incrementan las incautaciones, los traficantes se vuelven más esquivos[16, 22]. Pero los traficantes y toda la red de captura y transporte no son los únicos responsables, los consumidores que prefieren ignorar (voluntaria o involuntariamente) el daño causado a la especie animal que compran son «el mercado» que alimenta la voraz matanza de vida silvestre inocente.\n\nUn informe de la ONU dice que los marcos regulatorios para la protección de especies traficadas son limitados e inconsistentes, donde cada país puede ser una fuente de tránsito o destino y según el papel que desempeñan deberían prevenir y abordar estos crímenes con un enfoque integral que apunte a las bases de oferta y demanda[23].\n\n\n \n<img width="512" alt="Myanmar Illicit Endangered Wildlife Market 04 (cropped)" src="https://upload.wikimedia.org/wikipedia/commons/thumb/6/69/Myanmar_Illicit_Endangered_Wildlife_Market_04_%28cropped%29.jpg/512px-Myanmar_Illicit_Endangered_Wildlife_Market_04_%28cropped%29.jpg">\n\n<span class="foto_nota">Foto del comercio ilícito de vida salvaje en un mercado. Foto de Dan Bennet</span>\n\nSi asumimos que el SARS-CoV-2 es una consecuencia de la caza y comercialización de pangolines, esto significa que esta y otras actividades similares deben detenerse por el bien de la salud pública.\n\nEn China luego del brote del coronavirus se han cerrado algunos mercados de comercialización de vida silvestre que incluían pangolines. La comercialización de muchas especies de pangolín esta internacionalmente prohibida, a pesar de esto, se dice que el pangolín es uno de los mamíferos más traficados en el mundo, por su carne o el uso de sus escamas en la medicina tradicional China entre otros [16]. Durante la pandemia, mientras se aplican medidas y restricciones globales de viajes para transporte de personas, los métodos de transporte que usa el crimen organizado para el comercio de animales silvestres probablemente se ve menos afectado. Incluso por la gran disminución del turismo y el aumento de la pobreza, la caza furtiva puede tender a aumentar [17].\n\nEl tráfico de animales no sólo representa un riesgo para la salud y una importante causa de pérdida de biodiversidad, —también engrandece una costumbre soberbia que alimenta la idea de que los seres humanos son superiores a otras especies de animales. Esta idea retrasa el progreso y desarrollo sostenible de la humanidad, empeora la calidad de vida de otras especies y de la especie humana, y destruye formas de vida diversas. Los animales cazados, enjaulados o separados de sus congéneres, sufren enormemente sus pérdidas.\n\n \nDe muchas formas el COVID-2019 ha causado consecuencias en el planeta, nos centraremos en algunas que tienen que ver con el medio ambiente.\n\n \nDebido a la implementación de medidas de confinamiento en muchos países, el uso de transporte motorizado ha disminuido considerablemente y esta reducción se ha traducido en una rápida reducción de la contaminación del aire y emisiones de dióxido de carbono (CO2).\n\nDesde los primeros días de la cuarentena, en China se han ido registrando los más bajos niveles de emisiones de CO2 y otros gases de efecto invernadero desde la crisis financiera hace una década. Las emisiones principalmente provenientes de automóviles y camiones cayeron un 50%. Las proyecciones iban esperando que las emisiones sean las más bajas en el hemisferio norte desde 2009 [4].\n\nA pesar de que los reportes de emisiones de CO2 son anuales, existen datos mensuales de distintas fuentes y mediante estimaciones se hizo un análisis, en el cual, para mayo de 2020 se registró que debido a la reducción en el transporte aéreo y terrestre las emisiones diarias de CO2 se redujeron a los niveles del año 2009[5].\n\n<img src="https://media.springernature.com/full/springer-static/image/art%3A10.1038%2Fs41558-020-0797-x/MediaObjects/41558_2020_797_Fig3_HTML.png?as=webp" width="560">\n\n<span class="foto_nota">Reducción temporal de emisiones globales de CO2 durante el confinamiento por el COVID-19. Imagen de https://www.nature.com/articles/s41558-020-0797-x/figures/3</span>\n\nEsta disminución en las emisiones habría sido prácticamente imposible en circunstancias normales. El siguiente gráfico muestra las emisiones por sector o actividad.\n\n<img src="https://media.springernature.com/full/springer-static/image/art%3A10.1038%2Fs41558-020-0797-x/MediaObjects/41558_2020_797_Fig4_HTML.png?as=webp" width="560">\n\n<span class="foto_nota">Cambios en emisiones globales de CO2 por sector. Imagen de https://www.nature.com/articles/s41558-020-0797-x/figures/4</span>\n\nClaramente se ve la disminución drástica en los sectores de transporte terrestre y aviación y un ligero incremento en el sector de energía para uso residencial.\n\nA pesar del incremento de la huella de carbono resultante de la generación de energía para calefacción, la disminución en el transporte hace que haya un descenso global.\n\nEs bueno recordar que la disminución en las emisiones durante la cuarentena es temporal y lo más seguro es que estas vuelvan a subir a medida que se normalizan las actividades. Por lo que, es necesario comenzar a desarrollar nuevas estrategias que busquen encaminarnos a nuevas formas de vida menos contaminantes, y una primera meta podría ser disminuir aún más las emisiones de clorofluorocarbonos e hidroclorofluorocarbonos (los químicos culpables del daño a la capa de ozono)[6].\n\n \nDurante el confinamiento muchas ciudades han estado más vacías de lo normal, en la ausencia de seres humanos algunos animales han aprovechado el momento para tomar el espacio. Se hicieron famosos muchos videos y reportes de animales silvestres caminando por las ciudades, por ejemplo ciervos, familias de jabalíes, conejos, vizcachas, zorros, pumas, monos, osos, peces, ovejas, etc. Muchos de estos videos se reportaron como falsos y otros no.\n\nSin embargo hay casos como el de algunas playas, donde la reducción del turismo ha dado espacio a animales como tortugas marinas en peligro de extinción a desovar con tranquilidad[7].\n\nPara que más animales se «animen» a tomar las ciudades, tendría que pasar mas tiempo. Pero seguramente ya han habido muchos exploradores que se han aventurado.\n\n \nBiodiversidad\n\n<span class="foto_nota">Pirámide de la biodiversidad. Esta imagen se ha modificado de la original de Fährtenleser</span>\n\nLa biodiversidad, es el conjunto de todos los seres vivos del planeta, el ambiente en el que viven y su relación que guardan con otras especies. Se calcula que la biodiversidad mundial podría estar compuesta de 3 a 110 millones de especies y se estima que se necesitarían al menos 200 años al ritmo de descripción anual de especies para llegar a conocer la biodiversidad real[25].\n\nLa riqueza del mundo reside en su diversidad, miles de millones de años le ha tomado a la vida transformarse, adaptarse, establecerse y llegar al punto actual. La diversidad biológica es el resultado de todo el proceso de incontables experiencias de los seres vivos que han vivido.\n\n> "No son los más fuertes o los más inteligentes los que sobrevivirán, sino los que mejor pueden manejar el cambio". \n> \n> Leon C. Megginson \n \nEl impacto de los humanos en la red de ecosistemas naturales y sus relaciones finamente equilibradas se ha hecho más evidente el último siglo, y uno de los efectos de las acciones humanas en el mundo natural es la reducción generalizada y drástica de la biodiversidad[24]. En los últimos 100 años el hombre ha acelerado el ritmo de extinción de especies posiblemente 1000 veces respecto al ritmo natural, actualmente se ha alcanzado una extinción de entre 50 a 300 especies cada día, eso es como 100000 especies cada año[25, 26].\n\nUna lectura dice: Los procesos y servicios que prestan los ecosistemas sanos, son el fundamento del bienestar de las personas. No sólo al cubrir las necesidades materiales básicas para la supervivencia, sino que son el fundamento de otros aspectos del "vivir bien" como la salud, la seguridad, buenas relaciones sociales y la libertad de elección. Estos procesos se agrupan en cuatro categorías; aprovisionamiento o suministro de bienes, reguladores, culturales, y de apoyo. Sin estos procesos y servicios ecosistémicos como el agua, comida, ropa, medicinas, protección contra el frío y la lluvia, la diversión, la regulación de gases de efecto invernadero, y también la belleza de los espacios naturales, nuestro planeta sería irreconocible[25].\n\nLa pérdida acelerada de biodiversidad tiene y tendrá un efecto sobre la forma en que vivimos, directa o indirectamente. \n\nCitando del informe de evaluación global sobre la pérdida de biodiversidad de la plataforma intergubernamental Científica-Normativa y servicios de los ecosistemas (IPEBS por sus siglas en inglés):\n\n> - Estamos erosionando los cimientos mismos de nuestras economías, medios de vida, seguridad alimentaria, salud y calidad de vida en todo el mundo.\n> - La biodiversidad y las contribuciones de la naturaleza a las personas son nuestro patrimonio común y la \'red de seguridad\' más importante de la humanidad para apoyar la vida.\n> - Alrededor de un millón de especies animales y vegetales están ahora amenazadas de extinción, muchas en décadas más que nunca antes en la historia de la humanidad.\n> - La abundancia media de especies nativas en la mayoría de los principales hábitats terrestres ha disminuido al menos un 20%. Más del 40% de especies de anfibios, casi el 33% de los corales, y más de un tercio de todos los mamíferos marinos están amenazados, la evidencia disponible apoya una estimación tentativa de que el 10% de los insectos está amenazado.\n> - Los ecosistemas, las especies, las poblaciones silvestres, las variedades locales y las razas de plantas y animales domesticados se están reduciendo, deteriorando o desapareciendo.\n\nEl cambio climático es sólo una consecuencia del impacto que el ser humano causa en el mundo natural y a pesar de que sus consecuencias son enormes, hay muchas personas que todavía niegan que este ocurriendo a causa de las acciones del ser humano, el artículo corto del siguiente enlace muestra 8 argumentos.\n\nEl mismo informe del IPEBS, indica que los cinco impulsores directos del cambio en la naturaleza con mayor impacto hasta la fecha son:\n\n1. Los cambios en el uso de la tierra y el mar.\n2. La explotación directa de los organismos.\n3. El cambio climático.\n4. La contaminación.\n5. Las especies exóticas invasoras.\n\nPara mitigar el impacto del ser humano en los sistemas naturales del planeta, el mantenimiento de la biodiversidad debe ser una prioridad clave, junto con la reducción de las fuentes de cambio ambiental inducido por el hombre[24].\n\nPara que las especies proliferen es importante la dispersión a larga distancia (Long-distance dispersal en inglés o LDD), para ello las especies requieren poder recorrer ciertas distancias y si estas distancias se ven afectadas por la destrucción o fragmentación de los ecosistemas, no sería posible para ellas hacer una LDD adecuada[29]. Es decir, el proceso de movimiento en el cual las especies obtienen información biológica, es un factor importante para la biodiversidad.\n\n \nEs factible relacionar la pérdida de biodiversidad con el brote del coronavirus, así como una especie amenazada impacta a las demás con las que se relaciona, la caza furtiva en Asia ha impactado al pangolín debilitando sus defensas, y a consecuencia de esto se podría haber originado la mutación que resultó en el SARS-COV-2. Los virus asociados con los murciélagos surgieron debido a la pérdida de sus hábitats a causa de la deforestación y expansión agrícola [27].\n\nFactores que aumentan el surgimiento de las zoonosis\n\n<span class="foto_nota">¿Qué factores aumentan el surgimiento de las zoonosis?. Ilustración extraída de artículo Seis datos sobre la conexión entre la naturaleza y el coronavirus</span>\n\nAlgo que es evidente en especial es que debido al coronavirus se ha reaccionado mayoritariamente sin atacar a las causas de la pandemia, como cuando una persona se enferma y se tratan sus síntomas sin mirar de dónde viene el problema.\n\nMuchas personas expertas en zoonosis señalan que estamos creando demasiados problemas manteniendo e incluso aumentando la demanda de proteína animal con la ganadería intensiva no sostenible. Esto hace que en muchos establecimientos los animales estén hacinados, donde se seleccionan a las razas del mismo tipo genético para que crezcan lo más rápido posible, a causa de esto, estos animales tienen un sistema inmunológico debilitado y por tanto más susceptible a patógenos. Si no se atacan las causas de las pandemias, vendrán otras mucho más graves que la del covid-19[28].\n\n \nEstamos padeciendo las consecuencias de la pandemia del coronavirus y preparándonos para las consecuencias en varios sectores de la economía. Podemos actuar tratando los síntomas, pero una vez que termine el estado de emergencia por la pandemia, ¿habremos construido algo que prevenga esta y otras pandemias?\n\nSe viene una fuerte desaceleración económica, hay pronósticos que dicen que en latinoamérica el Producto Interno Bruto (PIB) caerá en 4.6% como consecuencia de los efectos del COVID-19 y cada país se verá afectado de diferente forma, la brecha de desigualdad se podría hacer más evidente[30].\n\nA menudo desde el punto de vista de la economía, el consumo de productos es buena señal porque se refleja en movimiento económico. Pero por muchas razones descritas brevemente en este artículo, el modelo de consumo actual del mundo no es sostenible y tiene graves consecuencias. \n\nUn camino es continuar como siempre y apuntar a mejorar la economía en base a un modelo de consumo que a propósito y sin pensar en las consecuencias, agrava las desigualdades entre "ricos" y "pobres". Algunos señalan que bajo el modelo económico actual y predominante, las ganancias de los mercados financieros occidentales no se traducen en inversiones productivas que creen más empleos, sino que se destinan a "bolsillos" personales de multimillonarios[31]. \n\nUn comportamiento económico que hace que a pesar de que se produzcan más alimentos que nunca antes, no se distribuyan para calmar el hambre de miles de millones de personas hambrientas y en cambio terminen alimentando la glotonería de una minoría de personas con un consumo desmedido y depredador. —Ese es el camino que hará que a la larga perdamos nuestra sensibilidad y riquezas naturales— el camino que basa su política económica como lo hacen gigantes de la economía como China en la premisa: "La vida natural es un recurso para ser usado" y la tendencia de ver a la naturaleza desde un punto de vista económico en lugar de un punto de vista ecológico[33]. Ese es el rumbo de desarrollo económico que se ha estado siguiendo.\n\nHay otro camino que es reconstruir mejor, no hay modelo económico sostenible cuyos cimientos se basen en destruir el medio ambiente, muchas personas ya se han dado cuenta, naciones unidas entre otras instituciones internacionales recomiendan:\n\n Reducir los hábitos de producción y consumo de alimentos.\n Reducir los niveles de CO2 en la atmósfera.\n Incrementar la inversión en energías renovables.\n Incremento y mejora del transporte público limpio.\n Entrar en menos contacto con la vida silvestre, respetarla más.\n\nConstruir una economía diferente requiere un marco mundial de la diversidad biológica post-2020, para mantener la naturaleza rica, diversa y floreciente como indica una propuesta de naciones unidas que destaca — la salud de las personas y la salud del planeta son la misma cosa [32].\n\n \nEsta pandemia del coronoavirus nos debe hacer notar y recordar que somos dependientes de la naturaleza que vive en el planeta, —somos producto de ella y pertenecemos a ella en lo más profundo, no al revés—. Seguir olvidando eso como civilización hará que a mediano o corto plazo suframos consecuencias mucho peores que la pandemia por el coronavirus.\n\nIncluso si no tendríamos que sufrir las consecuencias, no es saludable que para alcanzar un grado de "bienestar" se lastimen especies animales, destruyan hábitats y ponga en peligro la rica biodiversidad de la que nos beneficiamos todos los días de nuestra vida.\n\nLa intención principal de este artículo es informar y concientizar sobre las consecuencias del daño a la naturaleza, y una prueba evidente es el coronavirus que es como una advertencia y pedido de auxilio al mismo tiempo.\n\nPodemos escoger seguir improvisando y pensando equivocadamente que las cosas se arreglarán por si solas, dejando que las personas a quienes no les importa el bienestar de nadie mas que no sea el suyo propio, las que destruyen nuestra naturaleza, someten a poblaciones de animales llevándolas a la extinción y someten a poblaciones humanas, sean las que decidan el futuro de nuestro mundo.\n\nO podemos escoger tomar acción, asumir la responsabilidad de cambiar nuestros viejos hábitos depredadores y consumistas en favor del equilibrio natural del que también estamos diseñados a ser parte. Aportar al cuidado y el conocer de nuestra madre tierra desde nuestras posibilidades y acciones.\n\nAlgunas acciones clave que podemos seguir:\n\n Reducir los hábitos de consumo de alimentos, en especial de origen animal.\n Ayudar a detener las redes de tráfico de animales silvestres.\n Apoyar y exigir a nuestros gobiernos políticas serias de protección al medioambiente.\n Informarse mas al respecto y concientizar a otras personas.\n Participar en acciones de protección al medio ambiente.\n Incentivar la investigación e inversión en tecnologías alternativas y respetuosas con el medioambiente.\n No encubrir actividades destructoras o que pongan en peligro la vida natural local.\n\nPor esta pandemia, nuestro mundo esta cambiando y más que antes tenemos la oportunidad de aprovechar esta situación y reconstruirlo para bien.\n\n<img width="512" alt="Zitting cisticola feeding its chicks" src="https://upload.wikimedia.org/wikipedia/commons/thumb/8/83/Zitting_cisticola_feeding_its_chicks.jpg/512px-Zitting_cisticola_feeding_its_chicks.jpg">\n\n<span class="foto_nota">\nCistícola buitrón alimentando a sus polluelos. Foto de Budi Santoso Adji\n</span>\n\n> “Lo único que necesita el mal para triunfar es que los hombres buenos no hagan nada”\n> \n> ― Edmund Burke\n\nTomando prestada una frase de los Yes Men ... "Oh bueno, has llegado al final de la página. HAZ ALGO. »\n\n \n<html>\n<ol> \n <li id="ref_1">\n El origen del coronavirus SARS-CoV-2, a la luz de la evolución - https://theconversation.com/el-origen-del-coronavirus-sars-cov-2-a-la-luz-de-la-evolucion-136897.\n </li>\n <li id="ref_2">\n Murciélagos y pangolines: el coronavirus es una zoonosis, no un producto de laboratorio - https://theconversation.com/murcielagos-y-pangolines-el-coronavirus-es-una-zoonosis-no-un-producto-de-laboratorio-135753.\n </li>\n <li id="ref_3">\n The proximal origin of SARS-CoV-2 - https://www.nature.com/articles/s41591-020-0820-9.\n </li>\n <li id="ref_4">\n Coronavirus: Air pollution and CO2 fall rapidly as virus spreads - https://www.bbc.com/news/science-environment-51944780.\n </li>\n <li id="ref_5">\n Temporary reduction in daily global CO2 emissions during the COVID-19 forced confinement - https://www.nature.com/articles/s41558-020-0797-x.\n </li>\n <li id="ref_6">\n Nuevo agujero en la capa de ozono aparece en medio de la crisis del coronavirus - https://www.tekcrispy.com/2020/03/31/nuevo-agujero-capa-ozono-aparece/.\n </li>\n <li id="ref_7">\n Miles de tortugas marinas en peligro de extinción anidan en las playas vacías durante la cuarentena por coronavirus - https://www.20minutos.es/noticia/4218619/0/miles-de-tortugas-marinas-en-peligro-de-extincion-anidan-en-las-playas-vacias-durante-la-cuarentena-por-coronavirus/?autoref=true.\n </li>\n <li id="ref_8">\n Deforestación: los 10 países que perdieron más bosque virgen en el mundo (y 5 están en América Latina) - https://www.bbc.com/mundo/noticias-52915114.\n </li>\n <li id="ref_9">\n Los ecosistemas de manglar frente al cambio climático global. ISSN: 1405-0471 -https://www.redalyc.org/pdf/617/61740202.pdf.\n </li>\n <li id="ref_10">\n Perdimos el Equivalente a un Campo de Futbol de Selva Tropical Primaria Cada 6 Segundos en 2019 - https://blog.globalforestwatch.org/es/data-and-research/datos-globales-de-perdida-de-cobertura-arborea-2019/.\n </li>\n <li id="ref_11">\n\tPor qué la Tierra tiene hoy más bosques que en 1982 (y por qué esto no es necesariamente una buena noticia) - https://www.bbc.com/mundo/noticias-45182681.\n\t</li> \n <li id="ref_12">\n Bolivia perdió 290.000 hectáreas de bosques primarios en 2019 - http://www.raibolivia.org/bolivia-perdio-290-000-hectareas-de-bosques-primarios-en-2019/.\n </li>\n <li id="ref_13">\n Los desmontes sin cuarentena - http://revistaanfibia.com/cronica/los-desmontes-sin-cuarentena/.\n </li> \n <li id="ref_14">\n\tMás de 2 millones de animales mueren en incendios forestales en Bolivia - https://noticiasdelatierra.com/mas-de-2-millones-de-animales-mueren-en-incendios-forestales-en-bolivia/.\n </li>\n <li id="ref_15">\n\tDiagnóstico por teledetección de áreas quemadas en la Chiquitania - https://www.fcbc.org.bo/wp-content/uploads/2019/12/DiagnosticoIncendios.pdf\n </li>\n <li id="ref_16">\n\tEl pangolín, el mamífero más traficado del mundo - https://www.nationalgeographic.com.es/ciencia/actualidad/16-febrero-dia-mundial-pangolin_13890/2\n </li>\n <li id="ref_17">\n Para evitar más pandemias se necesita controlar el tráfico ilegal de fauna y flora silvestre - https://news.un.org/es/story/2020/07/1477241\n </li>\n <li id="ref_18">\n\tIndustrial agriculture - https://www.newworldencyclopedia.org/entry/Industrial_agriculture\n </li>\n <li id="ref_19">\n\tLa Chiquitanía vuelve a arder ¿Y el estruendo? - https://desacatosenlared.wordpress.com/2020/06/10/la-chiquitania-vuelve-a-arder-y-el-estruendo/\n </li>\n <li id="ref_20">\n Atlas del agronegocio transgénico en el cono sur - http://www.ftierra.org/index.php/component/attachments/download/218\n </li>\n <li id="ref_21">\n Altas de la Carne, Fundación Henrich Böll Stiftung - https://mx.boell.org/sites/default/files/atlasdelacarne2014_web_140717.pdf\n </li>\n <li id="ref_22">\n\tTráfico de animales. Del lavado de dinero al coronavirus, la trama del negocio ilegal millonario. https://www.lanacion.com.ar/lifestyle/trafico-animales-del-lavado-dinero-al-coronavirus-nid2397240\n </li>\n <li id="ref_23">\n\tTráfico de animales amenaza la salud humana: ONU - https://www.proceso.com.mx/637772/coronavirus-en-el-mundo-trafico-de-animales-amenaza-la-salud-humana-onu\n </li>\n <li id="ref_24">\n\tBenefits from biodiversity - https://natureecoevocommunity.nature.com/users/346027-joseph-aslin/posts/benefits-from-biodiversity\n </li>\n <li id="ref_25">\n\tDossier- "El papel de la biodiversidad" - https://www.fuhem.es/media/cdv/file/biblioteca/Dossier/Dossier_El_papel_de_la_biodiversidad.pdf\n </li>\n <li id="ref_26">\n\tNature’s Dangerous Decline ‘Unprecedented’ Species Extinction Rates ‘Accelerating’: Intergovernmental Science-Policy Platform on Biodiversity and Ecosystem Services (IPBES) - https://ipbes.net/news/Media-Release-Global-Assessment\n </li>\n <li id="ref_27">\n\tSeis datos sobre la conexión entre la naturaleza y el coronavirus - https://www.unenvironment.org/es/noticias-y-reportajes/reportajes/seis-datos-sobre-la-conexion-entre-la-naturaleza-y-el-coronavirus\n </li>\n <li id="ref_28">\n\tEl mundo está tratando los síntomas de la pandemia de covid-19, pero no las causas - https://www.bbc.com/mundo/noticias-53435056\n </li>\n <li id="ref_29">\n\t"The importance of long-distance dispersal in biodiversity conservation" - https://onlinelibrary.wiley.com/doi/epdf/10.1111/j.1366-9516.2005.00156.x\n </li>\n <li id="ref_30">\n "Coronavirus en Latinoamérica: economía post-pandemia" - https://h2gconsulting.com/how2go-latinoamerica/coronavirus-en-latinoamerica-economia-post-pandemia/\n </li>\n <li id="ref_31">\n "¿SE VIENE UN NUEVO MODELO ECONÓMICO GLOBAL POST-PANDEMIA? Ernesto Cazal." - https://observatoriodetrabajadores.wordpress.com/2020/04/30/se-viene-un-nuevo-modelo-economico-global-post-pandemia-ernesto-cazal/\n </li>\n <li id="ref_32">\n La pandemia de coronavirus es una oportunidad para construir una economía que preserve la salud del planeta - https://news.un.org/es/story/2020/04/1472482\n </li>\n <li id="ref_33">\n To Prevent Next Coronavirus, Stop the Wildlife Trade, Conservationists Say - https://www.nytimes.com/2020/02/19/health/coronavirus-animals-markets.html\n </li>\n</ol>\n</html>\n', ['reflexión', 'naturaleza'])

]]>
Clasificación mensajes correo debian parte 3 https://rmgss.net/posts/Clasificación-mensajes-correo-debian-parte-3 https://rmgss.net/posts/Clasificación-mensajes-correo-debian-parte-3 Sun Apr 5 15:04:01 2020 text/html Rodrigo Garcia python , machine_learning , software , tutorial ('Continuando desde la segunda parte donde ya hemos entrenado y obtenido modelos para la clasificación de mensaje ahora continuaremos a "exportarlos" para poder usarlos:\n\nMachine learning d2\n\nAplicaremos nuevos mensajes de texto al modelo ya generado y este va a devolver predicciones. En este caso cuando introduzcamos un mensaje de texto, usando el modelo se predice a qué categoría de mensajes de la lista de correos de debian pertenece ese mensaje de texto.\n\n \nEn el notebook de la parte 2 (debian-2015-2019-NaiveBayes-RandomForest.ipynb) hay una parte que guarda guarda tres cosas:\n\n- El modelo generado aplicando la técnica.\n- La matriz CountVectorizer con el conteo de palabras y ocurrencias.\n- El diccionario de categorías y su valor numérico tal y como lo manejamos para entrenar el modelo.\n\nCon estos objetos ya obtenidos al hacer el entrenamiento, usaremos la biblioteca python pickle que serializa objetos python y los guarda en archivos binarios, esos archivos luego se pueden leer desde otro programa o script python y se puede recuperar el objeto python original. \n\nEl proceso de guardado se hace en el con:\n\n :::python\n import pickle\n pickle.dump(model_multinomialNB, open(\'./model_multinomialNB.pkl\', "wb"))\n pickle.dump(cv_multinomialNB, open(\'./cv_multinomialNB.pkl\', "wb"))\n pickle.dump(labelsEncodedNB, open(\'./labelsEncodedNB.pkl\', "wb"))\n\n pickle.dump(model_randomForest4, open(\'./model_randomForest.pkl\', "wb"))\n pickle.dump(cv_randomForest4, open(\'./cv_randomForest.pkl\', "wb"))\n pickle.dump(labelsEncodedRf4, open(\'./labelsEncodedRf.pkl\', "wb"))\n\nQue guarda en archivos con extensión .pkl. Algo interesante es que los archivos guardados tienen tamaños variables:\n\n 2,3M cv_multinomialNB.pkl\n 2,3M cv_randomForest.pkl\n 514 labelsEncodedNB.pkl\n 514 labelsEncodedRf.pkl\n 256K model_multinomialNB.pkl\n 106M model_randomForest.pkl\n\nEl archivo serializado model_multinomialNB.pkl tiene un tamaño de 256KB que corresponde a la técnica Miultinomial Naive Bayes, y el archivo model_randomForest.pkl de la técnica Random Forest tiene un tamaño de 106MB. El modelo generado por random Forest es como 40 veces más grande y esto se debe a que durante el entrenamiento para el Random Forest se usaron un total de 80 árboles binarios que tomo un tiempo considerablemente mayor en entrenar que la técnica Multinomial Naive Bayes.\n\n \nAhora vamos a cargar estos modelos generados en otro notebook jupyter, este se puede revisar por completo:\n\n> jupyter notebook: debian-2015-2019-model-application.ipynb\n\nEn las primeras partes volvemos a usar pickle para importar los modelos guardados.\n\n :::python\n # cargando los modelos y otros datos generados anteriormente\n import pickle\n model_multinomialNB = pickle.load(open(\'./model_multinomialNB.pkl\', \'rb\'))\n cv_multinomialNB = pickle.load(open(\'./cv_multinomialNB.pkl\', \'rb\'))\n labelsEncodedNB = pickle.load(open(\'./labelsEncodedNB.pkl\', \'rb\'))\n\n model_randomForest = pickle.load(open(\'./model_randomForest.pkl\', \'rb\'))\n cv_randomForest = pickle.load(open(\'./cv_randomForest.pkl\', \'rb\'))\n labelsEncodedRf = pickle.load(open(\'lablesEncodedRf.pkl\', \'rb\'))\n\n \nSe definen algunos mensajes de texto nuevos y los unimos en una lista python:\n\n :::python\n m1 = "We are looking for a GNU/Linux System Administrator in Charlotte, North Carolina. Other locations near the EST timezone will"\n m2 = \'\'\'Traceback (most recent call last): \n File ""/tmp/autopkgtest-lxc.5a99fnj6/downtmp/autopkgtest_tmp/tests/test_core/test_sequence.py\'\'\'\n m3 = \'\'\'Actually, the GPL only mandates stating who made changes and when,but not what changed. As I see, \n just adding something like ""Modified by John Doe on 2019.07.25"" on the comment header where the GPL copyright notice lies \n would suffice"\'\'\'\n m4 = \'\'\'E: pybuild pybuild:336: test: plugin distutils failed with: exit code=1: \n cd /build/snakemake-4.8.0/.pybuild/cpython3_3.6_snakemake/build; \n python3.6 -m nose tests dh_auto_test: pybuild --test --test-nose -i python{version} -p 3.6 returned exit code 13 make: \n [debian/rules:17: build] Error 25 dpkg-buildpackage: error: debian/rules build subprocess returned exit status 2 I: \n copying local configuration E: Failed autobuilding of package \n I: user script /var/cache/pbuilder/build/cow.11501/tmp/hooks/C99_failed_build starting root:/# echo $PATH\'\'\'\n m5 = """I\'d take option 2.There ought to be no packages using python-dput (like, srly…), and I see no real reason for anybody\n to keep using the py2 version after the switch."""\n m6 = """Nothing can be done without previous voting phase, we are talking about somewhat important\n issues that must be taken into considereation before finally giving them a certain direction. Regards BlueBon."""\n m7 = """I would be happy to teach anyone, including you, how to sync between weblate and salsa \n (which mostly involve \'git pull weblate master && git push\' with a few clicks on the Weblate admin page to reduce \n the chance of any git conflict in between)"""\n\n\t# uniendo\n testMsjs = pd.Series([m1,m2,m3,m4,m5,m6,m7])\n\nAhora agregamos las palabras nuevas a las matrices de conteo de palabras del entrenamiento anterior como se muestra en [1]:\n\n :::python\n vect = cv_multinomialNB.transform(testMsjs).toarray()\n\nUsamos el modelo para generar nuevas predicciones:\n\n :::python\n predictions = model_multinomialNB.predict(vect)\n\nFinalmente vamos a ver a qué categorías corresponden las predicciones.\n\n :::python\n\t# mostrando resultados\n for i in range(len(predictions)):\n print(\'m\' + str(i+1), \'-->\', labelsEncodedNB[predictions[i]])\n\t\t\nQue muestra:\n\n m1 --> debian-mentors\n m2 --> debian-python\n m3 --> debian-legal\n m4 --> debian-python\n m5 --> debian-python\n m6 --> debian-vote\n m7 --> debian-science\n\nHaciendo lo mismo con el modelo de la técnica Random Forest:\n\n :::python\n vect = cv_randomForest.transform(testMsjs).toarray()\n predictions = model_randomForest.predict(vect)\n\n for i in range(len(predictions)):\n print(\'m\' + str(i+1), \'-->\', labelsEncodedRf[predictions[i]])\n\t\t\nResulta:\t\t\n\t\t\n m1 --> debian-mentors\n m2 --> debian-mentors\n m3 --> debian-legal\n m4 --> debian-python\n m5 --> debian-python\n m6 --> debian-mentors\n m7 --> debian-mentors\n\n \nAmbos modelos han clasificado bien la mayoría de los mensajes de pruebas, con algunas diferencias:\n\n * El mensaje m2 que es un texto con un mensaje de error de python, lo ha clasificado correctamente Naive Bayes pero no Random Forest\n * El mensaje m6 que es texto que habla de la necesidad de un proceso de votación antes de decidir algo, lo ha clasificado correctamente el Naive Bayes pero no Random Forest.\n * El mensaje m7 se parece más a un mensaje de alguien que se ofrece a enseñar algo, la técnica Random Forest lo ha clasificado correctamente en la categoría debian-mentors, y la técnica Naive Bayes lo considera de la categoría debian-science.\n \n \nLo bueno es que ya tenemos la forma sencilla de importar en cualquier otro programa los modelos generados en el entrenamiento anterior.\n\nLas aplicaciones son muchas por ejemplo como se muestra en [1] se puede desplegar una aplicación web con un formulario donde se introduzca texto y este es clasificado como spam o no spam*. También se podría aplicar a un programa clasificador automático de mensajes cuando alguien escribe un correo electrónico cuando en caso de detectar un mensaje que no pertenece a la categoría a la que se esta escribiendo, el programa le avise que podría estar enviando su mensaje a una categoría equivocada.\n\nLa clasificación de textos es un área de estudio del aprendizaje automático muy interesante y estas técnicas que usamos demuestran ser muy útiles. Seguramente existen otras técnicas y la combinación de estas que se ajustan a distintos casos.\n\n \n1. https://towardsdatascience.com/develop-a-nlp-model-in-python-deploy-it-with-flask-step-by-step-744f3bdd7776\n', ['python', 'machine_learning', 'software', 'tutorial'])

]]>
Clasificación mensajes correo debian parte 2 https://rmgss.net/posts/Clasificación-mensajes-correo-debian-parte-2 https://rmgss.net/posts/Clasificación-mensajes-correo-debian-parte-2 Sun Apr 5 15:04:01 2020 text/html Rodrigo Garcia python , machine_learning , software , tutorial ('Continuando con la clasificación de mensajes de correo de debian en la parte 1, en esta parte aplicaremos dos técnicas de aprendizaje automático para generar modelos de predicciones, estas son Multinomial Naive Bayes y Random Forest Classifier.\n\nMachineLearningD1.jpg\n\nTodo el procedimiento se puede revisar en notebook de jupyter en la PARTE 2:\n\n> jupyter notebook: debian-2015-2019-NaiveBayes-RandomForest.ipynb\n\n \nUna forma de entender esta técnica es calcular la ocurrencia de cada palabra en un documento (mensaje de correo) contando las veces que se repiten y aplicando este procedimiento a todos los documentos en el conjunto de datos. A partir de ese conteo de ocurrencias y usando el teorema de Bayes con las probabilidades condicionales se puede calcular la probabilidad de ocurrencia de un evento que no conocemos. En este caso la probabilidad de que un documento (correo electrónico) pertenezca a una categoría, entonces las categorías que tengan la mejor probabilidad serán nuestran predicciones. Una explicación más detallada se puede revisar en [1] \n\nEn el post anterior se ha obtenido la bolsa de palabras (bag of words) como se explica en [2] entonces tenemos todo listo para aplicar la técnica.\n\nEn el notebook se define una función obtenerModeloMultinomialNB() donde se tienen varios pasos.\n\nPrimero recibe como se muestra en la figura de arriba conjuntos de datos de entrenamiento (x_train y_train) y prueba (x_test y_test). Notarás que se dividen en x (mensajes) e y (categorías de mensajes), esto es por la forma que la biblioteca sklearn hace el cálculo de probabilidades.\n\n :::python\n labelencoder_y = LabelEncoder()\n y = labelencoder_y.fit_transform(y_train)\n\nEl algoritmo Naive Bayes trabaja solamente con valores numéricos, esta primera parte se encarga de representar las el arreglo de categorías de entrenamiento en forma numérica.\n\n debian-science --> 8\n debian-vote --> 9\n debian-edu --> 2\n debian-legal --> 5\n debian-python --> 7\n ...\n\nLuego se usa CountVectorizer que hace el procedimiento de contar la ocurrencia de palabras en los documentos y ajustar este conteo a una conveniente matriz con documentos, palabras y número de ocurrencias por palabra.\n\n (0, 1025)\t2 # documento 0, palabra con indice 1025 tiene 2 ocurrencias\n\t...\n (25977, 1121)\t5 # documento 25977, palabra con indice 1121 tiene 5 ocurrencias\n\nCon esta matriz se puede aplicar el entrenamiento y realizar un ajuste entre la matriz obtenida y el arreglo de categorías usando la técnica Naive Bayes.\n\n :::python\n mnb = MultinomialNB()\n\tpredictions = mnb.predict(x_testcv)\n\t\nmnb.predict() devuelve el conjunto de predicciones aplicadas sobre el conjunto de prueba que también se ha procesado con CountVectorizer. Lo que sigue es hacer el conteo de las predicciones correctas y armar un diccionario para mostrar gráficas con los resultados de las predicciones por categorías. El resultado de las predicciones usando Naive Bayes se puede ver en la siguiente gráfica.\n\nPredicciones Naive Bayes 1\n\nLa gráfica muestra en rojo las predicciones que tienen menos del 61% de precisión, es decir las categorías debian-science debian-jobs debian-desktop debian-cli debian-firewall. Siendo un total de 5 categorías con predicciones mayores a 61% de precisión y 5 por debajo. La causa común de estas imprecisiones es la cantidad reducida de mensajes de entrenamiento en estas categorías, sin embargo es necesario realizar un mayor análisis del contenido mismo de los mensajes que podrían por ejemplo tener muchas palabras técnicas para las cuales la aplicación de Naive Bayes podría no ser la adecuada.\n\n \nLa técnica del clasificador Random Forest aprovecha los árboles de decisión para generar varios árboles con muestras aleatorias formando un bosque de árboles de decisión, del resultado de este bosque se obtienen los más comunes como las predicciones finales. Una descripción más detallada se puede ver en [3] .\n\nAl igual que el caso anterior usaremos representaciones numéricas de las categorías y también usaremos CountVectorizer para obtener una matriz con el conteo de ocurrencias de palabras. Una diferencia es que Random Forest require que se indique cuantos árboles de decisión se van a generar antes de lanzar las predicciones.\n\n\t:::python\n # creando el objeto clasificador random forest para crear un número dado de árboles\n clf = RandomForestClassifier(n_estimators=trees)\n # Al aplicar fit se crean los árboles con los datos de entrenamiento\n clf.fit(x_traincv, y_train)\n\n # realizando las predicciones\n randomForest_predictions = clf.predict(x_testcv)\n\t\nLuego de aplicar esta técnica tenemos varios resultados dependiendo de la cantidad de árboles generados.\n\nPredicciones Random Forest con 10 árboles\nPredicciones Random Forest con 80 árboles\n\nSe puede ver la mejora de predicciones entre la creación de 10 y 80 árboles de decisión, también se ve que siempre se tienen predicciones erróneas para la categoría debian-firewall y en el entrenamiento con 80 árboles se elimina la categoría debian-cli.\n\nUna desventaja de esta técnica es que para la generación de múltiples árboles se requiere mucho más tiempo de procesamiento que aplicando Navie Bayes.\n\n \nAl parecer la técnica Random Forest produce mejores resultados que la técnica Naive Bayes aplicada a la lista de correos de debian en las categorías presentadas. Hay que considerar que no se hace un preprocesamiento exhaustivo de los mensajes de correo por ser demasiados (más de 20000) y que cada categoría en la lista de correos de debian puede tener tipos de mensajes muy distintos.\n\nPor ejemplo debian-python o debian-firewall contienen muchos mensajes con contenido técnico lo que resulta en palabras poco comunes que inicialmente se eliminan en CountVectorizer (ver parte 1) y estas palabras podrían ser clave para identificar una categoría con contenido técnico de otra con mensajes con lenguaje más común.\n\nSería interesante aplicar estas técnicas a otras secciones de la lista de debian y cambiar el criterio de selección o limpieza de datos e incluso ajustes a los algoritmos Naive Bayes y Random Forest. Usando la herramienta de descarga descrita en la parte 1.\n\nEn la parte 3 se procederá a usar estos modelos generados para y usarlos en cualquier mensaje. El modelo generará predicciones e indicará a qué categoría podría pertenecer ese mensaje de manera más directa.\n\n \n1. https://towardsdatascience.com/algorithms-for-text-classification-part-1-naive-bayes-3ff1d116fdd8\n2. https://web.stanford.edu/class/cs124/lec/naivebayes.pdf\n3. https://dataaspirant.com/2017/06/26/random-forest-classifier-python-scikit-learn/\n', ['python', 'machine_learning', 'software', 'tutorial'])

]]>
Clasificación mensajes correo debian parte 1 https://rmgss.net/posts/Clasificación-mensajes-correo-debian-parte-1 https://rmgss.net/posts/Clasificación-mensajes-correo-debian-parte-1 Sun Apr 5 15:04:01 2020 text/html Rodrigo Garcia python , machine_learning , software , tutorial ('Estuve aprendiendo a usar técnicas de aprendizaje automático para procesamiento de mensajes de texto y generación de modelos que permita predecir a qué categoría pertenecen.\n\nmensajes por categoría listas debian\n\nDecidí jugar un poco con la lista de correos de debian y aplicar aprendizaje automático. En este post dividido en tres partes mostraré en la primera como obtuve los mensajes de la lista de correos de debian e hice un análisis exploratorio de datos (EDA) usando python.\n\nEn una segunda parte la aplicación del aprendizaje automático y en la tercera parte la aplicación del modelo generado y que devuelva una predicción indicando a que categoría podría pertenecer un mensaje de correo electrónico cualquiera.\n\n \nPara hacer todo este proceso se requieren datos, por lo que decidí usar parte de los mensajes de la lista de correos de debian en https://lists.debian.org/completeindex.html.\n\nLa lista de correos electrónicos de debian almacena los emails que la comunidad de debian intercambia. Esta lista está organizada en varias sublistas de acuerdo a una temática de trabajo, por ejemplo:\n\n- debian-devel: Contiene discusiones sobre temas de desarrollo de software.\n- debian-legal: Discusiones sobre legalidad como derechos de autor, patentes, etc.\n- debian-jobs: Anuncios de trabajo para la comunidad debian.\n\nEsta organización permite a la comunidad trabajar en temas de su interés y mantener las discusiones clasificadas.\n\n \nComo son correos electrónicos públicos entonces la primera tarea es descargarlos, busqué herramientas para hacerlo pero no encontré ninguna que permita descargar los correos y que estos queden organizados según la estructura habitual, por lo que tuve que escribir una utilidad en python para descargarlos.\n\nEsta utilidad se llama mailinglist-donwloader-py y básicamente descarga los mensajes de correo electrónico publicados en https://lists.debian.org/completeindex.html extrayendo información de las páginas web del archivo de la lista de correos mediante web scraping.\n\nLa utilidad permite descargar los correos según año y categoría (sublistas de correo) y los guarda en una carpeta como archivos de texto. Adicionalmente para facilitar el análisis y aplicación de técnicas de aprendizaje automático (machine learning) permite construir un archivo .csv con todos los mensajes.\n\nLos pasos que seguí fuerón:\n\n1) Descargar la utlidad e instalar dependencias. ver README\n\n2) Crear y modificar el archivo debian-mailinglist.yaml para las descargas que al final quedó así:\n\n :::yaml\n index_url: https://lists.debian.org/completeindex.html\n download_all: False\n section_download:\n - debian-cli\n - debian-desktop\n - debian-edu\n - debian-firewall\n - debian-legal\n - debian-jobs\n - debian-python\n - debian-science\n - debian-vote\n - debian-mentors\n years:\n - 2015\n - 2016\n - 2017\n - 2018\n - 2019\n debug: True\n\n3) Descargar con make download-debian, la descarga debería terminar con un mensaje similar a:\n\nTotal of: 17177 urls found\nTotal of: 17129 files written\n\n\n4) Crear el archivo .csv make csv-debian.\n\nLuego el archivo resultante queda en output/debian-mailinglist/debian-mailinglist.csv.\n\n> Si no deseas seguir estos pasos puedes descargar aquí los mensajes.\n\n \nPara este análisis exploratorio usé python con numpy, pandas, scikitlearn y otras bibliotecas. Todas estas bibliotecas pueden instalarse en el sistema, en mi caso estoy usando anaconda3 como entorno python y todo el detalle del EDA está en el siguiente notebook de jupyter:\n\njupyter notebook: debian-2015-2019-NaiveBayes-RandomForest.ipynb\n\nNuestro objetivo final es generar un modelo que permita predecir a qué categoría o sublista de correo pertenece un mensaje. Para ello una estrategia es encontrar palabras en común que se repiten más en una categoría que en otra.\n\nLo que es importante resaltar es que los mensajes de correo ya están clasificados por categorías (sublista de correos) y no tendremos que analizar el significado de cada mensaje. Lo que si es necesario es un trabajo de limpieza de los mensajes, se dan varios casos:\n\n - Correos en formato html: Muchos emails enviados están en html, esto no aporta al análisis por que no es una característica que permita diferenciar los correos según categoría. Además contiene etiquetas html por ejemplo &lt;a&gt; &lt;span&gt; &lt;div&gt;, por lo que se quitarán las etiquetas html.\n - Firmas digitales: Muchos usuarios firman digitalmente sus mensajes para dar fé de que fueron ellos quienes realmente los escribieron. Pero estos bloques de texto no debemos tomarlos en cuenta por que tampoco es información que ayude a clasificar según categoría.\n - Palabras muy comunes: Los correos como cualquier mensaje de texto contienen palabras comunes en cualquier categoría como the is an from to he she those y tampoco ayudan a diferenciar por categorías, entonces usaremos un diccionario de palabras comunes en inglés para ignorarlas.\n - Texto citado: Muchos mensajes contienen bloques citando texto en otros mensajes, esto causa que las palabras se repitan un número indefinido de veces por que no todos los mensajes citan texto de otros. Para evitar esta ambigüedad y no contar palabras más de una vez se eliminarán las líneas que comiencen con &gt; que es la marca usada para citar mensajes.\n \nEn resumen la siguiente imagen muestra un ejemplo del proceso.\n\nmensaje1-debian-process\n \nUna vez se han limpiado los mensajes como se muestra en el jupyter notebook los tenemos prácticamente listos para aplicar una o mas técnicas de aprendizaje automático y generar modelos que permitan predecir a que categoría podrían pertenecer otros mensajes.\n\nEste trabajo continúa en la segunda parte.\n', ['python', 'machine_learning', 'software', 'tutorial'])

]]>
Utilidades python 1 https://rmgss.net/posts/Utilidades-python-1 https://rmgss.net/posts/Utilidades-python-1 Thu Mar 5 11:15:00 2020 text/html Rodrigo Garcia software , python ('En este post compartiré un útil script en python para mostrar archivos duplicados, eliminarnos o "mantenerlos" creando un enlace simbólico para no perder el acceso y ahorrar espacio.\n\nEs una mejora del script presentado antes en un post anterior de utilidades bash Utilidades-bash-1.\n\n> Actualización: Este script es un ejercicio, una utilidad más eficiente y recomendada para buscar y eliminar archivos duplicados en el sistema es fdupes.\n\nLa idea ahora es que además de comprobar el contenido de los archivos en un directorio y mostrar cúales son duplicados, permitir eliminar los archivos repetidos o alternativamente crear un enlace simbólico en lugar de los archivos que se han eliminado por ser repetidos.\n\nPrimero veremos una muestra conceptual de cómo funciona y luego mostraremos el script.\n\nGráficamente tenemos este directorio:\n\n :::bash\n /tmp/dir\n ├── d1\n │\xa0\xa0 ├── 1.pdf\n │\xa0\xa0 └── docs\n │\xa0\xa0 ├── 1.pdf\n │\xa0\xa0 └── 90.odt\n ├── d2\n │\xa0\xa0 ├── 4.odt\n │\xa0\xa0 └── 90.odt\n └── d3\n ├── docs\n │\xa0\xa0 └── 90.odt\n └── ruta.png\n\nAplicando el script: \n\n :::bash\n python3 archivosDuplicados.py /tmp/dir\n\nMuestra que existen tres archivos duplicados en este caso: 1.pdf se repite una vez y 90.pdf dos veces.\n\n \nCuando se usa con la opción -d elimina los duplicados en este caso quedaría:\n\n\t:::bash\n /tmp/dir\n ├── d1\n │\xa0\xa0 ├── 1.pdf\n │\xa0\xa0 └── docs\n ├── d2\n │\xa0\xa0 ├── 4.odt\n │\xa0\xa0 └── 90.odt\n └── d3\n ├── docs\n └── ruta.png\n\n \nCuando se usa con la opción -s elimina los duplicados y crea un enlace simbólico a un archivo con el contenido similar. \n\n\t:::bash\n /tmp/dir\n ├── d1\n │\xa0\xa0 ├── 1.pdf\n │\xa0\xa0 └── docs\n │\xa0\xa0 ├── 1.pdf -> /tmp/dir/d1/1.pdf\n │\xa0\xa0 └── 90.odt -> /tmp/dir/d2/90.odt\n ├── d2\n │\xa0\xa0 ├── 4.odt\n │\xa0\xa0 └── 90.odt\n └── d3\n ├── docs\n │\xa0\xa0 └── 90.odt -> /tmp/dir/d2/90.odt\n └── ruta.png -> /tmp/dir/d2/4.odt\n\n \nEl script actualizado se encuentra en https://notabug.org/strysg/duplicados.py, aquí una versión funcional:\n\n :::python\n\t#!/usr/bin/python3\n\t\'\'\'\n Buscador de archivos duplicados en un árbol de directorios\n \'\'\'\n import hashlib\n import os\n import sys\n \n # Funciones de ayuda\n def getList(directory="."):\n \'\'\' retorna una lista con los nombres de todos los archivos dentro el \n directorio actual.\n * basado en https://stackoverflow.com/questions/120656/directory-tree-listing-in-python#120701\n \'\'\'\n files = []\n for dirname, dirnames, filenames in os.walk(directory):\n # for subdirname in dirnames:\n # files.append(os.apth.join(dirname, subdirname))\n for filename in filenames:\n files.append(os.path.join(dirname,filename))\n return files\n\n def digest(filename, algorithm=\'sha1\'):\n \'\'\' returns hexdigest of the given filename using the given algorithm \'\'\'\n with open(filename, \'r+b\') as fil:\n if (algorithm == \'sha1\'):\n return hashlib.sha1(fil.read()).hexdigest()\n elif (algorithm == \'sha224\'):\n return hashlib.sha224(fil.read()).hexdigest()\n elif (algorithm == \'sha256\'):\n return hashlib.sha256(fil.read()).hexdigest()\n elif (algorithm == \'sha384\'):\n return hashlib.sha384(fil.read()).hexdigest()\n elif (algorithm == \'sha512\'):\n return hashlib.sha512(fil.read()).hexdigest()\n elif (algorithm == \'md5\'):\n return hashlib.md5(fil.read()).hexdigest()\n print (\'Invalid algorithm\')\n return ""\n \n def digests(fileList, algorithm=\'sha1\'):\n \'\'\' Retorna un diccionario con los digestos calculados de la lista de\n archivos fileList\&#39;.\n \&#39;\&#39;\&#39;\n dict = {}\n for file in fileList:\n d = digest(file)\n if d in dict:\n l = dict[d]\n l.append(file)\n dict[d] = l\n \n for file in fileList:\n d = digest(file)\n if d in dict:\n # duplicado encontrado\n l = dict[d]\n l.append(file)\n dict[d] = l\n else:\n l = []\n l.append(file)\n dict[d] = l\n return dict\n\n def eliminarArchivo(archivo):\n \&#39;\&#39;\&#39; elimina el archivo con ruta absoluta \n -- return: True si lo logra.\n \&#39;\&#39;\&#39;\n if os.path.exists(archivo):\n os.remove(archivo)\n return True\n else:\n print(\&#39;El archivo no existe:\&#39;, archivo)\n return False\n \n def crearEnlaceSimbolico(fuente, destino):\n \&#39;\&#39;\&#39; crea un enlace simbolico que hace quedestino\' apunte a fuente\&#39; \n -- return: True si lo logra.\n \&#39;\&#39;\&#39;\n if not os.path.exists(fuente):\n print (\&#39;El archivo no existe:\&#39;, fuente)\n return False\n if not os.path.exists(destino):\n print (\&#39;El archivo no existe:\&#39;, destino)\n False\n try:\n os.symlink(fuente, destino)\n print (\&#39;creado enlace simbolico\&#39;)\n return True\n except ex:\n print (\&#39;Excepcion generada:\&#39;, str(ex))\n return False\n\n def eliminarYCrearEnlaceSimbolico(fuente, destino):\n \&#39;\&#39;\&#39; Elimina el archivodestino\' y en el mismo directorio crea un enlace simbolico\n que apunta al archivo fuente\&#39;.\n -- return: True si lo logra.\n \&#39;\&#39;\&#39;\n if not eliminarArchivo(destino):\n return False\n if not crearEnlaceSimbolico(fuente, destino):\n return False\n return True\n\n def use():\n print (\&#39;Obtiene un lista de archivos duplicados desde un directorio raíz\&#39;)\n print (\&#39;Cada linea contiene los archivos que se ha detectado iguales\&#39;)\n print ()\n print (\&#39; python3 duplicados.py [opcion] [DIR] [ALGORITMO]\&#39;)\n print ()\n print (\&#39; - DIR: Directorio raíz donde realizar la búsqueda usa &#34;.&#34; por defecto\&#39;)\n print (\&#39; - ALGORITMO: Algoritmo para obtener digestos &#34;sha1&#34; por defecto\&#39;)\n print (\&#39; permitidos; md5,sha1,sha224,sha256,sha384,sha512\&#39;)\n print (\&#39; opcion:\&#39;)\n print (\&#39; d: Elimina los archivos duplicados dejando solo un archivo fuente.\&#39;)\n print (\&#39; s: Elimina los archivos duplicados y crea un enlace simbolico hacia el archivo fuente en lugar de los archivos eliminados.\&#39;)\n print (\&#39;EJEMPLO\&#39;)\n print (\&#39; python3 duplicados.py /tmp/dir1\&#39;)\n print (\&#39; python3 duplicados.py -d /tmp/dir1\&#39;)\n print (\&#39; python3 duplicados.py -s /tmp/dir1\&#39;)\n\n ################################ main ####################\n files = []\n directory=\&#39;.\&#39;\n hashAlgorithm = &#34;sha1&#34;\n \n eliminar_duplicados = False\n crear_enlaces_simbolicos = False\n \n\t# Examinando opciones introducidas al llamar al script\n if (len(sys.argv) &gt; 1):\n if (sys.argv[1] != \&#39;\&#39;):\n if (sys.argv[1]==\&#39;-h\&#39; or sys.argv[1]==\&#39;--help\&#39;):\n use()\n exit(0)\n if (sys.argv[1]==\&#39;-d\&#39;):\n eliminar_duplicados = True\n directory=sys.argv[2]\n elif (sys.argv[1]==\&#39;-s\&#39;):\n crear_enlaces_simbolicos = True\n directory=sys.argv[2]\n else:\n directory=sys.argv[1]\n\n # Comprobando si se especifica algoritmo para obtener digestos\n if (len(sys.argv) &gt; 3):\n if (eliminar_duplicados or crear_enlaces_simbolicos and sys.argv[3] != \&#39;\&#39;):\n if (sys.argv[3]==\&#39;sha1\&#39; or sys.argv[3]==\&#39;md5\&#39; or sys.argv[3]==\&#39;sha224\&#39;\n or sys.argv[3]==\&#39;sha256\&#39; or sys.argv[3]==\&#39;sha512\&#39;):\n hashAlgorithm = sys.argv[3]\n else:\n use()\n exit(0)\n \n ############## Programa principal\n files = getList(directory)\n digests = digests(files, hashAlgorithm)\n duplicados = 0\n completados = []\n erroneos = []\n\n # Examinando la lista de digestos y archivos\n for digest, lista in digests.items():\n if len(lista) &gt; 1:\n # significa que hay archivos duplicados para este digesto calculado\n listaDuplicados = []\n duplicados += 1\n fuente = lista[0]\n c = 0\n for file in lista:\n listaDuplicados.append(file)\n if eliminar_duplicados and c &gt; 0:\n if eliminarArchivo(file):\n completados.append(file)\n else:\n erroneos.append(file)\n if crear_enlaces_simbolicos and c &gt; 0:\n if eliminarYCrearEnlaceSimbolico(fuente, file):\n completados.append(file)\n else:\n erroneos.append(file)\n c += 1\n # mostrando\n for file in listaDuplicados:\n print (file)\n print (len(listaDuplicados))\n print ()\n \n print (\&#39;\&#39;)\n print (\&#39;# completados satisfactoriamente #\&#39;)\n for file in completados:\n print (file)\n print (\&#39;\&#39;)\n print (\&#39;# errores generados #\&#39;) \n for file in erroneos:\n print (file)\n print (\&#39;----\&#39;)\n print (\&#39; - Total Duplicados:\&#39;, str(duplicados))\n print (\&#39; - Completados:\&#39;, str(len(completados)))\n print (\&#39; - Erroneos:\&#39;, str(len(erroneos)))\n exit(0)\n\nLa utilidad de este script se puede aplicar a directorios grandes ya que examina los subdirectorios también. Sin embargo hay que considerar que como por cada archivo y para comprobar que está o no repetido, se comprueba su contenido ignorando su nombre. La velocidad del cálculo del digesto depende del algoritmo que se use por defecto se usa el algoritmosha1`.\n', ['software', 'python'])

]]>
Navidad 2019 https://rmgss.net/posts/navidad-2019 https://rmgss.net/posts/navidad-2019 Wed Jan 1 11:18:38 2020 text/html Rodrigo Garcia reflexión , navidad (' \nContinuando con las reflexiones de navidad y resumiendo un poco el 2019 desde mi percepción.\n\nnavidad2019\n\n\nFue un año especial de cambios, probablemente perpetrado por "cúmulos" de cosas que han encontrado la salida y se han manifestado a lo largo de este año.\n\n \nDesde algunos meses comenzó a crecer el descontento con acciones del gobierno boliviano, como una acumulación de malestares y temas que la gente veía como pendientes. Por ejemplo las políticas depredadoras al medio ambiente justificadas con "desarrollo" económico agropecuario que el gobierno a la cabeza de Evo Morales fue promoviendo. Al parecer cediendo poco a poco ante las exigencias del sector ganadero y empresarial de Santa Cruz.\n\nEstas políticas desencadenaron en un desastre ambiental, un incendio masivo del bosque seco de la Chiquitania Boliviana, una gran pérdida de flora y fauna de este ecosistema. Todo empezó poco después de aprobado el Decreto Supremo 3973 (9 de julio 2019, que modificó el Art 5 del DS 26075 del 2001) y que autoriza el desmonte y las quemas controladas inclusive en tierras de producción forestal permanente (TPFP). Este DS si bien es reciente, con seguridad ha funcionado como un “gatillo” para el desmonte, chaqueo y quemas en la Chiquitania. [1] .\n\nTambién se fue acumulando el descontento desde el 21 de Febrero de 2016, cuando Evo Morales perdío la consulta popular para modificar la constitución política del estado y viabilizar un nuevo mandato. Sin embargo, uso un recurso internacional para repostularse por ser un "derecho humano".\n\nAdicionalmente una serie hechos de corrupción, mal uso de bienes del estado y falta de cumplimiento a los compromisos en los casi 14 años de mandato, fueron el combustible necesario acumulado para la explosión final.\n\n \nTras las elecciones del 20 de Octubre de 2019 que como resultado señalaron al partido del MAS como ganador en primera vuelta (por un poco más del 10% de diferencia) con el segundo partido Comunidad Ciudadana (CC), empezarón serias denuncias de fraude electoral por parte del MAS.\n\nSe desplegó un sistema de conteo rápido en vivo (TREP) que publicaba los resultados del conteo rápido. El conteo rápido tenía una tendencia de subida para el MAS, pero en algún momento se corto la transmisión en vivo del TREP y surgieron las denuncias de fraude indicando que durante el corte en la transmisión del TREP se modificó la Base de datos del conteo de elecciones y se "ajustaron" los resultados para que el ganador sea el MAS en primera vuelta.\n\nAl volver el TREP (que no es vinculante sino solamente un conteo rápido referencial) y con los resultados finales del cómputo oficial se declaró ganador al MAS con un poco más de la diferencia mínima para ganar en primera vuelta. \n\nLa población muy molesta salió a las calles a reclamar primero anulación de las elecciones, ante la según mi opinión soberbia negativa del entonces presidente Evo Morales de auditar el proceso, el reclamo se fue convirtiendo rápidamente en la renuncia de Evo Morales. El presidente trató de calmar los ánimos convocando a una auditoría de la OEA, pero el descontento ya era tan grande que el país se convulsionó con un paro indefinido y gente saliendo a las calles a exigir respeto a la democracia.\n\nA mi parecer las discrepancias entre el TREP y el cómputo oficial no deberían ser razones suficientes para declarar un fraude y tampoco solo el hecho de mostrar algunas actas mal contadas o modificadas a propósito para dar ventaja al MAS, siempre y cuando sea un número pequeño no se podría considerar un fraude. Sin embargo, el proceso electoral fue llevado a cabo de manera muy como le decimos los informáticos "parchada", sin las características necesarias como para garantizar resultados los suficientemente confiables para la población.\n\nHubieron muchas denuncias y supuestos de fraude pero pocas "pruebas irrefutables" de un fraude masivo según percibí, pero la histeria colectiva y el descontento acumulado ya era tan grande que razonar objetivamente en esas circunstancias estaba casi fuera de alcance.\n\nNote que muchos actores políticos nacionales y extranjeros aprovecharon para ganar protagonismo y hacerse con el poder y aceptación popular, tal y como se hizo en Brasil con Bolsonaro y sus mensajes de odio. Vi muchas noticias falsas en redes sociales, periódicos desinformando, ocultando información y una serie de técnicas que terminaron obligando a Evo Morales a renunciar y a un gobierno "transitorio" a aprovechar y tomar el poder.\n\nEl discurso de democracia se ha usado mucho, pero la democracia no se trata solo de "escoger" entre una serie de representantes que se presentan y — dejar que ellos hagan el trabajo de gobernar(nos). Democracia es algo más grande y valioso, es el gobierno del pueblo y para defenderla es mejor construir y participar activamente en decisiones importantes y propuestas para el futuro.\n\n \nEn esta navidad he visto mucho de la anterior, muchas personas con una navidad feliz y otras en la cama de un hospital con la esperanza de recuperarse y pronto ir a trabajar o volver a casa para conocer a sus hijos recién nacidos o reconstruir lazos y continuar proyectos personales y colectivos.\n\nPero todos estos acontecimientos me han hecho dar cuenta que la acción es importante el 2020, ya construiremos mejores navidades reforestando y compartiendo más con gente que más lo necesita, acompañando a quién se sienta sol@ y descubriendo nuevas y valiosas cosas en este mundo enorme.\n\nnavidad2019\n<--tamaño original\n\n\n1. https://muywaso.com/consecuencias-incendios-chiquitania/\n', ['reflexión', 'navidad'])

]]>
Nodo Lorena LaOtraRed https://rmgss.net/posts/nodo-Lorena-LaOtraRed https://rmgss.net/posts/nodo-Lorena-LaOtraRed Sat Aug 31 01:02:19 2019 text/html Rodrigo Garcia LaOtraRed , redes_libres , reseña ('Desde el 4 de Mayo, hay un nuevo nodo en LaOtraRed\n\nplanto-nodo-lorena\nver más grande\n\nLo hemos bautizado el nodo "Lorena" igual que una de las mascotas de don Arturo, la persona que amablemente nos abrió las puertas de su casa y nos permitío instalar varias antenas y ampliar la red troncal de LOR (LaOtraRed).\n\nEl nodo Lorena se ubica en un punto alto de la ciudad de La Paz en la zona de Cotahuma y resulta un punto estratégico por que tiene línea de vista con varios otros nodos como el nodo Rezo (r00thouse en la zona de Miraflores), Nodo Omar y Gauss en Pampahasi y otros.\n\n \nEste nodo se tenía planificado poco antes de finales del 2018, e hicimos muchos intentos fallidos. Al principio don Arturo nos ayudó adaptando un plato parabólico (el de la foto de arriba) y pintándolo para usarlo, luego pensamos en potenciar un enrutador mío que no estaba usando (CPE-510). En este caso lo pusimos justo en el foco de la antena parabólica, así toda la radiación electromagnética que el plato parabólico concentra llegaría directamente a un enrutador que tiene ganancia de 13 dBi, un experimento que resultó funcional.\n\nLa instalación de la antena no causó problemas, pero surgieron otros. Hay una cancha cercana que tiene enmallado metálico y atenúa en gran medida la radiación electromagnética cuando se apuntaba cerca de ese parque y las señales wifi de los otros nodos LOR casi no se percibían a pesar de la gran antena parabólica.\n\nTambién un día todos los routers dejaron de funcionar debido a fallos en el suministro eléctrico. Tuvimos que conseguir un estabilizador de energía e instalarlo exclusivamente para los enrutadores del nodo Lorena, mover las antenas para que la reja enmallada del parque no interfiera y hacer ajustes en los cables.\n\nHicimos como cuatro visitas al nodo Lorena pasando tardes completas ahí. Finalmente logramos concretar enalces estables, gracias a la colaboración de la familia de don Arturo después de mucho esfuerzo.\n\n \nPor ahora usamos tres antenas en el nodo Lorena, un TP-Link cpe 510, y dos cpe 610, que apuntan directamente al r00thouse, al nodo Gauss y Omar con buena ganancia y conexión estable.\n\nplanto-nodo-lorena2\nEn la pantalla de la computadora se ven algunos nodos con los que se tiene conexión.\n\n\ncpes-nodo-lorena2\nDos enrutadores CPE-610 apuntando a los nodos de Pampahasi.\n\nEl nodo Lorena cubre buena parte del centro de la ciudad y Miraflores, la vista que regala deja contemplar la ciudad desde una agradable perspectiva.\n\nvista-nodo-lorena1\n--> ver más grande\n\nvista-nodo-lorena2\n--> ver más grande\n\n \nLorena es una paraba roja que vive en la casa de don Arturo, es una de sus mascotas favoritas y es grande y fuerte. Nos contarón como intentarón devolverla a su hábitad en el norte de La Paz, pero esta ave ya no pudo readaptarse y don Arturo se la quedó y la hizo parte de su familia. Lorena siempre nos saluda jugando y recibe y se come la fruta qu le llevamos :D\n\nlorena1\n\nFue muy satisfactorio este nodo en particular y también muy trabajoso, pero siempre nos gusta ver a Lorena, vamos a potenciarlo.\n\nDespués de esto LOR se toma un descanso para organizarnos individualmente pero estamos abiertos a nuevas posiblidades para ampliar la red.\n\n\n', ['LaOtraRed', 'redes_libres', 'reseña'])

]]>
Navidad 2018 https://rmgss.net/posts/navidad-2018 https://rmgss.net/posts/navidad-2018 Sat Aug 31 01:02:19 2019 text/html Rodrigo Garcia reflexión , navidad (' \nEsta navidad he querido verla desde otro punto de vista, desde donde otras personas no la pasan tan bien.\n\nnavidad2018\n<--tamaño original\n\nEsta es como una continuación a la reflexión de navidad 2017.\n\nÉpoca de descanso y tranquilidad para muchas personas, también de ajetreo y preocupaciones para otras. Tantas matices que tiene esta fecha que quizá pocos se animan a explorar y este año tuve un fuerte impulso por conocer aunque sea un poco esas matices distintas.\n\n \nFuí al hospital de la mujer poco antes de navidad para dar un apoyo a alguien y como siempre en este lugar hay mucho apoyo que dar. Pregunté a la trabajadora social que atiende a las enfermas por un caso que en especial requiera algún apoyo económico y me mostró el caso de una menor de edad que producto de un abuso sexual dió a luz a dos gemelos, en este caso la adolescente sólo contaba con la ayuda de sus padres que ya estaban mas de dos semanas en La Paz con pocos recursos, una ciudad grande que no conocían, una gran preocupación y cansados por estar tantos días sin alimentarse apropiadamente.\n\nNo conseguí muchos más detalles, pero vi un poco de las consecuencias del abuso a una persona indefensa en recuperación. La ayuda que pude dar por cuenta propia fue una parte a la familia y otro al hospital que necesitaba insumos ya que tenía otros casos similares y entre uno de ellos uno de abandono.\n\nRápidamente el dinero que había destinado para esto ĺo gaste en una farmacia comprando todo lo que alcanzó. A mi me parecieron excesivos los precios de los medicamentos e insumos que me indicaron hacían falta, pero aún así tuve que comprarlos. Luego pedí ayuda a algunas personas del trabajo que no se negaron y aportaron de buena gana :) Con ese dinero alcanzó para comprarles ropa, pañales y muchos otros productos de bebés para los recién nacidos y algo para la familia.\n\nEsperando que esta navidad sea mejor para esa familia me despedí cuando se subían al transporte que los llevaba de vuelta a su pueblo lejano en los Yungas de La Paz. Por todo lo demás fue una navidad típica en familia para mi, pero me queda la necesidad de hacer más cosas similares.\n\n \nNo pude evitar pensar en este caso como muchos otros casos de abuso con consecuencias muy fuertes, cuáles son las causas o factores que los disparan. Revise sin muchos detalles algunas estadísticas y luego entendí mejor lo que impulsa a muchos movimientos de lucha contra el abuso y violencia contra la mujer.\n\nLas mujeres viven una situación de desigualdad en nuestro medio y padecen directamente las consecuencias, por que en un caso como este, posiblemente la madre de los dos gemelos tendría que dejar de estudiar y dedicarse al cuidado de los niños aún si fuese en contra de su voluntad.\n\nPienso que entre la gran cantidad de problemas de desigualdad que existen, uno de los peores es la falta de educación equitativa, —tener un grupo de personas "con buen nivel de educación" no garantiza el buen vivir de otro grupo de personas con un nivel de educación inferior.\n\n \nLa desigualdad es tremenda sólo comparando las cenas de navidad que unas familias tienen y cómo otras no las tienen o las dificultades que muchas tienen que vivir. Si la gente que tiene mucho en navidad daría a la gente que no tiene, seguro se verían grandes diferencias en esta celebración. Dar algo nuestro para otras personas que lo necesitan provoca cambios positivos y duraderos.\n\nNo hay razón para que este tipo de actos sean considerados raros, "cursis" o difíciles de hacer, más bien es hora de hacerlo una costumbre más extendida :D \n', ['reflexión', 'navidad'])

]]>
Fotos7 https://rmgss.net/posts/fotos7 https://rmgss.net/posts/fotos7 Sat Aug 31 01:02:19 2019 text/html Rodrigo Garcia fotos ('Esta es una serie de fotos de una caminata por la ruta "el Choro" en los Yungas de La Paz - Bolivia.\n\nchoro15\n<- Tamaño original\n\nLa caminata comienza desde las frías montañas que son el inicio de una larga ruta hacia una de las zonas con más humedad en Bolivia.\n\n----\n\nmontañas1\n<- Tamaño original\n\nA medida que se va descendiendo por las montañas de "la cumbre", la neblina de a poco va revelando la ruta que espera.\n\nchoro1\n<- Tamaño original\n\n----\n\nDespués una hora de descenso se empiezan a escuchar ríos y de a poco se camina al lado de riachuelos y vertientes de aguas cristalinas.\n\nchoro2\n<- Tamaño original\n\nchoro3\n<- Tamaño original\n\n----\n\nSiguiendo se va viendo como se deja atrás la cordillera desde donde viene el agua de todo lo que sigue.\n\nchoro4\n<- Tamaño original\n\nchoro5\n<- Tamaño original\n\n----\n\nLuego el paisaje cambia, se respira humedad y olor a vegetación densa entre las montañas.\n\nchoro6\n<- Tamaño original\n\nEn todo el trayecto que normalmente toma tres días siempre se puede conseguir agua.\n\nchoro7\n<- Tamaño original\n\n----\n\nMientras más se baja más por las verdes montañas, más se encuentran cascadas y ríos. \n\nchoro8\n<- Tamaño original\n\nEl cansancio de la marcha sin parar y la sed, hacen que tomar estas aguas sea realmente bueno.\n\nchoro9\n<- Tamaño original\n\nchoro10\n<- Tamaño original\n\nchoro11\n<- Tamaño original\n\n----\n\nHasta las piedras que se encuentran en el camino están llenas de vegetación.\n\nchoro12\n<- Tamaño original\n\n----\n\nEntre los caminos estrechos, las largas y empinadas cuestas, los puntos altos son buena ocasión para tomarse una pausa y contemplar el paisaje.\n\nchoro13\n<- Tamaño original\n\n----\n\nAltas montañas y abundante vegetación, puentes improvisados, senderos resbalosos con paredes de piedras, precipicios a un paso y cascadas cuyas aguas vienen desde las altas y grandes montañas, hacen que al tomar agua de una de estas cascadas se sienta el sabor de todo esto y más.\n\nEs agua tan dulce y refrescante que no puedes olvidar su sabor y tampoco el querer volver a caminar por esta ruta o ir incluso más lejos.\n\nchoro14\n<- Tamaño original\n', ['fotos'])

]]>
Fotos3 https://rmgss.net/posts/fotos3 https://rmgss.net/posts/fotos3 Sat Aug 31 01:02:19 2019 text/html Rodrigo Garcia fotos ('Un acercamiento a plantas en lugares variados, por que un mejor acercamiento revela mejores cosas.\n\nplantas_de_cerca2\n<- Tamaño original\n----\n\nUna filtración, una pared y mas de una cosa brota.\n\nplanta_grieta_1\n<- Tamaño original\n\n----\nplanta_de_cerca3\n<- Tamaño original\n----\nplantas_de_cerca1\n<- Tamaño original\n----\nAhí parece que esta tela de araña ha contenido la caída de esa piedra al lado de una cascada, ahora es un lugar confortable para quiensea que la haya hecho su hogar.\n\ntela_y_piedra\n<- Tamaño original\n', ['fotos'])

]]>
Fotos2 https://rmgss.net/posts/fotos2 https://rmgss.net/posts/fotos2 Sat Aug 31 01:02:19 2019 text/html Rodrigo Garcia fotos ('Parece van a entrar a clases o están en descanso, todos mirando una pantalla y la mayoría la de un celular.\n\numsa_infor 2\n<- Tamaño original\n\nLlama mucho la atención que los estudiantes en el sótano de la carrera de informática de la UMSA, prefieran interactuar entre sí a través de una pantalla.\n\numsa_informatica1\n\n----\nCasas encima de la avenida periférica en La Paz.\nencima avenida periférica\n<- Tamaño original\n----\n\nEsas plantas que viven ahí, parece estarían contemplando la vista o fuesen testigos de una mezcla de edificios, calles, casas, flora y fauna que crece en el primer rincón donde se pueda. Es una mezcla de eso y mucho más que no se alcanza a ver.\n\nplanta testigo 1\n<- Tamaño original\n\n', ['fotos'])

]]>
Fotos1 https://rmgss.net/posts/fotos1 https://rmgss.net/posts/fotos1 Sat Aug 31 01:02:19 2019 text/html Rodrigo Garcia fotos ('No tienen una temática definida la mayoría son de rincones en la ciudad de La Paz.\n\ncacto1\n<- Tamaño original\n----\nAlgo de lluvia, una grieta en la acera y una planta brota.\n\nplanta en rincon\n<- Tamaño original\n\n----\nAtardecer, el Illimani, una vieja pared, dos perros, gradas, etc. A veces hace falta caminar un poco para ver estas cosas juntas.\n\nillimani 1\n<- Tamaño original\n----\ncacto2\n<- Tamaño original\n', ['fotos'])

]]>
Construyendo Babeld para enrutadores https://rmgss.net/posts/construyendo-Babeld-para-enrutadores https://rmgss.net/posts/construyendo-Babeld-para-enrutadores Sat Aug 31 01:02:19 2019 text/html Rodrigo Garcia proyectos , tutoriales ('Aquí se muestra una manera de construir el programa Babeld mediante compilación cruzada para enrutadores con el sistema operativo LEDE. \n\nterm.png Babeld que es una implementación del protocolo de enrutamiento Babel escrito en lenguage C, se utliza frecuentemente en enrutadores de redes inlámbricas en malla que crecen y se gestionan automáticamente.\n\nContenido:\n\n Como construir programa Babeld para enrutadores de la rama ar71xx que tengan el sistema operativo LEDE por ejemplo para el enrutador TL-MR3020 o TL-MR3040.\n\n Como construir Babeld-lor para enrutadores de la rama ar71xx, Babeld-lor que es una implementación de un método de autenticación para el protocolo Babel que he estado probando y desarrollando.\n\n \nPara poder obtener el ejecutable de Babeld (construirlo) y que se pueda ejecutar en un enrutador básicamente se necesita:\n\n Compilador cruzado Cross compiler de lenguage C.\n Enlazador, bibliotecas y otros utilitarios para lenguage C.\n\n \nComo queremos que el programa se ejecute en un enrutador TL-MR3020, primero debemos obtener el compilador cruzado apropiado. Dentro del Sistema operativo LEDE u Openwrt, el TL-MR3020 esta dentro de la rama objetivo ar71xx.\n\n \nLa primera forma de obtener el cross compiler es descargándolo del repositorio oficial, el proyecto LEDE mantiene un SDK.\n\nEn https://downloads.lede-project.org/releases/17.01.4/targets/ar71xx/generic/ debería haber un archivo que contenga sdk por ejemplo: lede-sdk-17.01.4-ar71xx-generic_gcc-5.4.0_musl-1.1.16.Linux-x86_64.tar.xz.\n\nEn la wiki de LEDE se describe mejor el SDK, básicamente es una cadena de herramientas (toolchain) para hacer compilación cruzada y construir programas para una determinada plataforma objetivo (en nuestro caso ar71xx).\n\nLuego debemos descomprimir este archivo, que contiene el toolchain que necesitamos.\n\n \nSi lo que quieres es construir todo incluyendo el SDK, puedes usar Build root. El proceso de construcción lo he descrito en el post: Construir firmware para enrutadores con Buildroot, no olvides marcar la opción: Build the ... SDK.\n\nUna vez termine el largo proceso de construcción, hay que ubicarse en bin/targets/ar71xx/generic donde debería estar un archivo comprimido con el SDK recién construido.\n\n--> En general, es preferible usar la primera forma y sólo descargar el SDK precompilado desde el repositorio oficial de LEDE.\n\n \nEl código fuente de Babeld se puede obtener desde https://www.irif.fr/~jch/software/files/babeld-1.8.0.tar.gz o descargando la versión de desarrollo con:\n\n git clone git://github.com/jech/babeld.git\n\nCon todo lo necesario, ya podemos empezar a construir Babeld.\n\n<hr id="Babeld">\n \nPrimero como en todo programa nos ubicamos en el directorio raíz del código fuente, luego de clonar u obtener Babeld en el directorio raíz existe un archivo Makefile, con instrucciones básicas para la construcción del programa.\n\nEn el Makefile, la regla con la instrucción de compilación:\n\n babeld: $(OBJS)\n $(CC) $(CFLAGS) $(LDFLAGS) -o babeld $(OBJS) $(LDLIBS)\n\nAhí la variable $(CC) es la que se puede reemplazar para que se utilice el compilador cruzado del SDK de LEDE.\n\nBabeld no utiliza bibliotecas adicionales y todas las necesarias (libc) vienen en el SDK asi que para construirlo solamente apuntamos al compilador cruzado del SDK que tenemos, esto se hace con el comando:\n\nmake CC=/ubicacion/del/SKD/staging_dir/toolchain-mips_24kc_gcc-5.4.0_musl/bin/mips-openwrt-linux-musl-gcc PLATFORM_DEFINES=\&#39;-march=mips32\&#39;\n\nLa parte que dice /ubicacion/del/SKD/ apunta a la ubicación en nuestro compuador donde descomprimimos el SDK, ahí dentro esta staging_dir/ y ahí debería estar el toolchain para la arquitectura, en este caso mips_24kc.\n\nPara comprobar que en este directorio se encuentra el compilador cruzado:\n\n :::bash\n ./ubicacion/del/SKD/staging_dir/toolchain-mips_24kc_gcc-5.4.0_musl/bin/mips-openwrt-linux-gcc --version\n\nUsaremos el compilador gcc-5.4.0 cuyo archivo ejecutable es mips-openwrt-linux-gcc y si en la pantalla aparece un mensaje con la version 5.4.0 el archivo es correcto, por ejemplo:\n\n mips-openwrt-linux-gcc (LEDE GCC 5.4.0 r3664-4124847) 5.4.0\n\nAhora, construimos con:\n\n :::bash\n make CC=/ubicacion/del/SKD/staging_dir/toolchain-mips_24kc_gcc-5.4.0_musl/bin/mips-openwrt-linux-musl-gcc \\n\tPLATFORM_DEFINES=\'-march=mips32\'\n\nEl proceso debería terminar rápidamente y debería haber un archivo ejecutable con nombre babeld. Este archivo se puede ejecutar en un enrutador con LEDE, para comprobar que la arquitectura objetivo del ejecutable es correcta usamos:\n\n :::bash\n file babeld\n\nQue debería mostrar:\n\n :::bash\n babeld: ELF 32-bit MSB executable, MIPS, MIPS32 rel2 version 1, dynamically linked, interpreter /lib/ld-musl-mips-sf.so.1, not stripped\n\nAhora solo hace falta probarlo copiando el archivo babeld al enrutador digamos en el directorio /tmp/ y luego ejecutarlo con:\n\n ./babeld\n\n--> De esta forma hemos usado el compilador cruzado directamente para construir desde el código fuente, de forma similar se construyen programas para los enrutadores y cada programa puede tener sus necesidades específicas. Pero con esto podríamos modificar el código de Babeld y probar estos cambios directamente en el enrutador.\n\n<hr id="Babeld-lor">\n \nAhora podemos usar el SDK para construir una versión modificada de Babeld llamada Babeld-lor, esta versión en desarrollo pretende implementar un método de autenticación en el protocolo Babel para protegerlo contra ataques de suplantación de identidad.\n\n \nBabeld-lor utiliza descifrado RSA y una clave pública RSA generada por una entidad central para autenticación, por eso es necesario copiar o tener instalada la biblioteca mbedtls en el enrutador.\n\nUna forma sencilla de instalarla es mediante el mediante manejador de paquetes de LEDE, en el enrutador:\n\n opkg install libmbedtls\n\nPara más detalles sobre esta biblioteca revisa este post como construir mbedtls.\n\n \nSe puede copiar a la partición /tmp los archivos necesarios para la biblioteca mbedtls. El siguiente procedimiento es una solución temporal y cada que el enrutador se reinicie se debe volver a repetir cierta parte.\n\n :::bash\n # Conectándose al enrutador que digamos tiene la IP: 192.168.1.1\n ssh root@192.168.1.1\n\t# una vez dentro el enrutador\n ### obteniendo mbdetls \n cd /tmp/\n wget https://downloads.lede-project.org/releases/17.01.4/packages/mips_24kc/base/libmbedtls_2.6.0-1_mips_24kc.ipk\n mv libmbedtls_2.6.0-1_mips_24kc.ipk libmbedtls_2.6.0-1_mips_24kc.tar.gz\n tar -zxvf libmbedtls_2.6.0-1_mips_24kc.tar.gz\n tar -zxvf data.tar.gz\n cd usr/lib\n\tmkdir /tmp/mbedtls\n cp libmbedcrypto.so.0 libmbedtls.so.10 libmbedx509.so.0 /tmp/mbedtls\n ######\n # creando un enlace simbolico para que el sistema apunte a los archivos correctos\n cd /usr/lib\n ln -s /usr/lib/libmbedcrypto.so /tmp/mbedtls/libmbedcrypto.so.0\n ln -s /usr/lib/libmbedtls.so /tmp/mbedtls/libmbedtls.so.10\n ln -s /usr/lib/libmbedx509.so /tmp/mbedtls/libmbedx509.so.0\n\nAhora la biblioteca libmbedtls esta instalada temporalmente en el sistema, pero al apagar el equipo la partición temporal /tmp se vaciará y tiene que repetir la parte que dice "### obteniendo mbdtls".\n\n \nComo Babeld-lor utiliza una clave pública RSA de una entidad central, es necesario que el enrutador la tenga para poder descifrar las actualizaciones de rutas y autenticarlas. También, se requiere que cada enrutador cuente con un conjunto de tokens de autenticación.\n\n \nPrimero se debe crear el par de claves pública y privada y lo podríamos hacer en nuestra computadora, esta clave debe ser creada con la biblioteca mbedtls, una forma rápida de construir mbedtls está la sección "construyendo mbedtls" del post: probando mbedtls\n\nUna vez lo tengamos, en el directorio del código fuente de mbedtls:\n\n cd programs/pkey\n ./gen_key\n\nQue generará el par de claves de la entidad central.\n\nAhora podemos utilizar este script para generar tokens cifrados para direcciones IP dadas:\n\n :::bash\n DIR_BASE=$PWD\n DIR_RSA=/Ruta/donde/esta/mbedtls-2.4.2/programs/pkey # modificar esto segun convenga\n ARCH_TOKEN=$DIR_RSA/result-enc.txt\n DIR_DEST=$DIR_BASE/tokens\n PREFIJO=$1\n \n echo "preparando para prefijo $PREFIJO"\n \n if [ ! -e tokens ]\n then\n mkdir tokens\n fi\n \n if [ -e $DIR_DEST/$PREFIJO.ctxt ]\n then\n echo "borrando tokens/$PREFIJO.ctxt"\n rm $DIR_DEST/$PREFIJO.ctxt\n fi\n \n for((i=0;i<100;i++))\n do\n B=$(head -c 19 /dev/urandom | sha1sum | head -c 6 | tr "[a-z]" "[0-9]")\n if [ $i -lt "10" ]\n then\n CAD=$PREFIJO""$B"0"$i\n else\n CAD=$PREFIJO""$B$i\n fi\n \n echo "mensaje: $CAD"\n \n # cifrando\n cd $DIR_RSA\n ./rsa_encrypt_con_clave_privada $CAD > /dev/null\n #$PPK "$CAD" 2> /dev/null\n TOKEN=$(cat $ARCH_TOKEN | tr -d \' \')\n #echo "TOKEN: $TOKEN"\n # quitando newlines\n while read -r linea\n do\n L=$(echo "$linea"| tr -d \' \' )\n #echo -n "$L"\n echo -n "$L" >> $DIR_DEST/$PREFIJO.txt\n done < $ARCH_TOKEN\n echo >> $DIR_DEST/$PREFIJO.txt\n done\n \n # eliminando ^M\n cat $DIR_DEST/$PREFIJO.txt | tr -d $\'\r\' > $DIR_DEST/$PREFIJO.ctxt\n rm $DIR_DEST/$PREFIJO.txt\n \n cp $DIR_RSA/rsa_pub.txt $DIR_DEST/\n \n echo "Hecho."\n exit 0\n\nGuardamos este script como digamos "gk.sh", ahora creamos los tokens con:\n\n :::bash\n bash gk.sh 192.168.1.1\n\nQue generará un total de 100 tokens de autenticación para la dirección ip 192.168.1.1 en una carpeta tokens\n\n \nAhora necesitamos descargar el código fuente de Babeld-lor, por ejemplo de la rama de desarrollo forked-updateTLV:\n\n git clone https://notabug.org/strysg/babeld-lor/src/forked-updateTLV\n\nEste repositorio contiene un Makefile para compilar usando mbedtls y un SDK.\n\nTambién un script llamado set-up.sh que apunta a un SDK en el directorio actual y como podríamos tener el SDK de LEDE en otro directorio podemos crear un enlace simbólico al SDK con:\n\n ln -s /ruta/donde/esta-el-SDK/ SDK\n\nEl script set-up.sh extrae la clave pública, los tokens de autenticación, el ejecutable construido y los copia al enrutador en la carpeta /tmp, no instala Babeld-lor ya que estamos solamente haciendo una prueba.\n\nAntes de ejecutar el script deberíamos copiar el contenido de la carpeta tokens donde se generaron las claves de autenticación al directorio donde descargamos Babeld-lor, concretamente en un directorio pruebas/tokens dentro el código fuente de Babeld-lor.\n\nFinalmente para construir babeld-lor usamos:\n\n ./set-up.sh export 192.168.1.1\n\nQue construirá el programa usando el SDK, y copiará lo necesario al enrutador con la direccíon IP 192.168.1.1.\n\nPara probar que esto funciona en el enrutador:\n\n :::bash\n cd /tmp/\n # para que babeld-lor exporte las rutas por la interfaz wifi wlan0\n ./babeld wlan0\n # o si queremos mas verbosidad\n ./babeld -d 2 wlan0\n # Para utlizar el archivo de configuracion por defecto\n ./babeld -c /var/etc/babeld.conf -d 2\n\nSi funciona ahora se puede probar y modificar Babeld-lor a gusto.\n\n', ['proyectos', 'tutoriales'])

]]>
LaOtraRed mayo 2018 https://rmgss.net/posts/LaOtraRed-mayo-2018 https://rmgss.net/posts/LaOtraRed-mayo-2018 Sat Aug 31 01:02:19 2019 text/html Rodrigo Garcia LaOtraRed , redes_libres , reseña ('El proyecto de LaOtraRed sigue construyéndose y creciendo de a poco en la ciudad de La Paz - Bolivia. \n\nantena_nodo_omar_2\nAntena del nodo Omar. (Foto de Aymatha)\n\nRecientemente se ha unido un nuevo nodo y otro más está a punto de unirse como nodo fijo y estable.\n\n \nA principios de este año en el Grupo de estudio de redes libres (GEReL) hemos trabajado en los aspectos técnicos de la estructura y funcionamiento de la red libre, como resultado de este trabajo hemos publicado una primera versión estable o como le llamamos nosotros la 1VE de LaOtraRed.\n\nEn resumen el documento de la 1VE, define de que se trata el proyecto, objetivos, principios de convivencia, medios de comunicación, gobernanza y finalmente una descripción del funcionamiento de la red. Con estos aspectos definidos se puede construir una red libre con una base conceptual estable..\n\n \nHace poco más de una semana un nuevo nodo se unió a la red troncal de LaOtraRed en la ciudad de La Paz. Franklin Torres (el propietario) lo llamó el nodo Dx, el nodo Dx que está en la zona Norte de la ciudad de La Paz hace un enlace de larga distancia hasta el nodo rezo en el r00thouse cerca de laicacota y el estadium Hernando Siles. Aunque el enlace del Nodo Dx no es de los mejores, es suficiente para que Franklin y quienes estén en su casa usen los servicios de la red libre así como brindar sus propios servicios.\n\nEl domingo 13 de Mayo, nos reunimos en la casa de Omar Mita en Pampahasi quién de buena gana compró un router de aproximadamente 600 Bs. para hacer enlace mediante WiFi con el nodo Sopocachi I de @enmaskarado. En cuestión de dos horas se terminó de liberar el enrutador (instalarle el Sistema Operativo libre openwrt) y configurar su nodo para conectarse a la red libre.\n\nLuego como en una hora se terminó de montar un mástil metálico que Omar consiguió para asegurar la antena y un cable que vaya hasta la seguridad de su casa para tener conexión a la red libre. Como ya habíamos hecho preparaciones antes para este nodo la instalación fue rápida, ahora para concretar el enlace, una vez se apunte del otro extremo el enlace quedará terminado.\n\nnodoOmarApuntando2\nAymatha calculando la dirección hacia el nodo Sopocachi I y Omar asegurando su mástil. (Foto de @enmaskarado)\n\nnodoOmarapuntando1.jpeg\nVista hacia el nodo Sopocachi I desde el nodo Omar. (Foto de @enmaskarado)\n\n \nCon el nodo Dx concretado y el nodo Omar pronto parte de la red troncal, la red crece y será más fácil que se unan más personas pero seguimos con trabajo por hacer.\n\n Montar más nodos.\n Poner más servicios en la red.\n Involucrar a más participantes para hacer crecer la comunidad.\n Conseguir más recursos humanos y económicos.\n* Escribir un programa para automatizar las configuraciones de enrutadores para unirse a LaOtraRed, un trabajo inicial lo estamos viendo en nuestro Foro.\n\nVamos a continuar y cualquier colaboración es bienvenida.\n', ['LaOtraRed', 'redes_libres', 'reseña'])

]]>
Chersky mas que un recuerdo https://rmgss.net/posts/Chersky-mas-que-un-recuerdo https://rmgss.net/posts/Chersky-mas-que-un-recuerdo Sat Aug 31 01:02:19 2019 text/html Rodrigo Garcia reseña , naturaleza , misceláneo (' \nEn este post, me gustaría relatar algunas vivencias con la Chersky, una mascota.\n\nchersky9\n<-- Tamaño original\n\nChersky fue una perra muy activa, dominante, atenta, juguetona y fiel. Su vida fue una serie de aventuras y vivencias de perros en una ciudad y con una familia que domesticó ;-)\n\n \nChersky llegó hace poco más de diez años a nuestra casa, mi hermano Miguel la trajo de la calle de una camada en un lugar abandonado de la ciudad de La Paz.\n\nLos primeros días que estaba en la casa, era muy tímida y lloraba mucho, no estamos seguros de qué edad tenía pero probablemente fue separada de su madre a los tres meses. Poco después de bañarla y quitarle las pulgas comenzó a mostrar su carácter dominante y difícil de domar, una de las primeras muestras era como renegaba, gruñía y mostraba los colmillitos cuando comía y alguien estaba cerca incluyendo los miembros de la familia.\n\nTambién desde muy pequeña a parte de comer mucho jugaba mucho y empezaba a sentirse más cómoda y provocadora. Sus primeros ladridos fueron jugando y pidiendo cosas, la comunicación con nosotros iba mejorando cada día y ella aprendió (o quizás era un talento innato) el hacerse entender con humanos a través de su lenguaje corporal y ladridos.\n\nDe cachorra era común que saque zapatos y medias de nosotros para morderlas, se metía de bajo de una cama y silenciosamente los ponía entre las patas de adelante para morderlos. Y no solo mordía eso también recipientes, maderas, juguetes, celulares, cables y más :D\n\nchersky8\n<-- Tamaño original\n\n \nLas primeras veces que la sacamos a pasear fue sin collar en un callejón, exploraba tímidamente y se asustaba de casi cualquier ruido parecía que iba a ser muy tranquila en los paseos. Pero poco después comenzó a mostrar su instinto fuerte de supervivencia y confianza en si misma, se aventuraba sola a buscar cosas nuevas y pronto ya no se podía sacarla sin collar por que era muy "entradora" y algunas veces asustaba a la gente.\n\nJugaba amistosamente con otros perros, pero ella tenía un ladrido fuerte y se hacía escuchar por humanos y animales por igual, les provocaba e invitaba al juego incluso si no querían, rara vez paseaba tranquila por que se ponía a ladrar y a medida que crecía sus ladridos eran mas fuertes. En las calles cercanas la empezaron a conocer por sus travesuras y por que se metía debajo de las tarimas a buscar comida o jugar con perros.\n\nchersky3\n<-- Tamaño original\n\n \nCuando se escapaba de la casa casi siempre volvía con una bolsa de basura o de comida en la boca, se iba a buscar comida por donde podía, en esa época vivíamos en una zona comercial llena de tarimas con puestos de venta y algunos de estos puestos eran de comida. No importaba mucho cuanta comida le hubiésemos dado por que siempre tenía más hambre y seguía quieriendo comer, ese impulso incluso hacía que se meta en los mercados de carniceras y vuelva con huesos grandes, orejas de vaca, piernas, narices, desperdicios y muchas otras cosas que en general no tenían buen olor.\n\nAlguna vez cuando yo regresaba, la sorprendía trotando y con una bolsa en la boca volviendo a la casa donde en el piso de abajo la abría buscando algo de comer, se enfermó algunas veces por lo que comía y una vez alguien puso veneno para palomas en una bolsa de fideos que ella se comío, casi muere pero el veterinario le salvó rápidamente. A pesar de eso en la calle habían personas que la querían y la defendían por que entre otras cosas era cariñosa y juguetona.\n\n \nEn todo lado tenía una actitud enérgica y siempre andaba con la cola en alto erguida y atenta a cualquier ruido u olor fuera de lo normal. Era muy juguetona y casi cualquier cosa era pretexto para que ella te invite a jugar estirando las patas delanteras, inclinando el pecho hasta tocar el piso y la cola y patas traseras hacia arriba además de ladridos cortos, repetidos y con la mirada fija en su objetivo de juego.\n\nCuando estaba aburrido muchas veces me entretenía llamando mi atención por ejemplo haciendo caer algo, ladrando mucho o llorando para conseguirla; era también muy agotador estar pendiente de la Chersky. No parecía que le importaba mucho que la acaricien, sino que jueguen con ella o le den comida y para algunas personas eso no es muy bonito en los perros de casa.\n\nPero muchas veces era también agresiva debido a su fuerte carácter, en especial territorial y gruñona a la hora de comer. No tenía pena de mostrate los dientes cuando te acercabas mucho incluso intentar morderte. Había pocas personas a las que realmente respetaba y no se atrevía a gruñirles, aún así lo intentaba, algo interesante era que cuando alguna persona que conocía tenía el carácter más "debíl" que el de ella, la trataba de someter. Pero cuando la persona era más decidida y se hacía respetar, ella la respetaba y obedecía. Mordío algunas veces y por su fuerza y tamaño sus mordidas hacían daño, pero esa costumbre se la fuimos quitando de a poco.\n\nEnseñarle a pasear fue difícil, al principio era muy molesto y cansador por que tenía muchas energías ya que caminaba jalando y ladrando mucho, de a poco y con muchas salidas se acostumbró a la idea de que debía obedecer y seguir el paso y ritmo de la persona con quien paseaba. Se logró pero costo un montón y más de digamos cinco veces se peleaba con otros perros o los hacía asustar y esto causaba discusiones con otras personas incluso cuando quien empezaba la pelea era el otro perro o perra casi, siempre la Chersky era considerada la mala lo cual era muy injusto solo por reaccionar a provocaciones.\n\nchersky4\n<-- Tamaño original\n\n \nLas personas en general tenemos algo que nos detiene, por ejemplo cuando queremos quedar bien y nos comportamos según la situación y nos reprimimos mucho o hacemos que otras lo hagan. Ella al ser perro era como que no le importaba nada de eso aunque noté que ella era algo mas "natural y espontánea" que otros perros, como que era más atrevida, y —de alguna forma contagiaba esa forma de ser. Cuando quería mostrar afecto lo hacía y cuando no tenías nada interesante para ella te ignoraba sin problemas, si te pasabas y la molestabas te gruñía y hacía asustar, tal vez por eso pienso que la gente le agarraba cariño rápidamente por su forma tan suya de hacer sus cosas de perros.\n\n \nChersky también fue madre, sus instintos despertaron cuando tuvieron que despertar. Mas o menos luego de sus cinco años nos mudamos a una zona más tranquila y una casa más grande, allí ella casi no podía escaparse y pasaba mucho tiempo en el patio y ladrando a quienes pasaban cerca.\n\n \nComo no la habíamos esterilizado y cuando estaba en celo la cuidábamos mucho para que no salga, una vez a dos días mas o menos de dejar de estar en celo se escapó rápidamente en un descuido al abrir la puerta. Se perdio por al menos cuatro horas cuando volvío esta muy sucia como si se hubiese ido a revolcar en la tierra, estaba oliendo mal, jadeando y muy cansada.\n\nUnas semanas después le empezaron a crecer las mamas y las sospechas se confirmarón cuando el veterinario nos dijo que estaba preñada de al menos un mes. Al cabo de dos meses en un día de carnavales se puso muy inquieta jadeando mucho, le hizo un hueco a un colchón viejo y lo hizo como una especie de madriguera primitiva donde se metió y empezó a dar a luz, al final de la tarde nacierón cinco cachorros casi todos iguales a ella salvo dos muy peludos. Nunca supimos quien o quienes son los padres.\n\nDesde que dio a luz no le importaba casi nada más que sus cachorros y a veces lloraba cuando ellos lloraban mucho, iba a comer y hacer sus necesidades rápidamente para no dejarlos solos mucho tiempo.\n\nchersky7\n<-- Tamaño original\n\n \nComo madre y como iban creciendo sus cachorros se encargó de mostrarles su lugar, de alguna forma les hizo entender que debían respetarle y respetarnos a nosotros. Les dejaba pelear y competir por la comida hasta incluso les dejaba que ellos se coman su comida pero les tenía bajo control, cuando la molestaban o lloraban mucho les reprimía y le tenían miedo o quizás mas que eso le tenían mucho respeto, recuerdo uno de ellos que es de la costumbre de quitarles la comida a sus hermanos, una vez trató de hacerlo con su madre sólo para tener que escapar correr llorando por atreverse a hacerlo.\n\nchersky5\n\nEra la líder de una manada de al principio 5 cachorros y luego solamente dos.\n\n \nCon el paso del tiempo y especialmente luego de tener a sus cachorros, se volvío menos activa poco a poco dejó de hacer los escándalos de ladridos por las mañanas se volvío más paciente y dormía más tiempo. También subió de peso y mas o menos a sus nueve años estaba más débil y menos ágil, sin embargo no perdió esa energía que su presencia emanaba el hecho de verla o escucharla era reconfortante, su fuerza iba más allá del esfuerzo físico que hacía o de sus fuertes ladridos que ya no eran tanto.\n\nFue enfermando del hígado y empezó a perder el control de sus movimientos, caminaba poco, se chocaba, necesitaba ayuda para comer y hacer sus necesidades. No pudo mejorar mucho despúes de los tratamientos y hace dos días dejó de respirar echada en su cama en la madrugada.\n\n \nAlgunas personas dicen que los recuerdos son lo más preciado que se queda de algo bueno que ya no se tiene, para mi es diferente. La Chersky era mucho de lo que tenía, gracias a que estaba ahí para darle comida, jugar o acariciarla me alejé de muchas costumbres y actitudes negativas, incluso cuando tenía pensamientos negativos o malintencionados, me iba a su lado o la sacaba a pasear y eso me hacía sentía mejor luego regresaba a discernir mejor las cosas y tomar mejores decisiones. Aprendí a tener una mejor actitud con la vida, ser más alegre, a confiar más y no dejarme caer tan fácilmente.\n\nchersky6.jpg\n\n> Otro ser vivo con quien se comparte tanto se convierte en parte de nosotros mismos, si un día la memoria nos fallaría lo que compartimos con ese ser nos ha influenciado tanto que ya es parte de nosotros.\n\nEstoy agradecido de haber compartido tanto con la Chersky y espero que esta reseña te sirva para valorar y disfrutar más a tus mascotas y otros seres cercanos a ti :)\n\n', ['reseña', 'naturaleza', 'misceláneo'])

]]>