Sopa de letras

Lecturas

¡Descubre los fascinantes artículos en Sopa de Letras!

from Why choose Mastodon and why not.

Why you should choose Mastodon. Everything you need to know.

1) You can federate or not Federate and rest assured where ever you land at, the familiar ui will forever stay.

You can join any server/instance with any focused topic you want. It doesn't matter how many users are eon there as you can federate. If you don't want to federate and rather stay locked into just one local server you can do that too, but in that case user count does matter more, if you want activity and some amount of interaction and variety. No matter what server you decide to join the UI of Mastodon will always be available. There's no such one server that hosts all the messages on Mastodon that we all relief on it all is built up on from many smaller servers adding up to the bigger Fediverse. There is also no restricted license and corporate agenda keeping people from keeping the UI they once loved alive. Struggles many people had to put with with regards to other types of licenses.

  1. Despite using the same UI, each Mastodon server-instance has it's own personality, moderation practices, standards, exceptions and Morals.

Some servers even have multiple versions of the same server. Like on Sakurajima, an anime focused server ironically named after a volcano. They might have a version for Mastodon, Elk, or even Sharkey. Some of these just use a different web ui for Mastodon, others are their own platform entirely but still Federate with Mastodon.

Instance hosts have their own priorities and rules. Some aim for care and treating users with attention and respect, others follow the Mastodon covenant, others don't and risk being filled with.. not the nicest of people. Some servers might have standards like requiring new users to have pfps or get their account frozen untill problems resolved, or risk being permanently or temp. banned.

Find where you feel at home at on Mastodon.

Why not choose Mastodon.

It is different form regular social media platforms and can be challenging for some to get use to.

 
Read more...

from Spammers on Mastodon?

There seems like there have been spam waves on Mastodon lately. Trolls that just got nothing to do but stir up troubles with allegedly innocent Mastodon instances that are hosted by independent hosts.

What do spammers do? Unlike trolls who come in to have real conversations but in a way to stir up drama, spammers will join a Mastodon server and just spam post the servers.

What Mastodon instance owners can try to defend from spam-

Servers with instant signup policies face the greatest server overload risks particularly from spammers, if they don't put in security measures such as setting manual review sign up, banning throw away email addresses (scammer tend to use), or setting bot checks.

Lesser known servers luckily remain the least affected by bots. If your server isn't listed on the official Mastodon instance page for finding an instance to join you may be less likely of encountering spammers in your server. This is because if it's on an alternative Mastodon instance search tool but not on the official, most people won't see your Mastodon instance as easily and be able to join it if they never find it.

Spammers must be stopped. Surely you wouldn't spam infesting your server as a host or even- a user.

What users can do.

If you notice a spammer on the local server you are on, report the spamming account to the servers owners and moderators if they don't know about it yet. After that, the user can just block that specific spammer and you won't see from them again. Atleast not that account. If spammers are rampant on your instance the owner might have to make drastic changes to how it handles new account signups.

Rob200- I hope this has given insight, and clarification to the whole situation revolving around spammers, and if it has impacted you, open signups might be the main culprit or if it's on popular search tools like the default Mastodon sign up process.

 
Read more...

from soldanes

Cinco años de cybercirujeo

EncuentroFederal

A fines de diciembre de 2018, estando ya de vacaciones escolares y viviendo en un palacio de 27 m² en pleno Congreso contemplé una situación que me pareció horrorosa. Salía del ascensor y delante mio una vecina del edificio se iba con un gabinete entre las manos: vi como ella simplemente soltaba la máquina y la dejaba caer en la vereda con el estruendo propio de la chapa noventosa de una buena computadora de formato horizontal. Demoré la llegada a lo de mi amigo para levantar ese cacharro, que resultó ser una gloriosa 486, muy parecida a la primera compu que hubo en casa. Lamentablemente, el HDD no andaba y no tenía otro para probar. Pero bastaron solo unos días para que consiga el repuesto: las grandes urbes son un cementerio de basura electrónica que se apila, se oxida y se desguasa a la vista de todos.

Con un disco y más RAM cirujeada pude revivir esa 486, ponerle un D.O.S, instalarle DOOM y un par de juegos más de la época. Eso me hizo pensar que tal vez podríamos sumar retrocomputadoras rescatadas de la basura a los eventos que se venían haciendo en el Teatro Mandril. A mi amigo Herni le copó mucho la idea y supongo que entre charlas, birras y arcades surgió el nombre “cybercirujas”, una conjunción de dos términos maravillosos: el cirujeo clásico de la Argentina más el concepto cyber con “y”, no con “i”, ya que no solo refiere al concepto de “cyber”, esos espacios de socialización de la Internet y los videojuegos post 2000s sino también mezcla obviamente los conceptos de cyberpunk y cyberespacio. Así fue que en alguna Muere Monstruo Muere Monstruo Muere de enero o febrero del 2019 apareció por primera vez la idea de Cybercirujas’Club, un espacio donde socializar tu retrotecnología alejada completamente del concepto de mercantalización de lo antiguo y el rescate de equipos que pudieran seguir batallando en uno de los frentes más bastardeados por el sistema capitalista: la búsqueda del ocio.

