Sopa de letras

Lecturas

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

from cuentosdeunmundodescosido

Un evento desafortunado

Érase una vez un mundo sin magia... A pesar de las distintas generaciones que nacieron y murieron soñando con la magia, ella nunca había tocado aquel lejano rincón de ese universo olvidado. Un universo olvidado, apartado y dejado sin supervisión, por guardianes que desdeñaban la existencia de un mundo ajeno a la magia. Tal vez por eso no se descubrió lo sucedido hasta que fue demasiado tarde. Una pluma mágica cayó en un rincón del tercer planeta de una estrella,una de tantas en su galaxia. Y un ser humano, habitante de dicho planeta, la tomó. Y la usó para escribir historias. Sus historias se hicieron realidad y pronto el caos reinó en el multiverso. Porque sus historias habían destruido la esperanza, e invocado a la nada y al olvido, las fuerzas que todo lo devoran, en un intento fallido de reemplazar a un personaje muerto que era antipático y que había matado por eso. Nadie en el multiverso estaba a salvo. El hombre, un anciano aparentemente inofensivo, nunca supo de las consecuencias de sus actos. Murió pacíficamente en su lecho, rodeado de sus seres queridos, mientras el multiverso era progresivamente consumido por la nada y el olvido. Ni siquiera su universo se salvaría al final ...

 
Leer más...

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 myreviews2024

Aloha, Yokohama! Bienvenidos a Like a Dragon: Infinite Wealth, están listos para la aventura?

Olvídate de las típicas reseñas estructuradas. Aquí vamos a sumergirnos en las calles luminosas de Like a Dragon: Infinite Wealth, el noveno título de la aclamada saga Yakuza, con la misma intensidad con la que Ichiban Kasuga se lanza a su nueva aventura. Agarra tu bate de béisbol más confiable y prepárate para un análisis sin filtros.

Aloha, Waikiki!: Playa paradisiaca de Honolulu con turistas disfrutando, motos acuáticas en el agua y el restaurante luau del juego en segundo plano.

Continuación o innovación?

Infinite Wealth toma el testigo de Yakuza: Like a Dragon, conservando su esencia RPG con combates dinámicos y un toque estratégico, pero no se trata de una simple copia. La incorporación de Kazuma Kiryu, el icónico protagonista de la saga original, aporta una capa de nostalgia y profundidad emocional que los fans agradecerán. Sin embargo, la verdadera innovación está en el escenario: ¡Hawaii! Adiós a las luces de neón de Kamurocho, hola a las playas soleadas de Honolulu. Este cambio aporta frescura y permite explorar nuevas mecánicas, como carreras de motos acuáticas y gestión de un restaurante luau.

Por qué es tan bueno?

Las razones son múltiples. En primer lugar, el humor. Like a Dragon siempre ha sido una serie con diálogos hilarantes y situaciones absurdas, y Infinite Wealth no defrauda. Las bromas de Ichiban siguen siendo igual de ingeniosas, y la interacción con Kiryu genera momentos cómicos impagables. En segundo lugar, el corazón. Los diálogos hilarantes y la trama conmovedora hacen que comprar Like a Dragon: Infinite Wealth sea una decisión acertada. La historia, sin entrar en spoilers, aborda temas como la familia, la lealtad y la segunda oportunidad de una forma conmovedora que te llegará al alma.

Pelea callejera con humor: Ichiban Kasuga lanzando un objeto absurdo a un enemigo confundido en una calle iluminada de neón.

Inspiración prestada?

Sí, pero con personalidad propia. La base del sistema de combate recuerda a clásicos como Dragon Quest y Persona, pero la implementación es única. La variedad de trabajos disponibles para los personajes, desde geodancer hasta chef, brinda un amplio abanico de habilidades y estrategias para experimentar. Además, los escenarios interactivos, donde puedes usar cualquier objeto a tu alcance como arma, añaden un toque alocado y divertido que no encontrarás en ningún otro juego.

Explorar más allá de las peleas:

El mundo de Infinite Wealth es más que combates callejeros. Yokohama y Honolulu están repletas de actividades secundarias: karaoke, gestión de negocios, minijuegos de casino... Hay tanto por hacer que puedes perderte horas sin percatarte del tiempo. Esta variedad garantiza que haya algo para todos los gustos, ya seas un amante de la acción o prefieras tomarte las cosas con calma.

