27 de dez. de 2014

Obrigado Wikipedia! -- Thank you Wikipedia!

[leia a versão em português desse texto abaixo -- ele está em inglês porque eu originalmente pretendia postar isso no Facebook xP]

In late 2013, when all my knowledge about Linguistics came exclusively from the Wikipedia, someone (actually, a Natural Language Processing student who was at the time preparing to go study abroad) told me that Wikipedia was a terrible source of information on Linguistics, and that most of what was there was simply wrong.

Since then, I read a lot about the topic: trying to escape the unstructured way in which the information is presented in the Wikipedia, I somehow found a book and decided to start reading. This doesn't mean I stopped looking at the Wikis: as time passed, the Wiktionary became my most visited website ever, and reading descriptions of random languages was a common weekend hobby. [I also tried to start with Latin (even reading from Wikibooks) and French, but so far I can only understand a little of both languages]

Through time, I found out I also liked some Philosophy of the Mind and Epistemology (which made me find out about some other more "academic" resources on the topic, like the Stanford Encyclopedia of Philosophy) and Psychology (I even took a course on Social Psychology in Coursera).

It took me a long while to read the book (I often start many things at once and end up not managing to finish many...), but while reading I noticed I already knew a lot of what was there: Wikipedia had told me already!

Today I recalled that moment, when that guy told me Wikipedia was unreliable on Linguistics. I don't know where he came with this up, but I can only say he was simply wrong. Too wrong!

As the title of this post tell you, this text is just a big thankful tribute to the website that was responsible for (and probably will still be for a long while) most of the mind blows I had in the last years.

Thank you Wikipedia!

[Now... if Wikipedia is that good (and it is), why not keep contributing to it? Now that I am reading articles and learning about current research in the topic, I think it is the time to start writing my own contributions so that others can find out how amazing a resource that piece of virtual land is \o/]

--

Ao final de 2013, quando todo o meu conhecimento sobre Lingüística vinha exclusivamente da Wikipédia, alguém (na real, um estudante de Processamento de Linguagem Natural que estava na época se preparando para estudar no exterior) me disse que a Wikipédia era uma fonte terrível de informação sobre Lingüística, e que a maioria do que lá estava estava simplesmente errada.

De lá pra cá, eu li um monte sobre o assunto: tentando escapar da forma desestruturada em que as informações são apresentadas na Wikipedia, eu de alguma forma encontrei um livro e decidi começar a ler. Isso não significa que eu parei de olhar as Wikis: com o tempo, o Wikcionário [na real, o Wiktionary, em inglês, que tá mais completo xP] se tornou o meu site mais visitado, e ler descrições de línguas aleatórias era um típico passatempo de fim de semana. [Eu também tentei começar com Latim (inclusive lendo do Wikibooks) e Francês, mas até agora eu só consigo entender um pouco de ambas as línguas]

Através do tempo, eu descobri que também gostava de Filosofia da Mente e Epistemologia (o que me fez descobrir alguns outros recursos mais "acadêmicos" sobre o assunto, como a Enciclopédia de Filosofia de Stanford) e Psicologia (eu até fiz um curso sobre Psicologia Social no Coursera).

Me levou um bom tempo pra ler o livro (eu frequentemente começo muitas coisas de uma só vez e acabo não conseguindo terminar muitas delas...), mas enquanto lendo o livro eu notei que já sabia um monte sobre o que lá estava: a Wikipédia já mo tinha dito!

Hoje eu me lembrei daquele momento, quando aquele cara me disse que a Wikipedia era desconfiável quanto a Lingüística. Eu não sei daonde ele tirou isso, mas eu só posso dizer que ele estava simplesmente errado. Muito errado!

Como o título dessa postagem vos diz, esse texto é somente um grande a agradecido tributo ao sítio virtual que foi responsável (e provavelmente o permanecerá por um bom tempo) pela maioria dos meus mentestouros [vamos ver se consigo incorporar essa palavra no meu português xP] nos últimos anos.

Obrigado Wikipédia!

[Agora... se a Wikipédia é tão boa (e ela é), por que não permanecer contribuindo? Agora que eu estou lendo artigos e aprendendo sobre pesquisa atual sobre o assunto, acho que é o tempo de comçear a escrever minhas próprias contribuições para que outros possam descobrir o incrível recurso que aquele pedaço de terra virtual é \o/]

13 de dez. de 2014

Sobre o Seminário Intercultural -- About the Intercultural Seminar

[read the English version of this post below]

O Sayon me convidou para escrever novamente um texto sobre um evento do qual ambos participamos no último final de semana, e eu achei o resultado bastante interessante.

Ao mesmo tempo em que eu gostei da "fantasia" do texto, eu a achei bastante infantil, e percebi que poderia me beneficiar de um pouco mais de leitura de literatura inglesa. Não é prioridade, mas é possível que eu leia (num futuro não tão próximo) um pouco dos clássicos "óbvios" só pra me acostumar ao uso de algumas palavras "de origem germânica" "mais rebuscadas".

Dessa vez ambas as versões (em português e em inglês) estão postadas no site dele. Minha postagem aqui é só para referir ao texto de lá. Notai que a versão em português foi traduzida "ao meu gosto", e contém todo o tipo de idiossincrasia do meu português escrito. Tomara que isso não seja um problema =)

R$

--

Sayon invited me to write again a text about an event in which we both participated in the last week, and I found the result rather interesting.

