sexta-feira, novembro 25, 2011

Debug a um web site live

Uma das coisas que já tinha sentido falta quando implementei interoperabilidade com outros sistemas (ex: Paypal), foi a necessidade de fazer debug do site live. Isto acontece por um motivo, os callbacks desses sistemas externos não sabem o que é o nosso localhost, eles sabem sim o que são URLs (ex: www.xpto.pt), logo os callbacks não podem ser feitos para localhost como é óbvio.

Ontem queria fazer debug às comunicações com o Facebook para saber o que realmente me estava a chegar à mão, então decidi perder tempo a descobrir como fazia o debug do callback. Apesar de ter demorado uma tarde entre configurações de router, configurações de IIS, configurações de debugging e mais uma data de tentativas falhadas, quando cheguei à solução ela até é bastante simples.
  • Colocar o porto 80 do IIS não a apontar para a directoria do nosso site live, tipicamente C:\inetpub\wwwroot, mas sim para a nossa directoria de desenvolvimento.
  • Ir às propriedades do nosso projecto web e meter que o nosso servidor vai ser o IIS

Pode ainda ser necessário arrancar o Visual Studio como administrador devido a alguma restrição de permissões, isto depende das configurações de cada máquina. Finalmente é só arrancar o debugger do Visual Studio e meter os breakpoints que se quiserem, todos os pedidos ao site passam então a ser capturados.

quarta-feira, novembro 23, 2011

Update com Join

Fazer um update a uma coluna com base no valor de uma coluna doutra tabela parecia-me que seria algo de complexo, afinal até é bastante simples.
UPDATE TableToUpdate
SET TableToUpdate.FieldToUpdate = TableWithValues.FieldWithValue
FROM TableToUpdate
INNER JOIN TableWithValues 
ON TableWithValues.FieldWithValue = TableToUpdate.FieldToUpdate 

domingo, novembro 06, 2011

Helpo - 24 Horas a Nadar Contra a Pobreza

Esta madrugada participei na iniciativa da Helpo na AHBE em que consistia em estar sempre alguém a nadar durante 24h. Acabei por me oferecer para fazer um dos turnos com menos pessoas o das 5-7 horas da manhã (porque será que havia poucas pessoas aquela hora), mas mesmo assim fomos 6 bravos a realizar 2 estafetas a essa hora da madrugada.

O valor da inscrição era o valor simbólico de 5€ que revertia em retorno dos projectos da Helpo. Acabou por ser divertido a natação noturna, tirando a parte de acordar as 4 horas, sempre com boa disposição e um ambiente descontraído. A distância percorrida não tem grande importância mas foi de 2000 metros durante as 2 horas. Parabéns pela iniciativa e até à próxima.

sexta-feira, novembro 04, 2011

Conviction

Já há algum tempo que não faço aqui nenhuma referência a nenhum filme, não porque tenha deixado de ver filmes, mas porque os filmes que tenho visto ultimamente não se destacam e não acrescentam nada de interessante.

Para quem me conhece sabe que eu aprecio bastante filmes baseados em factos verídicos, dá um toque de realismo e se bem realizado intensifica as sensações transmitidas pelo filme. É o caso do Conviction, um filme excelente em que um homem é condenado por um crime que não cometeu e em que a sua irmã tudo faz para provar a sua inocência, ao ponto de abdicar da sua própria vida e do Mundo que a rodeia. Uma interpretação irrepreensível de uma das melhores actrizes da nova geração a Hilary Swank.

segunda-feira, outubro 31, 2011

Estágio de Taekwondo

Este fim-de-semana a convite do meu amigo Nuno Silva, participei do estágio de Taekwondo da escola Mais TaeKwonDo. Apesar de não ser praticante de nenhum tipo de arte marcial o estágio centrava-se na componente física, em desafios de grupo e testes à capacidade de resistência, logo era possível eu enquadrar-me neste estágio.

Tudo começou no sábado de manhã, fomos levados vendados para um local a alguns quilómetros do parque de campismo onde estávamos, o objectivo era voltar ao parque ultrapassando algumas provas. Corridas no meio do mato, arrastar um tronco pela praia, transportar um tronco e ergue-lo como um mastro num local elevado, cavar trincheiras, foram algumas das provas que tivemos de realizar.


