Ok, voltando a postar depois de um tempo. Como já tinha falado antes estou bem ocupado essas últimas semanas e por isso o Plasma NM está meio parado. Uma boa notícia é que a nova tela de shutdown em QML que implementei para o KDE estará na versão 4.9.0 :-D

No início do mês eu fiz o push da implementação que fiz para a basysKom:
A aparência é praticamente a mesma da versão antiga, mas se você programa em QML você pode mudar o tema padrão ou mesmo criar o seu próprio tema. Acho que é possível fazer isso com o Qt Creator também.
O tema padrão está em $(kde4-config –path data –locate ksmserver/themes/default/). Existem quatro arquivos .qml no diretório, um .js e um .desktop também. O main.qml é o mais importante deles. Basicamente o main.qml é a caixa de diálogo de desligamento (shutdown) e a única exigência para ela é emitir os signais abaixo, que são os que realmente acionam as ações:
    signal logoutRequested()
    signal haltRequested()
    signal suspendRequested(int spdMethod)
    signal rebootRequested()
    signal rebootRequested2(int opt)
    signal cancelRequested()
    signal lockScreenRequested()
spdMethod contem um dos valores do enum Solid::PowerManagement::SleepState (StandbyState, SuspendState or HibernateState). StandbyState é raramente usado hoje em dia, mas ainda suportado.
O parâmetro opt em rebootRequested2 contem o índice da opção de boot escolhida no menu de reboot (mais sobre isso adiante). O rebootRequested() reinicia o sistema sem alterar as configurações do grub. Os outros sinais são auto-explicativos.
Algumas informações importantes são passadas como propriedades QML da parte C++ do ksmserver para a caixa de diálogo:
  • choose, sdtype, maysd: esses são os mesmos parâmetros (e na mesma ordem) usados em “qdbus org.kde.ksmserver /KSMServer logout x y z” e KWorkSpace::requestShutDown(ShutdownConfirm, ShutdownType, ShutdownMode). Leia /usr/include/kworkspace/kworkspace.h para uma explicação mais longa sobre eles.
  • rebootOptions é um hash (vetor associativo, dicionário). rebootOptions["options"] é um “string list” (lista de strings) contendo os sistemas operacionais configurados no grub. Ele é usado para criar o menu de boot que aparece no screenshot no início deste post. rebootRequested2 passa o índice (começa de zero) deste string list como parâmetro. rebootOptions["default"] é o índice da opção atual selecionada em rebootOptions["options"].
  • ShutdownType e spdMethods são as versões em Javascript dos enums KWorkSpace::ShutdownType (/usr/include/kworkspace/kworkspace.h) e Solid::PowerManagement::SleepState (/usr/include/solid/powermanagement.h). Eles foram adicionados por conveniência para que não seja necessário utilizar valores “hardcoded” nos arquivos .qml.
OBS: Acho que QML não suporta passar variáveis como valores padrão de propriedades entre  { } como na linha abaixo:
contextMenu.append({itemIndex: spdMethods.HibernateState, itemText: i18n(“Suspend to &Disk”)})
spdMethods.HibernateState é igual 4 mas itemIndex retorna o valor 1 quando eu a leio. Tive que utilizar valores hardcoded no menu de shutdown para contornar este problema.

Conexões DSL no Plasma NM

Pra quem precisa configurar conexões DSL no Plasma NM este tutorial é bem explicativo:

http://ubuntuforum-br.org/index.php/topic,90528.msg498098.html#msg498098

Pouco tempo muito trabalho…

Essas últimas semanas as coisas estão bem corridas no trabalho, pouco tempo para outras coisas, inclusive blogar. Como vocês já sabem meu trabalho tem muito a ver com o Plasma Active (site em inglês), a versão 2 dele foi lançada mês passado e estamos trabalhando em novas funcionalidades para a versão 3. Várias propostas de funcionalidades a implementar ou aperfeiçoar estão circulando na lista de discussões do Plasma Active. Na verdade há mais coisas para fazer do que desenvolvedores para implementá-las, então se você é desenvolvedor e está interessado em desenvolver algo para tablets e para o Plasma Active escolha um ítem para implementar.

O Plasma NM está bem parado essas semanas, eu tenho só resolvido alguns poucos bugs, aplicando alguns patches que chegaram até mim (eu fico muito feliz quando isso acontece então continuem enviando patches) e mudando o Plasma NM para usar a API assíncrona do DBus o máximo possível para evitar que as chamadas atrapalhem a fluidez do plasma desktop ou até paralisar o desktop inteiro por alguns segundos,algo relacionado como bug #287002. Esta última parte está pela metade e não sei quando vou poder terminá-la. De qualquer forma essa mudança irá só para o master, ela é bem grande e invasiva, algo que não deve ir para uma versão considerada estável como a do branch nm09.

As mudanças de usabilidade estão paradas também por falta de tempo. Realmente eu estou precisando de ajuda para tocar o Plasma NM pra frente, então se você tem interesse em melhorar o Plasma NM me contate que eu ajudo nos primeiros passos.