Dúo explosivo: Ichiban y Kiryu posando juntos con expresiones divertidas, uno con un bate y el otro con un micrófono.

Quién disfrutará de este juego?

Si te gustan los RPG con corazón, humor y una pizca de locura, Like a Dragon: Infinite Wealth es para ti. No importa si eres fan de la saga Yakuza o un recién llegado, el juego te atrapará con su carisma y su mundo lleno de sorpresas. Para una experiencia única llena de combates frenéticos y momentos emotivos, no dudes en comprar juegos de PS5 como Like a Dragon: Infinite Wealth. Es perfecto para aquellos que buscan una experiencia única, que combina combates frenéticos con momentos emotivos y un toque de diversión desenfrenada.

Lo recomiendo?

¡Absolutamente! Si buscas un juego que te haga reír, llorar, cantar y, de paso, repartir unos cuantos sopapos con un bate de béisbol, Like a Dragon: Infinite Wealth es una apuesta segura. Prepárate para enamorarte de Ichiban, Kiryu y su alocada pandilla, ¡Aloha y hasta pronto!

 
Read more...

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 Un hombre lobo madrileño en Toledo

Nada

Cuando la humanidad despertó aquel día, el Sol no apareció en el horizonte.

Durante los primeros minutos nadie le dio demasiada importancia. Todos estaban muy ocupados preparándose para sus trabajos y sus vidas, pero las horas pasaban y el cielo no se iluminaba. Entonces comenzaron a preocuparse. La gente miraba sus relojes y los agitaban junto a su oído, pensando si acaso estarían estropeados, pero el Sol continuaba sin salir.

Científicos de todo el mundo estudiaron el fenómeno, y cuando obtuvieron las imágenes de los satélites que circundaban la Tierra advirtieron con estupor que el Sol había desaparecido. No había rastro de él por ninguna parte. Se registró hasta el último rincón del sistema solar recurriendo a los telescopios más potentes, pero el resultado siempre fue el mismo.

El Sol, sencillamente, se había esfumado.

Los primeros signos de la falta de luz y calor fueron visibles muy pronto. Las personas estaban más irritables. Los animales comenzaron a alterar su comportamiento, y las cosechas se resintieron. En los países más septentrionales la gente que no tenía recursos comenzó a morir de frío.

Pero la humanidad era fuerte, y luchó por sobreponerse a la adversidad. Las mentes más brillantes del planeta colaboraron entre sí para tratar de revertir la situación. Se dejaron a un lado las diferencias, las guerras y conflictos se olvidaron. En solo unos meses crearon un ingenio nuclear capaz de emular al Sol mediante una batería atómica de larga duración. Lo llamaron Sol-1. El lanzamiento, coordinado entre varios países, fue un éxito. Cuando el artefacto alcanzó una órbita estable alrededor de la Tierra entró en funcionamiento, y comenzó a proporcionar luz y calor a los seres humanos, creando un ciclo similar al del Sol. La humanidad lo había conseguido.

Una semana después, la Luna desapareció del cielo.

Después de la experiencia anterior los científicos ya no intentaron averiguar lo que ocurría. No había tiempo. Las mareas, privada la Tierra también de la gravedad del Sol, desaparecieron, y con ellas el transporte de nutrientes y microorganismos del que dependían las formas de vida marinas. Sin la Luna actuando como estabilizador, la Tierra comenzó a inclinarse perezosamente sobre su eje, lo que acabaría teniendo resultados catastróficos.

Pero la humanidad, una vez más, respondió con determinación. Habían superado la desaparición del Sol, y sin duda también lo harían con la de la Luna. En distintas factorías del planeta comenzaron a construirse módulos independientes, que al unirse formarían un satélite artificial que generase una atracción gravitatoria equivalente a la de la vieja Luna. Las distintas partes se construyeron en tiempo récord, y fueron enviadas al espacio por separado. Allí, un equipo de astronautas de varias naciones ensamblaron Luna-1. El proceso fue un éxito, y una vez que el nuevo satélite comenzó a orbitar alrededor de la Tierra, en perfecta sincronía con Sol-1, la situación en el planeta volvió a estabilizarse.

