C# e o problema dos Grids

Bom, eu não sou exatamente um expert em C#, mas uso no dia-a-dia no trabalho, e ultimamente uma coisa vem me incomodando bastante na sua definição.

Primeiro, vamos deixar claro, uso .net v2.0. Ou seja, não sei se o problema foi corrigido nas versões posteriores, mas pelo que vi, não o foi.

Quando criamos um DataGrid em C#, para exibirmos dados no DataGrid precisamos especificar um DataGridTableStyle, que é o define que tipo de dado será exibido naquele DataGrid, qual será o nome de cada coluna, a ordem das colunas, etc.
Pois bem, temos então algo nesse estilo:

DataGridTableStyle estilo = new DataGridTableStyle();

estilo.MappingName = typeof(List).Name;

DataGridTextBoxColumn coluna = new DataGridTextBoxColumn();
coluna.MappingName = “Campo”;
coluna.HeaderText = “Meu Campo”;
estilo.GridColumnStyles.Add(coluna);

dataGrid1.TableStyles.Clear();
dataGrid1.TableStyles.Add(estilo);

Agora olhe bem pra esse código. Você a vê a linha que define coluna.MappingName? Pois é. Ele define uma string com o nome do campo. Sim, uma string hard-coded no seu código.
“Ah, mas qual o mal nisso?”, você pode perguntar. Como é sabido, o Visual Studio tem uma ferramenta de refactor razoavelmente eficiente. Que deixa que você modifique o nome de um campo para melhorar o seu código em poucos passos. No entanto, com o nome no campo assim numa string, isso passa a não ser mais tão útil assim, pois você tem que ir lendo todas as ocorrências da string para ver se elas são mesmas relativas ao campo que você está modificando. Se você esquecer de alguma, você terá problemas no seu programa.
Um outra caso é que em refactors algumas vezes você muda a estrutura do seu programa e aí você não pode ter certeza se o campo que você quer apagar realmente não é referenciado pois não é possível encontrá-lo sem que você busque pela string e vá vendo ponto-a-ponto.

Não é o pior problema do universo, no entanto, vai de encontro a toda facilidade de refactor estabelecida no Visual Studio.

Eu procurei e não encontrei solução para isso, e fiquei bem decepcionado. Tive que usar de truques pra encontrar essas coisas no código, como declarar uma variável temporária do mesmo tipo da Classe usada na Lista para poder usar o refactor.

Vocês conhecem uma solução melhor?

Adicionar aos Favoritos BlogBlogs Add to Technorati Favorites

0 Comments : Posted in: Developments,Nerdish : 01.14.10

Sobre desenvolvimento de jogos

Bom, ainda sobre o projeto final, a área que eu escolhi é desenvolvimento de jogos.

Desenvolvimento de jogos é uma área que sempre me interessou e, na verdade, foi um dos grandes motivos pra entrar na faculdade. Sempre sonhei em participar do processo de criação de um jogo. Quando era pequeno, vi um programa no Discovery Kids em que o apresentador visitava o centro de testes da Nintendo of America, fiquei maravilhado e por muitos anos aquele foi o sonho da minha vida. Quando soube mais do trabalho descobri que ele não era nenhum trabalho dos sonhos, mesmo. Mas, na época, os atrativos eram enormes – você jogava videogames o dia inteiro, videogames novos, e ainda podia pegar os jogos da nintendo de graça pra levar pra casa.

(…)

Pra ler o resto, clique aqui, ou lá em cima em GameDev.

Adicionar aos Favoritos BlogBlogs Add to Technorati Favorites

0 Comments : Posted in: Developments,Games,Nerdish,Projeto Final : 03.6.09

Transferir os posts do Blogger.com.br pro WordPress – Parte II

Esse post ainda é um campeão de ocorrências. E infelizmente o método que eu indiquei nele já não funciona como deveria. Portanto, hoje resolvi botar no ar um método que funcione pra ajudar os que chegam aqui procurando uma luz. Vamos lá.

