sexta-feira, março 01, 2013

Highlighting para o Drupal no GEdit

Como já estava cansado de no GEdit, para o Ubuntu, estar sempre a executar os mesmos passos para colocar Highlighting mode PHP no source code do Drupal, principalmente nos .module e nos .inc, resolvi fazer uma pesquisa e encontrei alguns links que me ajudaram a resolver este problema.

Basta, com um editor por exemplo o "vim" (no meu caso o "joe")  alterar o ficheiro:

# sudo joe /usr/share/gtksourceview-3.0/language-specs/php.lang 

O ficheiro diz respeito às definições para o mimetype PHP no GEdit.
Basta procurar a a tag <property name="globs">
e incluir: *.inc;*.module

Fica algo do género:

<property name="globs">*.php;*.php3;*.php4;*.phtml;*.inc;*.module</property>

Basta reiniciar o GEdit e voilá!

No more Highlighting for Drupal!!!

quarta-feira, novembro 23, 2011

A minha entrevista para a SAPO


Queria partilhar um episódio de algum tempo, até posso que afirmar que um pouco traumatizante. A minha entrevista para webdeveloper na SAPO.



Posso adiantar-vos que não estava nada preparado para o que me esperava. No fim fiquei de mãos a abanar e custou-me, para além do roubo do preço pelo estacionamento, ali mesmo em frente ao edifício da PT, umas horitas de vida. Contudo, foi um gosto conhecer a malta da SAPO e o espaço/ambiente.

O espaço é engraçado, muito verde (óptimo para daltónicos e sportinguistas) com uma sala própria para workout. E os colaboradores, muito habituados a estas lides de entrevistas, têm já um batalhão de questões para separar o trigo do joio que lhes é apresentado pelas empresas de RH. O processo que usam é: colocam a questão; vão criando um nível de complexidade nas questões sucessivas até que o entrevistado "rebente". Penso que a ideia é perceber o limite dos conhecimentos e criatividade no solucionamento dos problemas.

Foram aboradados vários temas, desde segurança, bases de dados, servidores, algoritmia...

Para mim, de facto a entrevista foi tão traumatizante, talvez mais pela parte mais desumana do processo, que ainda me lembro de cor algumas dessas questões que quero aqui partilhar.

Uma das primeiras questões foi:
  • Tens uma conjunto de endereços IP em base de dados e queres apenas os IPs de uma determinada gama.
  • Conhece o protocolo HTTP?
  • Onde são guardadas as sessões?
  • Para que serve o apache e o PHP? Que funções têm?
  • Desenhar uma expressão regular para os número de telefone da TMN e email
  • Já ao nível de base de dados, eles partilham no blog. Para mim, a abstracção, foi o mais complicado
«Tomemos como exemplo a seguinte tabela, onde anotamos quanto dinheiro emprestamos a cada pessoa, sendo que já emprestamos dinheiro mais que uma vez a algumas pessoas:

| nome | valor |
|--------------|
| josé  | 20   |
| joão  | 10   |
| rui   | 5    |
| pedro | 3    |
| josé  | 5    |
| pedro | 10   |
| luís  | 25   |
|--------------|

Tendo por base esta tabela, o problema consiste em escrever várias queries SQL para:

  • Descobrir quanto dinheiro emprestaste no total.
  • Descobrir quanto é que cada pessoa te deve.
  • Descobrir quais as pessoas a quem emprestaste dinheiro mais que uma vez.
  • Seleccionar os nomes das pessoas a quem emprestaste dinheiro, numa só linha, separados por vírgula.

Para quem quiser tentar responder a este problema sugere-se a criação da tabela e o teste das queries no computador

  • Outra de base de dados, foi a seguinte. Tens um texto enorme. Deram-me um exemplo de um livro. Como deve ficar a estrutura de base de dados para que possas pesquisá-lo. As pesquisas por texto (mas não é de pequenas strings, é de páginas inteiras).

  • Ao nível da algoritmia, como calcular a maior diferença entre dois números numa lista. A pergunta e resposta estão ambas no blog.
«O problema consistia em desenhar (escrever) um algoritmo para resolver o seguinte problema, em pseudo-código:

"Vais receber uma lista de números. Encontra a maior diferença entre quaisquer dois números nessa lista."

Hoje vamos analisar algumas das soluções com que nos deparámos nas entrevistas.