Aqueles que usam o branch master do Plasma NM já notaram que comecei enviar as mudanças de usabilidade na interface. Por enquanto as mudanças são bem parecidas com as que anunciei no meu primeiro post sobre elas:

O vídeo pode ser visto no Youtube.

Ainda há mais mudanças para fazer, por exexmplo: 1. Aumentar a altura de cada ítem na lista de conexões (talvez duas linhas por ítem) para deixá-los fáceis de serem pressionados em telas sensíveis ao toque; 2. Adicionar um ítem “Conectar a outra rede” para permitir criar novas conexões ao invés de usar o kcm; 3. Mover o ítem “<hidden network>” para o ítem “Conectar a outra rede”; Encontrar um novo lugar para o checkbox “Habilitar Rede”; 5. Encontrar uma forma de alinhar corretamente os elementos gráficos do plasmoid, QML parece tão mais fácil neste ponto :-/

Eu salvei todos os comentários que recebi sobre a interface do plasmoid. Eu só não tive tempo de avaliar todas elas, então sejam pacientes.

Feliz Natal

Esses dias eu tenho trabalhado mais com o Plasma Active (PA) do que com o Plasma NM. O trabalho no PA está indo bem, essa semana foi mais tranquila já que muita gente está de férias, inclusive boa parte da equipe do PA. Resolvi corrigir o máximo possível de bugs e a semana foi proveitosa, vários bugs corrigidos ou quase totalmente corrigidos.

No Plasma NM as coisas andam meio paradas, o que tem o seu lado bom, o número de bugs reportados está bem parado também. Ou eu estou fazendo um bom trabalho em corrigir os bugs ou o pessoal está desistindo de usá-lo, espero que seja a primeira alternativa hehe. As correções dos problemas reportados pelo Krazy2 terminaram, tem uma lista grande de problemas ainda mas que não tem solução simples e como não consigo fazer o Krazy2 ignorá-los eles vão ficar por lá mesmo.

Semana que vem todo mundo da basysKom está de férias (inclusive eu :-) ), então eu devo me dedicar mais ao Plasma NM antes de voltar ao trabalho no início de janeiro.

Amanhã é noite de Natal então Feliz Natal a todos.

Novo trabalho

Desde o dia 14 de novembro eu estou trabalhando para a basysKom, uma empresa da Alemanha muito ligada ao KDE. Finalmente um emprego onde posso trabalhar com o KDE :-)

O projeto em que estou trabalhando na basysKom é o Contour, que faz parte do Plasma Active. Um dos trabalhos que estou desenvolvendo é um substituto à caixa de diálogo de saída do KDE. A intenção é implementar uma caixa de diálogo mais fácil de ser usada em sistemas sensíveis ao toque, caso do Plasma Active. O resultado atual é esse:

O fato de ter somente três grandes botões é intencional, quanto menos botões menos problemas para usar :-) E botões grandes são mais fáceis de serem pressionados. A implementação está no branch ksmserver/qml-shutdowndlg do repositório git://anongit.kde.org/kde-workspace e foi feita parte em C++ e parte em QML. Este projeto está sendo um bom aprendizado de QML pra mim. Talvez no futuro (não próximo) eu possa usar o que aprendi no Plasma NM.

Para essa versão mais simples da caixa de diálogo não tive muitos problemas para implementar. Já para a versão  que irá substituir a caixa de diálogo atual eu tive bastante trabalho para implementar todas as suas funcionalidades e aparência, principalmente a parte de menu de contexto, que é fácil de fazer quando se tem um número estático de elementos, o que não é o meu caso. Outro problema ainda não resolvido e a parede de uso do teclado. Pelo que entendi QML é voltado para dispositivos sensíveis ao toque, onde não existe teclado. Por causa disso a implementação atual não usa tab order (usar a tecla TAB para selecionar o botão), pressionar ENTER não aciona o botão padrão e não é possível utilizar aceleradores (o subescrito que aparece em um label e que é usado para acionar o widget associado àquele label quando se pressionar a tela ALT + “letra do label).

Este final de semana terminei de implementar a maior parte das funcionalidades:

oxygen

Funciona inclusive com outros temas do Plasma:

Air

Androbit

Elegance

E aqui os dois menu de botões (veja o pequeno triângulo nos dois últimos botões):

 

QML shutdown dialog

Essas modificações talvez apareçam no KDE SC 4.8 (já é tarde para enviar novas funcionalidades, mas ainda há esperança). Para quem quiser testá-las pode fazê-lo inclusive no KDE SC 4.7, mas terá que compilar o plasmacomponents do kde-runtime master, o que não é difícil:

 

git clone git://anongit.kde.org/kde-runtime

mkdir kde-runtime/build

cd kde-runtime/build

cmake -DCMAKE_INSTALL_PREFIX=..

cd plasma/declarativeimports

make && make install

Depois disso é compilar o branch mencionado acima:

git clone git://anongit.kde.org/kde-workspace

cd kde-workspace

git checkout ksmserver/qml-shutdowndlg

mkdir build

cd build

cmake -DCMAKE_INSTALL_PREFIX=/usr ..

cd ksmserver

make && make install

O que anda acontecendo no Plasma NM