Uma pequena introdução: uma coisa interessante é notar como o blogger.com.br parou no tempo. O blogger.com é gerenciado pela Google. Embora seja uma ferramenta de blogging que eu pessoalmente não gosto, ele ainda tem atualizações, possui hoje em dia feeds rss, e outras coisas que são tão úteis na comunidade blogueira dos dias de hoje.
Já o blogger.com.br está nas mãos da globo.com, não me lembro muito bem, mas acho que o blogger.com.br foi vendido pra globo.com, ou talvez alugado, vá saber, e do mesmo jeito que ele estava quando eu comecei a usá-lo em 2004, ele continua hoje em dia.
Com isso, é comum as pessoas quererem migrar pra fora dele. Ou mais, quererem tirar suas coisas do ar, porque as vezes as idéias e opiniões mudam, e as que estão online já não mais condizem com o que você pensa. Mas no blogger.com.br não há opção de fazer backup. Ainda mais de usar de ferramentas de migração. Para isso, esse tutorial.

Em primeiro lugar, vamos começar pelo princípio. Salve todas as suas páginas de arquivo do blogger. Elas serão todas modificadas, e no caso de dar algum problema no meio da migração, você terá os arquivos em algum lugar pra pegar os arquivos.
Um problema desse método é que em teoria ele só funciona para blogs com até 999 posts. Digo em teoria porque claro que você pode ir olhando de mês em mês e importando os meses manualmente, mas se o seu blog tem mais de 999 posts, provavelmente isso será bem entediante. Mas dá pra ser feito.

Bom, se você já fez os backups necessários (ou ignorou essa etapa), então tá na hora de ajeitar a página principal. Vá nas configurações do seu blog no blogger e mude as seguintes opções:

- Mostrar os últimos XXX Posts: coloque para 999
- Formato do Cabeçalho de Data (ATEN????O: Esta opção parece estar ao contrário, o nome correto dela seria formato de data. No caso do nome ser ajeitado, basta buscar nas duas opções, pois somente uma delas apresenta esse formato): 2/26/2009 09:21:07 PM (ou seja, mês/dia/ano hora:minuto:segundo AM/PM)

Agora, vá até o seu template, e cole o seguinte código lá (Lembre-se de guardar seu template, se for de seu interesse!!):

<?xml version="1.0" encoding="ISO-8859-1" ?>
<rss version="2.0"
xmlns:content="http://purl.org/rss/1.0/modules/content/"
>
<channel>
<description>Personal blog</description>
<link>(Endereço do blog)</link>
<title>(Título do Blog)</title>
<Blogger>
<item>
<title><$BlogItemDateTime$></title>
<description><![CDATA[<$BlogItemBody$>]]></description>
<content:encoded><![CDATA[<$BlogItemBody$>]]></content:encoded>
<author><$BlogItemAuthorEmail$> (<$BlogItemAuthorNickname$>)</author>
<guid>(Endereço do blog)/<$BlogItemArchiveFileName$>#<$BlogItemNumber$></guid>
<link>(Endereço do blog)/<$BlogItemArchiveFileName$></link>
<pubDate><$BlogItemDateTime$></pubDate>
</item>
</Blogger>
</channel>
</rss>

Mudar os lugares onde está escrito (Título do blog) e (Nome do blog) não é necessário. Mas para um rss bem formatado, esses campos são necessários. Agora salve o seu template, vá até o painel de posts e clique em publicar. Se tudo tiver corrido bem, você deverá ter quase o rss pronto para ir para o seu wordpress.
Temos dois problemas, porém. A data que o blogger fornece pra nós está quebrada. E ele não lê o feed RSS corretamente.

Bom, para consertar isso, eu fiz um pequeno script em perl que vai pegar o feed que você acabou de gerar do seu blog, corrigir esses dois problemas, e em seguida irá lhe enviar o arquivo pra que você possa utilizar no wordpress. Então, siga este link e faça os passos necessários. Esse procedimento foi testado com sucesso no wordpress 2.7.1. Então, se o seu wordpress está numa versão inferior, atualize antes de começar!

A saída do script será baixada para o seu computador, de modo que você agora poderá ir no seu wordpress e na opção de manage clicar em import -> rss.
OBS: na versão 2.7 o import foi para o menu tools.

Bom, espero que isso ajude mais gente por aí afora. Afinal, ainda tem muita gente que vem visitar esse blog com esse intuito.

