sábado, 16 de maio de 2015

Rubacão ( Baião de dois ) - Panzer Division Marduk

Esse negócio de morar longe da família é foda! A ociosidade pós trabalho faz despertar uma vontade desgraçada de comer as iguarias que transbordavam na região que nasci...  Ô saudade do meu SERTÃO vei macho!

Minha mãe me arrumou um  litro de feijão de corda verde (é... a velha medida sertaneja de uma lata de óleo cheia de feijão) e em duas ligações saiu essa maravilha: "Rubão (Baião de dois)"... e como não fui para o #APR2015 e me divertir bastante acompanhando o festival pelo youtube...
Panzer Division Marduk

Itensbacklog - Ingredientes:

  • 1 xícara e ½ Feijão de corda Verde
  • 1 xícara de Arroz
  • 200g Calabresa
  • 200g Charque
  • 1 Tomate
  • 1 Cebola
  • Tempero(Cominho)
  • Sal



 

Modo de Preparo:
Sprint 1 - Feijão de molho:

Deixe a quantidade do feijão de molho em um recipiente com água por 8hs. Cozinha mais rápido.

Sprint 2 - Feijão no Fogo:

Comece a cozinhar o feijão. Adicione o sal e o tempero.
 Não utilize muita água! A meta é deixa somente o suficiente para cozinhar o arroz e secar.

Sprint 3 - Preparando a Mistura:

Enquanto o feijão vai cozinhando, corte a tomate e a cebola em pequenos cubos. Escalde a charque e corte em pedaço pequenos junto com a calabresa.
Verifique se o feijão já esta perto de ficar mole e acrescente a tomate, cebola, calabresa e a charque.
 

Sprint 4 - Ta quase acabando e eu to com fome:

Uma hora dessas o feijão já esta cozinhado e chegou a hora de adicionar o arroz. Vá deixando a água ir secando e verificando se o arroz já esta cozido. Caso perceba que a água vai secar e o arroz ainda está duro, vá adicionando (aos poucos) mais água. Nossa meta é ter o arroz e feijão cozidos e o minimo de água possível. 

Sprint 5 - Hora de matar a fome:

Oh my dog! agora é só saborear!



terça-feira, 5 de agosto de 2014

Hibernate Validator

Que coisa linda é a implementação da JSR-303 !
Esse tal de Hibernate Validator, é muito foda!! Sabe-se lá quantos IF's ele pode evitar que vocês precise escrever, bastando definir annotations para validação dos atributos de sua classe.
A sensação de usar hibernate Validator no meu projeto é mais ou menos assim:

Gastando menos tempo com IF's de validações me sobra mais tempo para tomar cerveja, então vamos ver como implementar uma validação de 'caba homi', porque escrevendo menos aqui, já sabem! Sobra mais tempo para cervejas.

Na classe Receita, eu preciso validar  a quantidade de caracteres de um atributo, e se um outro é nullo. Então defini as constraints  através do annotation @Size, com o valor min, max ,mensagem da validação e @NotEmpty somente com a mensagem.

package com.blogspot.receitastecnologicas.entidade;

import javax.validation.constraints.Size;
import org.hibernate.validator.constraints.NotEmpty;

/**
 *
 * @author receitas tecnologicas
 */
public class Receita {

    @Size(min = 10, max = 255, message = "A descrição da receita deve conter entre 10 e 255 caracteres")
    private String descricao;
    @NotEmpty(message = "Informe o autor!!")
    private String autor;

    public String getDescricao() {
        return descricao;
    }

    public void setDescricao(String descricao) {
        this.receita = receita;
    }

    public String getAutor() {
        return autor;
    }

    public void setAutor(String autor) {
        this.autor = autor;
    }

}

Agora vamos criar a classe de validação.

No meu objeto a ser validado, vou setar 5 caracters e nullo em seus atributos e depois submete-lo a validação das constraints usando uma instância de Validator.
O Validator retorna um conjunto de ConstraintViolantion (ou vazio, caso não viole nenhuma restrição), que será iterado a fim de exibir os erros . Como estou validando se A descrição da receita deve conter entre 10 e 255 caracteres e se o autor não é nulo, será printado o seguinte texto:
run:
3 [main] INFO org.hibernate.validator.util.Version - Hibernate Validator 4.0.2.GA
-----Erros --------
Campo: autor - ERRO-> Informe o autor!!
Campo: descricao - ERRO-> A descrição da receita deve conter entre 10 e 255 caracteres
CONSTRUÍDO COM SUCESSO (tempo total: 0 segundos)


