Skip to content

Rubye – Um agendador de ações em Ruby com GTK

05/06/2010

Bom, como eu havia comentado no post do Mamutti, já a algum tempo eu estou desenvolvendo uma aplicação em Ruby para agendar a execução de ações e agora, aproveitando a deixa que ele deu divulgando o d10r, que por sinal eu venho tentando usar diariamente, resolvi fazer o mesmo que ele escrevendo um post sobre a minha aplicação, e aqui estou.

A aplicação a qual se deve esse artigo chama-se Rubye e esse nome originou-se da contração “Ruby” + “bye” devido a inicialmente o aplicativo se tratar de um simples agendador para desligar o computador na hora que eu quisesse. Foi assim que, devido ao meu ócio pré-inicio de aulas na faculdade, eu resolvi tentar transformar o Rubye num aplicativo sério e espero realmente que ao final de tudo eu consiga! =)

Sem mais delongas vou falar agora do aplicativo em si, das suas funcionalidades e, claro, oferecer a quem se interessar a oportunidade de colaborar com o Rubye, seja relatando bugs, sugerindo melhorias ou com o código em si.

Sabe quando você está baixando um arquivo grande da internet, não quer esperar que o download termine, precisa ir dormir e também não quer deixar o computador ligado a noite inteira? Ou então quando você precisa que um dado comando seja executado em determinada hora? Tenho certeza que situações como essa já fizeram muitos de vocês ficarem acordados esperando o download terminar ou então esperando dar o horário que a internet é mais rápida pra executar um simples “apt-get upgrade”, por exemplo.

Foi pensando nesses problemas e principalmente munido de uma imensa vontade de criar um programa desktop em Ruby, já que muitos não conseguem desvencilhar a imagem do Ruby com a do Rails, que me surgiu o Rubye, e aqui esta ele:

Essa é a tela principal do Rubye, aonde o usuário escolherá a ação que deseja executar e a forma que ele deseja agendar essa execução (com data e hora marcada ou após tempo determinado). Outra tela do aplicativo é esta: a tela de edição de ações.


Nessa tela o usuário terá a possibilidade de adicionar novas ações assim como deletar e modificar as ações pré-existentes.

Para usar o Rubye é necessário apenas baixar o programa aqui, descompactar os arquivos em qualquer pasta, instalar o Ruby(versão >= 1.8.x) e o ruby-gnome2 e executar o arquivo Rubye. Note que é pra executar o arquivo Rubye, e não o Rubye.rb. Criei esse arquivo para facilitar a vida daqueles que não tem experiência com o terminal).

É claro que essa versão que esta disponibilizada agora não está livre de falhas já que é ainda a 0.1, ou seja, uma versão cujo objetivo principal é resolver os problemas que já existem e implementar complementos que adicionarão ao Rubye diferenciais em meio aos outros agendadores de tarefas disponíveis para o mundo Linux, que são muito limitados ainda. E para agilizar esse processo toda ajuda é muito bem-vinda, não importando de que espécie seja.

Entre os muitos recursos e modificações que precisam ser implementadas no Rubye vale destacar algumas como:

  • Tornar o Rubye multi-tarefa
  • Melhorar a forma de se conseguir permissões de root
  • Definir a necessidade de permissões de root por ação
  • Internacionalizar o código

Outras melhorias e correções podem ser vistas aqui.

Quem estiver interessado em contribuir de alguma forma para o projeto pode entrar em contado comigo pelo iCaju ou então pelo e-mail mlessadev@gmail.com.

OBS¹:Assim como o d10r o Rubye também está licenciado sob GPL versão 3.

6 Comentários leave one →
  1. 05/06/2010 23:57

    Ficaram legais as telas. Dá pra organizar melhor a segundo com ListView (acho). Quando terminar de instalar os pacotes que ele precisa eu testo e dou um feedback. Mas…

    O que você quis dizer com multitarefa? :S

    • MLessa permalink
      06/06/2010 0:21

      Bom você perguntar, acho que no Issue que criei pra isso expliquei melhor.
      Tornar o Rubye multitarefa vai ser permitir que ele possa agendar a execução de mais de uma ação na mesma instancia do programa.A base pra fazer isso já tá toda construída,falta botar a mão na massa.

      • 06/06/2010 0:34

        Tem como agendar tarefas para serem executadas diariamente, semanalmente, mensalmente, enfim com uma frequência ao invés de uma data definida? Acho que é importante ter isso. Quem sabe até um modo onde ele executa uma ação a depender da saída de um outro comando.😛

        Outra coisa, não dá pra usar o shebang em ruby?

        http://pt.wikipedia.org/wiki/Shebang

        • MLessa permalink
          06/06/2010 0:43

          Opa!!! Isso ai eu já tinha pensando em implementar quando você me falou sobre o Anacron, me esqueci de adicionar uma Issue pra isso, farei agora mesmo.
          Quanto ao shebang eu sinceramente não sei.Fiz agora um teste rápipo no irb passando system “#! /bin/sh ‘ls'”, retornou true porém não exibiu o retorno do ls.Vejo isso com mais calma e comento aqui depois.

  2. MLessa permalink
    07/06/2010 9:57

    Opa, mais um problema encontrado quanto a obtenção de permissões de root.Parece que a permissão que o Rubye consegue tem tempo de validade, depois de certo tempo ela expira e não se consegue mais executar comandos que precisem desta permissão.Resolverei tão breve quanto possível😉

    • 10/06/2010 15:28

      Quando ia te avisar você já tinha saído: após encerrar o programa ele imprimiu no terminal algumas mensagens de password incorreto do sudo. E pelo visto, após três tentativas com a senha errada ele falhou e desistiu de tentar, agora, que tentativas foram essas eu não faço a menor ideia, porque não apareceu nada parecido com um diálogo de senha. =/

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: