miércoles, 28 de mayo de 2014

Ilusión de Ebbinghaus Dinámica / Dynamic Ebbinghaus Illusion

El efecto Ebbinghaus es una conocida ilusión óptica que consiste en que dos círculos iguales parecen de distinto tamaño según el contexto en el que aparecen, en concreto el círculo central rodeado de círculos grandes parece de menor tamaño que el rodeado de círculos pequeños... / The Ebbinghaus Effect is a well known optical illusion whereby circles of the same size appear different depeding the context they are in, i.e, a circle appears bigger when surrounded of smaller circles than when surrounded by bigger ones...



En un concurso a la mejor ilusión óptica del año Blair, Caplovitz y Mruczek, de la Universidad de Nevada, ponen en movimiento la ilusión de Ebbinghaus, consiguiendo un efecto aún más espectacular / Well, in the 2014 Best Illusion of the Year Contest, University of Nevada's Blair, Caplovitz, and Mruczek produced an spectacular dynamic version of the Ebbinghaus illusion.

 

Fuente/Source: io9

martes, 27 de mayo de 2014

Impactante efecto 3D, sin gafas / Amazing 3d effect, no glasses

Impresionante lo que un par de barras bien colocadas pueden llegar a hacer. Just amazing how a couple of well deployed bars can trick your mind.


Fuente/Source: MyModernMet.

domingo, 25 de mayo de 2014

sábado, 24 de mayo de 2014

Kindle ordena mal mis libros - Kindle items sorted incorrectly

OK, una rápida que me tenía confundido. De vez en cuando mis Kindles (modelos 3 y 4) empiezan a mostrar los libros en orden incorrecto. Más exactamente, estoy leyendo un libro, vuelvo a la vista principal, ordenada por "Mostrar más reciente primero", y el libro que estaba leyendo ha "desaparecido", y me toca pasar un montón de páginas hasta volver a encontrarlo. Ni siquiera está al final del todo, pero se va hacia las últimas páginas. Dándole vueltas y googleando di con la causa, y es curiosa. Como no me hace gracia que Amazon husmeé en mi biblioteca, lo suelo tener largas temporadas en modo avión, fuera del alcance de la wifi. Y aquí aparece el problema, cuando por lo que sea se reinicia o se queda sin batería, pierde la hora y como por dentro funciona con tiempo unix, con todo lo que ello conlleva. En definitiva el pobre se que estamos en 1970, antes de nacer yo y todo. Y claro, llibro leído, libro marcado con fecha de 1970... atrás del todo. Se empiezan a mezclar y no hay quien de con nada. Sincronizar la fecha de nuevo es tan fácil como habilitar la wifi y dejarlo sincronizar. Y para confundir al contrario, uno puede renombrar la carpeta "documents" como "_documents" por un momentillo u otra medida similar. Y ya está.

OK, here's a quick one that got me a bit confused. From time to time my Kindles (models 3 and  4) start showing books in an incorrect order. Specifically, say I'm reading one book, then go to the main view sorted by "Most recents first", and the book I was reading is "gone", only to be found very many pages down. It's not even at the very end, but in general goes near there. Racking my brains and a bit googling later I found the cause, and it's interesting. As I don't like the idea of Amazon messing around with my library, I tend to have it in "Airplane mode" for extensive periods, beyond any wifi's reach. And here comes the problem. When for some reason it reboots or runs out of battery, it loses the time and date, and given it internally works in unix time, with all this implies, the poor Kindle thinks we are back in 1970, even before I was born. Book read, book tagged as last read in 1970. Books get mixed up, and the whole thing is a real mess. Syncing the time and date back is as simple as enabling the wifi a few minutes. To confuse the enemy while you get the right date, you can temporarily rename the "documents" folder to something like "_documents". And that was it.


viernes, 23 de mayo de 2014

Basic Lego Geometry Experiments




When you play with some bricks and come up with these things, you realise nothing is left to chance at Lego. Incidentally this happens to be a quite nice way of illustrating the Pythagorean Theorem. I guess I already have an idea for another post...







lunes, 19 de mayo de 2014

It's not a motorcycle baby, it's a chopper - Lego Creator 31018






For being a Lego 'Creator', this 31018 set is a very 'Technic' like model, and great fun. For under 10€ you get 129 pieces to build three different bikes.

 

Lego MOC WC






Heavily inspired in a similar one seen in a DK's Lego Play book.



 

jueves, 15 de mayo de 2014

Ley de Cunningham o De cómo funciona esto

La Ley de Cunningham reza así "La mejor manera de conseguir la respuesta a una pregunta en Internet no es realizando la pregunta, sino escribiendo una respuesta equivocada"