Durante ese 2019 nos fuimos sumando a movidas en la Muere Monstruo Muere, así fue que conocí a Vlas y a Zelmar, quienes en una fecha montaron un nextcloud (una nube como google drive) al cual podías acceder desde un wifi y te permitía descargar software y libros piratas. En paralelo, venía indagando en la movida de selfhosting y puntualmente en la reutlización de equipos antiguos para brindar servicios web. Me hice de una Mac Mini G4 y una i5 de 3ra generación en el cual monté distintas aplicaciones para satisfacer algunas necesidades de cómputo y no depender de los servicios de Google u otros. Se iba gestando, de esta manera, una forma de pensar un hacktivismo, una militancia tecnopolítica que cuestionaba los hábitos computacionales que teníamos naturalizados. Fui conociendo así a distintas personas en el cyberespacio que pensaban y accionaban parecido. Proyectos como Disroot, que ofrece servicios de mail y nube sin trackeo ni robo de información, o también Undernet.uy, en menor escala pero también de forma completamente autogestiva y cyberciruja. Ese año también tuve la suerte de participar del documental “Videojuegos sobre ruedas”: viajamos hacia Córdoba y allí pude conocer en persona a mi actual amigo ̣Nicolás Wolovick, cyberciruja y computologo.

Nico es docente y al igual que yo, militante a ultranza del software libre. Estos dos hechos hicieron que durante la pandemia del 2020 nos preguntemos muchas cosas. ¿Qué pasa con nuestros alumnos o conocidos que necesitan una computadora para trabajar y/o estudiar en este contexto?¿Cómo que tienen una compu pero no la pueden usar porque el sistema no responde?¿Por qué tenemos conocidos con laptops o PC’s usables cajoneadas sin usar? Ambos, él desde Córdoba, yo desde CABA, comenzamos a ver cómo colaborar con quiénes precisaban equipos y, además, hacernos de repuestos o de desguaces, ya sea porque los encontrábamos en la calle o porque nos los hacían llegar. Así fue que aquella idea de Cybercirujas, que surgió puramente desde el ocio, luego se encaminó hacia las ideas del selfhosting y la soberanía de cómputo, finalmente terminó sumando una militancia territorial que aunaba el derecho a reparar y la lucha por disminuir brecha digital. Todo esto hizo que durante ese año diésemos unas charlas en YouTube, organicemos el grupo de Telegram y comenzáramos, ahora sí, a gestar una verdadera Comunidad Organizada.

Como se habrán dado cuenta, la idea de Cybercirujas fue creciendo muy rápidamente y sin demasiada organicidad. Muchos medios se hicieron eco de nuestras acciones y así más gente se fue enterando. Nico desde Córdoba fue juntando gente, yo desde CABA, y luego se fueron sumando gente de Rosario, Santa Fe y de distintas partes siempre bajo un mismo paraguas: la lucha contra la obsolescencia programada como un puntal político, pero también, la experimentación tecnológica y la conquista del ocio en nuestros eventos de El Club del Cybercirujeo.

Para nosotros la obsolescencia programada no consiste solamente en reparar una computadora para darle sobre vida, sino más bien es el basamento para desplegar muchas ideas que teníamos dando vueltas. El mercado del cómputo es el más redituable del mundo: si en el siglo XX los dueños del globo eran los industriales, hoy lo son los oligarcas del dato encarnados en figuras como Elon Musk o Jeff Bezos. Estos tecnocratas manejan la vida digital de miles de millones de personas en el globo y son quienes dictan cómo tienen que ser los dispositivos que navegan esas redes de datos privadas. Hay un circulo vicioso entre prestadoras de software y fabricantes de hardware, en las cuales todas ganan menos los consumidores. Tampoco gana nuestro planeta que debe soportar un nivel de extractivismo y depredación brutal para poder mantener un modelo de “úselo y tírelo”. Es por eso que Cybercirujas se transformó, indefectiblemente, en un espacio de accionar completamente político. Arreglar una computadora o juntarse con amigos a reparar algo no es, necesariamente, una acción cyberciruja. Cybercirujas plantea mostrar lo político dentro de la tecnología: que tengamos que cambiar de celular cada 2 o 3 años, que sean las mujeres quienes más se acercan a pedirnos equipos, que encontremos computadoras funcionales en basurales, que la sociedad naturalice el espionaje o el monopolio de servicios informáticos, que no polemicemos sobre la tecnología, que no veamos el descalabro ecológico que genera el mercado de celulares; todo eso y mucho más dan cuenta de la acción política de cybercirujas.

Mapa

En estos cinco años hemos crecido como comunidad enormemente. Hemos entregado cientos de computadoras. Hay células cybercirujas actuando en el territorio de CABA, La Plata, Rosario, Santa Fe, Córdoba, Posadas, se está gestando una en Bariloche y cada tanto nos escriben para sumarse en otras partes del país. Logramos hacer nuestro 1er Encuentro Federal. Nos hemos posicionado como referentes dentro del hacktivismo territorial en la región. El motor de todo este movimiento no es otro más que el tecnoempoderamiento de la sociedad civil. Siempre hablamos con Nico que debemos desterrar para siempre el “no entiendo de computadoras”. No se trata de ser un hacker, se trata de comprender el mundo en que vivimos. Recién ahora con el ascenso del Presiduende, que fue ampliamente favorecido por el gran oligarca del dato Elon Musk, muchos comienzan a caer en la cuenta de la importancia de cuestionar los sistemas de cómputo, de dejar de naturalizar todo lo relativo a la tecnología. Quienes venimos del software libre hace mucho tiempo estamos cuestionando estas cosas, pero es cierto que el mundo linxuero siempre quedó relegado a un nicho cerrado y bastante tóxico.