Bônus: Se você caiu no caso chato de ter um blog com mais de 999 posts, não se desespere. O que você deve fazer é ir nas configurações do seu blog no blogger e clicar em republicar todos os posts. Isso fará com que o seu arquivo seja atualizado para o formato do rss. Com isso, ao invés de você usar a sua página principal como endereço no script, você deverá usar o endereço dos arquivos, um-a-um, até que você tenha importado todo o seu blog. O trabalho não é divertido, mas a menos que você tenha escolhido arquivar semanalmente, não deve demorar muito. Boa sorte!
Ah, não se preocupe com posts repetidos. Eles não são importados automaticamente pelo WordPress.

Adicionar aos Favoritos BlogBlogs Add to Technorati Favorites

17 Comments : Posted in: Blogosphere Things,Developments : 02.27.09

Transferir arquivos do Blogger.com.br pro WordPress

UPDATE: Como esse tutorial já não funcionava direito, fiz um novo, testado e todo por mim que funciona com certeza. Veja aqui!

Bom, vieram me pedir ajuda de como fazer a transferência do blogger.com.br, pois os tutoriais explicando parecem ser poucos.

Infelizmente não posso disponibilizar o que eu usei pra fazer a minha conversão pois foi um mini-programa feito por mim que eu já não tenho mais em meu pc, mas caso haja procura eu posso tentar fazer algum.

Bom, o que vou usar para explicar é o RSSify do Interney.net.

O único jeito fácil de transferir os arquivos do Blogger.com.br para o WordPress é com um RSS de todo o conteúdo do blog. Embora o RSSify do Interney faça isso de um jeito mais simples do que o desejado (os seus posts vão ficar sem título e provavelmente vão assumir a data de hoje), ele é o único RSSify que eu conheço para o blogger, então vamos lá.

Primeiro, tenha em mente: Esse procedimento N??O é garantido. Pode não funcionar do modo desejado, e os primeiros passos visam evitar que isso aconteça, então vamos lá!

1) Confira se o seu template não possui tags <span>. Esse passo é importante pois com tags <span> no seu template o RSSify do interney não funcionará como desejado.
2) Agora, edite as configurações do blogger.com.br e mude a seguinte opção “Mostrar os últimos 999 posts na página principal”. Deixe-a desse jeito.
3) **IMPORTANTE** Nesse passo, você irá republicar todo o seu blog MAS tenha em mente que ao republicar todo o seu blog, todos os templates que estão em seus arquivos antigos mudarão para o seu template atual. Caso você não queira perder os templates antigos, salve os arquivos antigos um a um, para que eles não se percam.
4) Com o blog já republicado, na página principal agora devem estar aparecendo todos os posts de seu blog. Com isso, cheque mais uma vez se há em algum lugar do código alguma tag <span>, caso haja, retire-a de lá.

Com isso, seu blog deve estar pronto para a usar a ferramenta de RSSify do interney.net, então vá em http://www.interney.net/rssify.php e siga as instruções. Recomendo que depois de inserir a tag que está descrita lá, republique todo o conteúdo mais uma vez.

Se tudo correu bem, agora você deve ter um rss funcional do seu blogger.com.br, que deverá poder ser importado para o WordPress sem problemas.

Como disse, não será um RSS perfeito, mas será o jeito mais fácil de importar no WordPress. Caso você ache outras ferramentas de RSSify, esses passos provavelmente serão úteis para elas também. Me dê um feedback e eu editarei as informações aqui :)

Boa sorte e caso consiga, deixe um post aqui dizendo o endereço do seu novo blog e do antigo para que eu possa ver :)

UPDATE: Como esse tutorial já não funcionava direito, fiz um novo, testado e todo por mim que funciona com certeza. Veja aqui!

Adicionar aos Favoritos BlogBlogs Add to Technorati Favorites

3 Comments : Posted in: Blogosphere Things,Developments : 02.29.08

Um ensaio sobre as pessoas e a probabilidade

Não sou um especialista em estatística. Longe disso. Mas tenho certeza de que nada é 100% randômico. Mas pra algumas aplicações humanas, isso é realmente bom.

Existem os dois lados. Quer ver um exemplo?

Tenho certeza que você quer que o seu sorteio da Mega Sena seja o mais aleatório possível. Você quer que as chances de cair 1-2-3-4-5-6 sejam exatamente as mesmas de cair 1-33-42-47-52-58. E digo mais, se aquele jogador assíduo suspeitar de que não é assim, ele será o primeiro a pular e reclamar.

