Shared posts

01 Jun 23:05

Duolingo: Curso de inglês grátis ganhou aplicativo para celulares com Android

by rtoledo

0DUolingo

O Duolingo (duolingo.com), que vem ajudando pessoas de todo o mundo para aprender idiomas pela Internet gratuitamente, um projeto criado na Guatemala por Luis von Ahn finalmente ganhou um aplicativo especialmente desenvolvido para o Android.

Após 9 meses da data de seu lançamento o Duolingo já conta com mais de 3 milhões de usuários, sendo que o reconhecimento do sistema é muito grande, com um bom reconhecimento como o da PC Magazine, que escolheu este aplicativo como a Recomendação do Editor, e ainda ganhou o prêmio Webby People’s Voice deste ano como melhor aplicativo educacional. Vale a pena fazer o download e começar a estudar!

Para baixar o aplicativo visite a Google Play.

01 Jun 21:55

User Space Device Drivers no Linux — Parte 1

by Sergio Prado

Desenvolver um driver para Linux requer conhecimentos multidisciplinares. Quem já participou de uma seção do meu treinamento de drivers sabe muito bem do que estou falando…:)

Sim, você precisa saber ler datasheets e escovar bits. Precisa saber (muito bem) linguagem C, principalmente trabalhar com ponteiros e estruturas de dados mais complexas. Precisa conhecer também arquitetura de sistemas operacionais, e entender como o Linux escalona processos, gerencia a memória e controla o acesso aos dispositivos de I/O. Precisa conhecer os múltiplos sub-sistemas do kernel e sua API, frameworks e infraestruturas de barramento. Enfim, não será do dia para a noite que você se transformará em um desenvolvedor de drivers para o kernel Linux. O processo de aprendizado vai exigir de você muita força de vontade e perseverança.

Mas nem tudo são drivers em kernel space… Sim, é possível escrever uma aplicação em Linux que possa acessar diretamente um dispositivo de hardware! À essa aplicação (ou biblioteca) damos o nome de user space device driver.

E FUNCIONA?

Sim, funciona! E tem algumas vantagens:

  • Mais fácil de implementar, já que temos acesso às ferramentas e bibliotecas que estamos acostumados a usar no desenvolvimento de aplicações.
  • Pode ser desenvolvido em qualquer linguagem de programação: C, C++, até Java e Python!
  • Qualquer bug no driver rodando em espaço de usuário não vai impactar o funcionamento do kernel.
  • Processo de debugging fica bem mais fácil.
  • Facilita a distribuição e manutenção do driver, já que o mesmo binário pode rodar em diferentes versões do kernel.
  • A memória de processo pode ir para swap (o que também pode ser uma desvantagem!).
  • Se você precisa escrever um driver proprietário, pode evitar problemas com licenças de módulos do kernel.
  • O driver pode ter processamento intensivo, pois em user space sempre haverá preempção.
  • Um driver em user space tem acesso completo ao sistema de arquivos.

Mas se fossem apenas vantagens, não existiriam drivers rodando em kernel space! Drivers que rodam em espaço de usuário possuem algumas desvantagens:

  • Dependendo do acesso realizado pelo driver pode ser necessário ter privilégios de root.
  • Se não for feito da forma correta, é possível ter problemas de segurança.
  • Maior latência no tratamento de eventos e overhead de processamento devido às trocas de contexto, cópias de buffers entre kernel space e user space, swap de páginas de memória em disco, etc.
  • Mais difícil de implementar acesso concorrente aos dispositivos de hardware (o driver deve ter uma arquitetura cliente/servidor).
  • Sem as vantagens de ter um driver mantido pela comunidade (manutenção, revisão de código, etc).
  • Problemas de portabilidade do driver em diferentes sistemas, já que cada driver poderá ter seu padrão de comunicação com as camadas mais altas da aplicação.

De qualquer forma, pela facilidade na implementação, um driver em user space pode ser a solução para aquele problema simples que você precisa resolver. Vamos ver então como isso funciona?

COMO FUNCIONA?

O kernel provê alguns mecanismos de acesso direto à um dispositivo de hardware por uma aplicação, dentre eles:

  • Mapeamento de arquivo em memória com a função mmap().
  • Userspace I/O (UIO).
  • Frameworks do kernel (GPIO, USB, I2C, SPI).

Vamos dar uma olhada nestes mecanismos separadamente.

MMAP