At the same time that I liked the "fantasy" of the text, I found it a lot childish, and noticed that I could benefit from reading some English literature. It is not my priority, but it is possible that I read (in a not-so-near future) a little from the "obvious" classics, only to get used to some "fancier" "of-germanic-origin" words.

This time, both versions (in Portuguese and in English) were posted in his website. My post here aims only to refer to the text there =) Notice that the Portuguese version was translated "to my taste", and contains every kind of idiosyncrasy that my written Portuguese has. I hope this is not a problem =)

R$

29 de nov. de 2014

Cozinhando Feijão -- Cooking Beans

[read the english version of this post below]

Nunca pensei que cozinhar feijão pudesse ser algo tão simples. Sempre achei que ocorresse alguma magia negra arcana entre a parte de "colocar os feijões na panela" e a parte de "tirar os feijões da panela". Sempre vi minha vó colocando banha, e o alho, e a cebola, em momentos aleatoriamente diferentes, e a coisa sempre pareceu extremamente complexa -- afinal, ela perde sempre umas 2h do dia dela na frente do fogão.

Mas, na falta de uma comida "com gosto de casa", me dei ao trabalho de aprender, mesmo que sem panela de pressão, a prepará-los. Pedi instruções para a minha avó, olhei alguns videos no Youtube, e voilà, nem foi tão difícil assim. Para registro futuro, decidi descrever o processo:

Materiais

A receita pressupõe o uso de 500g de feijão. Isso dá pra duas pessoas comerem (ou pra duas refeições, no meu caso). Além disso, serão necessários:
  • Dois dentes de alho
  • Meia cebola
  • 100ml de Azeite de Girassol
  • 2 colheres de chá de sal 

Procedimento

Eu deixo o feijão de molho de um dia pro outro. No outro dia, quando vou prepará-lo, eu troco a água e dou uma boa "lavada" no feijão. Daí, ponho nova água (minha vó sugerira que a quantidade de água fosse 2x a quantidade de feijão), e deixo ferver por ~1h (sim, demora!). Em algum momento a água vai começar a ficar escura (com a cor de feijão que a gente brasileiro está acostumado). Depois dessa ~1h, eu jogo o alho picado, o óleo, a cebola picada e o sal dentro da panela. Essas coisas contribuem pra deixar a água mais "grossa". Se mesmo assim depois de uns ~15min ela não engrossar, vale a pena esmagar alguns grãos (minha vó que sugeriu isso).

O feijão estará pronto uns 30min depois da adição do alho/cebola/sal/óleo. Aí é só tirar do fogo e servir. Se em algum momento parecer que tem pouca água na panela, a solução é tão simples quanto parece: insere mais água, oras!

"Concluindo"

Agora me faltam só os feijões certos: aqui o mais próximo dos feijões pretos que a gente come no Brasil são uns ditos "feijões vermelhos [em formato de] rim" [red kidney beans]... e eles tendem a permanecer meio duros mesmo depois de cozidos. No mais, com alho e cebola suficientes, o gosto deles vai embora e a comida fica com gosto de casa.

Outra coisa que minha avó sugeriu foi trocar o óleo por bacon. Mas daí eu não sei as quantidades. Imagino que fique tri bom, mas ainda não me sinto "seguro" o suficiente na cozinha pra esses paranauês.

R$

--

I never thought that cooking beans could be so simple. I always thought there should be some kind of arcane dark magic between the parts in which one "puts the beans in the pan" and "removes the beans from the pan". I always saw my grandma putting fat, and garlic, and onion, in randomly different moments, and the thing always seemed extremely complex -- after all, she always lost some 2h of her in near the stove.

But, by lack of food "that tasted like home", I took the trouble to learn to prepare them, even though I had no pressure cooker. I asked my grandma for instructions, watched some Youtube videos, and voilà, it wasn't that difficult. For future register, I decided to describe the process:

Materials


The recipe pressuposes the use of 500g of beans. This is enough for two people (or two meals, in my case). Besides, one needs:
  • Two cloves of garlic
  • Half an onion
  • 100ml of sunflower oil
  • 2 small spoons of salt


Procedure

I leave the beans soaking in water over the night. In the other day, when I start to prepare them, I change the water sometimes, to "wash" them and remove the old water. Then, I boil the new water+beans (my grandma suggested that the ammount of water should be twice the ammount of beans) for ~1h (yes, it takes time!). At some moment the water will start to become dark (the color we brazilians are used to). After the ~1h, I throw the crushed garlic, the oil, the cut onion and the salt in the pan. These things will help to make the water "thicker" (should I call it "gravy" already?). If, even after some ~15min, it doesn't become thicker, you can always smash some of the beans (this was a suggestion by my grandma).

The beans will be ready some 30min after you put the garlic/onion/salt/oil. Then you can just remove it from the fire and eat. If, in any moment, it seem that there not enough water in the pan, the solution is as simple as it seems: just insert more water!

"Concluding"

Now I only need to cook the "right" beans: here, the nearest I got from the black beans we're used to in Brazil are some "red kidney beans"... and they stay a little hard even after cooked. Anyways, with enough garlic and onions, their taste goes away and the food tastes like home again.

Another thing my grandma suggested was that I could replace oil with bacon. But then I don't the exact ammount of bacon. I imagine it must be very good, but I still don't feel "safe" enough in the kitchen to these things.

R$

Ceticismo Contra a Previsão do Tempo -- Skepticism Against the Weather Forecast

[read the english version of this post below]


Essa postagem pretendo que seja pequena. Ela só refere a um conjunto de pequenas coisas que o meu ceticismo contra a previsão do tempo me levou a descobrir.