Cybercirujas busca todo lo contrario. Necesitamos que la sociedad civil se tecnoempodere. Precisamos que se hagan carne propia los debates tecnológicos, es urgente que dejemos de naturalizar todas esas cosas y es una obligación moral de parte de quienes tenemos ese conocimiento, bajarlo a las bases, militarlo en el territorio de la forma que sea. El mundo del software libre y sus comunidades tradicionales quedaron estancadas: debemos buscar nuevas formas de territorializar estos debates. Cybercirujas lo encontró de una manera muy simple: reducción de la brecha digital mediante el derecho a reparar empleado por una Comunidad Organizada pero sin desligar el derecho al ocio, porque los eventos festivos y nocturnos que hacemos no solo son un laboratorio de experimentación tecnológica sino también son parte del derecho a ser felices. Así que ya saben… cybercirujas del mundo, ¡uníos! Y si necesitaban una excusa para brindar hoy, ya la tienen. Feliz cumpleaños, querida comunidad.

 
Leer más...

from zylog

#Zylog Somos muchos, somos pocos. Acá estamos, empujando. Nos morimos, nos matan. Acá estamos, Luchando. Nos engañan, Nos mienten. Acá estamos, sobreviviendo.

Que es Zylog, literalmente, es un chip de sonido de los años 70. Que es zylog. Es un proyecto independiente, de noise música, generada con softlibre. Pero de a poco se esta transformando, en algo mas que solo música, sobretodo relacionado con el softlibre. Luchando para que esto se de a conocer fuera de las bigtech.

Saludos.

 
Leer más...

from Bajo las estrellas

Esta noche comienza algo. Difuso e incierto, como la propia inspiración que hoy encuentro. Te miro. Te observo. Entrecierro los ojos para intentar recibir alguna señal. Algo de luz. Pero lo veo no es la oscuridad que te caracteriza. Ni tampoco esos lunares centelleantes que ocupan tu inmensidad. Solo hay gris. Sin forma ni expresión. Solo un manto grisáceo y difuminado que te oculta. Espero que no tarde en precipitarse entre gotas. O que navegue lejos hasta desaparecer, de manera que puedas volver a lucir como de costumbre, a animar a tantos a perderse para encontrarse.

 
Leer más...

from Joshi - Bitácora de aprendizajes

Programita para valorar seguridad de contraseña | POO

Sigamos sufriendo con POO. La idea que se me ocurrió hacer esta vez es un programa que le pida al usuario su contraseña, y le responda que el nivel de seguridad de esta. Mis criterios de evaluación serán muy básicos.

Planeemos nuestro programa:

  1. Defino clase como HowSecurePass
  2. ¿Que variables de instancia crearé para el constructor? Se me ocurren las siguientes:
    • un array vacío para guardar la contraseña del usuario (cada elemento del array será un elemento de la contraseña)
    • @esLetra para almacenar el número de elementos de la contraseña que sean letras.
    • @esNumero para almacenar el número de elementos de la contraseña que sean números.
    • @esSimbolo para almacenar el número de elementos de la contraseña que sean símbolos
    • @calificacion Donde guardaré la ponderación de puntos que evalúan que tan segura es la contraseña
  3. Método para pedirle la contraseña al usuario, y guardarla en la variable userPass
  4. Método para evaluar la seguridad de la contraseña del usuario:
    1. Primero de pasar el string de la contraseña que metió al usuario al array
    2. Después, como primer rasgo, evaluaremos la longitud de la contraseña.
    3. inmediatamente procederemos a evaluar los elementos de la contraseña convertida en array:
      • Si el elemento es una letra, @esLetra aumenta 1
      • Si el elemento es un número, @esNumero aumenta 1
      • Si el elemento es un símbolo, @esSimbolo aumenta 1
  5. Imprimimos calificación y definimos un mensaje de acuerdo a la calificación obtenida:
    • Si el puntaje es 5, Tu contraseña es completamente segura
    • Si el puntaje está entre 2 y 4, Debes mejorar la seguridad de tu contraseña
    • Si es menor a 2, ¡Cambia esa contraseña!

Desarrollemos nuestro programa:

class HowSecurePass
	# Creando mi constructor con las siguientes variables
	def initialize
		@evaluatePass=[]
		@esLetra = 0
		@esNumero = 0
		@esSimbolo = 0
		@calificacion = 0
	end
	
	# Defino un método para recibir la contraseña del usuario
	def userPass
		print "Dame tu contraseña "
		gets.chomp
	end
	
	
	#Método para evaluar seguridad de la contraseña
	def evaluator(userPass)
		# Pasar el string de la contraseña al array @evaluatePass
		@evaluatePass = userPass.chars # El método chars se encarga de hacer el trabajito de la conversión ^^'
		puts @evaluatePass
		
		=begin
		 Para no hacerme bolas, la variable contarCaracteres guarda la contraseña
		 en string para poder contar el número de elementos, ahorita
		  que lo pienso, pude simplemente contar los elementos del array... Duuuuh!!
		=end
		contarCaracteres = userPass
		
		# Evaluamos la longitud de la contraseña
		case contarCaracteres.length
		when 9..Float::INFINITY
			puts "Longitud adecuada"
			@calificacion += 2
		when 5..7
			puts "Podrías hacerla mas larga"
			@calificacion += 1
		else
			puts "LONGITUD INADECUADA"
		end
		
		# Que cosa tan hermosa es el case, ni yo me lo creo, es muy simple de entender y trabajar.
		
		#Evaluamos los elementos que componen la contraseña
		# NOTA MENTAL: APRENDER REGEX
		# Para hacerlo usaremos each do, un ciclo iterativo para ir recorriendo cada elemento de nuestro array
		@evaluatePass.each do |elemento|
		if elemento.match?(/[a-zA-Z]/) # Verifica si el elemento es una letra 
			@esLetra += 1
		elsif elemento.match?(/\d/) # Verifica si el elemento es un dígito
			@esNumero += 1
		else # Si no es una letra ni un número, se considera un símbolo
			@esSimbolo += 1
		end
		
		end
		
		# Trabajamos con los puntajes y hacemos los comentarios correspondientes
		
		puts "Tu contraseña tiene letras" if @esLetra > 0; @calificacion += 1 if @esLetra > 0
		puts "Tu contraseña tiene numeros" if @esNumero > 0; @calificacion += 1 if @esNumero > 0
		puts "Tu contraseña tiene simbolos" if @esSimbolo > 0; @calificacion += 1 if @esSimbolo > 0

