2009-09-30

THIS JUST IN!

O melhor artigo científico de sempre

WHEN ZOMBIES ATTACK!: MATHEMATICAL MODELLING OF AN OUTBREAK OF ZOMBIE INFECTION

Abstract:
"Zombies are a popular figure in pop culture/entertainment and they are usually
portrayed as being brought about through an outbreak or epidemic.

Consequently, we model a zombie attack, using biological assumptions based on popular zombie movies. We introduce a basic model for zombie infection, determine equilibria and
their stability, and illustrate the outcome with numerical solutions.

We then refine the model to introduce a latent period of zombification, whereby humans are infected, but not infectious, before becoming undead. We then modify the model to include the
effects of possible quarantine or a cure. Finally, we examine the impact of regular,
impulsive reductions in the number of zombies and derive conditions under which eradication can occur. We show that only quick, aggressive attacks can stave off the doomsday scenario: the collapse of society as zombies overtake us all."

Disponível aqui.
True story.

Hamsters Powered Servers


Quem é que nunca viu isto? :D

2009-09-29

Netlink and RTnetlink manpage dump

This, gentlemans [sic], is a dump.

#define NLMSG_ALIGNTO   4   


DESCRIPTION
<linux/netlink.h> defines several standard macros to access or create a netlink datagram. They are similar in spirit to the macros defined in cmsg(3)
for auxiliary data. The buffer passed to and from a netlink socket should only be accessed using these macros.

int NLMSG_ALIGN(size_t len);
Round the length of a netlink message up to align it properly.

#define NLMSG_ALIGN(len) ( ((len)+NLMSG_ALIGNTO-1) & ~(NLMSG_ALIGNTO-1) )


int NLMSG_LENGTH(size_t len);
Given the payload length, len, this macro returns the aligned length to store in the nlmsg_len field of the nlmsghdr.

#define NLMSG_LENGTH(len) ((len)+NLMSG_ALIGN(NLMSG_HDRLEN))


int NLMSG_SPACE(size_t len);
Return the number of bytes that a netlink message with payload of len would occupy.

#define NLMSG_SPACE(len) NLMSG_ALIGN(NLMSG_LENGTH(len))


void *NLMSG_DATA(struct nlmsghdr *nlh);
Return a pointer to the payload associated with the passed nlmsghdr.

#define NLMSG_DATA(nlh) ((void*)(((char*)nlh) + NLMSG_LENGTH(0)))


struct nlmsghdr *NLMSG_NEXT(struct nlmsghdr *nlh, int len);
Get the next nlmsghdr in a multipart message. The caller must check if the current nlmsghdr didn't have the NLMSG_DONE set � this function
doesn't return NULL on end. The len argument is an lvalue containing the remaining length of the message buffer. This macro decrements it by
the length of the message header.

#define NLMSG_NEXT(nlh,len) ((len) -= NLMSG_ALIGN((nlh)->nlmsg_len), \
(struct nlmsghdr*)(((char*)(nlh)) + NLMSG_ALIGN((nlh)->nlmsg_len)))


int NLMSG_OK(struct nlmsghdr *nlh, int len);
Return true if the netlink message is not truncated and ok to parse.

#define NLMSG_OK(nlh,len) ((len) >= (int)sizeof(struct nlmsghdr) && \
(nlh)->nlmsg_len >= sizeof(struct nlmsghdr) && \
(nlh)->nlmsg_len <= (len))



int NLMSG_PAYLOAD(struct nlmsghdr *nlh, int len);
Return the length of the payload associated with the nlmsghdr.

#define NLMSG_PAYLOAD(nlh,len) ((nlh)->nlmsg_len - NLMSG_SPACE((len)))


#define NLMSG_HDRLEN ((int) NLMSG_ALIGN(sizeof(struct nlmsghdr)))




--------------------------------------------------------------------------------------------


rtnetlink_socket = socket(AF_NETLINK, int socket_type, NETLINK_ROUTE);

#define RTA_ALIGNTO 4


All rtnetlink(7) messages consist of a netlink(7) message header and appended attributes. The attributes should be only manipulated using the macros
provided here.


#define RTA_ALIGN(len) ( ((len)+RTA_ALIGNTO-1) & ~(RTA_ALIGNTO-1) )


unsigned int RTA_LENGTH(unsigned int length);
returns the length which is required for len bytes of data plus the header.
------------------Given the payload length, len, this macro returns the aligned length to store in the nlmsg_len field of the nlmsghdr.