package com.blogspot.receitastecnologicas;

import com.blogspot.receitastecnologicas.entidade.Receita;
import java.util.Set;
import javax.validation.ConstraintViolation;
import javax.validation.Validation;
import javax.validation.Validator;
import javax.validation.ValidatorFactory;

/**
 *
 * @author receitas tecnologicas
 */
public class HibernateValidator {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        try {

            ValidatorFactory factory
                    = Validation.buildDefaultValidatorFactory();
            Validator validator = factory.getValidator();
            //Objeto a ser validado
            Receita receita = new Receita();
            receita.setDescricao("Farofa");//texto com 5 caracteres
            receita.setAutor(null);
//            receita.setDescricao("Bode assado na brasa com macaxeira frita");
//            receita.setAutor("Ojuara");

            //Validating the object and getting the result
            Set<ConstraintViolation<Receita>> constraintViolations = validator.validate(receita);
            if (constraintViolations.size() > 0) {
                System.out.println("-----Erros --------");
            }
            //printing the results
            for (ConstraintViolation<Receita> constraintViolation : constraintViolations) {
                System.out.println("Campo: " + constraintViolation.getPropertyPath() + " - ERRO-> "
                        + constraintViolation.getMessage());
            }

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}

Mais detalhes http://hibernate.org/validator/documentation/getting-started/

sábado, 26 de julho de 2014

NetBeans - Plug-in Personalizado

Warrior of the world united!

Em janeiro mudei de emprego e fiquei sem tempo de postar por aqui.
Pois é... após 3 anos produzindo praticamente nada devido ao meu chefe acreditar que ele era um cara inteligente, e que toda idéia boa para o projeto só poderia partir do intestino da cabeça dele.
Eu já não aguentava mais ensinar a ele como funciona um Singleton, e resolvi procurar um ambiente mais profissional. (Ps. durante os 3 anos, ganhei uma boa grana com free lances e fiz vários post aqui no blog, já que não tinha muita coisa para fazer no trampo).

Então... rapazzzz, em 3 meses trabalhei o dobro do que nos 3 anos descritos acima, e fiquei sem tempo de postar algo legal por aqui.

Um freelance aqui, um outro li. Comecei a perceber que precisava de um plugin no NetBeans que me ajudasse na inserção de códigos que se repetem em vários arquivos dos meus diversos projetos, então resolvi brincar com essa implementação  que originou esse post.

Achei pouco material em português, mas com inglês tabajara deu para fazer com que, ao clicar com o botão direito do mouse sobre um arquivo java, o menu de contexto exibisse uma Opção para alterar o conteúdo do arquivo selecionado.

O primeiro passo é criar um novo projeto do tipo MODULO e clicar em próximo.

 Informar as configurações básicas.

Com o botão direito no pacote do projeto, é preciso criar um novo tipo de arquivo "AÇÃO" (encontrado na categoria de 'desenvolvimento de modulo netbeans' ).



Configure a ação para ser ativado condicionalmente e sua classe de Cookie será a DataObject. Essa classe representa o arquivo selecionado, e será por ela que teremos acesso ao path, nome, tipo e várias outras informações.

No registro da GUI, marque a opção de Item de Menu de Contexto, escolha tipo de conteúdo em que deseja que a ação de contexto pode ser disparada (no nosso caso, java).


Informe o nome da classe, nome de exibição, ícone , pacote e click em finalizar.

Na classe que foi criada, fiz uma pequena implementação, para pegar as informações sobre o arquivo selecionado pela classe DataObject, ler seu conteúdo e adicionar um comentario no topo do arquivo.

package com.blogspot.receitastecnologicas;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.util.Scanner;
import javax.swing.JOptionPane;
import org.openide.awt.ActionID;
import org.openide.awt.ActionReference;
import org.openide.awt.ActionRegistration;
import org.openide.filesystems.FileObject;
import org.openide.loaders.DataObject;
import org.openide.nodes.Node;
import org.openide.util.Lookup;
import org.openide.util.NbBundle.Messages;

@ActionID(
        category = "File",
        id = "com.blogspot.receitastecnologicas.InsereComentario"
)
@ActionRegistration(
        displayName = "#CTL_InsereComentario"
)
@ActionReference(path = "Loaders/text/x-java/Actions", position = 150, separatorBefore = 125, separatorAfter = 175)
@Messages("CTL_InsereComentario=Inserir Comentário de descrição")
public final class InsereComentario implements ActionListener {