# ¡Pero que hermosa forma de hacer los IF's! Ruby permite  poner primero la expresión y luego el if, como si fuera una oración hablada "Escribe esto si pasa esto" eso es genial, el ";" permite hacer un salto de line invisible para escribir la siguiente linea de código en la linea actual. 



		# Damos calificación
		print "Tienes #{@calificacion} de calificación, por lo tanto creemos que "
		
		case @calificacion
		when 5 then puts "TU CONTRASEÑA ES COMPLETAMENTE SEGURA"
		when 2..4 then puts "DEBES MEJORAR LA SEGURIDAD DE TU CONTRASEÑA"
		else puts "CAMBIA ESA CONTRASEÑA YA!!"
		end
end


end

#Ya creamos nuestro molde, ahora creemos el objeto particular

nuevaContra= HowSecurePass.new
evaluar = nuevaContra.userPass
nuevaContra.evaluator(evaluar)

Me siento satisfecho, no sé aún que tan bien he aplicado la POO en este ejercicio pero siento que he progresado.

NOTA MENTAL: Procuraré entrenar mas arduamente para mejorar mis habilidades de programación ^^'

 
Read more...

from Joshi - Bitácora de aprendizajes

Sufriendo con POO

El paradigma de POO (Programación Orientada a Objetos) siempre ha sido un problema para mí, debido la instrucción desordenada que recibí y que yo he continuado en programación. En la escuela aprendí a moverme con soltura en PHP pero siempre desde el paradigma procedimental, declarando y guardando variables... pero el POO solo lo vi de manera abstracta (mejor dicho conceptual; exposiciones de clase) lo que siempre ha sido para mi un reto, porque en programación se aprende practicando.

En internet también encontrar material para ejercitarse como el que yo requería es difícil. Los ejemplos siempre son muy ¿Simples? ¿No aplicables? Soy un cabeza dura, lo reconozco, aprendo a base de equivocarme una y otra vez. Así que se me ocurrió que ya que estoy aprendiendo Ruby, resolver los problemas clásicos de programación pero siguiendo en la medida que pueda los lineamientos de POO.

¿Que haremos hoy?

Sistemita que devuelve cambio

Un usuario ingresa una cantidad en el prompt y el programa se encarga de devolverle esa cantidad en billetes y monedas de distintas denominaciones

Le tengo cariño a este ejercicio porque fue el primer ejercicio donde en verdad me entretuve mentalmente en la escuela y no en mi casa con libros de la biblioteca.

Planteomoslo en paradigma POO

NOTA No tengo formación académica que me respalde, todo lo que hago es lo que creo que es y luego a base de golpes y metidas de pata me voy corrigiendo, así que no duda de mi, lector anónimo.

En POO debemos pensar primero en crear un molde genérico del programa, del que después iremos creando objetos específicos.

*Ese molde se llama CLASE*

class DarEfectivo
	# Aquí todo el código del molde 

end

En Ruby, siempre que se crea un objeto nuevo, busca un método llamado initialize y lo ejecuta.

initialize vendría siendo lo que en otros lenguajes conocen como constructor citando a Wikipedia:

En Programación Orientada a Objetos (POO), un constructor es una subrutina cuya misión es inicializar un objeto de una clase. En el constructor se asignan los valores iniciales del nuevo objeto.

Entonces, hagamos nuestro constructor, en este caso las variables que inicializaré serán dos arrays donde estarán almacenados las denominaciones de billetes y monedas.

Repito, fue la forma en que yo resolví el ejercicio y la forma en la que, de momento, he entendido el concepto.

Quedaría de esta forma:

class DarEfectivo

	def initialize
		@billetes =[1000,500,200,100,50,20]
		@monedas = [10,5,2,1]
	end

end

¡Ya tenemos nuestro molde! Pero aun está incompleto. debemos darle métodos.

Yo lo entendí de esta forma:

Un objeto tiene atributos y métodos. los atributos son como sus características, los métodos, en cambio, son las acciones que el objeto puede realizar.

En este caso, ¿Que acciones debe realizar nuestra clase para poder ayudarle al usuario con su cambio?

  • recibir datos del usuario.
  • devolver esos datos en billetes y monedas de distinta denominacion.

Por tanto, esos serán los dos métodos que crearemos:

Método 1: recibir datos del usuario


class DarEfectivo

#constructor
	def initialize
		@billetes =[1000,500,200,100,50,20]
		@monedas = [10,5,2,1]
	end

	# recibir datos del usuario
	def cantidad
		print "Dame un cantidad: "
		gets.chomp.to_i
	end

end

Método 2: Devolver el resultado

Esta parte ya es mas familiar para mí ^^' y es que debemos resolver el ejercicio en sí. Le dí un par de vueltas (En la prepa lo resolvimos a bese de puro if y else anidado pues era el tema de la clase) y se me ocurrió usar each do que usamos con los números primos (NOTA MENTAL: convertir el programita de numeros primos a POO)

