(esqueceu?)

Stoa :: Ricardo Henrique Gracini Guiraldelli :: Blog

Janeiro 04, 2010

default user icon

Since I don't update this weblog a while, I decided to create a short post recommending some links:

And, of course, our lab website: http://www.pcs.usp.br/~lta/

I hope you enjoy those readings.

Palavras-chave: Computer Science, Links, Readings

Esta mensagem está sob a licença CreativeCommons Atribuição.

Postado por Ricardo Henrique Gracini Guiraldelli | 0 comentário

Setembro 22, 2009

default user icon

It's been a kind of novelty on Polytechnic School, but LTA (Languagens and Adaptive Technology) lab is promoting some seminars about its MSc's and PhD's students researches subjects.

Up to now, discussions over Kolmogorov Complexity, Solomonoff's techniques and Church-Turing thesis (among others) have been taking place. But next friday, 2009/09/25, I'll be the conferee, talking about Genetics & (Theory of) Computation.

No, I won't reveal the secret of life or a brand new theory that will lead me to straight to Nobel Prize: I'll only show some usages of theory of computation on genetics and the pathway my research is walking on. Event this, I'm sure it will begin a great discussion!

So, if you can, show up at the presentation and participate!

Oh, I was almost forgetting: the seminars happen every last friday of each month! Show up!

Esta mensagem está sob a licença CreativeCommons Atribuição.

Postado por Ricardo Henrique Gracini Guiraldelli | 3 comentários

Maio 07, 2009

default user icon

Some people have been asking me about graduate courses, specially masters course. So I'm writing this post because I want to be as broad as it can (the main reason why I'm composing it in English).

It's important to note that the subject of this post is how to get into a graduate course at University of São Paulo, not my personal impressions about it. Once it is stated, let's proceed.

Joining USP's graduate course is slightly different among each college, but it is based on the same general principles: a research plan, a specific knowledge test, a foreign language proficiency and an interview.

(Note: it has a high probability that I mix some specific aspects from Polytechnic School process with the general process.)

Research Plan

When filling the bureaucracy papers to submit your name for the graduate process, you'll be asked for a preliminary research plan. You probably know what is it, but I had no idea. So, I'll explain.

Research plan is a document describing your graduate research in a depth way. It may contain your research topic, schedule, references, planning, funding and whatever may interest an evaluator. Summarizing, it's the document that will convince the staff you're ready for being a researcher.

However, don't mind if you're not sure at all about all the aspects of your research. As I've listened from a professor, your research plan may change during your graduate time.

(As a reference, I recommend the TAUCHI Essential features of a research plan presentation.)

Specific Knowledge Test

Once you have your research plan made and all the documents filled, now it's time to get ready for the specific knowledge test. The test may change among the courses and institutes, but they have one thing in common (I think): they're really specific. If you know GMAT, it's good to know it is extremely different: for computer engineering, the one I've done, the content was totally agreed with my undergraduate course, with questions of compilers, computer architecture, formal languages and automata theory,  artificial intelligence, security, safety and others. I don't think a person without deep computer knowledge is skilled to pass this test. So, get prepared for this decisive phase! And an important hint: it's done only in Portuguese!

Proficiency Test

I don't have much to talk about it. It's a default English test to measure the student's proficiency at the language. Some colleges apply by themselves the test, others require you to go to an indicated English school. IELTS or TOEFL use to be accept (but you shall consult your applying course office).

If you're an English native speaker, I believe that you must do a Portuguese proficiency test. By now, I can't help you considering my lack of information about the subject.