O mmap é uma chamada de sistema que possibilita o mapeamento de um arquivo em memória. Tá, mas para que serve isso?

Um exemplo. Todo sistema Linux possui normalmente o arquivo /dev/mem. Esse arquivo é exportado por um módulo do kernel, e possibilita o acesso direto à memória física do hardware! Isso significa que, se você abrir este arquivo e escrever na posição 0 dele, estará escrevendo na primeira posição da memória física do seu hardware! Você precisa ter privilégios de root para executar tal operação.

Desta forma, fica fácil trabalhar com dispositivos de hardware que mapeiam seus registradores em memória. É só identificar o endereço do registrador mapeado em memória, abrir e indexar o /dev/mem, e voilá! Você tem acesso ao seu dispositivo de hardware diretamente de uma aplicação.

Mas abrir, indexar e acessar um arquivo é um procedimento bem mais complicado que simplesmente referenciar um ponteiro. Ele exige o uso da API de acesso à arquivos (open(), read(), write(), lseek(), etc), além de adicionar um overhead de processamento, já que toda operação de acesso à arquivo irá gerar uma chamada de sistema, passando obrigatoriamente pelo kernel.

E se você pudesse ter um ponteiro para referenciar diretamente esta região de memória? É aí que entra a chamada de sistema mmap(). Ela possibilita o mapeamento de qualquer região de um arquivo em memória!

Veja por exemplo o código abaixo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#define MAP_SIZE 4096UL 
#define MAP_MASK (MAP_SIZE - 1) 
 
void main(void) 
{
    unsigned int *reg;
    void *map_base;
    int fd;
    off_t target = 0x53F04000;
 
    fd = open("/dev/mem", O_RDWR | O_SYNC);
 
    map_base = mmap(0, MAP_SIZE, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 
                    target & ~MAP_MASK);
 
    reg = (int *)(map_base + (target & MAP_MASK));
    reg &= 0x01;
 
    munmap(map_base, MAP_SIZE);
 
    close(fd);
}

Na linha 11 o arquivo /dev/mem é aberto. Na linha 13 mapeio a região de memória que se encontra o registrador 0x53F04000, e na linha 17 eu seto o bit 1 deste registrador! Fácil!

Este mecanismo permite que uma aplicação acesse qualquer dispositivo de I/O mapeado em memória.

Obs: o exemplo acima não verifica o retorno das funções para simplificar o código. Se você for usar este código como base, não se esqueça de verificar o retorno das funções!

O acesso ao framebuffer por exemplo também funciona desta forma. Os drivers de interfaces de vídeo exportam um arquivo em /dev/fbX, possibilitando que uma aplicação ou driver em user space acesse diretamente a memória de vídeo do display.

Existe até uma ferramenta chamada devmem2 (ou devmem no Busybox) para facilitar este acesso na linha de comandos. Por exemplo, o comando abaixo escreve 0x10 no registrador 0x550F00010:

$ devmem2 0x550F00010 b 0x10

Para mais informações sobre a chamada de sistema mmap(), dê uma olhada em sua página de manual:

$ man mmap

O uso do mmap para desenvolver um driver em espaço de usuário tem algumas deficiências. Se você precisar de acesso simultâneo ao dispositivo, precisará implementar um mecanismo cliente/servidor (é o que os drivers de placa de vídeo em user space implementam). Seu uso, se não for bem implementado, pode deixar o sistema inseguro e instável. Além disso, esta interface não provê nenhum mecanismo para tratar interrupções.

É aí que entra o Userspace I/O (UIO).

UIO

O UIO é um framework do kernel, disponível desde a versão 2.6.23, que possibilita acesso direto à um dispositivo de hardware, com suporte básico ao processamento de interrupções.

É composto por um pequeno componente em kernel space responsável pelo mapeamento de memória e pelo registro das interrupções, deixando a lógica do driver para ser implementada em user space. E diferentemente do mmap, permite mapear apenas a memória do dispositivo, e não de todo o sistema. Portanto, é mais seguro de usar.

Mas como ele funciona? Ele exporta um arquivo em /dev/uioX (onde X é o número do device) possibilitando mapear e acessar a memória do dispositivo em espaço de usuário, também via mmap(). E permite capturar interrupções lendo este mesmo arquivo, via funções read() ou select() por exemplo. Uma biblioteca chamada libuio esta disponível para facilitar o uso deste framework.