El tiempo transcurrió, y los humanos olvidaron lo que había ocurrido. Tenían un nuevo Sol y una nueva Luna que les permitían seguir con sus apacibles vidas. Pero la ciencia, una vez superada la crisis, continuó buscando respuestas. Se utilizaron los telescopios más avanzados de la Tierra para otear el espacio exterior, y los científicos observaron con pasmo que se estaba empezando a encoger. A encoger no, pensaron después. A desaparecer. Las constelaciones se esfumaban una tras otra, dejando solo un espacio negro en su lugar. Los planetas, las estrellas y los cometas eran reemplazados por la oscuridad.

Cuando se hizo público el descubrimiento la humanidad entró en pánico. Habían superado la desaparición del Sol y la Luna, pero esto era demasiado. El extraño fenómeno alcanzó el borde del sistema solar. Plutón, Neptuno y Urano dejaron de existir de un día para otro. El resto de los compañeros de la Tierra durante eones siguió pronto su camino. Solo quedó la Tierra, esta vez sí en el centro del universo. Cuando desaparecieron los satélites de comunicaciones estalló el caos. La gente comenzó a reunirse en grupos aleatorios, buscando compañía y refugio ante el incierto desenlace que se abría ante ellos. Luna-1 fue engullida por la oscuridad, seguida por Sol-1, lo que dejó al planeta sumido en una opresiva oscuridad. La Estación Espacial Internacional se evaporó, llevándose consigo las primeras vidas humanas que el extraño fenómeno se cobraba. En la esfera azul que había sido hogar de la humanidad durante tanto tiempo ahora se guardaba un silencio expectante. Todos miraban al cielo, pensando qué habrían hecho mal, en qué se habrían equivocado. Rezando por tener otra oportunidad para hacer las cosas de otra manera, para tratar al planeta como el hogar que siempre fue.

Y entonces desapareció la Tierra, y solo quedó la nada más absoluta.

 
Leer más...

from El blog de un Absolute Beginner

008 - Migración de iOS a Android (1): Antecedentes

008

Migración de iOS a Android (1)

Antecedentes

El pasado 4 de enero de 2024, tras la escucha de un episodio especial del pódcast “Applelianos” titulado Apple controla tu iPhone, tuve una gran revelación: de pronto sentí que me encontraba en un punto de no retorno en mi relación con Apple.

Todos sabemos que el ecosistema de Apple es uno de los engranajes más perfectos que existen en el mundillo tecnológico. Gracias a una minuciosa integración de sus dispositivos y su software con iCloud (su servicio de almacenamiento en la “nube”), Apple ofrece una comodidad y una productividad soñadas por muchas personas que, cuando emplean un dispositivo electrónico, quieren que todo funcione y que nada les arruine su experiencia de entretenimiento o de trabajo. Desde los tiempos de Steve Jobs y del primer Macintosh (enero de 1984), los productos y servicios de Apple siempre han estado dirigidos a dar la mejor experiencia de usuario, de manera que este no tenga la necesidad de saber cómo funcionan por dentro el hardware o el software de una computadora o de cualquier otro dispositivo electrónico, desde el Macintosh hasta las Vision Pro.

Apple “cuida” (o más bien, monitorea) la experiencia del usuario hasta el punto de anular su capacidad de decidir lo que es mejor para él: la compañía decide por él y se adelanta a sus necesidades, y en verdad el usuario se suele sentir satisfecho con las decisiones que Apple toma por él. En tiempos de Steve Jobs (anterior CEO de Apple), se decía que él sabía de antemano lo que el usuario necesitaba y, por eso, los nuevos productos de Apple siempre eran un éxito de ventas. De hecho, muchos de esos usuarios son conscientes de ello y aceptan de buen grado que Apple imponga sus propias normas en el uso de los dispositivos de su marca. Es lo más parecido a lo que coloquialmente se llama “pactar con el diablo”.

Mi primer contacto con Apple se remonta a principios del año 2016. Por aquel entonces, yo era usuario de un Samsung Galaxy S3, y un buen día la batería del móvil empezó a fallar estrepitosamente. Un dato curioso es que la batería de ese modelo de Samsung aún se podía extraer y sustituir por otra. Ante la posibilidad de comprar una nueva batería, decidí que era hora de cambiar de móvil y dar el gran salto a iPhone. La diferencia de precio era considerable, pero había echado el ojo a un modelo antiguo que vendían en la tienda k-tuin a precio rebajado: un iPhone 5S de 2013, con un procesador de 64 bits, 32GB de almacenamiento y, en mi opinión, uno de los mejores diseños históricos del iPhone.

