<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="es"><generator uri="https://jekyllrb.com/" version="4.2.2 (Sutty)">Jekyll</generator><link href="https://smup.sutty.nl/feed.xml" rel="self" type="application/atom+xml" /><link href="https://smup.sutty.nl/" rel="alternate" type="text/html" hreflang="es" /><updated>2024-11-04T09:26:44+00:00</updated><id>https://smup.sutty.nl/feed.xml</id><title type="html">Secretos que Mienten un Poco</title><subtitle>Sitio que busca conectar la lírica del Indio con nuestro presente, para explicar lo que nos pasa a las personas de a pié en este día y cada día.</subtitle><entry><title type="html">Texto 2 - ¿Por qué luchamos?</title><link href="https://smup.sutty.nl/2024/11/04/texto-2-por-qu%C3%A9-luchamos.html" rel="alternate" type="text/html" title="Texto 2 - ¿Por qué luchamos?" /><published>2024-11-04T00:00:00+00:00</published><updated>2024-11-04T09:26:29+00:00</updated><id>https://smup.sutty.nl/2024/11/04/texto-2-por-qu%C3%A9-luchamos</id><content type="html" xml:base="https://smup.sutty.nl/2024/11/04/texto-2-por-qu%C3%A9-luchamos.html"><![CDATA[<p style="text-align:start">Luchamos porque soñamos con cosas que no tenemos.</p>
<p style="text-align:start">Luchamos porque nos quitan las pocas cosas que tenemos.</p>
<p style="text-align:start">Luchamos porque tenemos Madres que nos enseñaron a luchar.</p>
<p style="text-align:start">Luchamos para terminar con todas las desigualdades.</p>
<p style="text-align:start">Luchamos para conquistar todos los derechos.</p>
<p style="text-align:start">Luchamos para romper las paredes y construir puentes.</p>
<p style="text-align:start">Luchamos por los que ya no están y por los que van a venir.</p>
<p style="text-align:start">Luchamos porque nos quedamos sin fuerzas para luchar.</p>
<p style="text-align:start">Luchamos por la libertad para todos y no por la libertad para unos pocos.</p>
<p style="text-align:start">Luchamos porque los pocos cada vez tienen más y los muchos cada vez tenemos menos.</p>
<p style="text-align:start">Luchamos porque de donde venimos nacimos luchando.</p>
<p style="text-align:start">Luchamos porque la única lucha que se pierde es la que no se lucha.</p>
<p style="text-align:start">Luchamos porque como decía el Che, nacimos para vencer y no para ser vencimos.</p>]]></content><author><name></name></author><summary type="html"><![CDATA[Luchamos porque soñamos con cosas que no tenemos. Luchamos porque nos quitan las pocas cosas que tenemos. Luchamos porque tenemos Madres que nos enseñaron a luchar. Luchamos para terminar con todas las desigualdades. Luchamos para conquistar todos los derechos. Luchamos para romper las paredes y construir puentes. Luchamos por los que ya no están y por los que van a venir. Luchamos porque nos quedamos sin fuerzas para luchar. Luchamos por la libertad para todos y no por la libertad para unos pocos. Luchamos porque los pocos cada vez tienen más y los muchos cada vez tenemos menos. Luchamos porque de donde venimos nacimos luchando. Luchamos porque la única lucha que se pierde es la que no se lucha. Luchamos porque como decía el Che, nacimos para vencer y no para ser vencimos.]]></summary></entry><entry><title type="html">Texto 1 - La Distancia</title><link href="https://smup.sutty.nl/2024/10/29/poema-1-la-distancia.html" rel="alternate" type="text/html" title="Texto 1 - La Distancia" /><published>2024-10-29T00:00:00+00:00</published><updated>2024-10-29T09:49:03+00:00</updated><id>https://smup.sutty.nl/2024/10/29/poema-1-la-distancia</id><content type="html" xml:base="https://smup.sutty.nl/2024/10/29/poema-1-la-distancia.html"><![CDATA[<p style="text-align:start">Transitamos espacios y tiempos que construimos juntos.</p>
<p style="text-align:start">Construimos juntos presentes y futuros que se dibujan en cada uno de los caminos que recorremos.</p>
<p style="text-align:start">Recorremos caminos que por momentos se juntan y por momentos se dividen.</p>
<p style="text-align:start">Cuando se juntan nuestros caminos construimos lugares, habitamos tiempos y espacios, hacemos puentes que nos dejan transitar por espacios que otros construyen.</p>
<p style="text-align:start">Cuando se dividen nuestros caminos, nos topamos con grietas que no nos dejan avanzar.</p>
<p style="text-align:start">Cuando nos topamos con grietas, nos olvidamos cuales son los caminos que nos llevan a los caminos que transitamos juntos.</p>
<p style="text-align:start">Cuando olvidamos, algo se muere de a poco.</p>]]></content><author><name></name></author><summary type="html"><![CDATA[Transitamos espacios y tiempos que construimos juntos. Construimos juntos presentes y futuros que se dibujan en cada uno de los caminos que recorremos. Recorremos caminos que por momentos se juntan y por momentos se dividen. Cuando se juntan nuestros caminos construimos lugares, habitamos tiempos y espacios, hacemos puentes que nos dejan transitar por espacios que otros construyen. Cuando se dividen nuestros caminos, nos topamos con grietas que no nos dejan avanzar. Cuando nos topamos con grietas, nos olvidamos cuales son los caminos que nos llevan a los caminos que transitamos juntos. Cuando olvidamos, algo se muere de a poco.]]></summary></entry><entry><title type="html">Apuntes Python</title><link href="https://smup.sutty.nl/2024/10/09/apuntes-python.html" rel="alternate" type="text/html" title="Apuntes Python" /><published>2024-10-09T00:00:00+00:00</published><updated>2024-10-09T08:20:19+00:00</updated><id>https://smup.sutty.nl/2024/10/09/apuntes-python</id><content type="html" xml:base="https://smup.sutty.nl/2024/10/09/apuntes-python.html"><![CDATA[<h5 style="text-align:start" id="variables"><mark style="color:inherit;background-color:#ffbe6f">Variables</mark></h5>
<p style="text-align:start">Una variable es un nombre que se refiere a un valor.</p>
<blockquote class="blockquote">
  <p style="text-align:start">mensaje = 'Y ahora algo completamente diferente'</p>
  <p style="text-align:start">n = 17</p>
  <p style="text-align:start">pi = 3.1415926535897931</p>
  <p style="text-align:start">verdadero = True</p>
</blockquote>
<p style="text-align:start">El tipo de una variable es el tipo del valor al que se refiere y se asigna de forma dinámica al darle valor a la variable en su declaración.</p>
<blockquote class="blockquote">
  <p style="text-align:start">type(mensaje)</p>
  <p style="text-align:start"></p>
  <p style="text-align:start">type(n)</p>
  <p style="text-align:start"></p>
  <p style="text-align:start">type(pi)</p>
  <p style="text-align:start"></p>
</blockquote>
<p style="text-align:start">Los nombres de las variables pueden ser arbitrariamente largos. Pueden contener tanto letras como números, pero no pueden comenzar con un número. Se pueden usar letras mayúsculas, pero es buena idea comenzar los nombres de las variables con una letras minúscula (veremos por qué más adelante). El carácter guión bajo (_) puede utilizarse en un nombre. A menudo se utiliza en nombres con múltiples palabras, como en</p>
<p style="text-align:start">mi_nombre o velocidad_de_golondrina_sin_carga.</p>
<p style="text-align:start">El intérprete usa palabras clave para reconocer la estructura del programa, y esas palabras no pueden ser utilizadas como nombres de variables. Python reserva 33 palabras claves para su propio uso:</p>
<blockquote class="blockquote">
  <p style="text-align:start">and</p>
  <p style="text-align:start">as</p>
  <p style="text-align:start">assert</p>
  <p style="text-align:start">break</p>
  <p style="text-align:start">class</p>
  <p style="text-align:start">continue</p>
  <p style="text-align:start">def</p>
  <p style="text-align:start">del</p>
  <p style="text-align:start">elif</p>
  <p style="text-align:start">else</p>
  <p style="text-align:start">except</p>
  <p style="text-align:start">False</p>
  <p style="text-align:start">finally</p>
  <p style="text-align:start">for</p>
  <p style="text-align:start">from</p>
  <p style="text-align:start">global</p>
  <p style="text-align:start">if</p>
  <p style="text-align:start">import</p>
  <p style="text-align:start">in</p>
  <p style="text-align:start">is</p>
  <p style="text-align:start">lambda</p>
  <p style="text-align:start">None</p>
  <p style="text-align:start">nonlocal</p>
  <p style="text-align:start">not</p>
  <p style="text-align:start">or</p>
  <p style="text-align:start">pass</p>
  <p style="text-align:start">raise</p>
  <p style="text-align:start">return</p>
  <p style="text-align:start">True</p>
  <p style="text-align:start">try</p>
  <p style="text-align:start">while</p>
  <p style="text-align:start">with</p>
  <p style="text-align:start">yield</p>
</blockquote>
<p style="text-align:start"></p>
<p style="text-align:start"><mark style="color:inherit;background-color:#ffbe6f">Sentencias</mark></p>
<p style="text-align:start">Una sentencia es una unidad de código que el intérprete de Python puede ejecutar. Hemos visto hasta ahora dos tipos de sentencia: print y las asignaciones. Cuando escribes una sentencia en modo interactivo, el intérprete la ejecuta y muestra el resultado, si es que lo hay. Un script normalmente contiene una secuencia de sentencias. Si hay más de una sentencia, los resultados aparecen de uno en uno según se van ejecutando las sentencias.</p>
<p style="text-align:start">Por ejemplo, el script</p>
<blockquote class="blockquote">
  <p style="text-align:start">print(1)</p>
  <p style="text-align:start">x = 2</p>
  <p style="text-align:start">print(x)</p>
</blockquote>
<p style="text-align:start">Produce la salida</p>
<blockquote class="blockquote">
  <p style="text-align:start">1</p>
  <p style="text-align:start">2</p>
</blockquote>
<p style="text-align:start"></p>
<p style="text-align:start"><mark style="color:inherit;background-color:#ffbe6f">Operadores y operandos</mark></p>
<p style="text-align:start">Los operadores son símbolos especiales que representan cálculos, como la suma o la multiplicación. Los valores a los cuales se aplican esos operadores reciben el nombre de operandos. Los operadores +, -, *, /, y ** realizan sumas, restas, multiplicaciones, divisiones y exponenciación (elevar un número a una potencia), como se muestra en los ejemplos siguientes:</p>
<blockquote class="blockquote">
  <p style="text-align:start">20+32</p>
  <p style="text-align:start">hour-1</p>
  <p style="text-align:start">hour*60+minute</p>
  <p style="text-align:start">minute/60</p>
  <p style="text-align:start">5**2</p>
</blockquote>
<p style="text-align:start"><strong>Divisón entera en Python3</strong></p>
<p style="text-align:start">63//60</p>
<p style="text-align:start">1</p>
<p style="text-align:start"><strong>Módulo obtiene el resto de una división</strong></p>
<p style="text-align:start">63%60</p>
<p style="text-align:start">3</p>
<p style="text-align:start">El operador módulo resulta ser sorprendentemente útil. Por ejemplo, puedes comprobar si un número es divisible por otro si x % y es cero, entonces x es divisible por y.</p>
<p style="text-align:start">O para saber si un númeor es par o impar</p>
<p style="text-align:start">if x%2 == 0 :</p>
<p style="text-align:start">	print('x es par')</p>
<p style="text-align:start">else :</p>
<p style="text-align:start">	print('x es impar')</p>
<p style="text-align:start"></p>
<p style="text-align:start"><mark style="color:inherit;background-color:#ffbe6f">Operaciones con cadenas</mark></p>
<p style="text-align:start">El operador + funciona con las cadenas, pero no realiza una suma en el sentido matemático. En vez de eso, realiza una concatenación, que quiere decir que une ambas cadenas, enlazando el final de la primera con el principio de la segunda. Por ejemplo:</p>
<blockquote class="blockquote">
  <p style="text-align:start">primero = 10</p>
  <p style="text-align:start">segundo = 15</p>
  <p style="text-align:start">¿print(primero+segundo)</p>
  <p style="text-align:start">25</p>
  <p style="text-align:start">primero = '100'</p>
  <p style="text-align:start">segundo = '150'</p>
  <p style="text-align:start">print(primero + segundo)</p>
  <p style="text-align:start">100150</p>
</blockquote>
<p style="text-align:start"></p>
<p style="text-align:start"><mark style="color:inherit;background-color:#ffbe6f">Petición de información al usuario</mark></p>
<p style="text-align:start">A veces necesitaremos que sea el usuario quien nos proporcione el valor para una variable, a través del teclado. Python proporciona una función interna llamada input que recibe la entrada desde el teclado. Cuando se llama a esa función, el programa se detiene y espera a que el usuario escriba algo. Cuando el usuario pulsa Retorno o Intro, el programa continúa y input devuelve como una cadena aquello que el usuario escribió.</p>
<blockquote class="blockquote">
  <p style="text-align:start">entrada = input()</p>
  <p style="text-align:start">Cualquier cosa</p>
  <p style="text-align:start">print(entrada)</p>
  <p style="text-align:start">Cualquier cosa</p>
