sábado, 16 de março de 2013

Fish the old Chico - Peixe no Forno

Chegando a Semana Santa... época de comer bacalhau caro pra carambolas e tomar muito vinho!! Ô coisa boaaaa! mas prefiro um belo tucunaré e ou tilápia pescada no velho chico (Eita saudade da peste!!!), lógico com o vinho e velhos amigos!
Então vamos lá:

Itensbacklog - Ingredientes:

  • 2 Peixes Grandes (Utilizei um Tucunaré e uma Tilápia)
  • 2 Batatas pequenas
  • 1 Limão
  • 300g ou o suficiente de Camarão para encher a barriga dos peixes
  • 4 cabeças de alho
  • 1/2 cebola
  • Cuminho e alecrin a gosto
  • Sal a gosto
  • Azeite
  • Oregano
  • Papel Aluminio

Modo de Preparo:
Sprint 1 - Tempero:

Mamífero! Esprema o limão em um copo, adicione o sal e cuminho e alecrim a gosto e as 2 cabeças de lho amassadas.

Sprint 2 - Arrumando espaço no peixe:

Trate e lave os peixes, e aprofunde a cavidade visceral fazendo um corte junto a espinha dorsal do peixe para preencher com o camarão e batatas!
Feito isso, faça alguns talhos transversais no corpo do peixe(nos dois lados) para que o tempero penetre na carne. Cuidado para não furar os peixes!!!
Agora peque o tempero que foi feito na Sprint 1, e espalhe sobre o peixe e também dentro do mesmo, e deixe descansar....

Sprint 3 - Camarão com batatas:

Com o azeite, frite o camarão com o alho e a cebola picada, (lembre-se do sal), depois coloque-os em uma vasilha e misture com as batatas cortadas em cubos e o Orégano.

Sprint 4 - Enchendo o bucho dos peixes:

Vá empurrando a mistura de batatas e camarão no bucho e no corte feito perto da espinha dos peixes... depois , pegue o liquido do tempo que escorreu e coloque dentro tbm, e utilize palitos de dente para fecha-los.
Agora embrulhe para presente com o papel alumínio, peça uma travessa que comporte os 2 peixes a sua esposa e leve ao forno.... 
Após alguns minutos Puta que pariu esqueci o tempo que precisa ficar no forno!! ... mede pelo cheiro... abra a embalagem de alumínio, e deixe dourar.

Sprint 5 - Enchendo o Nosso Bucho:

Já que estamos na Semana Santa, pegue um bom vinho e vá testar se a receita ficou boa!!!



terça-feira, 5 de março de 2013

JTable: Como adicionar mensagem de "Não existe registros"

Pessoal! vejam como é simples adicionar uma mensagem de "Não existe(m) Registro(s)" em uma JTable.

Nesse exemplo vamos precisar usar o velho @Override (setinha verde ao lado do numero de linhas no eclipse), para reescrever o metodo paintComponent da JTable.

package com.blogspot.receitastecnologicas;

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import java.awt.event.ActionEvent;
import java.awt.image.BufferedImage;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.JFrame;
import javax.swing.JPopupMenu;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JViewport;
import javax.swing.table.DefaultTableModel;

public class EmptyMessage extends JFrame {

 /**
  * @receitas tecnologias
  */
 private static final long serialVersionUID = 1L;
 private JTable table;

