Em Fevereiro tornamos público um problema que foi usado nas entrevistas no SAPO durante 2009.
O problema, orientado a candidatos com um background forte em ambientes Linux/UNIX, consistia no seguinte:
"Encontras-te sozinho num Data Center e tens que resolver este problema sem recurso a meios exteriores (nada de telemóvel, nada de internet; o objectivo é resolveres tu o problema). Tens um servidor que não pode ir abaixo. Nessa máquina, alguém teve a brilhante ideia de executar um `chmod -x chmod`. Resolve o problema."
O primeiro ponto a apontar é o objectivo deste problema.
O objectivo não é avaliar se o candidato consegue resolver a situação, mas sim a sua reacção. O ideal seria um misto de excitação, pânico e um olho a saltar fora.
A pergunta serve, no entanto, para avaliar o conhecimento que a pessoa tem sobre estes sistemas e a capacidade de improviso/imaginação.
Durante alguns meses, a cada 3 entrevistas em que usávamos este problema, surgia uma resposta nova.
Hoje vamos abordar algumas delas.
Começamos por soluções que não se aplicam às circunstâncias descritas, como tirar o disco e levá-lo a outra máquina que ainda tenha o chmod operacional.
De seguida, partimos para outras soluções curtas e viáveis:
perl -e 'chmod 0755, "chmod"'
python -c "import os;os.chmod('testing', 0777)"
Algumas soluções semelhantes mas com ligeiras nuances:
cat /bin/chmod > new_executable
tar --mode 555 -cvf - chmod | tar xvf -
echo chmod | cpio -o | perl -pe 's/^(.{21}).../${1}755/' | cpio -i -u
Depois começam a surgir soluções que são dependentes da distribuição:
E há mais (getfacl, setfacl, chflags, etc.), cada uma mais inovadora que a anterior (como um `alias chmod='/lib/ld-2.11.1.so /bin/chmod`, ou o exemplo mais abaixo).
Convém neste ponto explicar o que se sucede quando se coloca uma questão destas numa entrevista.
A interacção em torno deste problema não se cinge a uma pergunta e uma resposta, mas sim à exploração do conhecimento e capacidade inventiva da pessoa.
Eis um exemplo baseado numa entrevista verídica:
Candidato - Tenho perl na máquina?
Entrevistador - Tens.
C - Então uso o chmod do perl, que é built-in!
E - Certo. Agora vou-te tirar o perl da máquina.
C - Hum... Tenho cc?
E - Tens.
C - Então posso fazer um programa em C que usa a system call do chmod para alterar as permissões ao chmod.
E - Certo. Agora vou-te tirar o compilador.
C - Hum... Disseste que não tenho acesso à net, mas não disseste nada sobre os outros servidores no Data Center. Abro um socket para outro servidor, faço um tar do chmod de lá preservando as permissões, trago-o para a máquina a faço untar.
E - Certo. Agora vou-te tirar as outras máquinas do Data Center.
C - OK... Bem, posso sempre lançar a BusyBox, que deve estar na máquina e que tem o chmod lá dentro!
E - OK, mas agora vamos-te tirar a BusyBox. Consegues arranjar outra maneira de resolver o problema?
[o candidato pensa um pouco, olha para cima e fala como se estivesse a falar consigo próprio]
C - Eia... Esta é mesmo rabuscada... Faço um attrib ou um ls extendido para forçar o inode para a cache; agora só tenho que editar o inode que está em cache sem que o kernel se aperceba, e posso usar o sed para isso, desde que seja root; vou ao kcore procurar as estruturas do VFS e altero-lhe o bit de execução; vou é ter que ler documentação; depois é só usar o chmod para lhe repor as permissões.
[breve pausa para recuperarmos]
(já agora, e a título informativo, o candidato do texto acima encontra-se hoje em dia a trabalhar no SAPO)
Para além de todas estas (e outras) soluções (e tentativas de solução) que nos foram aparecendo, surgiram também alguns comentários interessantes como:
- Resolver o problema? Qual problema? A máquina continua a funcionar!
E questões como:
- Mas porque raio é que a bin de um servidor estava writable?
Tipicamente as entrevistas no SAPO seguem o caminho que mais conforto dá ao candidato.
Se a pessoa trabalhou mais com determinada tecnologia, é esse o assunto que vamos abordar.
Se a pessoa passou mais tempo a realizar um tipo de tarefa, é essa a informação que vamos procurar.
Quando um candidato nos afirma que se sente muito confortável em ambientes Linux e, numa escala de 0 a 1, classifica a sua proficiência como um 0.9, por exemplo, este é um exercício que colocámos bastantes vezes no ano passado:
"Encontras-te sozinho num Data Center e tens que resolver este problema sem recurso a meios exteriores (nada de telemóvel, nada de internet; o objectivo é resolveres tu o problema). Tens um servidor que não pode ir abaixo. Nessa máquina, alguém teve a brilhante ideia de executar um `chmod -x chmod`. Resolve o problema."
Brevemente discutiremos o que se pretende com um problema deste género e algumas das respostas que fomos juntando durante o ano, quer nas entrevistas, quer no seio da nossa equipa.
Hoje divulgamos o material da apresentação "Command Line - The best GUI you can get", realizada pelo Paulo Trezentos na SAPO Session "A gentle introduction to Linux".
Após uma pequena introdução bem humorada, o Paulo leva-nos por variáveis de ambiente, ficheiros, gestão de utilizadores, redireccionamento, pipes, parsing e também alguns comandos relacionados com rede e sessões.
Os slides do Paulo:
(para fazer download do PDF, ver em SlideShare)
O vídeo da apresentação:
Para além de ser um dos cérebros por detrás da distribuição Caixa Mágica, o Paulo colabora também com o SAPO na plataforma de Anúncios.
*Update*: 20 lugares atribuídos, 0 lugares disponíveis.
Esta Quarta-feira, dia 17 de Junho, teremos mais uma SAPO Session, desta feita dedicada ao tema Linux environment.
Contaremos com as seguintes apresentações:
"Tecnologias de sistemas de ficheiros em Linux: passado, presente e futuro. EXT2, ReiserFS, EXT3, XFS, EXT4, ZFS, BTRFS. "
"Ferramentas avançadas para Power users."
Temos vinte lugares para o público em geral, a custo zero, a serem atribuídos aos primeiros vinte emails a chegar a saposessions em sapo ponto pt referindo esta sessão no subject ou no corpo do email.
Este evento tem lugar em Picoas, Lisboa, e decorre das 09:30 às 12:30 do dia 17 de Junho.
Hoje divulgamos o material da apresentação "Arquitectura de um Linux", realizada pelo Miguel Filipe na SAPO Session "A gentle introduction to Linux".
Nesta apresentação o Miguel começa por contextualizar a filosofia UNIX e de seguida cobre uma série de tópicos como utilizadores, ficheiros, controlo de acessos, permissões, processos, pipes, forks, execs, o kernel, a libc, etc.
O Miguel apresenta a arquitectura de um Linux tanto do ponto de vista organizacional (o que está onde e o que é) como do ponto de vista funcional (quando acontece o quê e como).
Os slides do Miguel:
(para fazer download do PDF, ver em SlideShare)
O vídeo da apresentação:
(para ver em full screen, ver em SAPO Vídeos)
O Miguel integra a equipa de anúncios do SAPO, onde está envolvido na arquitectura e desenvolvimento do sistema de produção, com especial ênfase na performance e disponibilidade.
Esta semana divulgamos o material da apresentação "História e Distros", da SAPO Session "A gentle introduction to Linux".
Numa breve apresentação, o Mário Morgado explica-nos como surgiu o primeiro Linux e aborda aspectos como nomes, logótipos e distribuições.
Os slides do Mário:
(para fazer download do PDF, ver em SlideShare)
O vídeo da apresentação:
(para ver em full screen, ver em SAPO Vídeos)
O Mário integra a equipa de AdWords do SAPO, onde usa Python e C no desenvolvimento do backend para a contextualização de anúncios, classificação de bids e outras funcionalidades.
*UPDATE*: Todos os lugares foram já atribuidos.
Para a próxima SAPO Session, com o tema A gentle introduction to Linux, temos 20 lugares reservados (a custo zero) para os leitores deste blog.
Os lugares serão atribuidos aos primeiros 20 mails a chegar a saposessions em sapo ponto pt após a publicação deste post.
Relembramos que a sessão tem lugar das 09:30 às 13:00 de Quarta-feira, 1 de Abril de 2009.
A terceira SAPO Session tem lugar a 1 de Abril, próxima Quarta-feira.
O tema para esta sessão é "A gentle introduction to Linux" e as apresentações são as seguintes:
"Linux. Diferentes distribuições, vantagens e propósitos de cada uma."
"Linux inside-out. Filosofia UNIX, conceitos principais e arquitectura."
"Ambiente, comandos principais e actividades recorrentes. Pipes, parsing, redireccionamento, edição e mais."
De momento ainda não temos (nem podemos confirmar se iremos ter) lugares para o público em geral.
Se os tivermos, serão anunciados aqui logo que possível. Convém salientar, no entanto, que emails de inscrição enviados antes de tal anúncio serão ignorados, e também não vale a pena tentar automatizar a tarefa de inscrição.
*UPDATE*: 20 lugares disponíveis.