Eu normalmente não acredito em previsões do tempo de mais de 3 dias: elas frequentemente mudam ou erram. Para reforçar o meu viés confirmacional, essa semana, na quarta-feira, o Google disse que nevaria na próxima segunda. Eu não acreditei: disse "só acredito vendo", referenciando o São Tomé (e o Tentação, que passava no SBT nas tardes de domingo -- isso ainda existe?). Na hora, por acaso, me perguntei como se diz São Tomé em inglês... qual foi a minha surpresa ao descobrir que na verdade é um nome bastante usado no Brasil como se fosse em português: Thomas. Essa foi a primeira pequena coisa que descobri.

Hoje olhei a previsão denovo: o Google "transferiu a neve" pra quarta-feira que vem. Imediatamente pensei: "não ponho minha mão no fogo por isso". O mesmo tipo de pensamento me veio à mente: isso se diz em inglês? (tenho percebido que, apesar de o inglês ser a língua em que eu tenho quase que inconscientemente pensado ultimamente, muita coisa simplesmente me vem em português O__o) Uma busca no Google me deu a impressão de que não (apesar das citações traduzidas de um tal de Iniesta, claramente hispanófono, terem figurado entre os primeiros resultados). Essa foi a segunda pequena coisa que descobri.

Me resta agora esperar: algumas outras previsões do tempo estão marcando neve desde o meio de novembro....... não preciso dizer que ela não veio, né?

R$

--

I intend to make this post a small one. It refers only to a set of small things that my skepticism against the weather forecast made me find out.
I normally don't believe in weather forecasts that range more than 3 days: they often change or are wrong. To reinforce my confirmation bias, this week, on Wednesday, Google was saying it would snow on next Monday. I didn't believe: just told "I will not believe", referring to Saint Thomas (and to a Brazilian Television show called "Tentação" [Temptation] that aired on Sunday afternoons -- unfortunately, there is only an article about it in the Portuguese Wikipedia). At the same moment, by chance, I asked myself how to say Saint Thomas in English [the name in Portuguese that I was actually thinking about is São Tomé]... and I was really surprised to find out that it actually is a very common name in Brasil, used as if it were in Portuguese: Thomas. This was the first small thing I found out.

Today I looked at the forecast again: Google "transferred the snow" to next Wednesday. I immediately thought: [in Portuguese] "I won't put my hand on fire for that". The same kind of thought came into my mind: is this something people say in English? (I've been noticing that, although English is the language in which I've been almost unconsciously thinking lately, many things simply come in Portuguese to my mind O__o) A Google search gave me the impression that it is not (except for the translated quotations from some person called Iniesta, clearly a Spanish speaker, that appeared in the first results). This was the second small thing I found out.

Now I can only wait: some other forecasts were already saying it would snow in the middle of november....... don't need to say it didn't, right?

R$

16 de nov. de 2014

Indischer Abend

[read the english version of this post below]

 

Roubei a imagem do blog do Sayon

Contexto


Ontem teve um evento em Kaiserslautern, organizado pela comunidade indiana na cidade, chamado "Indischer Abend" (Noite Indiana). Como eu tenho vivido rodeado por indianos (muitos dos meus novos amigos aqui vêm do país), eu fui ao evento.

Um dos meus amigos indianos aqui é meio "fanático" por fotografia e tem um blog onde ele posta as fotos que tira. Normalmente ele não escreve muito, e daí dessa vez ele me convidou pra pôr as minhas impressões da festa, junto com as fotos dele. A versão em inglês do texto a seguir foi postada no blog dele. Não reproduzi-la-ei aqui. Dai uma olhada =)

[aliás, o blog dele já está na listinha ali à direita]




Texto

Algumas horas antes da Indischer Abend (Noite Indiana) começar, e tendo estado já curioso sobre o evento bem desde o princípio, o Sayon me disse pra ficar preparado: eu escreveria aqui minhas impressões. 

