jueves, 24 de abril de 2014

Algoritmo de ecuación diofántica

Estos días estuve intentando resolver un ejercicio sobre una ecuación diofántica lineal. El objetivo es encontrar la solución positiva natural mas grande antes de aquella solución a partir de la cual, todas las siguientes soluciones tienen una combinación de variables naturales positivas que cumplen la ecuación.

Fue dificil para mí así que compartí el problema con un amigo y descubrimos que, para una ecuación de la forma 6a+9b+20c=n, dejando pivotear el valor de a, los valores de b y c solo toman valores de (0,1) y (0,1,2) respectivamente, a partir del cual se cumple que para cualquier n >= 43 se puede encontrar siempre una combinación natural y positiva para la cual existe solución, ya que existe un teorema que indica que para un n, que tuviera n+1, n+2,...n+5 soluciones continuas, entonces para cualquier solución >= n siempre existirá una combinación de constantes naturales y positivos que tuvieran solución.

Por lo que pude formular el siguiente algoritmo, para procesar el continuo y encontrar el número mas grande posible antes de alcanzar n (notese que el teorema indica n -> n+5 por lo que deben probarse 6 soluciones continuas, a la que se le agrega una a la hora de buscar la última sin n solución)

#6a + 9b + 20c

n = 1
number_of_sucessive_successes = 0
success_on_n = False

while number_of_sucessive_successes < 6:
 for b in range(0, 2):
  for c in range(0, 3):
   for a in range(0, n + 1):
    if 6*a + 9*b + 20*c == n:
     success_on_n = True
 if success_on_n is True:
  number_of_sucessive_successes += 1
 else:
  number_of_sucessive_successes = 0
 success_on_n = False
 n += 1
 
print n - 7 # - 6 because last 6 were sucessive solutions, so - 1 for the last not buyable solution

Para la cual generalicé una solución para cualquier ecuación diofántica del mismo tipo:

#general solution

n = 1
number_of_sucessive_successes = 0
success_on_n = False
constants = (5, 11, 17)

while number_of_sucessive_successes < 6:
 for y in range(0, n + 1):
  for z in range(0, n + 1):
   for x in range(0, n + 1):
    if constants[0]*x + constants[1]*y + constants[2]*z == n:
     success_on_n = True
 if success_on_n is True:
  number_of_sucessive_successes += 1
 else:
  number_of_sucessive_successes = 0
 success_on_n = False
 n += 1
 
print n - 7 # - 6 because last 6 were sucessive solutions, so - 1 for the last not buyable solution

J.V.

miércoles, 23 de abril de 2014

Swing y Lindy Hop

Hace poco descubrí talleres, y una oculta comunidad de baile swing, charlestone, lindy hop y authentic jazz. Aparentemente está siendo una creciente atracción exótica para los que quedaron inseguros en medio de una evolución cultural extraña y para mi gusto, monótona.

Lo bonito de esta danza, es que se sustenta con los idas y vueltas del jazz, en época de pleno big band, art blakey, coltrane, en la que se comienzan a probar nuevos sonidos y pasos de baile. Esto hace que sea ampliamente técnico, tenga fundamentos musicales en el que se estructura un compas de 4, 6, 8 tiempos, mucho ejercicio aeróbico, coordinación y sobre todo, actitud.

Por estar en los hitos de la guerra mundial, lo que intenta expresar es felicidad para contrarrestar los malos pesares, por lo que la frente en alto y una sonrisa enorme son características de los pasos.

Se pueden ver en youtube varias grabaciones sobre competiciones y eventos de swing moderno, como también descubrir una faceta histórica un poco extraña para nosotros. Tiene gran parte individual y otra gran parte en pareja.


Lo mejor de todo: Bailarlo al compás de una banda en vivo haciendo sonar los instrumentos tradicionales del jazz. Y lo que nos mantiene seguir intentándolo: su dificultad y el desafío de hacerlo cada vez mejor.
J.V.

martes, 22 de abril de 2014

Configuración de i3 window manager

Este mes probé i3, un tiling window manager para linux, en mi instalación de Arch. Lo cierto es que me gustó mucho, extremadamente funcional, muy fácil de configurar y super liviano. Luego de un tiempo de utilizarlo, consideré la posibilidad de que mi gusto fuera arbitrario e injustificado, por lo que retorné a KDE y Gnome unos días pero me di cuenta que mi vida ya no era la misma, sin i3. Por suerte no borré la configuración así que volver fue facil.

A diferencia de los super gigantes ambientes de escritorio, i3 consiste solo de tres módulos, por lo que queda perfectamente consistente con la filosofía arch.

Como comento en la introducción de este blog, no voy a decir nada nuevo respecto de la documentación que ya hay internet, así que esto es solo una guía reexpresada en mis palabras, con lo que personalmente me pareció relevante definir.

Configuración de colores