Lo que vamos a hacer es:

  1. Recorrer el array elemento por elemento (Comenzando con los de mayor denominación)
  2. Si la cantidad que ingresó el usuario es mayor o igual a la denominación del billete (elemento del array):
    1. obtener la cantidad de billetes de esa denominación que pueden acompletar la cantidad (una división entera)
    2. Si el resultado de esa división entera es mayor que uno, se imprimirá el texto “billetes de” (mas de un billete), de lo contrario se imprimirá el texto “billete de” (para ser mas agradable y natural al usuario)
  3. La variable cantidad se actualiza al resultado de la división modular entre el billete con el que se le aplicó la división entera. Es decir, obtener el sobrante, el cual se reutilizará con el siguiente elemento del array.
  4. Si la cantidad no es mayor o igual al elemento del array en el que se encuentre, se pasa al siguiente elemento.
  5. Cuando termine el array de @billetes, nos seguimos con el array de @monedas, que tendrá exactamente el mismo comportamiento que el anterior array.

Quizá en código se entienda mejor mi soliloquio ^^'

class DarEfectivo
# Constructor
def initialize
	@billetes =[1000,500,200,100,50,20]
	@monedas = [10,5,2,1]
end

# Recibir datos del usuario
def cantidad
	print "Dame un cantidad: "
	gets.chomp.to_i
end

# Devolver la cantidad en billetes y monedas de distinta denominación.
def cambio(cantidad)
	
	@billetes.each do |billete|
		if cantidad >= billete 
		print "#{cantidad.div(billete)} " 
		unless cantidad.div(billete) != 1 then puts "billete de #{billete}" else puts "billetes de #{billete}" end
		cantidad=cantidad % billete
		end
	end
	
	@monedas.each do |moneda|
		if cantidad >= moneda 
		print "#{cantidad.div(moneda)} " 
		unless cantidad.div(moneda) != 1 then puts "moneda de #{moneda}" else puts "monedas de #{moneda}" end
		
		end
	end
	
end



end

Podemos notar algo interesante a diferencia del anterior método, y es que en def cantidad no pasamos ningún parámetro, a diferencia de def cambio(cantidad). Esto de pasar parámetros significa que hay métodos que necesitan un parámetro externo para trabajar.

Ahora sí, hemos terminado nuestro molde. Hora de crear un objeto para que nuestro usuario interactué con él.

# Creamos un objeto llamado mi_efectivo, a partir de la clase DarEfectivo.new
mi_efectivo = DarEfectivo.new

# La variable cantidad_ingresada guardará el valor que el usuario escriba en el método cantidad, que mandamos a llamar desde nuestro objeto creado.
cantidad_ingresada = mi_efectivo.cantidad


# ejecutamos el método cambio pasándole el valor de la variable cantidad_ingresada
mi_efectivo.cambio(cantidad_ingresada)	

y ¡voila! nuestro programa funciona.

 
Read more...

from Artilugios

Estimada A:

Volví a soñarte. Como te aferrras al mundo de mis sueños y como apareces en momentos en los que creo haberte soltado por completo.

En aquel sueño yo no era más que una persona común. Trataba de encontrar mi camino entre los mares de gente y darle un poco de sentido a mi existencia, un poco como en esta vida real. Estaba tratando de conseguir una clase en la universidad y convenciendo a la encargada de que me diera más horas. Me planté fuera de su oficina esperando encontrarla hasta que por fin me informó que se habían abierto algunas horas.

Tomé el colectivo de regreso a casa y fue cuando te vi. Venías caminando con un par de tus amigas con mucho entusiasmo, haciéndolas reír mucho. Siempre has sido una persona muy carismática, como un imán de personas que sabes ganártelas de inmediato. Pero noté, desde el colectivo, que cuando tus amigas se habían ido tú te quedaste llorando, con mucha tristeza. Sabía que ya no era mi obligación bajarme para consolarte, que tú ya tienes tu vida y yo la mía, y que si acaso nos comunicamos de repente es por pura cortesía.

Pero sucedió algo inesperado. Una vez que te limpiaste tus lágrimas mudaste de ropa gracias a la magia de los sueños. Te veías incréible, con un gran vestido colorido y tu peinado era una cola de caballo bastante elegante. Te dijiste a tí misma, pues no habías advertido que yo te miraba desde lejos, que irías a una cita con A.M. Fue ahí cuando un poco sentí los celos corroerme de nuevo, a pesar de los años que han pasado.

El colectivo aceleró de nuevo y yo me quedé llorando. La gente me miraba con un poco de lástima.

Siempre he pensado que los duelos de pareja tardan, tienen sus matices, van y vienen. A veces las personas se nos aparecen en sueños, en pensamientos, en una canción, no siempre de la misma manera. Yo siempre te recordaré con el mayor de los cariños, pues realmente nunca me hiciste algún mal que viniera desde la malicia.

Creo que hay una parte de mí que le gustaría bajarse de ese colectivo imaginario para seguirte ayudando y sanando tus heridas, por las personas que te han lastimado en estos años, las que se han alejado, las que te han confundido y por las malas decisiones que has tomado. Pero mi colectivo llamado vida debe seguir, y aunque sienta toda la tristeza del mundo cuando sé que algo malo te ha pasado, ya no me corresponde resolver nada.

Hemos intercambiado algunos correos en meses recientes. Estos correos para mí han sido sanadoras, parte de nuestro proceso de duelo y de sanación. Pero hay que entender los límites. Mandar un correo no es lo mismo que resolver ni querer volverse a colar en la vida de alguien más. Me gusta tu manera de escribir, a ti te gusta la mía. Nos gusta compartir algunas vivencias y algunos consejos de vida. Pero ahí el límite, el límite que nos separa y nos seguirá separando. Nuestro viaje de vida tuvo su fin, y a veces, queda la nostalgia de algo que ya no es y que se cuela en mis sueños recién comienza febrero.

 
Read more...