</blockquote>
<p style="text-align:start"></p>
<p style="text-align:start"><mark style="color:inherit;background-color:#ffbe6f">Comentarios</mark></p>
<p style="text-align:start"># calcula el porcentaje de hora transcurrido</p>
<p style="text-align:start">porcentaje = (minuto * 100) / 60</p>
<p style="text-align:start"></p>
<p style="text-align:start"><mark style="color:inherit;background-color:#ffbe6f">Ejecución condicional</mark></p>
<p style="text-align:start"><strong>Expresiones booleanas</strong></p>
<p style="text-align:start">Una expresión booleana es aquella que puede ser verdadera (True) o falsa (False) y se usan para las expresiones condicionales.</p>
<p style="text-align:start">&gt;&gt;&gt; 5 == 5</p>
<p style="text-align:start">True</p>
<p style="text-align:start">&gt;&gt;&gt; 5 == 6</p>
<p style="text-align:start">False</p>
<p style="text-align:start"><strong>Operadores de comparación</strong></p>
<p style="text-align:start">x != y		# x es distinto de y</p>
<p style="text-align:start">x &gt; y		# x es mayor que y</p>
<p style="text-align:start">x &lt; y		# x es menor que y</p>
<p style="text-align:start">x &gt;= y		# x es mayor o igual que y</p>
<p style="text-align:start">x &lt;= y		# x es menor o igual que y</p>
<p style="text-align:start">x is y		# x es lo mismo que y</p>
<p style="text-align:start">x is not y	# x no es lo mismo que y</p>
<p style="text-align:start"><strong>Operadores lógicos</strong></p>
<p style="text-align:start">Existen tres operadores lógicos: and (y), or (o), y not (no). El significado semántico de estas operaciones es similar a su significado en inglés. Por ejemplo, x &gt; 0 and x &lt; 10</p>
<p style="text-align:start">es verdadero sólo cuando x es mayor que 0 y menor que 10. Otro ejemplo n%2 == 0 or n%3 == 0 es verdadero si cualquiera de las condiciones es verdadera, es decir, si el número es divisible por 2 o por 3.</p>
<p style="text-align:start">Finalmente, el operador not niega una expresión booleana, de modo que not (x &gt; y) es verdadero si x &gt; y es falso; es decir, si x es menor o igual que y.</p>
<p style="text-align:start">Ejecución condicional completa</p>
<blockquote class="blockquote">
  <p style="text-align:start">if x &lt; y:</p>
  <p style="text-align:start">    print('x es menor que y')</p>
  <p style="text-align:start">elif x &gt; y:</p>
  <p style="text-align:start">    print('x es mayor que y')</p>
  <p style="text-align:start">else:</p>
  <p style="text-align:start">    print('x e y son iguales')</p>
</blockquote>
<p style="text-align:start"></p>
<p style="text-align:start"><mark style="color:inherit;background-color:#ffbe6f">Captura de excepciones usando try y except</mark></p>
<p style="text-align:start">Existen estructuras de ejecución condicional dentro de Python para manejar errores esperados e inesperados, llamadas “try / except”. La idea de try y except es que si se sabe que cierta secuencia de instrucciones puede generar un problema, sea posible añadir ciertas sentencias para que sean ejecutadas en caso de error. Estas sentencias extras (el bloque except) serán ignoradas si no se produce ningún error.</p>
<p style="text-align:start">Supongamos el siguiente código</p>
<blockquote class="blockquote">
  <p style="text-align:start">ent = input('Introduzca la Temperatura Fahrenheit: ')</p>
  <p style="text-align:start">fahr = float(ent)</p>
  <p style="text-align:start">cel = (fahr - 32.0) * 5.0 / 9.0</p>
  <p style="text-align:start">print(cel)</p>
</blockquote>
<p style="text-align:start">A continuación dos posibles ejecusiones:</p>
<blockquote class="blockquote">
  <p style="text-align:start">Introduzca la Temperatura Fahrenheit: <strong>72</strong></p>
  <p style="text-align:start">22.2222222222</p>
  <p style="text-align:start">Introduzca la Temperatura Fahrenheit: <strong>fred</strong></p>
  <p style="text-align:start">Traceback (most recent call last):</p>
  <p style="text-align:start">File "fahren.py", line 2, in </p>
  <p style="text-align:start">fahr = float(ent)</p>
  <p style="text-align:start">ValueError: invalid literal for float(): fred</p>
</blockquote>
<p style="text-align:start">Esto puede resolverse controlando el error de la siguiente manera:</p>
<blockquote class="blockquote">
  <p style="text-align:start">ent = input('Introduzca la Temperatura Fahrenheit:')</p>
  <p style="text-align:start">try:</p>
  <p style="text-align:start">	fahr = float(ent)</p>
  <p style="text-align:start">	cel = (fahr - 32.0) * 5.0 / 9.0</p>
  <p style="text-align:start">	print(cel)</p>
  <p style="text-align:start">except:</p>
  <p style="text-align:start">	print('Por favor, introduzca un número')</p>
</blockquote>
<p style="text-align:start">	</p>
<p style="text-align:start"><mark style="color:inherit;background-color:#ffbe6f">La sentencia while</mark></p>
<p style="text-align:start">Una forma de iteración en Python es la sentencia while. He aquí un programa sencillo que cuenta hacia atrás desde cinco y luego dice “¡Despegue!”.</p>
<blockquote class="blockquote">
  <p style="text-align:start">n = 5</p>
  <p style="text-align:start">while n &gt; 0:</p>
  <p style="text-align:start">	print(n)</p>
  <p style="text-align:start">	n = n - 1</p>
  <p style="text-align:start">print('¡Despegue!')</p>
</blockquote>
<p style="text-align:start">Casi se puede leer la sentencia while como si estuviera escrita en inglés. Significa, “Mientras n sea mayor que 0, muestra el valor de n y luego reduce el valor de n en 1 unidad. Cuando llegues a 0, sal de la sentencia while y muestra la palabra ¡Despegue!”</p>
<p style="text-align:start"><strong>Bucles infinitos y break</strong></p>
<blockquote class="blockquote">
  <p style="text-align:start">while True:</p>
  <p style="text-align:start">	linea = input('&gt; ')</p>
  <p style="text-align:start">	if linea == 'fin':</p>
  <p style="text-align:start">		break</p>
  <p style="text-align:start">	print(linea)</p>
  <p style="text-align:start">print('¡Terminado!')</p>
</blockquote>
<p style="text-align:start"><strong>Finalizar iteraciones con continue</strong></p>
<p style="text-align:start">Algunas veces, estando dentro de un bucle se necesita terminar con la iteración actual y saltar a la siguiente de forma inmediata. En ese caso se puede utilizar la sentencia <strong>continue</strong> para pasar a la siguiente iteración sin terminar la ejecución del cuerpo del bucle para la actual.</p>
<blockquote class="blockquote">
  <p style="text-align:start">while True:</p>
  <p style="text-align:start">	linea = input('&gt; ')</p>
  <p style="text-align:start">	if linea[0] == '#' :</p>
  <p style="text-align:start">		continue</p>
  <p style="text-align:start">	if linea == 'fin':</p>
  <p style="text-align:start">		break</p>
  <p style="text-align:start">	print(linea)</p>
  <p style="text-align:start">print('¡Terminado!')</p>
</blockquote>
<p style="text-align:start"><strong>Bucles definidos usando for</strong></p>
<p style="text-align:start">A veces se desea repetir un bucle a través de un conjunto de cosas, como una lista de palabras, las líneas de un archivo, o una lista de números. Cuando se tiene una lista de cosas para recorrer, se puede construir un bucle definido usando una sentencia for.</p>
<blockquote class="blockquote">
  <p style="text-align:start">amigos = ['Joseph', 'Glenn', 'Sally']</p>
  <p style="text-align:start">for amigo in amigos:</p>
  <p style="text-align:start">	print('Feliz año nuevo:', amigo)</p>
  <p style="text-align:start">print('¡Terminado!')</p>
</blockquote>
<p style="text-align:start"></p>
<p style="text-align:start"><mark style="color:inherit;background-color:#ffbe6f">Funciones</mark></p>
<p style="text-align:start">En el contexto de la programación, una función es una secuencia de sentencias que realizan una operación y que reciben un nombre. Cuando se define una función, se especifica el nombre y la secuencia de sentencias. Más adelante, se puede “llamar” a la función por ese nombre.</p>
<p style="text-align:start">¿Por qué funciones?</p>
<p style="text-align:start">• El crear una función nueva te da la oportunidad de dar nombre a un grupo de sentencias, lo cual hace tu programa más fácil de leer, entender y depurar.</p>
<p style="text-align:start">• Las funciones pueden hacer un programa más pequeño, al eliminar código repetido. Además, si quieres realizar cualquier cambio en el futuro, sólo tendrás que hacerlo en un único lugar.</p>
<p style="text-align:start">• Dividir un programa largo en funciones te permite depurar las partes de una en una y luego ensamblarlas juntas en una sola pieza.</p>
<p style="text-align:start">• Las funciones bien diseñadas a menudo resultan útiles para otros muchos programas. Una vez que has escrito y depurado una, puedes reutilizarla.</p>
<p style="text-align:start">Una definición de función especifica el nombre de una función nueva y la secuencia de sentencias que se ejecutan cuando esa función es llamada.</p>
<p style="text-align:start">Las funciones pueden tener argumentos o parámetros que representan valores que van a ser usados en la lógica de la función.</p>
<p style="text-align:start">Una vez definida una función, se puede reutilizar una y otra vez a lo largo de todo el programa. He aquí un ejemplo de la función que calcula el promedio de dos valores numéricos (parámetros de la función):</p>
<blockquote class="blockquote">
  <p style="text-align:start">def promedio(a,b):</p>
  <p style="text-align:start">	res = (a+b)/2</p>
  <p style="text-align:start">	return res</p>
  <p style="text-align:start">print(promedio(8,10))</p>
</blockquote>
<p style="text-align:start">Las reglas para los nombres de las funciones son los mismos que para las variables: se pueden usar letras, números y algunos signos de puntuación, pero el primer carácter no puede ser un número. No</p>
<p style="text-align:start">se puede usar una palabra clave como nombre de una función, y se debería evitar también tener una variable y una función con el mismo nombre. Los paréntesis vacíos después del nombre indican que esta función no toma ningún argumento o parámetro.</p>
<p style="text-align:start">El número de argumentos y la posición de los mismos es importante.</p>
<p style="text-align:start">Los argumentos de la función también pueden tener valores predeterminados. Estos también son conocidos como argumentos opcionales.</p>
<blockquote class="blockquote">
  <p style="text-align:start">def fav_lenguaje(lenguaje="Python"):</p>
  <p style="text-align:start">	print(f"Mi lenguaje favorito de programación es {lenguaje}!")</p>
  <p style="text-align:start">fav_lenguaje() # Resultado: Mi lenguaje favorito de programación es python!</p>
  <p style="text-align:start">fav_lenguaje("javascript") # Resultado: Mi lenguaje favorito de programación es javascript!</p>
</blockquote>
<p style="text-align:start"></p>
<p style="text-align:start"><mark style="color:inherit;background-color:#ffbe6f">Funciones internas</mark></p>
<p style="text-align:start">&gt;&gt;&gt; len('Hola, mundo')</p>
<p style="text-align:start">11</p>
<p style="text-align:start">&gt;&gt;&gt; int('32') &gt;&gt; Convierte un tipo de dato string a int</p>
<p style="text-align:start">32</p>
<p style="text-align:start">&gt;&gt;&gt; str(32) &gt;&gt; Convierte un tipo de dato int a String</p>
<p style="text-align:start">'32'</p>
<p style="text-align:start">La función de conversión puede generar errores</p>
<p style="text-align:start">&gt;&gt;&gt; int('Hola')</p>
<p style="text-align:start">ValueError: invalid literal for int() with base 10: 'Hola'</p>
<p style="text-align:start"><strong>Módulos de funciones</strong></p>
<p style="text-align:start">Python tiene diferentes módulos que encapsulan funciones.</p>
<p style="text-align:start">Por ejemplo tiene un módulo matemático (math), que proporciona la mayoría de las funciones matemáticas habituales. Antes de que podamos utilizar el módulo, deberemos importarlo:</p>
<blockquote class="blockquote">
  <p style="text-align:start">import math</p>
</blockquote>
<p style="text-align:start">Esta sentencia crea un objeto módulo llamado math.</p>
<p style="text-align:start">El objeto módulo contiene las funciones y variables definidas en el módulo. Para acceder a una de esas funciones, es necesario especificar el nombre del módulo y el nombre de la función, separados por un punto (también conocido en inglés como períod). Este formato recibe el nombre de notación punto.</p>
<blockquote class="blockquote">
  <p style="text-align:start">relacion = int_senal / int_ruido</p>
  <p style="text-align:start">decibelios = 10 * math.log10(relacion)</p>
</blockquote>
<p style="text-align:start">El módulo random proporciona funciones que generan números pseudoaleatorios (a los que simplemente llamaremos “aleatorios” de ahora en adelante). La función random devuelve un número flotante aleatorio entre 0.0 y 1.0 (incluyendo 0.0, pero no 1.0). Cada vez que se llama a random, se obtiene el número siguiente de una larga serie. Para ver un ejemplo, ejecuta este bucle:</p>
<blockquote class="blockquote">
  <p style="text-align:start">import random</p>
  <p style="text-align:start">for i in range(10):</p>
  <p style="text-align:start">	x = random.random()</p>
  <p style="text-align:start">	print(x)</p>