Tenemos cuatro categorías de colores, border, background, text e indicator. El primero define el borde de los header de las ventanas, el segundo el fondo, tercero el color de su texto y cuarto el separador que indica el espacio de la ventana. Los colores son html rgb así que podemos utilizar cualquiera de estos: http://html-color-codes.info/. Lamentablemente por defecto no hay transparencia, aunque hay algunos módulos para compilar en git. La clase representa el cliente en sus cuatro estados, focused, focused_inactive, unfocused y urgent.

Sugiero comentar los colores por defecto y debajo crear una copia de la tabla de colores, así:

client.focused          #ECF8E0 #170B3B #ffffff #2e9ef4

client.focused_inactive #333333 #5f676a #ffffff #484e50

client.unfocused        #333333 #222222 #888888 #292d2e

client.urgent           #2f343a #900000 #ffffff #900000

Bindeo de clientes

Fácil, bindsym $hotkey exec command [params]. Recuerden instalar dmenu! el comando de ejecución es dmenu_run.

Auto-esconder i3bar

Dentro del bloque de bar, podemos agregar

mode hide #habilita el modo por defecto
modifier Mod1 #boton que togglea

Ejecutar clientes al inicio de i3

exec --no-startup-id commando [params]
El parametro --no-startup-id sirve para que la ejecución se realice en el startup incluso cuando el proceso no tiene un id predefinido. Algunas aplicaciones, por ejemplo si queremos ejecutar google-chrome-stable, será mejor agregarlas sin este parámetro, ya que ejecutar el browser durante el inicio puede no necesariamente funcionar.

Ejecutar clientes en modo ventana

Algunas aplicaciones pueden tonarse molestas en modo tiling, por ejemplo, Steam. Es cuestión de gustos, pero no es malo tenerlo en cuenta.

for_window [class="NombreDeVentanaCliente"] floating enable

El comando for_window tiene otras útiles funciones.

Otros tweaks personales

exec --no-startup-id xset dpms 600 # ejecuta un sleep de monitor después de 600 segundos

hide_edge_borders both # elimina bordes de ventanas en tiling

assign [class="NombreDeVentanaCliente"] NumeroWorkspace # siempre ejecuta programa en workspace

bindsyim $hotkey exec ClienteTerminal -e comando [params] # ejecuta proceso en terminal

exec --no-startup-id sh ~/.fehbg # establece wallpaper, cuyo contenido de fehbg es -> feh  --bg-scale '/home/$USER/Pictures/wallpaper.png'. Requiere instalacion de feh.

Resultado!



Espero que les sirva el resumen!
J.V.

Bienvenidos a sigma cuadrado

Hola, mi nombre es Saif Addin, me presentaré siempre como Jeansen Vaars, soy Argentino y tengo descendencia árabe.

Empecé este blog con la idea de no dejar pasar las ideas que atravieso (y viceversa) a lo largo de mis días. Soy algo multifacético así que puedo variar entre videojuegos y filosofía moderna, por lo que este blog, en gran parte, me va a representar.

Asumo, que las ideas van a ser representadas en forma de explicaciones, tutoriales, conclusiones, interpretaciónes o simplemente  comentarios. La idea es que tengan algo interesante y resumido, porque en internet ya tenemos las respuestas para todo, por lo que el toque de este blog va a ser mi interpretación de la realidad y la selección de temas aleatorios, que quizás, el lector no se espera o simplemente le interesa saber el tema del día.

¿Quién es el lector? bueno, por supuesto que al momento de escribir la bienvenida, tengo solo un lector: yo mismo. Pero la idea es que en algun momento tenga por lo menos una visita diaria. En algún momento se me cruzó la idea de internacionalizar el blog y escribir en inglés, pero lo cierto es que voy a empezar compartiéndolo con amigos cercanos por lo que no tiene mucho sentido, en un principio. Aunque no lo descarto porque tengo conocidos de habla inglesa a quienes me gustaría compartirlo, si es que algún día llega a ser algo interesante, o quizás una entrada de interés.

Sigma cuadrado. Lo elegí porque estaba disponible en blogger, pero al fin y al cabo fue idea mia probarlo (después de unos cuantos otros). Sigma es la número dieciocho letra griega, vale doscientos y representa muchos significados en la representación formal de distintas áreas de estudio. Yo sólo conozco sus usos en la economía y en probabilidad y estadística, en el cual se utiliza el sigma cuadrado para representar el desvío cuadrado de los errores de una distribución.



Y por esto es que se me ocurrió para este blog, mi razonamiento fue el siguiente: Soy una persona dispersa, se me ocurren temas aleatorios, aleatorios-estadística, estadística desvío-estandar, pero era más dificil que recordar sigma cuadrado (creo). Así que, el blog girará en torno a una media (en tecnología informática) con una desviación bastante grande, pero no infinita (puede que caigamos en algunos temas sociales, psicológicos, políticos, por ejemplo, pero será mas dificil caer en biología, termodinámica nuclear o neurociencia).

Que lo disfruten!
J.V.