Veja o exemplo abaixo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
void main(void)
{
    int32_t irq_count, enable_int = 1;
    void *map_addr
    int fd;
 
    fd = open("/dev/uio0", O_RDWR);
 
    map_addr = mmap(NULL, 4096, PROT_READ | PROT_WRITE, 
                    MAP_SHARED, fd, 0);
 
    write(fd, &enable_int, 4);
 
    while (read(fd, &irq_count, 4) == 4) {
        printf("Interrupted!");
    }
 
    munmap(map_addr, 4096);
 
    close(fd);
}

Na linha 7 o arquivo é aberto e na linha 9 o arquivo é mapeado em memória, retornando na variável map_addr um ponteiro para acessar diretamente a região de memória do dispositivo de hardware. Na linha 12 a interrupção é habilitada e na linha 14 o processo bloqueia esperando por uma interrupção.

Obs: este exemplo também não verifica o retorno das funções para simplificar o código. Se você for usar este código como base, não se esqueça de verificar o retorno das funções!

Para mais informações sobre o UIO, dê uma olhada na documentação do kernel aqui.

O UIO tem alguma deficiência? Sim, algumas. Ele só funciona quando o acesso ao dispositivo pode ser mapeado em memória. E não funciona com alguns tipos de dispositivos que precisam se integrar às camadas do kernel como placas de rede, dispositivos seriais, dispositivos USB e dispositivos de bloco. Além disso, o tempo de resposta para atender uma interrupção em user space pode ser um impeditivo, e ele não suporta DMA.

Na segunda parte deste artigo veremos como alguns frameworks do kernel para acesso à interfaces de hardware e barramentos (GPIO, USB, SPI, I2C, etc) possibilitam o desenvolvimento de drivers em user space.

Até lá!

Sergio Prado

Sergio Prado atua com desenvolvimento de software para sistemas embarcados há mais de 15 anos. É sócio-fundador da Embed­ded Lab­works, uma empresa focada em te aju­dar a desen­volver soft­ware de qual­i­dade para sis­temas embar­ca­dos. Se você pre­cisa de ajuda para desen­volver seu pro­duto, ou quer saber mais sobre o que a Embed­ded Lab­works pode fazer por você, acesse http://e-labworks.com/servicos.

Este post foi originalmente publicado em User Space Device Drivers no Linux — Parte 1.

30 May 04:37

Sony renova linha de produtos no Brasil e lança TV 4K que silencia narrador do jogo de futebol

by Stella Dauer

Estive hoje no evento da Sony em São Paulo, para conferir todos os lançamentos da empresa para 2013, em todas as suas categorias de produtos. Sendo uma das empresas patrocinadoras oficiais da Copa do Mundo 2014, o evento todo foi temático, e por isso vi dezenas de juízes, bandeirinhas e jogadores de futebol, figurantes fantasiados. Mas também teve jogador de verdade, e Bebeto e Zico, além do colunista Benjamin Back, levaram o evento sob a batuta de Rodrigo Faro.

Evento Sony 2013

Não sou uma super entendida de futebol, mas foi um evento bem bacana e emocionante, principalmente quando mostravam gols das antigas copas, quando ainda tínhamos esperança em nossa seleção. Mas, falando do que realmente interessa nesse site, o time de verdade da Sony também estava em campo. Pudemos ouvir e sabatinar Ricardo Junqueira, presidente da Sony Mobile do Brasil, e alguns japoneses que arranharam um portuguêes e outros executivos de marketing e entretenimento da empresa.

Após o evento principal, haviam muitas salas onde pudemos conferir a linha 2013 de produtos da marca. Nem dá aqui para falar de tudo, pois eram realmente muitos, muitos produtos, entre pen drives, baterias externas para devices, projetores, TVs, notebooks, smartphones, tablets, fones de ouvido, HDs externos, máquinas fotográficas, Home Theaters, sistemas de som, entre outros. Só de TVs, tinham mais de 20 modelos diferentes. Por isso, vamos a alguns destaques:

Evento Sony 2013

TVs 4K

A definição é realmente impressionante, e poder ver uma dessas de perto nos faz pensar se a próxima geração de tecnologias de display nos permitirá ver até as células dos atores na tela!

Deixando a extrema definição de lado, o que eu mais gostei nessas novas TVs (também presente em Home Theaters e Blu-rays) é o botão torcida. A empresa disse que, ao ouvir os consumidores sobre o que mais desejavam ao assistir um jogo de futebol pela TV, descobriram que era a sensação de estar dentro do estádio. Assim, o Botão Torcida aumenta e define o barulho da torcida, assim como o som do narrador. Até aí, ótima ideia, até mostrarem que o Botão Torcida também pode calar o Galvão narrador do jogo, deixando apenas o embalo da torcida a mil. Aí eu gostei, aí ganhou minha total atenção.