#define RTA_LENGTH(len) (RTA_ALIGN(sizeof(struct rtattr)) + (len))


unsigned int RTA_SPACE(unsigned int length);
returns the amount of space which will be needed in a message with len bytes of data.

#define RTA_SPACE(len) RTA_ALIGN(RTA_LENGTH(len))


void *RTA_DATA(struct rtattr *rta);
returns a pointer to the start of this attribute's data.

#define RTA_DATA(rta) ((void*)(((char*)(rta)) + RTA_LENGTH(0)))


struct rtattr *RTA_NEXT(struct rtattr *rta, unsigned int rtabuflen);
gets the next attribute after rta. Calling this macro will update attrlen. You should use RTA_OK to check the validity of the
returned pointer.

#define RTA_NEXT(rta,attrlen) ((attrlen) -= RTA_ALIGN((rta)->rta_len), \
(struct rtattr*)(((char*)(rta)) + RTA_ALIGN((rta)->rta_len)))



int RTA_OK(struct rtattr *rta, int rtabuflen);
returns true if rta points to a valid routing attribute; attrlen is the running length of the attribute buffer. When not true
then you must assume there are no more attributes in the message, even if attrlen is non-zero.

#define RTA_OK(rta,len) ((len) >= (int)sizeof(struct rtattr) && \
(rta)->rta_len >= sizeof(struct rtattr) && \
(rta)->rta_len <= (len))




unsigned int RTA_PAYLOAD(struct rtattr *rta);
returns the length of this attribute's data.

#define RTA_PAYLOAD(rta) ((int)((rta)->rta_len) - RTA_LENGTH(0))








----------------------------------------------------
----------------------------------------------------
----------------------------------------------------
--------------------COMPARISON----------------------
----------------------------------------------------
----------------------------------------------------
----------------------------------------------------


rtnetlink_socket = socket(AF_NETLINK, int socket_type, NETLINK_ROUTE);

#define NLMSG_ALIGNTO 4
#define RTA_ALIGNTO 4


All rtnetlink(7) messages consist of a netlink(7) message header and appended attributes. The attributes should be only manipulated using the macros
provided here.


DESCRIPTION
<linux/netlink.h> defines several standard macros to access or create a netlink datagram. They are similar in spirit to the macros defined in cmsg(3)
for auxiliary data. The buffer passed to and from a netlink socket should only be accessed using these macros.

int NLMSG_ALIGN(size_t len);
Round the length of a netlink message up to align it properly.

#define NLMSG_ALIGN(len) ( ((len)+NLMSG_ALIGNTO-1) & ~(NLMSG_ALIGNTO-1) )
#define RTA_ALIGN(len) ( ((len)+RTA_ALIGNTO-1) & ~(RTA_ALIGNTO-1) )


int NLMSG_LENGTH(size_t len);
Given the payload length, len, this macro returns the aligned length to store in the nlmsg_len field of the nlmsghdr.

#define NLMSG_LENGTH(len) ((len)+NLMSG_ALIGN(NLMSG_HDRLEN))
#define NLMSG_HDRLEN ((int) NLMSG_ALIGN(sizeof(struct nlmsghdr)))

unsigned int RTA_LENGTH(unsigned int length);
returns the length which is required for len bytes of data plus the header.

#define RTA_LENGTH(len) ((len)+RTA_ALIGN(sizeof(struct rtattr)))


int NLMSG_SPACE(size_t len);
Return the number of bytes that a netlink message with payload of len would occupy.

#define NLMSG_SPACE(len) NLMSG_ALIGN(NLMSG_LENGTH(len))

unsigned int RTA_SPACE(unsigned int length);
returns the amount of space which will be needed in a message with len bytes of data.

#define RTA_SPACE(len) RTA_ALIGN(RTA_LENGTH(len))


void *NLMSG_DATA(struct nlmsghdr *nlh);
Return a pointer to the payload associated with the passed nlmsghdr.

#define NLMSG_DATA(nlh) ((void*)(((char*)nlh) + NLMSG_LENGTH(0)))

void *RTA_DATA(struct rtattr *rta);
returns a pointer to the start of this attribute's data.

#define RTA_DATA(rta) ((void*)(((char*)(rta)) + RTA_LENGTH(0)))


struct nlmsghdr *NLMSG_NEXT(struct nlmsghdr *nlh, int len);
Get the next nlmsghdr in a multipart message. The caller must check if the current nlmsghdr didn't have the NLMSG_DONE set � this function
doesn't return NULL on end. The len argument is an lvalue containing the remaining length of the message buffer. This macro decrements it by
the length of the message header.