Mas isso traz um problema, e aí entra o outro lado. Seres humanos possuem memória. “Grande Descoberta!”, você pode dizer, mas isso introduz um real problema em alguma coisa ser completamente randômica. Porque coisas completamente randômicas podem se repetir várias vezes.

1 2 3 3 3 1 9 2 3 3 3 4 7 89 99 1 23 4 57 64 54 32 44 12 32 99 53 29 1 29 34 87 23

Então. Você acha que isso ali em cima é randômico ou que está viciado? ?? uma sequência randômica, mas por causa da nossa memória, parece pra nós que ela está viciada, por causa da ocorrência de números “3″. A verdade é que uma sequência randômica não precisa não ter números repetidos. Mas sim que quando você olhar a longo prazo, a ocorrência dos números seja basicamente a mesma. (Mas isso é quando você sortear 4 milhões de números e não sorteando 20)

O segundo problema é que humanos se incomodam com repetição quando acham que as coisas não deveriam repetir. Quer ver algo que provavelmente já aconteceu com você? Verdade ou Consequência. Você tá lá, reunido numa roda de amigos jogando Verdade ou Consequência do modo clássico, usando uma garrafa. Mas aí já caiu 10 vezes ao longo da brincadeira fulano pra siclano. Fulano já não sabe mais o que perguntar pra siclano. Beltrano tá de saco cheio porque não consegue perguntar/responder. E aí todo mundo decide brincar de alguma outra coisa.

Há um tempo eu tentei fazer um programinha pra fazer o sorteio das pessoas. E fazer uma pequena experiência, também.
No princípio, o programa só pegava duas diferentes de uma lista, completamente randômico. O resultado foi que as pessoas se incomodavam muito com o fato de algumas pessoas repetirem com frequência, assim como acontecia no modo clássico, como era o esperado.
Depois, numa versão posterior, eu evitava de acontecer só o caso em que uma pessoa respondia ou perguntava logo depois de ter respondido ou perguntava. Mas ainda assim, a frequência de repetição ainda era alta, e as pessoas se incomodavam muito rápido com isso.
A última versão diminuíu muito a insatisfação das pessoas, o que foi feito é que todas as pessoas perguntavam ao menos uma vez antes de alguém repetir. Muito tempo se passou antes que a repetição começasse a ser realmente incômoda.

Esse monte de falação é só pra dizer que completamente randômico não existe, e mesmo que existisse, as pessoas se incomodariam com ele em várias situações do dia-a-dia por causa a falsa sensação de repetição que algo realmente randômico passa.

Sobre a parte do não existir completamente randômico. Pelo menos não em computadores. Aquilo que fingi ser aleatório no seu computador é uma equação matemática. E como tal, você talvez se lembre de nunca ter visto uma função matemática que gere um número diferente sempre. ?? porque ela não existe. :)

Pense num dado de 6 faces. Pense em um jogo como War, o número de vezes que o dado se repete pra você numa noite, e o quanto incomoda quando você dá aquela lufada de azar e tira 1 durante três rodadas seguidas. :)

Adicionar aos Favoritos BlogBlogs Add to Technorati Favorites

0 Comments : Posted in: Developments,Random Thoughts : 02.11.08

Uma DLL tomando forma

Embora eu não esteja com muito tempo livre ultimamente, a DLL já está bem avançada quando o fronte é o XChat.
Hoje eu comecei a trabalhar em fazer ela compatível com o mIRC também, mas parece que algumas coisas que implementei pro XChat terão que ser feitas por mIRC Scripting, quando for pra ser usado com o mIRC.

Pretendo na primeira oportunidade que eu tiver fazer uma interface gráfica para a configuração da DLL. A DLL carregará as configurações individualmente, sem a intervenção do programa (XChat ou mIRC).

Até o momento, no meu local de testes, as seguintes funções já funcionam em ambos as versões:
- Autocolor
- Colorir Emoticons
- Colorir Pontuação [Funciona com e sem Colorir Emoticons ligado]
O XChat tem algumas funções implementadas no DLL que não estão implementadas no mIRC, são elas:
- Nick Completing (AKA “Nick completation”)
- Antes/Depois do AutoColor somente no canal ou também no PVT