No domingo aproveitou-se ainda a manhã para fazermos um passeio até à praia onde nos dividimos entre quem jogava futebol, vólei ou simplesmente relaxava na areia das mazelas do dia anterior. Para finalizar um belo churrasco ao almoço para revigorar corpo e alma.

O meu muito obrigado a todas as pessoas que foram neste estágio pois apesar de eu ser o outsider e de conhecer poucas das pessoas antes do estágio, nunca me fizeram sentir como um outsider, bem pelo contrário, fui sempre tratado como um dos elementos do grupo.

sexta-feira, outubro 28, 2011

MVC ActionButton

Em MVC um dos métodos mais úteis é o ActionLink que nos permite criar um link, dando pelo menos a acção responsável por tratar a request. Estranhamente não existe o equivalente para botões, tipo ActionButton. Andei a pesquisar no meu amigo Google e depois ter lido alguns disparates e algumas resoluções o mais rebuscadas que se possam imaginar com quilos de código css, para algo tão simples como ter um botão, cheguei a uma implementação minha que para mim é algo simples e eficaz.

        public static IHtmlString ActionButton(this HtmlHelper htmlHelper, 
           string text, string actionName, string controllerName, object routeValues)
        {
            UrlHelper urlHelper = ((Controller)htmlHelper.ViewContext.Controller).Url;
            string url = urlHelper.Action(actionName, controllerName, routeValues);

            var input = new TagBuilder("input");
            input.Attributes.Add("type", "button");
            input.Attributes.Add("onclick", 
               string.Format("javascript:location.href=('{0}')", url));
            input.Attributes.Add("value", text);

            return MvcHtmlString.Create(input.ToString());
        }

quinta-feira, outubro 27, 2011

Vida de programador

Depois de já ter escrito 2 vezes sobre a vida de um programador (link1 e link2), encontrei ontem este site com umas bandas desenhadas deliciosas sobre o dia a dia dos programadores. Deixo aqui só um exemplo.


quarta-feira, outubro 26, 2011

Problemas no deploy de uma aplicação .NET MVC

Este foi o meu primeiro deploy de uma aplicação MVC para um servidor de testes, e devo dizer que bati em mais paredes do que estava à espera. Primeiro passo foi instalar a .NET Framework 4.0, até aqui nada de especial. De seguida instalei o SQL Express 2008 R2, que seria o motor de base de dados que iria utilizar.

Vamos então ao deploy em si, crio um pacote de deploy com o Visual Studio, crio uma directoria virtual no servidor e copio para lá o conteúdo do pacote. Primeiro erro, levo logo com um erro 500.19, que significa que o ficheiro web.config está mal configurado e que não consegue ser interpretado.


Bem fui averiguar e lá descobri o problema, no meu web.config estava a utilizar a tag que me possibilita rescrever URLs, como o IIS não sabia interpretar essa tag estava a devolver o erro 500.19. Solução é instalar no IIS o módulo URL Rewrite.

Voltando a testar novo erro, agora o problema não estava no web.config mas sim nas referências para as assembly. Ao instalar a .NET Framework 4.0, julguei que todas as dlls necessárias estariam na GAC, aparentemente não o que provocou o erro: Could not load file or assembly 'System.Web.Mvc, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies. The system cannot find the file specified. 

 Uma solução possível passa por dizer ao Visual Studio que aquela referência é para criar uma cópia local, assim quando é feito o pacote a referência é copiada para dentro da pasta bin.

Além do System.Web.Mvc também devem ser incluídas as referências que se encontram na imagem, ou outras que sejam System.Web.*.

Agora é que é pensei eu, bem ainda não estava com sorte e toma lá mais um erro: Could not load file or assembly 'Microsoft.Web.Infrastructure, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'. O quê mais assembly que não consegue ser referênciada! Na minha máquina de desenvolvimento esta dll tava na GAC mais uma vez ao contrário do servidor de produção. A solução passa por acrescentar a dll às referências do projecto no Visual Studio e mais uma vez dizer para criar uma cópia local. Alem desta dll ainda são precisas as dlls: System.Web.WebPages.Razor, System.Web.Razor e System.Web.WebPages.Deployment.