</blockquote>
<p style="text-align:start">Este programa produce la siguiente lista de 10 números aleatorios entre 0.0 y hasta (pero no incluyendo) 1.0.</p>
<p style="text-align:start">0.11132867921152356</p>
<p style="text-align:start">0.5950949227890241</p>
<p style="text-align:start">0.04820265884996877</p>
<p style="text-align:start">0.841003109276478</p>
<p style="text-align:start">0.997914947094958</p>
<p style="text-align:start">0.04842330803368111</p>
<p style="text-align:start">0.7416295948208405</p>
<p style="text-align:start">0.510535245390327</p>
<p style="text-align:start">0.27447040171978143</p>
<p style="text-align:start">0.028511805472785867</p>
<p style="text-align:start"></p>
<p style="text-align:start"><mark style="color:inherit;background-color:#ffbe6f">Cadenas</mark></p>
<p style="text-align:start">Una cadena es una secuencia de caracteres. Puedes acceder a los caracteres de uno en uno con el operador corchete:</p>
<p style="text-align:start">&gt;&gt;&gt; fruta = 'banana'</p>
<p style="text-align:start">&gt;&gt;&gt; letra = fruta[1]</p>
<p style="text-align:start">La segunda sentencia extrae el carácter en la posición del indice 1 de la variable fruta y la asigna a la variable letra. La expresión en los corchetes es llamada índice. El índice indica qué carácter de la secuencia quieres, siendo 0 el indice del primer caracter de la cadena.</p>
<p style="text-align:start">Función para el tamaño de una cadena</p>
<p style="text-align:start">&gt;&gt;&gt; len(fruta)</p>
<p style="text-align:start">6</p>
<p style="text-align:start"><strong>Recorriendo una cadena mediante un bucle</strong></p>
<p style="text-align:start">Muchos de los cálculos requieren procesar una cadena carácter por carácter.</p>
<p style="text-align:start">Versión 1</p>
<blockquote class="blockquote">
  <p style="text-align:start">indice = 0</p>
  <p style="text-align:start">while indice &lt; len(fruta):</p>
  <p style="text-align:start">	letra = fruta[indice]</p>
  <p style="text-align:start">	print(letra)</p>
  <p style="text-align:start">	indice = indice + 1</p>
</blockquote>
<p style="text-align:start">Versión 2</p>
<blockquote class="blockquote">
  <p style="text-align:start">for caracter in fruta:</p>
  <p style="text-align:start">	print(caracter)</p>
</blockquote>
<p style="text-align:start"><strong>Segmentos de cadenas</strong></p>
<blockquote class="blockquote">
  <p style="text-align:start">s = 'Monty Python'</p>
  <p style="text-align:start">print(s[0:5])</p>
  <p style="text-align:start">Monty</p>
  <p style="text-align:start">fruta = 'banana'</p>
  <p style="text-align:start">fruta[:3]</p>
  <p style="text-align:start">'ban'</p>
  <p style="text-align:start">fruta[3:]</p>
  <p style="text-align:start">'ana'</p>
</blockquote>
<p style="text-align:start"><strong>El operador in</strong></p>
<p style="text-align:start">La palabra in es un operador booleano que toma dos cadenas y regresa True si la primera cadena aparece como una subcadena de la segunda:</p>
<p style="text-align:start">&gt;&gt;&gt; 'a' in 'banana'</p>
<p style="text-align:start">True</p>
<p style="text-align:start">&gt;&gt;&gt; 'semilla' in 'banana'</p>
<p style="text-align:start">False</p>
<p style="text-align:start"><strong>Operadores con cadenas</strong></p>
<blockquote class="blockquote">
  <p style="text-align:start">if palabra == 'banana':</p>
  <p style="text-align:start">	print('Muy bien, bananas.')</p>
</blockquote>
<p style="text-align:start">Otras operaciones de comparación son útiles para poner palabras en orden alfabético:</p>
<blockquote class="blockquote">
  <p style="text-align:start">if palabra &lt; 'banana':</p>
  <p style="text-align:start">	print('Tu palabra, ' + palabra + ', está antes de banana.')</p>
  <p style="text-align:start">elif palabra &gt; 'banana':</p>
  <p style="text-align:start">	print('Tu palabra, ' + palabra + ', está después de banana.')</p>
  <p style="text-align:start">else:</p>
  <p style="text-align:start">	print('Muy bien, bananas.')</p>
</blockquote>
<p style="text-align:start">Los cadenas son un ejemplo de objetos en Python. Un objeto contiene tanto datos (el valor de la cadena misma) como métodos, los cuales son efectivamente funciones que están implementadas dentro del objeto y que están disponibles para cualquier instancia del objeto.</p>
<p style="text-align:start">&gt;&gt;&gt; palabra = 'banana'</p>
<p style="text-align:start">&gt;&gt;&gt; nueva_palabra = palabra.upper()</p>
<p style="text-align:start">&gt;&gt;&gt; print(nueva_palabra)</p>
<p style="text-align:start">BANANA</p>
<p style="text-align:start">Por ejemplo, existe un método de cadena llamado find que busca la posición de una cadena dentro de otra</p>
<p style="text-align:start">&gt;&gt;&gt; palabra = 'banana'</p>
<p style="text-align:start">&gt;&gt;&gt; indice = palabra.find('a')</p>
<p style="text-align:start">&gt;&gt;&gt; print(indice)</p>
<p style="text-align:start">1</p>
<p style="text-align:start">Una tarea común es eliminar los espacios en blanco (espacios, tabs, o nuevas líneas) en el inicio y el final de una cadena usando el método strip</p>
<p style="text-align:start">&gt;&gt;&gt; linea = ' Aquí vamos</p>
<p style="text-align:start">&gt;&gt;&gt; linea.strip()</p>
<p style="text-align:start">'Aquí vamos'</p>
<p style="text-align:start">Algunos métodos como startswith devuelven valores booleanos</p>
<p style="text-align:start">&gt;&gt;&gt; linea = 'Que tengas un buen día'</p>
<p style="text-align:start">&gt;&gt;&gt; linea.startswith('Que')</p>
<p style="text-align:start">True</p>
<p style="text-align:start">&gt;&gt;&gt; linea.startswith('q')</p>
<p style="text-align:start">False</p>
<p style="text-align:start"></p>
<p style="text-align:start"><mark style="color:inherit;background-color:#ffbe6f">Listas</mark></p>
<p style="text-align:start">Así como una cadena, una lista es una secuencia de valores. En una cadena, los valores son caracteres; en una lista, pueden ser cualquier tipo. Los valores en una lista son llamados elementos o a veces ítems.</p>
<p style="text-align:start">Definición de una lista</p>
<blockquote class="blockquote">
  <p style="text-align:start">valores = [10, 20, 30, 40]</p>
  <p style="text-align:start">animales = ['rana', 'carnero', 'alondra']</p>
</blockquote>
<p style="text-align:start">Los elementos de una lista no tienen que ser del mismo tipo. La siguiente lista contiene una cadena, un flotante, un entero, y otra lista:</p>
<p style="text-align:start">['spam', 2.0, 5, [10, 20]]</p>
<p style="text-align:start">La sintaxis para accesar elementos de una lista es la misma que para accesar los caracteres de una cadena: el operador corchete. La expresión dentro de los corchetes especifíca el índice. Recordemos que los índices empiezan en 0.</p>
<p style="text-align:start">El operador in funciona también en listas.</p>
<blockquote class="blockquote">
  <p style="text-align:start">quesos = ['Cheddar', 'Edam', 'Gouda']</p>
  <p style="text-align:start">'Edam' in quesos</p>
  <p style="text-align:start">True</p>
  <p style="text-align:start">'Brie' in quesos</p>
  <p style="text-align:start">False</p>
</blockquote>
<p style="text-align:start">Recorriendo una lista</p>
<blockquote class="blockquote">
  <p style="text-align:start">for queso in quesos:</p>
  <p style="text-align:start">	print(queso)</p>
</blockquote>
<p style="text-align:start">Algunos métodos y funciones</p>
<blockquote class="blockquote">
  <p style="text-align:start">t = ['d', 'c', 'e', 'b', 'a']</p>
  <p style="text-align:start">t.sort()</p>
  <p style="text-align:start">print(t)</p>
  <p style="text-align:start">['a', 'b', 'c', 'd', 'e']</p>
  <p style="text-align:start">t = ['a', 'b', 'c']</p>
  <p style="text-align:start">x = t.pop(1)</p>
  <p style="text-align:start">print(t)</p>
  <p style="text-align:start">['a', 'c']</p>
  <p style="text-align:start">print(x)</p>
  <p style="text-align:start">b</p>
  <p style="text-align:start">t = ['a', 'b', 'c']</p>
  <p style="text-align:start">t.remove('b')</p>
  <p style="text-align:start">print(t)</p>
  <p style="text-align:start">['a', 'c']</p>
  <p style="text-align:start">t = ['a', 'b', 'c', 'd', 'e', 'f']</p>
  <p style="text-align:start">del t[1:5]</p>
  <p style="text-align:start">print(t)</p>
  <p style="text-align:start">['a', 'f']</p>
</blockquote>
<p style="text-align:start">Hay un cierto número funciones internas que pueden ser utilizadas en las listas que te permiten mirar rápidamente a través de una lista sin escribir tus propios bucles:</p>
<p style="text-align:start">&gt;&gt;&gt; nums = [3, 41, 12, 9, 74, 15]</p>
<p style="text-align:start">&gt;&gt;&gt; print(len(nums))</p>
<p style="text-align:start">6</p>
<p style="text-align:start">&gt;&gt;&gt; print(max(nums))</p>
<p style="text-align:start">74</p>
<p style="text-align:start">&gt;&gt;&gt; print(min(nums))</p>
<p style="text-align:start">3</p>
<p style="text-align:start">&gt;&gt;&gt; print(sum(nums))</p>
<p style="text-align:start">154</p>
<p style="text-align:start">&gt;&gt;&gt; print(sum(nums)/len(nums))</p>
<p style="text-align:start">25</p>
<p style="text-align:start">Para convertir una cadena en una lista de caracteres, puedes usar list:</p>
<p style="text-align:start">&gt;&gt;&gt; s = 'spam'</p>
<p style="text-align:start">&gt;&gt;&gt; t = list(s)</p>
<p style="text-align:start">&gt;&gt;&gt; print(t)</p>
<p style="text-align:start">['s', 'p', 'a', 'm']</p>
<p style="text-align:start">Debido a que list es el nombre de una función interna, debes evitar usarla como un nombre de variable. Yo trato de evitar también la letra “l” porque se parece mucho al número “1”. Así que por eso utilizo “t”. La función list divide una cadena en letras individuales. Si quieres dividir una cadena en palabras, puedes utilizar el método split:</p>
<p style="text-align:start">&gt;&gt;&gt; s = 'suspirando por los fiordos'</p>
<p style="text-align:start">&gt;&gt;&gt; t = s.split()</p>
<p style="text-align:start">&gt;&gt;&gt; print(t)</p>
<p style="text-align:start">['suspirando', 'por', 'los', 'fiordos']</p>
<p style="text-align:start">&gt;&gt;&gt; print(t[2])</p>
<p style="text-align:start">los</p>
<p style="text-align:start"><strong>Otros ejemplos útiles</strong></p>
<p style="text-align:start">&gt;&gt;&gt; s = 'nombre,apellido,dirección,telefono'</p>
<p style="text-align:start">&gt;&gt;&gt; delimiter = ','</p>
<p style="text-align:start">&gt;&gt;&gt; datos = s.split(delimiter)</p>
<p style="text-align:start">&gt;&gt;&gt; for item in datos:</p>
<p style="text-align:start">	print(item)</p>
<p style="text-align:start">nombre</p>
<p style="text-align:start">apellido</p>
<p style="text-align:start">dirección</p>
<p style="text-align:start">telefono</p>
<p style="text-align:start">&gt;&gt;&gt; t = ['suspirando', 'por', 'los', 'fiordos']</p>
<p style="text-align:start">&gt;&gt;&gt; delimiter = ' '</p>
<p style="text-align:start">&gt;&gt;&gt; delimiter.join(t)</p>
<p style="text-align:start">'suspirando por los fiordos'</p>
<p style="text-align:start"></p>
<p style="text-align:start"><mark style="color:inherit;background-color:#ffbe6f">Diccionarios</mark></p>
<p style="text-align:start">Un diccionario es como una lista, pero más general. En una lista, los índices de posiciones tienen que ser enteros; en un diccionario, los índices pueden ser (casi) cualquier tipo.</p>
<p style="text-align:start">Puedes pensar en un diccionario como una asociación entre un conjunto de índices (que son llamados claves) y un conjunto de valores. Cada clave apunta a un valor.</p>
<p style="text-align:start">La asociación de una clave y un valor es llamada par clave-valor o a veces elemento. Como ejemplo, vamos a construir un diccionario que asocia palabras de Inglés a Español, así que todas las claves y los valores son cadenas.</p>
<p style="text-align:start">Declaración de un diccionario</p>
<blockquote class="blockquote">
  <p style="text-align:start">eng2sp = dict()</p>
  <p style="text-align:start">eng2sp = {}</p>
  <p style="text-align:start">eng2sp = {'one': 'uno', 'two': 'dos'}</p>
