Posts Tagged ‘System’

Ruby on Rails configurando ambiente de desenvolvimento no Linux

Postado em 25 jun 2009
Categoria(s) Ruby on Rails

Nesse post vou mostrar como configurar um ambiente de desenvolvimento em Ruby on Rails no Linux.

Vamos lá!

Atualizando os pacotes do Linux:

sudo apt-get update

Instalando Ruby on Rails:

1
2
3
4
5
6
7
8
9
10
sudo apt-get install ruby irb rdoc ruby1.8-dev libopenssl-ruby imagemagick curl
wget http://rubyforge.org/frs/download.php/57643/rubygems-1.3.4.tgz
tar xzvf rubygems-1.3.4.tgz
cd rubygems-1.3.4
sudo ruby setup.rb
cd /usr/bin
sudo ln -s gem1.8 gem
sudo gem update --system
sudo apt-get install build-essential
sudo gem install rails passenger mongrel capistrano

Instalando Apache com PHP e Passenger/Modrails:

O Passenger/Modrails permite rodar aplicações Ruby on Rails no Apache.
Nessa etapa nós também iremos instalar o PHP, vamos precisar dele para o phpMyAdmin.

1
2
sudo apt-get install apache2 php5 libapache2-mod-php5 apache2-prefork-dev libapr1-dev
sudo passenger-install-apache2-module

Agora nós precisamos configurar o Apache para carregar o módulo do Passenger:

sudo gedit /etc/apache2/mods-enabled/passenger.load

Adicione as seguintes linhas no arquivo em branco:

LoadModule passenger_module /usr/lib/ruby/gems/1.8/gems/passenger-2.2.4/ext/apache2/mod_passenger.so
PassengerRoot /usr/lib/ruby/gems/1.8/gems/passenger-2.2.4
PassengerRuby /usr/bin/ruby1.8
RailsEnv development

Salve o arquivo e feche o gedit.

Reinicie o Apache para carregar o Passenger:

sudo /etc/init.d/apache2 restart

Instalando o MySQL:

1
2
sudo apt-get install mysql-server libmysql-ruby php5-mysql
sudo apt-get install phpmyadmin

Configurando acesso a sua aplicação Ruby on Rails:

Digamos que você tenha o código da sua aplicação Ruby on Rails no diretório:

/home/patrick/projetos/minha_aplicacao

Vamos configurar para que quando você digitar no navegador http://minha_aplicacao você veja a sua aplicação em ambiente de desenvolvimento e possa interagir com ela.

Para isso, siga os passos abaixo:

cd /etc/apache2/sites-available/

Vamos criar um novo host novo virtual host no Apache:

sudo gedit minha_aplicacao

No arquivo em branco adicione:

<VirtualHost *:80>
ServerName minha_aplicacao
DocumentRoot /home/patrick/projetos/minha_aplicacao/public/
</VirtualHost>

Salve e feche o gedit.

Vamos deixar esse virtual host disponível:

1
2
cd /etc/apache2/sites-enabled/
sudo ln -s ../sites-available/minha_aplicacao 001-minha_aplicacao

Agora vamos configurar para que quando você digitar no navegador http://minha_aplicacao o sistema operacional procure localmente ao invés de buscar na internet:

sudo gedit /etc/hosts

Nesse arquivo adicione a linha:

127.0.0.1	minha_aplicacao

Logo abaixo da linha que começa com 127.0.1.1…
Salve e feche o gedit.

Reinicie o Apache para carregar esse novo virtual host:

sudo /etc/init.d/apache2 restart

Abra o navegador:

Digite no browser http://minha_aplicacao e veja ela rodando.

Se você quiser usar o Vim como IDE de desenvolvimento Ruby on Rails leia esse post: http://blog.patrickespake.com/2009/04/21/usando-o-vim-para-programar-em-ruby-on-rails/.

Pronto!

Se você gostou desse texto e acha que ajudou você, me recomende: Recommend Me.

  • Share/Bookmark

Lab Go2Images resize e crop de imagens no formato gif, png ou jpg

Postado em 19 mai 2009
Categoria(s) Lab, PHP

Frequentemente em muitos projetos PHP é necessário trabalhar com o upload de imagens, geralmente nos formatos gif, png ou jpg.

Em muitas aplicações sempre é necessário fazer o resize e o crop das imagens, para obter um melhor resultado na visualização das imagens juntamente com o conteúdo.