(Agora... deixai-me pelo menos me apresentar (pondo todos os "rótulos" em uma única frase): sou um brasileiro informata muito [absurdamente!] interessado em linguística, e não acostumado a comida ardida (ou mesmo a algumas não ardidas, acho que alguns indianos diriam). 

Pra ter certeza de que eu conseguiria entrar (as pessoas tavam esperando uma fila bem grande!), meus amigos me disseram pra chegar às 17h (30min antes deles começarem a distribuir as pulseirinhas que mais tarde -- graciosamente -- nos permitiriam pegar a comida). Acontece que 17h era muito cedo. Mas não tão cedo quanto eu tava esperando: como brasileiro, e pelo nosso "jeitinho brasileiro", eu já estava "psicologicamente preparado" pra ver o evento começar uns 30min ou mesmo 1h atrasado. Pra minha surpresa (e alívio -- tava frio lá fora), isso não ocorreu. 

Enquanto na fila, eu notei uns avisos dizendo que bebidas alcoólicas eram proibidas no local. Um dos meus amigos (que me convidou) já dissera [entusiasticamente] muitas vezes: nós não precisamos de álcool pra nos divertir! 

Ao pegar a pulseirinha, eu fui saudado com a primeira característica "tipicamente indiana" da noite: a pessoa disse "Namaste". Não sabendo o que dizer, minha primeira reação foi "thanks" [obrigado]. Eu ainda não sei qual seria a forma certa de responder. 

[side note [nota colateral(?)]: o apresentador depois disse que "Namaste" significava "Eu me curvo a ti" e eu imediatamente fiquei curioso pra saber se o "te" do fim significaria "tu", já que muitas línguas indo-européias usam "t", "d" ou "th" pra construir os seus pronomes de segunda pessoa do singular (línguas descendentes do latim usam "tu/te/ti/toi", alemão usa "du/dich/dir", inglês usa "thou/thee/thy/thine", ...). Acontece que eu tava [parece] certo: http://en.wiktionary.org/wiki/namaste http://en.wikipedia.org/wiki/Namaste ] 

Depois de pegar uma bebida de coloração rosa [não-alcoólica] baseada em leite (o nome é "rose milk" [leite rosa]), eu fui pro auditório. Mas primeiro, na entrada, todo mundo estava ganhando um ponto vermelho no meio da testa (um desses que estereotipicamente se vê indianos com). O Sayon me disse que o nome disso é "Tilak". Algumas horas depois, quando eu cheguei em casa, ele se mostrou até que bem difícil de tirar (de fato, enquanto escrevendo isso, eu ainda tenho a impressão de que não consegui removê-lo completamente). 

No auditório, danças e cantos foram misturadas a apresentações sobre o atual estado econômico e tecnológico da India. Aqui, a dança Bollywoodiana merece uma menção: eu não fazia idéia de que as pessoas realmente dançam aquilo! (achava que era só algo que se via nos filmes deles lol) 

Tendo aprendido anteriormente sobre a diversidade cultural do país, e sendo tão "desconhecedor" sobre quais são as diferenças entre cada região, foi difícil (pra mim) dizer o quê, entre as coisas que a gente viu, era local a uma certa região, e o que era mais geral pelo país inteiro. O mesmo ocorreu com a comida: em algum momento, eu comecei a perguntar várias pessoas sobre que comida era de que lugar, e quais eram as que eu encontraria em todos os lugares. 

Falando de comida, depois das apresentações, nos fomos comer. A fila estava enorme [!!!], mas havia certamente comida pra todo mundo =) Apesar deles terem dito que não seria apimentada, é verdade que tava pelo menos um pouco "ardida" pra mim (mas eles até providenciaram iogurte pra nós fracos). 

Em algum momento enquanto eu tava comendo, eles abriram a pista de dança e a música ficou mais barulhenta. As pessoas foram dançar, mas eu fiquei distante da pista (exceto no momento em que algumas pessoas literalmente me arrastaram pra pista v_v). Eu preferi só conversar, usar o momento pra perguntar os indianos que eu conheço (e agora eu na verdade percebo que eles são até mesmo em maior número do que eu pensava) sobre as suas diferenças culturais regionais, sua comida e [é claro] suas línguas. 

Quando saindo, eu permanecia pensando: todo mundo tava realmente se divertido. Imagina se tivessem álcool =)

R$

--

 
I've stolen the image from Sayon's blog

Context

Yesterday there was an event here in Kaiserslautern, organized by the indian community, called "Indischer Abend" (Indian Evening). Since I've been surrounded by indians (many of my new friends here came from the country), I went to the event.

One of my indian friends here is somewhat "fanatic" for photography and has a blog where he posts the pictures he shoots. Normally he doesn't write much, and this time he invited me to put my impressions of the party along with his pictures. The English version of the text was posted in his blog. I won't reproduce it here. Give it a look there =)

[by the way, his blog is already in the blog list in the right-hand side of the page]

R$

GCC Tutorial? Or at least what I think I know about it...

Disclaimer (em inglês... vede a versão em português mais abaixo)


You may have noticed this post is in English (which is not the norm here xP -- if you want to read the Portuguese version, just scroll down). From now on, I intend to always write an English version of my posts and put them in the end, after the Portuguese part [the order of this one is an exception]. I don't believe anyone will become more interested in reading my blog because of that, but maybe this will allow me to refer some friends to here if I think I wrote something they'd be interested in. Don't expect the English version, however, to be as "high" in grammar (with "noble" verb conjugations and syntax constructions) as the Portuguese one: only now I've been trying to "introduce myself" to English literature ><

Contextual motivation...


At some point in the relativelly near past I talked to some friends about the fact that I don't like IDEs to do my job: I often can't configure them as much as I would like (or at least take a lot of time to find out how) and I simply don't trust them to automatically build a "project" to me. This is an opinion I've been "developing" since the times when I tried (and failed miserably) to use Eclipse: it had so many options and was so polluted with so many buttons that I never found what I wanted to do. Going in the "opposite direction", I ended up using Vim, which is now definitely my preferred text editor.

But with Vim I need to compile things "by hand", either by creating a Makefile or by typing the command line. I'll try to describe more os less the [very simple] steps one should take to compile a program in C using GCC.

Solely compiling

Let's suppose you have a file called main.c which has the code of your program. For simplicity, let's assume this is the only file your program has. The program below is a fancy way to print "Hello World!" that a professor of my University posted in Facebook some days ago:


Now imagine that you want to compile this program. There is a problem with the word compiling: it is overloaded with two meanings. The first and most obvious one is something like "create a program out of this code". To create such a program, you need to do two things: compiling (here is the second meaning) and linking. Here, I'll try to use compiling and linking when referring to the first meaning, to avoid the ambiguity.

But what is compiling then? (i.e., in the second meaning)