 public EmptyMessage() {
  this.table = new JTable() {
   public boolean getScrollableTracksViewportHeight() {
    if (getParent() instanceof JViewport)
     return (((JViewport) getParent()).getHeight() > getPreferredSize().height);

    return super.getScrollableTracksViewportHeight();
   }

   /**
    * Metodo Reescrito.. quado a quantidade de linhas na tabela foir 0
    * , será pintado na JTable um icone eu um texto
    * */
   protected void paintComponent(Graphics g) {
    super.paintComponent(g);
    if (getRowCount() == 0) {// Quando estiver usando o RowSorter
           // lembre-se do getViewRowCount()
     Graphics2D g2d = (Graphics2D) g;
     BufferedImage img = null;
     try {
      img = ImageIO.read(EmptyMessage.class
        .getResourceAsStream("icon.png"));
     } catch (IOException e) {
      System.out
        .println("Não foi possível carregar a imagem.");
     } catch (IllegalArgumentException e) {
      System.out.println("Imagem não encontrada!");
     }
     g.drawImage(img, 30, 30, 260, 160, null);
     g2d.setFont(new Font("Arial", Font.BOLD, 16));

     g2d.setColor(Color.BLACK);

     g2d.drawString("Nada por aqui!!!.", this.getWidth() / 3, 20);// Texto
                     // a
                     // ser
                     // exibido
    }
   }
  };
  this.table.setAutoCreateRowSorter(true);
  this.table.setFillsViewportHeight(true);
  // Quando for utilizar JTable Profissionalmente por favor use
  // AbstractTableModel
  this.table.setModel(new DefaultTableModel(new Object[][] { {
    "Receitas", "Tecnologicas" } }, new String[] { "Title 1",
    "Title 2" }));
  table.setComponentPopupMenu(new TablePopupMenu());
  this.add(new JScrollPane(table));
 }

 /**
  * Popup utilizado para add e remover linhas da table para mostrar o
  * funcionamento do metodo reescrito
  * */
 private class TablePopupMenu extends JPopupMenu {
  private final AbstractAction addAction = new AbstractAction("add") {
   @Override
   public void actionPerformed(ActionEvent e) {
    JTable table = (JTable) getInvoker();
    DefaultTableModel model = (DefaultTableModel) table.getModel();
    model.addRow(new Object[] { "Receitas",
      "Tecnologicas " + model.getRowCount() });
    Rectangle rect = table.getCellRect(model.getRowCount() - 1, 0,
      true);
    table.scrollRectToVisible(rect);
   }
  };
  /** Deleta linha selecionada */
  private final Action deleteAction = new AbstractAction("delete") {
   @Override
   public void actionPerformed(ActionEvent e) {
    JTable table = (JTable) getInvoker();
    DefaultTableModel model = (DefaultTableModel) table.getModel();
    int[] selection = table.getSelectedRows();
    if (selection == null || selection.length <= 0)
     return;
    for (int i = selection.length - 1; i >= 0; i--) {
     model.removeRow(table.convertRowIndexToModel(selection[i]));
    }
   }
  };

  public TablePopupMenu() {
   super();
   add(addAction);
   addSeparator();
   add(deleteAction);
  }

 }

 /**
  * @param args
  */
 public static void main(String[] args) {
  EmptyMessage emptyMessage = new EmptyMessage();
  emptyMessage.setTitle("JTable Empty Message");
  emptyMessage.setLocation(50, 50);
  emptyMessage.setSize(300, 300);
  emptyMessage.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  emptyMessage.setVisible(true);

 }

}

quinta-feira, 28 de fevereiro de 2013

Gravar bootloader no Arduino Nano V3.0 via Duemilanove

Esses meninos e essas meninas! Após os correios ter me feito esperar 2 meses pelos meus arduinos, arrumei outra coisa pra esquentar a cabeça, a falta do bootloader no Arduino Nano V3... Pois é... após 2 noites de pesquisa achei uma solução para o erro:
avrdude: Yikes! Invalid device signature. Double check connections and try again, or use -F to override this check.

que surgia nas tentativas seguindo os post que achava na net. Não adiantou trocar o Signature, pois a ligação de pinos que eu achei quer era padrão no site http://arduino.cc/en/Tutorial/ArduinoISP para gravação ISP AVR não funciona para a NANO.

Chega de papo...

Para gravar o bootloader eu precisei transformar meu Arduino Duemilanove em um AVR em programador de sistema. Isso permitirá gravar bootloaders em novos chips ou programa AVRs sem um Gerenciador de inicialização.


Utilizei os seguintes materiais:

IDE Arduino 1.03
Arduino Duemilanove (Gravador)
Arduino Nano V3.0 (A ser gravado)
1 Capacitor eletrolitico 10 uF 
Breadboard
Jumpers