É pá o site já responde, vamos lá fazer login e começar a testar...pimba mais um erro, não é possível autenticar no SQL com o utilizador escolhido. No fundo este problema já não tem a ver com a aplicação ser MVC, poderia ser qualquer tipo de outra aplicação que utilizasse o SQL. Vou tentar autenticar-me directamente no SQL Management Studio e o mesmo erro acontece. Vou ver se estou a permitir ligações TCP/IP no SQL Configuration Management e sim estava! Depois de alguma pesquisa, de bater umas quantas vezes na mesa e chamar uns quantos nomes ao servidor lá descobri o problema, no próprio SQL Management Studio também é necessário configurar a autenticação como sendo mixed mode não bastando dizer que são permitidas ligações TCP/IP.


Ufffff, finalmente tudo a funcionar...

segunda-feira, outubro 24, 2011

Monte Selvagem

Este fim de semana fui até ao Alentejo conhecer o Monte Selvagem. Tivemos imensa sorte com o tempo pois foi o último dia com ares veraneios fazendo com que a visita tão tivesse nenhuma limitação. Começámos por ver a parte pedestre do Monte Selvagem, imensos macacos mas também algumas espécies mais interessantes como os guaxinis e os camelos entre outros.


Uma das coisas que o grupo gostou mais foi a quinta pedagógica, onde podemos entrar e interagir com os animais, porcos, cabras, ovelhas, etc. O parque ainda é composto por um terreno (já não me lembro de quantos hectares) em que viajamos de tractor e vamos observando as diferentes espécies, todas elas vegetarianas, avestruzes, lamas, veados, zebras, cisnes, etc. A viagem dura mais ou menos 30 minutos, com as paragens para uma explicação mais técnica de cada espécie.
Por fim ainda tenho de dar relevo à espécie de trampolim gigante que era uma das diversões que o parque também tem e que fez um grande furor no grupo como se pode notar.


Conclusão, gostei de ir visitar o parque para conhecer, mas não será certamente um sítio onde volte tão depressa, a não ser que reformulem e acrescentem muitas coisas novas. É um parque bastante pequeno que facilmente é visitado em 3 horas no máximo. Bem sei que manter um parque deve ser algo bastante dispendioso, mas o preço de entrada de 12€ acaba por não corresponder com o verdadeiro valor que é retribuído na visita.

sábado, outubro 15, 2011

Symphony X - Incrível Almadense

Esta foi a semana dos concertos, depois do Gothic Metal dos Within Temptation a fasquia aumentou em termos de agressividade para o Progressive Metal dos Symphony X.

Não conhecia o Incrível Almadense, mesmo no coração de Almada, um salão um quanto pequeno mas com um ambiente interessante para este tipo de concertos com grande intensidade e com o público levado ao rubro.

As hostilidade foram abertas com os DGM, banda italiana que eu não conhecia mas com potencial, vou ter de ouvir mais um pouco e conhecer porque acho que vale a pena. De seguida ainda actuaram os noruegueses Pagan's Mind que sinceramente não gostei, demasiado barulho por parte do vocalista, a melhor parte foi mesmo quando ele foi para trás do palco e deixou a banda a tocar, aí boa musicalidade.


E para prato principal os Symphony X e que grande concerto que deram, mandaram mesmo o edifício abaixo, todo o poder do progressive metal demonstrado em toda a actuação. Uma nota especial para o guitarrista Michael Romeo um dos fundadores dos Symphony X e um virtuoso da guitarra, sem dúvida o melhor guitarrista que vi actuar ao vivo (agora percebo porque o Guitar Heroes é tão difícil). Quanto à setlist nenhuma surpresa, a mesma de todos os espetáculos desta tour europeia.
  1. Iconoclast
  2. End of Innocence
  3. Dehumanized (Vídeo brinde)
  4. Bastard of the Machine ( Vídeo especial :-) )
  5. Electric Messiah
  6. When All is Lost
  7. Children of a Faceless God
  8. Heretic
  9. Inferno (Unleash the Fire) (Mais um especial)
  10. Of Sins and Shadows
  11. Eve of Seduction (E ainda mais um!)
  12. Serpent's Kiss
  13. Set the World on Fire (The Lie of Lies) (Último brinde)