En original "The best way to get the right answer on the Internet is not to ask a question, it's to post the wrong answer". En francés, que es más molón, dicen "prêcher le faux pour savoir le vrai". Los alemanes son concisos al respecto: "Leck mich am Arsch". En este enlace a Emezeta hay un montón de principios y leyes igualmente relevantes.

miércoles, 14 de mayo de 2014

Erlang-C en Python - Herramientas para el Cálculo de Probabilidad de Espera y Número de Agentes...


Aquí dejo una página con una explicación muy buena sobre los Erlangs, y unas rutinas en Python que escribí una tarde para calcular probabilidades de espera, número de agentes, nieveles de servicio u temas relacionados con los Erlang. No soy para nada experto en el tema, simplemente necesitaba validar unos números y las calculadoras que encontraba no me servían (o yo no supe usarlas)  / Here's a link to a very good explanation about the Erlangs, and a few Python routines I put together one evening to compute traffic intensity, agent occupancy, probability of waiting, average speed of answer (ASA), service level, agents needed and other Erlang-C related stuff. I'm not an expert on this at all, just needed to validate some data and the calculators I came across didn't suit me (or I just didn't know how to use them)



from math import pow,factorial,log,exp

def PowerFact(b,e):
    ## Returns b^e / e! used everywhere else in the model
    return pow(b,e)/factorial(e)

def erlangC(m,u):
    ## Returns the probability a call waits.
    ## m is the agent count
    ## u is the traffic intensity
    suma=0
    for k in range(0,m):
        suma+=PowerFact(u,k)
    erlang=PowerFact(u,m)/((PowerFact(u,m))+(1-p)*suma)
    return erlang

def SLA(m,u,T,target):
    ## Returns the average speed of answer
    ## m is the agent count
    ## u is the traffic intensity
    ## T is the average call time
    ## target is the target answer time
    return (1 - erlangC(m, u) * exp(-(m-u)*(target/T)))

def ASA(m,u,T):
    ## Returns the average speed of answer (ASA)
    ## m is the agent counts.
    ## u is the traffic intensity
    ## T is the average call time
    return erlangC(m, u)*(T/(m-u))

def agentsNeeded(u,T,targetSLA,target):
    ## Returns the number of agents needed to reach given SLA
    ## u is the traffic intensity
    ## T is the average call time
    ## target is the target answer time
    ## targetSLA % calls answered under target time
    level=0
    m=1
    while level < targetSLA:
        level=SLA(m,u,T,target)
        m+=1
    return m-1
  
################

calls=360.     # number of calls in a given time interval
interval=1800. # the time interval, in secs (1800 s == 30 minutes)
landa=calls/interval
T=240.         # average call duration, in secs
m=55           # number of agents
u=landa*T      # traffic intensity
p=u/m          # agent occupancy

print landa,'calls/interval'
print u,'traffic intensity'
print m,'agents'
print p,'agent occupancy'
print erlangC(m,u)*100,'% probability of waiting, ErlangC'
print ASA(m,u,T),'secs, average speed of answer (ASA)'
target=15
print SLA(m,u,T,target)*100,'% probability call is answered in less than',target,'secs'
nivel=0.7
print agentsNeeded(u,T,nivel,target),'agents needed to reach',nivel*100,'% calls answered in <',target,'secs'

################

print "-"*10

calls=300.      # number of calls in a given time interval
interval=900. # the time interval, in secs (here 15 minutes)
landa=calls/interval
T=180.        # average call duration, in secs
m=65            # number of agents
u=landa*T      # traffic intensity
p=u/m          # agent occupancy

print landa,'calls/interval'
print u,'traffic intensity'
print m,'agents'
print p,'agent occupancy'
print erlangC(m,u)*100,'% probability of waiting, ErlangC'
print ASA(m,u,T),'secs, average speed of answer (ASA)'
target=45
print SLA(m,u,T,target)*100,'% probability call is answered in less than',target,'secs'
nivel=0.95
print agentsNeeded(u,T,nivel,target),'agents needed to reach',nivel*100,'% calls answered in <',target,'secs'

################

print "-"*10

calls=650.      # number of calls in a given time interval
interval=3600. # the time interval, in secs (here 1h)
landa=calls/interval
T=150.        # average call duration, in secs
m=34            # number of agents
u=landa*T      # traffic intensity
p=u/m          # agent occupancy

print landa,'calls/interval'
print u,'traffic intensity'
print m,'agents'
print p,'agent occupancy'
print erlangC(m,u)*100,'% probability of waiting, ErlangC'
print ASA(m,u,T),'secs, average speed of answer (ASA)'
target=30
print SLA(m,u,T,target)*100,'% probability call is answered in less than',target,'secs'
nivel=0.5
print agentsNeeded(u,T,nivel,target),'agents needed to reach',nivel*100,'% calls answered in <',target,'secs'

