<?xml version="1.0" encoding="UTF-8" standalone="no"?><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:media="http://search.yahoo.com/mrss/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" version="2.0">

<channel>
	<title>Jhosman.com</title>
	<atom:link href="http://jhosman.com/feed/" rel="self" type="application/rss+xml"/>
	<link>https://jhosman.com</link>
	<description>Website con noticias y tips tecnológicos que seguro te serviran, sigueme!</description>
	<lastBuildDate>Fri, 24 Jan 2025 17:26:56 +0000</lastBuildDate>
	<language>es</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.8.1</generator>

<image>
	<url>https://i0.wp.com/jhosman.com/wp-content/uploads/2016/06/cropped-icono.png?fit=32%2C32&amp;ssl=1</url>
	<title>Jhosman Lizarazo</title>
	<link>https://jhosman.com</link>
	<width>32</width>
	<height>32</height>
</image> 
<site xmlns="com-wordpress:feed-additions:1">104727514</site>	<itunes:explicit>no</itunes:explicit><itunes:subtitle>Sysadmin y web developer!</itunes:subtitle><item>
		<title>Los sueños sí se cumplen!</title>
		<link>https://jhosman.com/c71-sobre-jhosman/c29-my-live/los-suenos-si-se-cumplen/</link>
					<comments>https://jhosman.com/c71-sobre-jhosman/c29-my-live/los-suenos-si-se-cumplen/#respond</comments>
		
		<dc:creator><![CDATA[Jhosman]]></dc:creator>
		<pubDate>Tue, 31 Dec 2024 02:52:39 +0000</pubDate>
				<category><![CDATA[Mi vida]]></category>
		<guid isPermaLink="false">https://jhosman.com/?p=1105</guid>

					<description><![CDATA[Siempre he tenido la convicción de poder servir, brindar y ayudar a los demás y la vida se ha encargado de poderme brindar todo lo que he necesitado, afortunadamente la vida siempre me ha compartido y rodeado de excelentes personas que han estado siempre disponibles en compartir este mismo sentimiento y relación con los demás. [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>Siempre he tenido la convicción de poder servir, brindar y ayudar a los demás y la vida se ha encargado de poderme brindar todo lo que he necesitado, afortunadamente la vida siempre me ha compartido y rodeado de excelentes personas que han estado siempre disponibles en compartir este mismo sentimiento y relación con los demás. <em>Soy un hombre exitoso, amoroso y libre.</em></p>



<p>Desde hace aproximadamente 6 años tenía la idea de poder brindar algún tipo de alimento a habitantes de calle en Navidad, en ese entonces me imaginaba cerca de la <a href="https://maps.app.goo.gl/zWc6M21dpHkB7M99A" target="_blank" rel="noreferrer noopener">calle 13 con carrera 10</a> en Bogotá pudiendo compartir con estas personas un vaso de agua de panela caliente con un pan, como eran mis desayunos hace muchos años. Celebrar la llegada de media noche de este modo, muy lejos de casa, compartiendo con desconocidos alegría y felicidad con una bebida caliente. </p>



<p>Sin embargo, nunca tuve la iniciativa, valentía o decisión de hacerlo realidad, por disponibilidad de tiempo, excusas, miedo o la simple decisión de no hacerlo manteniéndome en la zona de confort en la que siempre había estado con este tema, siempre estuve en la misma pecera con el tema y nunca intenté tomar acción para que esto fuera posible. </p>



<p>No suelo ser una persona que suela compartir dinero con los habitantes de calle o personas que solicitan ayuda en el transporte público, negocios o lugares donde me pueda encontrar; sin embargo, ha ocurrido que cuando estoy comiendo algo y una de estas personas se acerca para pedir ayuda, he compartido de mis alimentos con ellos, ya que este tipo de sensación (hambre) es algo que es realmente genera desesperación, ansiedad, temor y en ocasiones hasta violencia. Las veces que he compartido mis alimentos con estas personas que piden ayuda se van con alegría o felicidad y una inmensa gratitud, y las personas con quienes he estado en ese momento comiendo transmiten desde su rostro una sensación de tranquilidad, compasión y alegría.</p>



<p>Es por esto que este año tomé la decisión de llevar mi vida a otro nivel más alto, con este sueño que había pospuesto desde años atrás, generando valor para nosotros, generando otra vista de la vida como suele ser comúnmente, que seguramente ayudará a llegar a niveles de prosperidad mucho más altos, para lo que me propuse trabajar en <strong>un sueño totalmente irracional</strong>, cuando tomé la determinación no tenía idea de como hacerlo, qué requería para alcanzarlo, y si iba a ser posible lograrlo. Solo tenía la convicción de alcanzar la meta propuesta, como lo he realizado en muchas otras cosas de mi vida, la tecnología me ha permitido poder cruzar muchas fronteras, tener cosas que nunca me había imaginado, que generan una mejor calidad de vida, así que bueno, sería otro reto más al cual generar frente para hacerlo posible.</p>



<figure class="wp-block-image size-large"><img data-recalc-dims="1" fetchpriority="high" decoding="async" width="896" height="1200" data-attachment-id="1111" data-permalink="https://jhosman.com/c71-sobre-jhosman/c29-my-live/los-suenos-si-se-cumplen/attachment/pic1/" data-orig-file="https://i0.wp.com/jhosman.com/wp-content/uploads/2024/12/pic1.png?fit=1200%2C1608&amp;ssl=1" data-orig-size="1200,1608" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="pic1" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/jhosman.com/wp-content/uploads/2024/12/pic1.png?fit=478%2C640&amp;ssl=1" data-large-file="https://i0.wp.com/jhosman.com/wp-content/uploads/2024/12/pic1.png?fit=896%2C1200&amp;ssl=1" src="https://i0.wp.com/jhosman.com/wp-content/uploads/2024/12/pic1.png?resize=896%2C1200&#038;ssl=1" alt="" class="wp-image-1111" srcset="https://i0.wp.com/jhosman.com/wp-content/uploads/2024/12/pic1.png?resize=896%2C1200&amp;ssl=1 896w, https://i0.wp.com/jhosman.com/wp-content/uploads/2024/12/pic1.png?resize=478%2C640&amp;ssl=1 478w, https://i0.wp.com/jhosman.com/wp-content/uploads/2024/12/pic1.png?resize=768%2C1029&amp;ssl=1 768w, https://i0.wp.com/jhosman.com/wp-content/uploads/2024/12/pic1.png?resize=1146%2C1536&amp;ssl=1 1146w, https://i0.wp.com/jhosman.com/wp-content/uploads/2024/12/pic1.png?w=1200&amp;ssl=1 1200w" sizes="(max-width: 896px) 100vw, 896px" /></figure>



<p>Afortunadamente, la vida me ha llenado siempre de personas maravillosas, grupos, nichos y empresas que siempre han creído en mí y mis iniciativas (hasta a ciegas podría decirlo), el reto inicial se planteó para poder impactar <strong>100 personas</strong>, y sabía en ese momento que por la confianza, respeto y  cercanía de algún modo podrían hacer que este sueño e iniciativa fuera posible, para esto gestioné todo lo que fue requerido y necesario, para poder hacer esto posible. Aquí fue donde mi sentido de hacerlo posible y aterrizar la idea como objetivo era: Brindar a todas las personas a impactar <em>un desayuno como si fuera para mí</em>, para esto se gestionaron todos los recursos necesarios para comprar los elementos para generar la entrega de:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<ul class="wp-block-list">
<li>Chocolate de 12 Onzas clavos clavos y canela</li>



<li>Pan árabe con finas hiervas</li>



<li>Tamal super especial</li>
</ul>
</blockquote>



<p><em>Este desayuno no tiene nada que envidiarle a los que puedan ofrecer en los restaurantes más exclusivos, lujosos y costosos de la ciudad en las cadenas de restaurantes más exigentes. Cuando el sol comienza a desperezarse, se despliega un chocolate espumoso, con aroma a clavos y canela caliente, se convierte en el protagonista de este festín. Su textura suave y su sabor profundo, evocan recuerdos de días pasados, de momentos compartidos en torno a la mesa familiar. Cada sorbo es un abrazo cálido que despierta los sentidos y envuelve el espíritu en una danza de sabores. Acompañando esta delicia, un compañero fiel que nunca puede faltar. Su tamaño generoso invita a ser tomado con ambas manos, mientras que para adornar su sabor incluye hiervas que susurran secretos de la tierra. Su consumo es un ritual; al romperlo, se libera un aroma que evoca mercados lejanos y encuentros con culturas diversas. Este pan no es solo alimento; es un puente que conecta historias y tradiciones, un símbolo de unión y hospitalidad. Y en el centro de esta celebración matutina, se encuentra el mejor tamal, una joya culinaria que lleva consigo la esencia del tolima. Cada bocado es un viaje a través de paisajes vibrantes y sonrisas sinceras. La masa suave y el relleno sabroso se entrelazan en una sinfonía de texturas y sabores, recordándonos la riqueza de nuestras raíces y la importancia de celebrar lo cotidiano, acompañado de una pieza completa de pollo y el toque especial de pimienta para darle el picor exacto. Este desayuno es más que una simple comida; es una experiencia sensorial que despierta los sentidos y alimenta el alma. En cada elemento hay una historia por contar, una conexión profunda con la tierra y con quienes nos rodean. Así, mientras se disfruta de este festín matutino, me doy cuenta de que cada sabor es un verso en un poema sin fin, donde la comida se convierte en arte y la mesa en un escenario donde la vida se celebra con alegría y gratitud.</em></p>



<figure data-carousel-extra='{"blog_id":1,"permalink":"https:\/\/jhosman.com\/c71-sobre-jhosman\/c29-my-live\/los-suenos-si-se-cumplen\/"}'  class="wp-block-gallery has-nested-images columns-1 is-cropped wp-block-gallery-1 is-layout-flex wp-block-gallery-is-layout-flex">
<figure class="wp-block-image size-large"><img data-recalc-dims="1" decoding="async" width="817" height="1200" data-attachment-id="1114" data-permalink="https://jhosman.com/c71-sobre-jhosman/c29-my-live/los-suenos-si-se-cumplen/attachment/pic5/" data-orig-file="https://i0.wp.com/jhosman.com/wp-content/uploads/2024/12/pic5.png?fit=1742%2C2560&amp;ssl=1" data-orig-size="1742,2560" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="pic5" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/jhosman.com/wp-content/uploads/2024/12/pic5.png?fit=436%2C640&amp;ssl=1" data-large-file="https://i0.wp.com/jhosman.com/wp-content/uploads/2024/12/pic5.png?fit=817%2C1200&amp;ssl=1" data-id="1114" src="https://i0.wp.com/jhosman.com/wp-content/uploads/2024/12/pic5.png?resize=817%2C1200&#038;ssl=1" alt="" class="wp-image-1114" srcset="https://i0.wp.com/jhosman.com/wp-content/uploads/2024/12/pic5.png?resize=817%2C1200&amp;ssl=1 817w, https://i0.wp.com/jhosman.com/wp-content/uploads/2024/12/pic5.png?resize=436%2C640&amp;ssl=1 436w, https://i0.wp.com/jhosman.com/wp-content/uploads/2024/12/pic5.png?resize=768%2C1129&amp;ssl=1 768w, https://i0.wp.com/jhosman.com/wp-content/uploads/2024/12/pic5.png?resize=1045%2C1536&amp;ssl=1 1045w, https://i0.wp.com/jhosman.com/wp-content/uploads/2024/12/pic5.png?resize=1394%2C2048&amp;ssl=1 1394w, https://i0.wp.com/jhosman.com/wp-content/uploads/2024/12/pic5.png?w=1742&amp;ssl=1 1742w" sizes="(max-width: 817px) 100vw, 817px" /></figure>



<figure class="wp-block-image size-large is-style-default"><img data-recalc-dims="1" decoding="async" width="1200" height="1200" data-attachment-id="1113" data-permalink="https://jhosman.com/c71-sobre-jhosman/c29-my-live/los-suenos-si-se-cumplen/attachment/pic6/" data-orig-file="https://i0.wp.com/jhosman.com/wp-content/uploads/2024/12/pic6.png?fit=1280%2C1280&amp;ssl=1" data-orig-size="1280,1280" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="pic6" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/jhosman.com/wp-content/uploads/2024/12/pic6.png?fit=640%2C640&amp;ssl=1" data-large-file="https://i0.wp.com/jhosman.com/wp-content/uploads/2024/12/pic6.png?fit=1200%2C1200&amp;ssl=1" data-id="1113" src="https://i0.wp.com/jhosman.com/wp-content/uploads/2024/12/pic6.png?resize=1200%2C1200&#038;ssl=1" alt="" class="wp-image-1113" srcset="https://i0.wp.com/jhosman.com/wp-content/uploads/2024/12/pic6.png?resize=1200%2C1200&amp;ssl=1 1200w, https://i0.wp.com/jhosman.com/wp-content/uploads/2024/12/pic6.png?resize=640%2C640&amp;ssl=1 640w, https://i0.wp.com/jhosman.com/wp-content/uploads/2024/12/pic6.png?resize=160%2C160&amp;ssl=1 160w, https://i0.wp.com/jhosman.com/wp-content/uploads/2024/12/pic6.png?resize=768%2C768&amp;ssl=1 768w, https://i0.wp.com/jhosman.com/wp-content/uploads/2024/12/pic6.png?resize=65%2C65&amp;ssl=1 65w, https://i0.wp.com/jhosman.com/wp-content/uploads/2024/12/pic6.png?w=1280&amp;ssl=1 1280w" sizes="(max-width: 1200px) 100vw, 1200px" /></figure>
</figure>



<p>Un desayuno con el que con solo verlo se te haría agua la boca con el que seguramente esperarías el siguiente alimento ya en la noche, así que se realizaron todas las gestiones necesarias para hacerlo realidad y se eligió el día <strong>22 de Diciembre de 2024</strong> para buscar en el centro de la ciudad a los habitantes de calle que seguramente no han tenido la oportunidad de haber podido saciar la sensación de hambre desde no se sabe cuantas horas o días atrás ni haber podido probar tremendo manjar, se conoce que muchas de estas personas para poder sobrevivir han tenido que incluso buscar sobras de alimentos en la basura o de muy baja calidad. Así que íbamos a cambiar esta situación para estas personas en este día.</p>



<p>Como buen colombiano, ingeniero industrial y característica de análisis que tengo, hice las gestiones necesarias para hacer alcanzar los recursos, para poder cubrir 20 alimentos más, para con esto poder llegar más allá del objetivo propuesto es decir se entregarían <strong>120 desayunos</strong>, en este momento nació otra gran alegría y era poder cubrir una mayor cantidad de bocas para su desayuno en este día. Para esto obtuve el apoyo de personas muy cercanas a mi círculo de vida, a quienes realmente estoy totalmente agradecido, quienes hicieron todo lo necesario y posible a su alcance para hacer esto realidad, de todo este grupo de personas recibimos todo el apoyo y amor disponible.</p>



<ol class="wp-block-list">
<li>Angie Lizarazo</li>



<li>Denis López</li>



<li>Johana Bautista</li>



<li>Carlos Lizarazo</li>



<li>Alejandrina Mora</li>



<li>Mauricio Grizales</li>



<li>Kirsch Cobric</li>



<li>Andrea Páez</li>



<li>Julián Mora&nbsp;</li>



<li>Jacqueline&nbsp;Velasquez</li>



<li>Diego Mariño </li>



<li>Wilson Piedrahíta</li>



<li>Arianna Almenar</li>



<li>Ana Oviedo</li>



<li>Eliana Rodríguez</li>



<li>Sofía Rodríguez</li>



<li>Andrea Cortés</li>



<li>Lluvia Pinzón</li>
</ol>



<figure data-carousel-extra='{"blog_id":1,"permalink":"https:\/\/jhosman.com\/c71-sobre-jhosman\/c29-my-live\/los-suenos-si-se-cumplen\/"}'  class="wp-block-gallery has-nested-images columns-1 is-cropped wp-block-gallery-2 is-layout-flex wp-block-gallery-is-layout-flex">
<figure class="wp-block-image size-full"><img data-recalc-dims="1" loading="lazy" decoding="async" width="1290" height="587" data-attachment-id="1120" data-permalink="https://jhosman.com/c71-sobre-jhosman/c29-my-live/los-suenos-si-se-cumplen/attachment/pic4/" data-orig-file="https://i0.wp.com/jhosman.com/wp-content/uploads/2024/12/pic4.png?fit=2560%2C1164&amp;ssl=1" data-orig-size="2560,1164" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="pic4" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/jhosman.com/wp-content/uploads/2024/12/pic4.png?fit=640%2C291&amp;ssl=1" data-large-file="https://i0.wp.com/jhosman.com/wp-content/uploads/2024/12/pic4.png?fit=1200%2C546&amp;ssl=1" data-id="1120" src="https://i0.wp.com/jhosman.com/wp-content/uploads/2024/12/pic4.png?resize=1290%2C587&#038;ssl=1" alt="" class="wp-image-1120" srcset="https://i0.wp.com/jhosman.com/wp-content/uploads/2024/12/pic4.png?w=2560&amp;ssl=1 2560w, https://i0.wp.com/jhosman.com/wp-content/uploads/2024/12/pic4.png?resize=640%2C291&amp;ssl=1 640w, https://i0.wp.com/jhosman.com/wp-content/uploads/2024/12/pic4.png?resize=1200%2C546&amp;ssl=1 1200w, https://i0.wp.com/jhosman.com/wp-content/uploads/2024/12/pic4.png?resize=768%2C349&amp;ssl=1 768w, https://i0.wp.com/jhosman.com/wp-content/uploads/2024/12/pic4.png?resize=1536%2C698&amp;ssl=1 1536w, https://i0.wp.com/jhosman.com/wp-content/uploads/2024/12/pic4.png?resize=2048%2C931&amp;ssl=1 2048w" sizes="auto, (max-width: 1290px) 100vw, 1290px" /></figure>



<figure class="wp-block-image size-full"><img data-recalc-dims="1" loading="lazy" decoding="async" width="947" height="909" data-attachment-id="1112" data-permalink="https://jhosman.com/c71-sobre-jhosman/c29-my-live/los-suenos-si-se-cumplen/attachment/pic2/" data-orig-file="https://i0.wp.com/jhosman.com/wp-content/uploads/2024/12/pic2.png?fit=947%2C909&amp;ssl=1" data-orig-size="947,909" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="pic2" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/jhosman.com/wp-content/uploads/2024/12/pic2.png?fit=640%2C614&amp;ssl=1" data-large-file="https://i0.wp.com/jhosman.com/wp-content/uploads/2024/12/pic2.png?fit=947%2C909&amp;ssl=1" data-id="1112" src="https://i0.wp.com/jhosman.com/wp-content/uploads/2024/12/pic2.png?resize=947%2C909&#038;ssl=1" alt="" class="wp-image-1112" srcset="https://i0.wp.com/jhosman.com/wp-content/uploads/2024/12/pic2.png?w=947&amp;ssl=1 947w, https://i0.wp.com/jhosman.com/wp-content/uploads/2024/12/pic2.png?resize=640%2C614&amp;ssl=1 640w, https://i0.wp.com/jhosman.com/wp-content/uploads/2024/12/pic2.png?resize=768%2C737&amp;ssl=1 768w" sizes="auto, (max-width: 947px) 100vw, 947px" /></figure>
</figure>



<p>Quise compartir con estas personas la posibilidad de tener esta experiencia y que la vivieran totalmente, ya que seguramente se les pasó por algún momento de la cabeza hacerlo posible, y no tenían los medios para hacerlo o haber planeado de alguna manera hacerlo realidad. La verdad solo esperaba contar con 10 personas, pero aquí se refleja la abundancia, llegó mucho mas apoyo del que esperaba. </p>



<p class="has-text-align-center has-palette-color-6-color has-palette-color-1-background-color has-text-color has-background has-link-color wp-elements-d5460214ebd1d9b13097c5ff8243d063"><strong>Cuando lo entregas todo, los sueños se hacen realidad</strong> 😊</p>



<p>Finalmente el día había llegado, la ansiedad y felicidad no me daba, ya que sabía que en contadas horas todo debía ya materializarse, desde las 4AM del día 22 de diciembre de 2024 se iniciaron las tareas de alistamiento, empaque y desplazamiento hacia el centro de la ciudad, allí nos encontramos con las personas que quisieron brindar de su tiempo, disponibilidad y amor para compartir con estas personas y simplemente dejamos que todo pasara, se realizó la entrega de estos SUPER DESAYUNOS donde en respuesta de las personas a quienes se les brindó los alimentos recibimos de ellas:</p>



<ul class="wp-block-list">
<li>Agradecimientos infinitos</li>



<li>Sonrisas</li>



<li>Oraciones </li>



<li>Historias</li>



<li>Gratitud</li>



<li>Sinceridad</li>



<li>Cariño</li>
</ul>



<p>Estuvimos realizando la entrega iniciando en el sector de <a href="https://maps.app.goo.gl/SgwStACFKfoPh7idA" target="_blank" rel="noreferrer noopener">Las aguas</a>, sin embargo, conforme transcurría el tiempo, los habitantes de calle desaparecían, ya que estos eran movidos por las personas de seguridad o policía hacia la carrera 10 o la carrera 14, porque esta normalmente es una zona de turismo (y más un domingo) y no permitían que siguieran allí, evaluamos la decisión, pero ir a esta otra zona podría ser complicado, por lo que tomamos la determinación de desplazarnos luego hacia la <a href="https://maps.app.goo.gl/4cHWckztb72D88maA" target="_blank" rel="noreferrer noopener">Plaza de Bolívar</a>, donde normalmente suelen verse personas en esta situación, y nos encontramos con la sorpresa de que tampoco estaban por allí, encontramos muy pocas personas, aquí entró un poco la incertidumbre de poder saber qué ocurría con ellos y conocer donde podrían estar concentrados.</p>



<figure class="wp-block-image size-large"><img data-recalc-dims="1" loading="lazy" decoding="async" width="900" height="1200" data-attachment-id="1115" data-permalink="https://jhosman.com/c71-sobre-jhosman/c29-my-live/los-suenos-si-se-cumplen/attachment/pic8/" data-orig-file="https://i0.wp.com/jhosman.com/wp-content/uploads/2024/12/pic8.png?fit=1200%2C1600&amp;ssl=1" data-orig-size="1200,1600" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="pic8" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/jhosman.com/wp-content/uploads/2024/12/pic8.png?fit=480%2C640&amp;ssl=1" data-large-file="https://i0.wp.com/jhosman.com/wp-content/uploads/2024/12/pic8.png?fit=900%2C1200&amp;ssl=1" src="https://i0.wp.com/jhosman.com/wp-content/uploads/2024/12/pic8.png?resize=900%2C1200&#038;ssl=1" alt="" class="wp-image-1115" srcset="https://i0.wp.com/jhosman.com/wp-content/uploads/2024/12/pic8.png?resize=900%2C1200&amp;ssl=1 900w, https://i0.wp.com/jhosman.com/wp-content/uploads/2024/12/pic8.png?resize=480%2C640&amp;ssl=1 480w, https://i0.wp.com/jhosman.com/wp-content/uploads/2024/12/pic8.png?resize=768%2C1024&amp;ssl=1 768w, https://i0.wp.com/jhosman.com/wp-content/uploads/2024/12/pic8.png?resize=1152%2C1536&amp;ssl=1 1152w, https://i0.wp.com/jhosman.com/wp-content/uploads/2024/12/pic8.png?w=1200&amp;ssl=1 1200w" sizes="auto, (max-width: 900px) 100vw, 900px" /></figure>



<p>Así que tomamos un nuevo rumbo y nos desplazamos posteriormente hacia el sector del <a href="https://maps.app.goo.gl/LFM7vt57Na19PkBZ8" target="_blank" rel="noreferrer noopener">Bronx Distrito Creativo</a> o la <a href="https://maps.app.goo.gl/dixVmTxfL7Rvrfj39" target="_blank" rel="noreferrer noopener">Iglesia el Voto Nacional</a> esta zona fue la más dura de toda, encontramos personas durmiendo entre bolsas de basura (ellas dentro, para protegerse del frío, viento y lluvia), otras entre chasis de vehículos abandonados, o simplemente acostadas en el piso en forma de caracol o en posición fetal. También tuvimos acercamientos en la <a href="https://maps.app.goo.gl/Jn4JW8ENtnGWyk1e6" target="_blank" rel="noreferrer noopener">Plaza España,</a> el plan de distribución se realizó en cuatro grupos donde cada uno llevaba alimentos para hasta 5 personas, donde se les entregó a cada persona su desayuno con el objetivo de realizar la mínima utilización de elementos plásticos.</p>



<figure class="wp-block-image size-large"><img data-recalc-dims="1" loading="lazy" decoding="async" width="900" height="1200" data-attachment-id="1116" data-permalink="https://jhosman.com/c71-sobre-jhosman/c29-my-live/los-suenos-si-se-cumplen/attachment/pic7/" data-orig-file="https://i0.wp.com/jhosman.com/wp-content/uploads/2024/12/Pic7.png?fit=1200%2C1600&amp;ssl=1" data-orig-size="1200,1600" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="Pic7" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/jhosman.com/wp-content/uploads/2024/12/Pic7.png?fit=480%2C640&amp;ssl=1" data-large-file="https://i0.wp.com/jhosman.com/wp-content/uploads/2024/12/Pic7.png?fit=900%2C1200&amp;ssl=1" src="https://i0.wp.com/jhosman.com/wp-content/uploads/2024/12/Pic7.png?resize=900%2C1200&#038;ssl=1" alt="" class="wp-image-1116" srcset="https://i0.wp.com/jhosman.com/wp-content/uploads/2024/12/Pic7.png?resize=900%2C1200&amp;ssl=1 900w, https://i0.wp.com/jhosman.com/wp-content/uploads/2024/12/Pic7.png?resize=480%2C640&amp;ssl=1 480w, https://i0.wp.com/jhosman.com/wp-content/uploads/2024/12/Pic7.png?resize=768%2C1024&amp;ssl=1 768w, https://i0.wp.com/jhosman.com/wp-content/uploads/2024/12/Pic7.png?resize=1152%2C1536&amp;ssl=1 1152w, https://i0.wp.com/jhosman.com/wp-content/uploads/2024/12/Pic7.png?w=1200&amp;ssl=1 1200w" sizes="auto, (max-width: 900px) 100vw, 900px" /></figure>



<p>Estos son algunos de los mensajes que ha dejado la actividad entre quienes participaron.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>Me lleno saber lo agradecidos que son los habitantes de calle con este tipo de actividades y que aunque ya hayan comido, prefieren darle la oportunidad a otros, incluso llamándoles para que asistan.</p>



<p>Saber que aunque en sus condiciones menos favorables se ayudan y apoyan entre ellos.</p>
<cite>Ana Oviedo</cite></blockquote>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>Me llena saber que podemos servir a los demás, y poder dar un poquito de alegría a las personas que lo necesita, hacemos esto de corazón porque es mejor dar que recibir.</p>



<p>La alegría de sus rostros y el agradecimiento llenan mi corazón de satisfacción y me ayudan a ser mejor persona, y ver qué si queremos podemos ser empáticos con aquellos que no tienen nada.</p>
<cite>Andrea Páez</cite></blockquote>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>Como sociedad tenemos muy olvidados a los habitantes de calle. Se necesitan más iniciativas como la de Jhosman, para llevarles comida y una sonrisa</p>
<cite>Diego Mariño</cite></blockquote>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>Los habitantes de calle son personas muy honestas, fue una actividad bonita y me llenó bastante el corazón poder ir a llevarles desayunos.</p>
<cite>Arianna Almenar</cite></blockquote>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>El impacto social al ver como un tamal podría llegar a ser el lujo más grande para alguien teniendo en cuenta que yo puedo acceder a un tamal en cualquier momento y pues eso duele un poco saber eso.<br>Me llenó haber visto esas caras esas gracias y esos gestos de felicidad en un persona que vive en una lucha pensada día tras día</p>
<cite>Julian Mora</cite></blockquote>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>Me pareció muy bonita la experiencia, es muy gratificante este tipo de actividades, se siente muy bien poderle dar a estas personas poderles brindar algo que para nosotros es muy normal, para ellos no es muy fácil de conseguir.</p>
<cite>Joana Bautista</cite></blockquote>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>Fue una actividad de solidaridad y de compartir, esto es muy en riquedecor, recordar que no todos tenemos las mismas pruebas en la vida y con esto nos damos cuenta que no por eso alguie deja ser menos que otros, hay retos que otros, y hay circunstnacias que son mas exigentes, admiro a todas esas personas que aún siguen de pie a pesar de todas las adversidades sin juzar la manera en la que lo haga, pienso que la experiencia humana es diferntes para todos, en la manera que cada quien tiene sus propios propósitos, a veces pienso que las personas que están en situación de calle, se han puesto propósitos muy grandes, por que no debe ser muy fácil en esta situación, y por esto no los siento menos que los demás, espero puedan resolver si situación.</p>
<cite>Krisch Cobric </cite></blockquote>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>Varias de las personas a quienes se les entregó el desayuno me dijeron «Este es el mejor desayuno que me he comido en mucho tiempo, muchas gracias, está super delicioso» en realidad la sensación de poder haber hecho realidad este sueño y al haber terminado escuchar «lo lograste» acompañado por aplausos y abrazos la verdad no tiene precio, para mi es muy gratificante haber tenido el apoyo de todas y cada una de las personas que estuvieron ahí con el compromiso, dedicación y amor, por permitirse salir de su zona de confort y vivir esta experiencia. Lo que quería compartir con todos era justamente un desayuno como yo me lo esperaría cualquier día del año, el mejor desayuno del mundo.</p>
<cite>Jhosman Lizarazo</cite></blockquote>



<figure class="wp-block-image size-large"><img data-recalc-dims="1" loading="lazy" decoding="async" width="900" height="1200" data-attachment-id="1118" data-permalink="https://jhosman.com/c71-sobre-jhosman/c29-my-live/los-suenos-si-se-cumplen/attachment/pic9/" data-orig-file="https://i0.wp.com/jhosman.com/wp-content/uploads/2024/12/pic9.png?fit=1200%2C1600&amp;ssl=1" data-orig-size="1200,1600" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="pic9" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/jhosman.com/wp-content/uploads/2024/12/pic9.png?fit=480%2C640&amp;ssl=1" data-large-file="https://i0.wp.com/jhosman.com/wp-content/uploads/2024/12/pic9.png?fit=900%2C1200&amp;ssl=1" src="https://i0.wp.com/jhosman.com/wp-content/uploads/2024/12/pic9.png?resize=900%2C1200&#038;ssl=1" alt="" class="wp-image-1118" srcset="https://i0.wp.com/jhosman.com/wp-content/uploads/2024/12/pic9.png?resize=900%2C1200&amp;ssl=1 900w, https://i0.wp.com/jhosman.com/wp-content/uploads/2024/12/pic9.png?resize=480%2C640&amp;ssl=1 480w, https://i0.wp.com/jhosman.com/wp-content/uploads/2024/12/pic9.png?resize=768%2C1024&amp;ssl=1 768w, https://i0.wp.com/jhosman.com/wp-content/uploads/2024/12/pic9.png?resize=1152%2C1536&amp;ssl=1 1152w, https://i0.wp.com/jhosman.com/wp-content/uploads/2024/12/pic9.png?w=1200&amp;ssl=1 1200w" sizes="auto, (max-width: 900px) 100vw, 900px" /></figure>



<p>Al finalizar toda la actividad, algunas de las personas por sus actividades diarias o planeadas tuvieron que retirarse del grupo; sin embargo, esto no quitó valor ni compromiso, a quienes agradezco enormemente por su disponibilidad y disposición, quienes a pesar de tener compromisos ya planeados para este día pudieron brindar algo de su tiempo para hacer este sueño realidad, tengo total gratitud con las personas que pudieron estar en esta actividad que no tenía otra finalidad que ¡cumplir sueños! estoy convencido que esta vivencia hará que quienes apoyaron y ayudaron a que todo esto hubiera sido posible llevarán su vida pronto a otro nivel mas alto.</p>



<figure class="wp-block-image size-large"><img data-recalc-dims="1" loading="lazy" decoding="async" width="1200" height="1197" data-attachment-id="1117" data-permalink="https://jhosman.com/c71-sobre-jhosman/c29-my-live/los-suenos-si-se-cumplen/attachment/pic3/" data-orig-file="https://i0.wp.com/jhosman.com/wp-content/uploads/2024/12/pic3.png?fit=1364%2C1361&amp;ssl=1" data-orig-size="1364,1361" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="pic3" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/jhosman.com/wp-content/uploads/2024/12/pic3.png?fit=640%2C640&amp;ssl=1" data-large-file="https://i0.wp.com/jhosman.com/wp-content/uploads/2024/12/pic3.png?fit=1200%2C1197&amp;ssl=1" src="https://i0.wp.com/jhosman.com/wp-content/uploads/2024/12/pic3.png?resize=1200%2C1197&#038;ssl=1" alt="" class="wp-image-1117" srcset="https://i0.wp.com/jhosman.com/wp-content/uploads/2024/12/pic3.png?resize=1200%2C1197&amp;ssl=1 1200w, https://i0.wp.com/jhosman.com/wp-content/uploads/2024/12/pic3.png?resize=160%2C160&amp;ssl=1 160w, https://i0.wp.com/jhosman.com/wp-content/uploads/2024/12/pic3.png?resize=768%2C766&amp;ssl=1 768w, https://i0.wp.com/jhosman.com/wp-content/uploads/2024/12/pic3.png?resize=65%2C65&amp;ssl=1 65w, https://i0.wp.com/jhosman.com/wp-content/uploads/2024/12/pic3.png?w=1364&amp;ssl=1 1364w" sizes="auto, (max-width: 1200px) 100vw, 1200px" /></figure>



<p>Varios me preguntaban: pero y como hizo, de donde salió el dinero, los recursos, alguien lo donó o todo esto salió de su bolsillo, la respuesta es simple: <em><span style="text-decoration: underline;">Si los sueños se quieren cumplir solo se hacen realidad, no importa qué, solo debes hacerlo posible sin importar las adversidades, ni cuanto cueste, ni todas las maromas que se deben realizar para hacerlo realidad. 💫</span></em></p>



<p>Ya finalizando el medio día nos quedaba la última unidad y decidimos estar de regreso hacia casa con la ilusión de que seguramente encontraríamos a otra persona en la misma situación de calle en el camino, y lo encontramos a la altura de la <a href="https://maps.app.goo.gl/wACDua3ZC5PhpRKc6" target="_blank" rel="noreferrer noopener">Calle 26 con Carrera 19</a> donde se realizó la última entrega la persona quedó tan agradecida y no sé si fue la manera en como conectaron los planetas, las estrellas y la energía de todo lo realizado que en modo de agradecimiento me obsequío esta pieza, que de ahora en adelante representa para mi <strong>gratitud y prosperidad</strong> en la vida, y dedico esta pieza a <span style="text-decoration: underline;">todas las personas</span> que hicieron realidad este sueño.</p>



<figure class="wp-block-image aligncenter size-large"><img data-recalc-dims="1" loading="lazy" decoding="async" width="952" height="1200" data-attachment-id="1164" data-permalink="https://jhosman.com/c71-sobre-jhosman/c29-my-live/los-suenos-si-se-cumplen/attachment/2024-12-30-21-50-28/" data-orig-file="https://i0.wp.com/jhosman.com/wp-content/uploads/2024/12/2024-12-30-21.50.28.jpg?fit=1024%2C1291&amp;ssl=1" data-orig-size="1024,1291" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="2024-12-30 21.50.28" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/jhosman.com/wp-content/uploads/2024/12/2024-12-30-21.50.28.jpg?fit=508%2C640&amp;ssl=1" data-large-file="https://i0.wp.com/jhosman.com/wp-content/uploads/2024/12/2024-12-30-21.50.28.jpg?fit=952%2C1200&amp;ssl=1" src="https://i0.wp.com/jhosman.com/wp-content/uploads/2024/12/2024-12-30-21.50.28.jpg?resize=952%2C1200&#038;ssl=1" alt="" class="wp-image-1164" srcset="https://i0.wp.com/jhosman.com/wp-content/uploads/2024/12/2024-12-30-21.50.28.jpg?resize=952%2C1200&amp;ssl=1 952w, https://i0.wp.com/jhosman.com/wp-content/uploads/2024/12/2024-12-30-21.50.28.jpg?resize=508%2C640&amp;ssl=1 508w, https://i0.wp.com/jhosman.com/wp-content/uploads/2024/12/2024-12-30-21.50.28.jpg?resize=768%2C968&amp;ssl=1 768w, https://i0.wp.com/jhosman.com/wp-content/uploads/2024/12/2024-12-30-21.50.28.jpg?w=1024&amp;ssl=1 1024w" sizes="auto, (max-width: 952px) 100vw, 952px" /></figure>



<p class="has-text-align-center has-large-font-size"><strong>Y no me queda nada mas que decir gracias!</strong></p>



<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe loading="lazy" title="Gratitud por el tiempo vivido, por la memoria y también por el olvido." width="1290" height="726" src="https://www.youtube.com/embed/9JZbreJXS0I?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
</div></figure>
]]></content:encoded>
					
					<wfw:commentRss>https://jhosman.com/c71-sobre-jhosman/c29-my-live/los-suenos-si-se-cumplen/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<media:content medium="image" url="https://jhosman.com/wp-content/uploads/2024/12/posible.png"/>
            <post-id xmlns="com-wordpress:feed-additions:1">1105</post-id>	</item>
		<item>
		<title>Automatizar encendido y apagado de #ECS en #AWS</title>
		<link>https://jhosman.com/aws/automatizar-encendido-y-apagado-de-ecs/</link>
					<comments>https://jhosman.com/aws/automatizar-encendido-y-apagado-de-ecs/#respond</comments>
		
		<dc:creator><![CDATA[Jhosman]]></dc:creator>
		<pubDate>Thu, 05 Dec 2024 14:20:52 +0000</pubDate>
				<category><![CDATA[AWS]]></category>
		<category><![CDATA[DynamoDB]]></category>
		<category><![CDATA[ECS]]></category>
		<category><![CDATA[Lambda]]></category>
		<guid isPermaLink="false">https://jhosman.com/?p=1088</guid>

					<description><![CDATA[En el mundo de la computación en la nube, la eficiencia no es solo una cuestión técnica, sino también económica. Uno de los costos más comunes, pero evitables, proviene de mantener activos servicios que no están en uso durante ciertos periodos del día, por ejemplo en entornos de Desarrollo o Pruebas. ¿Por qué pagar por algo que no necesitas? Es aquí donde entra en juego la automatización del inicio y la detención de servicios ECS (Elastic Container Service), una práctica que optimiza tanto los recursos como el presupuesto.]]></description>
										<content:encoded><![CDATA[
<p>En el mundo de la computación en la nube, la eficiencia no es solo una cuestión técnica, sino también económica. Uno de los costos más comunes, pero evitables, proviene de mantener activos servicios que no están en uso durante ciertos periodos del día, por ejemplo en entornos de Desarrollo o Pruebas. ¿Por qué pagar por algo que no necesitas? Es aquí donde entra en juego la automatización del inicio y la detención de servicios <strong>ECS (Elastic Container Service),</strong> una práctica que optimiza tanto los recursos como el presupuesto.</p>



<p>La solución que he desarrollado con <strong>AWS CloudFormation</strong> tiene un propósito claro: simplificar la gestión de los servicios contenedores y garantizar que solo estén activos cuando realmente se necesita. Por ejemplo, si tienes servicios ECS que solo se usan durante horarios laborales, programar su detención fuera de ese periodo puede generar un impacto significativo en tu factura mensual. </p>



<p>Se ha integrado un registro histórico de los cambios en la configuración deseada de los servicios ECS en <strong>DynamoDB</strong>, esto con la finalidad de restaurar en el siguiente encendido la cantidad de tareas que tenía el contenedor previamente configurado. Adicionalmente estas funciones lambda evalúan si es festivo o no en COLOMBIA para validar si ejecuta o no el proceso, dependiendo de esto realizará o no la tarea de encendido (para ahorrarnos un día de consumo en los festivos).</p>



<p>Se debe tener en cuenta que aquí se utilizan varios componentes de AWS que puede que generen un <span style="text-decoration: underline;">mínimo consumo,</span> respecto a tener los contenedores siempre corriendo, generando un ahorro considerable:</p>



<ul class="wp-block-list">
<li>CloudWatch</li>



<li>DynamoDB</li>



<li>Lambda</li>
</ul>



<p>Para realizar el despliegue, debes subir el siguiente <strong>YAML </strong>como una plantilla de <strong>CloudFormation</strong>, ya sea dentro de la cuenta de <strong>AWS </strong>o como un <strong>StackSet </strong>dentro de la organización en las OUs correspondientes.</p>



<pre class="wp-block-code"><code>AWSTemplateFormatVersion: '2010-09-09'
Description: CloudFormation template to manage ECS services and DynamoDB with scheduled events

Resources:
  # Grupo de Logs para las Lambdas
  LogGroupStopECS:
    Type: AWS::Logs::LogGroup
    Properties:
      LogGroupName: /aws/lambda/StopECSFunction
      RetentionInDays: 7

  LogGroupStartECS:
    Type: AWS::Logs::LogGroup
    Properties:
      LogGroupName: /aws/lambda/StartECSFunction
      RetentionInDays: 7

  # Tabla DynamoDB
  ECSServiceDesiredCounts:
    Type: AWS::DynamoDB::Table
    Properties:
      TableName: ECSServiceDesiredCounts
      AttributeDefinitions:
        - AttributeName: ServiceClusterKey
          AttributeType: S
      KeySchema:
        - AttributeName: ServiceClusterKey
          KeyType: HASH
      BillingMode: PAY_PER_REQUEST

  # Rol para la Lambda de Apagado
  StopECSLambdaExecutionRole:
    Type: AWS::IAM::Role
    Properties:
      RoleName: StopECSLambdaExecutionRole
      AssumeRolePolicyDocument:
        Version: '2012-10-17'
        Statement:
          - Effect: Allow
            Principal:
              Service: lambda.amazonaws.com
            Action: sts:AssumeRole
      Policies:
        - PolicyName: StopECSPolicy
          PolicyDocument:
            Version: '2012-10-17'
            Statement:
              - Sid: LOGS
                Effect: Allow
                Action: logs:CreateLogGroup
                Resource: arn:aws:logs:*:*:* 
              - Sid: LOGS2
                Effect: Allow
                Action:
                  - logs:CreateLogStream
                  - logs:PutLogEvents
                Resource: arn:aws:logs:*:*:* 
              - Sid: ECS
                Effect: Allow
                Action:
                  - ecs:ListClusters
                  - ecs:ListServices
                  - ecs:UpdateService
                  - ecs:DescribeServices
                Resource: "*"
              - Sid: DYNAMODB
                Effect: Allow
                Action:
                  - dynamodb:GetItem
                  - dynamodb:PutItem
                Resource: "*"

  # Rol para la Lambda de Encendido  
  StartECSLambdaExecutionRole:
    Type: AWS::IAM::Role
    Properties:
      RoleName: StartECSLambdaExecutionRole
      AssumeRolePolicyDocument:
        Version: '2012-10-17'
        Statement:
          - Effect: Allow
            Principal:
              Service: lambda.amazonaws.com
            Action: sts:AssumeRole
      Policies:
        - PolicyName: StartECSPolicy
          PolicyDocument:
            Version: '2012-10-17'
            Statement:
              - Sid: LOGS
                Effect: Allow
                Action: logs:CreateLogGroup
                Resource: arn:aws:logs:*:*:* 
              - Sid: LOGS2
                Effect: Allow
                Action:
                  - logs:CreateLogStream 
                  - logs:PutLogEvents 
                Resource: arn:aws:logs:*:*:* 
              - Sid: ECS 
                Effect: Allow 
                Action:
                  - ecs:ListClusters 
                  - ecs:ListServices 
                  - ecs:UpdateService 
                  - ecs:DescribeServices 
                Resource: "*" 
              - Sid: DYNAMODB 
                Effect: Allow
                Action: dynamodb:GetItem
                Resource: "*"

  # Función Lambda para Apagar Servicios  
  StopECSFunction:
    Type: AWS::Lambda::Function
    Properties:
      FunctionName: StopECSFunction  
      Description: "Función Lambda para detener servicios ECS y almacenar el conteo deseado en DynamoDB"
      Handler: index.lambda_handler  
      Timeout: 60
      Role: !GetAtt &#91;StopECSLambdaExecutionRole, Arn]
      Runtime: python3.9
      Code:  
        ZipFile: |  
            import boto3
            import logging

            # Configuración del logger
            logger = logging.getLogger()
            logger.setLevel(logging.INFO)

            # Crea un manejador para enviar logs a CloudWatch
            ch = logging.StreamHandler()
            ch.setLevel(logging.INFO)
            formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
            ch.setFormatter(formatter)
            logger.addHandler(ch)

            # Inicializar recursos de AWS
            dynamodb = boto3.resource('dynamodb')
            ecs_client = boto3.client('ecs')

            # Nombre de la tabla DynamoDB
            DYNAMODB_TABLE_NAME = 'ECSServiceDesiredCounts'

            def get_desired_count(service_name, cluster_name):
                """Recupera el valor deseado del servicio desde DynamoDB usando ServiceClusterKey."""
                table = dynamodb.Table(DYNAMODB_TABLE_NAME)
                service_cluster_key = f"{service_name}:{cluster_name}"
                response = table.get_item(Key={'ServiceClusterKey': service_cluster_key})
                return response.get('Item', {}).get('DesiredCount', None)

            def set_desired_count(service_name, cluster_name, desired_count):
                """Almacena el valor deseado del servicio en DynamoDB usando ServiceClusterKey."""
                table = dynamodb.Table(DYNAMODB_TABLE_NAME)
                service_cluster_key = f"{service_name}:{cluster_name}"
                
                # Asegúrate de incluir DesiredCount en el ítem
                if desired_count is not None:
                    desired_count_int = int(desired_count)  # Asegúrate de que sea un int
                    table.put_item(Item={
                        'ServiceClusterKey': service_cluster_key,
                        'DesiredCount': desired_count_int  # Asegúrate de que este campo esté presente
                    })
                    logger.info(f"Se ha almacenado el desiredCount para {service_name} en {cluster_name}: {desired_count_int}")
                else:
                    logger.error(f"No se puede almacenar desiredCount porque es None para {service_name} en {cluster_name}.")

            def extract_service_name(service_arn):
                """Extrae el nombre del servicio del ARN."""
                return service_arn.split('/')&#91;-1]

            def extract_cluster_name(cluster_arn):
                """Extrae el nombre del clúster del ARN."""
                return cluster_arn.split(':')&#91;-1]

            def lambda_handler(event, context):
                logger.info("Iniciando la función Lambda para detener servicios en ECS.")
                
                try:
                    # Obtener la lista de clústeres
                    logger.info("Obteniendo la lista de clústeres.")
                    clusters_response = ecs_client.list_clusters()
                    clusters = clusters_response&#91;'clusterArns']
                    logger.info(f"Clusters encontrados: {&#91;extract_cluster_name(c) for c in clusters]}")
                except Exception as e:
                    logger.error(f"Error al obtener clústeres: {str(e)}")
                    return {
                        'statusCode': 500,
                        'body': f"Error al obtener clústeres: {str(e)}"
                    }

                servicios_detener = &#91;]
                servicios_no_detener = &#91;]

                # Iterar sobre cada clúster y detener los servicios
                for cluster in clusters:
                    cluster_name = extract_cluster_name(cluster)
                    try:
                        logger.info(f"Listando servicios en el clúster: {cluster_name}.")
                        services_response = ecs_client.list_services(cluster=cluster)
                        services = services_response&#91;'serviceArns']
                        logger.info(f"Servicios encontrados en el clúster {cluster_name}: {&#91;extract_service_name(s) for s in services]}")

                        # Detener cada servicio
                        for service_arn in services:
                            service_name = extract_service_name(service_arn)
                            
                            # Guardar el valor deseado actual antes de detenerlo
                            current_service_info = ecs_client.describe_services(cluster=cluster, services=&#91;service_arn])
                            current_desired_count = current_service_info&#91;'services']&#91;0]&#91;'desiredCount']
                            set_desired_count(service_name, cluster_name, current_desired_count)  # Almacena el valor actual
                            
                            try:
                                if current_desired_count == 0:
                                    logger.info(f"El servicio {service_name} ya está detenido en el clúster {cluster_name}.")
                                    continue
                                
                                logger.info(f"Deteniendo el servicio: {service_name}.")
                                ecs_client.update_service(cluster=cluster, service=service_arn, desiredCount=0)

                                # Verificar el estado del servicio después de la actualización
                                updated_service_after = ecs_client.describe_services(cluster=cluster, services=&#91;service_arn])
                                if updated_service_after&#91;'services']&#91;0]&#91;'desiredCount'] == 0:
                                    servicios_detener.append(service_name)
                                    logger.info(f"Servicio detenido correctamente: {service_name} en el clúster {cluster_name}.")
                                else:
                                    servicios_no_detener.append(service_name)
                                    logger.warning(f"El servicio {service_name} aún está activo en el clúster {cluster_name}.")

                            except Exception as e:
                                logger.error(f"Error al detener el servicio {service_name} en el clúster {cluster_name}: {str(e)}")
                                servicios_no_detener.append(service_name)

                    except Exception as e:
                        logger.error(f"Error al listar servicios en el clúster {cluster_name}: {str(e)}")

                if servicios_detener:
                    logger.info(f"Servicios detenidos correctamente: {servicios_detener}")
                if servicios_no_detener:
                    logger.warning(f"No se pudieron detener los siguientes servicios: {servicios_no_detener}")

                logger.info("Proceso de detención de servicios completado.")
                
                return {
                    'statusCode': 200,
                    'body': 'Proceso de detención de servicios completado.'
                }


  # Función Lambda para Encender Servicios  
  StartECSFunction:
    Type: AWS::Lambda::Function     
    Properties:
      FunctionName: StartECSFunction
      Description: "Función Lambda para encender servicios ECS con el conteo deseado almacenado en DynamoDB"      
      Handler: index.lambda_handler     
      Timeout: 60
      Role: !GetAtt &#91;StartECSLambdaExecutionRole, Arn]
      Runtime: python3.9
      Code: 
        ZipFile: | 
            import boto3
            import logging
            import urllib.request
            import json
            from datetime import datetime

            # Configuración del logger
            logger = logging.getLogger()
            logger.setLevel(logging.INFO)

            # Crea un manejador para enviar logs a CloudWatch
            ch = logging.StreamHandler()
            ch.setLevel(logging.INFO)
            formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
            ch.setFormatter(formatter)
            logger.addHandler(ch)

            # Inicializar recursos de AWS
            dynamodb = boto3.resource('dynamodb')
            ecs_client = boto3.client('ecs')

            # Nombre de la tabla DynamoDB
            DYNAMODB_TABLE_NAME = 'ECSServiceDesiredCounts'

            # Función para verificar si hoy es festivo
            def is_holiday():
                today = datetime.now().strftime('%Y-%m-%d')
                year = datetime.now().year
                
                # Nueva URL para consultar días festivos
                url = f"https://api.generadordni.es/v2/holidays/holidays?country=CO&amp;year={year}"
                
                logger.info(f"Consultando la URL: {url}")
                
                try:
                    with urllib.request.urlopen(url) as response:
                        data = response.read()
                        holidays = json.loads(data)
                    
                    # Verificar si la fecha actual está en la lista de días festivos
                    is_holiday = any(holiday&#91;'date'] == today for holiday in holidays)
                    return is_holiday
                except urllib.error.HTTPError as e:
                    error_message = f"HTTP Error {e.code}: {e.reason}. Response: {e.read().decode()}"
                    logger.error(f"Error al consultar los días festivos: {error_message}")
                    return False
                except Exception as e:
                    logger.error(f"Error desconocido al consultar los días festivos: {e}")
                    return False

            def get_desired_count(service_name, cluster_name):
                """Recupera el valor deseado del servicio desde DynamoDB usando ServiceClusterKey."""
                table = dynamodb.Table(DYNAMODB_TABLE_NAME)
                service_cluster_key = f"{service_name}:{cluster_name}"
                response = table.get_item(Key={'ServiceClusterKey': service_cluster_key})
                return response.get('Item', {}).get('DesiredCount', None)

            def extract_service_name(service_arn):
                """Extrae el nombre del servicio del ARN."""
                return service_arn.split('/')&#91;-1]

            def extract_cluster_name(cluster_arn):
                """Extrae el nombre del clúster del ARN."""
                return cluster_arn.split(':')&#91;-1]

            def lambda_handler(event, context):
                # Obtener el día de hoy
                today = datetime.now().strftime('%A, %d de %B de %Y')
                logger.info(f"Evaluando si hoy ({today}) es un día festivo.")
                
                # Verificar si hoy es festivo
                if is_holiday():
                    logger.info(f"Hoy es un día festivo ({today}). No se ejecutará el proceso.")
                    return {
                        'statusCode': 200,
                        'body': f"Hoy es un día festivo ({today}). No se ejecutará el proceso."
                    }

                logger.info(f"Hoy NO es un día festivo ({today}). Procediendo con la ejecución del proceso.")
                
                # Continuar con el proceso si no es festivo
                try:
                    # Obtener la lista de clústeres
                    logger.info("Obteniendo la lista de clústeres.")
                    clusters_response = ecs_client.list_clusters()
                    clusters = clusters_response&#91;'clusterArns']
                    logger.info(f"Clusters encontrados: {&#91;extract_cluster_name(c) for c in clusters]}")
                except Exception as e:
                    logger.error(f"Error al obtener clústeres: {str(e)}")
                    return {
                        'statusCode': 500,
                        'body': f"Error al obtener clústeres: {str(e)}"
                    }

                servicios_iniciar = &#91;]
                servicios_no_iniciar = &#91;]

                # Iterar sobre cada clúster y restaurar los servicios
                for cluster in clusters:
                    cluster_name = extract_cluster_name(cluster)
                    
                    try:
                        logger.info(f"Listando servicios en el clúster: {cluster_name}.")
                        services_response = ecs_client.list_services(cluster=cluster)
                        services = services_response&#91;'serviceArns']
                        logger.info(f"Servicios encontrados en el clúster {cluster_name}: {&#91;extract_service_name(s) for s in services]}")
                        
                        # Reiniciar cada servicio
                        for service_arn in services:
                            service_name = extract_service_name(service_arn)
                            desired_count = get_desired_count(service_name, cluster_name)
                            
                            if desired_count is not None:
                                try:
                                    desired_count_int = int(desired_count)  # Asegurarse de que sea un int
                                    logger.info(f"Iniciando el servicio: {service_name} con desiredCount: {desired_count_int}.")
                                    
                                    # Establecer desiredCount al valor original
                                    ecs_client.update_service(cluster=cluster, service=service_arn, desiredCount=desired_count_int)
                                    
                                    # Verificar el estado del servicio después de la actualización
                                    updated_service = ecs_client.describe_services(cluster=cluster, services=&#91;service_arn])
                                    if updated_service&#91;'services']&#91;0]&#91;'desiredCount'] == desired_count_int:
                                        servicios_iniciar.append(service_name)
                                        logger.info(f"Servicio iniciado correctamente: {service_name} en el clúster {cluster_name}.")
                                    else:
                                        servicios_no_iniciar.append(service_name)
                                        logger.warning(f"No se pudo iniciar el servicio {service_name} en el clúster {cluster_name}.")
                                except Exception as e:
                                    logger.error(f"Error al iniciar el servicio {service_name} en el clúster {cluster_name}: {str(e)}")
                                    servicios_no_iniciar.append(service_name)
                            else:
                                logger.warning(f"No se encontró un valor deseado para el servicio: {service_name}")
                    
                    except Exception as e:
                        logger.error(f"Error al listar servicios en el clúster {cluster_name}: {str(e)}")

                if servicios_iniciar:
                    logger.info(f"Servicios iniciados correctamente: {servicios_iniciar}")
                
                if servicios_no_iniciar:
                    logger.warning(f"No se pudieron iniciar los siguientes servicios: {servicios_no_iniciar}")

                logger.info("Proceso de inicio de servicios completado.")
                
                return {
                    'statusCode': 200,
                    'body': 'Proceso de inicio de servicios completado.'
                }




  # Regla EventBridge para Apagar Servicios (todos los días a las 8 PM hora Colombia)
  StopECSRule:
    Type: AWS::Events::Rule
    Properties:
      Description: "Regla para apagar ECS"
      ScheduleExpression: cron(0 1 ? * TUE-SAT *) # 8 PM hora Colombia (UTC-5)Type: Schedule
      State: ENABLED
      Targets:
        - Arn: !GetAtt &#91;StopECSFunction, Arn]
          Id: "TargetFunctionV1"

  # Regla EventBridge para Encender Servicios (de lunes a viernes a las 7 AM hora Colombia)
  StartECSRule:
    Type: AWS::Events::Rule 
    Properties:
      Description: "Regla para encender ECS"
      ScheduleExpression: cron(0 12 ? * MON-FRI *) # 7AM hora Colombia (UTC-5)
      State: ENABLED
      Targets:
        - Arn: !GetAtt &#91;StartECSFunction, Arn]
          Id: "TargetFunctionV1"

  #Asociar trigger de EventBridge a Lambda
  StopECSPermission:
    Type: AWS::Lambda::Permission
    Properties:
      Action: lambda:InvokeFunction
      FunctionName: !Ref StopECSFunction
      Principal: events.amazonaws.com
      SourceArn: !GetAtt StopECSRule.Arn

  #Asociar trigger de EventBridge a Lambda
  StartECSPermission:
    Type: AWS::Lambda::Permission
    Properties:
      Action: lambda:InvokeFunction
      FunctionName: !Ref StartECSFunction
      Principal: events.amazonaws.com
      SourceArn: !GetAtt StartECSRule.Arn          

Outputs:
  StopECSFunctionArn:
    Description: "ARN of the Stop ECS Lambda function"
    Value: !GetAtt &#91;StopECSFunction, Arn]

  StartECSFunctionArn:
    Description: "ARN of the Start ECS Lambda function"
    Value: !GetAtt &#91;StartECSFunction, Arn]</code></pre>
]]></content:encoded>
					
					<wfw:commentRss>https://jhosman.com/aws/automatizar-encendido-y-apagado-de-ecs/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<media:content medium="image" url="https://jhosman.com/wp-content/uploads/2024/12/ECS-CloudFormation-StartStop.png"/>
            <post-id xmlns="com-wordpress:feed-additions:1">1088</post-id>	</item>
		<item>
		<title>Configurar autoapagado de space en JupiterLAB – [AWS]</title>
		<link>https://jhosman.com/aws/configurar-autoapagado-de-space-en-jupiterlab-aws/</link>
					<comments>https://jhosman.com/aws/configurar-autoapagado-de-space-en-jupiterlab-aws/#respond</comments>
		
		<dc:creator><![CDATA[Jhosman]]></dc:creator>
		<pubDate>Mon, 07 Oct 2024 19:52:30 +0000</pubDate>
				<category><![CDATA[AWS]]></category>
		<category><![CDATA[Glue]]></category>
		<category><![CDATA[JupiterLab]]></category>
		<category><![CDATA[SageMaker]]></category>
		<guid isPermaLink="false">https://jhosman.com/?p=1081</guid>

					<description><![CDATA[Para realizar el apagado automático de un Spacename de JupiterLab (Shutdown) definiendo un tiempo de inactividad, se deberá configurar un LifeCycle de Dominio, para ello dentro de la consola de AWS se deberá ir a la siguiente opción: Amazon SageMaker &#62; Admin configurations &#62; Lifecycle configurations &#62; Create configuration Aquí se deberá pegar el siguiente [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>Para realizar el apagado automático de un Spacename de JupiterLab (Shutdown) definiendo un tiempo de inactividad, se deberá configurar un LifeCycle de Dominio, para ello dentro de la consola de AWS se deberá ir a la siguiente opción:</p>



<p><strong>Amazon SageMaker &gt; Admin configurations &gt; Lifecycle configurations &gt; Create configuration</strong></p>



<p>Aquí se deberá pegar el siguiente código, que lo que hará es de manera continua revisar el estado del kernel, y contabilizar conforme los segundos que se confifguren, si se está realizando alguna tarea dentro de Jupiter, si no hay nada en ejecución una vez transcurrido el tiempo, el entorno se apagará: </p>



<pre class="wp-block-code"><code>#!/bin/bash
set -eux
ASI_VERSION=0.3.1
# User variables &#91;update as needed]
####################
### Ajustar el tiempo, tener en cuenta esto!!! https://github.com/aws-samples/sagemaker-studio-lifecycle-config-examples/issues/17#issuecomment-2364659767
####################
IDLE_TIME_IN_SECONDS=1200       # The max time (in seconds) the JupyterLab app can stay idle before being terminated.
# User variables - advanced &#91;update only if needed]
IGNORE_CONNECTIONS=True         # Set to False if you want to consider idle JL sessions with active connections as not idle.
SKIP_TERMINALS=False            # Set to True if you want to skip any idleness check on Jupyter terminals.
# System variables &#91;do not change if not needed]
JL_HOSTNAME=0.0.0.0
JL_PORT=8888
JL_BASE_URL=/jupyterlab/default/
CONDA_HOME=/opt/conda/bin
LOG_FILE=/var/log/apps/app_container.log # Writing to app_container.log delivers logs to CW logs.
SOLUTION_DIR=/var/tmp/auto-stop-idle # Do not use /home/sagemaker-user
STATE_FILE=$SOLUTION_DIR/auto_stop_idle.st
PYTHON_PACKAGE=sagemaker_studio_jlab_auto_stop_idle-$ASI_VERSION.tar.gz
PYTHON_SCRIPT_PATH=$SOLUTION_DIR/sagemaker_studio_jlab_auto_stop_idle/auto_stop_idle.py
CHECK_KERNEL_ACTIVITY_SCRIPT=/var/tmp/check_kernel_activity.sh
# Check if cron needs to be installed
status="$(dpkg-query -W --showformat='${db:Status-Status}' "cron" 2&gt;&amp;1)" || true
if &#91; ! $? = 0 ] || &#91; ! "$status" = installed ]; then
	# Fixing invoke-rc.d: policy-rc.d denied execution of restart.
	sudo /bin/bash -c "echo '#!/bin/sh
	exit 0' &gt; /usr/sbin/policy-rc.d"
	# Installing cron.
	echo "Installing cron..."
	sudo apt install cron
else
	echo "Package cron is already installed."
        # start/restart the service.
	sudo service cron restart
fi
# Creating solution directory.
sudo mkdir -p $SOLUTION_DIR
# Downloading autostop idle Python package.
echo "Downloading autostop idle Python package..."
curl -LO --output-dir /var/tmp/ https://github.com/aws-samples/sagemaker-studio-apps-lifecycle-config-examples/releases/download/v$ASI_VERSION/$PYTHON_PACKAGE 
sudo $CONDA_HOME/pip install -U -t $SOLUTION_DIR /var/tmp/$PYTHON_PACKAGE
# Setting container credential URI variable to /etc/environment to make it available to cron
sudo /bin/bash -c "echo 'AWS_CONTAINER_CREDENTIALS_RELATIVE_URI=$AWS_CONTAINER_CREDENTIALS_RELATIVE_URI' &gt;&gt; /etc/environment"
# Create a script to check for kernel activity
sudo tee $CHECK_KERNEL_ACTIVITY_SCRIPT &gt; /dev/null &lt;&lt;EOF
#!/bin/bash
# Set the notebook server hostname and port
JL_HOSTNAME=0.0.0.0
JL_PORT=8888
JL_TOKEN_FILE="/var/tmp/jupyter.token"
# Get the Jupyter token
TOKEN=\$(jupyter server list | grep -oP 'token=\K&#91;^ ]+')
# Fetch list of kernels using Jupyter REST API
KERNELS=\$(curl -s -H "Authorization: Token \$TOKEN" "http://\$JL_HOSTNAME:\$JL_PORT/api/kernels " | jq -r '.&#91;] | .execution_state')
# Check if any kernel is in a busy or executing state
for KERNEL_STATUS in \$KERNELS; do
    if &#91;&#91; "\$KERNEL_STATUS" == "busy" || "\$KERNEL_STATUS" == "executing" ]]; then
        echo "Kernel is active. Autostop will not proceed."
        exit 1
    fi
done
echo "No active kernels found."
exit 0
EOF
# Make the kernel activity script executable
sudo chmod +x $CHECK_KERNEL_ACTIVITY_SCRIPT
# Add script to crontab for root.
echo "Adding autostop idle script with kernel monitoring to crontab..."
echo "*/2 * * * * /bin/bash -c '$CHECK_KERNEL_ACTIVITY_SCRIPT &amp;&amp; $CONDA_HOME/python $PYTHON_SCRIPT_PATH --idle-time $IDLE_TIME_IN_SECONDS --hostname $JL_HOSTNAME \
--port $JL_PORT --base-url $JL_BASE_URL --ignore-connections $IGNORE_CONNECTIONS \
--skip-terminals $SKIP_TERMINALS --state-file-path $STATE_FILE &gt;&gt; $LOG_FILE'" | sudo crontab -</code></pre>



<p>El código anterior está corregido, ya que el <a href="https://github.com/aws-samples/sagemaker-studio-apps-lifecycle-config-examples/blob/main/code-editor/auto-stop-idle/on-start.sh" target="_blank" rel="noreferrer noopener">código fuente</a>, apaga el entorno desde el tiempo que se inicia el entorno, y no es lo que se necesita en este caso.</p>



<p>Una vez guardado el LifeCycle, se deberá atachar este al entorno de trabajo, esto se realiza en la opción:</p>



<p><strong>Amazon SageMaker &gt; Admin configurations &gt; Domains &gt; Nombre Dominio &gt; Enviroment &gt; Lifecycle configurations for personal Studio apps &gt; Attach</strong></p>



<p>Allí se deberá seleccionar el LifeCycle configurado y seleccionar «Attach to domain» una vez guardado, se deberá seleccionar este por defecto para el entorno configurado, para ello en la lista se deberá seleccioanr el LifeCycle configurado y posteriormente seleccioanr <strong>«Set as default»</strong></p>



<p>Ya se podrá iniciar el entorno de trabajo y este se detendrá automáticamente una vez se complete el proceso de ejecución con el tiempo definido. Tener en cuent aque si hay trabajos de Glue en curso, estos continuarán procesando la información en segundo plano, así el entorno de SageMaker se encuentre detenido, ya que este opera como un servicio independiente. </p>
]]></content:encoded>
					
					<wfw:commentRss>https://jhosman.com/aws/configurar-autoapagado-de-space-en-jupiterlab-aws/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<media:content medium="image" url="https://miro.medium.com/v2/resize:fit:1400/1*WyNQ6g_Pp3RRgWjbXwDuMA.png"/>
            <post-id xmlns="com-wordpress:feed-additions:1">1081</post-id>	</item>
		<item>
		<title>Crear USB de instalación de Windows 10/11 en Mac OS</title>
		<link>https://jhosman.com/mac-os/crear-usb-de-instalacion-de-windows-10-11-en-mac-os/</link>
					<comments>https://jhosman.com/mac-os/crear-usb-de-instalacion-de-windows-10-11-en-mac-os/#respond</comments>
		
		<dc:creator><![CDATA[Jhosman]]></dc:creator>
		<pubDate>Wed, 24 Aug 2022 20:07:08 +0000</pubDate>
				<category><![CDATA[Mac OS]]></category>
		<guid isPermaLink="false">https://jhosman.com/?p=1062</guid>

					<description><![CDATA[El proceso es muy sencillo, solo debes haber descargado la imagen ISO de Windows, luego de tenerla abre la terminal y coloca este comando: Recuerda cambiar el «disk4» por el número de disco asociado a la memoria USB]]></description>
										<content:encoded><![CDATA[
<p>El proceso es muy sencillo, solo debes haber descargado la imagen ISO de Windows, luego de tenerla abre la terminal y coloca este comando:</p>



<pre class="wp-block-code"><code>sudo dd if=/Users/im/Desktop/NOMBRE_DE_LA_IMAGEN.ISO of=/dev/disk4 bs=1024k status=progress</code></pre>



<p>Recuerda cambiar el «<strong>disk4</strong>» por el número de disco asociado a la memoria USB</p>
]]></content:encoded>
					
					<wfw:commentRss>https://jhosman.com/mac-os/crear-usb-de-instalacion-de-windows-10-11-en-mac-os/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<media:content medium="image" url="https://i.imgur.com/qFYjj12.png"/>
            <post-id xmlns="com-wordpress:feed-additions:1">1062</post-id>	</item>
		<item>
		<title>Instalar Driver Wifi de tarjeta de red Realtek rtl8821ce en Ubuntu 18.04 / 20.04 /22.04</title>
		<link>https://jhosman.com/c69-ubuntu/c39-hardware13/instalar-driver-wifi-de-tarjeta-de-red-realtek-rtl8821ce-en-ubuntu-18-04-20-04-22-04/</link>
					<comments>https://jhosman.com/c69-ubuntu/c39-hardware13/instalar-driver-wifi-de-tarjeta-de-red-realtek-rtl8821ce-en-ubuntu-18-04-20-04-22-04/#respond</comments>
		
		<dc:creator><![CDATA[Jhosman]]></dc:creator>
		<pubDate>Tue, 05 Apr 2022 15:38:42 +0000</pubDate>
				<category><![CDATA[Hardware]]></category>
		<guid isPermaLink="false">https://jhosman.com/?p=1048</guid>

					<description><![CDATA[El proceso de instalación es bastante sencillo, solo debemos tener en cuenta que debes desactivar el modo seguro en la BIOS de tu equipo, sin este paso NADA funcionará, este proceso varía en cada computador, así que deberás buscar en internet como hacerlo. Luego de haber desactivado el modo seguro, abre una terminal y coloca [&#8230;]]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image is-resized"><img loading="lazy" decoding="async" src="https://opengraph.githubassets.com/bc72238d6ddf8b8debe76c6768805d19e9306cb8a2d98093ee68eebdf51579ef/tangolee/Realtek-rtl8821ce-linux-driver" alt="GitHub - tangolee/Realtek-rtl8821ce-linux-driver" width="840" height="420"/><figcaption>Driver Realtek rtl8821ce</figcaption></figure>



<p> El proceso de instalación es bastante sencillo, solo debemos tener en cuenta que debes desactivar el <strong>modo seguro</strong> en la <strong>BIOS</strong> de tu equipo, sin este paso NADA funcionará, este proceso varía en cada computador, así que deberás buscar en internet como hacerlo.</p>



<p>Luego de haber desactivado el modo seguro, abre una terminal y coloca lo siguiente: </p>



<p><code>sudo apt update<br>sudo apt install -y dkms git<br>git clone https://github.com/tomaspinho/rtl8821ce.git<br>cd rtl8821ce/<br>sudo ./dkms-install.sh<br>sudo modprobe 8821ce<br>iwconfig</code></p>



<p>Y reinicia tu Ubuntu, ya con esto debes tener WiFi, recuerda tener desactivado el <strong>modo seguro</strong> en tu BIOS</p>
]]></content:encoded>
					
					<wfw:commentRss>https://jhosman.com/c69-ubuntu/c39-hardware13/instalar-driver-wifi-de-tarjeta-de-red-realtek-rtl8821ce-en-ubuntu-18-04-20-04-22-04/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<media:content medium="image" url="https://opengraph.githubassets.com/bc72238d6ddf8b8debe76c6768805d19e9306cb8a2d98093ee68eebdf51579ef/tangolee/Realtek-rtl8821ce-linux-driver"/>
            <post-id xmlns="com-wordpress:feed-additions:1">1048</post-id>	</item>
		<item>
		<title>Instalar OCS Inventory en Ubuntu 20.04 LTS</title>
		<link>https://jhosman.com/c69-ubuntu/c42-laboratorio10/instalar-ocs-inventory-en-ubuntu-20-04-lts/</link>
					<comments>https://jhosman.com/c69-ubuntu/c42-laboratorio10/instalar-ocs-inventory-en-ubuntu-20-04-lts/#respond</comments>
		
		<dc:creator><![CDATA[Jhosman]]></dc:creator>
		<pubDate>Sat, 01 Aug 2020 03:35:07 +0000</pubDate>
				<category><![CDATA[Laboratorio]]></category>
		<guid isPermaLink="false">https://jhosman.com/?p=1025</guid>

					<description><![CDATA[Pasos para instalar servidor con Docker: Con este último comando debemos validar que esté corriendo el servicio, ejemplo: Una vez esté corriendo ingresaremos e iniciaremos sesión en la plataforma de OCS Inventory vía web en: http://ip_servidor/ocsreports/ con el usuario admin y la contrasela admin Instalación de agente en Ubuntu Luego procederemos a instalar los agentes [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>Pasos para instalar servidor con Docker:</p>



<pre class="wp-block-code"><code>apt install docker docker.io git docker-compose
docker pull ocsinventory/ocsinventory-docker-image:latest
git clone https://github.com/OCSInventory-NG/OCSInventory-Docker-Image.git
cd OCSInventory-Docker-Image/2.7/
docker-compose up -d
docker ps</code></pre>



<p>Con este último comando debemos validar que esté corriendo el servicio, ejemplo: </p>



<figure class="wp-block-image size-large is-resized"><a href="https://i.imgur.com/bPK8wHR.png" target="_blank" rel="noopener noreferrer"><img loading="lazy" decoding="async" src="https://i.imgur.com/bPK8wHR.png" alt="" width="580" height="26"/></a></figure>



<p>Una vez esté corriendo ingresaremos e iniciaremos sesión en la plataforma de OCS Inventory vía web en: http://ip_servidor/ocsreports/ con el usuario <strong>admin</strong> y la contrasela <strong>admin</strong></p>



<p><strong>Instalación de agente en Ubuntu</strong></p>



<p>Luego procederemos a instalar los agentes en nuestros clientes Ubuntu, el proceso es muy sencillo, solo abrimos la terminal y colocamos lo siguiente:</p>



<pre class="wp-block-code"><code>apt install libmodule-install-perl dmidecode libxml-simple-perl libcompress-zlib-perl libnet-ip-perl libwww-perl libdigest-md5-perl libdata-uuid-perl
apt install ocsinventory-agent</code></pre>



<p>En el momento de la instalación nos pedirá el método de conexión, donde se seleccionará <strong>http</strong> y luego la URL de conexión aquí se debe poner lo siguiente (cuidado la URL cambia) <strong>http://ip_servidor/ocsinventory</strong></p>



<p>El archivo de configuración quedará guardado en la siguiente ruta (por si necesitas ajustar algo adicional)</p>



<pre class="wp-block-code"><code>/etc/ocsinventory/ocsinventory-agent.cfg</code></pre>



<p><strong>Instalación de agente en Unix</strong></p>



<p>Ver: <a rel="noreferrer noopener" href="https://wiki.ocsinventory-ng.org/" target="_blank">https://wiki.ocsinventory-ng.org/ </a></p>



<p>Ya luego aparecerán los clientes o agentes conectados al servidor entregando el inventario de las máquinas.</p>



<figure class="wp-block-image size-large"><a href="https://i.imgur.com/lQly13F.png" target="_blank" rel="noopener noreferrer"><img decoding="async" src="https://i.imgur.com/lQly13F.png" alt=""/></a></figure>
]]></content:encoded>
					
					<wfw:commentRss>https://jhosman.com/c69-ubuntu/c42-laboratorio10/instalar-ocs-inventory-en-ubuntu-20-04-lts/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<media:content medium="image" url="https://i.imgur.com/YEHal3A.png"/>
            <post-id xmlns="com-wordpress:feed-additions:1">1025</post-id>	</item>
		<item>
		<title>Configurar Scroll y Botón Central de MagicMouse (Mac) en Ubuntu</title>
		<link>https://jhosman.com/c69-ubuntu/c39-hardware13/configurar-scroll-y-boton-central-de-magicmouse-mac-en-ubuntu/</link>
					<comments>https://jhosman.com/c69-ubuntu/c39-hardware13/configurar-scroll-y-boton-central-de-magicmouse-mac-en-ubuntu/#respond</comments>
		
		<dc:creator><![CDATA[Jhosman]]></dc:creator>
		<pubDate>Wed, 15 Apr 2020 23:11:15 +0000</pubDate>
				<category><![CDATA[Hardware]]></category>
		<guid isPermaLink="false">https://jhosman.com/?p=995</guid>

					<description><![CDATA[Extrañamente, el mouse en equipos Mac o iMac o Macbook no operan con velocidad normal, para resolverlo vamos a la terminal y colocamos lo siguiente: Advertencia: Durante el proceso el mouse se desactivará así que no te asustes Puedes ajustar este valor de 0 a 63, entonces prueba y ajusta según corresponda. Si deseas desactivar [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>Extrañamente, el mouse en equipos Mac o iMac o Macbook no operan con velocidad normal, para resolverlo vamos a la terminal y colocamos lo siguiente:</p>



<p><strong>Advertencia:</strong> Durante el proceso el mouse se desactivará así que no te asustes</p>



<pre class="wp-block-code"><code>rmmod hid_magicmouse
modprobe hid_magicmouse scroll_acceleration=1 scroll_speed=55</code></pre>



<p>Puedes ajustar este valor de 0 a 63, entonces prueba y ajusta según corresponda. </p>



<p>Si deseas desactivar el click cental (en verdad <strong>muy molesto</strong>) realiza esto:</p>



<pre class="wp-block-code"><code>rmmod hid_magicmouse
modprobe hid_magicmouse emulate_3button=0</code></pre>



<p>Y ya para que los cambios sean permantes crea el siguiente archivo con el siguiente contenido:</p>



<pre class="wp-block-code"><code>nano  /etc/modprobe.d/hid_magicmouse.conf 
modprobe hid_magicmouse scroll_acceleration=1 scroll_speed=55
modprobe hid_magicmouse emulate_3button=0</code></pre>



<p></p>
]]></content:encoded>
					
					<wfw:commentRss>https://jhosman.com/c69-ubuntu/c39-hardware13/configurar-scroll-y-boton-central-de-magicmouse-mac-en-ubuntu/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<media:content medium="image" url="https://i.pinimg.com/originals/5d/a4/3b/5da43b29405059bf7607d7257eb83fc3.jpg"/>
            <post-id xmlns="com-wordpress:feed-additions:1">995</post-id>	</item>
		<item>
		<title>RTMP Streaming Server con OBS y Nginx</title>
		<link>https://jhosman.com/c74-gnulinux/c61-laboratorio/rtmp-streaming-server-con-obs-y-nginx/</link>
					<comments>https://jhosman.com/c74-gnulinux/c61-laboratorio/rtmp-streaming-server-con-obs-y-nginx/#respond</comments>
		
		<dc:creator><![CDATA[Jhosman]]></dc:creator>
		<pubDate>Mon, 13 Apr 2020 01:10:46 +0000</pubDate>
				<category><![CDATA[Laboratorio]]></category>
		<guid isPermaLink="false">https://jhosman.com/?p=984</guid>

					<description><![CDATA[La transmisión de video en vivo es algo cada vez más popular en Internet y plataformas como Twitch o YouTube proporcionan una infraestructura para consumir interminables horas de medios en vivo y grabados. Si bien estos servicios proporcionan una solución básica de forma gratuita, contienen contenido generalmente detrás de anuncios sin una suscripción paga. Para [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>La transmisión de video en vivo es algo cada vez más popular en Internet y plataformas como Twitch o YouTube proporcionan una infraestructura para consumir interminables horas de medios en vivo y grabados. Si bien estos servicios proporcionan una solución básica de forma gratuita, contienen contenido generalmente detrás de anuncios sin una suscripción paga. Para tener un control total sobre sus contenidos y gracias a las soluciones de código abierto, es fácil configurar un servidor de transmisión en vivo que utilice el protocolo RTMP.</p>



<p>Así que manos a la obra:</p>



<pre class="wp-block-code"><code>apt update &amp;&amp; apt upgrade -y
apt install build-essential libpcre3 libpcre3-dev libssl-dev nginx libnginx-mod-rtmp ffmpeg -y</code></pre>



<p>Editamos el archivo de configuración de nginx y colocamos esta sección <strong>al final.</strong></p>



<pre class="wp-block-code"><code>rtmp {
        server {
                listen 1935;
                chunk_size 4096;
                notify_method get;

                application live {
                             on_publish http://localhost/auth;
                             live on;
                             #Si quieres grabar cambia "record" a "all"
                             record off;
                             #Se define el directorio para grabar
                             record_path /var/www/html/recordings;
                             record_unique on;
                             #Se define canal de transmision
                             push rtmp://localhost/youtube;
                }
                # YouTube Stream Application  
                      application youtube {
                          live on;
                          record off;
                          #Only allow localhost to publish
                          allow publish 127.0.0.1;
                          deny publish all;
                          # Push URL with the YouTube stream key
                          push rtmp://a.rtmp.youtube.com/live2/&lt;TU_LLAVE_API>;
                      }
        }
}</code></pre>



<p>Creamos el directorio de grabaciones:</p>



<pre class="wp-block-code"><code>mkdir -p /var/www/html/recordings
chown -R www-data:www-data /var/www/html/recordings/</code></pre>



<p>Se configura el canal de transmisión hacia nginx</p>



<pre class="wp-block-code"><code>nano /etc/nginx/sites-enabled/default</code></pre>



<p>En la sección «server» después de definir los puertos «listen» debe ir lo siguiente:</p>



<pre class="wp-block-code"><code>location /auth {
        if ($arg_pwd = 'una_contraseña_evitar_simbolos') {
            return 200;
            }
            return 401;
}</code></pre>



<p>Y reiniciamos el servicio nginx:</p>



<pre class="wp-block-code"><code>systemctl restart nginx.service</code></pre>



<h2 class="wp-block-heading">Configurando OBS con nuestro servidor NGINX</h2>



<p>En la sección Controles de la interfaz, haga clic en «<strong>Ajustes</strong>» o «<strong>Configuración</strong>» para ingresar a la interfaz de configuración de OBS.</p>



<p>Ingrese la pestaña «<strong>Emisión</strong>» e ingrese la Información sobre su instancia de transmisión: </p>



<ul class="wp-block-list"><li>Servicio: Personalizado</li><li>Server: <code>rtmp://ip_publica_servidor/live</code></li><li>Clave de transmisión: <em>nombre_stream?pwd=una_contraseña_evitar_simbolos</em></li></ul>



<p>Guarde la configuración y configure su escena en OBS Studio.</p>



<p>Cuando esté listo, <strong>comience a transmitir </strong>al servidor haciendo clic en <strong>Iniciar transmisión</strong> en la sección Controles de OBS.</p>



<h2 class="wp-block-heading">Configurar canales MultiStreaming</h2>



<p>Abrir el archivo de configuración de nginx:</p>



<pre class="wp-block-code"><code>nano /etc/nginx/nginx.conf</code></pre>



<p>Buscar la sección «Stream Application» y ajustar URL&#8217;s y API_KEYS según corresponda:</p>



<pre class="wp-block-code"><code># Youtube Stream Application  
application youtube {
  live on;
  record off;
  #Only allow localhost to publish
  allow publish 127.0.0.1;
  deny publish all;
  # Push URL with the YouTube stream key
  push rtmp://a.rtmp.youtube.com/live2/&lt;TU_LLAVE_API>;
}</code></pre>



<p>Agregar canales extra (si es necesario), en caso contrario ir al final para reiniciar servicios</p>



<pre class="wp-block-code"><code>apt-get install stunnel4 -y
sudo nano /etc/default/stunnel4</code></pre>



<p>Aquí cambia <strong>ENABLE</strong> de 0 a <strong>1</strong></p>



<pre class="wp-block-code"><code>ENABLED=1</code></pre>



<p>Editamos ahora el stunnel</p>



<pre class="wp-block-code"><code>nano /etc/stunnel/stunnel.conf</code></pre>



<p>Y colocamos lo siguiente:</p>



<pre class="wp-block-code"><code>pid = /var/run/stunnel4/stunnel.pid
output = /var/log/stunnel4/stunnel.log


setuid = stunnel4
setgid = stunnel4

# https://www.stunnel.org/faq.html
socket = r:TCP_NODELAY=1
socket = l:TCP_NODELAY=1

debug = 4

&#91;fb-live]
client = yes
accept = 127.0.0.1:1936
connect = live-api-s.facebook.com:443
verifyChain = no</code></pre>



<p>Iniciamos servicios:</p>



<pre class="wp-block-code"><code>systemctl enable stunnel4.service
systemctl restart stunnel4.service
systemctl status stunnel4.service</code></pre>



<p>Agregamos el canal de Facebook por rtmps</p>



<pre class="wp-block-code"><code>nano /etc/nginx/nginx.conf</code></pre>



<p>En la sección donde se define la aplicación «<strong>live</strong>» se debe adicionar:</p>



<pre class="wp-block-code"><code>push rtmp://localhost/facebook;</code></pre>



<p>Y debajo de la aplicación ya creada, en este caso YouTube, después de que finaliza la sección ponemos:</p>



<pre class="wp-block-code"><code># Facebook Stream Application  
application facebook {
  live on;
  record off;

  #Only allow localhost to publish
  allow publish 127.0.0.1;
  deny publish all;
  # Push URL with the Facebook stream key
  push rtmp://127.0.0.1:1936/rtmp/&lt;facebook_stream_key>;
}</code></pre>



<p><strong>Reiniciamos servicio de nginx:</strong></p>



<pre class="wp-block-code"><code>systemctl restart nginx.service
systemctl status nginx.service</code></pre>



<p>Desde un nivel alto, Stunnel y NGINX ahora deberían funcionar así:</p>



<pre class="wp-block-code"><code> ____________        ____________        ____________        ____________  
| Streaming  |      |            |      |            |      |  Facebook  | 
|   Source   | ---> |   NGINX    | ---> |   stunnel  | ---> |    Live    | 
|____________|      |____________|      |____________|      |____________|

 </code></pre>



<p>Si requieres adicionar más canales de Streaming, puedes hacerlo del mismo modo siguiendo el esquema anterior. Al final ya estarás transmitiendo desde OBS pasando por un proxy NGINX hacia los canales necesarios:</p>



<figure class="wp-block-image size-large"><img decoding="async" src="https://i.imgur.com/JhDjli7.png" alt=""/></figure>



<figure class="wp-block-image size-large"><img decoding="async" src="https://i.imgur.com/2PS41QI.png" alt=""/></figure>



<figure class="wp-block-image size-large"><img decoding="async" src="https://i.imgur.com/SuWLGnk.png" alt=""/></figure>



<p>Se puede probar el Live en Streaming por ejemplo usando VLC, colocando la URL de nuestro servidor:</p>



<pre class="wp-block-code"><code>rtmp://ip_servidor_o_dominio/live/nombre_stream</code></pre>



<p>En mi caso para la prueba era:</p>



<pre class="wp-block-code"><code>rtmp://streaming.flisolbogota.org/live/flisol</code></pre>



<figure class="wp-block-image size-large"><img decoding="async" src="https://i.imgur.com/TDFz5yM.png" alt=""/></figure>
]]></content:encoded>
					
					<wfw:commentRss>https://jhosman.com/c74-gnulinux/c61-laboratorio/rtmp-streaming-server-con-obs-y-nginx/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<media:content medium="image" url="https://jhosman.com/wp-content/uploads/2020/04/1bQ82XEo_LziDAxySm_jzNA.png"/>
            <post-id xmlns="com-wordpress:feed-additions:1">984</post-id>	</item>
		<item>
		<title>Construir Amazon Echo -Alexa- con una RaspberryPi</title>
		<link>https://jhosman.com/c69-ubuntu/c39-hardware13/construir-amazon-echo-alexa-con-una-raspberrypi/</link>
					<comments>https://jhosman.com/c69-ubuntu/c39-hardware13/construir-amazon-echo-alexa-con-una-raspberrypi/#respond</comments>
		
		<dc:creator><![CDATA[Jhosman]]></dc:creator>
		<pubDate>Mon, 19 Nov 2018 23:24:19 +0000</pubDate>
				<category><![CDATA[Hardware]]></category>
		<category><![CDATA[Laboratorio]]></category>
		<guid isPermaLink="false">https://jhosman.com/?p=971</guid>

					<description><![CDATA[Alexa es un asistente virtual desarrollado por Amazon, utilizado por primera vez en los altavoces inteligentes Amazon Echo y Amazon Echo Dot creados en Amazon Lab126. Cuenta con la capacidad de interactuar a través de la voz, reproducir música, crear listas de tareas pendientes, establecer alarmas, reproducir podcasts, reproducir audiolibros y proveer información en tiempo [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Alexa es un asistente virtual desarrollado por Amazon, utilizado por primera vez en los altavoces inteligentes Amazon Echo y Amazon Echo Dot creados en Amazon Lab126. Cuenta con la capacidad de interactuar a través de la voz, reproducir música, crear listas de tareas pendientes, establecer alarmas, reproducir podcasts, reproducir audiolibros y proveer información en tiempo real del clima, tráfico y noticias entre otros. Alexa puede también controlar varios dispositivos inteligentes tomando el rol de sistema de automatización del hogar (domótica). Los usuarios pueden extender las habilidades de Alexa instalando «skills» (funcionalidades adicionales desarrolladas por terceros) que se asemejan a «apps».</p>
<p>Para construir nuestra Alexa necesitamos:</p>
<ul>
<li>Rasberry Pi 3B p 3B+</li>
<li>ReSpeaker 2 Mics Pi HAT (Comprar <a href="https://www.seeedstudio.com/ReSpeaker-2-Mics-Pi-HAT-p-2874.html" target="_blank" rel="noopener">aquí</a>)</li>
<li>Parlantes</li>
<li>Teclado</li>
<li>Mouse</li>
<li>Pantalla con soporte HDMI</li>
</ul>
<p><strong>Paso 1)</strong> Primero (recomendamos hacer la instalación con la imágen de disco de seeed que puede descargar en <a href="https://drive.google.com/open?id=15yEZEwHx3Q7RS9vOYkEfkvhV4OVimQ_7" target="_blank" rel="noopener">aquí</a>, si deseas usar la imágen oficial de raspberry, puedes seguir con la oficial, aunque puedes tener problemas con el Kernel) debemos instalar Raspbian con Noobs (versión Desktop), por lo cual puede seguir la siguiente documentación: <a href="https://www.raspberrypi.org/documentation/installation/noobs.md" target="_blank" rel="noopener">https://www.raspberrypi.org/documentation/installation/noobs.md</a> y finalmente realizamos conexión a nuestra red de Internet. Y luego cambiamos los repositorios que allí ya trae por los oficiales de Raspbian en el archivo /etc/apt/sources.list</p>
<pre class="EnlighterJSRAW" data-enlighter-language="shell">deb http://archive.raspbian.org/raspbian stretch main contrib non-free
deb-src http://archive.raspbian.org/raspbian stretch main contrib non-free</pre>
<p>Luego adicionamos la llave de los repositorios y actualizamos nuestro sistema:</p>
<pre class="EnlighterJSRAW" data-enlighter-language="shell">wget https://archive.raspbian.org/raspbian.public.key -O - | sudo apt-key add -
sudo apt update
sudo apt dist-upgrade
reboot</pre>
<p><strong>Paso 2)</strong> Ahora que nuestro dispositivo tiene conectividad a Internet, abra un terminal y verificamos que debe aparecer en el directorio /home/pi. Copie y pegue el siguiente comando en la ventana de su terminal y presione Enter.</p>
<pre class="EnlighterJSRAW" data-enlighter-language="shell">wget https://raw.githubusercontent.com/alexa/avs-device-sdk/master/tools/Install/setup.sh
wget https://raw.githubusercontent.com/alexa/avs-device-sdk/master/tools/Install/pi.sh
wget https://raw.githubusercontent.com/alexa/avs-device-sdk/master/tools/Install/genConfig.sh

</pre>
<p><strong>Paso 3)</strong> Creamos en el directorio /home/pi un archivo llamado config.txt y le agregamos el siguiente contenido:</p>
<pre class="EnlighterJSRAW" data-enlighter-language="shell">DEVICE_SERIAL_NUMBER="123456"
CLIENT_ID=""
PRODUCT_ID=""</pre>
<p><img loading="lazy" decoding="async" class="" src="https://m.media-amazon.com/images/G/01/mobile-apps/dex/avs/github/CBLconfig._TTH_.png" alt="config" width="600" height="333" /></p>
<p><strong>Paso 4) </strong>Es hora de copiar y pegar las credenciales de su producto en su archivo de configuración. En su navegador web, ingrese <a href="https://developer.amazon.com/avs/home.html#" target="_blank" rel="noopener">al panel de AVS Amazon</a> donde puede ver todos sus productos asociados con su cuenta de desarrollador. Si ha cerrado sesión, vuelva a iniciar sesión y haga clic en el enlace de la Consola de desarrollador en la esquina superior derecha de su navegador. Luego haga clic en el botón «SERVICIO DE VOZ DE ALEXA» en la navegación para regresar a su AVS Console. Ingresamos a la opción CREATE PRODUCT y llenamos los campos con la siguiente información:</p>
<p>Product Name: RaspberryPi<br />
Product ID: RaspberryPi<br />
CHECK en Device with Alexa built-in<br />
Will your device use a companion app: No<br />
Product category: Other<br />
Brief product description: RaspberryPi<br />
How will end users interact with your product: CHECK in Touch-initiated &amp; Hands-free<br />
Do you intend to distribute this product commercially: No<br />
Will your device be used for Alexa for Business: No<br />
Is this a children’s product or is it otherwise directed to children younger than 13 years old: No</p>
<p>Presionamos la opción Next y luego presionamos en <strong>CREATE NEW PROFILE, </strong>en los dos campos que aparecen colocamos: RaspberryPi y NEXT</p>
<p>Luego aceptamos términos y condiciones (si estás de acuerdo, claro está) CHECK en I agree to theAmazon Developer Services Agreement,including theAlexa Voice Service Program Requirements.  Y presionamos la opción FINISH</p>
<p><strong>Paso 5) </strong>Abrimos el archivo config.txt y en los campos en cuestión colocamos:</p>
<pre class="EnlighterJSRAW" data-enlighter-language="shell">PRODUCT_ID="RaspberryPi"
CLIENT_ID=VER_SIGUIENTE_IMAGEN</pre>
<p>Haga clic en el enlace Perfil de seguridad en la sección Detalles y administración, luego vaya a Otros dispositivos y plataformas desde la Web &#8211; Android / Kindle &#8211; iOS &#8211; Otras opciones de dispositivos y plataformas.</p>
<p><img decoding="async" src="https://m.media-amazon.com/images/G/01/mobile-apps/dex/avs/github/CBLclientID._TTH_.png" alt="Profile" /></p>
<p>El archivo debería quedar algo como lo siguiente, guardamos cambios&#8230;</p>
<pre class="EnlighterJSRAW" data-enlighter-language="shell">DEVICE_SERIAL_NUMBER="1234"
CLIENT_ID="amzn1.application-oa2-client.12345678901234567890123456789012"
PRODUCT_ID="RaspberryPi"</pre>
<p>Adicionalmente descargue el archivo de configuración JSON que ofrece AVS de Amazon, y ubíquelo en el mismo directorio /home/pi/</p>
<p><img decoding="async" src="https://camo.githubusercontent.com/01fda880fdecd111d0c98420a67c3480075e5d0a/68747470733a2f2f6d2e6d656469612d616d617a6f6e2e636f6d2f696d616765732f472f30312f6d6f62696c652d617070732f6465782f6176732f73646b2f646f776e6c6f61642e706e67" /></p>
<p><strong>Paso 6) </strong>Abre la terminal y coloca el siguiente comando, está pendiente de la shell ya que hará algunas preguntas donde deberemos aceptar, este proceso de compilación tardará algún tiempo&#8230; así que paciencia&#8230;</p>
<pre class="EnlighterJSRAW" data-enlighter-language="shell">cd /home/pi/
sudo bash setup.sh config.json [-s 123456]</pre>
<p>Luego hará una pregunta, escribimos AGREE y continuamos el proceso, al final visualizaremos lo siguiente, si todo salió en orden:</p>
<p><img decoding="async" src="https://m.media-amazon.com/images/G/01/mobile-apps/dex/avs/github/complete._TTH_.png" alt="Complete" /></p>
<div class="gtx-body">Ahora solo necesitaos iniciar la aplicación de muestra y obtener un token de actualización de AVS para que su dispositivo pueda autenticarse con la nube a través de Iniciar sesión con Amazon (LWA). Para ello colocamos el comando:</div>
<div>
<pre class="EnlighterJSRAW" data-enlighter-language="shell">cd /home/pi/
sudo bash startsample.sh</pre>
<p>Ingresamos ahora al sitio <a href="https://www.amazon.com/a/code" target="_blank" rel="noopener">https://www.amazon.com/a/code</a> e ingresamos el Token de autorización que nos ha proporcionado el Script.</p>
</div>
<p><em><strong>Nota:</strong> Si la ventana de su terminal muestra repetidamente el mensaje de verificación de autorización, desplácese hacia arriba hasta que encuentre el código requerido. Debe mantener la aplicación de muestra en ejecución mientras ingresa el código.</em></p>
<div>
<p><img decoding="async" src="https://m.media-amazon.com/images/G/01/mobile-apps/dex/avs/github/inputCBL._TTH_.png" alt="CBL" /></p>
</div>
<p>Para finalizar y empezar a hablar con Alexa, colocamos el siguiente comando:</p>
<pre class="EnlighterJSRAW" data-enlighter-language="shell">sudo bash startsample.sh</pre>
<p>Para cambiar el idioma presionamos la tecla &#8216;c&#8217; y seguimos los pasos que el asistente indica. Feliz Hacking!  Puedes configurar otras opciones más en: <a href="https://alexa.amazon.com/spa/index.html" target="_blank" rel="noopener">https://alexa.amazon.com/spa/index.html</a></p>
<p><iframe loading="lazy" title="ReSpeaker 2 Mics Pi HAT Alexa Demo" width="1290" height="726" src="https://www.youtube.com/embed/uTyDqjG5o8s?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe></p>
]]></content:encoded>
					
					<wfw:commentRss>https://jhosman.com/c69-ubuntu/c39-hardware13/construir-amazon-echo-alexa-con-una-raspberrypi/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<media:content medium="image" url="https://m.media-amazon.com/images/G/01/mobile-apps/dex/avs/github/Rasp_Pi._TTH_.jpg"/>
            <post-id xmlns="com-wordpress:feed-additions:1">971</post-id>	</item>
		<item>
		<title>Hacer root en Xiaomi Redmi Note 4 Version Global Qualcomm</title>
		<link>https://jhosman.com/c73-android/c52-laboratorio3/hacer-root-en-xiaomi-redmi-note-4-version-global-qualcomm/</link>
					<comments>https://jhosman.com/c73-android/c52-laboratorio3/hacer-root-en-xiaomi-redmi-note-4-version-global-qualcomm/#respond</comments>
		
		<dc:creator><![CDATA[Jhosman]]></dc:creator>
		<pubDate>Fri, 04 May 2018 19:14:10 +0000</pubDate>
				<category><![CDATA[Laboratorio]]></category>
		<guid isPermaLink="false">https://jhosman.com/?p=965</guid>

					<description><![CDATA[Ser usuario root implica tener más permisos que el resto de usuarios. Por lo general, para tener estos permisos avanzados vamos a tener que modificar nuestro sistema operativo. Todos los sistemas Android que los fabricantes incluyen en nuestros terminales no tienen acceso root por defecto para garantizar la seguridad del usuario. El proceso es muy [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Ser usuario root implica tener más permisos que el resto de usuarios. Por lo general, para tener estos permisos avanzados vamos a tener que modificar nuestro sistema operativo. Todos los sistemas Android que los fabricantes incluyen en nuestros terminales no tienen acceso root por defecto para garantizar la seguridad del usuario. El proceso es muy sencillo, solo basta con seguir unos pocos pasos, eso si antes de iniciar se recomienda sacar copia de seguridad de tus datos. No me hago responsable por los fallos que puedas tener en el proceso, esto lo realizarás bajo tu responsabildad.</p>
<p><strong>Archivos Necesarios:</strong></p>
<ul>
<li><strong><a href="http://en.miui.com/unlock/download_en.html" target="_blank" rel="noopener">Mi Unlock</a></strong></li>
<li><strong><a href="http://www.supersu.com/download" target="_blank" rel="noopener">Super SU (ZIP)</a></strong></li>
<li><strong><a href="https://dl.twrp.me/mido/" target="_blank" rel="noopener">WTRP mido</a></strong></li>
<li><strong><a href="https://goo.gl/Ms9xLU" target="_blank" rel="noopener">lazyflasher-no-verity-opt-encrypt.zip</a></strong></li>
<li><a href="http://update.miui.com/updates/v1/fullromdownload.php?d=mido_global&amp;b=F&amp;r=global&amp;n=" target="_blank" rel="noopener"><strong>★ Redmi Note 4 Qualcomm Latest Global Stable Version Fastboot File Download </strong></a>(este será necesario en caso de algún problema para restaurar el teléfono vía fastboot)</li>
<li><a href="http://api.en.miui.com/url/MiFlashTool" target="_blank" rel="noopener"><strong>MIUI ROM Flashing Tool</strong></a> (este será necesario en caso de algún problema para restaurar el teléfono vía fastboot)</li>
</ul>
<p><strong>Requisitos:</strong></p>
<ul>
<li>Tener<a href="https://www.androidpit.com/how-to-install-adb-and-fastboot" target="_blank" rel="noopener"> instalado y configurado ADB &#8211; Fastboot</a> en nuestro equipo</li>
<li>Tener batería a mas del 50%</li>
</ul>
<p><img loading="lazy" decoding="async" class="aligncenter size-medium" src="https://d3vv6lp55qjaqc.cloudfront.net/items/0B2s330z3y051t101E08/Image%202018-05-04%20at%201.49.09%20p.%20m..png?v=d71eb6e2" width="741" height="389" /></p>
<p><strong>Paso 1</strong></p>
<p>Copiar el archivo <strong>lazyflasher-no-verity-opt-encrypt.zip</strong> y el ZIP de <strong>Super SU (ZIP)</strong> en la raiz de nuestra memoria en el teléfino, Descomprimir Mi Unlock, iniciar el teléfono en modo fastboot (Vol &#8211; y Power) conectar vía USB y seguir los pasos de la aplicación Mi Unlock</p>
<p><strong>Paso 2</strong></p>
<p>Teniendo el teléfono en modo fastboot debes colocar el siguiente comando:</p>
<pre class="EnlighterJSRAW" data-enlighter-language="shell">fastboot flash recovery twrp-nombrearchivo.img</pre>
<p><strong>Paso 3</strong></p>
<p>Iniciar modo recovery TWRP (Power Vol + y Power) y desde allí ir al apartado de instalación e instalar <strong>lazyflasher-no-verity-opt-encrypt.zip</strong> y el ZIP de <strong>Super SU (ZIP).</strong></p>
<p><strong>Paso 4</strong></p>
<p>Disfrutar de los poderes root</p>
<p>Si tienes algún problema durante el proceso o el teléofno no inicia deberás reinstalar todo el sistema operativo del teléfono, para ello debes descomprimir todos los archivos descargados para «★ Redmi Note 4 Qualcomm Latest Global Stable Version Fastboot File Download» abrir la App MIUI ROM Flashing Tool y teniendo el teléfono en modo Fastboot debemos buscar la ruta de los archivos que hemos descomprimido e iniciar dede la App la restauración.</p>
<p style="text-align: center;"><img loading="lazy" decoding="async" class="aligncenter size-medium" src="https://i.imgur.com/OcRJAQ8.jpg" alt="recovery" width="775" height="324" /></p>
]]></content:encoded>
					
					<wfw:commentRss>https://jhosman.com/c73-android/c52-laboratorio3/hacer-root-en-xiaomi-redmi-note-4-version-global-qualcomm/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<media:content medium="image" url="https://i.imgur.com/ZLDHQr3.jpg"/>
            <post-id xmlns="com-wordpress:feed-additions:1">965</post-id>	</item>
		<item>
		<title>Instalar Android Oreo (Testing) en Xiaomi A1</title>
		<link>https://jhosman.com/c73-android/c52-laboratorio3/instalar-android-oreo-testing-en-xiaomi-a1/</link>
					<comments>https://jhosman.com/c73-android/c52-laboratorio3/instalar-android-oreo-testing-en-xiaomi-a1/#respond</comments>
		
		<dc:creator><![CDATA[Jhosman]]></dc:creator>
		<pubDate>Fri, 15 Dec 2017 17:17:41 +0000</pubDate>
				<category><![CDATA[Laboratorio]]></category>
		<guid isPermaLink="false">https://jhosman.com/?p=958</guid>

					<description><![CDATA[DISCLAIMER: No me hago responsable por los daños que pueda tener tu teléfono o brickeos, esto lo harás bajo tu responsabilidad La instalación es muy sencilla, necesitamos lo siguiente: Tener instalado adb y fastboot en nuestro equipo Archivos necesarios, incluye: bootloader, Android Oreo for Xiaomi A1 y Recuperación de sistema Stock ROM by Xiaomi: https://goo.gl/c7JUP6 [&#8230;]]]></description>
										<content:encoded><![CDATA[<p style="text-align: center;"><img loading="lazy" decoding="async" class="aligncenter size-medium" src="https://i.imgur.com/HQCGkwk.jpg" alt="Android One" width="1200" height="675" /></p>
<p style="text-align: center;"><span style="color: #ff0000;"><em><strong>DISCLAIMER</strong>: No me hago responsable por los daños que pueda tener tu teléfono o brickeos, esto lo harás bajo tu responsabilidad</em></span></p>
<p><span style="color: #000000;">La instalación es muy sencilla, necesitamos lo siguiente:</span></p>
<ol>
<li>Tener instalado adb y fastboot en nuestro equipo</li>
<li>Archivos necesarios, incluye: bootloader, Android Oreo for Xiaomi A1 y Recuperación de sistema Stock ROM by Xiaomi: <a href="https://goo.gl/c7JUP6" target="_blank" rel="noopener">https://goo.gl/c7JUP6</a></li>
</ol>
<p>Para iniciar recomiendo tomar backup de TODA la información que tengas en el teléfono, descomprimir la carpeta que está en el link anterior y navegamos por shell o cmd hasta dicha carpeta, una vez realizado esto ponemos el teléfono en modo fastboot (Power y Vol &#8211; por 5 segundos) una vez conectado por USB colocamos los siguientes comandos:</p>
<pre class="EnlighterJSRAW" data-enlighter-language="shell">fastboot oem unlock
fastboot boot recovery-3.1.1-1.img</pre>
<p>Luego de estar dentro del TWRP debes seguir <strong>TODOS</strong> los siguientes pasos:</p>
<ul>
<li>Seleccionar la opción de backup y hacer backup de la partición mas pequeña</li>
<li>Copiar y pegar (desde el PC) la carpeta (archivo bajado anteriormente) <em><strong>[UNNOFICIAL] AOSP OREO &#8211; tissot  </strong></em>dentro de la ruta TWRP/Backup/ipdelbackup/ (del celular) y eliminar el archivo que esté antes de copiar nuestro nuevo directorio (en el celular)</li>
<li>Regresar al inicio del TWRP y hacer Wipe a: Data, System, Caché</li>
<li>Regresar al inicio y restaurar <em><strong>[UNNOFICIAL] AOSP OREO &#8211; tissot</strong></em></li>
<li>Disfrutar Android Oreo <em>-Es posible que el boot tome algunos minutos, si va mas de 10 minutos y no inicia, forzar el reinicio manualmente &#8211;</em></li>
</ul>
<p><figure style="width: 738px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" class="size-medium" src="https://i.imgur.com/Rcc3v0s.jpg" alt="Android Oreo" width="738" height="410" /><figcaption class="wp-caption-text">Enjoy!</figcaption></figure></p>
<p>&nbsp;</p>
<blockquote class="instagram-media" style="background: #FFF; border: 0; border-radius: 3px; box-shadow: 0 0 1px 0 rgba(0,0,0,0.5),0 1px 10px 0 rgba(0,0,0,0.15); margin: 1px; max-width: 658px; padding: 0; width: calc(100% - 2px);" data-instgrm-captioned="" data-instgrm-permalink="https://www.instagram.com/p/Bctfi3tAbJY/" data-instgrm-version="8">
<div style="padding: 8px;">
<div style="background: #F8F8F8; line-height: 0; margin-top: 40px; padding: 62.5% 0; text-align: center; width: 100%;">
<div style="background: url(data:image/png; base64,ivborw0kggoaaaansuheugaaacwaaaascamaaaapwqozaaaabgdbtueaalgpc/xhbqaaaafzukdcak7ohokaaaamuexurczmzpf399fx1+bm5mzy9amaaadisurbvdjlvzxbesmgces5/p8/t9furvcrmu73jwlzosgsiizurcjo/ad+eqjjb4hv8bft+idpqocx1wjosbfhh2xssxeiyn3uli/6mnree07uiwjev8ueowds88ly97kqytlijkktuybbruayvh5wohixmpi5we58ek028czwyuqdlkpg1bkb4nnm+veanfhqn1k4+gpt6ugqcvu2h2ovuif/gwufyy8owepdyzsa3avcqpvovvzzz2vtnn2wu8qzvjddeto90gsy9mvlqtgysy231mxry6i2ggqjrty0l8fxcxfcbbhwrsyyaaaaaelftksuqmcc); display: block; height: 44px; margin: 0 auto -44px; position: relative; top: -22px; width: 44px;"></div>
</div>
<p style="margin: 8px 0 0 0; padding: 0 4px;"><a style="color: #000; font-family: Arial,sans-serif; font-size: 14px; font-style: normal; font-weight: normal; line-height: 17px; text-decoration: none; word-wrap: break-word;" href="https://www.instagram.com/p/Bctfi3tAbJY/" target="_blank" rel="noopener">Listo #AndroidOreo #XiaomiA1</a></p>
<p style="color: #c9c8cd; font-family: Arial,sans-serif; font-size: 14px; line-height: 17px; margin-bottom: 0; margin-top: 8px; overflow: hidden; padding: 8px 0 7px; text-align: center; text-overflow: ellipsis; white-space: nowrap;">Una publicación compartida de <a style="color: #c9c8cd; font-family: Arial,sans-serif; font-size: 14px; font-style: normal; font-weight: normal; line-height: 17px;" href="&lt;Macro 'profile_link'&gt;" target="_blank" rel="noopener"> Jhosman Lizarazo</a> (@namsohj) el <time style="font-family: Arial,sans-serif; font-size: 14px; line-height: 17px;" datetime="2017-12-15T05:16:45+00:00">14 de Dic de 2017 a la(s) 9:16 PST</time></p>
</div>
</blockquote>
<p><script async defer src="//platform.instagram.com/en_US/embeds.js"></script></p>
]]></content:encoded>
					
					<wfw:commentRss>https://jhosman.com/c73-android/c52-laboratorio3/instalar-android-oreo-testing-en-xiaomi-a1/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<media:content medium="image" url="https://jhosman.com/wp-content/uploads/2017/12/ap_resize.php_.png"/>
            <post-id xmlns="com-wordpress:feed-additions:1">958</post-id>	</item>
		<item>
		<title>Problemas de adoptar mascotas en Colombia</title>
		<link>https://jhosman.com/c70-ocio/c31-general17/problemas-de-adoptar-mascotas-en-colombia/</link>
					<comments>https://jhosman.com/c70-ocio/c31-general17/problemas-de-adoptar-mascotas-en-colombia/#comments</comments>
		
		<dc:creator><![CDATA[Jhosman]]></dc:creator>
		<pubDate>Mon, 21 Aug 2017 12:36:35 +0000</pubDate>
				<category><![CDATA[General]]></category>
		<guid isPermaLink="false">https://jhosman.com/?p=954</guid>

					<description><![CDATA[Así de simple como lo indica el título, por culpa de los animalistas que buscan un palacio 5 estrellas para los peluditos sin hogar, es que muchos de estos animalitos se quedan sin hogar. Si bien es cierto que no está bien que la gente compre mascotas para tener en su hogar, mal hacen estas [&#8230;]]]></description>
										<content:encoded><![CDATA[<p style="text-align: center;"><img loading="lazy" decoding="async" class="alignnone size-medium" src="http://www.kmikze.com/3546-large_default/no-compres-adopta.jpg" width="458" height="458" /></p>
<p>Así de simple como lo indica el título, por culpa de los animalistas que buscan un palacio 5 estrellas para los peluditos sin hogar, es que muchos de estos animalitos se quedan sin hogar.</p>
<p>Si bien es cierto que no está bien que la gente compre mascotas para tener en su hogar, mal hacen estas personas poniendo tantas trabas para poder adoptar a una mascota, por lo cual les cuento he querido adoptar a una mascota donde la verdad es mas fácil sacar un crédito en un banco por unos COP $200.000.000 que poder tomar y darle un buen hogar a un animal sin casa.</p>
<p>Las trabas inician desde que realizas contacto con quien da en adopción al animal donde te preguntan:</p>
<ul>
<li>Donde vives?</li>
<li>En que trabajas?</li>
<li>Ganas bien?</li>
</ul>
<p>Bueno, estas preguntas realmente las hace un bando, y si uno está buscando una mascota de manera responsable es por que cumple estos tres primeros pasos, si bien es cierto que no todos pueden cumplir por lo menos lo del dinero para poder mantener a un animalito de esto, es muy odioso de parte de estas personas denigrar a una persona por su condición de vida, sus finanzas etc.</p>
<p>Les cuento si buscan a un animalito y cumplen las dos últimas partes, pero para la primera es que vives por ejemplo al sur de Bogotá o al Occidente o zonas donde hay mucha población no de darán nada en adopción, y si buscas alguna raza en especial peor, por que lo primero que piensan ellos es que buscas para sacarles crias y venderlas, personalmente quien piensa así realmente es por que tiene una mente retorcida. El cuento es que el proceso para adoptar es:</p>
<ul>
<li>Debes llenar un formulario donde entregas el 100% de tus datos personales que deben ser 100% verídicos a una persona que ni conoces, con tu dirección, teléfonos, datos de personas reales cercanas a tí (aquí ya se está vulnerando el derecho a la privacidad) este proceso lo hacen con unas 20 personas y quien sabe que harán con esta información</li>
<li>El segundo paso es que si pasas el primer filtro (cumples los 3 primeros puntos &#8211; vives en un palacio-) deciden hacerte una visita para ver donde va a estar el animalito, en este punto me parece mas grave aún por que si ya estás en un palacio excelente para el animal, un tercero (que ni conoces) debe visitar tu casa y esperar a que no pase nada extraño, esto mismo lo hacen con todos los que pasaron el filtro.</li>
<li>Finalmente si vives prácticamente en el palacio de Nariño te entregan en animal con mas condiciones a futuro que mejor ni les cuento.</li>
</ul>
<p>Ahora bien, si medio cumples las condiciones pero vives en una zona con mucha población te dicen que mejor adoptes otro tipo de perro o gato que no estás buscando, como si esos no se mereciera vivir en los palacios que ellos buscan. Si por suerte te dan en adopción el animalito a cambio de piden que les compres un bulto de comida en tiendas de ellos, o en veterinarias de ellos los mandes a esterilizar o les hagas exámenes (mercado negro, de lo cual me abstengo de comentarios)</p>
<p>La historia viene a que por surte y mucha dedicación logré dar con una persona que no es odiosa, piensa en la vida y futuro de los animales quien de manera responsable me dio en adopción una Beagle que por cierto se recibió en condición de esterilizar de manera inmediata (que debe ser lo mínimo que se debe exigir) y ahora goza de una excelente vida, se recupera de lesiones que tenía en sus patas traseras por posible maltrato de sus dueños anteriores y ella es feliz ahora. Se entregó en adopción sin problema alguno, sin pasar un proceso mas tedioso que un préstamo en un banco y se le pudo dar un hogar digno para esta orejona. Este post es un llamado a esos animalistas que dan en adopción mascotas, que ni pueden mantener por la cantidad que tienen, no sean odiosos, piensen en los animalitos y denles la oportunidad de una vida diferente.</p>
<p>&nbsp;</p>
<p><img loading="lazy" decoding="async" class="alignnone size-medium" src="http://i.imgur.com/7lxt6Eb.jpg" width="1280" height="960" /></p>
<p>Ella es Anny, una beagle que necesitaba urgente un hogar, alguien que le diera cariño y buena vida, ahora está en nuestro hogar y está feliz. Tiene aproximadamente un año de vida, es muy noble.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://jhosman.com/c70-ocio/c31-general17/problemas-de-adoptar-mascotas-en-colombia/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
		<media:content medium="image" url="https://i0.wp.com/i.imgur.com/7lxt6Eb.jpg"/>
            <post-id xmlns="com-wordpress:feed-additions:1">954</post-id>	</item>
		<item>
		<title>Tutorial para dummines en AliExpress</title>
		<link>https://jhosman.com/c70-ocio/c28-interesante/tutorial-para-dummines-en-aliexpress/</link>
					<comments>https://jhosman.com/c70-ocio/c28-interesante/tutorial-para-dummines-en-aliexpress/#respond</comments>
		
		<dc:creator><![CDATA[Jhosman]]></dc:creator>
		<pubDate>Sat, 08 Apr 2017 19:26:58 +0000</pubDate>
				<category><![CDATA[Interesante]]></category>
		<guid isPermaLink="false">https://jhosman.com/?p=940</guid>

					<description><![CDATA[Aquí encontrarás respuestas a todas tus preguntas, lee antes de cualquier cosa. Como pagar en AliExpress Como rastrear mi envío de AliExpress Como comprar de manera segura en AliExpress Proceso de entrega de pedidos en Colombia Puedo comprar Celulares en AliExpress? Si mi pedido nunca llegó a Colombia o no lo recibí por parte de la [&#8230;]]]></description>
										<content:encoded><![CDATA[<p style="text-align: center;"><img loading="lazy" decoding="async" class="alignnone size-medium" src="https://d3dr1ze7164817.cloudfront.net/items/3G0n2P3W3q1j201x1U2n/Image%202017-04-08%20at%202.25.38%20p.m..png?v=104bf4c2" width="993" height="357" /></p>
<p>Aquí encontrarás respuestas a todas tus preguntas, lee antes de cualquier cosa.</p>
<ul>
<li><a href="http://telegra.ph/Pagar-en-Aliexpress-04-08" target="_blank" rel="noopener noreferrer">Como pagar en AliExpress</a></li>
<li><a href="http://telegra.ph/Como-rastreo-mi-envio-desde-AliExpress-04-08" target="_blank" rel="noopener noreferrer">Como rastrear mi envío de AliExpress</a></li>
<li><a href="http://telegra.ph/Como-comprar-de-manera-segura-en-AliExpress-04-08" target="_blank" rel="noopener noreferrer">Como comprar de manera segura en AliExpress</a></li>
<li><a href="http://telegra.ph/Proceso-de-entrega-de-pedidos-en-Colombia-04-08" target="_blank" rel="noopener noreferrer">Proceso de entrega de pedidos en Colombia</a></li>
<li><a href="http://telegra.ph/Puedo-comprar-Celulares-en-AliExpress-04-08" target="_blank" rel="noopener noreferrer">Puedo comprar Celulares en AliExpress?</a></li>
<li>Si mi pedido nunca llegó a Colombia o no lo recibí por parte de la Tienda de AliExpress que hago?</li>
</ul>
]]></content:encoded>
					
					<wfw:commentRss>https://jhosman.com/c70-ocio/c28-interesante/tutorial-para-dummines-en-aliexpress/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<media:content medium="image" url="https://i.imgur.com/bpV6KVY.jpg"/>
            <post-id xmlns="com-wordpress:feed-additions:1">940</post-id>	</item>
		<item>
		<title>Como probar las llamadas de Telegram en Android</title>
		<link>https://jhosman.com/c73-android/c67-mensajeria-instantanea/como-probar-las-llamadas-de-telegram-en-android/</link>
					<comments>https://jhosman.com/c73-android/c67-mensajeria-instantanea/como-probar-las-llamadas-de-telegram-en-android/#respond</comments>
		
		<dc:creator><![CDATA[Jhosman]]></dc:creator>
		<pubDate>Tue, 14 Mar 2017 13:44:51 +0000</pubDate>
				<category><![CDATA[Mensajería Instantánea]]></category>
		<guid isPermaLink="false">https://jhosman.com/?p=930</guid>

					<description><![CDATA[Recientemente telegram ha abierto su programa Beta para realizar llamadas mediante la App, pero estas pruebas son cerradas para cierta cantidad de usuarios, para realizar la prueba de llamadas es necesario lo siguiente: Bajar la versión Beta de telegram: telegram.me/betatest_tg Abrir la App «Telegram Beta» Iniciar sesión con tu cuenta de telegram Ir a ajustes y pulsar [&#8230;]]]></description>
										<content:encoded><![CDATA[<p><img decoding="async" src="http://i.imgur.com/iBPLwsJ.jpg" alt="Telegram" /><br />
Recientemente telegram ha abierto su programa Beta para realizar llamadas mediante la App, pero estas pruebas son cerradas para cierta cantidad de usuarios, para realizar la prueba de llamadas es necesario lo siguiente:</p>
<ol>
<li>Bajar la versión Beta de telegram: <a href="http://telegram.me/betatest_tg">telegram.me/betatest_tg</a></li>
<li>Abrir la App «Telegram Beta»</li>
<li>Iniciar sesión con tu cuenta de telegram</li>
<li>Ir a ajustes y pulsar «Switch Backend», confirma y se reinicia la sesion</li>
<li>Volver a poner el número y código de confirmación. Con esto verás todo vacío en tu chat por que te encuentras en el servidor en pruebas de telegram, y para probar la llamada con alguien requiere que tenga alias en ese servidor debes crearte un @ en la configuración de Telegram Beta, la otra persona debe tener telegram beta y hacer lo mismo.</li>
<li>Llamar! 😀</li>
</ol>
<p>Estas son capturas de pantallas de las llamadas funcionando dale en las flechas para cambiar la imagen.</p>
<blockquote class="imgur-embed-pub" lang="en" data-id="a/AIBA8"><p><a href="//imgur.com/AIBA8"></a></p></blockquote>
<p><script async src="//s.imgur.com/min/embed.js" charset="utf-8"></script></p>
]]></content:encoded>
					
					<wfw:commentRss>https://jhosman.com/c73-android/c67-mensajeria-instantanea/como-probar-las-llamadas-de-telegram-en-android/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<media:content medium="image" url="https://jhosman.com/wp-content/uploads/2017/03/iBPLwsJ.jpg"/>
            <post-id xmlns="com-wordpress:feed-additions:1">930</post-id>	</item>
		<item>
		<title>Telegram tendría pronto llamadas por VoIP</title>
		<link>https://jhosman.com/c70-ocio/c31-general17/telegram-tendria-pronto-llamadas-por-voip/</link>
					<comments>https://jhosman.com/c70-ocio/c31-general17/telegram-tendria-pronto-llamadas-por-voip/#respond</comments>
		
		<dc:creator><![CDATA[Jhosman]]></dc:creator>
		<pubDate>Tue, 17 Jan 2017 14:30:51 +0000</pubDate>
				<category><![CDATA[General]]></category>
		<guid isPermaLink="false">https://jhosman.com/?p=925</guid>

					<description><![CDATA[Varios usuarios de Twitter le han preguntado al creador de telegram por esta funcionalidad vía Twitter y el ha respondido solo «Lo haremos» sin dar mas detalles: &#160; @adinhorman9 Hey there. Thanks. We will. — Pavel Durov (@durov) 13 de enero de 2017 Solo nos quedará esperar a que se cumpla este gran sueño!]]></description>
										<content:encoded><![CDATA[<p style="text-align: center;"><img loading="lazy" decoding="async" class="alignnone size-medium" src="https://i.imgur.com/HIDoQE3.jpg" width="320" height="320" /></p>
<p>Varios usuarios de Twitter le han preguntado al creador de telegram por esta funcionalidad vía Twitter y el ha respondido solo «Lo haremos» sin dar mas detalles:</p>
<p>&nbsp;</p>
<blockquote class="twitter-tweet" data-lang="es">
<p dir="ltr" lang="en"><a href="https://twitter.com/adinhorman9">@adinhorman9</a> Hey there. Thanks. We will.</p>
<p>— Pavel Durov (@durov) <a href="https://twitter.com/durov/status/819987125953318912">13 de enero de 2017</a></p></blockquote>
<p><script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script></p>
<p>Solo nos quedará esperar a que se cumpla este gran sueño!</p>
]]></content:encoded>
					
					<wfw:commentRss>https://jhosman.com/c70-ocio/c31-general17/telegram-tendria-pronto-llamadas-por-voip/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<media:content medium="image" url="https://jhosman.com/wp-content/uploads/2017/01/HIDoQE3.jpg"/>
            <post-id xmlns="com-wordpress:feed-additions:1">925</post-id>	</item>
	</channel>
</rss>