Pensando nisso recentemente eu criei um projeto, chamado Go2Images, no meu laboratório, com o objetivo de realizar as funcionalidades acima.

Go2Images

O código fonte está disponível no github: http://github.com/patrickespake/go2images/tree/master e você pode testar no endereço: http://lab.patrickespake.com/go2images/.

O Go2Images foi desenvolvido usando a linguagem de programação PHP e o padrão de projeto MVC, que foi implementado do zero. Além disso ele usa a biblioteca GD para realizar as operações de resize e crop.

Você pode definir os tamanhos que as imagens devem ser redimensionadas, cadastrando a largura e altura, os sistema verifica todos os tipos de tamanhos cadastrados e usa essas informações para efetuar o resize e crop da imagens, conforme: http://lab.patrickespake.com/go2images/?controller=imageType&action=list e imagem abaixo:

Go2Images Image Type

Desta forma é possível inserir novas dimensões facilmente.

Com as dimensões de redimensionamento definidas, é possível efetuar o upload de uma imagem em: http://lab.patrickespake.com/go2images/index.php?controller=image&action=new.

Go2Images Nova Imagem

Automaticamente o sistema irá fazer o resize e crop das imagens, baseado nas informações de tamanho cadastradas http://lab.patrickespake.com/go2images/index.php?controller=image&action=show&id=1.

Go2Images Detalhes da Imagem

Primeiro o sistema efetua o resize da imagem tentando chegar o mais perto das dimensões desejadas e depois efetua o crop para deixar a imagem exatamente no tamanho informado.

No diretório public/images/system são armazenadas as imagens, é criado um diretório para cada imagem cadastrada, e dentro de cada diretório os tamanhos das imagens, sempre é armazenada a imagem original para futuros redimensionamentos.

Esse projeto é apenas um protótipo, sinta-se livre para usar, copiar e modificar.

  • Share/Bookmark

Rsync como excluir diretório .svn

Postado em 27 mar 2009
Categoria(s) Debian, Ruby, Ruby on Rails, Ubuntu