In this context, to compile a code is to transform the code into a binary object file. This file has all your program functions, but they are separate, i.e., "independent". The linking step "connects" (links?) the function calls and generates an executable (or a library, if that's what you want).

To compile a program, write in your shell
$ gcc -c main.c
An object file named main.o will be output. You can do this to any .c file, but you normally don't do this to .h files. This is because the .h files are actually copied into the .c files by the preprocessor before the compilation is done (that's what those "#include" lines in program are supposed to do). The compiler, therefore, doesn't even know about the existence of .h files.

Another thing that the compiler doesn't care about is/are function calls. As I said, each function is compiled separately and function calls are only "referenced". It needs, however, to see a function declaration (i.e., only the function header -- the "prototype" of the function), so that it knows if the types passed in the function call are right. That's why, if two functions reference each other, you need to write the prototype of one of them at the top. For example:


You should not care about what the functions do, but at least note that you will get a compilation error if you don't write the function prototype of function2 before calling it.


Now imagine that your main.c actually includes a file called helloworld.h that has a function declaration in it, and imagine that this function is defined in helloworld.c. Let's rewrite our code to see the three files:


Remember that, because helloworld.h is actually copied into main.c (because of the #include "helloworld.h" line inside the file), the compiler sees the function declaration (i.e., the header, aka the prototype) of helloWorld(). That is all the compiler needs to know to create the object file main.o.


Linking

But creating the main.o file is not creating the executable binary. You still need to link your code. Before doing that, you'll need to create one .o file for each .c file you have. In our case, we want the following calls:
$ gcc -c main.c
$ gcc -c helloworld.c
Linking is very simple: just take all the .o files and call gcc on it. Additionally, you can specify the -o option, to select the name of your executable. If you don't, the default executable file name will be a.out.
$ gcc main.o helloworld.o
$ gcc main.o helloworld.o -o helloworld
There is one problem though: if you try the line above, you will get some linker errors. The reason is that you need to specify a -l option. This is something you have to do sometimes when you are using some specific library. In our case, since we are using the math library, we need -lm, but the letters after -l can vary: sometimes you need -lX11, sometimes you need -lpthread, ...

The final command line is:
$ gcc main.o helloworld.o -lm -o helloworld

 

Compiling and linking

Ok, but it is true that, if you only have one file of code, you can simply do
$ gcc main.c -o main
I gave more details because programs very rarely have only one code file. Because typing is often very tiresome (and error prone), you are probably going to want to create a Makefile. Maybe I'll do a post on it in the future =)

R$

--

Ressalva (Disclaimer?)

Podeis ter notado que essa publicação está em inglês (o que não é a norma por aqui xP -- se quiserdes ler a versão em português, apenas olhai abaixo). A partir de agora, pretendo sempre escrever uma versão em inglês das minhas postagens e pô-las no fim, depois da parte em português [essa aqui é uma exceção quanto à ordem]. Não acredito que ninguém tornar-se-á mais interessado em ler meu blog por causa disso, mas talvez isso me permita referir o blog a alguns amigos se eu pensar que escrevi algo em que eles estariam interessados. Não espereis que a versão inglesa, porém, seja tão "alta" em gramática (com "nobres" conjugações verbais e construções sintáticas) quanto a em português: somente agora tenho começado a "me introduzir" à literatura inglêsa ><


Motivação Contextual...

Em algum momento no passado relativamente próximo eu conversei com alguns amigos sobre o fato de eu não gostar de que IDEs façam meu trabalho: eu freqüentemente não consigo configurá-las tanto quanto eu gostaria (ou pelo menos tomo um monte de tempo para descobrir como fazê-lo) e simplesmente não confio nelas para automaticamente construir (build?) um "projeto" para mim. Essa é uma opinião que venho desenvolvendo desde os tempos quando eu tentei (e falhei miseravelmente) usar o Eclipse: ele tinha tantas opções e era tão poluído com muitos botões que eu nunca encontrava o que eu queria fazer. Tendo ido na "direção oposta", eu acabei usando o Vim, que é definitivamente meu editor de texto preferido.

Mas com o Vim eu preciso compilar coisas "à mão", ou através da criação de um Makefile ou através da linha de comando. Eu tentarei descrever mais ou menos os passos [bem simples] que se precisa tomar para compilar um programa em C usando o GCC.

Apenas Compilando

Suponhamos que tenhais um arquivo chamado main.c que tem o código de vosso programa. Para simplificar, assumamos que esse é o único arquivo que vosso programa tem. O programa abaixo é uma forma camanguenta [minha família usa essa palavra pra indicar que a pessoa "manja dos paranauês"] de imprimir "Hello World!" na tela, que um professor da minha Universidade postou no Facebook alguns dias atrás:



Agora imaginai que quereis compilar esse programa. Tem um problema com a palavra compilar: ela é sobrecarregada com dois significados. O primeiro e mais óbvio é algo como "criar um programa a partir desse código". Para criar tal programa, precisais fazer duas coisas: compilar (aqui está o segundo significado) e linkar. Aqui, tentarei usar compilar e linkar para me referir ao primeiro significado, para evitar a ambiguidade.

Mas o que é compilar então? (i.e., no segundo significado)

Nesse contexto, compilar um código é transformar o código num arquivo binário "objeto". Esse arquivo tem todas as funções do vosso programa, mas elas estão separadas, i.e., "independentes". O passo de linkagem "conecta" (linka?) as chamadas de função e gera um executável (ou uma biblioteca, se é isso que quereis).

Para compilar um programa, escrevei em vossa linha de comando
$ gcc -c main.c
Um arquivo objeto chamado main.o será criado. Pode-se fazer isso com qualquer arquivo .c, mas normalmente não querereis fazê-lo com arquivo .h. Isso porque os arquivos .h são na verdade copiados pra dentro dos .c pelo pré-processador antes da compilação ocorrer (é pra isso que aquelas linhas com "#include" no programa servem). O compilador, portanto, nem mesmo sabe sobre a existência dos arquivos .h.

Uma outra coisa com que o compilador não se importa são as chamadas de função. Como eu disse, cada função é compilada separadamente e chamadas de função são apenas "referenciadas". Ele precisa, porém, ver as declarações de função (i.e., apenas o cabeçalho da função -- o "protótipo" da função), para saber se os tipos das variáveis passadas como parâmetro na chamada de função estão corretos. É por isso que, se duas funções se referenciam uma à outra, precisais escrever o protótipo de uma delas antes da declaração das duas. Por exemplo:



Não quero que vos importeis com o que as funções fazem, mas ao menos que noteis que teríeis um erro de compilação se não escrevêsseis o protótipo da function2 antes de chamá-la.

Agora imaginai que o vosso main.c na verdade "includa" um arquivo chamado helloworld.h que tem uma declaração de função dentro, e imaginai que essa função é definida em helloworld.c. Reescrevamos nosso código para ver os três arquivos:



Lembrai que, porque helloworld.h é na verdade copiado para dentro do main.c (por causa da linha #include "helloworld.h" dentro do arquivo), o compilador vê a declaração de função (i.e., o cabeçalho, também conhecido como protótipo) de helloworld(). Isso é tudo que o compilador precisa pra gerar o arquivo objeto main.o.


Linkando (ligando?)

Mas criar o arquivo main.o não é criar o binário executável. Ainda precisais linkar vosso código. Antes de fazê-lo, precisareis criar um arquivo .o para cada arquivo .c que tendes. No nosso caso, queremos as seguintes chamadas:
$ gcc -c main.c
$ gcc -c helloworld.c
Linkar é muito simples: apenas pegai todos os arquivos .o e chamai gcc neles. Adicionalmente, podeis especificar a opção -o, para selecionar o nome de vosso executável. Se não o fizerdes, o nome padrão do arquivo executável será a.out.

$ gcc main.o helloworld.o
$ gcc main.o helloworld.o -o helloworld
Há, porém, um problema: se tentardes as linhas acima, vereis alguns erros de linkagem. O motivo é que precisais especificar uma opção -l. Isso é algo que se precisa fazer às vezes quando se está usando bibliotecas específicas. No nosso caso, já que estamos usando a biblioteca math, precisamos de -lm, mas as letras depois de -l podem variar: às vezes precisareis de -lX11, às vezes precisareis de -lpthread, ...

A linha de comando final é:
$ gcc main.o helloworld.o -lm -o helloworld

Compilando e Linkando

Ok, mas é verdade que, se tendes somente um arquivo de código, podeis simplesmente escrever
$ gcc main.c -o main
Dei mais detalhes porque programas têm só um arquivo de código somente raramente. Já que escrever essas coisas na linha de comando é bastante cansativo (e suscetível a erros), provavelmente querereis criar um Makefile. Talvez eu faça uma postagem sobre isso no futuro =)

R$

7 de nov. de 2014

Novos Prefixos

Bom... como já sabeis pela minha última postagem, estou na Alemanha. O alemão tem essa característica curiosa comum nas línguas indo-européias de agrupar nomes (gerar o que eles chamam de "Komposita") pra gerar nomes maiores, com significados mais específicos/restritos.

Tem uma postagem de um certo blog que eu não me canso de linkar que explica a coisa toda de forma simples =)