    private final DataObject context;

    public InsereComentario(DataObject context) {
        this.context = context;
    }

    @Override
    public void actionPerformed(ActionEvent ev) {
        StringBuilder comentarioCabecalho = new StringBuilder();
        comentarioCabecalho.append("/**\n");
        comentarioCabecalho.append("* Que beleza! Esse tutorial vai me lembrar os passoas de criação de um plugin NetBeans Platform\n");
        comentarioCabecalho.append("* Esse comentário foi criado via o menu de contexto do NetBeans, \n");
        comentarioCabecalho.append("* (Inserir Comentário) que  quando precionado,\n");
        comentarioCabecalho.append("* o arquivo do tipo java que foi selecionado, será re-escrito com esse texto incluido \n");
        comentarioCabecalho.append("* no topo do arquivo.\n");
        comentarioCabecalho.append("* \n");
        comentarioCabecalho.append("* Note: Acesse os post anteriores... talvez algum besteirol escrito aqui te ajude!\n");
        comentarioCabecalho.append("* 

\n");
        comentarioCabecalho.append("* Tem algumas receitas legais de comida, que até o Edu Guedes fica babando!\n");
        comentarioCabecalho.append("*\n");
        comentarioCabecalho.append("* @see Receitas tecnológicas\n");
        comentarioCabecalho.append("* @see Receitas tecnológicas: Salvando vidas\n");
        comentarioCabecalho.append("*\n");
        comentarioCabecalho.append("* @author Receitas tecnológicas\n");
        comentarioCabecalho.append("* @since 1.0\n");
        comentarioCabecalho.append("*/ \n\n\n");
        InputStream in = null;
        StringBuilder linha = new StringBuilder();
        try {

            in = new FileInputStream(context.getPrimaryFile().getPath());
            Scanner scan = new Scanner(in);
            while (scan.hasNext()) {
                //faça sua regra aqui
                linha.append(scan.nextLine()).append("\n");
            }
            linha.insert(0, comentarioCabecalho);
            System.out.println(linha.toString());
            OutputStream bytes;

            bytes = new FileOutputStream(context.getPrimaryFile().getPath(), false); // passado "true" para gravar no mesmo arquivo

            OutputStreamWriter chars = new OutputStreamWriter(bytes);
            BufferedWriter strings = new BufferedWriter(chars);
            strings.write(linha.toString());

            strings.close();

        } catch (FileNotFoundException ex) {
            JOptionPane.showMessageDialog(null, "O arquivo " + context.getName() + " não foi encontrado!", "FileNotFoundException!!", JOptionPane.ERROR_MESSAGE);
        } catch (IOException ex) {
            JOptionPane.showMessageDialog(null, "Verifique se o arquivo " + context.getName() + " esta em uso por outro programa!", "FileNotFoundException!!", JOptionPane.ERROR_MESSAGE);
        }
    }
}

Após implementar chegou a hora do teste!  Click em "Executar Projeto" e uma nova instância do NetBeans será aberta. Selecione um arquivo java desejado, click com o botão direito do mouse e você terá sua opção disponível no menu de contexto. Click na sua opção e depois abra o arquivo para conferir se algo foi gravado.

https://netbeans.org/features/platform/all-docs.html

domingo, 11 de maio de 2014

Como organizar suas referências bibliográficas com o ZOTERO

Na época da minha graduação tive um grande problema para gerenciar minhas referencias bibliográficas... Era uma desgraça ter que baixar um arquivo e escrever em outro a data de acesso, e outras informações da bibliografia. Meus problemas acabaram quando o meu orientador me indicou o ZOTERO. Esse plugin é muito foda!! Ele possibilita trabalhar em grupo, e basta você clicar em um botão, e ele salva a url, e em alguns casos ele já atribui o nome e sobre nome do autor, e outras informações. Depois é só selecionar a coleção e exportar no padrão desejado.
https://www.zotero.org

terça-feira, 29 de outubro de 2013

FácilMVC - Framework PHP

Fazia muito tempo que eu tinha trabalhado só com js,css e php, e fui convidado a participar de um projeto utilizando o Framework FacilMVC...,  um framework opensource du caralho  muito legal, desenvolvido em #PHP, e que promove a separação do código em camadas MVC  MODELO, VISÃO e CONTROLADOR, trabalhando com o mapeamento de URLs para invocações de métodos das classes (módulos) da camada Controlador. 
O FacilMVC é embasado no Framework HTML5 Boilerplate, realizando todas as suas boas práticas e utilizando a biblioteca MinifyJs para reduzir JS e CSS on the fly sem você se preocupar. Ele é mantido pela comunidade PHP Pernambuco e esta disponível no github https://github.com/phppe/FacilMVC.

Achei muito legal... principalmente pelo fato de não precisar estar escrevendo requires e includes! Recomendo!
approved


quarta-feira, 23 de outubro de 2013

Pernil de Carneiro Mama, I'm Coming Home

Essa receita eu fiz na casa da minha mãe... poi é... ela gostou de algumas receitas que eu fiz quando ela veio me visitar, e como sabe que eu adoro carneiro, bode e outras coisa que fazem 'BÉEEEE', ela disse que queria descansar, e eu iria me responsabilizar por fazer o carneiro no forno para o nosso almoço.

Itensbacklog - Ingredientes:

  • 1Pernil de Carneiro
  • Suco de 2 laranjas
  • 4 Cabeças de alho
  • Cominho
  • Alecrim
  • Sal a gosto
  • 2 Cebolas
  • Papel alumínio
  • Azeite


Modo de Preparo:
Sprint 1 - Marinada:

Retire excesso de pelancas do pernil e faça vários furos para que o tempero penetre melhor na carne. Misture as 4 cabeças de alho amassadas com o suco das laranjas, o azeite, o cominho, o sal e o alecrim, e despeje sobre o pernil em uma vasilha. Espalhe toda a mistura, cubra com plástico filme e deixe descansar (eu deixei umas 8hs) na geladeira.

Sprint 2 - Levando ao Forno:

Agora aqueça o forno,  corte a cebola em rodelas e forre a bandeja. Coloque o pernil sobre elas, e banhe o pernil com parte da marinada, cubra a bandeja com papel alumínio e leve ao forno por 1h 30min a 2hs.

Sprint 3 - Dourando:

Remova o papel alumínio e banhe o pernil com o restante da marinada e devolva ao forno para dourar por alguns minutos.

Sprint 4 - Hora de matar a fome:

Oh my dog! agora é só saborear com um chora mamãe Whisky com gelo!


PS:   If driving do not drink! But if you drink, call me!


sábado, 14 de setembro de 2013

Fraldinha no Forno Six feet Under

Essa receita era para ter sido feita no 7 de setembro, mas por causa do feriado da independência desse pais de merda, fiquei sem carne! Hoje apesar da chuva conseguir ir na rua comprar a Fraldinha e de quebra achei uma costela de carneiro que em breve postarei aqui...
Essa receita de fraldinha  Six feet Under, é por causa dela ser enterrada no sal grosso.

Itensbacklog - Ingredientes:

  • + ou - 1 kg  Fraldinha 
  • 700g Sal grosso 






Modo de Preparo:
Sprint 1 - Cama de sal:


Espalhe um pouco de sal no recipiente que vai ser levado ao forno, deixando parecido com essa foto:


Sprint 2 - Six feet under:

Agora coloque a fraldinha com a parte da gordura virada para cima, e cubra com sal grosso. Se sua pressão for alta, não se preocupe... não vai ficar salgada... e se ficar não coma!


Agora leve ao forno por 1h 30min.

Sprint 3 - Exhume:

Após 1h e 30min, chegou a hora de exumar a carne! Remova todo o sal que cobre a carne, e para ficar melhor use uma tabua ou um prato para corta-la!



Sprint 4 - Hora de matar a fome:

Oh my dog! agora é só saborear com um cerveja bem gelada!



PS:   If driving do not drink! But if you drink, call me!

quarta-feira, 4 de setembro de 2013

Engenharia Reversar (descompilar) de Arquivos Jasper para JRXML


Rapazzz... não é que hoje o IReport conseguiu corromper um arquivo jrxml que estava quase pronto e passei o dia todo para implementar! Ainda bem que um herói, implementou o método writeReport na classe JRXmlWriter, que me permite 'descompilar' um arquivo jasper (jrxml compilado).

Veja como é simples. Você precisa carregar o objeto JasperReport  a ser compilado, e depois  passa-lo via parâmetro, junto com o diretório e nome do arquivo JRXML e seu tipo de codificação no método JRXmlWriter.writeReport.

File jasperFile = new File("D:\\java_lento_SQN.jasper");
        try {

            JasperReport report = (JasperReport) JRLoader.loadObject(jasperFile);

            JRXmlWriter.writeReport(report, "D:\\descompilado.jrxml", "UTF-8");

    } catch (JRException e) {

            e.printStackTrace();

    }
Pronto! você já tem um novo JRXML.

E como dizia um especialista em go horse process: 'por que informatica não é uma ciência exata?' (entendeu? nem eu!).

segunda-feira, 29 de julho de 2013

Imprimir Snapshot de Gráficos do Flex no IReport

Dica do dia:

 Olha que maravilha... Esses dias no trabalho eu estava precisando exibir/imprimir  Gráficos do Flex em pdf, e achei uma solução simples... Como eu ja tinha toda uma estrutura disponível e padronizada, resolvi enviar um Snapshot do gráfico para um servlet e utilizar a infra do Jasper para exibi-los.  Como fiz isso? Transformei um bitmap do gráfico em String codificada na base 64 e enviei via post para o servlet, e decodifiquei a String convertendo em um array de bytes para criar uma Image, e por fim passei por parâmetro para o meu relatorio jasper.


//FLEX 
/**
* Esse metodo recebe o parametro ChartBase (seu relatorio) retorna o Snapshot do grafico convertido em uma String.
* É criado BitmapData com as dimensões do gráfico, que codificado (PNGEncoder) em um ByteArray
* e depois codificado na Base 64.	
*/
public function getSnapshot(source :ChartBase):String{
		var bmp:BitmapData;		
		bmp = new BitmapData(source.width,source.height);
		bmp.draw(source);
		
		var encoderMan : PNGEncoder = new PNGEncoder();
		var byteArr:ByteArray = encoderMan.encode(bmp);
		var 64Encoder:Base64Encoder = new Base64Encoder();
		64Encoder.encodeBytes(byteArr);
		return 64Encoder.toString();//flush()
	}
/**
* Aqui eu invoco o método getSnapshot, setando o seu retorno em param.data , e envio via POST(ou GET) para meu servlet ou php
*/
public function sendImageString(chart :ChartBase):void{
		var header:URLRequestHeader = new URLRequestHeader();
		var param:URLVariables = new URLVariables();
		param.data = getSnapshot(chart);
		
		var urlRequest:URLRequest = new URLRequest("MINHA URL");
		urlRequest.requestHeaders.push(header);
		urlRequest.method = URLRequestMethod.POST;
		urlRequest.data = param;
		navigateToURL(urlRequest, "_blank");
	}	
No IReport crie um parâmetro IMG_GRAFICO do tipo java.awt.Image em seu Relatório, e adicione uma Imagem no Details (ou no lugar desejado) e configure suas propriedades como na imagem abaixo, passando o $P{IMG_GRAFICO} na Image Expression. Feito isso no meu Servlet eu precisarei fazer com que eu receba esse parâmetro e converta a String em Image:

//JAVA
public class MeuServlet extends HttpServlet {

	public MeuServlet(){}
	
	
	/**
	* Este metodo recebe o HttpServletRequest e recupera o parâmetro data que contém a imagem transformada em String.
	* Ele decodifica a Base 64 em um byte[] e retorna o ImageIcon.
	* 
	*/
	public ImageIcon converteStringToImage(HttpServletRequest request){
	
		String imageDataString = request.getParameter("data");
		byte[] imageByteArray = decodeImage(imageDataString);
		return new ImageIcon(imageByteArray);
	
	}
	/**
	 * Decodifica a String da imagem na base64 retornando um array de bytes
	 * 
	 * @param dataString
	 *            - a {@link java.lang.String}
	 * @return byte array
	 * @throws IOException
	 */
	public byte[] decodeImage(String dataString) throws IOException {
		BASE64Decoder decoder = new BASE64Decoder();
		return decoder.decodeBuffer(dataString);
		}