Olás, desde meu último post algumas coisas aconteceram no Plasma NM:

Para quem não sabe a QtNetworkManager e QtModemManager são bindings para o NetworkManager 0.9 e ModemManager 0.5. Eles são usados no Plasma NM da versão master (versão de desenvolvimento). A mudança de nomes foi sugerida pelos outros desenvolvedores do KDE que queriam nomes mais descritivos.
Além da mudança de nomes eu também corrigi vários probleminhas nas duas bibliotecas detectados pelo Krazy2 (analisador estático de código do KDE). Essas últimas semanas eu tenho (lentamente) corrigido problemas detectados pelo Krazy2 no Plasma NM também. Ainda tem bastante coisa para resolver, mas isso é um passo necessário para melhorar o código fonte do Plasma NM.
As mudanças de usabilidade estão paradas porque recebi algumas críticas em relação a elas. Mas do jeito que as coisas andam eu acho que vou mesmo é enviar as mudanças que já fiz e de lá ir melhorando aos poucos. Esses últimos dois meses tenho trabalho sozinho no Plasma NM e comecei um novo emprego (mais sobre isso no próximo post), por isso as coisas estão andando devagar.

Que tal ajudar o KDE em alguns clicks?

Algumas semanas atrás a Lydia Pintscher postou sobre uma promoção que um banco da Alemanha está fazendo. O Banco irá pagar 1000 euros para os mil primeiros associados que receberem o maior número de votos até o meio de novembro. O KDE e.V. está na posição 1003 hoje e perdendo posições, se nada mudar estaremos de fora :-( Se alguém aí ainda não votou por favor ajudem o KDE e.V., é só seguir as instruções no blog da Lydia ou para quem prefere as instruções em português faça o seguinte:

  1. Acesse [verein.ing-diba.de/…] e clique em “Stimme abgeben”.
  2. Preencha seu email e o código captcha, clicando em seguida em “absenden”.
  3. Você receberá um email para confirmar o voto – clique no primeiro link deste email.
  4. No website – clique em “Stimme abgeben”.

Você tem direito a 3 votos por conta de email.

15 anos de KDE

Eu me lembro da primeira vez que vi o site do KDE, eu era estudante de Ciência da Computação na UFMG (é Ciência, no singular, não Ciências). O ano era 1997 e o KDE não tinha nem um ano de idade, naquela época praticamente toda semana saía um snapshot do código fonte e eu ficava ansioso para compilá-lo e ver as novidades :-)

 

Muito tempo se passou, veio a versão 1.0, 2.0, 3.0, 4.0, a evolução entre essas versões é nítida, principalmente entre a 1.0 e a 2.0. Apesar de conhecer o KDE praticamente desde que foi criado foi só há pouco mais de dois anos que comecei a contribuir programando para o KDE e isso foi uma das melhores decisões que fiz. No FISL10 em 2009 eu conheci alguns membros da comunicade KDE-Brasil, da qual faço parte hoje, e desde então tenho conhecido muita gente que também tem essa mesma paixão que eu tenho pelo KDE. É ótimo conviver e até trabalhar com o pessoal da comunidade brasileira e estrangeira do KDE. Tenho vários amigos na comunidade, a gente se diverte ajudando o KDE e assim vamos vendo o nosso “garoto” crescendo, chegando a 15 anos de idade e com muitos mais por vir. Feliz aniversário KDE :-D

 

Solid Sprint

Semana passada eu fui para Madri para o Solid Sprint 2011. Pra quem não sabe o Solid é a camada de abstração de hardware do KDE e Sprint é tipo uma reunião de desenvolvedores onde discutimos os problemas e, principalmente, corrigimos bugs e implementamos novas funcionalidades.

Este foi o meu segundo sprint, o primeiro foi também Madri ano passado. Naquela época eu era só mais uma pessoa que contribuía na parte de redes móveis (3G). Nesses últimos doze meses muita coisa mudou, eu comecei a corrigir bugs no Plasma NM, fui implementando novas funcionalidades e informalmente assumindo o papel de mantenedor. Bem, agora não é mais informal. Durante o Solid Sprint eu aceitei assumir formalmente o papel de mantenedor oficial da parte de gerenciamento de redes do KDE. Eu até tenho um e-mail lamarque (at) kde.org agora :-D

Durante o Sprint várias coisas foram discutidas na parte de gerenciamento de redes, também realizamos um experimento de usabilidade para melhorar a interface do Plasma NM. Pensamos em várias idéias. Mudar a interface gráfica de um programa realmente chama a atenção (leia os comentários no meu blog). Alguns dos comentários são bem úteis e me fizeram pensar em mudar novamente o protótipo de interface que criei durante o sprint.

Outra novidade do sprint na parte de gerenciamento de redes é que a partir de agora eu vou liberar (release) versões do Plasma NM de forma regular. Hoje eu fiz o primeiro release  (versão 0.9.0_beta1) com boa parte dele traduzido para português. Agora é baixar e compilar :-)

Para quem quiser ler meus posts (em inglês) sobre o sprint pode acessar o meu blog. Use o sistema de tradução do blog para traduzí-lo para português.