Evento Sony 2013

Em demonstração em condições ideais de ambiente e temperatura, eles demonstraram o serviço, que funcionou com maestria. Adeus falatório. Porém, resta saber em um review pessoal se a função realmente funciona. De qualquer forma, é a melhor coisa que inventaram desde que começaram a passar jogos pela TV.

Smartphones Xperia SP e Xperia L

Após o recente lançamento do topo de linha da Sony, o Xperia ZQ, um mês atrás, a empresa anunciou hoje dois novos modelos, um mid range e um de entrada. O Xperia SP lembra um pouco o ZQ, mas fica muito mais em conta, por R$1.299,00. Ele conta com 4G, NFC e um processador Qualcomm Snapdragon dual core de 1,7 GHz; além de uma tela de 4,6 polegadas HD e câmera de 8 megapixels. Esse modelo possui o “modo luva”, que permite (óbvio) o uso da tela capacitiva mesmo com luvas.

Xperia SP

Xperia SP

Já o Xperia L é mais simples e mais barato (preço de R$ 899), mas também parece ter um bom desempenho. Com tela de 4,3 polegadas, 4G, NFC, design ergonômico e processador Qualcomm Snapdragon dual core de 1 GHz, seu destaque é, segundo a Sony, ter a melhor câmera da categoria, com sensor de 8 megapixels e sensor Exmor RS que faz fotos e vídeos em HDR.

Ambos chegam às lojas na primeira quinzena de junho.

Xperia L

Xperia L

Tablet Xperia Z

Além dos smartphones, também mostraram o Xperia Z, um tablet que parece promissor. É o mesmo Android de sempre, com a interface especial da Sony, mas a diferença é que ele é muito fino, com apenas 7 milímetros de espessura e 500 gramas de peso. Peguei ele na mão, e seu design é totalmente simples: uma placa de traseira emborrachada, totalmente reto, apenas com os cantos arredondados. Com tela de 10,1 polegadas, Android 4.2 e 16 GB de armazenamento, essa gracinha ainda não tem preço definido e só chega no país em agosto.

Sistema de som Shake 7

É a renovação dos sistemas de som da Sony. Não sei quanto a vocês, mas eu não uso mais aparelho de som, fico satisfeita com um dock station decente e um smartphone ligado no Rdio. Mas, para os que ainda curtem um som pesadão, o aparelho é bem bonito, e tem tecnologia Bluetooth e NFC, tornando-o bem atraente para donos de smartphones. Ele é cheio de luzes, que piscam e brilham conforme o ritmo da música (espero que isso possa ser desligado, pois enjoa com o tempo). Ele conta com 2.400 W RMS.

Sony Music Unlimited

Não só de produtos vive a Sony, e aproveitaram o grande evento para anunciar a chegada oficial do serviço Sony Music Unlimited, concorrente direto do Rdio, Deezer e outros que fornecem música por assinatura. Por enquanto, só funciona com cartão de crédito internacional, mas oferece preços e acervo competitivos: são 20 milhões de músicas (incluindo independentes e locais) por R$ 7,90 mensais no plano Acesso e R$ 14,90 no plano Premium. O legal desse serviço é que ele funciona também no PlayStation e no PS Vita.

The Last of Us

The Last of Us

Quem esteve no evento pôde conferir em primeira mão uma versão Beta do título The Last of Us, da empresa Naughty Dog. Oficialmente, o jogo só será lançado em 14 de junho (mas já está em pré-venda), e por isso a versão disponível em mais de 20 consoles no evento não era a final. Mas, ainda assim, dei para conferir gráficos muito interessantes, além de conhecer a história diferente do título que mistura sobrevivência e ação, e fala sobre uma peste que extingue a raça humana e leva os sobreviventes a lutar no meio da selva que já foi cidade.

Action Cam

Action Cam

Outros

