Blog sobre desenvolvimento de software (Java, muito Java!), inovação tecnológica e cotidiano do Universo de TI. Acesse notícias, tutoriais, material de cursos e eventos, código, desafios, soluções, opiniões, pensamentos, divagações, balbuciações e abobrinhas diversas. Deixe seu comentário!

sábado, 21 de setembro de 2013

MOOC - Princípios de Programação Funcional em Scala

Gostaria de aproveitar esse post para divulgar um excelente curso online gratuito na Coursera.

Trata-se do curso Princípios de Programação Funcional em Scala (Functional Programming Principles in Scala). Segue link: https://www.coursera.org/course/progfun.

O instrutor do curso é ninguém menos do que Martin Odersky, criador da linguagem Scala, fundador da empresa Typesafe e Pesquisador na  École Polytechnique Fédérale de Lausanne

Eu acompanhei a segunda versão do curso fora de época e posso atestar a qualidade em primeira mão. De fato o curso da Coursera é utilizado como parte das atividades na EPFL, ou seja, alunos do Professor Odersky se matriculam normalmente na Coursera junto a outros milhares de candidatos ao redor do mundo; na primeira versão do curso mais de 50.000 pessoas se inscreveram (veja as estatísticas).

O tom do curso é bastante acadêmico, entrando em detalhes sobre modelo de substituição logo na primeira aula e navegando no mundo de funções de alta ordem, currying, covariância, contravariância, pattern matching, tuplas, parâmetros implícitos, monoides, streams, etc. Mas acredito ele seja também de grande valia para a indústria. Meus colegas de trabalho sempre me escutam tagarelando sobre Scala... Principalmente quando esbarro em pedaços de código longos e difíceis de ler em Java com contrapartidas intuitivas e sucintas em Scala. Além disso, cada vez mais linguagens Orientadas a Objetos vem adotando construções típicas de linguagens Funcionais como genéricos (introduzidos no Java 5) e expressões lambda (suportadas em C# desde a versão 3.0 e e pelo Java 8 previsto para Março de 2014). 

Nada como adicionar uma linguagem "híbrida", concebida com expressividade e escalabilidade em mente, 100% interoperável com Java (e seu enorme ecossistema) e altamente performática ao seu conjunto de skills. Além do que, aprender a mentalidade da programação funcional te faz um programador melhor em geral... Após minha experiência com Scala acabei descobrindo jóias do Apache Commons e Google Guava que possibilitam escrever código Java muito mais limpo. Também reforcei meu padrão de pensar mais / escrever menos código (os exercícios do curso realmente te fazem quebrar a cabeça, e no fim das contas as soluções são sempre simples).

O curso tem duração de sete semanas. A cada semana o aluno recebe o material de estudo (incluindo vídeos do Martin Odersky) e uma atividade de programação (com data de entrega para a próxima semana). O aluno pode submeter os exercícios através de um plugin do sbt (ferramenta de build popular entre desenvolvedores Scala). A correção dos exercícios é feita automaticamente em servidores (no Amazon EC2) que rodam testes unitários e analisadores estáticos de código contra a solução submetida. O aluno recebe uma nota de 0 a 10 e feedback sobre seu exercício  de maneira quasi-instantânea. A correção leva em consideração:
  • Testes unitários
  • Estilo (indentação, espaços em branco, etc) 
  • Boas práticas da programação funcional em Scala (evitar casts, variáveis locais mutáveis, uso de return, etc) 
  • Prazo de entrega (cada dia de atraso desconta 20% da nota)
O aluno pode submeter respostas para o mesmo exercício até cinco vezes com o objetivo de refinar sua implementação. São aprovados no curso (com direito a certificado oficial) alunos que obtiverem média acima de 60%.

Além do arsenal para correção automática de exercícios, o curso conta com um rico fórum de discussão em que alunos podem interagir, formar grupos de estudo e submeter / responder questões. Os fóruns são moderados por assistentes voluntários (comunidade) e staff oficial do curso para garantir a qualidade das discussões (bem como evitar que os alunos "colem").

A experiência do curso é muito enriquecedora, definitivamente vale a pena.

E ainda dá tempo de se matricular! A data de entrega para o primeiro exercício é dia 25/09/2013... No pior caso, se você perder essa data é possível passar no curso sem entregar o primeiro exercício (obtendo boas notas nos demais exercícios).

Então o que está esperando? Venha participar!

terça-feira, 17 de setembro de 2013

Slides- Escalabilidade Web / DevOps e PaaS

Slides da palestra "Escalabilidade Web: Sharding, Indexação, CDN, NoSQL, DevOps, Cloud, PaaS e a Vida Real" na EACH - USP Leste.

Agradeço ao Professor Eler e a todos que participaram!


domingo, 8 de setembro de 2013

Linux em 2013 - Primeiras impressões do openSUSE 12.3 e KDE 4

Recentemente, um pouco decepcionado com o Ubuntu 13.04, comecei a procurar outras distros Linux para uso no dia a dia. 

E como o cenário das distros mudou de alguns anos para cá!  Eu sou da época em que suas escolhas se resumiam a:

Não me leve a mal, já existiam várias distros voltadas a desktops e outros sistemas de arquivo além do ext, mas a vida para o típico usuário Linux costuma ser bem mais simples.
No servidor boa parte de nós rodava RHEL, seu primo CentOS ou o Debian. Para o desktop os grandes nomes eram Ubuntu e Fedora. Aqui no Brasil, nosso querido (e descontinuado) Kurumin escrito pelo Carlos Morimoto, bem como o Conectiva Linux (que, após fusão com o Mandrake, deu origem ao Mandriva Linux que deu origem ao Mangeia) fizeram muito sucesso... 

Mas nada pode parar a evolução. Foram lançados os controversos Gnome Shell e KDE 4, que desagradaram parte dos usuários acostumados com a tradicional metáfora de escritório. A Canonical lançou o Unity e começou a distribuí-lo por padrão com o Ubuntu; surgiram também outros projetos como MATE para agradar os usuários leais ao Gnome 2 e Cinnamon para quem desejava uma interface tradicional em cima do Gnome 3 (ambos distribuídos com Linux Mint, outra distro fantástica que pretendo revisar em breve). Projetos como o Xfce e LXDE, que antes viviam na escuridão também ganharam popularidade.

Eu não tenho cojones para tecer opiniões sobre a fragmentação dos ambientes de desktop Linux (nem na camada mais baixa dos display servers como X11, Wayland e Mir). Então deixo um vídeo do Bryan Lunduke, apaixonado o suficiente por Linux para cutucar a ferida:

(Assistam também Why Linux Doesn't Suck - 2013)

Enfim, com ou sem fragmentação, eu brinquei o suficiente com o Windows, OS X e primos do Linux como Solaris e FreeBSD para saber em qual SO quero desenvolver... E esse SO é o Linux! De preferência em uma distro com UI agradável e responsiva.

Fico feliz quando o sistema vem pré-instalado com o Compiz (ou similar) e tem todo o eye candy para as tarefas mundanas. Fico ainda mais feliz quando o sistema me permite desativar todos os efeitos visuais com um click ou tecla de atalho, de forma que eu possa rodar uma instância do Eclipse, outra do JDeveloper, uma terceira do SQL Developer, dois domínios do Weblogic, um terminal com 5 abas em SSH e o Chrome com 30 abas abertas sem que o sistema tenha que desperdiçar recursos com transparência e efeitos de transição (sim, estou falando sério, já trabalhei com tudo isso tudo - e muito mais - simultaneamente!). Nessas situações extremas você pode perceber a eficiência do mecanismo de memória virtual e sistema de arquivos do Linux.

Um outro fator importante para decidir entre distros é o ciclo de vida. Enquanto o suporte de 5 anos para versões LTS do Ubuntu é interessante, eu sempre preciso de algum aplicativo de versões mais novas do SO (nem sempre disponíveis através de Backports). O suporte por apenas 9 meses das versões comuns do Ubuntu é insano para uso no trabalho (infelizmente o Mint, baseado em Ubuntu, segue o mesmo ciclo de vida de 9 meses). Esse é um ponto muito positivo do openSUSE que mantém suporte por pelo menos 18 meses (na verdade, duas releases + dois meses).

Outro ponto positivo do openSUSE é a forte comunidade (não tão grande quanto a do Ubuntu ou Fedora, mas muito prestativa, educada e entusiástica) e o "apadrinhamento" pela Novell.  

Quem me conhece sabe que eu costumo torcer o nariz para distros com KDE e RPM (más experiências com o Fedora), mas a recomendação de amigos e a elegância da distribuição me levaram a experimentar algo novo (no VirtualBox é claro).

Pouco mais de uma semana após a instalação e estou tão satisfeito que em breve promoverei o SO à sua própria partição (junto ao Windows 7 - como me arrependo de ter instalado o Windows 8 - e Mint 15).

O download e instalação são muito simples (estilo next, next, next). Estão disponíveis Live CDs Gnome e KDE, bem como um DVD capaz de instalar ambos os desktops e uma vasta seleção de software (o DVD funciona como um repositório).

O boot é rápido; a interface é limpa, bem trabalhada e fluída. O KDE, na minha opinião, sempre deixou o Gnome no chinelo em termos de configuração / customização, mas sempre me pareceu demasiadamente burocrático e pesado... Não é o caso dessa versão.

Eu vou ser honesto e admitir que ainda sou, por natureza, um usuário Gnome 2 / Unity e que fico um pouco perdido com conceitos do KDE como atividades. Dito isso, para um dinossauro até que não demorei muito para me encontrar no Plasma... É tudo muito intuitivo, não leva mais de alguns minutos para descobrir e entender os painéis, widgets e folder views

Plasma

Nem me dei ao trabalho de customizar a aparência do sistema. Na verdade essa foi a distro com o tema padrão mais bonito que já encontrei (isso é, para quem gosta de preto). 

Isso não significa que não existam maneiras de personalizar papéis de parede, temas, decorações de janela, etc; inclusive os aplicativos de customização do KDE contam com botões para baixar mais recursos na internet (um bom site para começar é http://kde-look.org/)
Decorações de Janela

Outro ponto que me preocupava é se eu conseguiria instalar versões razoavelmente atuais dos softwares que uso. Para minha surpresa não senti tanta falta do gigantesco repositório do Ubuntu e seu ecossistema de PPAs. Entre os repositórios padrões do openSuse, RPMs disponíveis na internet e os típicos softwares distribuídos nos formatos bin e tar.gz encontrei tudo que precisava (Java, Scala, IDEs, versões recentes do Mercurial, Git, Maven, sbt, etc). Mesmo softwares da Oracle que historicamente sempre foram "seletivos" em relação a distros instalaram sem nenhum problema (ainda não usei todos exaustivamente, mas por enquanto tudo parece estar em ordem).

Um ponto forte do openSUSE é o mecanismo One Click Install que adiciona repositórios, verifica dependências, faz a instalação e configura atualizações automáticas para determinado software em um único passo através de botões em websites e arquivos YMP distribuídos pela internet. Combine esse mecanismo com um portal que agrega pacotes oficiais e não oficiais e você tem o melhor dos mundos.

Package Search
Falando em atualizações, essa é uma área muito transparente e funcional no openSUSE. Atualizações disponíveis aparecem na área de notificação e, caso o usuário deseje atualizar um pacote, os softwares Apper e YaST (esse último é muito superior ao Ubuntu Software Center, e, na minha opinião, mais intuitivo do que o Synaptic) se encarregam de todo o processo.
Apper
YaST
Algo admirável do KDE é a flexibilidade para customização das teclas de atalho. O ambiente oferece configurações para atalhos globais, atalhos específicos de cada aplicação e mesmo de aplicativos no menu. Olha o Alt+Shift+F12 para desabilitar os efeitos visuais aí ;).

Configuração de atalhos globais
É claro que, por melhor que uma distro seja, sempre existem alguns probleminhas:
  1. Esbarrei em um bug do kdesu quando a senha do root contém aspas duplas (")
  2. A performance do flash é abismal (mas pode ser culpa da VM)
  3. A versão do Amarok pré-instalada é muito bonita, mas achei bastante instável:
  4. Amarok
  5. Não consegui fazer o IntelliJ 13 EAP funcionar (admito que isso é pedir um pouco demais)
  6. Chrome resolveu achar que o 7u25 não é a versão mais atual do Java e bloquear o plugin (nada que um --allow-outdated-plugins não resolva, e pelos reports que li isso não tem nada a ver com o openSUSE)
Em suma: O openSUSE é uma distro rápida, polida, completa, bem documentada, com vasto apoio da comunidade e da Novell; além disso possui excelentes ferramentas de administração e um ecossistema de software de fazer inveja em muitas distros por aí. Definitivamente recomendo para trabalho e dia a dia.