No Railscasts número 149 que trata sobre Rails Engines (http://railscasts.com/episodes/149-rails-engines), é criado uma rake task para fazer a sincronização dos arquivos do plugin para o projeto principal.

Eu tive um problema nessa task por causa do SVN, eu uso ele para fazer o versionamento do meu projeto.

O problema é que os diretórios .svn são copiados do plugin para o projeto principal no momento do rsync, e isso gerá alguns problemas no SVN.

Para não serem mais sincados os diretórios .svn no momento do rsync eu adicionei o parâmetro –cvs-exclude que serve tanto para CVS como SVN.

1
2
3
4
5
6
7
8
# vendor/plugins/blogify/tasks/blogify_tasks.rake
namespace :blogify do
  desc "Sync extra files from blogify plugin."
  task :sync do
    system "rsync -ruv --cvs-exclude vendor/plugins/blogify/db/migrate db"
    system "rsync -ruv --cvs-exclude vendor/plugins/blogify/public ."
  end
end

Se você gostou desse texto e acha que ajudou você, me recomende: Recommend Me.

  • Share/Bookmark

Timer C#

Postado em 30 abr 2008
Categoria(s) C#

Hoje vou mostrar como trabalhar com o componente Timer no C#.

O objetivo desse exemplo é gerar TextBox dinamicamente a cada X segundos. Para isso é usando o componente Timer.

Construa um form como o seguinte:

Você deve construir um form com os componetes exibidos na imagem acima (clique para ampliar a imagem). Os componentes usados nesse form são GroupBox, Label, NumericUpDown e Button. Os nomes em vermelho são a propriedade name que deve ser definida para cada componente.

Quando você clica em cima do componente Timer, ele não aparece dentro do form, fica na parte inferior. Esse tipo de componente não é visível.

A ideia desse form é você informar quantos TextBox deve ser criado e a quantos segundos. Quando você clicar no botão Iniciar começa a criação das TextBox dinamicamente. Quando você clica no botão Parar o Timer será parado e não será mais gerado TextBox. As TextBoxs são criadas dentro do elemento groupBoxTextBox, desta forma implementei o botão limpar para zerar o conteúdo do groupBoxTextBox.

Vamos criar o código para tudo funcionar e depois vemos como a sintaxe funciona.

Dê dois clique no botão Iniciar e digite o seguinte código:

1
2
3
4
5
6
7
8
9
 
        private void buttonIniciar_Click(object sender, EventArgs e)
        {
            int segundos = System.Convert.ToInt16(numericUpDownSegundos.Value);
            timerTextBox.Stop();
            timerTextBox.Interval = (int)segundos * 1000;
            timerTextBox.Tick += new EventHandler(timerEvent);
            timerTextBox.Start();
        }

Agora dê dois cliques em cima do botão Parar e digite o código abaixo:

1
2
3
4
5
 
        private void buttonParar_Click(object sender, EventArgs e)
        {
            timerTextBox.Stop();
        }

Dê dois clique no botão limpar e adicione o código abaixo:

1
2
3
4
5
 
        private void buttonLimpar_Click(object sender, EventArgs e)
        {
            groupBoxTextBox.Controls.Clear();
        }

Crie um novo método chamado timerEvent logo abaixo do método buttonLimpar_Click, o método timerEvent deve ficar da seguinte forma:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
        private void timerEvent(Object sender, EventArgs e)
        {
            int criar = System.Convert.ToInt16(numericUpDownTextBox.Value);
            for (int i = 0; i < criar; i++)
            {
                TextBox minhaTextBox = new TextBox();
                minhaTextBox.Height = 20;
                minhaTextBox.Width = 250;
                minhaTextBox.Location = new Point(10, 15 + (minhaTextBox.Height * groupBoxTextBox.Controls.Count));
                minhaTextBox.Text = "TextBox #" + groupBoxTextBox.Controls.Count;
                groupBoxTextBox.Controls.Add(minhaTextBox);
            }
        }

Pronto! Agora só pressionar F5 e ver a aplicação funcionado.

Vamos enteder como tudo funciona.

No botão Iniciar temos os seguintes códigos:

1
2
3
4
5
6
 
            int segundos = System.Convert.ToInt16(numericUpDownSegundos.Value);
            timerTextBox.Stop();
            timerTextBox.Interval = (int)segundos * 1000;
            timerTextBox.Tick += new EventHandler(timerEvent);
            timerTextBox.Start();

Na ordem, o método System.ConvertToInt16 converte o valor do campo número de segundos para inteiro. Depois executamos timerTextBox.Stop() isso faz que o timerTextBox sempre pare, com o objetivo de parar uma execução atual do Timer. O método Interval define que o Timer deve executar suas funções em tempos em tempos, esse valor é dado em milesegundos. O método Tick chamada uma função a cada intervalo definido, nesse exemplo é chamado o método timerEvent e por fim timerTextBox.Start() coloca o timer para funcionar.

O código do método timerEvent:

1
2
3
4
5
6
7
8
9
10
11
 
            int criar = System.Convert.ToInt16(numericUpDownTextBox.Value);
            for (int i = 0; i < criar; i++)
            {
                TextBox minhaTextBox = new TextBox();
                minhaTextBox.Height = 20;
                minhaTextBox.Width = 250;
                minhaTextBox.Location = new Point(10, 15 + (minhaTextBox.Height * groupBoxTextBox.Controls.Count));
                minhaTextBox.Text = "TextBox #" + groupBoxTextBox.Controls.Count;
                groupBoxTextBox.Controls.Add(minhaTextBox);
            }

Esse cara obtém quantos elementos deve ser criados no intervalo de segundos definido, nessa parte criamos um TextBox dinamico e colocamos esse elemento dentro do groupBoxTextBox execuntado a sintaxe:

1
2
 
groupBoxTextBox.Controls.Add(minhaTextBox);

Nesse método é usado:

1
2
 
groupBoxTextBox.Controls.Count

Essa sintaxe retorna apenas a quantidade de elementos que existe atualmente dentro do groupBoxTextBox, é usado para definir a possíção de exibição das TextBoxs criadas.

Entendendo o código dos botões Parar e Limpar:

1
2
3
4
5
6
7
8
9
10
 
        private void buttonParar_Click(object sender, EventArgs e)
        {
            timerTextBox.Stop();
        }
 
        private void buttonLimpar_Click(object sender, EventArgs e)
        {
            groupBoxTextBox.Controls.Clear();
        }

A sintaxe timerTextBox.Stop(); para o Timer, assim o Timer não executa mais. A sintaxe groupBoxTextBox.Controls.Clear(); remove tudo que existe dentro do groupBoxTextBox.

  • Share/Bookmark