Bom... o que já ando notando há mais ou menos 1 ano é sobre como o nosso português sempre exige raízes antigas quando o objetivo é criar "composições". Em vez de dizermos aguaplanar, temos de usar a palavra latina aqua, ou em vez de dizermos criançagosto temos de usar as raízes gregas pedo e filos, como se aguaplanar ou criançagosto soassem feios, desaculturados. E é justamente essa uma das grandes diferenças que eu vejo entre o português e o alemão: os alemães não têm essa "frescura"... e a criação de novos compostos é feita naturalmente através da simples concatenação de raízes (e a introdução de alguns "s" de vez em quando -- como em Immatrikulationsbescheinigung).

Pois bem... é necessário que eu faça uma ressalva. Uma coisa que o latim não tinha era a capacidade (que as línguas germânicas têm) de agregar nomes que de alguma forma contribuem para o significado final da composição (eu gosto de pensar que eles na verdade restringem o nome "principal" da composição). Exemplos do inglês: school teacher, whool carpet, ou mesmo [adaptado de algo que eu disse hoje] forest reservation hotel room smell. Em latim, todos esses nomes teriam de vir ou com uma terminação indicando que eles são adjetivos (como, em português, dizemos ano escolar), ou então declinados no genitivo (indicando posse, como em Philosophae Naturalis Principia Mathematica). Essa desabilidade "descendeu" para o português =/

É verdade, porém, que o latim apresentava uma relativamente alta produtividade na inclusão de raízes como prefixos em suas palavras. Exemplos como satisfazer (satis = bastante, em latim), santificar (derivado de sanctus + facere, i.e., santo + fazer), identificar (derivado de idem + facere, e o "ti" entrou na idade média) ou surpreender (super + prehendere) são o que eu mais passei a ver desde comecei a brincar com latim.