</blockquote>
<p style="text-align:start">Se utiliza la clave para encontrar el valor correspondientes:</p>
<p style="text-align:start">&gt;&gt;&gt; print(eng2sp['two'])</p>
<p style="text-align:start">'dos'</p>
<p style="text-align:start">La función len funciona en diccionarios; ésta regresa el número de pares clave-valor:</p>
<p style="text-align:start">&gt;&gt;&gt; len(eng2sp)</p>
<p style="text-align:start">3</p>
<p style="text-align:start">El operador in funciona en diccionarios; éste te dice si algo aparece como una clave en el diccionario.</p>
<p style="text-align:start">&gt;&gt;&gt; 'one' in eng2sp</p>
<p style="text-align:start">True</p>
<p style="text-align:start">&gt;&gt;&gt; 'uno' in eng2sp</p>
<p style="text-align:start">False</p>
<p style="text-align:start"><strong>Funciones para obtener todas las claves y todos los valores</strong></p>
<p style="text-align:start">&gt;&gt;&gt; allvals = list(eng2sp.values())</p>
<p style="text-align:start">&gt;&gt;&gt; allkeys = list(eng2sp.keys())</p>
<p style="text-align:start"><strong>Recorrido de diccionarios</strong></p>
<blockquote class="blockquote">
  <p style="text-align:start">contadores = { 'chuck' : 1 , 'annie' : 42, 'jan': 100}</p>
  <p style="text-align:start">for clave in contadores:</p>
  <p style="text-align:start">	print(clave, contadores[clave])</p>
  <p style="text-align:start">Aquí está lo que muestra de salida:</p>
  <p style="text-align:start">jan 100</p>
  <p style="text-align:start">chuck 1</p>
  <p style="text-align:start">annie 42</p>