#define NLMSG_NEXT(nlh,len) ((len) -= NLMSG_ALIGN((nlh)->nlmsg_len), \
(struct nlmsghdr*)(((char*)(nlh)) + NLMSG_ALIGN((nlh)->nlmsg_len)))



struct rtattr *RTA_NEXT(struct rtattr *rta, unsigned int rtabuflen);
gets the next attribute after rta. Calling this macro will update attrlen. You should use RTA_OK to check the validity of the
returned pointer.

#define RTA_NEXT(rta,attrlen) ((attrlen) -= RTA_ALIGN((rta)->rta_len), \
(struct rtattr*)(((char*)(rta)) + RTA_ALIGN((rta)->rta_len)))



int NLMSG_OK(struct nlmsghdr *nlh, int len);
Return true if the netlink message is not truncated and ok to parse.

#define NLMSG_OK(nlh,len) ((len) >= (int)sizeof(struct nlmsghdr) && \
(nlh)->nlmsg_len >= sizeof(struct nlmsghdr) && \
(nlh)->nlmsg_len <= (len))


int RTA_OK(struct rtattr *rta, int rtabuflen);
returns true if rta points to a valid routing attribute; attrlen is the running length of the attribute buffer. When not true
then you must assume there are no more attributes in the message, even if attrlen is non-zero.

#define RTA_OK(rta,len) ((len) >= (int)sizeof(struct rtattr) && \
(rta)->rta_len >= sizeof(struct rtattr) && \
(rta)->rta_len <= (len))




int NLMSG_PAYLOAD(struct nlmsghdr *nlh, int len);
Return the length of the payload associated with the nlmsghdr.

#define NLMSG_PAYLOAD(nlh,len) ((nlh)->nlmsg_len - NLMSG_SPACE((len)))

unsigned int RTA_PAYLOAD(struct rtattr *rta);
returns the length of this attribute's data.

#define RTA_PAYLOAD(rta) ((int)((rta)->rta_len) - RTA_LENGTH(0))




#define NLMSG_PAYLOAD(nlh,len) ((nlh)->nlmsg_len - NLMSG_SPACE((len)))
#define NLMSG_SPACE(len) NLMSG_ALIGN(NLMSG_LENGTH(len))
#define NLMSG_PAYLOAD(nlh,len) ((nlh)->nlmsg_len - NLMSG_ALIGN(NLMSG_LENGTH(len)))
#define NLMSG_ALIGN(len) ( ((len)+NLMSG_ALIGNTO-1) & ~(NLMSG_ALIGNTO-1) )
#define NLMSG_LENGTH(len) ((len)+NLMSG_ALIGN(NLMSG_HDRLEN))
#define NLMSG_HDRLEN ((int) NLMSG_ALIGN(sizeof(struct nlmsghdr)))
#define NLMSG_PAYLOAD(nlh,len) ((nlh)->nlmsg_len - NLMSG_ALIGN(NLMSG_LENGTH(len)))
Assumindo len=0
#define NLMSG_PAYLOAD(nlh,len) ((nlh)->nlmsg_len - struct nlmsghdr - qqcoisa)

#define RTA_PAYLOAD(rta) ((int)((rta)->rta_len) - RTA_LENGTH(0))
#define RTA_LENGTH(len) ((len)+RTA_ALIGN(sizeof(struct rtattr)))

#define RTA_PAYLOAD(rta) ((int)((rta)->rta_len) - RTA_ALIGN(sizeof(struct rtattr)))


It makes sense to me. It may make sense to someone else. Ignore if the first three lines make no sense to you. Thank you.

Thanks to c2html.

Valentim Loureiro é acusado de comprar votos com Tony Carreira

"O major Valentim Loureiro é o alvo de todas as críticas da candidata do PS de Gondomar, que o acusa de levar a cabo a «sul-americanização absoluta da política». Isto porque desde o início da semana que o autarca distribui em mão bilhetes para um concerto de Tony Carreira." (via A Bola).

Isto sim é política de verdade! :D

2009-09-23

BT GNR

Talvez já seja velha.... mas foi o melhor mail que recebi hoje (o dito dava a entender que isto se passou mesmo):