################

print "-"*16

calls=20.      # number of calls in a given time interval
interval=3600. # the time interval, in secs (1800 s == 30 minutes)
landa=calls/interval
T=1800.        # average call duration, in secs
m=11           # number of agents
u=landa*T      # traffic intensity
p=u/m          # agent occupancy

print landa,'calls/interval'
print u,'traffic intensity'
print m,'agents'
print p,'agent occupancy'
print erlangC(m,u)*100,'% probability of waiting, ErlangC'
print ASA(m,u,T),'secs, average speed of answer (ASA)'
target=3600
print SLA(m,u,T,target)*100,'% probability call is answered in less than',target,'secs'
nivel=0.8
print agentsNeeded(u,T,nivel,target),'agents needed to reach',nivel*100,'% calls answered in <',target,'secs'

################

print "-"*16

calls=4280.      # number of calls in a given time interval
interval=168.    # the time interval, in hours (7dx24h = 168)
landa=calls/interval
T=1./6           # average call duration, in hours
m=6           # number of agents
u=landa*T      # traffic intensity
p=u/m          # agent occupancy

print landa,'calls/interval'
print u,'traffic intensity'
print m,'agents'
print p,'agent occupancy'
print erlangC(m,u)*100,'% probability of waiting, ErlangC'
print ASA(m,u,T),'hrs, average speed of answer (ASA)'
target=0.5
print SLA(m,u,T,target)*100,'% probability call is answered in less than',target,'hrs'
nivel=0.87
print agentsNeeded(u,T,nivel,target),'agents needed to reach',nivel*100,'% calls answered in <',target,'hrs'

################

print "-"*16

calls=1282.    # number of calls in a given time interval
interval=60.   # the time interval, in hours (5dx12h = 60)
landa=calls/interval
T=0.75         # average call duration, in hours
m=18           # number of agents
u=landa*T      # traffic intensity
p=u/m          # agent occupancy

print landa,'calls/interval'
print u,'traffic intensity'
print m,'agents'
print p,'agent occupancy'
print erlangC(m,u)*100,'% probability of waiting, ErlangC'
print ASA(m,u,T),'hrs, average speed of answer (ASA)'
target=1
print SLA(m,u,T,target)*100,'% probability call is answered in less than',target,'hrs'
nivel=0.89
print agentsNeeded(u,T,nivel,target),'agents needed to reach',nivel*100,'% calls answered in <',target,'hrs'



SALIDA

0.2 calls/interval
48.0 traffic intensity
55 agents
0.872727272727 agent occupancy
23.8700936378 % probability of waiting, ErlangC
8.18403210439 secs, average speed of answer (ASA)
84.5883092171 % probability call is answered in less than 15 secs
52 agents needed to reach 70.0 % calls answered in < 15 secs
----------
0.333333333333 calls/interval
60.0 traffic intensity
65 agents
0.923076923077 agent occupancy
42.0072292571 % probability of waiting, ErlangC
15.1226025326 secs, average speed of answer (ASA)
87.964727315 % probability call is answered in less than 45 secs
68 agents needed to reach 95.0 % calls answered in < 45 secs
----------
0.180555555556 calls/interval
27.0833333333 traffic intensity
34 agents
0.796568627451 agent occupancy
14.3013055995 % probability of waiting, ErlangC
3.10148796134 secs, average speed of answer (ASA)
96.4140712702 % probability call is answered in less than 30 secs
27 agents needed to reach 50.0 % calls answered in < 30 secs
----------------
0.00555555555556 calls/interval
10.0 traffic intensity
11 agents
0.909090909091 agent occupancy
68.2118204689 % probability of waiting, ErlangC
1227.81276844 secs, average speed of answer (ASA)
90.7685339568 % probability call is answered in less than 3600 secs
11 agents needed to reach 80.0 % calls answered in < 3600 secs
----------------
25.4761904762 calls/interval
4.24603174603 traffic intensity
6 agents
0.707671957672 agent occupancy
34.8436314992 % probability of waiting, ErlangC
0.0331093330988 hrs, average speed of answer (ASA)
99.8193211949 % probability call is answered in less than 0.5 hrs
5 agents needed to reach 87.0 % calls answered in < 0.5 hrs
----------------
21.3666666667 calls/interval
16.025 traffic intensity
18 agents
0.890277777778 agent occupancy
53.5967359233 % probability of waiting, ErlangC
0.20353190857 hrs, average speed of answer (ASA)
96.1496854898 % probability call is answered in less than 1 hrs
18 agents needed to reach 89.0 % calls answered in < 1 hrs




 

Alas de Geometria Variable - LEGO MOC