Friday, January 20, 2012

Encoding and mysql

Knowing how encoding works is crucial when dealing with non-ASCII characters in your source code or database. If your data is numeric, or ASCII based, you could never know that there is such thing, but most of the time this is a issue. If you're dealing with multilingual data, it is definitely a important thing.

MySQL has four encoding settings: the server encoding, the table encoding, the column encoding, and the client encoding. Server encoding is the default encoding tables and columns will follow if not specified. Table encoding supersedes the Server if the column's is not definied. Finally, client encoding defines to which one should retrieved data be displayed.

I once had a problem with some mysql database texts being corrupted, only the non-ASCII characters on portuguese text. The problem, basically, was that data was generated on an old version of Excel, which by default saved CSV files with Latin-1 encoding, and the same data was loaded on some table which were defined to be encoded on UTF8.

The command

SELECT * FROM t1

in a Latin1 client retrieved garbage (unreadable in both Latin1 or UTF8 terminals), but the same command in a UTF8 client retrieved data in the original Latin1 encoding!

Below are some tips to diagnose and solve those problems.

To sort out if your data is stored on a different encoding from what you defined on the table or column the problem is, on *NIX, I open a terminal emulator, ensure that its encoding is UTF-8, connect to mysql using the --character-set utf8 option and then select data known to have non-standard characters. If everything is right,

I always use the *NIX terminal to perform these checks. First, ensure which encoding your terminal emulator is using; then, connect to the database using the same encoding as the terminal. Then check which encoding is the table and the column.

If when you SELECT data, it appears garbled, you can be sure that data isn't encoded as the table tells it is. Then you can connect to mysql using the same encoding as the table is defined (even if it is not the same as the terminal); if the same SELECT retrieves data correctly displayed, then your data is in the same encoding as your terminal and you should ALTER TABLE accordingly.

If your data is still garbled, try switching the terminal's encoding and doing the SELECT over and over, until it is displayed correctly. If so, change the table/column encoding to match the terminal's and everything must be fine.

If things still aren't worked out, your data has been corrupted, probably because it has a certain encoding X and was converted from another encoding Y to Z (or even back to X). Making the other way round may work to get thing back, but sometimes data is lost permanently.

The problem using GUIs to sort things out is that sometimes you don't really know which encoding the GUI itself is using. I don't imagine how to deal with it on Windows. *NIX Terminal Emulators I know usually have this setting in a place easy to be found, and mysql terminal client is also very easy to define this.

Also, I found out that the encoding defined on tables and columns doesn't affect how data is stored, but only how it is retrieved. When the table/column encoding matches the client's, data is retrieved as it was stored initially. When they don't match, results will be converted FROM table/column encoding TO client encoding.

So if your data is latin1 encoded, your table is defined as utf8, and you set the client to latin1, results will be converted to latin1, AS IF IT WERE utf8! It will completely mess your data!

You could set whatever encoding you want, as long as the client encoding matches the data the data will be retrieved unchanged.

It is also good practice to check (using the command "file") the encoding of any file before loading it in the database. "iconv" is helpful when translating files between encodings.

Finally, the "encoding collation" property interferes on how LIKE and other operators perform on those kind of character. For instance, if you set "utf8-general-ci", "ç" LIKE "c" = 1, but for "utf8-bin" it yields 0.

Thursday, August 11, 2011

Problemas com o Submarino.com

No dia 8/8/2011, a entrega de um produto foi incorretamente recusada em minha casa. No mesmo dia, contactei o chat (protocolo 11727048) para resolver o assunto, quando descobri que demoraria mais dois dias para receber uma resposta, pedi o cancelamento. O atendente disse que não seria possível cancelar a compra, me deixando extremamente irritado.

Além disso, no site do Submarino, o produto consta como entregue, o que me deixou muito preocupado com a idoneidade da empresa de entregas.

No dia seguinte, fui instruido a esperar até 11/08 pela resposta do departamento (protocolo 117328674). novamente o cancelamento foi dado como impossível.

No dia 11/08, entrei em contato novamente com o chat (117392737) e fui informado de que no dia 10/08 o produto estava em processo de devolução. fui instruido a esperar mais dois dias pela resposta do departamento, ou pelo e-mail do submarino reportando que o produto foi devolvido. Somente então a atendente Maria Aparecida acenou com a possibilidade de cancelamento, quando esse e-mail chegar.

Quero deixar registrada minha intenção de cancelar o pedido, antes que se passem os 7 dias após o pagamento (no sábado), minha preocupação com o status incorreto de "entregue", sendo que o produto foi recusado, e minha insatisfação com a "impossibilidade" de cancelar a compra, em desacordo com o código do consumidor.

Thursday, May 26, 2011

Aliens e tupperware

Já escreveram sobre como as canetas bics vem e vão, sabe-se lá de onde e sabe-se lá pra onde. Quando elas estão perto de acabar, vão para um cemitério de canetas, pois ninguém nunca viu uma caneta bic no final. Um dia alguém encontrará esse cemitério* e ficará rico; ou louco, tentando transferir a tinta das canetas de umas para outras.

O mesmo vale para os tupperwares, na minha opinião eles vem das casas das mães, lotados de comida, e depois viram pratos de gato, até que um dia as colocamos sobre um fogão quente ou coisa parecida, e elas são postas para dormir.


Este foi um sonho engraçado. Eu estava dormindo numa casa (parecia da Nicéia) e de repente uma ponteira laser vermelha apareceu, me enchendo o saco. Depois verde. Olhei pela janela para tentar localizar quem estava fazendo isso, e nada. depois de um tempo começou novamente. Olhei para a janela e não achei. Aliás a cidade era bem bidimensional, parecia um desenho de perfil, com cores bem azuis e "estouradas". De repente, luzes laser verdes apareceram, pensei que eram aqueles spots que ligam quando tem algum evento. Desconfiei que tinha alguma coisa muito estranha quando um laser arredondado começou a sair das nuvens. Parecia o ícone do bluetooth.

Bom, discos voadores iguais ao do Ed Wood começaram a aparecer, e claro que decidi me esconder. Sem me prender à arquitetura da casa em que eu estava, e ao fato de que existiam dois carros no quintal que precisei manobrar para entrar, na hora que voltei a cidade, que tinha casas, prédios, virou uma pilha de tupperwares!

Pensei: então os aliens voltaram para buscar seus tupperwares.

* o cemitério de judeus é um semitério?

Tuesday, May 24, 2011

Excel e localização

As funções em excel são diferentes na versão em português e em inglês, isso todo mundo já sabia.

Nunca tinha parado pra pensar... que decisão de design complicada da parte da Microsoft! Isso talvez facilite a vida do usuário que não conhece inglês (coisa cada vez mais rara), e mostra uma disposição louvável da Microsoft em disponibilizar ferramentas cada vez mais localizadas.

Entretanto, quem sabe programar em uma língua, ao se deparar com o Excel em outra localização se perde. Quem diria que o bom e velho "TRIM" fosse "ARRUMAR"?

A coisa é pior do que eu pensava: Excel em português brasileiro é diferente do em português de portugal. "TRIM" lá é "COMPACTAR".

Trabalhar com as mensagens do sistema com múltiplas localizações já é difícil o bastante; com linguagens diferentes dependendo da localização é demais!

Não achei referências sobre funções em japonês ou outra lingua oriental...

http://eduardofarias.wordpress.com/2009/09/23/excel-ingls-portugus/
http://wwwhome.ewi.utwente.nl/~trieschn/excel/excel.html

Neste contexto, faz sentido a piada:

- Em que linguagem você programou?
- Em português.

Sunday, April 03, 2011

O fim da série Duna: chave de ouro dos tolos

Imagine uma série de 6 livros de ficção científica que se passam no intervalo de tempo de 6.000 anos; onde o foco não é na ciência, mas no uso que o indivíduo e a sociedade fazem desta; onde "ciência" compreende não só naves espaciais e raios lasers, mas psicologia, ecologia e política; onde coisas místicas como telepatia e previsão do futuro tem, vai, explicações verossímeis (dentro da fantasia) e, longe de ser um superpoder que permite girar a terra ao contrário, são habilidades que trazem vantagens e limitam ao mesmo tempo; personagens interessantes, profundos, bem descritos; onde após 23.000 anos do nosso tempo, existem numerosas histórias e mitos, dando sugestões de tudo o que se passou desde agora; e que, no final da série, os fatos dos primeiros livros surgem como lenda e mito; humanos mutados, simbiotizados com outras espécies, modificados geneticamente; por fim, num ramo literário quase abstêmio, fala de drogas (inclusive as "expansoras da mente", sonho dos anos 60), amor e sexo como alavancas que movem as pessoas e, por conseguinte, as sociedades.

Frank Herbert fez tudo isso, e criou uma série intrigante, viciante e imprevisível. Que foi interrompida no sexto livro por ocasião da morte do autor, num ponto crítico de tensão: descobre-se que a guerra contra o atual inimigo é besteira, que há um inimigo maior ainda por vir, facções inimigas são subitamente aliadas por manobras políticas, rebelados fogem numa nave com material genético e tecnologia suficientes para clonar (ou "gholar") as principais figuras históricas dos últimos 10.000 anos.

Tudo o que sobrou foram anotações do próprio autor sobre o fim da série, e as ligações sinápticas criadas no filho Brian em decorrência de conversas e brainstorms sobre a continuação da série. Que se preparou para terminar a série escrevendo livros sobre o universo Duna com um colaborador. E esperávamos ansiosos a conclusão da série.

Pena que esse filho não era um Kwisatz Haderach, e não tinha acesso às "outras memórias", para consultar seu pai. Poderia até ser uma Abominação e deixar o velho tomar conta para concluir a série. Porém esse talento literário extremo não foi hereditado, e a série não teve a conclusão que merecia.

Falando apenas dos dois últimos livros, "Hunters of.." e "Sandworms of Dune". Primeira crítica, tem personagem demais; eles resolvem simplesmente gholar todo mundo que apareceu nos últimos livros, e mais meia dúzia do passado lendário do universo. O próprio Frank Herbert usava esse recurso com moderação, e pelo que lembro tínhamos por livro uns 5-7 personagens importantes - em Sandworms, cada trama tem esse número. E temos quantas tramas? A nave Ithaca, os Tleilaxu perdidos+Guilda, Waff, a nova Irmandade, os Judeus, o império sincronizado, os Dançarinos Faciais... é muito cacique pra pouco índio;

Muitos deles ainda não são consistentes com a série, puxando demais para o heroísmo romântico (como Miles Teg e Duncan Idaho) ou melodramatismo (como o dr. Yueh). Estes personagens, na série original, são difíceis de categorizar, por terem muitas camadas como uma cebola, e intenções dentro de intenções (a assinatura da série). Talvez o excesso deles se justifique por isso, para evitar entrar em detalhes que não seriam bem trabalhados.

Quanto às tramas: às vezes dá raiva de ler, pois acontecem "aventurinhas" chatas e sem significância para a trama real, e com tantas coisas acontecendo em planetas (e conjuntos de personagens) diferentes, a tentação de pular capítulos é grande. Bom, isso pode ser um defeito meu; eu tenho essa vontade recorrentemente.

Os grandes passos, como a recuperação de memórias para os personagens acontecem em um ou dois parágrafos, quase que de imediato. Os conflitos que levam ao desabrochar de novas habilidades para os personagens não são bem explorados e parecem pouco críveis.

Por fim, o fim é o fim: como li na wikipedia, são 4 "deus ex machina" consecutivos. A frota humana revela-se defeituosa, alvo de extensa sabotagem. Porém, com um estalar de dedos, agentes infiltrados nos milhões de planetas povoados por humanos morrem. O comandante principal da frota inimiga, superior em poder de fogo e numericamente, é banido para "outra dimensão" (nunca se falou disso na série clássica, o conceito já aparece do nada) por uma entidade que nunca fez nada na série inteira, o robô cruel, inocente e chatíssimo que só quer ser humano pede pra morrer, para conhecer a derradeira experiência de ser humano.

Depois disso é só v*, parece fim de novela. Todos os bonzinhos recebem cargos nos planetas preferidos; o universo humano tem um governante que vê o futuro e não vai na direção da estagnação (o que era a grande falha da chamada presciência), tem conexão com todos os robos e computadores (todos mesmo), e portanto é onisciente, foi refinado geneticamente ao longo dos 6.000 anos anteriores para ser um grande lutador, estrategista e, por fim, conhece o poder do amor.

Foi mal Brian, mas se te serve de consolo, era areia demais pra acho que 100% dos caminhõezinhos escritores atuais.

Thursday, February 03, 2011

bing x google

O Bing não está copiando os resultados de busca só do google.

Pelo que entendi, o usuário do IE que usa a barrinha de busca acessa resultados do google, e a cada clique, o par de informações "termo de busca / url clicado" é enviado para "melhorar a experiência web do usuário" (segundo a licença do IE).

Então teoricamente qualquer resultado de busca é usado para melhorar os resultados do Bing, não importa o site.

Para livrar a cara da Microsoft, é o usuário que manda os dados pra ela, e não ela que vai e copia o google.

É mais uma batalha semântica: o que é copiar? É errado consultar outros mecanismos de busca para melhorar seus resultados? Certamente a Google fez isso parecer a pior das sacanagens, mas hey, é o mercado!


http://latimesblogs.latimes.com/technology/2011/02/google-says-microsofts-bing-cheats-copies-search-results.html

Thursday, December 16, 2010

Morreu um amigo

Hoje recebi da forma mais estranha o comunicado de que um vizinho, e amigo, o Humberto, suicidou-se.

Sua família passava por dificuldades financeiras e estavam de mudança no dia de hoje; só descobri ao procurar por eles.

Era provavalmente o único amigo que fizemos em São Caetano. Adotou uma cadelinha, a Ximbica, e há uns tempos doou para nós pois iria, eventualmente, mudar-se. Visitava sempre que podia a cadelinha e o Duque, nosso cachorro. Conversávamos sempre, era um sujeito bem legal, comunicativo, educado.

Ontem mesmo ele passou em casa. Parecia um pouco mais pra baixo, mas como ele tem o costume de dormir cedo e era já um pouco tarde, não estranhei. Fico pensando o que eu poderia ter dito ou feito para evitar essa terrível tragédia...

É o tal do shadow cross my heart de que fala o Rush.

This page is powered by Blogger. Isn't yours?