E no momento, a ToDo List inclui:
- Frase corretor [que vai poder aproveitar o "banco de dados" do anterior]
- Google Color
Pois é.. Espero que o Autocolor pro XChat deixe pessoas felizes. Eu mesmo quando mudei pro XChat procurei muito um plugin que fizesse isso, mas não encontrei nenhum. Aparentemente, nós brasileiros somos os únicos que realmente gostamos de colorir coisas no IRC.
Enfim, deixo aqui umas tags que podem fazer as pessoas encontrarem isso. Em breve pretendo botar uma beta pra download.
Tags: XChat, mIRC, AutoColor, Nick Completation, Nick Completing, XChat mIRC Plugin

Adicionar aos Favoritos BlogBlogs Add to Technorati Favorites

0 Comments : Posted in: Developments : 09.12.07

Lond Script, a nova versão saindo do forno

Pois é, quando o Lond Script começou há uns anos atrás, a intenção era ser só pra um amigo, mas aí outros foram pedindo e tal, até que eu tive que reescrever ele todo nas férias passadas, como está relatado lá pra quem quiser ler.

Mas conforme fui incluindo coisas, a linguagem de script do mIRC começou a ser limitante, e eu já estava querendo mudar pro linux de vez, de modo que isso estava me limitando bastante, ter que ficar preso ao mIRC.

Foi quando comecei a escrever o plugin em C++, que faria as mesmas funções do script, só que com todas as otimizações que eu pudesse fazer por ser pré-compilado.

Pois bem, aproveitando isso, a mais nova função – e que acho que é interessante também – do script é a de otimizar a mensagem antes de enviar. Deixa eu explicar:
O mIRC há um tempo atrás introduziu uma feature que acabou virando padrão, cores nas mensagens. Pra isso, são usados alguns códigos: pra cores, pra negritar, pra sublinhar e pra fazer reverse (que na prática coloca a mensagem com o inverso da cor atual padrão de mensagens) e pra botar o texto de volta ao normal.

Ou seja, digamos que eu chame os códigos de c, b, u, r e o, respectivamente. Se eu quisesse colocar cores no meu texto, faria algo assim:
c03,04meu texto aqui.

Pois bem, mas quando você faz essa colorização automática — como é o caso com o auto color do script — muitas vezes esses códigos ficam uns por cimas do outro, o que aumenta muito o tamanho da mensagem (já que os códigos e números são contados como caracteres) e o máximo de caracteres do padrão do IRC são 600, na maioria dos servidores.

Agora, no script, eu introduzi um otimizador na saída, de modo que ele procura por códigos que estejam uns por cima dos outros (como duas cores seguidas, ou cor seguida de código pra voltar ao normal), e apaga, entregando ao XChat (ou mIRC, futuramente) o melhor possível.

Tá, não é o melhor possível, mas eu estou trabalhando para que seja xD

Enfim, só tô postando porque achei uma idéia legal de inserir no Script (agora Plugin), porque embora seja transparente ao usuário, vai ser uma coisa a mais pra quem for usar.
Pretendo ver se coloco também pra ele quebrar linha automaticamente em caso de mais de 600 caracteres e mais umas firulas, mas nada certo, ainda.. ;)

Adicionar aos Favoritos BlogBlogs Add to Technorati Favorites

0 Comments : Posted in: Developments : 08.8.07

Revivendo velhos companheiros

Pra quem não sabe, tem uma semana já que eu não entrava no rWindows, estou configurando meu slackware tentando tirar o máximo dele pra ficar permanentemente por lá, e estou preparando um post de como resolver alguns problemas que tive, assim que estiver pronto posto (talvez mude um pouco o conteúdo, já que ainda essa semana atualizo mais uma vez o Slackware pra tentar ficar de vez.)

Por causa dessa mudança, estou largando o mIRC, o que antes era um projeto pessoal de aprendizado (transformar o lond script em um dll), acabou se mostrando muito útil agora que pretendo ficar no Linux que de vez, já que com algumas alterações, poderei usar o mesmo dll para o XChat, que é o cliente que pretendo adotar.

Nesse ritmo, fiquei com saudade do bot que ficava no #Joakarow, em EggDrop, que fazia algumas estatísticas, registrava a última vez que alguém esteve no canal, e estava com um bot de duelos em fase de desenvolvimento via chat. Com isso, eu tive uma vontade de tentar reviver algum dos dois computadores que jaziam num dos cantos do meu quarto para que pudessem, pra tentar montar um servidor em um deles e deixar o bot online o dia todo, além de ser um meio de acessar dados que eu possa precisar durante o dia e de quebra ainda ter um ssh pra um ambiente linux onde eu possa compilar coisas que eu precisar..