Com o interesse por latim e a minha volta pra Alemanha, passei a notar como os alemães não só abusam da capacidade mencionada dois parágrafos atrás, como também abusam de uma capacidade [a mencionada um parágrafo atrás] que eu poderia adotar no meu português -- que já de convencional não tem nada. Assim, "criei" [um deles já existia e é usado direto... eu só estou expandindo o seu uso xP] e tenho tentado usar consistentemente três prefixos [e a idéia é aumentar esse repertório ao longo do futuro próximo]:


cruxi: derivado do cross do inglês. Funciona para traduzir expressões como cross-linguistic, cross-cultural, ...

tele: significa longe, como em tele + visão, tele + grama, telé + grafo, etc. A idéia é expandir o seu uso para tele + perceber (perceber de longe), a + tele + caminhar (caminhar para longe), tele + conversar (conversar de longe), ...

urgeo: é uma tentativa (forte!) de tradução do prefixo not do alemão (que significa de emergência). Para eles, notruf é o telefone (ruf) de emergência (not), notaustieg é a descida (de um carro, ou um elevador) de emergência, notausgang é a saída de emergência, etc. A idéia é passar a chamar as coisas de urgeosaída, urgeoescada, urgeosituação, urgeotelefone. É verdade que desse último eu chego a estar um pouco orgulhoso da minha "criação".

Apesar de tudo, a regra de usar raízes "antigas" eu não consegui quebrar. Ainda me soaria meio esquisito dizer emergenciotelefone, ou cruzlingüístico... mas sei lá... como língua é meio que questão de moda, mei-que depende de quem quiser usar.

Aliás... é possível que minha próxima postagem tenha uma versão em inglês... conheci gente aqui que diz que se prestaria a usar o Google Translator pra ler (na real, talvez "dar uma olhada" fosse mais preciso, acho) meu blog, e, na descrença de que o Translator conseguirá traduzir minha escrita esdrúxula, achei melhor traduzir eu mesmo v_v

R$

13 de out. de 2014

Mudança

Os que conviveis comigo deveis saber que os últimos dois meses foram de grandes mudanças. De agosto pra cá, eu deixei muitos círculos de convivência (eu sempre acho essas coisas meio lamentais, porque mais ou menos significam que me tornarei um "coadjuvante" para a vida das pessoas com quem não mais conviverei; mas é a vida, e há que se aprender a conviver com essas coisas [e sem essas pessoas xP]) para pôr em prática algo sobre que eu já pensava (e que já pretendia) desde há muito tempo: começar um Master na Alemanha.

Tendo já migrado (e agora estando eu em fase de burocracias e o diabo), eu certamente não estou nem de longe arrependido/triste/frustrado/etc. Pelo contrário, não poderia estar mais satisfeito: finalmente voltei a ser estudante, como (tenho descoberto) nasci pra ser.

Aqui, espero poder exercitar meu alemão (que é um lixo =/ ) e aprender outras línguas (afinal, esse é meu grande interesse!). Apesar disso, é verdade que ainda não consegui conviver mais com pessoas de outros lugares, e por não terem ainda começado minhas aulas tenho passado a maior parte do tempo com outros brasileiros.

Mas creio que isso deve mudar logo \o/ E, certamente, se começar a conviver com colegas nativos de línguas muito "diferentes" (pra ser político-corretamente eufêmico), certamente começarei a fazer perguntas xP

Enfim... essa é uma postagem só pra deixar marcado pra quem quer que me leia e não conviva comigo (eu na real duvido que o vosso número seja tão alto a ponto de, quando muito, eu ter de usar o plural u_u) que devo passar os próximos dois anos (pelo menos) neste outro lado (de cá) do continente =)

R$

Sobre a Racistinha do Grêmio, e como minha opinião mudou

Bom... sim... faz um tempo que não apareço por aqui. Da última vez, comentei sobre a guria que foi racista ao gritar "macaco" para um jogador de futebol (em meio a uma multidão que não só desumanizava o alvo de seus xingamentos como também lhe [a ela] dava uma sensação de anonimato e de diminuição da responsabilidade para com seus atos).

A verdade é que eu mudei de opinião. Adiante mais algumas aulas do curso de psicologia social que fazia (e que finalmente terminou), foi disponibilizado o video de um Hangout com o professor Zimbardo (um professor que ficou peculiarmente famoso por ter realizado [e tido de parar na metade -- porque já tava virando putaria] um experimento polêmico conhecido como "a Prisão de Stanford") em que, entre outras coisas, ele discutia justamente sobre a responsabilidade das pessoas sobre os seus atos e como o peso da situação deveria ser levado em conta nesses casos. Antes de dizer o que ele disse, quero comentar sobre outra coisa que li noutro lugar...

Alguns dias atrás um amigo postou no Facebook esse texto dizendo que livre arbítrio possivelmente nem exista, mas que era bom continuarmos acreditando nele. O texto comentava sobre como as pessoas, quando levadas a acreditar que o livre arbítrio não existe, tendiam a tomar decisões / ter atitudes anti-sociais/anti-éticas (em um dos experimentos, os experimentandos "roubavam" mais após ler umas mensagens que davam a entender que o universo era determinístico e que as escolhas deles não eram na verdade escolhas, mas uma função das suas predisposições, da sua genética, ...). No final das contas, ele se pergunta o quão bom/ético/certo/conveniente é que se pesquise sobre o assunto, se afinal isso parece causar mais mal do que bem pra sociedade (é melhor lerdes o texto -- eu li já há alguns dias e posso estar viajando aqui u.u).