Entre os outros diversos produtos que saíram, destacam-se também os fones de ouvido MDR-XB920, com drivers de 500 milímetros, Extra bass, microfone embutido e botão para atender telefonemas. Entre os notebooks, saíram o Fit 15E com subwoofer integrado e o Ultrabook híbrido Duo 13. Na categoria de fotografia, demonstraram as NEX-5 e NEX-6, além da câmera 3D DSC-TX30, que é resistente à quedas. Para competir com as Go Pro, mostraram a HDR-AS15 Action Cam, uma pequenina câmera que grava em Full HD com lentes Carl Zeiss e tem todos os acessórios para ser utilizada em capacetes, além de Wi-Fi.

24 May 23:19

Wayland preview

by eben

Update: Daniel’s blog post here provides some more info, including how to install the technology preview on Raspbian today. And Pekka’s blog post here has some very detailed technical information on the implementation of the Weston backend.

If you’re familiar with the Raspberry Pi desktop experience, you’ll have noticed that windows on the desktop can be a bit slower to move around than you’re used to on your PC or laptop. This is because X, the windowing software (or composition protocol) that we use, is not optimised to use the graphics core of the BCM2835, the chip at the heart of the Raspberry Pi. All the work is done by the ARM processor instead, which slows things down and leaves the graphics core twiddling its thumbs. That graphics core is extremely powerful, so we’re working on putting it to good use to fix the issue.

We’ve made the decision to bypass X completely. Over the past few months we’ve been working with our friends at Collabora to implement the open-source Wayland composition protocol on top of the BCM2835 hardware video scaler (HVS). The HVS is a very powerful piece of hardware, with a scaling throughput of 500 megapixels per second and blending throughput of 1 gigapixel per second. It runs independently of the OpenGL ES hardware, so we can continue to render 3d graphics at the full, very fast rate, even while compositing.

Wayland composited desktop with XWayland and native applications.

In comparison to our current X11 desktop environment, Wayland frees the ARM from the burden of stitching together the top level of the composition hierarchy, and allows us to provide some neat features, including non-rectangular windows, fades for windows which don’t have input focus and an Exposé-like scaled window browser (the sort of thing that Mac users will be familiar with). Legacy X applications can still be supported using XWayland. Check out this video from Collabora to see these features in action, and to compare the current state of affairs with the Wayland future. Those non-rectangular shapes? They’re also windows.

We’re still working to improve performance and memory consumption, and don’t expect to be able to replace X11 as our default desktop environment until later in the year, but we will be including a technology preview in our next Raspbian release. Until then, this post on Collabora’s website gives some more background.

As with PyPy, the Raspberry Pi Foundation has funded this work on Wayland; it’s one of the ways we are trying to give back to the open-source community. Obviously, much of the work on this particular project is Raspberry Pi specific, but there’s a large portion of what’s being done, particularly around XWayland and some of the generic effects in Weston, that can be reused on many other platforms.

We’re looking forward to being able to push out the full release in the next few months. We hope you like the look of it!

20 May 18:35

Cocotas on Fire #2

by Edu

13 May 21:57

Homemade GPS receiver

by liz

A slightly abbreviated post today – we’ve just driven 380 miles to Phoenix from LA for Intel ISEF, where Eben’s talking tomorrow, and we’re ready to drop. But I was mailed this amazing piece of work this morning, and it really deserves your attention.

Andrew Holme is a member of the Systems Group at Broadcom Cambridge. He’s friends with several of Raspberry Pi’s engineers, and he’s been working on a homemade GPS receiver in the evenings for the last few years. Recently, he’s added a Pi to create a truly portable, battery-powered receiver.

It’s a remarkable piece of work. It shouldn’t be possible to build a GPS receiver like this out off-the-shelf parts. There is no custom silicon in this build; it’s all very, very clever use of an FPGA (field-programmable gate array) to implement the digital logic sections of the pipeline. My electronics isn’t good enough to really understand much of what’s going on here: all I can really tell you is that there’s an analogue front end and 1-bit ADC (analogue to digital converter) followed by all kinds of mad-clever digital stuff. So I’m not going to summarise what Andrew has done, but fortunately for us all he’s written the project up in incredible detail, so you can have a poke around yourself. Please do visit the link; this is one of the most impressive projects we’ve ever seen attempted with the Pi.

A bit of housekeeping: please be aware that posts this week will be a bit (or, as today, a lot) later in the day that you’re used to, because I’m several thousand miles further to the left than normal. There also won’t be quite as much Twitter activity from us as usual while we’re travelling, but the official Facebook and G+ pages will be forging ahead as normal. (Thanks Lorna!)

11 May 02:21

Uma Luta Típica do Seiya

by Cristiano De Sagitario