Al adquirir un iPhone y entrar en el mundillo de Apple, sentí como que estaba jugando en una liga más avanzada, que estaba en otro nivel muy por encima de los demás dispositivos móviles de Android. Los podía mirar por encima del hombro y quedarme tan ancho. En esa época, la brecha entre Apple y el resto de competidores era considerable, y Android todavía era un sistema operativo claramente inferior a iOS. A partir de ese momento, como ha pasado a tantos otros usuarios de Apple, empecé a entrar poco a poco en su ecosistema: en 2018 me compré un iPhone Xr; en 2019, un iPad de 6a generación (2018); en 2020, unos AirPods de 2a generación (2019); en 2021, el Apple Watch SE; y en 2022, el MacBook Air con M1 (2020). En 2022 ya estaba metido de lleno en el ecosistema de Apple, aunque me faltaban algunos productos minoritarios como el Apple TV, el HomePod o los AirTags.

Durante estos 8 años como propietario de productos de Apple he podido descubrir cómo es la política de la compañía en muchos aspectos de la producción, venta y posventa. El punto más importante ha sido la constatación de que no poseo los artículos de Apple que compré (de ahí la cursiva de la palabra “propietario”) y de que estoy en manos de las decisiones arbitrarias (cada vez lo son más) de Apple. Os pondré varios ejemplos:

a) Si compras un iPhone, un iPad o un MacBook, ten en cuenta que Apple controla todo su software y hardware a través de las actualizaciones. Apple puede hacer que cualquier elemento del hardware deje de funcionar, así como descontinuar o desinstalar cualquier aplicación que hayas instalado previamente en tu dispositivo.

b) Si compras música o películas en la tienda de Apple, puede darse el caso de que alguno de esos artículos desaparezca repentinamente del catálogo y que no puedas volver a disfrutarlo. Hace unos años Amazon hizo algo semejante al retirar ciertos libros de la tienda Kindle (su lector de libros electrónico). Además, su disfrute tiene que ser obligatoriamente en un dispositivo o plataforma de Apple. Ya no es como comprar un disco de música o una película en cedé y reproducirlo donde quieras y cuando quieras. Por supuesto,

c) Si tu dispositivo se estropea y debes repararlo, no puedes ir libremente a cualquier tienda de reparaciones sin perder instantáneamente la garantía de reparación de Apple. Si decides ir a un técnico autorizado, cualquier mínima reparación te puede costar un ojo de la cara. Para que las reparaciones te cuesten menos, debes contratar un seguro llamado Apple Care cuando compras el dispositivo. Gran parte de la seguridad que brinda Apple a sus usuarios está basada en hacerte pagar más por todo, a veces sin razón aparente.

d) Los productos de Apple son el ejemplo más claro de obsolescencia programada porque todo está preparado para que el nuevo modelo de iPhone, de iPad o de MacBook sea más deseable y atractivo, a pesar de que sus capacidades sean similares a las del que ya tienes. En muchas ocasiones los usuarios de Apple se ven obligados a comprar un nuevo dispositivo porque uno de los componentes de hardware no funciona y el servicio técnico no está dispuesto a repararlo o sustituirlo, o bien te ofrece hacerlo por un precio excesivo.

e) Los dispositivos de Apple están diseñados para que sea muy difícil (si no imposible) repararlos sin pasar por un servicio técnico oficial, lo cual implica un sobrecoste a veces inasumible o simplemente superior al del precio del propio dispositivo. Además, todos los componentes de Apple tienen su número de serie que es analizado por el software cada vez que arranca, de manera que, si se detecta un componente nuevo que no sea oficial, el dispositivo puede dejar de funcionar total o parcialmente. La reparabilidad de estos dispositivos es casi nula, salvo que solicites a la compañía el préstamo de un kit de reparación de Apple que, para más inri, te supone adelantar una suma de dinero considerable para asegurar su devolución una vez finalizado el plazo de tiempo que dure la reparación. Todo ello, a pesar del compromiso oficial de Apple de reducir a la mínima expresión para 2030 su huella de carbono en el proceso de producción, venta y posventa de sus productos. Ellos son los que deciden si un producto es reparable, o si no lo es y tienes que cambiarlo por uno nuevo. Incluso te ofrecen una pequeña suma de dinero por tu viejo dispositivo para así poder reciclar sus piezas y reutilizar los materiales en la fabricación de nuevos productos. Todo ello conforma una curiosa manera de “cuidar” del medio ambiente.