</blockquote>
<p style="text-align:start"></p>]]></content><author><name></name></author><summary type="html"><![CDATA[Variables Una variable es un nombre que se refiere a un valor. mensaje = 'Y ahora algo completamente diferente' n = 17 pi = 3.1415926535897931 verdadero = True El tipo de una variable es el tipo del valor al que se refiere y se asigna de forma dinámica al darle valor a la variable en su declaración. type(mensaje) type(n) type(pi) Los nombres de las variables pueden ser arbitrariamente largos. Pueden contener tanto letras como números, pero no pueden comenzar con un número. Se pueden usar letras mayúsculas, pero es buena idea comenzar los nombres de las variables con una letras minúscula (veremos por qué más adelante). El carácter guión bajo (_) puede utilizarse en un nombre. A menudo se utiliza en nombres con múltiples palabras, como en mi_nombre o velocidad_de_golondrina_sin_carga. El intérprete usa palabras clave para reconocer la estructura del programa, y esas palabras no pueden ser utilizadas como nombres de variables. Python reserva 33 palabras claves para su propio uso: and as assert break class continue def del elif else except False finally for from global if import in is lambda None nonlocal not or pass raise return True try while with yield Sentencias Una sentencia es una unidad de código que el intérprete de Python puede ejecutar. Hemos visto hasta ahora dos tipos de sentencia: print y las asignaciones. Cuando escribes una sentencia en modo interactivo, el intérprete la ejecuta y muestra el resultado, si es que lo hay. Un script normalmente contiene una secuencia de sentencias. Si hay más de una sentencia, los resultados aparecen de uno en uno según se van ejecutando las sentencias. Por ejemplo, el script print(1) x = 2 print(x) Produce la salida 1 2 Operadores y operandos Los operadores son símbolos especiales que representan cálculos, como la suma o la multiplicación. Los valores a los cuales se aplican esos operadores reciben el nombre de operandos. Los operadores +, -, *, /, y ** realizan sumas, restas, multiplicaciones, divisiones y exponenciación (elevar un número a una potencia), como se muestra en los ejemplos siguientes: 20+32 hour-1 hour*60+minute minute/60 5**2 Divisón entera en Python3 63//60 1 Módulo obtiene el resto de una división 63%60 3 El operador módulo resulta ser sorprendentemente útil. Por ejemplo, puedes comprobar si un número es divisible por otro si x % y es cero, entonces x es divisible por y. O para saber si un númeor es par o impar if x%2 == 0 : print('x es par') else : print('x es impar') Operaciones con cadenas El operador + funciona con las cadenas, pero no realiza una suma en el sentido matemático. En vez de eso, realiza una concatenación, que quiere decir que une ambas cadenas, enlazando el final de la primera con el principio de la segunda. Por ejemplo: primero = 10 segundo = 15 ¿print(primero+segundo) 25 primero = '100' segundo = '150' print(primero + segundo) 100150 Petición de información al usuario A veces necesitaremos que sea el usuario quien nos proporcione el valor para una variable, a través del teclado. Python proporciona una función interna llamada input que recibe la entrada desde el teclado. Cuando se llama a esa función, el programa se detiene y espera a que el usuario escriba algo. Cuando el usuario pulsa Retorno o Intro, el programa continúa y input devuelve como una cadena aquello que el usuario escribió. entrada = input() Cualquier cosa print(entrada) Cualquier cosa Comentarios # calcula el porcentaje de hora transcurrido porcentaje = (minuto * 100) / 60 Ejecución condicional Expresiones booleanas Una expresión booleana es aquella que puede ser verdadera (True) o falsa (False) y se usan para las expresiones condicionales. &gt;&gt;&gt; 5 == 5 True &gt;&gt;&gt; 5 == 6 False Operadores de comparación x != y # x es distinto de y x &gt; y # x es mayor que y x &lt; y # x es menor que y x &gt;= y # x es mayor o igual que y x &lt;= y # x es menor o igual que y x is y # x es lo mismo que y x is not y # x no es lo mismo que y Operadores lógicos Existen tres operadores lógicos: and (y), or (o), y not (no). El significado semántico de estas operaciones es similar a su significado en inglés. Por ejemplo, x &gt; 0 and x &lt; 10 es verdadero sólo cuando x es mayor que 0 y menor que 10. Otro ejemplo n%2 == 0 or n%3 == 0 es verdadero si cualquiera de las condiciones es verdadera, es decir, si el número es divisible por 2 o por 3. Finalmente, el operador not niega una expresión booleana, de modo que not (x &gt; y) es verdadero si x &gt; y es falso; es decir, si x es menor o igual que y. Ejecución condicional completa if x &lt; y: print('x es menor que y') elif x &gt; y: print('x es mayor que y') else: print('x e y son iguales') Captura de excepciones usando try y except Existen estructuras de ejecución condicional dentro de Python para manejar errores esperados e inesperados, llamadas “try / except”. La idea de try y except es que si se sabe que cierta secuencia de instrucciones puede generar un problema, sea posible añadir ciertas sentencias para que sean ejecutadas en caso de error. Estas sentencias extras (el bloque except) serán ignoradas si no se produce ningún error. Supongamos el siguiente código ent = input('Introduzca la Temperatura Fahrenheit: ') fahr = float(ent) cel = (fahr - 32.0) * 5.0 / 9.0 print(cel) A continuación dos posibles ejecusiones: Introduzca la Temperatura Fahrenheit: 72 22.2222222222 Introduzca la Temperatura Fahrenheit: fred Traceback (most recent call last): File "fahren.py", line 2, in fahr = float(ent) ValueError: invalid literal for float(): fred Esto puede resolverse controlando el error de la siguiente manera: ent = input('Introduzca la Temperatura Fahrenheit:') try: fahr = float(ent) cel = (fahr - 32.0) * 5.0 / 9.0 print(cel) except: print('Por favor, introduzca un número') La sentencia while Una forma de iteración en Python es la sentencia while. He aquí un programa sencillo que cuenta hacia atrás desde cinco y luego dice “¡Despegue!”. n = 5 while n &gt; 0: print(n) n = n - 1 print('¡Despegue!') Casi se puede leer la sentencia while como si estuviera escrita en inglés. Significa, “Mientras n sea mayor que 0, muestra el valor de n y luego reduce el valor de n en 1 unidad. Cuando llegues a 0, sal de la sentencia while y muestra la palabra ¡Despegue!” Bucles infinitos y break while True: linea = input('&gt; ') if linea == 'fin': break print(linea) print('¡Terminado!') Finalizar iteraciones con continue Algunas veces, estando dentro de un bucle se necesita terminar con la iteración actual y saltar a la siguiente de forma inmediata. En ese caso se puede utilizar la sentencia continue para pasar a la siguiente iteración sin terminar la ejecución del cuerpo del bucle para la actual. while True: linea = input('&gt; ') if linea[0] == '#' : continue if linea == 'fin': break print(linea) print('¡Terminado!') Bucles definidos usando for A veces se desea repetir un bucle a través de un conjunto de cosas, como una lista de palabras, las líneas de un archivo, o una lista de números. Cuando se tiene una lista de cosas para recorrer, se puede construir un bucle definido usando una sentencia for. amigos = ['Joseph', 'Glenn', 'Sally'] for amigo in amigos: print('Feliz año nuevo:', amigo) print('¡Terminado!') Funciones En el contexto de la programación, una función es una secuencia de sentencias que realizan una operación y que reciben un nombre. Cuando se define una función, se especifica el nombre y la secuencia de sentencias. Más adelante, se puede “llamar” a la función por ese nombre. ¿Por qué funciones? • El crear una función nueva te da la oportunidad de dar nombre a un grupo de sentencias, lo cual hace tu programa más fácil de leer, entender y depurar. • Las funciones pueden hacer un programa más pequeño, al eliminar código repetido. Además, si quieres realizar cualquier cambio en el futuro, sólo tendrás que hacerlo en un único lugar. • Dividir un programa largo en funciones te permite depurar las partes de una en una y luego ensamblarlas juntas en una sola pieza. • Las funciones bien diseñadas a menudo resultan útiles para otros muchos programas. Una vez que has escrito y depurado una, puedes reutilizarla. Una definición de función especifica el nombre de una función nueva y la secuencia de sentencias que se ejecutan cuando esa función es llamada. Las funciones pueden tener argumentos o parámetros que representan valores que van a ser usados en la lógica de la función. Una vez definida una función, se puede reutilizar una y otra vez a lo largo de todo el programa. He aquí un ejemplo de la función que calcula el promedio de dos valores numéricos (parámetros de la función): def promedio(a,b): res = (a+b)/2 return res print(promedio(8,10)) Las reglas para los nombres de las funciones son los mismos que para las variables: se pueden usar letras, números y algunos signos de puntuación, pero el primer carácter no puede ser un número. No se puede usar una palabra clave como nombre de una función, y se debería evitar también tener una variable y una función con el mismo nombre. Los paréntesis vacíos después del nombre indican que esta función no toma ningún argumento o parámetro. El número de argumentos y la posición de los mismos es importante. Los argumentos de la función también pueden tener valores predeterminados. Estos también son conocidos como argumentos opcionales. def fav_lenguaje(lenguaje="Python"): print(f"Mi lenguaje favorito de programación es {lenguaje}!") fav_lenguaje() # Resultado: Mi lenguaje favorito de programación es python! fav_lenguaje("javascript") # Resultado: Mi lenguaje favorito de programación es javascript! Funciones internas &gt;&gt;&gt; len('Hola, mundo') 11 &gt;&gt;&gt; int('32') &gt;&gt; Convierte un tipo de dato string a int 32 &gt;&gt;&gt; str(32) &gt;&gt; Convierte un tipo de dato int a String '32' La función de conversión puede generar errores &gt;&gt;&gt; int('Hola') ValueError: invalid literal for int() with base 10: 'Hola' Módulos de funciones Python tiene diferentes módulos que encapsulan funciones. Por ejemplo tiene un módulo matemático (math), que proporciona la mayoría de las funciones matemáticas habituales. Antes de que podamos utilizar el módulo, deberemos importarlo: import math Esta sentencia crea un objeto módulo llamado math. El objeto módulo contiene las funciones y variables definidas en el módulo. Para acceder a una de esas funciones, es necesario especificar el nombre del módulo y el nombre de la función, separados por un punto (también conocido en inglés como períod). Este formato recibe el nombre de notación punto. relacion = int_senal / int_ruido decibelios = 10 * math.log10(relacion) El módulo random proporciona funciones que generan números pseudoaleatorios (a los que simplemente llamaremos “aleatorios” de ahora en adelante). La función random devuelve un número flotante aleatorio entre 0.0 y 1.0 (incluyendo 0.0, pero no 1.0). Cada vez que se llama a random, se obtiene el número siguiente de una larga serie. Para ver un ejemplo, ejecuta este bucle: import random for i in range(10): x = random.random() print(x) Este programa produce la siguiente lista de 10 números aleatorios entre 0.0 y hasta (pero no incluyendo) 1.0. 0.11132867921152356 0.5950949227890241 0.04820265884996877 0.841003109276478 0.997914947094958 0.04842330803368111 0.7416295948208405 0.510535245390327 0.27447040171978143 0.028511805472785867 Cadenas Una cadena es una secuencia de caracteres. Puedes acceder a los caracteres de uno en uno con el operador corchete: &gt;&gt;&gt; fruta = 'banana' &gt;&gt;&gt; letra = fruta[1] La segunda sentencia extrae el carácter en la posición del indice 1 de la variable fruta y la asigna a la variable letra. La expresión en los corchetes es llamada índice. El índice indica qué carácter de la secuencia quieres, siendo 0 el indice del primer caracter de la cadena. Función para el tamaño de una cadena &gt;&gt;&gt; len(fruta) 6 Recorriendo una cadena mediante un bucle Muchos de los cálculos requieren procesar una cadena carácter por carácter. Versión 1 indice = 0 while indice &lt; len(fruta): letra = fruta[indice] print(letra) indice = indice + 1 Versión 2 for caracter in fruta: print(caracter) Segmentos de cadenas s = 'Monty Python' print(s[0:5]) Monty fruta = 'banana' fruta[:3] 'ban' fruta[3:] 'ana' El operador in La palabra in es un operador booleano que toma dos cadenas y regresa True si la primera cadena aparece como una subcadena de la segunda: &gt;&gt;&gt; 'a' in 'banana' True &gt;&gt;&gt; 'semilla' in 'banana' False Operadores con cadenas if palabra == 'banana': print('Muy bien, bananas.') Otras operaciones de comparación son útiles para poner palabras en orden alfabético: if palabra &lt; 'banana': print('Tu palabra, ' + palabra + ', está antes de banana.') elif palabra &gt; 'banana': print('Tu palabra, ' + palabra + ', está después de banana.') else: print('Muy bien, bananas.') Los cadenas son un ejemplo de objetos en Python. Un objeto contiene tanto datos (el valor de la cadena misma) como métodos, los cuales son efectivamente funciones que están implementadas dentro del objeto y que están disponibles para cualquier instancia del objeto. &gt;&gt;&gt; palabra = 'banana' &gt;&gt;&gt; nueva_palabra = palabra.upper() &gt;&gt;&gt; print(nueva_palabra) BANANA Por ejemplo, existe un método de cadena llamado find que busca la posición de una cadena dentro de otra &gt;&gt;&gt; palabra = 'banana' &gt;&gt;&gt; indice = palabra.find('a') &gt;&gt;&gt; print(indice) 1 Una tarea común es eliminar los espacios en blanco (espacios, tabs, o nuevas líneas) en el inicio y el final de una cadena usando el método strip &gt;&gt;&gt; linea = ' Aquí vamos &gt;&gt;&gt; linea.strip() 'Aquí vamos' Algunos métodos como startswith devuelven valores booleanos &gt;&gt;&gt; linea = 'Que tengas un buen día' &gt;&gt;&gt; linea.startswith('Que') True &gt;&gt;&gt; linea.startswith('q') False Listas Así como una cadena, una lista es una secuencia de valores. En una cadena, los valores son caracteres; en una lista, pueden ser cualquier tipo. Los valores en una lista son llamados elementos o a veces ítems. Definición de una lista valores = [10, 20, 30, 40] animales = ['rana', 'carnero', 'alondra'] Los elementos de una lista no tienen que ser del mismo tipo. La siguiente lista contiene una cadena, un flotante, un entero, y otra lista: ['spam', 2.0, 5, [10, 20]] La sintaxis para accesar elementos de una lista es la misma que para accesar los caracteres de una cadena: el operador corchete. La expresión dentro de los corchetes especifíca el índice. Recordemos que los índices empiezan en 0. El operador in funciona también en listas. quesos = ['Cheddar', 'Edam', 'Gouda'] 'Edam' in quesos True 'Brie' in quesos False Recorriendo una lista for queso in quesos: print(queso) Algunos métodos y funciones t = ['d', 'c', 'e', 'b', 'a'] t.sort() print(t) ['a', 'b', 'c', 'd', 'e'] t = ['a', 'b', 'c'] x = t.pop(1) print(t) ['a', 'c'] print(x) b t = ['a', 'b', 'c'] t.remove('b') print(t) ['a', 'c'] t = ['a', 'b', 'c', 'd', 'e', 'f'] del t[1:5] print(t) ['a', 'f'] Hay un cierto número funciones internas que pueden ser utilizadas en las listas que te permiten mirar rápidamente a través de una lista sin escribir tus propios bucles: &gt;&gt;&gt; nums = [3, 41, 12, 9, 74, 15] &gt;&gt;&gt; print(len(nums)) 6 &gt;&gt;&gt; print(max(nums)) 74 &gt;&gt;&gt; print(min(nums)) 3 &gt;&gt;&gt; print(sum(nums)) 154 &gt;&gt;&gt; print(sum(nums)/len(nums)) 25 Para convertir una cadena en una lista de caracteres, puedes usar list: &gt;&gt;&gt; s = 'spam' &gt;&gt;&gt; t = list(s) &gt;&gt;&gt; print(t) ['s', 'p', 'a', 'm'] Debido a que list es el nombre de una función interna, debes evitar usarla como un nombre de variable. Yo trato de evitar también la letra “l” porque se parece mucho al número “1”. Así que por eso utilizo “t”. La función list divide una cadena en letras individuales. Si quieres dividir una cadena en palabras, puedes utilizar el método split: &gt;&gt;&gt; s = 'suspirando por los fiordos' &gt;&gt;&gt; t = s.split() &gt;&gt;&gt; print(t) ['suspirando', 'por', 'los', 'fiordos'] &gt;&gt;&gt; print(t[2]) los Otros ejemplos útiles &gt;&gt;&gt; s = 'nombre,apellido,dirección,telefono' &gt;&gt;&gt; delimiter = ',' &gt;&gt;&gt; datos = s.split(delimiter) &gt;&gt;&gt; for item in datos: print(item) nombre apellido dirección telefono &gt;&gt;&gt; t = ['suspirando', 'por', 'los', 'fiordos'] &gt;&gt;&gt; delimiter = ' ' &gt;&gt;&gt; delimiter.join(t) 'suspirando por los fiordos' Diccionarios Un diccionario es como una lista, pero más general. En una lista, los índices de posiciones tienen que ser enteros; en un diccionario, los índices pueden ser (casi) cualquier tipo. Puedes pensar en un diccionario como una asociación entre un conjunto de índices (que son llamados claves) y un conjunto de valores. Cada clave apunta a un valor. La asociación de una clave y un valor es llamada par clave-valor o a veces elemento. Como ejemplo, vamos a construir un diccionario que asocia palabras de Inglés a Español, así que todas las claves y los valores son cadenas. Declaración de un diccionario eng2sp = dict() eng2sp = {} eng2sp = {'one': 'uno', 'two': 'dos'} Se utiliza la clave para encontrar el valor correspondientes: &gt;&gt;&gt; print(eng2sp['two']) 'dos' La función len funciona en diccionarios; ésta regresa el número de pares clave-valor: &gt;&gt;&gt; len(eng2sp) 3 El operador in funciona en diccionarios; éste te dice si algo aparece como una clave en el diccionario. &gt;&gt;&gt; 'one' in eng2sp True &gt;&gt;&gt; 'uno' in eng2sp False Funciones para obtener todas las claves y todos los valores &gt;&gt;&gt; allvals = list(eng2sp.values()) &gt;&gt;&gt; allkeys = list(eng2sp.keys()) Recorrido de diccionarios contadores = { 'chuck' : 1 , 'annie' : 42, 'jan': 100} for clave in contadores: print(clave, contadores[clave]) Aquí está lo que muestra de salida: jan 100 chuck 1 annie 42]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://smup.sutty.nl/public/kxd5vewsylkngbgpvgegfez88zz9/logopython.jpg" /><media:content medium="image" url="https://smup.sutty.nl/public/kxd5vewsylkngbgpvgegfez88zz9/logopython.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Es hora de hacer Software Libre</title><link href="https://smup.sutty.nl/2024/10/01/es-hora-de-hacer-software-libre.html" rel="alternate" type="text/html" title="Es hora de hacer Software Libre" /><published>2024-10-01T00:00:00+00:00</published><updated>2024-10-09T08:43:22+00:00</updated><id>https://smup.sutty.nl/2024/10/01/es-hora-de-hacer-software-libre</id><content type="html" xml:base="https://smup.sutty.nl/2024/10/01/es-hora-de-hacer-software-libre.html"><![CDATA[<p style="text-align:start">Vengo desde hace un tiempo leyendo mucho y pensando más de lo que leo, sobre el poder que pesan en kilos de datos las Big Techs, fundamentalmente las que dan identidad a esa bomba atómica que arrasó internet bajo la bandera de GAFAM.</p>
<p style="text-align:start">No me voy a detener en analizar a las Big Techs del GAFAM, sobre eso ya se han escrito demasiadas páginas en la web y en el papel, por lo que voy a ensayar una propuesta para salir jugando por abajo, como diría un amigo que todo lo vuelve una metáfora futbolera.</p>
<p style="text-align:start"></p>
<h4 style="text-align:start" id="necesitamos-desarrollar-software"><strong><mark style="color:inherit;background-color:#57e389">Necesitamos desarrollar software</mark></strong></h4>
<p style="text-align:start"></p>
<p style="text-align:start">El software rara vez se hace para dar herramientas a los procesos de transformación que necesitamos los y las que desde abajo y a la izquierda, buscamos construir alternativas al sistema dominante, a los que buscamos un mundo en el que quepan muchos mundos. Digo rara vez porque es necesario <strong>honrar el Software Libre</strong>, ese movimiento político que de la mano de muchos y muchas ha logrado volver realidad el sueño de la Tecnología Social.</p>
<p style="text-align:start">Necesitamos más Tecnología Social, necesitamos software que respetando nuestro rol central de usuarias y usuarios, respetando la privacidad de nuestros datos, respetando los derechos humanos, nos brinde herramientas que nos permitan desarrollarnos como colectivos de trabajadoras y trabajadores, de estudiantes, de madres y padres, de niñas y niños, de viajeras y viajeros, de vecinas y vecinos.</p>
<p style="text-align:start">El problemas es que nos han hecho creer durante mucho tiempo que el software es cosa de técnicos, nerds, blancos, heterosexuales y de clase media.</p>
<p style="text-align:start">Así es como el que no sea parte de ese grupo selecto de pseudo intelectuales de la tecnología, debería limitarse a regalar sus datos, sus deseos, sus necesidades, sus tiempos y sus angustias a las plataformas que venían a llenarnos de herramientas gratis que nos resuelven todo, nos traen amigos del pasado que hace años que nos son nuestros amigos, nos da la posibilidad de comer sin volver a tocar una olla o de tener un gato tailandés con jaula y todo en 24 hs en la puerta de mi caso con envío gratis, hacen la magia oculta de crearnos necesidades de consumodecualquiercosa que no tenemos.</p>
<p style="text-align:start"></p>
<h5 style="text-align:start" id="que-la-tortilla-se-vuelva-..."><mark style="color:inherit;background-color:#ffbe6f">Que la tortilla se vuelva ...</mark></h5>
<p style="text-align:start"></p>
<p style="text-align:start">De momento hay buenas noticias, <strong>podemos hacer software nosotras y nosotros</strong> sin ser ingenieros de no se que cosa.</p>
<p style="text-align:start">Primera interesante aclaración es que hacer software no significa vivir de hacer software, la diferencia es similar a la posibilidad de tener una huerta y proveernos nuestros propios alimentos o ser un mercado central mayorista de frutas y verduras.</p>
<p style="text-align:start">Demasiada propaganda barata nos promete cobrar 5000 dólares al mes luego de una curso de programación de 6 meses, se hace cada vez más necesario que dejemos de consumir las promesas del mercado. Tampoco vamos a meternos en esta pelea ahora, simplemente cabe mencionar la estafa piramidal 4.0.</p>
<p style="text-align:start">Volviendo a es de que <strong>podemos hacer software nosotras y nosotros</strong> arrancamos por pensar que necesitamos, va una lista más o menos desordenada e incompleta pero que sirve de referencia.</p>
<ul>
  <li>
    <p style="text-align:start">Primero <strong>tenemos que saber que problema queremos resolver ayudados por la tecnología</strong>, donde hay una necesidad hay un derecho decía Evita y podemos agragarle que también hay un software. Lo importante es entender que el software es una herramienta para nosotros y no es una cosa en si misma.</p>
  </li>
  <li>
    <p style="text-align:start"><strong>Tenemos que tener la disposición de aprender</strong>, de meter las patas en el barro como se dice por ahí.</p>
  </li>
  <li>
    <p style="text-align:start">Cuestiones menos filosóficas necesitamos una computadora y una conexión a internet.</p>
  </li>
  <li>
    <p style="text-align:start">Cuestiones más filosóficas <strong>necesitamos hacer software con otras y otros</strong>, la Tecnología Social es un proceso colectivo o no es nada.</p>
  </li>
  <li>
    <p style="text-align:start"><strong>Tenemos que tomarle cariño a la lógica y a las matemáticas</strong>, que no solo nos va a servir para programar, nos va a servir para la vida. La demonización de las matemáticas es una cuestión que las clases dominantes entendieron y ejecutan a la perfección, hay que liberarse de eso y enamorarse de los malditos números. Me veo tentado a ir por acá un rato pero tampoco vamos a meternos en esta pelea ahora.</p>
  </li>
  <li>
    <p style="text-align:start"><strong>Tenemos que tomar decisiones</strong> ... tecnologías hay muchas, lenguajes de programación hay muchos, manuales y videos hay más que muchos, de modo que para no marearse hay que meterse en las pantanosas arenas de la web con determinación y capacidad de síntesis, el gran problema puede ser sentirse abrumado por no saber a cual de los 300 youtubers que nos explican cosas ver o cual de las 400 webs con manuales leer.</p>
  </li>
</ul>
<p style="text-align:start"></p>
<h4 style="text-align:start" id="hagamos-lo-imposible"><strong><mark style="color:inherit;background-color:#57e389">Hagamos lo imposible</mark></strong></h4>
<p style="text-align:start"></p>
<p style="text-align:start">Desarrollar software es bastante más sencillo de lo que parece, sobre todo si no le tenemos miedo a las serpientes.</p>
<p style="text-align:start"></p>
<h5 style="text-align:start" id="bienvenidos-a-python"><mark style="color:inherit;background-color:#ffbe6f">Bienvenidos a Python</mark></h5>
<p style="text-align:start"></p>
<p style="text-align:start"><strong>Python es un lenguaje de programación</strong> y acá abrimos un paréntesis, porque hacer software es aprender a escribir en un nuevo lenguaje, casi como si aprendiéramos Italiano, Chino o Alemán. La diferencia es que lo que escribimos, que llamamos <strong>código</strong>, sirve para darle instrucciones a una computadora para que haga cosas, cuando hablamos de computadora hablamos no solo de PC sino de las computadoras que tienen los automóviles, los televisores o los tomógrafos, por lo tanto el código que vamos a escribir y que <strong>va a construir un programa</strong> puede usarse para que el auto nos indique como estamos estacionando o el tele nos deje ver una película.</p>
<p style="text-align:start"><strong>Porque Python</strong></p>
<ul>
  <li>
    <p style="text-align:start">Es un lenguaje fácil de aprender, con una sintaxis muy sencilla.</p>
  </li>
  <li>
    <p style="text-align:start">Es un lenguaje de uso general, o sea sirve para hacer programas de todo tipo.</p>
  </li>
  <li>
    <p style="text-align:start">Tiene una comunidad grande y solidaria.</p>
  </li>
  <li>
    <p style="text-align:start">Es un lenguaje multiplataforma, por lo que el mismo código puede usarse en computadoras con Windows, macOS o Linux.</p>
  </li>
  <li>
    <p style="text-align:start">Permite hacer código más rápidamente que en otros lenguajes, acortando la duración de los proyectos.</p>
  </li>
  <li>
    <p style="text-align:start">Python viene instalado en la mayoría de las computadoras (podemos comprobarlo abriendo una consola o terminal y poniendo la palabra <strong>python</strong>).</p>
  </li>
</ul>
<p style="text-align:start"></p>
<h5 style="text-align:start" id="cajon-de-herramientas"><mark style="color:inherit;background-color:#ffbe6f">Cajón de Herramientas</mark></h5>
<p style="text-align:start"></p>
<p style="text-align:start">Como aclaración solo vamos a mencionar algunas herramientas que usamos. Van a poder encontrar mucha info de como se usan las herramientas y queda como tarea auto-asistida.</p>
<p style="text-align:start"></p>
<h6 style="text-align:start" id="consola"><mark style="color:inherit;background-color:#ffbe6f">Consola</mark></h6>
<p style="text-align:start">Es un programa que nos permite ejecutar comandos y nos da respuestas. Facilita mucho la agilidad en el proceso de desarrollo.</p>
<figure><img src="public/rcj2drv4r9w1y2sc03ulfimzdhho/Captura desde 2024-10-09 04-37-41.png" class="img-fluid" controls="false"></figure>
<p style="text-align:start"></p>
<p style="text-align:start"><mark style="color:inherit;background-color:#ffbe6f">Editor</mark></p>
<p style="text-align:start">Es un programa que nos permite organizar y escribir nuestro código fuente. Entre los muchos que andan dando vuelta usamos VS Code</p>
<figure><img src="public/2yazq0fwshh8j7m6pvz8gxz5xrzo/Captura desde 2024-10-09 04-46-44.png" class="img-fluid" controls="false"></figure>
<p style="text-align:start"></p>
<h5 style="text-align:start" id="a-los-bifes"><mark style="color:inherit;background-color:#ffbe6f">A los bifes</mark></h5>
<p style="text-align:start"></p>
<p style="text-align:start"><a href="https://smup.sutty.nl/2024/10/09/apuntes-python.html" rel="noopener" target="_blank" referrerpolicy="strict-origin-when-cross-origin">Algunos apuntes sobre Python</a></p>
<p style="text-align:start"></p>
<h5 style="text-align:start" id="etapa-superior-del-pythonismo-...-bienvenidos-a-django"><mark style="color:inherit;background-color:#ffbe6f">Etapa superior del Pythonismo ... Bienvenidos a Django</mark></h5>
<p style="text-align:start"></p>
<p style="text-align:start">Desarrollar aplicaciones web es un desafío, es llegar a hacer esas herramientas que necesitamos. Por suerte para nosotros y nosotras existen los frameworks, que son algo así como estructuras que nos ayudan a construir cosas, en este caso aplicaciones web, a partir de facilitar formas de hacer esas cosas en base a buenas prácticas y muuuuuchos módulos con funcionalidad básica que suele usarse mucho y no tenemos que hacer desde cero.</p>
<p style="text-align:start">Vamos a usar DJango un framework para el desarrollo de aplicaciones web basado en Python.</p>
<p style="text-align:start">Algunos apuntes sobre Django (próximamente)</p>
<p style="text-align:start"></p>
<h5 style="text-align:start" id="a-modo-de-cierre"><mark style="color:inherit;background-color:#ffbe6f">A modo de cierre</mark></h5>
<p style="text-align:start"> </p>
<p style="text-align:start">La clave es no desarrollar sofware solos y solas, es proponernos aprender con otros y con otras, es recuperar la construcción de saberes de forma colectiva. </p>
<p style="text-align:start">Necesitamos hacer software porque necesitamos herramientas para organizarnos, disponer nosotros y nosotras de nuestros datos, aprender nosotros y nosotras de esos datos y que con ese aprendizaje podamos volver a intervenir en la realidad que queremos transformar, cada uno y cada una desde sus espacios de intervención.</p>
<p style="text-align:start">Dejo un lugar para comenzar a intercambiar ideas, necesidades y canalizar acciones: <a href="mailto:secretos.que.mienten.un.poco@proton.me" rel="noopener" target="_blank" referrerpolicy="strict-origin-when-cross-origin">mailto:secretos.que.mienten.un.poco@proton.me</a></p>
<p style="text-align:start"></p>
<h5 style="text-align:start" id="nota-al-pie"><mark style="color:inherit;background-color:#ffbe6f">Nota al pié</mark></h5>
<p style="text-align:start"></p>
<p style="text-align:start">Comentarios y correcciones bienvenidos.</p>
<p style="text-align:start"></p>]]></content><author><name></name></author><summary type="html"><![CDATA[Vengo desde hace un tiempo leyendo mucho y pensando más de lo que leo, sobre el poder que pesan en kilos de datos las Big Techs, fundamentalmente las que dan identidad a esa bomba atómica que arrasó internet bajo la bandera de GAFAM. No me voy a detener en analizar a las Big Techs del GAFAM, sobre eso ya se han escrito demasiadas páginas en la web y en el papel, por lo que voy a ensayar una propuesta para salir jugando por abajo, como diría un amigo que todo lo vuelve una metáfora futbolera. Necesitamos desarrollar software El software rara vez se hace para dar herramientas a los procesos de transformación que necesitamos los y las que desde abajo y a la izquierda, buscamos construir alternativas al sistema dominante, a los que buscamos un mundo en el que quepan muchos mundos. Digo rara vez porque es necesario honrar el Software Libre, ese movimiento político que de la mano de muchos y muchas ha logrado volver realidad el sueño de la Tecnología Social. Necesitamos más Tecnología Social, necesitamos software que respetando nuestro rol central de usuarias y usuarios, respetando la privacidad de nuestros datos, respetando los derechos humanos, nos brinde herramientas que nos permitan desarrollarnos como colectivos de trabajadoras y trabajadores, de estudiantes, de madres y padres, de niñas y niños, de viajeras y viajeros, de vecinas y vecinos. El problemas es que nos han hecho creer durante mucho tiempo que el software es cosa de técnicos, nerds, blancos, heterosexuales y de clase media. Así es como el que no sea parte de ese grupo selecto de pseudo intelectuales de la tecnología, debería limitarse a regalar sus datos, sus deseos, sus necesidades, sus tiempos y sus angustias a las plataformas que venían a llenarnos de herramientas gratis que nos resuelven todo, nos traen amigos del pasado que hace años que nos son nuestros amigos, nos da la posibilidad de comer sin volver a tocar una olla o de tener un gato tailandés con jaula y todo en 24 hs en la puerta de mi caso con envío gratis, hacen la magia oculta de crearnos necesidades de consumodecualquiercosa que no tenemos. Que la tortilla se vuelva ... De momento hay buenas noticias, podemos hacer software nosotras y nosotros sin ser ingenieros de no se que cosa. Primera interesante aclaración es que hacer software no significa vivir de hacer software, la diferencia es similar a la posibilidad de tener una huerta y proveernos nuestros propios alimentos o ser un mercado central mayorista de frutas y verduras. Demasiada propaganda barata nos promete cobrar 5000 dólares al mes luego de una curso de programación de 6 meses, se hace cada vez más necesario que dejemos de consumir las promesas del mercado. Tampoco vamos a meternos en esta pelea ahora, simplemente cabe mencionar la estafa piramidal 4.0. Volviendo a es de que podemos hacer software nosotras y nosotros arrancamos por pensar que necesitamos, va una lista más o menos desordenada e incompleta pero que sirve de referencia. Primero tenemos que saber que problema queremos resolver ayudados por la tecnología, donde hay una necesidad hay un derecho decía Evita y podemos agragarle que también hay un software. Lo importante es entender que el software es una herramienta para nosotros y no es una cosa en si misma. Tenemos que tener la disposición de aprender, de meter las patas en el barro como se dice por ahí. Cuestiones menos filosóficas necesitamos una computadora y una conexión a internet. Cuestiones más filosóficas necesitamos hacer software con otras y otros, la Tecnología Social es un proceso colectivo o no es nada. Tenemos que tomarle cariño a la lógica y a las matemáticas, que no solo nos va a servir para programar, nos va a servir para la vida. La demonización de las matemáticas es una cuestión que las clases dominantes entendieron y ejecutan a la perfección, hay que liberarse de eso y enamorarse de los malditos números. Me veo tentado a ir por acá un rato pero tampoco vamos a meternos en esta pelea ahora. Tenemos que tomar decisiones ... tecnologías hay muchas, lenguajes de programación hay muchos, manuales y videos hay más que muchos, de modo que para no marearse hay que meterse en las pantanosas arenas de la web con determinación y capacidad de síntesis, el gran problema puede ser sentirse abrumado por no saber a cual de los 300 youtubers que nos explican cosas ver o cual de las 400 webs con manuales leer. Hagamos lo imposible Desarrollar software es bastante más sencillo de lo que parece, sobre todo si no le tenemos miedo a las serpientes. Bienvenidos a Python Python es un lenguaje de programación y acá abrimos un paréntesis, porque hacer software es aprender a escribir en un nuevo lenguaje, casi como si aprendiéramos Italiano, Chino o Alemán. La diferencia es que lo que escribimos, que llamamos código, sirve para darle instrucciones a una computadora para que haga cosas, cuando hablamos de computadora hablamos no solo de PC sino de las computadoras que tienen los automóviles, los televisores o los tomógrafos, por lo tanto el código que vamos a escribir y que va a construir un programa puede usarse para que el auto nos indique como estamos estacionando o el tele nos deje ver una película. Porque Python Es un lenguaje fácil de aprender, con una sintaxis muy sencilla. Es un lenguaje de uso general, o sea sirve para hacer programas de todo tipo. Tiene una comunidad grande y solidaria. Es un lenguaje multiplataforma, por lo que el mismo código puede usarse en computadoras con Windows, macOS o Linux. Permite hacer código más rápidamente que en otros lenguajes, acortando la duración de los proyectos. Python viene instalado en la mayoría de las computadoras (podemos comprobarlo abriendo una consola o terminal y poniendo la palabra python). Cajón de Herramientas Como aclaración solo vamos a mencionar algunas herramientas que usamos. Van a poder encontrar mucha info de como se usan las herramientas y queda como tarea auto-asistida. Consola Es un programa que nos permite ejecutar comandos y nos da respuestas. Facilita mucho la agilidad en el proceso de desarrollo. Editor Es un programa que nos permite organizar y escribir nuestro código fuente. Entre los muchos que andan dando vuelta usamos VS Code A los bifes Algunos apuntes sobre Python Etapa superior del Pythonismo ... Bienvenidos a Django Desarrollar aplicaciones web es un desafío, es llegar a hacer esas herramientas que necesitamos. Por suerte para nosotros y nosotras existen los frameworks, que son algo así como estructuras que nos ayudan a construir cosas, en este caso aplicaciones web, a partir de facilitar formas de hacer esas cosas en base a buenas prácticas y muuuuuchos módulos con funcionalidad básica que suele usarse mucho y no tenemos que hacer desde cero. Vamos a usar DJango un framework para el desarrollo de aplicaciones web basado en Python. Algunos apuntes sobre Django (próximamente) A modo de cierre La clave es no desarrollar sofware solos y solas, es proponernos aprender con otros y con otras, es recuperar la construcción de saberes de forma colectiva. Necesitamos hacer software porque necesitamos herramientas para organizarnos, disponer nosotros y nosotras de nuestros datos, aprender nosotros y nosotras de esos datos y que con ese aprendizaje podamos volver a intervenir en la realidad que queremos transformar, cada uno y cada una desde sus espacios de intervención. Dejo un lugar para comenzar a intercambiar ideas, necesidades y canalizar acciones: mailto:secretos.que.mienten.un.poco@proton.me Nota al pié Comentarios y correcciones bienvenidos.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://smup.sutty.nl/public/0f9ehkx4o5qe3zxckatstrmx8rjg/tux-guevara-3250734491.png" /><media:content medium="image" url="https://smup.sutty.nl/public/0f9ehkx4o5qe3zxckatstrmx8rjg/tux-guevara-3250734491.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Cooperativismo de Trabajo - Algunos análisis posibles</title><link href="https://smup.sutty.nl/2024/06/03/cooerativismos-de-trabajo-algunos-an%C3%A1lisis-posibles.html" rel="alternate" type="text/html" title="Cooperativismo de Trabajo - Algunos análisis posibles" /><published>2024-06-03T00:00:00+00:00</published><updated>2024-06-03T09:47:59+00:00</updated><id>https://smup.sutty.nl/2024/06/03/cooerativismos-de-trabajo-algunos-an%C3%A1lisis-posibles</id><content type="html" xml:base="https://smup.sutty.nl/2024/06/03/cooerativismos-de-trabajo-algunos-an%C3%A1lisis-posibles.html"><![CDATA[<p style="text-align:start">La cooperativa como formato de empresa autogestionada por los trabajadores y las trabajadoras, abre un amplio escenario de posibilidades para el pasaje del trabajador, en tanto objeto al servicio del desarrollo de su patrón/capitalista, al trabajador sujeto al servicio de su propio desarrollo como trabajadxr y como persona en el marco de un desarrollo colectivo más amplio. En todo caso este proceso no está exento de desafíos por demás complejos.</p>
<p style="text-align:start">La democracia interna, la igualdad, la solidaridad, la cooperación, la horizontalidad, son objetivos que demandan un fuerte compromiso para ser alcanzados, o al menos buscados con compromiso; podemos decir en efecto, que el cooperativismo debiera ser la síntesis del desarrollo de un colectivo de personas que logran llevar a la prácticas estas máximas y no al revés.</p>
<p style="text-align:start">Sostener este proceso de transformación de las condiciones del trabajo, es una tarea por demás compleja, sobre todo si tenemos en cuenta que buscamos desarrollar un modelo de empresa y un modelo de economía, que va contra las máximas del sistema económico/social dominante. Por lo tanto, se abre la compleja tarea de pensar y llevar a la práctica estrategias para el desarrollo de este modelo de empresa de personas, dentro de un sistema de libre mercado que promueve el desarrollo de empresas de capital.</p>
<p style="text-align:start">Existe un antagonismo entre modelos, por un lado, el modelo capitalista, con base en la meritocracia y el individualismo, la explotación del hombre por el hombre y la explotación de la naturaleza, entre otras y por otro lado, las ideas que promueve el cooperativismo y de forma más amplia la Economía Social y Solidaria, apoyadas en cimientos de horizontalidad, perspectiva de derechos, respeto de la naturaleza. En este contexto, necesitamos una estrategia de actores múltiples, que permita una alianza de todos los sectores vulnerados por las consecuencias sociales del capitalismo: trabajadorxs, desocupadxs, jubiladxs, jóvenes, excluidxs. Necesitamos un ecosistema que cree las condiciones para el paso a una economía social y solidaria basada en las personas, y que se construya sobre las bases del desarrollo local y la integración regional.</p>
<p style="text-align:start">En palabras de Floreal Gorini</p>
<blockquote class="blockquote">
  <p style="text-align:start">Lo que hoy creemos es que hay que volver a las fuentes y plantearnos que el cooperativismo no sólo es una forma de organizar a los trabajadores y las trabajadoras en pequeñas comunidades cooperativas para producir, comercializar, explotar recursos de la naturaleza, etc, sino que además debe plantearse la transformación de la sociedad cuestionando todo lo que afecta al desarrollo de la cooperación, que le pone límites y que le es opositor. En consecuencia, tiene que realizarse un enfrentamiento cultural e ideológico con el capitalismo [Gorini 2004].</p>
</blockquote>
<p style="text-align:start">El desafío pasa por construir una alternativa desde el Cooperativismo y la Economía Social y Solidaria, que prefigure la sociedad con la que soñamos y la que buscamos construir en nuestras prácticas cotidianas. Miles de compañeres y organizaciones nos damos a la tarea de pensar desde la práctica cotidiana, un mundo en el que quepan todos los mundos, el gran desafió es seguir aprendiendo de las luchas que nos parieron y logran un proyecto de síntesis, que en la diversidad, nos de las herramientas para fundar un proyecto político y social aglutinante.</p>]]></content><author><name></name></author><summary type="html"><![CDATA[La cooperativa como formato de empresa autogestionada por los trabajadores y las trabajadoras, abre un amplio escenario de posibilidades para el pasaje del trabajador, en tanto objeto al servicio del desarrollo de su patrón/capitalista, al trabajador sujeto al servicio de su propio desarrollo como trabajadxr y como persona en el marco de un desarrollo colectivo más amplio. En todo caso este proceso no está exento de desafíos por demás complejos. La democracia interna, la igualdad, la solidaridad, la cooperación, la horizontalidad, son objetivos que demandan un fuerte compromiso para ser alcanzados, o al menos buscados con compromiso; podemos decir en efecto, que el cooperativismo debiera ser la síntesis del desarrollo de un colectivo de personas que logran llevar a la prácticas estas máximas y no al revés. Sostener este proceso de transformación de las condiciones del trabajo, es una tarea por demás compleja, sobre todo si tenemos en cuenta que buscamos desarrollar un modelo de empresa y un modelo de economía, que va contra las máximas del sistema económico/social dominante. Por lo tanto, se abre la compleja tarea de pensar y llevar a la práctica estrategias para el desarrollo de este modelo de empresa de personas, dentro de un sistema de libre mercado que promueve el desarrollo de empresas de capital. Existe un antagonismo entre modelos, por un lado, el modelo capitalista, con base en la meritocracia y el individualismo, la explotación del hombre por el hombre y la explotación de la naturaleza, entre otras y por otro lado, las ideas que promueve el cooperativismo y de forma más amplia la Economía Social y Solidaria, apoyadas en cimientos de horizontalidad, perspectiva de derechos, respeto de la naturaleza. En este contexto, necesitamos una estrategia de actores múltiples, que permita una alianza de todos los sectores vulnerados por las consecuencias sociales del capitalismo: trabajadorxs, desocupadxs, jubiladxs, jóvenes, excluidxs. Necesitamos un ecosistema que cree las condiciones para el paso a una economía social y solidaria basada en las personas, y que se construya sobre las bases del desarrollo local y la integración regional. En palabras de Floreal Gorini Lo que hoy creemos es que hay que volver a las fuentes y plantearnos que el cooperativismo no sólo es una forma de organizar a los trabajadores y las trabajadoras en pequeñas comunidades cooperativas para producir, comercializar, explotar recursos de la naturaleza, etc, sino que además debe plantearse la transformación de la sociedad cuestionando todo lo que afecta al desarrollo de la cooperación, que le pone límites y que le es opositor. En consecuencia, tiene que realizarse un enfrentamiento cultural e ideológico con el capitalismo [Gorini 2004]. El desafío pasa por construir una alternativa desde el Cooperativismo y la Economía Social y Solidaria, que prefigure la sociedad con la que soñamos y la que buscamos construir en nuestras prácticas cotidianas. Miles de compañeres y organizaciones nos damos a la tarea de pensar desde la práctica cotidiana, un mundo en el que quepan todos los mundos, el gran desafió es seguir aprendiendo de las luchas que nos parieron y logran un proyecto de síntesis, que en la diversidad, nos de las herramientas para fundar un proyecto político y social aglutinante.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://smup.sutty.nl/public/w26lqqrznkemipxnnj302yd2c4nc/queremos+un+mundo+donde+quepan+muchos+mundos-2512712315.jpg" /><media:content medium="image" url="https://smup.sutty.nl/public/w26lqqrznkemipxnnj302yd2c4nc/queremos+un+mundo+donde+quepan+muchos+mundos-2512712315.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Tal vez un libro - Convivencia y dependencia</title><link href="https://smup.sutty.nl/2024/05/29/tal-vez-un-libro-convivencia-y-dependencia.html" rel="alternate" type="text/html" title="Tal vez un libro - Convivencia y dependencia" /><published>2024-05-29T00:00:00+00:00</published><updated>2024-05-29T03:13:58+00:00</updated><id>https://smup.sutty.nl/2024/05/29/tal-vez-un-libro-convivencia-y-dependencia</id><content type="html" xml:base="https://smup.sutty.nl/2024/05/29/tal-vez-un-libro-convivencia-y-dependencia.html"><![CDATA[<p style="text-align:start">Militamos por la construcción de un nuevo mundo en el que quepan todos los mundos, vamos al encuentro de recuperar las luchas históricas para forjar los procesos de lucha actuales, recuperamos la educación popular, recuperamos los saberes de la patria grande, las experiencias de resistencias actuales y las hacemos carne en nuestros contextos de construcción territorial.</p>
<p style="text-align:start">Todo este proceso sin problematizar la influencia de las tecnologías 4.0 en el actual escenario de avanzada del capitalismo.</p>
<p style="text-align:start">Nuestros análisis de coyunturas de los últimos 10 años nunca se vieron atravesados por el impacto del capitalismo digital, no es parte de la agenda de las luchas sociales la necesidad de construir soberanía tecnológica. No podemos ver que el poder se crea y recrea al calor de la fibra óptica, las plataformas digitales, las redes sociales y la inteligencia artificial. La vigilancia nunca le ha sido tan simple al poder de turno.</p>
<p style="text-align:start">Convivimos con el enemigo, utilizamos sus plataformas, seguimos sus reglas en formatos términos y condiciones, nos adaptamos a usar la tecnología que el capital quiere, como quiere y cuando quiere y nos sometemos a un proceso consentido de extractivismo de datos. Lo saben todo y en base a eso lo direccionan todo.</p>
<p style="text-align:start">En este contexto adverso, una vez más la pregunta de Lenin se nos hace propia, qué hacer ?</p>
<blockquote class="blockquote">
  <p style="text-align:start">Lejos de tener respuestas, nos animamos a apoyar nuestros aportes en la pedagogía de la pregunta, entendiendo que tenemos que ser capaces de hacernos nuevas preguntas que habiliten los debates necesarios, los procesos de síntesis, serán producto de encontrarnos con nuevas perspectivas de análisis, en nuestro tránsito por estos tiempos de capitalismo neoliberal, racista, patriarcal y tecnológico.</p>
</blockquote>]]></content><author><name>[&quot;Fuser&quot;]</name></author><summary type="html"><![CDATA[Militamos por la construcción de un nuevo mundo en el que quepan todos los mundos, vamos al encuentro de recuperar las luchas históricas para forjar los procesos de lucha actuales, recuperamos la educación popular, recuperamos los saberes de la patria grande, las experiencias de resistencias actuales y las hacemos carne en nuestros contextos de construcción territorial. Todo este proceso sin problematizar la influencia de las tecnologías 4.0 en el actual escenario de avanzada del capitalismo. Nuestros análisis de coyunturas de los últimos 10 años nunca se vieron atravesados por el impacto del capitalismo digital, no es parte de la agenda de las luchas sociales la necesidad de construir soberanía tecnológica. No podemos ver que el poder se crea y recrea al calor de la fibra óptica, las plataformas digitales, las redes sociales y la inteligencia artificial. La vigilancia nunca le ha sido tan simple al poder de turno. Convivimos con el enemigo, utilizamos sus plataformas, seguimos sus reglas en formatos términos y condiciones, nos adaptamos a usar la tecnología que el capital quiere, como quiere y cuando quiere y nos sometemos a un proceso consentido de extractivismo de datos. Lo saben todo y en base a eso lo direccionan todo. En este contexto adverso, una vez más la pregunta de Lenin se nos hace propia, qué hacer ? Lejos de tener respuestas, nos animamos a apoyar nuestros aportes en la pedagogía de la pregunta, entendiendo que tenemos que ser capaces de hacernos nuevas preguntas que habiliten los debates necesarios, los procesos de síntesis, serán producto de encontrarnos con nuevas perspectivas de análisis, en nuestro tránsito por estos tiempos de capitalismo neoliberal, racista, patriarcal y tecnológico.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://smup.sutty.nl/public/u45tkzxc8psqm6nx6anbhzx0bsel/dependencia.jpg" /><media:content medium="image" url="https://smup.sutty.nl/public/u45tkzxc8psqm6nx6anbhzx0bsel/dependencia.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Tal vez un libro - Introducción</title><link href="https://smup.sutty.nl/2024/05/29/tal-vez-un-libro-introducci%C3%B3n.html" rel="alternate" type="text/html" title="Tal vez un libro - Introducción" /><published>2024-05-29T00:00:00+00:00</published><updated>2024-05-29T03:01:26+00:00</updated><id>https://smup.sutty.nl/2024/05/29/tal-vez-un-libro-introducci%C3%B3n</id><content type="html" xml:base="https://smup.sutty.nl/2024/05/29/tal-vez-un-libro-introducci%C3%B3n.html"><![CDATA[<p style="text-align:start">Las tecnologías atraviesan de forma transversal, los procesos productivos, las relaciones sociales, los procesos educativos, la construcción de poder y todas las interacciones que realizamos las personas entre nosotras y con el medio en el que vivimos.</p>
<p style="text-align:start">Uno de los principales problemas a los que nos enfrentamos, es que la tecnología, está al servicio de la reproducción del capital y ha transformado la avanzada actual del capitalismo, sobre el control total de la sociedad, producto del extractivismo de datos y la gestión del tiempo y los deseos mediado por las redes (anti)sociales.</p>
<p style="text-align:start">Por otra parte, la tecnología, en tanto mercancía, está al alcance del que tenga los medios materiales para comprarla, y no de quienes tenemos las necesidades vitales de utilizarla. En esto radica otro gran problema al que nos enfrentamos: la necesidad de una tecnología con perspectiva social y solidaria, y que habilite derechos.</p>
<p style="text-align:start">Las tecnologías encarnan en su génesis un modelo de mundo, no son neutrales, ni en su diseño, ni en el impacto de su aplicación, por el contrario, configuran fundamentalmente desde su diseño y desde el impacto práctico de su uso, una concepción de la sociedad que buscan reproducir. Por eso no alcanza con utilizar con nuevos fines las herramientas diseñadas para la reproducción del capital, no es el contexto social el que limita a las tecnologías, sino justamente lo contrario, las tecnologías se diseñan sobre el imperativo de producir, vigilar y castigar.</p>]]></content><author><name>[&quot;Fuser&quot;]</name></author><summary type="html"><![CDATA[Las tecnologías atraviesan de forma transversal, los procesos productivos, las relaciones sociales, los procesos educativos, la construcción de poder y todas las interacciones que realizamos las personas entre nosotras y con el medio en el que vivimos. Uno de los principales problemas a los que nos enfrentamos, es que la tecnología, está al servicio de la reproducción del capital y ha transformado la avanzada actual del capitalismo, sobre el control total de la sociedad, producto del extractivismo de datos y la gestión del tiempo y los deseos mediado por las redes (anti)sociales. Por otra parte, la tecnología, en tanto mercancía, está al alcance del que tenga los medios materiales para comprarla, y no de quienes tenemos las necesidades vitales de utilizarla. En esto radica otro gran problema al que nos enfrentamos: la necesidad de una tecnología con perspectiva social y solidaria, y que habilite derechos. Las tecnologías encarnan en su génesis un modelo de mundo, no son neutrales, ni en su diseño, ni en el impacto de su aplicación, por el contrario, configuran fundamentalmente desde su diseño y desde el impacto práctico de su uso, una concepción de la sociedad que buscan reproducir. Por eso no alcanza con utilizar con nuevos fines las herramientas diseñadas para la reproducción del capital, no es el contexto social el que limita a las tecnologías, sino justamente lo contrario, las tecnologías se diseñan sobre el imperativo de producir, vigilar y castigar.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://smup.sutty.nl/public/vmrql1m1pah04eovp29inh2gh1qp/Captura%20desde%202024-05-28%2023-57-38.png" /><media:content medium="image" url="https://smup.sutty.nl/public/vmrql1m1pah04eovp29inh2gh1qp/Captura%20desde%202024-05-28%2023-57-38.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Pensando en vos siempre</title><link href="https://smup.sutty.nl/2024/05/28/pensando-en-vos-siempre.html" rel="alternate" type="text/html" title="Pensando en vos siempre" /><published>2024-05-28T00:00:00+00:00</published><updated>2024-05-28T11:52:00+00:00</updated><id>https://smup.sutty.nl/2024/05/28/pensando-en-vos-siempre</id><content type="html" xml:base="https://smup.sutty.nl/2024/05/28/pensando-en-vos-siempre.html"><![CDATA[<blockquote class="blockquote">
  <p style="text-align:start">¿En qué pensamos cuando luchamos?</p>
</blockquote>
<p style="text-align:start">Luchar es parte de un movimiento, un movimiento que tiene un detonante, luchamos por algo, luchamos por algo que nos quitan o por tener algo que nunca tuvimos, luchamos para acompañar otras luchas, y creemos en que la lucha más auténtica es la lucha colectiva. Luchamos porque soñamos.</p>
<p style="text-align:start">Parte de la lucha es táctica y es estrategia. Luchar es en definitiva pensar cómo, cuándo, con quiénes y contra quiénes luchamos.</p>
<p style="text-align:start">Yo cuando lucho pienso en ella, porque es una manera de recuperar el sentido de la lucha, dar respuestas a esas preguntas cómo, cuándo, con quiénes y contra quiénes luchamos.</p>
<p style="text-align:start">Endurecerse sin perder la ternura decía El Che, y eso es ella, es la mano en alto contra el enemigo y la sonrisa para marcarnos el camino, porque el camino es, sobre todo, la forma en la que ese camino se recorre.</p>
<p style="text-align:start">Pensamos en ella y entendemos que ahora es cuando, no mañana, su gran legado es enseñarnos que el mañana lo construimos luchando hoy.</p>
<blockquote class="blockquote">
  <p style="text-align:start">Pensamos en vos cuando luchamos y esperamos seguir pensando las luchas con vos, en este día y cada día.</p>
</blockquote>
<p style="text-align:start">Venceremos Venceremos Venceremos</p>]]></content><author><name>[&quot;Fuser&quot;]</name></author><summary type="html"><![CDATA[¿En qué pensamos cuando luchamos? Luchar es parte de un movimiento, un movimiento que tiene un detonante, luchamos por algo, luchamos por algo que nos quitan o por tener algo que nunca tuvimos, luchamos para acompañar otras luchas, y creemos en que la lucha más auténtica es la lucha colectiva. Luchamos porque soñamos. Parte de la lucha es táctica y es estrategia. Luchar es en definitiva pensar cómo, cuándo, con quiénes y contra quiénes luchamos. Yo cuando lucho pienso en ella, porque es una manera de recuperar el sentido de la lucha, dar respuestas a esas preguntas cómo, cuándo, con quiénes y contra quiénes luchamos. Endurecerse sin perder la ternura decía El Che, y eso es ella, es la mano en alto contra el enemigo y la sonrisa para marcarnos el camino, porque el camino es, sobre todo, la forma en la que ese camino se recorre. Pensamos en ella y entendemos que ahora es cuando, no mañana, su gran legado es enseñarnos que el mañana lo construimos luchando hoy. Pensamos en vos cuando luchamos y esperamos seguir pensando las luchas con vos, en este día y cada día. Venceremos Venceremos Venceremos]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://smup.sutty.nl/public/xosa9opqgoyiezoz7vmh1egsbm49/nora-cortinas-1021x580.jpg" /><media:content medium="image" url="https://smup.sutty.nl/public/xosa9opqgoyiezoz7vmh1egsbm49/nora-cortinas-1021x580.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Políticas de privacidad</title><link href="https://smup.sutty.nl/2023/12/11/pol%C3%ADticas-de-privacidad.html" rel="alternate" type="text/html" title="Políticas de privacidad" /><published>2023-12-11T00:00:00+00:00</published><updated>2023-12-11T16:21:17+00:00</updated><id>https://smup.sutty.nl/2023/12/11/pol%C3%ADticas-de-privacidad</id><content type="html" xml:base="https://smup.sutty.nl/2023/12/11/pol%C3%ADticas-de-privacidad.html"><![CDATA[<blockquote>
<p>Utilizamos la e como pronombre neutro para referirnos a personas
independientemente de su identidad de género, por ejemplo “usuarie”.</p>
</blockquote>
<p>Este documento detalla la política de privacidad de Sutty, incluyendo
sitio web, plataforma de edición, infraestructura relacionada (salas de
chat, etc.) y sitios creados por sus usuaries a través de la plataforma,
en adelante "Sutty".</p>
<h2>¡Esto es demasiado largo!</h2>
<p>Un resumen:</p>
<ul>
<li>
<p>Sutty no recolecta datos personales de ningún tipo</p>
</li>
<li>
<p>Sutty solo recolectaría datos analíticos que no identifican a
personas</p>
</li>
</ul>
<h2>Datos analíticos</h2>
<p>La única recolección de datos realizada por Sutty es con fines
analíticos (cantidad de visitas, duración, etc.), no asociados a datos
personales.</p>
<p>Los datos analíticos recolectados por cada sitio podrán ser utilizados
internamente por Sutty.  Sutty no comparte datos analíticos con
terceros en forma privada.  Datos analíticos seleccionados podrán ser
utilizados públicamente.</p>
<p>Sutty no recomienda la recolección de datos personales de ninguna forma,
pero no monitorea que les usuaries utilicen servicios de terceros con
sus propias políticas de privacidad.  Recomendamos a les usuaries y
visitantes informarse antes de utilizar servicios de estadísticas de
terceros.</p>
<h2>No registro de datos personales</h2>
<p>Sutty no registra direcciones IP de usuaries ni de visitantes de ninguna
forma.</p>
<p>Sutty no solicita datos personales para el registro de cuentas de
usuarie en su plataforma.</p>
<p>Sutty solo utiliza “cookies” de sesión para identificar usuaries
mientras utilicen la plataforma.  No se utilizan “cookies” para
identificar visitantes a los sitios alojados por Sutty.</p>
<p>El único caso en el que Sutty podría solicitar datos personales es
durante el pago de servicios.  Se tomarán medidas de seguridad digital
para salvaguardar esta información y descartar lo que sea posible una
vez que ya no sea necesaria.</p>
<p>Se notificará a les usuaries cuando su información personal sea
eliminada.</p>
<p>Si les usuaries deciden alojar sus sitios con terceros, deberán
informarse de las políticas de privacidad correspondientes.  Sutty
recomienda servicios de terceros con políticas de privacidad coherentes
con estas.</p>]]></content><author><name></name></author><summary type="html"><![CDATA[¿Cuáles son los cuidados de este sitio con respecto a sus usuaries y visitantes?]]></summary></entry><entry><title type="html">Licencia de Producción de Pares</title><link href="https://smup.sutty.nl/2023/12/11/licencia.html" rel="alternate" type="text/html" title="Licencia de Producción de Pares" /><published>2023-12-11T00:00:00+00:00</published><updated>2023-12-11T16:21:16+00:00</updated><id>https://smup.sutty.nl/2023/12/11/licencia</id><content type="html" xml:base="https://smup.sutty.nl/2023/12/11/licencia.html"><![CDATA[<p>Esto es un resumen legible por humanas del <a href="http://endefensadelsl.org/ppl_es.html">texto legal (la licencia
completa)</a></p>
<h2>Ud. es libre de</h2>
<p><strong>Compartir</strong> - copiar, distribuir, ejecutar y comunicar públicamente la obra</p>
<p><strong>Adaptar</strong> - Hacer obras derivadas</p>
<h2>Bajo las condiciones siguientes:</h2>
<p><strong>Atribución</strong> - Debe reconocer los créditos de la obra de la manera
especificada por el autor o el licenciante (pero no de una manera
que sugiera que tiene su apoyo o que apoyan el uso que hace de su
obra).</p>
<p><strong>Compartir bajo la Misma Licencia</strong> - Si altera o transforma esta
obra, o genera una obra derivada, sólo puede distribuir la obra
generada bajo una licencia idéntica a ésta.</p>
<p><strong>No Capitalista</strong> - La explotación comercial de esta obra sólo está
permitida a cooperativas, organizaciones y colectivos sin fines de
lucro, a organizaciones de trabajadores autogestionados, y donde no
existan relaciones de explotación. Todo excedente o plusvalía
obtenidos por el ejercicio de los derechos concedidos por esta
Licencia sobre la Obra deben ser distribuidos por y entre los
trabajadores.</p>
<h2>Entendiendo que</h2>
<p><strong>Renuncia</strong> - Alguna de estas condiciones puede no aplicarse si se
obtiene el permiso del titular de los derechos de autor.</p>
<p><strong>Dominio Público</strong> - Cuando la obra o alguno de sus elementos se
halle en el dominio público según la ley vigente aplicable, esta
situación no quedará afectada por la licencia.</p>
<p><strong>Otros derechos</strong> - Los derechos siguientes no quedan afectados por
la licencia de ninguna manera:</p>
<p>Los derechos derivados de usos legítimos u otras limitaciones
reconocidas por ley no se ven afectados por lo anterior;</p>
<p>Los derechos morales del autor;</p>
<p>Derechos que pueden ostentar otras personas sobre la propia obra o
su uso, como por ejemplo derechos de imagen o de privacidad.</p>
<p>Aviso - Al reutilizar o distribuir la obra, tiene que dejar muy en
claro los términos de la licencia de esta obra. La mejor forma de
hacerlo es enlazar a esta página.</p>]]></content><author><name></name></author><summary type="html"><![CDATA[Esta obra está bajo una Licencia de Producción de Pares]]></summary></entry></feed>