Instalação:

Instale o Exemplo>>ArduinoISP no Duemilanove, para usa-lo como um ISP do AVR.


Ligue os Jumpers da seguinte forma:


Dueluminove >>>  Nano V3
SS   10              >>>     RESET
MISO 12        >>>     MISO 12
MOSI 11        >>>     MOSI 11
SCK  13         >>>     SCK  13
5V vcc           >>>     5vc
Gnd               >>>     Gnd


E o Capacitor eletrolitico 10 uF  nos pinos Reset  , Gnd da Dueluminove. O capacitor precisa ser ligado para evitar o auto reset do Arduino, evitando a mensagem "avrdude: stk500_getsync(): not in sync: resp=0x15".

Selecione a Board Nano:
Depois, ainda no menu Tools, na opção programmer, selecione Arduino as ISP
Agora selecione Burn Bootloader, e aguarde a gravação que será feita na Nano (algo em torno de 1 min), e pronto!

 a Ide vai te Mostrar a Mensagem Done Burning bootloader!!  Você ja pode fazer upload do blink normalmente para sua Nano V3. Fim de papo! Perdi muito tempo com um coisa muito simples, agora vou tomar um café!!

sexta-feira, 15 de fevereiro de 2013

Lombo ao molho de Napalm

 Mais uma vez deixando o notebook e o eclipse (maldito seja o vicio de ter que abrir uma IDE ) de lado, resolvi fazer outro rango diferente, o Lombo ao molho de Napalm! Dei o nome molho de napalm, porque em algum momento lembrei de uma banda que gosto muito... o Napalm Death.


Itensbacklog - Ingredientes:
    •    1Kg de Lombo bonivo
    •    1 Xícara de Vinho
    •    1 Cebola
    •    4 Dentes de Alho
    •    1 Calabresa
    •    2 colheres de manteiga ou azeite
    •    Coentro
    •    Cebolinha
    •    3 Batatas
    •    Sal,  Pimenta do reino e orégano  agosto.
Modo de Preparo:
Sprint 1 - Preparando o Lombo:
Faça um furo no centro do Lombo, e o preencha com a calabresa (lembrando-se de corta o pedaço que ficar para fora do lombo), e faça alguns talhos no lombo da espessura desejada da fatia..


Sprint 2 - Preparando o Molho Napalm:
Mamífero! Corte a cebola e o pedaço que restou calabresa em alguns pedaço e bata no liquidificador junto com o vinho, a manteiga ou azeite, o alho, o coentro, a cebolinha, o orégano, e o sal e pimenta do reino.
Após bater a mistura do tempero, coloque o lombo em um recipiente e despeje toda a mistura pastosa sobre o lombo, deixando descansar por 2 ou 3 horas e de vez enquanto virando o lombo para distribuir bem o tempero.

Sprint 3 - Leve ao Forno:
Agora é a hora da tortura! Corte as batatas em rodelas de uns 1,5cm  e espalhe em uma travessa,  depois coloque o lombo sobre elas e despeje toda a mistura, cubra com papel alumínio e leve ao forno por 1h. Vai subir um cheiro que vai te deixar feito cachorro em porta de açougue.
Após isso retire o papel alumínio e deixe dourar, não se esquecendo de aguar algumas vezes a carne com o molho.



Enchendo o Bucho:
Agora sim! Depois de alguns minutos você já deve estar com algo parecido com isso:

ou então queimou e tu num viu.

domingo, 20 de janeiro de 2013

Instalando e criando laboratórios experimentais com o Dynamips / Dynagen

Essa postagem tem o objetivo de orientar no processo de instalação e criação de laboratórios experimentais com o emulador de roteadores Cisco Dynamips/ Daynagen. Com este é possível estudar e testar os recursos dos roteadores Cisco 1700, 2600, 3600, 3700, 7200 sem a necessidade de adquiri-los para essa finalidade.

Primeiro baixe o Dynagen, o e WinPcap, que constam neste link para download. A versão disponibilizada aqui é válida apenas para o Windows.