Um tipo decide vender o carro e, como já é usual, utiliza o método de colocar um anúncio com o nº de telemóvel no vidro traseiro do carro. Dirige-se para o trabalho e conduz muito tranquilamente a 50Km/h. De repente toca o telemóvel:
-Bom dia, fala de uma unidade móvel da Brigada de Trânsito da G.N.R. e estamos atrás de si. O senhor não sabe que é proibido atender o telemóvel enquanto conduz? Encoste por favor!

Ouch...

Como melhorar a publicidade do Windows 7

Versão original:


Bem foleiro.
Vejamos agora a versão melhorada:

Afinal o bing não é assim tão mau...

Bing + Typo = Epic Win.









2009-09-22

Left 4

Primeiro eram zombies, lentos, estúpidos.

Depois adicionaram hunters, rápidos, letais.

Boomers vieram a seguir, capazes de gerar o caos.

Witches e Tanks foram depois incluidos, com capacidade de destruir equipas.

Sim, falo do jogo da Valve, Left 4 dead, cujo ultimo mod adiciona:

...

...

...

...

Teletubbies

Tubarões

Não estou a puxar a brasa à minha sardinha (desculpem o trocadilho), estou só a gozar com uma gralha (leia-se "um exemplo de vandalismo") da Wikipedia.



O bicho é velhaco, ahn?

Disclaimer (todo o cuidado é pouco): Reconhço que os tubarões são animais verdadeiramente impressionantes e que não são os únicos. Também reconheço que a Wikipedia, apesar destas e de outras, é uma importante fonte de informação muitas vezes correcta e extremamente útil.

Pax vobiscum atque vale.

2009-09-21

Hoje o Clay está de folga

Como hoje o Clay está de folga e não quer ser mauzinho para a Apple, cá vai uma lista de computadores piores que o Magalhães.

Spoiler: O pior deles todos é um Mac.

Disclaimer: Apesar de nunca ter possuído ou usado seriamente um Mac, reconheço que são bons computadores e até não me importava de ter um. Aliás, aqui há tempos decidi que o meu próximo portátil seria um Mac (no entanto, agora não tenho tanta certeza...). Seja lá como for, tenho um iPod e um iPhone que adoro. Também gosto do Clay, não vá ele sentir que estou contra ele.

Pax vobiscum atque vale.

2009-09-19

Google VS Bing

Vi o artigo na Mashable acerca das funcionalidades extras do Bing para o tornarem num Google-killer.

Confesso que, apesar de todas as razões para não gostar de usar produtos Microsoft [para os haters dos haters por aí fora, reconheço plenamente que quando a Microsoft deixar de ser a maior jogadora do mercado -- e como tal começar a ser um pouco mais humilde -- há-de haver alguém evil ocupar o lugar dela], resolvi começar a usar o Bing durante algum tempo para ver se gostava daquilo.

No entanto resolvi primeiro fazer um pequeno teste para ver como funcionava o Bing quando comparado com o Google.

Pesquisa por 'disco-bar' no Google.
Pesquisa por 'disco-bar' no Bing.


Claramente, o Google ganha ao Bing.

I rest my case.

2009-09-17

2009-09-15

Saved !

(by Lucia - from mylifeisaverage.com)
Today, I was walking down the street when a girl asked me if I've been saved. I told her that I had saved at the checkpoint a few minutes ago and that I can reload there if I die. She was confused.

2009-09-13

Pombos > ADSL na África do Sul

"Broadband promised to unite the world with super-fast data delivery - but in South Africa it seems the web is still no faster than a humble pigeon."

Mais aqui (via BBC)


2009-09-12

MacBooks e SSD's - Sata 2 continua pifado ?

Pessoal que tem MacBooks 13' e 15' recentes. Têm estes problemas?


Edit! - Porque é que a Apple tem que ser tão idiota (para não dizer pior), a admitir erros e problemas no material que fabrica? Estarão a tornar-se piores que a Microsoft ?

2009-09-11

Por obséquio...

Estimados colegas e amigos (e, já agora, aos outros também):

Acerco-me hoje de vós com um pedido:

Poderíres, por obséquio, relatar-me da vossa experiência de uma casa de tatuagens da vossa confiança em Aveiro?

PAx vobiscum atque vale.

2009-09-10

My Cellphone and my Car got Divorced...

Esta tinha que vir para o disco-bar (cortesia do Not Always Right)


(The customer calls in, having trouble with the bluetooth in her vehicle.)

Me: “Thank You for calling ***, how may I help you?”

Customer: “I am having trouble with my bluetooth thing.”

Me: “I can definitely help you with that. What is the nature of your problem?”

Customer: “I need help marrying my phone back with my car. When I bought the car they were married, and somehow they got divorced.”