from Joshi - Bitácora de aprendizajes

Programita para identificar números primos.

Se me está haciendo tedioso aprender por temas, empezaré a probar por retos. Es decir, hoy quiero crear un programita que me siga si un número es primo o no. Es obvio que usaré condicionales, A partir de ahí, no sé. Veamos como lo soluciono.


Condicional 1

Crear programa donde de acuerdo al número que nos escriba el usuario, el programa nos diga is este número es menor, igual o mayor a 10

print "Ingresa un número: "
num = gets.chomp.to_i  #Ruby lee el número, le quitamos los caracteres ocultos y lo convertimos a entero.

if num < 10 # Si num es menor que diez..
	puts "El numero es menor a 10" # imprimes esto
elsif num == 10 # De lo contrario, si num es identico a 10
	puts "El número es igual a 10" # imprimes esto
else # De lo contrario
	puts "el número es mayor a 10" # Haces esto
end

Muy simple ¿No?

Intentemos hacer los siguiente:

EJERCICIO Identificando números primos con lo aprendido.

Recuerdo la criba de Eratostónes como una forma de identificar números primos. Lo que quiero hacer es un programa donde yo inserte un número y me diga si es primo o no, para deducirlo iré dividiendo el número entre los primeros 10 números primos, si no es divisible entre ninguno de ellos, daremos por hecho que es primo (Solo para practicar)

Intento de Solución 1
# EJERCICIO-3-Condicionales-2.rb
# IDENTIFICANDO NÚMEROS PRIMOS

print "Dame un número: "
num = gets.chomp.to_i

#Haremos uso de la divisińn modular.

if num.modulo(2) != 0 && num.modulo(3) != 0 && num.modulo(5) != 0 && num.modulo(7) != 0 && num.modulo(11) != 0 && num.modulo(13) != 0 && num.modulo(17) != 0 && num.modulo(19) != 0 && num.modulo(23) != 0 && num.modulo(29) != 0 && num.modulo(31) != 0
puts "El número #{num} es primo." 
else
puts "El número #{num} NO es primo." 
# Hasta aqui todo bien, sin embargo, en caso de que no sea primo, quiero que me diga entre que números es divisible.

unless num.modulo(2) != 0 then puts "Porque es divisible entre 2" end
unless num.modulo(3) != 0 then puts "Porque es divisible entre 3" end
unless num.modulo(5) != 0 then puts "Porque es divisible entre 5" end
unless num.modulo(7) != 0 then puts "Porque es divisible entre 7" end
unless num.modulo(11) != 0 then puts "Porque es divisible entre 11" end
unless num.modulo(13) != 0 then puts "Porque es divisible entre 13" end
unless num.modulo(17) != 0 then puts "Porque es divisible entre 17" end
unless num.modulo(19) != 0 then puts "Porque es divisible entre 19" end
unless num.modulo(23) != 0 then puts "Porque es divisible entre 23" end
unless num.modulo(29) != 0 then puts "Porque es divisible entre 29" end
unless num.modulo(31) != 0 then puts "Porque es divisible entre 31" end



end

Funciona genial!!!! Pero no me gustan las ultimas lineas es repetitivo y aburrido, siento que debe haber otra forma “Mas elegante de resolverlo”. Se me ocurre hacerlo con arrays.

*Un arreglo o array es una lista ordenada de elementos de cualquier tipo.*

Se me ocurre guardar todos los elementos a dividir en un arreglo y después que solo se opere con todos sus elementos internos.

el arreglo tendría la siguiente forma:

divisores = [2,3,5,7,11,13,17,19,23,29,31]

Intento de Solución 2

# IDENTIFICANDO NÚMEROS PRIMOS

print "Dame un número: "
num = gets.chomp.to_i

#Haremos uso de la divisińn modular.

if num.modulo(2) != 0 && num.modulo(3) != 0 && num.modulo(5) != 0 && num.modulo(7) != 0 && num.modulo(11) != 0 && num.modulo(13) != 0 && num.modulo(17) != 0 && num.modulo(19) != 0 && num.modulo(23) != 0 && num.modulo(29) != 0 && num.modulo(31) != 0
puts "El número #{num} es primo." 
else
puts "El número #{num} NO es primo." 
# Hasta aqui todo bien, sin embargo, en caso de que no sea primo, quiero que me diga entre que números es divisible.

# Haré un array para hacer el recorrido de divisiones
divisores = [2,3,5,7,11,13,17,19,23,29,31]

divisores.each do |divisor|
	if num.modulo(divisor) == 0 then puts "Porque es divisible entre #{divisor}" end
end

Ahora funciona con menos líneas de código ^^'... ¡ Y hemos hecho nuestra primeras iteraciones!

El método each acepta un bloque de código y lo ejecuta por cada elemento de la lista que se ira mandando a llamar con la variable definida entre los || (algunos les dicen pipes, no sé como se llaman realmente estos símbolos)

es decir: Por cada elemento en la lista, divisor va tomando su valor y se ejecuta la expresión > if num.modulo(divisor) == 0 then puts “Porque es divisible entre #{divisor}” end

Me ha entrado la curiosidad ¿Podría usar el array, y el método each para hacer mas elegante el if?

Intento de Solución 3

Conseguí esto:

# IDENTIFICANDO NÚMEROS PRIMOS

print "Dame un número: "
num = gets.chomp.to_i