Estranhamente, uma solução que é apresentada com frequência é a seguinte:
  maior_diferenca = 0;

   for ( i = 1 ; i < length lista ; i++ ) {
       if ( lista[i] - lista[i-1] > maior_diferenca ) {
           maior_diferenca = lista[i] - lista[i-1];
       }
   }

   return maior_diferenca;

Esta é uma solução que não apresenta o resultado correcto e que demonstra uma série de problemas no raciocínio do candidato (problemas esses que não iremos abordar aqui, mas é de facto uma situação comum).

Eis a solução mais básica que poderia ser apresentada (seguindo-se a lista de problemas que a mesma apresenta):
  maior_diferenca = 0;

   for ( i = 0 ; i < length lista ; i++ ) {
       for ( j = 0 ; j < length lista ; j++ ) {
           if ( abs( lista[i] - lista[j] > maior_diferenca ) ) {
               maior_diferenca = abs( lista[i] - lista[j] );
           }
       }
   }

   return maior_diferenca;

Problemas de eficiência:

  • Para cada dois números na lista, a diferença é calculada duas vezes
  • Em cada um dos ciclos, o resultado de "length lista" é calculado n vezes


Erros e corner-cases:

  • O valor 0 é retornado caso a lista seja vazia ou tenha apenas um elemento.


Vejamos agora a mesma solução já com alguns destes problemas resolvidos:
  maior_diferenca = 0;

   tamanho = length lista;

   for ( i = 0 ; i < tamanho ; i++ ) {
       for ( j = i+1 ; j < tamanho ; j++ ) {
           diferenca = abs( lista[i] - lista[j] );
           if ( diferenca_actual > maior_diferenca ) ) {
               maior_diferenca = diferenca_actual;
           }
       }
   }

   return maior_diferenca;

Apesar de esta solução ainda não estar a prever os casos da lista vazia ou da lista com um único elemento, esta já é uma solução mais eficiente que a anterior.

Ainda assim, um bom candidato consegue, desde o início, compreender que não necessita realizar tantas operações, já que lhe basta encontrar o maior e o menor elemento da lista e calcular a diferença entre dois.

Infelizmente, isto faz com que alguns candidatos apresentem uma solução semelhante à seguinte:
  lista = sort  lista;
   max   = last  lista;
   min   = first lista;
   return max - min;

Apesar da solução estar correcta, não é de todo eficaz, dada a complexidade de um sort numa lista com, por exemplo, 20,000 valores.

Eis uma outra solução seguindo esta ideia, ainda com alguns problemas:
  min = 0;
   max = 0;

   for ( i = 0; i < tamanho; i++ ) {
       if ( lista[i] < min ) {
           min = lista[i];
       }

       if ( lista[i] > max ) {
           max = lista[i];
       }
   }

   return max - min;

Esta é uma solução que não funciona, uma vez que basta que todos os números sejam positivos ou negativos para retornar o valor errado.

Uma melhor solução seria algo no seguinte sentido:
  min = null;
   max = null;

   for ( i = 0; i < tamanho; i++ ) {
       if ( min == null or lista[i] < min ) {
           min = lista[i];
       }

       if ( max == null or lista[i] > max ) {
           max = lista[i];
       }
   }

   if ( min != null and max != null ) {
       return max - min;
   }
   else {
       # ...
   }

Entre todas estas versões, há ainda mais uma série de variantes que outros candidatos apresentam.

Há também questões específicas de cada linguagem que podem fazer com que pequenas partes devam ser alteradas por uma questão de eficiência.

Ao ser confrontado com este problema, o candidato ideal:

  • sabe que a lista pode ser vazia ou ter apenas um elemento
  • sabe que a lista pode ser enorme (e não tenta fazer um sort)
  • sabe que a lista recebida pode ter elementos que não sejam números
  • percebe quase imediatamente que basta encontrar o máximo e o mínimo da lista
  • consegue sugerir uma ou mais soluções para quando não é possível encontrar uma diferença
  • resolve o problema rápida e eficazmente, e sabe explicar porque fez o que fez

Convém ainda deixar claro que este é apenas um problema que fez parte de um grande conjunto de desafios colocados aos candidatos e que não é apenas a resolução de um simples problema que dita o recrutamento ou não da pessoa.
»

  • Tens 2 variáveis, dois números, como transferes os valores de uma variável para a outra? Depois, sem usar uma terceira variável auxiliar.
  • Outras questões relacionadas com webservices:
    • Sabes o que são Webservices?
    • Para que serve o WSDL?

  • Esta, se não foi a última, foi das últimas. Problema: tem um webservice que disponibiliza apenas 15 resultados,  e você apresenta 20 em cada página, como faz para mostrar os 20. Como ter paginação?