	protected void doPost(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		//Map(object,object)  de Parametro que será utilizado pelo Relatorio Jasper.					
	
		ImageIcon imageIcon = converteStringToImage(request,response, this.getServletContext());
		parametros.put("IMG_GRAFICO", imageIcon.getImage()); // Add a Image ao parâmetro do Relatório
		// ... Invocação do Relatório....
		}	
	}

segunda-feira, 8 de julho de 2013

Alterando tipos de extensões de arquivos de exportação do JasperViewer

Esse post foi escrito tão rápido quanto um coice de porco!

 Trata-se de definir algumas extensões de arquivos que o JasperViewer poderá exportar em seu relatório.

O JasperViewer tem a propriedade JRSaveContributor[] (que contém as extensões permitidas na exportação do relatório) que será percorrida, e sua descrição comparada aos elementos do List ALLOWED_FILE_TYPES. Caso não esteja contido, o objeto do JRSaveContributor[] será removido, fazendo com que somente seja exibido as extensões PDF, WORD, XLS, RTF, HTML, CSV ao usuário.
    private final String PDF = "PDF (*.pdf)";

    private final String RTF = "RTF (*.rtf)";

    private final String HTML = "HTML (*.htm, *.html)";

    private final String XLS = "Single sheet XLS (*.xls)";

    private final String CSV = "CSV (*.csv)";

    private final String WORD = "DOCX (*.docx)";

    private final List<String> ALLOWED_FILE_TYPES = Arrays.asList(PDF, WORD, XLS, RTF, HTML, CSV);
    private void setListAllowedFileTypes(JasperViewer viewer) {

        Field jrViewerField;

        try {

            jrViewerField = viewer.getClass().getDeclaredField("viewer");
            jrViewerField.setAccessible(true);

            JRViewer jrViewer = (JRViewer) jrViewerField.get(viewer);

            List<JRSaveContributor> saveOptions = Arrays.asList(jrViewer.getSaveContributors());

            Iterator<JRSaveContributor> it = saveOptions.iterator();

            while (it.hasNext()) {

                JRSaveContributor jsc = it.next();

                if (ALLOWED_FILE_TYPES.contains(jsc.getDescription())) {

                    continue;

                } else {

                    jrViewer.removeSaveContributor(jsc);

                }

            }

        } catch (Exception ex) {

            logger.error(ex.getClass().getName(), ex);

        }

    }

domingo, 30 de junho de 2013

Chambaril of Hell

Hoje é dia de uma comida leve..., uma daquelas que você nem termina de comer e já está batendo a fraqueza... Chambaril of Hell com pirão !!!

Itensbacklog - Ingredientes:

  • + ou - 1 kg  Chambaril de Boi ou Búfalo
  • 1 Cebola
  • 4 dentes de Alho
  • Coentro
  • Cebolinha
  • Pimenta do Reino a gosto
  • Sal a gosto
  • 1/2 xicara de Cachaça ou vinho tinto
  • 1 colhe de sopa Extrato de Tomate
  • Vinagre
  • Manteiga
  • 4 pedaços de Jerimum
  • 1 Tomante
  • 2 Batatinha
  • 1 Cenoura

Modo de Preparo:
Sprint 1 - Lave e Tempere:

Tempere o chambaril um pouco de vinagre, o sal, a pimenta do reino, o coentro e cebolinha, e deixe descansar, pelo tempo que você vai levar cortar a cebola em cubos, a tomate em fatias e lavar e descascar a cenoura, o jerimum, e as batatinhas.


Sprint 2 - Esquentando o bucho no fogão:

Pique a cebola e os dentes de alho e leve ao fogo para dourar na manteiga em uma panela de pressão. Depois jogue a carne na panela para dar uma dourada dos dois lados... e quando estiver dourada, posicione o buraco do osso para cima, para que o tutano não caia, e acrescente a tomate, o coentro, a cebolinha, meia xícara de cachaça e água(até cobrir a carne), e deixe cozinhando na pressão por uns 25min. Verifique se a carne está mole, e caso precise cozinhe mais um pouco, mas tomando cuidado para não cozinhar muito e a carne soltar do osso!

Sprint 3 - Analisando a Presepada e Adicionando Legumes:

Após os 25min ou mais de pressão, desligue o fogo, tire a pressão da panela, e adicione os legumes e um 1 colher de Extrato ou molho de tomate. Verifique como ficou o sal.... E cozinhe por mais 5min na pressão!

Sprint 4 - Hora de matar a fome:

Resolvi fazer aquele velho pirão com um arroz a grega para acompanhar, e tomar um latão uma dose de cachaça para abrir o apetite for destruction!



PS:   If driving do not drink! But if you drink, call me!

sexta-feira, 28 de junho de 2013

Repositório de Código GIT com Google Drive (Disco) e Insync




Mamíferos! Para quem está liso como eu, e não tem alguns dólares para manter um Repositório de Códigos particular, arrumei uma solução que quebra um galho danado! Utilizar o espaço gratuito que Goooooooogle fornece, como Repositório GIT através do Drive (ou Disco) ou Insync! 


Primeiramente, baixe o google Drive (ou Disco)! Lógico, você também precisa de uma conta Google, para fazer a sincronia, entre seu PC e os servidores do Google.

Para Usuários Linux como eu( Ubuntu 13.04)... Eu instalei o Insync . Faça o login para autorizar o app a trabalhar com sua conta, e edite o arquivo /home/MEU USUARIO/.config/Insync/ignore-local.json, e mude a linha "starts-with": ["."] to "starts-with": [] e restarte o Insync. (isso evitará problemas com a sincronia de arquivos iniciados por ponto ).

Já dizia o Ramones: “One, tow, three, four...” , vamos a criação do repositório no netbeans!
Crie um projeto e mova-o para a pasta do Google drive que fará a sincronia ex: C:\drive\Google Drive\Projetos.
Agora clique com o botão direito do mouse sobre o projeto >> Controle de Versão >> Inicializar Repositório GIT, como na imagem abaixo.

Após inicializar o Repositório, clique com o botão direito do mouse sobre o projeto, e agora selecione a opção >> GIT >> Fazer Commit... Para versionar a estrutura inicial do projeto.


Feito o commit inicial, delete o projeto. NÃO MARQUE A OPÇÃO “Deletar também as origens da pasta.....”. Deleto os arquivos do projeto netbeans porque o projeto já foi comitado, e não vi necessidade de trabalhar no projeto na mesma pasta do repositório. 
Remova também os arquivos que sobraram, deixando  somente o diretório .git, como na imagem:

Agora vamos fazer o Clone do projeto da seguinte forma:

Selecione a pasta do Repositório:




E finalmente o diretório de destino do projeto:
Pronto agora você já tem um clone do projeto, e um repositório gratuito! Isso para mim foi uma maravilha, já que perdir 400gb de arquivos no meu hd recentemente...

Pensamento Ideotecnológico:
“Porque a informática não é uma ciência exata?....”(P. Poeta)

segunda-feira, 3 de junho de 2013

Aprendendo a instalar e criar máquinas virtuais no VirtualBox

Nessa postagem você irá aprender a instalar e criar máquinas virtuais no VirtualBox. O VirtualBox é um software de virtualização, caso você ainda não saiba o que é virtualização, sugiro a leitura do post "Entendendo um pouco sobre virtualização".

Instalação do VirtualBox

Primeiro é necessário fazer o download do instalador do VirtualBox em: https://www.virtualbox.org/wiki/Downloads. Depois execute-o. E abaixo são apresentadas as imagens do passo-a-passo de instalação.

Fonte:  próprio autor.
Fonte: próprio autor.
Fonte: próprio autor.
Fonte: próprio autor.
Fonte: próprio autor.
Fonte: próprio autor.
Fonte: próprio autor.

Note que na última tela do processo de instalação, foi deixado a opção "Start Oracle VM VirtualBox..." marcada, o que irá fazer com que o software seja executado logo em seguida.



Criando uma máquina virtual no VirtualBox

Ao startar o VirtualBox será visualizada a seguinte tela:

Fonte: próprio autor.


Clique no botão Novo, para criar uma nova virtual machine (VM), ou simplesmente máquina virtual.
Fonte: próprio autor.


Observe os campos e opções dessa primeira tela da criação da VM:
  • Nome: campo onde é posto o nome da VM. O ideal é que o nome atribuído tenha haver com o sistema operacional que será instalado, ou ainda com os serviços que serão oferecidos pela mesma. As sugestões são mais por uma questão de organização mesmo. Interessante também lembrar que VMs como nomes repetidos não são aceitos e um erro será retornado.
  • Tipo: campo onde é possível selecionar qual o tipo de sistema operacional que a VM possuirá. Dentre as opções disponíveis, encontram-se os mais conhecidos: Linux, Windows e MAC.
  • Versão: deve-se informar a versão do sistema operacional que será instalado. Há várias opções suportadas pelo VirtualBox variando de acordo com o tipo do mesmo.

Fonte: próprio autor.


Agora informe a quantidade de memória RAM que será atribuída a VM, a mesma deve ser escrita em MB. Antes verifique os requisitos mínimos de instalação do sistema operacional que deseja instalar e não esqueça de considerar também a configuração da máquina física onde está realizando essa operação. 

Fonte: próprio autor.


Vejamos as opções de configuração:
  • Não acrescentar um disco rígido virtual: opção usada para os casos em que a VM é criada sem HD virtual.
  • Criar um disco rígido virtual agora: mais comumente usado quando se está criando uma VM do zero. Equivale a criação da VM + HD virtual.
  • Utilizar um disco rígido virtual existente:  nessa opção é criada uma VM, mas não um HD virtual. Opção interessante para quem reutiliza muitos HDs virtuais. Deve-se informar onde está o HD já existente, clicando no ícone de uma pequena pasta que é apresentada no canto direito da tela na figura exibida abaixo.

Fonte: próprio autor.


Nessa fase da configuração você escolhe o tipo de arquivo do HD. Veja que essa versão 4.2.12 do VirtualBox aqui usada suporta seis tipos de arquivos.
  • VDI: formato padrão do VirtualBox;
  • VMDK: formato utilizado pela VMware;
  • VHD: formato usado pela Microsoft;
  • HDD: formato usado pelo MacOS;
  • QED: formato que suporta um apoio a arquivos e imagens esparsas http://wiki.qemu.org/Features/QED;
  • QCOW: formato que permite uma variedade de discos que são geralmente associados a sistemas operacionais específicos.

Fonte: próprio autor.


Há dois modos de armazenamento do disco virtual, o dinamicamente alocado e o de tamanho fixo.
  • Dinamicamente alocado: o disco virtual vai ocupando gradativamente espaço no disco da máquina física. Opção interessante para quem instala várias máquinas para fazer testes, porque acaba deixando o DH físico mais livre.
  • Tamanho fixo: automaticamente o espaço é alocado para a VM e não pode mais ser usado pela máquina física. Interessante para VM que irá oferecer algum serviço na rede.

Fonte: próprio autor.


Defina o tamanho do disco virtual e depois clique em criar, mais uma vez é recomendado saber os requisitos mínimos do sistema operacional que irá instalar na VM.

Fonte: próprio autor.


Agora será possível enxergar a primeira VM, como ilustra a figura abaixo:

Fonte: próprio autor.



Executando a primeira VM


Selecione a VM e clique em Exibir.
Fonte: próprio autor.


No primeiro momento é necessário informar por qual dispositivo irá inicializar a VM. Se for fazer a instalação por um CD, basta selecionar o drive de CD. Caso queira fazer a instalação por uma imagem .iso, clique na pasta e informe onde está a imagem .iso e depois selecione Abrir. Agora é só clicar em Iniciar que a VM dará o boot pelo CD ou pela imagem .iso selecionada. A partir de agora o processo de instalação irá variar  de acordo com o sistema operacional que estiver configurando. Caso queira ver o procedimento de instalação do Windows Server 2008, visite o link: http://receitastecnologicas.blogspot.com.br/2013/03/windows-server-2008-conhecendo-e.html

Fonte: próprio autor.


Para mais informações sobre o VirtualBox consulte seu manual em: https://www.virtualbox.org/manual/UserManual.html.