Esa política de Apple de cara a la sostenibilidad, la privacidad y el “ecologismo” (entendido de una manera muy particular) al final te hace reflexionar sobre tu forma de pensar y de actuar cuando empleas productos de Apple, sobre aquellas decisiones con las que no estás de acuerdo y sobre si vale la pena seguir en el ecosistema pagando un precio tan alto económica y éticamente. Entonces, un día decides que la solución no es esquivar esas incongruencias, sino apartarlas de tu camino para siempre. Es por eso que he decidido romper con el ecosistema de Apple y pasarme a Android como primer paso. No obstante, no me quiero pasar a Android de la mano de Google, lo cual sería una metedura de pata. Quiero pasarme a una variante de Android que no emplee y no dependa de los servicios de Google, es decir, un Android 'desgoogleizado' (ungoogled Android), como puede ser el sistema operativo /e/OS de la e Foundation. Además, el móvil elegido sería el Fairphone 5, de la marca Fairphone, que fabrica los teléfonos móviles más reparables del mundo, con una nota de 10/10 en reparabilidad según iFixit, empresa estadounidense especialista en la reparación de dispositivos.

Espero que os haya gustado el aperitivo. Esto no ha hecho más que comenzar.

 
Leer más...

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 Un hombre lobo madrileño en Toledo

Rose

Rose vigilaba la entrada del supermercado con atención. Llevaba allí varios minutos y todo parecía estar en calma, pero aún no se decidía.

Había dejado a su hijo escondido detrás de uno de los coches que bloqueaban la calle desde hacía unos días, llorando y hambriento. Ella misma también deseaba más que nada echarse algo a la boca. ¿Cuándo era la última vez que habían comido? Ya ni lo recordaba. Desde que había estallado la guerra la humanidad casi se había exterminado entre sí, y los pocos supervivientes que quedaban luchaban con desesperación por los últimos víveres.

Con paso rápido avanzó hacia la puerta. El cartel que había sobre ella rezaba «The Fresh Market». Rose recordaba haber estado allí antes, en lo que ahora le parecía otra vida, pero jamás se había atrevido a pasar. Ahora, con su hijo dependiendo solo de ella, no le quedaba otra alternativa.

La tienda había sido saqueada, como todos los sitios que había comprobado hasta ahora. En los lineales apenas quedaban unos pocos artículos, pero no había entre ellos nada comestible. Rose recorrió los pasillos dos veces, maldiciendo su suerte. Desde allí podía oír el llanto quejumbroso de su hijo. Le partía el corazón. Se disponía a salir de la tienda cuando reparó en una puerta metálica entreabierta, escondida detrás de un cartel que anunciaba unas ofertas que nadie volvería a comprar.

Dentro estaba oscuro, pero al cruzar el umbral unos halógenos se encendieron. Rose se sorprendió. El suministro eléctrico se había suspendido hacía ya una semana, así que supuso que en la tienda habría un generador de gasolina para prevenir los apagones. Se encontraba en una cámara frigorífica. Estaba vacía, a excepción de un pedazo de lo que parecía carne de ternera sobre una mesa, al fondo de la sala. Rose comenzó a salivar. No entendía cómo era posible que nadie lo hubiese encontrado hasta ahora. Olió la carne, recelosa. Parecía en buen estado. La cogió y salió de allí a toda prisa.

Al volver a pisar la calle respiró con alivio. Nunca le habían gustado los lugares cerrados. Localizó a su hijo y dejó la carne frente a él. Su hijo (no tenía nombre, su dueño había muerto antes de ponérselo) comenzó a lamer la carne con fruición. Rose esperó paciente a que se saciase. Miró alrededor, al maravilloso mundo que los humanos se habían encargado de destruir, y los maldijo. A ellos y a sus estúpidas guerras.

Después aulló al cielo y comenzó a comer.

 
Leer más...