Se me lembrar de mais, vou colocando...
Boa sorte!

sábado, janeiro 01, 2011

Curioso este caso sobre a Ensitel



Com todos os casos de relação entre fornecedor e consumidor, achei este muito interessante sobre a Ensitel para começar o novo ano.

O blog http://jonasnuts.com/387191.html terá um processo em tribunal, por difamação na perspectiva da empresa, ou por liberdade de expressão, na perspectiva da autora do blog. Nos dias que correm acho um absurdo este tipo de casos que, mais uma vez, servem para entupir os nossos tribunais. Contudo, espero que a lesada ganhe o processo, caso não haja entendimento e que seja ressarcida por todos os incómodos!

quarta-feira, março 18, 2009

Um presente envenenado



No Natal passado recebi um presente envenenado. Ofereceram-me um disco rígido multimédia avariado.
Na altura dirigi-me à loja onde foi comprado, a meados de Novembro, e não foi possível a troca por falta de stock nem a restituição monetária por já ter passado o prazo para a devolução. Optei pela reparação.

Na loja, Fnac Vasco da Gama no Parque das Nações, aconselharam-me que seria mais rápido (do que o prazo máximo de 1 mês garantido pela loja) dirigir-me directamente ao representante/fabricante e solicitar aí a troca ou reparação. Foi o que fiz. No dia 5 de Janeiro, dirigi-me aos escritórios da representante da marca em Portugal e transmiti o mesmo que na loja. Aceitaram o produto e deram-me um prazo de duas semanas para a reparação. Estranhei na altura, mas não me emitiram quaisquer guias.

Passadas duas semanas ainda não havia sinal do aparelho (uns problemas de stock no fabricante em França). Passado um mês, o prazo garantido pela Fnac, estava ainda sem sinal. Fui sempre insistindo 2 a 3 vezes por semana, até que no dia 23 de Fevereiro, quando liguei, disseram-me que já poderia levantar. Mas pediram-me para ligar antes das 18:00 só para confirmar a presença de alguém no escritório. Quando liguei, disseram-me que tinha havido um erro e que o produto que tinham não era para mim, este tinha uma capacidade superior. Como se eu me importasse com isso... tentei mas não pegou.

Ficaram de ligar ainda nessa semana com o pedido de urgência ao fabricante e colocavam num transporte urgência. O que é certo é que não ligaram e até agora ainda espero um telefona deles. De todas as vezes que me disseram que ligavam, até agora o telefone não tocou.

Pedi ajuda na mediação por parte da Fnac, mas também não tiveram sucesso.
Dos últimos contactos que tive com a empresa, vou ser compensado, pelos quase 3 meses passados, com uma fantástica Pen de 1 GB. O técnico disse-me que hoje receberei na minha morada o maldito presente envenenado.

Com tantas faltas de palavra, o não cumprimento do que prometeram, a dúvida persiste... será que o disco vem reparado?

A empresa irResponsável é a Memup Portugal

terça-feira, janeiro 27, 2009

A massagem do Inferno...huuuuuhhh!!!



Aqui vai mais uma sobre uma história de terror, mas totalmente real... huuuuhhh!!!

Há cerca de quinze dias, a minha esposa por causa de uma dor nas costas resolveu dirigir-se a um especialista em massagens... quem eu?!? Não, o ginásio que ela frequenta.

Após a massagem, ela veio para casa e disse-me que a pessoa que lhe massajou era muito nova. Provavelmente seria o seu primeiro emprego. Disse-me, também, que lhe fez alguma pressão na zona porque teria muita tensão acumulada.
Ainda naquela noite, a minha esposa pediu-me para lhe por um creme relaxante. Mas como já tinha tido uma grande dose, disse-lhe que se calhar não valia a pena. Ela concordou.
Reparei, ainda naquela noite, que ela tinha umas manchas vermelhas nas costas. Não liguei. Achei que seria por causa de alguma etiqueta que estivesse a roçar na pele sensível nas costas.

Meio massacrada, ela lá conseguiu dormir. Mas no dia a seguir... ela não se conseguia mexer com as dores que tinha nas costas.