By the way, if you can understand this post (congratulations! I know I don't have the best writing English), the test will be piece of cake to you.

The Interview

I never had problem with talking, so interview wasn't a thing to matter to me. At least, up to see some friends dropping out the process at this phase.

The interview is the moment you're face-to-face to a professor and must convince him you really want to research for improving the knowledge of a specific area, not just trying it for resumé improvement. (If you want a resumé update only, I recommend you a lato sensu program, not a strictu sensu one.)

At the interview, you'll be asked about your research plan, the reasons you want that research topic, if you already have combed for references, the importance of your research project and others exhaustive questions about your choice: get ready for this!

Of course, if you want it by heart, the interviewer will see it and you'll be great.

From a personal point of view, it's not a tough part of the process but, for the both sides, a decisive one: it's when you (really) start thinking about your academic vein. Always keep in mind that a graduate course is founded on academic basis: if you want something much "professional", with market focus, maybe it's not the best choice.

Finishing The Advices

Finally, it is the end of the post. Certainly, this is not the final reference about graduate courses at University of São Paulo, but an (short) introduction.

Now, it's time to think and "get in touch" with graduate students and professors (to get others hints!).

Let's work!

References

  1. http://www.usp.br/internacional/home.php?id_cont=4&id
  2. http://en.wikipedia.org/wiki/Academic_degree#Brazil
  3. http://www.cs.uta.fi/ucit/About%20research%20plan.pdf

Palavras-chave: master of science, master's degree, msc, postgraduate, usp

Esta mensagem está sob a licença CreativeCommons Atribuição.

Postado por Ricardo Henrique Gracini Guiraldelli | 2 usuários votaram. 2 votos | 3 comentários

Janeiro 21, 2009

default user icon

Nos meus primeiros anos de graduação, perguntava-me sobre a utilidade dos autômatos. Hoje, contudo, reconheço a utilidade dessa “ferramenta matemática”, usando-a freqüentemente. Um desses usos me levou a conclusão desse "post".

Estudando um código-fonte, deparei-me com um método de classe gigantesco, contudo peculiar: além de ser o método mais importante da classe, era “organizado” por um gigantesco “switch/case”.

Como tinha que entendê-la integralmente, logo achei uma maneira simples, rápida e didática de “traduzir” a semântica do código: autômato. E enquanto eu desenhava o meu autômato, vislumbrei-me com minha “mais nova descoberta”:  “switch/case” é a foma textual de representação dos Autômatos Determinísticos!

Sei que soa a óbvio tal conclusão, mas nunca havia visto essa estrutura dessa forma. (E não apenas essa, mas “if/{else if, elif, elsif}” também.) E, dado esse lapso, logo pensei em todas as propriedades matemáticas que poderia aplicar no “corpo” e como poderia usá-las para otimizar o próprio código. Enfim a cabeça voou longe e o conceito, de uma maneira diferente, se estabeleceu.


Espero que esse “desabafo” sirva de estímulo para estudarem com mais atenção os Fundamentos da Computação e aplicarem o conhecimento acadêmico no dia-a-dia para facilitar as atividades.

E desculpem-me pela superficialidade (também conhecida como “pressa”) na redação do post: é o que ocorre dentro de um trem, às 18hrs, redigindo num Palm.

Postado por Ricardo Henrique Gracini Guiraldelli | 3 comentários

Novembro 07, 2008

default user icon

O Centro de Engenharia Elétrica (CEE) da Poli-USP está organizando, essa semana, a tradicional SEMOP (Semanas das Opções) para os "bixos das ênfases" entenderem um pouco o que é cada uma das cinco ênfases da Grande Área Elétrica: Automação e Controle, Computação e Sistemas Digitais (Cooperativo e Semestral), Energia e Automação, Sistemas Eletrônicos e Telecomunicações.

Hoje, 07/Nov/2008, será o último dia de apresentações onde a ênfase Computação e Sistemas Digitais será abordada. Haverá professores do Departamento, alunos já formados e um aluno formando - no caso, eu!

As apresentações das ênfases são importantes para todos entenderem o que cada uma faz - porque muitas vezes as divisões são muito tênues - e trazem visões diferentes (aluno, profissional e professores) para o mesmo contexto.

Não posso dizer pelos outros participantes, mas garanto que será muito interessante. Farei uma apresentação - sempre no meu bom e velho estilo próprio - suportada com apresentações e documentos que, logo, disponibilizarei aqui no Stoa, podendo ajudar não só os meus futuros "bixos de ênfase", mas outras pessoas que queiram entender melhor o mundo da Engenharia da/de Computação.

A apresentação será das 11hrs até a hora que pararmos de falar e todos estão convidados!

Update #1

A apresentação foi muito divertida: os"bixos de ênfases" (que eram muitos!) pareciam interessados no Curso. Fiquei feliz com o interesse no Cooperativo, também.

Espero que todo aquele pessoal tenha entendido o que faz um Engenheiro de Computação - até porque a apresentação da Profa. Selma e Prof. Jão Baptista, além da minha, reforçaram muito isso!

E, como prometido, seguem as referências (em .ZIP) que eu prometi durante a apresentação.

P.S.: Estou distribuindo os arquivos sob a licença Creative Commons License.

Postado por Ricardo Henrique Gracini Guiraldelli | 4 comentários

Outubro 15, 2008

default user icon
Estou fazendo, atualmente, a disciplina de Linguagens e Compiladores com o Prof. Ricardo Rocha, estudando, basicamente, linguagens de paradigma imperativo (como C/C++/C#, Pascal, Java, Algol, etc...).

Durante as diversas aulas, discutimos as nuances de cada linguagem - como exemplos para as diferenças que vão surgindo -, como o fato da linguagem C ter escopo "anônimo" e Pascal escopo nomeado.

Na última aula, em particular, comecei a pensar muito nas linguagens quando fiz uma pergunta sobre Gramática de Atributos e o professor me explicou com um exemplo de Ada, especificamente sua "tipagem forte" (ou seja, não é possível fazer uma atribuição do tipo float ⟵ integer). Ao questionarmos tal razão, o mesmo explicou que essa conversão de valores (para um inteiro grande) pode ter dígitos perdidos, devido a estrutura dos pontos flutuantes (mantissa e expoente). Como integer e float tem o mesmo tamanho em memória, colocar um inteiro grande em um ponto flutuante pode levar a perdas, o que é inadimissível a algumas aplicações (e.g., aeroespacial e militares).

Essa explicação me levou diretamente a um post passado (ver Nichos de Linguagens de Programação) onde eu "taxinomizava" as linguagens de programação em nichos. E Ada foi um exemplo ideal, pois embora achamos que seja (para alunos de graduação, pelo menos) uma "linguagem morta", na verdade é uma "linguagem especializada" para um nicho de aplicações. Raro será uma aplicação do "dia-a-dia" feita em Ada, mas não é raro encontrá-la em aplicações críticas.

O mesmo pode ser dito de (Common) Lisp, de paradigma funcional: conheço poucos aplicativos (do dia-a-dia) realmente desenvolvidos em Lisp (o Reddit, inicialmente, era em Lisp!), mas no mundo da Inteligência Artificial, por exemplo, é muito usado! Assim como Erlang (foco em paralelismo) ou Cobol (sistemas legados).

Então as linguagens de programação não "morrem", mas "especializam-se"?

Acho um pouco precipitado afirmar isso: é preciso fazer um estudo mais aprofundado. Mas muitas das "linguagens mortas" (como eu julgava) são, na verdade, especialistas. E isso inclui até mesmo o Fortran (comum para atividades numéricas).

Ah, mas Perl vai "morrer" aos pés do Python!

Embora muito semelhantes, não acredito que isso vá ocorrer: Perl é (muito) superior a Python para tratamentos de linguagem natural e expressões regulares, o que acabou lhe "reservando" um nicho (que Python não parece querer "invadir"). E o mesmo pode ser dito de Ruby, que com o moda Ruby On Rails parece ter reservado o nicho de "fast web-apps".



Enfim, achei interessante o fato de que parece que muitas linguagens não "morrem", mas tendem a "dominar um nicho específico". Também pode ser que eu esteja totalmente errado e esteja falando uma bobagem, apenas. (Embora não veja razões do porquê seria uma bobagem.)

E para quem tem interesse de saber o quão popular uma linguagem de programação é, o índice TIOBE é o gold standard dessa área.

Palavras-chave: Linguagens de Programação

Postado por Ricardo Henrique Gracini Guiraldelli | 3 usuários votaram. 3 votos | 2 comentários

default user icon

ConnectUSP (Nokia)

Com o lançamento da Nokia Store SP, as pessoas podem colaborar para que a USP tenha Wi-Fi gratuito pelo campus Capital todo!

A USPnet é parte de um serviço de Wi-Fi "global" no campus, mas e os visitantes? Eles não tem acesso Wi-Fi e, por isso, achei a iniciativa muito interessante. (Além, claro, de diminuir os custos de implantação do sistema na Universidade.)

Assim, decidi colaborar com a campanha: é uma melhoria para todos, no meu ponto-de-vista!

 

Update #1

Eu não estou sendo pago pela Nokia para fazer a propaganda: estou interessado, sim, é no Wi-Fi na USP toda, assim como espero que as pessoas também estejam e colaborem! Rindo

Update #2

Quer coloborar de verdade? Acesse http://www.nokiastoresp.com.br/site/connectusp/vote e vote pelo ConnectUSP!

Palavras-chave: Campanha, USP, Wi-Fi

Postado por Ricardo Henrique Gracini Guiraldelli | 1 usuário votou. 1 voto | 26 comentários

Outubro 13, 2008

default user icon

Hoje recebi uma ligação importante durante a aula e resolvi atendê-la, mesmo não sabendo de quem era. Ainda bem que o fiz. Mas geralmente recebo ligações em aula e "deixo passar"...

Pensando nesse problema, pensei: "Por que ligações telefônicas não são como e-mails?"

Como assim?!? É simples...

Se eu recebo um e-mail do Lucas De Marchi, mesmo que ele tenha trocado de endereço, porque ele configura o seu cliente de e-mail para escrever "Lucas De Marchi" no nome do remetente. Ou seja, ele associa seu endereço ao su nome. E por que isso não ocorre em ligações telefônicas?

Imagine que você receba uma ligação telefônica e, no seu celular, ao invés de aparecer +55113091WXYZ apareça Suely Vilela - Reitoria USP (sendo que você nem a tem na sua lista de contatos!): não seria melhor?

Assim, ao invés de deixar o processamento da informação (número -> nome) no celular (ou telefone), esse viria da central telefônica ou do próprio remetente.

Ou para identificar uma ligação provinda de orelhão, ou "saber" quem está "passando um trote".

Claro que tem o problema de privacidade, mas o fato de existir a opção de enviar o nome da sua empresa ao invés do número já seria muito interessante.

E certamente faria o pessoal do COOP sair menos da aula para atender telefonemas. Rindo

Alguém sabe se sistema semelhante já existe?

Palavras-chave: Idéias, Telecomunicações

Este post é Domínio Público.

Postado por Ricardo Henrique Gracini Guiraldelli | 1 usuário votou. 1 voto | 4 comentários

Setembro 15, 2008

default user icon

Folheando o jornal Valor do dia 04/Set/2008, fiquei impressionado com a notícia (de meia página) de que a Microsoft venderá licenças Windows (e mais alguns apetrechos) por US$7,00!

Eu, como um bom usuário do GNU/Linux, o que pensei na hora? MARAVILHOSO!!!

Não, não estou sendo sarcástico: acho, realmente, uma iniciativa maravilhosa da Microsoft vender licenças Windows a um preço irrisório desses!

O objetivo da Microsoft, com esse programa - batizado de Windows Educação - , é alcançar os estudantes e instituições de ensino do país (sim, um programa especial para o Brasil!), dado o fracasso do projeto Microsoft Student Innovation Suite no Brasil devido ao cancelamento dos ultra low cost PC's (ULPCs) educacionais pelo Governo Brasileiro. Também, claro, aumentar participação nessa fatia de mercado que, hoje, é dominado por aplicações FOSS.

A atitude da Microsoft é realmente invejável! Sim, como uma corporação do mundo capitalista a mesma visa lucro e ganho na parcela do seu market share, mas essa atitude é classificável como ganha-ganha (vide "Os 7 hábitos das pessoas altamente eficazes", de Stephen Covey). E, para mim, é muito mais nobre do que a postura do Maddog, pedindo boicotes a Universidades que usam produtos comerciais.

Acho que a Microsoft deixou de ser a empresa do mal há muito tempo. Concordo que o CEO (Steve Ballmer) seja "um pouco radical" e tome muitas atitudes de FUD, mas a comunidade FOSS ainda estigmatiza demais a empresa que tirou os computadores das grandes corporações e possibilitou que chegassem a nossa casa! (Ai: comprei uma briga feia, agora! HA! HA! HA!)

Referências

 

Palavras-chave: Economia, Educação, Microsoft, Social

Esta mensagem está sob a licença CreativeCommons Atribuição.

Postado por Ricardo Henrique Gracini Guiraldelli | 14 comentários

Agosto 22, 2008

default user icon

Ontem (21/Ago/2008) foi o segundo e último dia do 18º Workshop Integrativo realizado pela Poli Jr. Minha impressão? Excelente!

Não é por menos que é considerado o maior evento do gênero: quase 50 (grandes) empresas das mais diversas áreas, tudo organizado por um grupo de estudantes da graduação que assistem aula, fazem provas, têm vida social (como todo mundo) e, ainda, participam da empresa júnior e organizam o Workshop.

(Acho que) não conheço ninguém da organização, mas tiro o chapéu para o trabalho que fizeram.

E as empresas, esse ano, muito mais receptivas e informadas que nos anos anteriores: até sabiam (e estavam preparadas para) o que é o curso cooperativo!

Enfim, parabéns a todos que organizaram, participaram e visitaram o evento! Show de bola!

[Update #1]

Links de Referência:

Palavras-chave: Estágios, Eventos

Esta mensagem está sob a licença CreativeCommons Atribuição.

Postado por Ricardo Henrique Gracini Guiraldelli | 0 comentário

Agosto 20, 2008

default user icon

As pessoas gostam de fazer "Hello, World" sempre que começam a brincar com uma linguagem nova. Eu, não! Eu gosto de fazer, sim, um Password Generator que, além de mais útil, ensina-me muito mais!

Nos últimos dias, deu-me uma vontade de brincar com Lisp. Não sei até onde isso vai - e se é que vai! -, mas pelo menos um Password Generator eu já criei!

Segue, abaixo, o mesmo...

 

(let     ((password "")      (number_char 0))     (format t "Entre com o número de caracteres da senha: ")     (setq number_char (read))     (dotimes (i number_char)         (setq password             (concatenate 'string password                 (string (code-char (+ 33 (random 93)))))))     (format t password)     (format t "~%") ) (quit)

[Update #1]

As senhas são geradas com base na tabela ASCII. Como se pode observar, 33 é o código do primeiro caracter imprimível (com exceção do espaço) da tabela, por isso o offset. Já 93 é o número máximo + 1 que o random pode gerar, o que somado com 33 dá 123, ou seja, o último caracter imprimível. Como 123 equivale ao "~" que é usado na função format como caracter de escape, decidi tirá-lo do meu gerador de senhas, por hora, e me divertir com senhas aleatórias sem ele, por hora.

 [Update #2]

Para rodar esse código no GNU/Linux (com Lisp instalado), faça o seguinte:

[user@machine ~] $  lisp -load password_genarator.lisp

Para isso, salve o código acima com o nome de password_generator.lisp.

Caso na sua distribuição não tenha Lisp instalado por padrão, recomendo o CMUCL (tem no repositório do Fedora 9, pelo menos).

Esta mensagem está sob a licença CreativeCommons Atribuição.

Postado por Ricardo Henrique Gracini Guiraldelli | 9 comentários

Agosto 13, 2008

default user icon

Após vasculhar informações sobre e fazer a aquisição, iniciei a leitura do livro The Mythical Man-Month, do autor Frederick Brooks Jr.

Estou ainda no início do livro, mas a impressão que o mesmo já me causou - apenas com os dois prefácios e com o primeiro capítulo - é impressionante!

Embora possa ser dito que o livro é sobre Engenharia de Software ou Gerenciamento de Projetos (de Software), acima de tudo o livro é sobre Experiência de Mercado (Computacional).

Ainda tenho pouco a dizer sobre o livro, mas acho relevante copiar o trecho (abaixo) do primeiro capítulo para que todos entendam o "espírito" desse livro:

The Joys of the Craft

Why is programming fun? What delights may its practitioner expect as his reward?

First is the sheer joy of making things. As the child delights in his mud pie, so the adult enjoys building things, especially things of his own design. I think this delight must be an image of God's delight in making things, a delight shown in the distinctness and newness of each leaf and each snowflake.

Second is the pleasure of making things that are useful to other people. Deep within, we want others to use our work and to find it helpful. In this respect the programming system is not essentially different from the child's first clay pencil holder "for Daddy's office."

Third is the fascination of fashioning complex puzzle-like objects of interlocking moving parts and watching them work in subtle cycles, playing out the consequences of principles built in from the beginning. The programmed computer has all the fascination of the pinball machine or the jukebox mechanism, carried to the ultimate.

Fourth is the joy of always learning, which springs from the nonrepeating nature of the task. In one way or another the problem is ever new, and its solver learns something: sometimes practical, sometimes theoretical, and sometimes both.

Finally, there is the delight of working in such a tractable medium. The programmer, like the poet, works only slightly removed from pure thought-stuff. He builds his castles in the air, from air, creating by exertion of the imagination. Few media of creation are so flexible, so easy to polish and rework, so readily capable of realizing grand conceptual structures. (As we shall see later, this very tractability has its own problems.)

Yet the program construct, unlike the poet's words, is real in the sense that it moves and works, producing visible outputs separate from the construct itself. It prints results, draws pictures, produces sounds, moves arms. The magic of myth and legend has come true in our time. One types the correct incantation on a keyboard, and a display screen comes to life, showing things that never were nor could be.

Programming then is fun because it gratifies creative longings built deep within us and delights sensibilities we have in common with all men.

The Woes of the Craft

Not all is delight, however, and knowing the inherent woes makes it easier to bear them when they appear.

First, one must perform perfectly. The computer resembles the magic of legend in this respect, too. If one character, one pause, of the incantation is not strictly in proper form, the magic doesn't work. Human beings are not accustomed to being perfect, and few areas of human activity demand it. Adjusting to the requirement for perfection is, I think, the most difficult part of learning to program.

Next, other people set one's objectives, provide one's resources, and furnish one's information. One rarely controls the circumstances of his work, or even its goal. In management terms, one's authority is not sufficient for his responsibility. It seems that in all fields, however, the jobs where things get done never have formal authority commensurate with responsibility. In practice, actual (as opposed to formal) authority is acquired from the very momentum of accomplishment.

The dependence upon others has a particular case that is especially painful for the system programmer. He depends upon other people's programs. These are often maldesigned, poorly implemented, incompletely delivered (no source code or test cases), and poorly documented. So he must spend hours studying and fixing things that in an ideal world would be complete, available, and usable.

The next woe is that designing grand concepts is fun; finding nitty little bugs is just work. With any creative activity come dreary hours of tedious, painstaking labor, and programming is no exception.

Next, one finds that debugging has a linear convergence, or worse, where one somehow expects a quadratic sort of approach to the end. So testing drags on and on, the last difficult bugs taking more time to find than the first.

The last woe, and sometimes the last straw, is that the product over which one has labored so long appears to be obsolete upon (or before) completion. Already colleagues and competitors are in hot pursuit of new and better ideas. Already the displacement of one's thought-child is not only conceived, but scheduled.

This always seems worse than it really is. The new and better product is generally not available when one completes his own; it is only talked about. It, too, will require months of development. The real tiger is never a match for the paper one, unless actual use is wanted. Then the virtues of reality have a satisfaction all their own.

Of course the technological base on which one builds is always advancing. As soon as one freezes a design, it becomes obsolete in terms of its concepts. But implementation of real products demands phasing and quantizing. The obsolescence of an implementation must be measured against other existing implementations, not against unrealized concepts. The challenge and the mission are to find real solutions to real problems on actual schedules with available resources.

This then is programming, both a tar pit in which many efforts have floundered and a creative activity with joys and woes all its own. For many, the joys far outweigh the woes, and for them the remainder of this book will attempt to lay some boardwalks across the tar.

Espero que o autor, a editora e todo mundo o mais não se importem por eu ter copiado um trecho aqui. Como é sabido de todos, esse trecho é protegido por copyrights, leis internacionais e etc... Mas como é um pequeno trecho (sem fins lucrativos), não há problemas.

Bem, particularmente me identifiquei muito com os joys e woes que o Brooks comenta nesse livro, além de muitas outras coisas. Acho, na verdade, que todos da Computação se identificam com os trechos.

Enfim, está sendo uma leitura muito interessante. Recomendo fortemente.

(Infelizmente não recomendam esse livro no curso de Engenharia de Software na Poli-USP, mas parece que é bibliografia auxiliar no IME-USP. Clever of them!)

Esta mensagem está sob a licença CreativeCommons Atribuição.

Postado por Ricardo Henrique Gracini Guiraldelli | 2 usuários votaram. 2 votos | 4 comentários

Julho 23, 2008

default user icon

Em uma conversa informal com a minha Mãe, grande habilidosa nas descobertas de sites da WWW, ela me apresentou um site chamado Livemocha. Esse site é um repositório de lições online (ou cursos online) de vários idiomas, do nível básico ao avançado. E, para inglês, inclusive, lições/testes para o TOEFL.

 Hoje, contudo, descobri um outro site, o italki, que possibilita procurar por pen pals, ou seja, amigos que estejam aprendendo o seu idioma e que falam (nativamente ou não) o idioma que quer aprender.

Enfim, usar os dois para aprender/complementar um estudo de idiomas é uma oportunidade e tanto. Certamente uma dica que valia um post.

Palavras-chave: Cursos, Ensino a Distância, Ensino Online, Idiomas, Línguas

Esta mensagem está sob a licença CreativeCommons Atribuição.

Postado por Ricardo Henrique Gracini Guiraldelli | 2 usuários votaram. 2 votos | 6 comentários

Junho 17, 2008

default user icon

A revista (eletrônica) Free Software Magazine publicou um artigo sobre quem considera os heróis do Software Livre.

A lista, contendo 16 nomes (14 contribuições totais), incluem "estrelas" como Richard Stallman e Linus Torvalds - como era de se esperar -, mas também pessoas menos conhecidas (ao público geral, pelo menos) como Pamela Jones (da Groklaw), Bob Young (fundador da Red Hat) e Bram Cohen (idelizador/criador/inventor do BitTorrent).

Há ainda, no artigo, uma divagação sobre como seria o mundo sem a atuação dessas pessoas.

Enfim, um artigo que vale a pena ler! (E fique sossegado/sossegada: é um artigo rápido de ser lido.)

Palavras-chave: FOSS, Software Livre

Esta mensagem está sob a licença CreativeCommons Atribuição.

Postado por Ricardo Henrique Gracini Guiraldelli | 1 usuário votou. 1 voto | 0 comentário

Junho 15, 2008

default user icon

Na verdade, é só uma virtual machine. Mas a idéia, por si só, é inovadora.

Parrot é um projeto (adivinhem: FOSS) de uma virtual machine (VM) baseada em registros (e não em pilha, como a VM do Perl e do Java) que tem como objetivo rodar todas (na verdade, uma grande maioria) (d)as linguagens dinâmicas, o que inclui Perl (5 e 6), Python, PHP, Lua, Ruby, Tcl, Basic, Scheme, Common LISP, Javascript, .NET (tradução do bytecode), Cola, etc...

Originalmente, Parrot deveria ser o interpretador do Perl 6. Mas como o próprio Perl 6 é revolucionário (por isso os 8 anos de desenvolvimento), o projeto do interpretador, seguindo a onda, decidiu expandir e ser um interpretador/compilador (para bytecode) da maior quantidade possível de liguagens dinâmicas. Hoje o projeto tem uma quantidade grande de linguagens sob o seu guarda-chuva, evoluindo mais e mais a implementação destes (o que inclui dar suporte total às linguagens e deixá-las com alta performance quando interpretadas no Parrot).

Alguns aspectos técnicos

Instruções

O Parrot tem um conjunto de instruções, como um Assembly, para o qual as linguagens são traduzidas. Esse novo arquivo - que chamaremos bytecode - é semelhante (no modo de funcionamento) ao .class do Java ou ao CLR do .NET.

Contudo, há quatro formas de "entrar" código em formato de instruções no Parrot: PIR (Parrot Intermediate Representation), PASM (Parrot Assembly), PAST (Parrot Abstract Syntax Tree) e PBC (Parrot Bytecode). Os dois primeiros (PIR e PASM) são legíveis a humanos (embora com algum nível técnico, experiência e cuidado), enquanto PBC é a versão mais "baixo nível", como um código-de-máquina que é, efetivamente, o que a VM interpreta.

Registros

No Parrot, como no hardware de uma CPU, há espaços de "acesso rápido" chamados registros. Tais registros, no Parrot, são de quatro tipos: inteiros (I), numéricos (N), strings (S) e PMCs (P).

PMCs

Parrot Magic Cookie é um tipo especial de dado que armazena estruturas complexas, como vetores, matrizes e hash tables. De maneira grosseira, poderíamos comparar a um objeto ou struct.


Por fim, o Parrot tem um Garbage Colector para liberar a memória e facilitar a vida do programador.

Informações Adicionais

Para encontrar informações sobre esse incrível projeto de software, nada melhor que seguir alguns caminhos certeiros:

  1. Parrot Virtual Machine
  2. The Parrot Mailing List
  3. Wikipedia: Parrot virtual Machine
  4. The Parrot Blog

Palavras-chave: Compiladores, FOSS, Perl, Software Livre

Esta mensagem está sob a licença CreativeCommons Atribuição.

Postado por Ricardo Henrique Gracini Guiraldelli | 1 usuário votou. 1 voto | 2 comentários

Maio 22, 2008

default user icon

No grupo de e-mail da Computação da Poli mandaram um Nerd Test.

Mais um desses testes de Internet... mas esse fiquei curioso! Segue o resultado...

NerdTests.com says I'm a Nerd King.  What are you?  Click here!

É só clicar na figura para ir fazer o seu teste... HE! HE! HE! Go ahead and have fun!

Esta mensagem está sob a licença CreativeCommons Atribuição.

Postado por Ricardo Henrique Gracini Guiraldelli | 1 comentário

Maio 12, 2008

default user icon

Configurar um servidor nem sempre --- ou melhor, quase nunca! --- é fácil. Ajustar cada detalhe, verificar cada configuração, resolver cada dependência.

Pensando nos simples mortais --- eu e, acredito, você! ---- a equipe do Bitnami [ http://bitnami.org/ ] desenvolveu instaladores (disponíveis para Linux, Windows, Mac OS X, Solaris) que deixam o sistema pronto para ser usado, instalado nativamente em seu sistema (no meu caso, na minha virtualização VMWare do Fedora 8).

A lista de aplicativos prestigiados pelo projeto Bitnami não é pequena --- e é muito útil, diga-se de passagem:

  • DjangoStack
  • JRubyStack
  • LAMPStack
  • MAMPStack
  • RubyStack
  • SAMPStack
  • WAMPStack
  • Roller
  • WordPress
  • Mantis
  • Redmine
  • Trac
  • Alfresco
  • Drupal
  • Joomla
  • KnowledgeTree
  • phpBB
  • Tracks
  • Opina
  • Liferay
  • Subversion
  • DokuWiki
  • MediaWiki
  • Moodle


Existem soluções parecidas, como o JumpBox [ http://www.jumpbox.com/ ], mas deixam a desejar em alguns aspectos. Mesmo assim, vale a pena testar.

Espero que a dica (do Bitnami) seja útil para vocês!

Instalação do Django pelo Bitnami

Palavras-chave: FOSS, Software Livre, Virtualização

Esta mensagem está sob a licença CreativeCommons Atribuição.

Postado por Ricardo Henrique Gracini Guiraldelli | 2 usuários votaram. 2 votos | 0 comentário

Abril 11, 2008

default user icon

Após o lançamento do Google App Engine, discutimos na turma de Engenharia de Computação da EPUSP a importância de Python.

Após algumas discussões breves, chegou-se à definição de nichos de linguagens:

  • Sistemas Operacionais
    • Descrição: Programação de baixo nível, de drivers, de sistemas operacionais e sistemas onde o tempo de resposta é crítico
    • Linguagens: C, C++
  • Aplicativos Domésticos
    • Descrição: Aplicativos domésticos, ou seja, clientes de torrent, plugins, enfeites de tela, sites sem robustez corporativa
    • Linguagens: Python, Ruby
  • Administração de Sistemas
    • Descrição: Automatização de tarefas de administração de sistemas e agilidade para manipulação de string (regexes, no caso do Perl)
    • Linguagens: Perl, Shell Script
  • Interface Praticidade-Profissionalismo
    • Descrição: Programação de sistemas com algum nível de profissionalismo, mas com praticidade
      • Meio-termo entre Python e Java
    • Linguagens: .NET Framework (C#)
  • Corporativista
    • Descrição: Utilização em meios corporativos, com aplicações robustas e complexas, caracterizadas por middlewares
    • Linguagens: Java

Eu sei que há linguagens que estão fora, mas ainda não houve uma conclusão sobre algumas delas.

Pelo menos a classificação acima reflete, de alguma maneira, as tendências do mercado.

Palavras-chave: Linguagens de Programação

Esta mensagem está sob a licença CreativeCommons Atribuição.

Postado por Ricardo Henrique Gracini Guiraldelli | 1 usuário votou. 1 voto | 14 comentários

Março 12, 2008

default user icon

Não sei quanto a vocês, mas estou cansado de ficar anotando nos cantos das páginas de anotações de aulas todas as modificações de calendários que os professores fazem: mudanças de datas de provas, viagens, congressos, entregas de trabalhos e etc...

Enfim, como um bom quase-Engenheiro de Computação, quis "automatizar" a tarefa, transferindo-na para o computador. Como uso GNU/Linux, minha escolha óbvia foi o Evolution.

Tempo vai, problemas vêm... estava usando o Evolution para e-mails (integração IMAP do GMail) e para meus calendários (Google Calendar), mas esse se mostrou limitado para ambos: para o primeiro, "impossibilidade funcional" de inscrição em pastas específicas; para o segundo, impossibilidade real de adicionar tarefas direto da GUI.

Com um pouco de reflexão - não muita, para dizer a verdade - cheguei aos produtos Mozilla: Thunderbird (para e-mail) e Sunbird/Lighting (para calendário).

Como o Mozilla Thunderbird é figurinha conhecida, vamos para os outros dois...

Mozilla Sunbird

Aplicação stand alone do grupo Mozilla para calendário. Como de se esperar, interface simples de usar e muito prática, sem complicações. Segue a fórmula impecável da dupla Firefox/Thunderbird, com a possibilidade de add-ons - que é o que realmente dá a utilidade.

Eis um screenshot da visão de calendário semanal, com algumas tarefas, do Mozilla Sunbird:

VIsão do calendário semanal, com algumas tarefas

Mozilla Lightning

"Oh! Mas o Evolution é superior, pois integrava e-mail e calendário no mesmo aplicativo..."

Não tem pobrema: o Mozilla Lightining é uma extensão para o Mozilla Thunderbird (tchã-tchã-tchã-tchãããã....) para que, no mesmo aplicativo, você tenha o Thunderbird (que é o aplicativo host, digamos assim) e o Mozilla Sunbird (que é o aplicativo guest, na verdade um add-on).

Mozilla Lightning

Provider for Google Calendar

Eis o "ovo de Colombo": o add-on Provider for Google Calendar. Eis "o homem" que põe para funcionar a integração Mozilla Sunbird/Lightning com o Google Calendar.

Basta instalá-lo e, então, adicionar um novo calendário... e, magicamente, aparece a opção Google Calendar.

Mas... mas.... mas... mas qual endereço colocar?

Ahaaaaa! No seu Google Calendar, clique em Configurações da Agenda e, então, copie o link iCal do seção Endereço Privado para a área correspondente no seu Mozilla Sunburd/Lightning. Pronto! Seu Google Calendar configurado!

...

Bom, é fácil, agora, se manter organizado. E melhor: com beleza! (Afinal, a interface é linda!)

Referências

  1. Linux.com :: Latest Mozilla Sunbird is a wel-connected calendar

Esta mensagem está sob a licença CreativeCommons Atribuição.

Postado por Ricardo Henrique Gracini Guiraldelli | 3 usuários votaram. 3 votos | 9 comentários

Janeiro 07, 2008

default user icon

Ano novo, ano de Projeto de Formatura (PF). E, junto, uma Monografia para ser escrita, ou melhor, digitada. Felicità! Mas alguém já digitou um texto de 80 a 100 páginas, cheio de imagens, referências cruzadas, bibliografias, paginação, sumário e tudo o que mandam as normas ABNT num editor de texto (ao exemplo do Microsoft Word)? Um desastre, no mínimo! (Especialmente quanto ao sumário!)

OK! Se os editores de texto WYSIWYG têm suas limitações (para esse tipo de texto), qual a solução para tal deficiência? Sistemas de Typesetting ou, mais especificamente, LaTeX 2ε! (Existem outros sistemas de typesetting, como o troff, mas nem penso em palpitar sobre eles. Sei que o troff, ou melhor, groff é usado em livros da editora O'Reilly. Ponto.)

Sendo objetivo, LaTeX 2ε é uma linguagem de marcação para se escrever textos. Tudo o que é necessário é marcar títulos de seções, fontes em destaque, listas e outras formatações de texto, sem a preocupação com formato de fonte, posicionamento e outras detalhes (muitas vezes, incovenientes). Após essa marcação - a parte «engraçada» - basta compilar o «código-fonte» e o resultado será um documento limpo, bem estruturado e belo, redigido com facilidade incrível. Nada de preocupações com figuras fora do lugar, referências cruzadas perdidas, sumário incorreto ou tamanho X para os títulos de seções: tudo foi automaticamente ajustado para você!

Mas se LaTeX 2ε é tão fácil, por que quase ninguém usa?

Também queria saber! Afinal, LaTeX 2ε é incrível para se fazer fórmulas matemáticas e outras «infernalidades» (neologismo-mo-mo-mo...), além de facilitar tanto o trabalho, mas pessoas ainda preferem os editores WYSIWYG. Mas, talvez, seja por falta de conhecimento, medo de «decorar» as tags (que, no final, são meia dúzia) ou porque o LaTeX 2ε não seja a melhor ferramenta para se escrever um texto de 2 páginas, por exemplo. Contudo, para uma Monografia, certamente é a ferramenta ideal! (Especialmente quando o pacote abnTeX é utilizado.)

Eu acho que as pessoas não usam LaTeX 2ε porque não é tão portável quanto um .DOC...

Sim, também acho! Afinal, é tão difícil andar com um arquivo .TEX (que, na verdade, é um .TXT) ou um .PDF que é capaz que nenhum editor de texto consiga abrir! =P
Totalmente o oposto: um arquivo .TEX é tão portável que é um dos poucos formatos abertos existentes. E você pode editá-lo em qualquer editor simples, desde o Vim (ou Bloco de Notas, no Microsoft Windows) até o Microsoft Office Word 2007!

Bom, mas não vou ficar vendendo o LaTeX 2ε: para realmente entender o quanto é bom, é preciso testá-lo! Nos sistemas Unix-like, o teTeX é um dos «compiladores» (mas quase todas as distribuições GNU/Linux já vêm com este pré-instalado); para Microsoft Windows, o MiKTeX é o mais famoso.

Só para não deixar «em branco», vai um código muito simples de artigo em LaTeX 2ε:

\documentclass [10pt, a4paper] {article} % define documento (artigo) com letra tamanho 10pt e com papel A4
\usepackage [brazil]{babel} % define informações em português do Brasil
\usepackage [utf8]{inputenc} % define codificação do código-fonte como UTF8

\begin{document} % início do documento
\tableofcontents % essa linha cria - e organiza - o Sumário automaticamente. Fácil, não?
\section{Primeira Seção}
\subsection{Primeira Sub-Seção}
O meu texto vem aqui!

É preciso colocar uma linha em branco para dizer que é um novo parágrafo.
\section{Segunda Seção}
\textbf{Texto em Negrito}.
\emph{Texto em Destaque}.
\begin{enumerate}
\item Esse é o item 1
\item Esse é o item 2
\end{enumerate}
\end{document} % acabou a edição do documento
% comentários ocorrem após o sinal de porcentagem (%)

E eis o .PDF que resultado desse código.

Bom, agora é só praticar e curtir o LaTeX 2ε! Praticando é que se aprende.

Referências

  1. [PDF] Uma Não Tão Pequena Introdução ao LaTeX 2ε
  2. Wikipédia - LaTeX
  3. LaTeX Project
  4. abnTeX
  5. teTeX
  6. MiKTeX
  7. LaTeX Beamer Class

Adendo #1

No Stoa, em edição de posts para o blog, há um ícone \TeX que possibilita a inserção de código LaTeX 2ε nos artigos. (Por sinal, o TeX escrito diferente foi adicionado dessa maneira.)

Essa é, também, uma boa maneira para se praticar LaTeX 2ε.

Palavras-chave: FOSS, LaTeX, Typesetting

Esta mensagem está sob a licença CreativeCommons Atribuição.

Postado por Ricardo Henrique Gracini Guiraldelli | 4 usuários votaram. 4 votos | 2 comentários

<< Anterior