INSTALANDO


  • Primeiro execute o instalador do WinPcap e prossiga seu processo de instalação a qual é bastante prático e objetivo como exposto adiante.
Instalando WinPcap - passo 1

Instalando WinPcap - passo 2

Instalando WinPcap - passo 3

Instalando WinPcap - passo 4

Instalando WinPcap - passo 5

  • Depois execute o instalador do Dynagen e prossiga seu processo de instalação a qual é bastante prático e objetivo como exposto adiante.


Instalando Dynagen - passo 1

Instalando Dynagen - passo 2

Instalando Dynagen - passo 3

Instalando Dynagen - passo 4

Ao concluir a instalação do Dynagen será possível visualizar os seguintes atalhos: Dynamips Server, Network device list e Dynagen Sample Labs.
Instalando Dynagen - passo 5

Para o próximo passo é necessário que você possua o(s) IOS Cisco 1700, 2600, 3600, 3700 ou 7200, que corresponde ao sistema operacional do roteador. Assim que consegui-lo deve-se seguir os seguintes passos: acesse Meu Computador/Arquivos de programas/Dynamips/Images e cole o(s) IOS Cisco (se tiver mais de um IOS pode colocar também) neste local, assim como apresentado na figura.

Configurando Dynagen


CRIANDO LABORATÓRIO DE TESTE

Abra o atalho Dynagen Sample Labs e depois acesse simple1. Para facilitar crie um atalho desse laboratório na área de trabalho.

Configurando laboratório Dynagen - passo 1

Agora com o botão direito do mouse, abra o arquivo do laboratório como Bloco de Notas ou WordPad para que possamos edita-lo.

Configurando laboratório Dynagen - passo 2

Perceba que ao abrir o arquivo do laboratório é possível visualizar alguns comandos para a execução do mesmo. O fato é que esse emulador não trabalha com interfaces gráficas, nem mesmo na elaboração da topologia. Então para prosseguir é preciso elaborar uma topologia da rede que se pretende simular.

Configurando laboratório Dynagen - passo 3

Na figura abaixo é apresentada a topologia proposta para configuração do laboratório baseado nela. Composto por dois roteadores conectados a rede 172.16.0.0/24.

Configurando laboratório Dynagen - passo 4

Agora iremos adaptar o laboratório simple1 que já encontra-se aberto para executar como conforme topologia proposta. As modificações constam na figura abaixo:

Configurando laboratório Dynagen - passo 5



EXECUTANDO LABORATÓRIO

Execute primeiro o Dynamips Server e depois o laboratório simple1. No console do Dynagen digite list e depois enter, e visualizará os dois roteadores propostos na topologia. Para acessar um deles digite telnet seguido do nome atribuído ao roteador no arquivo da topologia, exemplo: telnet R1 e depois enter (ele é case sensitive, ou seja, faz diferença entre letras maiúsculas e minusculas) e será aberta uma nova janela para que se possa fazer as configurações nesse equipamento.

Executando laboratório Dynagen - passo 1

Executando laboratório Dynagen - passo 2

Agora em se tratando das configurações entre os roteadores será mostrado em outra postagem. Nessa postagem você aprendeu a instalar e configurar a topologia de um laboratório simples no dynagen exceto configurações entre equipamentos.


POSSÍVEIS PROBLEMAS

Caso esteja trabalhando com o sistema operacional Windows XP basta seguir as orientações apresentadas nessa postagem, porém, caso esteja realizando a instalação no Vista ou 7 siga as seguintes orientações propostas nesse link que diz respeito a permissões de acesso a pasta.

Problemas também podem ser encontrados em relação ao consumo de memória, para solucioná-los sugiro as seguintes links: blog ccna e tutorial dynagen.


REFERÊNCIAS BIBLIOGRÁFICAS

Filippetti, Marco. Instalação do Dynamips / Dynagen no Windows Vista. Disponível em: <http://blog.ccna.com.br/2009/07/06/instalacao-do-dynamips-dynagen-no-windows-vista/>.