Quando, mais tarde, falei com ela, contou-me que quando quis tomar um banho de imersão, que lhe foi recomendado, ardiam-lhe as costas. Espreitou no espelho e viu as costas completamente vermelhas, como se tivesse estado um dia inteiro ao sol em pleno Verão na Costa da Caparica. Contou-me que provavelmente foram os raios infravermelhos que usaram no tratamento.

Não vou aqui relatar a dificuldade posterior no "tratamento do tratamento", nem a semana que se passou, mas vou referir que a minha esposa foi ao Ginásio pedir justificações, incluindo a justificação pela falta.
Em relação às justificações, a recepcionista pediu imensas desculpas. Mas, quando chegou à vez da responsável pela "secção das massagens", a resposta foi: "está a exagerar, isso não é nada". A senhora provavelmente disse isto porque está habituada a queimaduras por infra-vermelhos. Mas, para pessoas como nós, que só vamos à praia no verão..., somos uns fracos e temos que colocar logo cremes para a queda e regeneração da pele. Aliás, esta senhora deve defender, tal como o candidato Manuel João Vieira defende que cada um deve ser preso uma vez na vida, que cada um de nós tenha um cancro de pele uma vez na vida.

E a justificação de falta, já me esquecia dela...
Todo o profissionalismo até ali demonstrado, a justificação da falta não era excepção deste grande exemplo. Pelo telefone, estaria pronta no dia seguinte. No dia seguinte, obviamente, não estava redigida. As promessas não cumpridas duraram cerca de uma semana e meia. Até que, por fim e após ameaça (este pessoal é terrível) de reclamação no livro de reclamações, vem finalmente a justificação de faltas.
A justificação, na verdade é isso mesmo uma justificação. Se estivesse à espera do reconhecimento das culpas pelo erro cometido, provavelmente teria que pedir um outro documento. Talvez uma "confissão de arrependimento".
Na justificação de faltas está escrito que justificam que fulano não pode ir trabalhar porque fez um "tratamento de infravermelhos no qual teve uma reacção alérgica". Ora traduzindo para miúdos, que somos, o culpado é o cliente porque quem lhe manda fazer um tratamento de infravermelhos! Não sabia que era alérgico? Isso é culpa do cliente!

É verdade, o Ginásio em causa é o "Clube House Parque das Nações".

sexta-feira, dezembro 19, 2008

Ideia para um serviço




Vivas,

Estava eu, nas minhas introspecções, procurando um objectivo de um possível produto, quando cheguei à conclusão que não existe nada no mercado que sirva como alternativa aos bancos para a entrega das reformas e pensões aos reformados. Procurando um pouco melhor descobri que já existe uma instituição que se encarrega desse serviço - os CTT - Correios, Telégrafos e Telefones de Portugal.

Obviamente e à semelhança da Presidente do Partido Social Democrata, estou a ser irónico. As minhas últimas experiências nos CTT têm sido de desistir da espera e adiar o motivo que leva às instalações dos CTT no Montijo que é o levantamento de uma carta registada. Supostamente algo simples, em que apenas terão que procurar no inventário informatizado; encontrar a carta; entregar ao cliente; anotar a saída... De facto tudo somado pode demorar alguns minutos, principalmente se existirem vários focos de desatenção. Mas o problema é o facto de estarmos a meio do mês o que corresponde ao levantamento das pensões dos idosos que encontram nos CTT a instituição melhor credenciada para movimentar dinheiro.

Aliás, comparando com qualquer instituição bancária, os CTT estão apetrechados de mecanismos de segurança como vidros blindados, alarmes, vídeo-vigilância, portas anti-roubo, cofres, etc... de certeza que estão bem equipados. Comparando... os CTT, nesta altura do mês terão mais dinheiro em caixa do que uma agência de banco no seu dia mais produtivo.

Não me admira que os assaltantes prefiram estas instituições a agências bancárias.

Acho que os CTT perderam o seu focus, que deveria ser - Correios, Telégrafos e Telefones - e estão cada vez mais a misturar serviços (veja-se a quantidade de serviços financeiros e outros não postais) os quais põe em causa o correcto funcionamento dos seus serviços core.

Antes de terminar... porquê dos CTT terem o pagamento da luz, telefone... porquê?
Boa noite!

terça-feira, dezembro 20, 2005

A minha ideia para este blog

O blog é um espaço aberto para cada um debitar aquilo que entender.
Eu não farei o contrário. Vou utilizá-lo para expor dúvidas, efectuar críticas de foro político, social, e alguns dos trabalhos que efectuei.

Boa navegação!