2009-09-09

«Vais continuar a votar à Esquerda?»

Recebi este texto por mail, que citarei:
- Vais ter relações sexuais? O governo dá preservativo!
- Já tiveste? O governo dá a pílula do dia seguinte!
- Engravidou? O governo dá o aborto!
- Teve filho? O governo dá o abono de família!
- Estás desempregado? O governo dá subsídio de Desemprego!
- Estás na escola e não aprendes nada? O governo dá novas oportunidades!
- És viciado e não gostas de trabalhar? O governo dá rendimento social de inserção (que raio de nome, gostava mais quando era rendimento mínimo garantido)!

AGORA...

Experimenta estudar, trabalhar, produzir e andar na linha, para ver o que é que te acontece!!!
O GOVERNO OFERECE-TE UMA BOLSA DE IMPOSTOS E RESPONSABILIDADES NUNCA VISTA EM LUGAR ALGUM DO MUNDO!!!

PARABÉNS!!!

Vais continuar a votar à Esquerda, para o Governo premiar o calão e o preguiçoso e prejudicar aqueles que se tentam destacar da mediocridade? Queres continuar a trabalhar para "os outros"?

Pensa bem antes de votares nas próximas eleições!


Eu ia abusar do sarcasmo na resposta mas desisti da ideia.

As medidas no texto acima foram colocada de maneira a suscitar a ira do leitor e a tomar uma decisão emocional e não racional, o que desde já é triste, quer seja vinda de um texto à direita ou à esquerda.

Irresponsabilidade, incompetência, baixa produtividade e egoísmo são características que devem ser sempre desencorajadas.

A existência de políticas de apoio do estado não são para apoiar os preguiçosos mas para aqueles que por más decisões, das quais se arrependem, se meteram em caminhos menos frutuosos tenham mais hipóteses e para aqueles que nasceram em condições menos afortunadas tenham também essas mesmas hipóteses. Claro que quem não quer fazer nada também se pode aproveitar, não o nego.

O Estado não pode ser o juiz de quem merece ajuda ou quem não merece, pode apenas impor limites arbitrários que tentem ajudar o suficiente quem merece.

Se o meu texto acima vos parece demasiado insonso, eu respondo então, uma resposta à letra ao mesmo nível: PREFIRO UM GOVERNO QUE GASTE DINHEIRO EM POLÍTICAS SOCIAIS QUE O META TODO AO BOLSO.

2009-09-07

Politiquices, rant I

Vi senhoras no recinto do Avante que quando eram pedidas as suas opiniões repetiram por outras palavras as palavras do camarada Jerónimo de Sousa.

Parece que a carneirada está outra vez na moda.

EDIT: ainda tenho de ver a de Quinta (Paulo Porta VS Sócrates) e a de hoje (não vi toda: MFLeite VS Francisco Louçã.

Quanto ao Jerónimo de Sousa VS Francisco Louçã, achei que o Jerónimo de Sousa levou uma abada e no Sócrates VS Jerónimo de Sousa acho que o Sócrates ganhou...

(falo dos debates exclusivamente)

2009-09-05

A última gota

Aqui vos deixo a promoção ao jornal nacional de sexta feira que foi a última gota para a administração da TVI:


Vi a noticia sobre o caso freeport, e honestamente, até dá vontade de rir:

"Outro primo de socrates implicado em carta anónima"

Já não é o primo que estava no estrangeiro, já é "outro" primo, ou então era a mãe, ou o pai, o filho por nascer, e tudo isto por carta anónima. Quem não tem nada a esconder não tem medo de dar a cara. Já cheira mas é a noticias "fabricadas".

2009-09-04

2009-09-01

Addendum


Quando fiz este post (que, para vos poupar o trabalho, é o da igreja que ensina a esquartejar jovens caucasianas de vinte e poucos, não me lembrei, mas esta imagem vem mesmo a propósito, ainda que tenha sido criada para um propósito completamente diferente a partir de outra criada para um propósito vagamente semelhante.

Agora que me ponho a pensar... esta criatura ou foi paga para fazer campanha por uma causa com a qual não tem nada a ver (muito provável) ou está a dar o corpo ao manifesto em prol da sua causa (menos provável), caso em que será, portanto, vegetariana e, de acordo com as ideologias dos vegetarianos, senhora de uma carne magra, tenra e dieteticamente saudável.

... eh lá...

E um bifinho do lombo, ahn?


Pax vobiscum atque vale