Depois de algumas horas, mexendo cabos pra cá e pra lá, mudando coisas de lugar, e com muitas placas espalhadas, consegui botar os dois pcs pra funcionar. Um 586(“Designed for Windows 95″!) e um PII 233mhz. Agora o negócio é arranjar um HD pro 586, porque o dele fritou faz tempo ;)

Aproveitando o embalo, pra quem tiver migrado recentemente pro XChat, ou tiver passado por lá mas tiver desistido por causa das cores, as cores originais do mirc são essas:

0  – #FFFFFF
1  – #000000
2  – #00007F
3  – #009300
4  – #FF0000
5  – #7F0000
6  – #9C009C
7  – #FC7F00
8  – #FFFF00
9  – #00FC00
10 – #009393
11 – #00FFFF
12 – #0000FC
13 – #FF00FF
14 – #7F7F7F
15 – #C0C0C0

?? só mudar nas opções do XChat e fica igual :)

(Só pra ficar mais fácil se alguém quiser achar isso: mirc colors, cores mirc, cores do mirc, mirc original colors, cores originais do mirc, mirc colores)

Adicionar aos Favoritos BlogBlogs Add to Technorati Favorites

1 Comment : Posted in: Developments,Linux,My Life : 07.6.07

Bloqueio Natural

Meu interesse por computadores começou cedo, culpa dos videogames, mas só por volta do ano 2000, quando já tinha meu computador e internet, que com o lançamento do ICQ 2000 eu comecei a fazer uma página usando a ferramenta que vinha com o ICQ. A princípio eu usei a própria ferramenta, mas depois eu descobri que ela só funcionava quando eu estava online, e copiei a página pra um outro servidor, com algum esforço..

Bom, um tempo depois, eu comecei a aprender html na marra, comprei um livrinho básico, e depois um livro de javascript. No de html não falava muita coisa que eu não soubesse, e na época o de Javascript foi inútil pra mim, não entendi lhufas.

Comprei depois um livro de VB (ew)  que ensinava a fazer um programa pra gerenciar uma coleção de cds, eu segui o livro e terminei sem saber nada de nada, então eu deixei pra lá essa história de programação durante uns anos..

Só bem depois que eu comecei a me embrenhar com script, por causa do mIRC, e foi o lugar onde me entendi melhor, um bom manual, muita paciência e persistência, foi onde eu aprendi mais, acho ^^

Depois tentei php, mas sem muito sucesso.. Eu entendia o básico, mas na hora de fazer alguma coisa complexa, não saía nada..

E na faculdade primeiro pascal, depois C, embora tenha me dado bem com as duas, C virou uma paixão..

E daí eu descobri, meu bloqueio não é com programação, é com programação assíncrona, tipo de web, ou de forms, onde o infeliz pode clicar onde quiser, na hora que quiser, sem muita previsão.. Em programação estruturada, sem essa liberdade toda, ou ainda que assíncrona, mas com um certo controle, eu me dou bem..

Preciso aprender a abstrair assíncrona ainda, mas hoje em dia tô bem melhor, um dia consigo fazer um sistema de login em php hehe ;)

Adicionar aos Favoritos BlogBlogs Add to Technorati Favorites

1 Comment : Posted in: Developments : 05.8.07

Working on new features for lond script..

So, today I started working on new features for Lond Script. I finally did the one that was on my “To Do” list for ages: Colorize punctuation marks
It was easy to do, but I’m lazy, so it took all this time for complete it xD

Now my to do list resumes to:

  • Show services messages in separate windows
  • Add the option to use Bold or Italic in auto color and emoticons
  • Add this new options to the config menu (F9)
  • Warnings about new versions

I will try to do it soon, and put online the new version, but I doubt it will be fast, ’cause tomorrow I’m going to see my job schedule, and with this I should start soon, maybe monday.

Well, that’s it, see ya!

Adicionar aos Favoritos BlogBlogs Add to Technorati Favorites

0 Comments : Posted in: Developments,In english! : 03.8.07