Voltando a o que disse o professor Zimbardo... ele foi muito sensato (minha opinião) ao dizer que, apesar da situação ser certamente o que leva as pessoas a cometerem um conjunto enorme de decisões erradas (desde a não-devolução de um troco dado a mais até o não-questionamento da autoridade nazista [aliás, um dos motivadores para um outro experimento: o do gerador de choques do Stanley Milgram]), ela não justifica esse comportamento, e quem se comporta mal é sim responsável pelos seus erros. Como diria uma colega minha: "explica, mas não justifica" (i.e., agiu mal, tem que pagar).

Esse comentário pode parecer muitíssimo razoável até que alguém levante a questão: e isso se aplica ao pobre, drogado, marginal, assaltante, assassino, estuprador... dito "vítima da sociedade" e "do sistema"? Eu digo que sim!

A minha opinião, assim, mudou de "devemos tratar a racistinha de modo mais brando" pra "a racistinha tem de pagar pelos seus crimes, bem como todo e qualquer indivíduo que cometa crimes". Mais do que isso, eu passei a achar contraditório (na minha opinião, uma contradição forte!) quem quer que "defenda bandido" && "vilanize a racista".

Mas aí eu agora me pergunto: seria imoral eu dizer isso tudo e usar torrent? Ou baixar pirataria da internet? Ou cracker jogo? Seria irônico eu dizer isso tudo e comprar açúcar (canavial com trabalho escravo é o que mais tem no Brasil -- se encontra fácil fácil notícia disso no Google)? Pior que eu acho que sim..............

R$

29 de ago. de 2014

Sobre a racistinha da torcida do Grêmio

[Essa postagem é fruto de uma conversa com um amigo sobre o racismo da torcida do Grêmio em seu último jogo]

Pra começar, o video...



E, bem, esse link pra caso não saibais do que ocorreu no último jogo do Grêmio. Agora, meus pensamentos sobre o assunto...

Já há 6 semanas eu venho fazendo um curso de Psicologia Social pelo Coursera. Através do curso, eu desenvolvi uma imagem da área da Psicologia bem diferente da imagem preconceituosa que eu tinha até então. O curso me tem ensinado muito sobre como os seres humanos se comportam e frequentemente se baseia em experimentos pra mostrar que algo seja verdade ou não (o que é legal, porque, diferente daqueles testes psicotécnicos do DETRAN, aparentam ter ciência por trás).

Bom... por conta de alguns conceitos que eu aprendi nesse curso, eu tenho motivos pra achar que a racistinha não deva ser punida com o mesmo rigor que racistas "comuns". Nos próximos parágrafos explico melhor esses motivos.

Para começar: um dos assuntos sobre os quais eu aprendi ao longo do curso foi o que eles chamavam de deindividualization (desindividualização, em tradução livre). A idéia é que, quando em grupos, tendemos a diminuir as ponderações sobre o certo e o errado e só seguir a multidão.

Se a multidão estiver fazendo algo ruim, a gente tende a, sem pensar, fazer algo ruim; se a multidão estiver fazendo algo bom, a gente tende a, sem pensar, fazer algo bom. Isso é fácil de exemplificar com o "espírito de natal" no Natal (quando todo mundo fica de bom humor e tal) ou com os quebra-quebras das manifestações na "Revolta da Batata".

No caso da guria racista, ela claramente estava seguindo a multidão. Assim, é claro que de alguma forma ela tem de ser punida; mas eu tenho minhas dúvidas sobre se ela deveria ser punida com o mesmo rigor de casos em que uma pessoa sozinha teve uma atitude racista.


Tem ainda uma outra coisa que eu acho que "diminui" a responsabilidade dela sobre o ponto. No curso, a gente leu sobre o que eles chamavam de descriptive norm (norma descritiva, em tradução livre) e injunctive norm (norma injuntiva, em tradução livre).

A norma descritiva é a norma que se observa (mesmo que ela não seja socialmente aceita). Por exemplo, se uma rua está suja porque todos jogam lixo nela, então a norma descritiva é que se joga lixo na rua, mesmo que não se seja socialmente aceito fazê-lo. A norma injuntiva, por sua vez, é o que é "socialmente aceito". Espera-se que ninguém jogue lixo na rua... então essa é a norma "injuntiva".

As pessoas tendem a se adaptar a ambas as normas, e normalmente é melhor que ambas as normas concordem (sabe quando se vai numa cidade turística e é tudo limpinho e tu mesmo te dás ao trabalho de não jogar lixo no chão só pra preservares o lugar limpinho; mesmo quando talvez tu jogasses no chão se estivesses no meio de uma cidade suja?)

No caso do racismo, me parece que a norma injuntiva é que ninguém seja racista; mas claramente essa não é a norma descritiva [pelo menos] da torcida do grêmio. No caso da guria, eu suporia que o grupo (a torcida) "pendeu" ao racismo e, bom, isso virou a norma, e agora era perfeitamente natural gritar coisas racistas (naquele meio).Possivel -[e provavel]-mente isso não refletisse nem de longe a atitude dela.

Mas, então, se não é pra puni-la, então o que fazer? Bom... esses são só os meus pensamentos, e os motivos pelos quais eu ficaria com o pé atrás de puni-la. Talvez puni-la resolva bem pouco, e melhor seria dar um jeito de fazer as pessoas perceberem (de alguma forma) que racismo não seja a norma (nem descritiva nem injuntiva).

Mas aí "como dar esse jeito?" é uma pergunta que eu não sei responder =/

R$