#Haremos uso de la divisińn modular.

# Haré un array para hacer el recorrido de divisiones
divisores = [2,3,5,7,11,13,17,19,23,29,31]
variableContador = 0
divisores.each do |divisor|
	if num.modulo(divisor) == 0 then puts "Es divisible entre #{divisor}" else variableContador += 1 end
end

if variableContador != divisores.count then puts "Por lo tanto el número #{num} NO es primo" else puts "El número #{num} es primo" end

Estoy seguro que debe haber soluciones mas elegantes, pero como un tipo al que la programación siempre le ha dado quebraderos de cabeza, me siento muy a gusto con el resultado ^^'

 
Read more...

from Joshi - Bitácora de aprendizajes

Convirtiendo cadenas de texto a números

Todo bien hasta ahora, sin embargo lo único que estamos haciendo es imprimir los valores que recibimos. Aún no operamos con ellos.

Supongamos que queremos crear un programa dónde nosotros le demos el precio neto de un producto, y el programa nos devuelva el precio con IVA (Impuesto de Valor Agregado), sabiendo que el IVA equivale al 16%... ¿Cómo podríamos hacerlo?

EJERCICIO-2-CalculadoradeIVA-v1-rb

print "CALCULADORA DE IVA\n"
IVA = 0.16

print "Dame un precio: "
precio = gets.to_f
# El método to_f es el que se encarga de transformar el string en un número flotante.

#imprimimos el precio neto
puts "PRECIO: $#{precio}"

#calculamos el impuesto
puts "IVA: $#{precio*IVA}"

#calculamos el precio final o precio al público
puts "PRECIO AL PÚBLICO: $#{precio + (precio*IVA)}"

Como podemos ver, gets por defecto lo que recibe del usuario los usa como una cadena, pero si mandamos a llamar to_f (to float. convertir a flotante) hace la conversión correspondiente, obvio, si es un número, si fuera un texto, por ejemplo “oso”, el valor generado de la conversión sería 0.

 
Read more...

from irisvank

Contrariamente a la opinión popular,creo que éste mes de enero ha sido muy corto. Han pasado demasiadas cosas,casi ninguna buena y nos han traicionado más personas de lo esperado,lo que es mucho decir... Y como no sé qué hacer ni con los blogs que tengo, abandonados y con telarañas,me he metido a esta instancia,a ver qué sale. Así que este es mi post de prueba. No sé qué estoy haciendo. Nadie al volante... Cómo las movidas de Javier Milei I, pero sin intención de prender fuego todo,a diferencia de nuestro autopercibido emperador de pacotilla. Por lo general lo mío son los cuentos cortos y autoconclusivos.🧐 Ya veremos cómo resulta 🙈

 
Leer más...

from Artilugios

Tú: Recuerdo cuando nos conocimos cerca de aquel bar. Me saludaste con un abrazo cálido, lo recuerdo bien. ¿Tú tienes algún recuerdo de ese día? Ese día traté de impresionarte con palabras grandilocuentes, hablando sobre jazz y teoría social latinoamericana. Tal vez supusiste que genuinamente quería cambiar al mundo de un resoplido y que quería organizar alguna guerrilla urbana al sur de esta ciudad cansada.

Pocas veces agradezco al cielo y a la tierra el día de ese encuentro. Mi cunpleaños estaba a la vuelta de la esquina y coronaste el día con un beso de madrugada a mitad de nuestra borrachera.

Platicar contigo siempre ha sido fácil. Aún cuando tenía que arrancar de ti las palabras con preguntas y cuando tenía que compartir aliento contigo después de cruzar una calle con semáfotos discontinuos.

Viajamos varias veces esperando conocernos mejor, ver en el otro una comprensión fuera de todo enigma (y es que nos rodeaban tantos enigmas en aquellos días). En estos días sigo queriendo cambiar este viejo mundo con esas herramientas y esas metáforas de siempre, las mismas cantaletas y los mismos lugares comunes.

Ahora que vivimos juntos me pregunto si sentirás que sigo siendo un personaje extraño con todas las manías que salen de mis manos y todo el lenguaje inventado hasta el día de hoy. Palabras que se secan al borde de las árboledas y los campos de fútbol.

Granjearnos con los vecinos nunca ha sido lo nuestro y sin embargo hay un encanto en escuchar sus historias, como libros abiertos que se auto enaltecen de sus proezas de hace tantos años, seguros de que no tenemos manera de comprobar la veracidad de su narrativa.

No olvido tu tesis de jazz cubano, del cubop y la intensidad de la revolución cubana y la cultura en América Latina. Pero sobre todo no olvido nuestras ideas sobre el auto cuidado, la calma, los pasos conscientes y las respiraciones numeradas, el presente hecho eternidad y la capacidad que tenemos de regresar a nuestro origen. Ese origen que parece un obelisco antiguo en medio del desierto o de la playa.

¿Recuerdas esas madrugadas llenas de angustias? Sentía que mi cuerpo iba a apagarse a mitad de la calle. Todas esas energías puestas en nuestra supervivencia, lejos del arte, lejos de las palabras elocuentes y de las grandes empresas humanas. Sólo quedaba el miedo terrible de convertirse en polvo. Arrastrábamos nuestro cuerpo como cadáveres anticipados. Hoy nuestra sangre recorre nuestro cuerpo como esos ríos del Atlas de las infancias, aunque debo decirlo, la falta de hierro en tu sangre me preocupa.

