June 30th, 2009
O framework MVC da Microsoft usa um determinado objeto para definir qual tipo de resultado/output a action executada deve retornar. São eles:
ContentResult – Pode ser usado para retornar textos simples.
EmptyResult – Esse serve para retornar resultados em branco, quando quiser que o output seja vazio.
HttpUnauthorizedResult – Usado quando o usuário não tem permissão para executar a action. Retorna o 401 como status da requisição.
JsonResult – Serializa um objeto em formato JSON, bom para ser usando em requisições AJAX.
RedirectResult – Resultado usado para redirecionamentos.
RedirectToRouteResult – Também usado para redirecionamentos, mas a URL está ligada a uma rota.
ViewResultBase – Classe abstrata, usada para renderizar HTMLs.
PartialViewResult – Estende ViewResultBase para renderizar as views e seus HTMLs.
BinaryResult – Classe abstrata usada para resultados binários.
BinaryStreamResult – Estende BinaryResult, pode ser usado para escrever imagens direto no stream do resutado.
Porém, em alguns casos, retornar um texto simples, ou um JSON pequeninho, é meio chato. Considere o código abaixo:
JsonResult json = new JsonResult();
json.ContentType = "text/javascript";
json.Data = new { success = true };
return json;
Isso poderia ser mais simples não? Porém, a classe JsonResult, e nenhuma outra ActionResult aceita parâmetros no construtor. Por isso criei duas classes que podem ser usadas como ActionResult, para simplificar essa tarefa. Elas devem ser usadas assim:
return new SimpleResult("Hello World");
return new SimpleResult(1);
return new SimpleResult(1257.14);
return new SimpleResult(true);
e
return new SimpleJsonResult(new { success = true });
Pronto, agora é hora de refatorar código.
Posted in .net, c# | Tags: actionresult, asp.net, c#, gist, mvc | No Comments »
June 29th, 2009
Hoje estava verificando um bug em um projeto, que acontecia somente no Safari, tanto no MacOS, quanto no Windows, e descobri que o problema era a forma como eu estava definindo o elemento HTML envolvido na história.
O expressão que eu estava usando era a seguinte:
$("#meuform input[type='hidden'][value='']").length
No Safari sempre me retornava 0, já no Firefox e Internet Explorer, retorna 1, que era para ser o valor certo no caso. Analisando como o input estava definido eu descobri o problema, ele estava definido assim:
<input type="hidden" name="first_user" />
Resumindo:
O Safari não acha elementos onde o atributo filtrado não esteja presente no HTML.
(Estou usando a versão 1.3.2 do jQuery e 4.0 (503.17) do Safari, no Windows, mas reportaram o problema no Mac também)
Posted in javascript, jquery | Tags: css selector, javascript, jquery, safari | 1 Comment »
June 23rd, 2009
Você desenvolve uma biblioteca de utilitários para facilitar a vida dos outros desenvolvedores da empresa, porém algumas vezes é necessário refatorar códigos, criando/renomeando/apagando alguns métodos.
Obviamente você não pode sair mudando tudo, existe código “antigo” usando a sua “lib”.
Existe um atributo no C# que permite que você marque código como deprecated, é o Obsolete, muito útil e fácil de usar.
[Obsolete("Use o método MinhaClasse.MeuMetodo(int parametro)")]
public static void MeuMetodo(string parametro) {
// ...
}
No exemplo acima quero que os desenvolvedores usem a versão que recebe um integer como parâmetro, e não mais a versão com string.
Você ainda pode dizer que é para o compilador gerar um erro ao compilar o código, passando true como segundo parâmetro do atributo.
[Obsolete("Este método não deve mais ser usado. Usar MinhaClasse.MeuMetodo(int parametro)", true)]
public static void MeuMetodo(string parametro) {
// ...
}
Posted in c# | Tags: c#, deprecated, dica, obsolete | No Comments »
May 3rd, 2009
Muitas vezes quando configuramos um servidor para hospedar sites para diferentes usuários, a primeira coisa que pensamos é em colocar os sites de cada usuário na pasta home do mesmo, mas para isso funcionar corretamente precisamos dar permissão para o Apache ler a home de cada usuário.
A solução que tenho usado é dar a seguinte permissão na pasta do usuário
chmod a+x /home/nome_do_usuario/
Depois disso todos os “forbidden” desaparecem
Posted in apache, linux | Tags: apache, linux, permissão | No Comments »
May 3rd, 2009
Se você estiver com problemas para instalar o RMagick no Ubuntu usando apt-get talvez essa solução possa ajudar. Primeiro, limpe os pacotes com “problemas”:
sudo apt-get remove --purge librmagick-ruby-doc librmagick-ruby1.8
depois instale os seguintes pacotes:
sudo apt-get install libmagick9-dev ruby1.8-dev
depois disso é só instalar a gem:
sudo gem install rmagick
dica retirada daqui
Posted in linux, rmagick, ruby, ubuntu | Tags: imagemagick, linux, rmagick, ruby, ubuntu | No Comments »
March 31st, 2009
Se você tem problemas de conexão com SQL Server 2005 pelo PHP, tente usar essa versão (2000.80.194.0) da ntwdblib.
Coloque esse arquivo na raiz da instalação do seu PHP, substituindo a versão existente, e reinicie o servidor web.
Posted in php | Tags: conexão, iis, php, problemas, sql server 2005, windows | No Comments »
March 2nd, 2009
Uma coisa que eu sempre precisava e nunca me lembrava como fazer era descobrir qual a distro que eu estava usando no momento, como muitas vezes precisei mexer com os mais variados servidores, algumas vezes precisava dessa informação, e hoje achei o jeito mais fácil de fazer isso
cat /etc/issue
No meu micro aparece
Arch Linux \r (\n) (\l)
No do meu colega
Ubuntu 8.10 \n \l
Achei essa dica aqui e estou documentando aqui pra não esquecer mais
Posted in linux | Tags: dica, distro, linux | No Comments »
January 29th, 2009
Hoje quando li o feed de comentários do
blog do TaQ (re)apareceu
uma dica que ele deu há um bom tempo, sobre usar uma única instância do Vim para editar arquivos, acho muito chato ter que abrir muitos editores.
Porém a dica que ele deu não funcionou para mim, apenas esta dos comentários, que ao invés de usar um alias, usa uma função.
# http://www.cyberciti.biz/faq/linux-unix-pass-argument-to-alias-command/
function edit() {
gvim --servername `gvim --serverlist | head -1` --remote-tab "$@";
}
Eu mudei o nome para edit, acho mais fácil, mas fica a critério de cada um
Link do codigo original: http://pastebin.com/f7a69dcd7
Posted in vim | Tags: editor, gvim, linux, shell, vim | No Comments »
January 24th, 2009
Vi no blog do Luiz Rocha hoje um meme que rolou há um bom tempo atrás e resolvi fazer também.
[rafael ~]$ history 1000 | awk '{a[$2]++}END{for(i in a){print a[i] " " i}}' | sort -rn | head
156 git
101 sudo
86 cd
75 yaourt
58 grep
52 gvim
48 exit
39 braid
36 ll
33 rake
Minha única surpresa foi o braid, considerando que conheci ele faz uma semana e que só utilizo ele em um projeto.
Posted in linux | Tags: bash, history, meme | No Comments »
December 29th, 2008
No começo do mês recebi a liberação para usar o Google App Engine, foi o que faltava para eu dar uma brincada com Python.
Onde trabalho, toda a tarde rola de alguém ir no mercado comprar uns refrigerantes, mas todo dia era uma “briga” para ver quem ia. Para resolver isso, criamos página simples em PHP que sorteava quem naquele dia ia fazer as compras.
Depois que a minha conta foi liberada, fiquei um bom tempo pensando o que eu poderia fazer para usá-la, e então o Joel deu a idéia, fazer aquela “págininha” em Python e disponibilizar no Google App Engine.
http://eoescolhidofoi.appspot.com/
É simplesmente fantástica a facilidade de se criar uma aplicação e fazer o deploy dela no Google App Engine, o fato de não ter que se preocupar com banco de dados influencia bastante, basta definir modelos no próprio código, pensar apenas em objetos.
Depois dessa primeira eu já criei mais duas, uma está pronta, mas estou testando ainda, a outra está a caminho, mas será para a empresa que trabalho.
Posted in python | Tags: google app engine, python, sorteio | No Comments »