Filippetti, Marco. Dynagen - Tutorial básico. Disponível em: <http://blog.ccna.com.br/2007/10/05/dynagen-tutorial-basico/>.

Anuzelli, Greg. Dynamips / Dynagen Tutorial. Disponível em: <http://dynagen.org/tutorial.htm>.

quarta-feira, 16 de janeiro de 2013

Strogonoff de Almôndegas Monsters !

Deixando o notebook e o eclipse (maldito seja o vicio de ter que abrir uma IDE ) de lado nessas férias resolvi fazer um rango diferente, o Strogonoff de Almôndegas Monsters do tamanho de uma bola de sinuca !
Itensbacklog - Ingredientes:
  • 1/2 kg Carne Moída 
  • 250g Farinha de Rosca (+ ou -)
  • 1 Ovo
  • 100g queijo mussarela 
  • Tempero e Sal a gosto
  • 1 lt Creme de Leite 
  • Molho de Tomate 
Modo de Preparo:
Sprint 1 - Fazendo a massa de carne:
Mamífero! Tempere a carne e misture com o ovo e a farinha de rosca até deixar a massa uniforme e no ponto para fazer as bolinhas.

Agora corte o queijo em cubos e o envolva com a massa fazendo um bola! No meu caso da pra ver que as bolas são gigantescas!



Sprint 2 - Assando ou Fritando:
Depois de fazer as bolotas, você pode assar ou fritar... No meu caso de gordura em excesso, eu resolvi assar no forno, mas acho que fritas, também deve ficar bom.


Deixe-as no forno até dourar...


Sprint 3 - Preparando o Molho:
Ferva o molho de tomate, e acrescente o creme de leite. Após ferver um pouco, derrame o molho sobre as almôndegas na travessa e leve ao forno por uns 5min.
Enchendo o Bucho:
Mô véi! Agora é a melhor parte!


Isso aí nem cachorro come!!

segunda-feira, 10 de dezembro de 2012

Dica: Flex + Php Como NÃO usar !!

Olá negada! 

Recentemente coisa de 1 ano atrás algo me dizia que os mais de 100 requires em uma app estavam consumindo muito recurso na comunicação de Flex+Php e com o ZendAmf. Inicialmente o gateway php estava da seguinte forma:


require_once 'Zend/Amf/Server.php';
require_once 'dir/minhaClasse1.php';
require_once 'dir/minhaClasse2.php';
...
require_once 'dir/minhaClasse300.php';


$server = new Zend_Amf_Server ( );
$server->setClass ("Mapeamento das Classes" );
$server->setProduction ( false );
echo $server->handle ();

Esses inúmeros require_once incluindo todas essas classes, mostra-se totalmente desnecessário, pois além de consumir muito recurso deixando a comunicação entre o flex e o php terrivelmente lenta (Quer piorar as coisas? imagina umas 100 pessoas <tentando acessando esse mesmo arquivo!), para que diabos eu vou carregar meu sistema inteiro, se meu RO (remote object) so vai precisar de um determinado metodo por vez, e xau pro lôro!?  Solução Goooooooooooogle!

Como algum héroi que desenvolveu o Zend ja tinha PENSADO nessa possibilidade! Não tem logica nenhuma fazer a gambiarra codificação da forma descrita acima. Então bastou implementar no gateway o autoLoader para carregar automaticamente as classes do diretório que serão utilizadas pelo Flex (Remote Object), ficando assim:

require_once 'Zend/Loader/AutoLoader.php';
require_once 'Zend/Amf/Server.php';
Zend_Loader_Autoloader::getInstance ()->setFallbackAutoloader ( true );

$server = new Zend_Amf_Server ( );
$server->setProduction ( false );
// setando o diretorio das classes(carregadas automáticamente) usadas pelo Flex (remote object)
$server->addDirectory ( dirname ( __FILE__ ) . "/dir" );

echo $server->handle ();

Essa forma de carregar os arquivos automaticamente, deixa a comunicação muito mais rápida, pois não preciso levantar todo o sistema para acessar um simples método de login por exemplo!