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 drinkcall 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 drinkcall 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);

        }

    }