Hay tanto que agradecer. Como en aquellos días que cuidabas de mis pensamientos con palabras que sonaban a atardeceres en la playa, que hacían un sonido hueco y un susurro catatónico en medio de dos grandes montañas. ¿Hasta dónde puede llegar la intimidad entre dos personas que se aman? ¿Acaso existe un límite a aquello que no puede medirse con instrumentos humanos?

Porque cuando digo que tomamos el sol y las palabras nos brotan como nuestras lavandas, las albahacas, la triste nochebuena que se aferra a vivir, y todas aquellas plantas que aún no son, cuando digo que tomamos el sol no puedo evitar evocar lo cercana que se siente tu palabra, lo familiar que nos es todo cuando estamos junts y nos reencontramos después de vigilar el despertar del sol.

Anticípate. Te observo. Te leo. Te amo. Te soy.

Para ti con cariño, Crs

 
Leer más...

from Deivis Diaz

Con el auge de las nuevas tecnologías referidas a la mal llamada inteligencia artificial, se ha normalizado un sin fin de tareas que se completan con la ayuda de aplicaciones, programas e incluso toda una suite entera de desarrollo.

Pero lo más grave, a mi parecer es que en lugar de utilizar estas herramientas como palancas de apoyos, nos servimos de ellas como muletas, convirtiéndonos en inútiles bien sea literarios, matemáticos o incluso de razonamiento.

Crear páginas web, reescribir textos, generar imágenes, compilar código y así una infinidad de tareas que dejan de lado cientos de horas de estudio y preparación de una gran cantidad de profesionales.

No queda más remedio que aprender a domar a este corcel indomable que tanto asusta a grandes inversores. Se ha escapado el genio de la lampara y no hay quien lo controle. De allí que el fundador de las ventanas libre una batalla encarnizada por echarle el guante.

Este siglo 21 no es de coches voladores ni de teletransportadores, se trata de crear innovación en base a unas herramientas que nosotros mismos nutrimos de información e incluso cedemos nuestros datos e información con total complacencia. Estamos en el siglo de la entrega total de nuestros pensamientos e imágenes en aras de conseguir un like o permanecer fiel a tus seguidores. Más estudio y disfrutar creando por nuestros medios y dejar de lado la entrega de nuestra soberanía digital.

 
Leer más...

from signicolor

Y si te apetece conocer en profundidad el significado de los colores en la biblia entra en este portal especializado en español. Te daremos antes unas pequeñas anotaciones. En la Biblia, los colores a menudo tienen simbolismos y significados específicos. A continuación se presentan algunos ejemplos de cómo se utilizan los colores en la Biblia y lo que pueden simbolizar: El rojo se asocia a menudo con la sangre y la vida. En la Biblia, el rojo puede simbolizar el sacrificio y la redención, como en la historia de Jesús, que derramó su sangre en la cruz para expiar los pecados de la humanidad. El azul se asocia a menudo con la fidelidad y la lealtad. En la Biblia, el azul puede simbolizar la presencia de Dios y su protección, como en el caso de la túnica azul que se le atribuye a Jesús en el libro de los Hechos de los Apóstoles. El verde se asocia a menudo con la naturaleza y la vida. En la Biblia, el verde puede simbolizar la esperanza y el crecimiento espiritual, como en el caso de los salmos que hablan de “la hierba del campo”, que representa la brevedad de la vida humana. El amarillo se asocia a menudo con la sabiduría y la luz. En la Biblia, el amarillo puede simbolizar la gloria de Dios y la presencia del Espíritu Santo, como en el caso de la descripción del vestido de Jesús como “resplandeciente como el sol” en el Evangelio de Mateo. Morado: El morado se asocia a menudo con la nobleza y la riqueza. En la Biblia, el morado puede simbolizar la realeza y la autoridad, como en el caso de la vestimenta de los reyes y los líderes religiosos. Es importante tener en cuenta que estos son solo algunos ejemplos de cómo se utilizan los colores en la Biblia y que los colores pueden tener diferentes significados en diferentes contextos y pasajes bíblicos. Además, es importante tener en cuenta que el simbolismo de los colores puede variar según la traducción y la interpretación de la Biblia. Los colores tienen diferentes significados y simbolismos en diferentes culturas y contextos. Aunque hay muchas interpretaciones diferentes de lo que pueden simbolizar los colores, en esta web especializada, considerada cómo la mejor de internet, hay algunas interpretaciones comunes de algunos colores. Eso sí, es importante tener en cuenta que estas interpretaciones son solo algunos ejemplos comunes y que los colores pueden tener diferentes significados en diferentes contextos y culturas. Incluso en diferentes momentos de la historia los colores pueden haber cambiado. El significado de los colores es el siguiente, dependiendo de cada uno de ellos: El rojo es a menudo asociado con la pasión, el amor, la emoción y la fuerza. También puede ser utilizado para indicar peligro o emergencia. El azul se asocia a menudo con la calma, la serenidad y la confianza. También puede ser utilizado para simbolizar la lealtad y la honestidad. El verde se asocia a menudo con la naturaleza, la frescura y la abundancia. También puede simbolizar la esperanza y el crecimiento. El amarillo se asocia a menudo con la alegría, la felicidad y la energía. También puede ser utilizado para simbolizar la cautela, como en los carteles de tráfico que advierten de peligros potenciales. El morado se asocia a menudo con la nobleza, la riqueza y la creatividad. También puede simbolizar el misterio y el espiritualismo. El blanco se asocia a menudo con la pureza, la inocencia y la limpieza. También puede ser utilizado para simbolizar la paz y la armonía. El negro se asocia a menudo con el lujo, la elegancia y la sofisticación. También puede simbolizar la misteriosidad y la oscuridad.

 
Read more...