Java Shortcuts – Library to streamline routine tasks in Java

Java Shortcuts – Library to streamline routine tasks in Java

Already got sick of typing System.out.println() ever?

So maybe this could be the beginning of a good friendship between you and the Java project Shortcuts.

Shortcuts In Java you can do the same with $.println() and much more.

Visit the project repository on GitHub (https://github.com/pydawan/java-shortcuts) and feel free to download the project and collaborate.

 

Java Shortcuts – Biblioteca para agilizar tarefas rotineiras em Java.

Já ficou de saco cheio de digitar System.out.println() alguma vez?

Então talvez esse pode ser o início de uma boa amizade entre você e o projeto Java Shortcuts.

No Java Shortcuts você pode fazer o mesmo com $.println() e muito mais.

Acesse o repositório do projeto no GitHub (https://github.com/pydawan/java-shortcuts) e sinta-se a vontade para fazer o download do projeto e colaborar.

GSGen – Getter and Setter Generator

GSGen is a Generator of get and set methods for Java Projects, it was written in Java language.

This is a simple project but it can be useful for someone in some way, especially for those who have projects based on command line.

This project is hosted on GitHub at: https://github.com/pydawan/gsgen

GSGen é um Gerador de métodos get e set para projetos Java, ele foi escrito na linguagem Java.

Esse é um simples projeto mas ele pode ser útil para alguém de alguma forma, especialmente para aqueles que tem projetos baseados em linha de comando.

Esse projeto está hospeado no GitHub em: https://github.com/pydawan/gsgen

Implementação do Django ORM em Java

Olá camaradas!

Há alguns meses atrás estava implementando o ORM do Django (https://docs.djangoproject.com/en/dev/topics/db/models/) em linguagem Java e adicionando algumas características no mesmo.

Foi uma experiência bacana pelo aprendizado que me proporcionou, porém não disponho de tanto tempo para evoluir o projeto e sozinho o negócio fica mais crítico ainda. Necessito de ajuda! rs.

Estou disponibilizando a biblioteca, nesse link (java_django) e espero que seja de algum valor para quem vier a obtê-la. Ela está sendo disponibilizada sem cobrar um vintém portanto só peço que valorize as horas que gastei nesse projeto mantendo a autoria ou mencionando o autor caso faça modificaçoes.

Aos que estiverem interessados em colaborar para evoluir esse projeto e compartilhar conhecimento em breve estarei criando um repositório para o mesmo e vou informar o endereço do mesmo aqui.

Volto a salientar que esse projeto tem por objetivo o conhecimento mas seria muito bacana ver várias pessoas usufruindo do mesmo.

Abraços.

PyDAO – Simples framework ORM em Python baseado no design pattern DAO.

ORM (Object-Relational Mapping) é uma técnica comumente utilizada para conversão das representações dos dados entre o Modelo Relacional em um banco de dados relacional e o modelo Orientado a Objetos. Esses modelos são ditos paradigmas pois eles definem a forma como os dados são representados e vistos pelo analista de sistema ou desenvolvedor de software. Desenvolvi um simples framework ORM em Python que utiliza o design pattern DAO (Data Access Object). Esse é um design pattern simples e bastante difundido que define objetos que encapsulam a lógica de acesso aos dados.
O PyDAO surgiu com a finalidade de suprir minhas necessidades e em breve irei disponibilizá-lo pois talvez possa ser útil para outros.
Ele provê suporte aos seguintes bancos de dados relacionais: SQLite, MySQL, PostgreSQL e Oracle.
Em um futuro próximo também fará parte dessa lista o Microsfot SQL Server.
Existem diversas soluções mais completas que este framework mas se você está começando no Python esse framework pode ser bastante útil na sua jornada de aprendiz, assim como foi para mim.

Orientação a Objetos em Python

Segue o exemplo de uma classe em Python que abstrai uma pessoa.
Nesse exemplo também são usadas properties e são definidos métodos para apresentação dos dados nos formatos: CSV, JSON e XML.

#!/usr/bin/env python
#-*- encoding: utf-8 -*-

# Autor: Thiago Alexandre Martins Monteiro
# Local: Goiânia/Goiás/Brasil
# Data: 01/11/2012


class Pessoa(object):
    """
    Classe que é uma abstração computacional da entidade pessoa no mundo real.
    """

    def __init__(self, nome='', sobrenome='', idade=0):
        """
        Construtor da classe.
        """
        self.__nome = nome
        self.__sobrenome = sobrenome
        self.__idade = idade

    # getters
    def get_nome(self):
        """
        Método que retorna o nome da pessoa.
        """
        return self.__nome

    def get_sobrenome(self):
        """
        Método que retorna o sobrenome da pessoa.
        """
        return self.__sobrenome

    def get_idade(self):
        """
        Método que retorna a idade da pessoa.
        """
        return self.__idade

    # setters
    def set_nome(self, nome):
        """
        Método que define o nome da pessoa.
        """
        self.__nome = nome

    def set_sobrenome(self, sobrenome):
        """
        Método que define o sobrenome da pessoa.
        """
        self.__sobrenome = sobrenome

    def set_idade(self, idade):
        """
        Método que define a idade da pessoa.
        """
        self.__idade = idade

    def to_csv(self):
        """
        Método que retorna o estado de um objeto (os valores armazenados em seus atributos)
        no formato CSV (Comma Separated Values - Valores Separados por Vírgulas).
        """
        csv_out = ''

        for v in self.__dict__.values():
            csv_out += '%s,' % v
        csv_out = csv_out[:-1]
        return csv_out

    def to_xml(self):
        """
        Método que retorna o estado de um objeto no formato XML (Extensible Markup Language - Linguagem de Marcação
        Extensível).
        """
        open_tag = '<%s>' % self.__class__.__name__.lower()
        close_tag = '</%s>' % self.__class__.__name__.lower()
        xml_out = open_tag

        for k, v in self.__dict__.items():
            xml_out += '<%s>%s</%s>' % (k.lower(), v, k.lower())
        xml_out += close_tag
        xml_out = xml_out.replace('_%s__' % (self.__class__.__name__.lower()), '')
        return xml_out

    def to_json(self):
        """
        Método que retorna o estado de um objeto no formato JSON (JavaScript Object Notation - Notação de Objetos
        JavaScript).
        """
        json_out = '{'

        for k, v in self.__dict__.items():
            if type(v).__name__ == 'int':
                json_out += "'%s': %d, " % (k, v)
            else:
                json_out += "'%s': '%s', " % (k, v)
        # Retira vírgula e espaço em branco do último par (atributo: valor) do objeto.
        json_out = '%s%s' % (json_out[:-2], '}')
        json_out = json_out.replace('_%s__' % self.__class__.__name__, '')
        return json_out

    def __repr__(self):
        return 'Nome completo: %s %s \nIdade: %d' % (self.get_nome(), self.get_sobrenome(), self.get_idade())

    # properties
    nome = property(get_nome, set_nome, doc='Propriedade para retorno e definição do nome da pessoa.')
    sobrenome = property(get_sobrenome, set_sobrenome, doc='Propriedade para retorno e definição do sobrenome da pessoa.')
    idade = property(get_idade, set_idade, doc='Propriedade para retorno e definição da idade da pessoa.')

if __name__ == '__main__':
    import os

    os.system('clear')
    p = Pessoa('Thiago Alexandre', 'Martins Monteiro', 29)
    print p
    p.nome = 'Joe'
    p.sobrenome = 'Satriani'
    p.idade = 56
    print p
    print '\n\033[033mAPRESENTANDO OS DADOS DA PESSOA EM DIVERSOS FORMATOS\033[0m'
    print '1 - CSV'
    print p.to_csv()
    print '2 - XML'
    print p.to_xml()
    print '3 - JSON'
    print p.to_json()

Função para leitura de arquivos CSV

Esse script contém uma função para leitura de arquivos no formato CSV e retorno de uma lista de tuplas (cada tupla corresponde a uma linha do arquivo).

#!/usr/bin/env python
#-*- encoding: utf-8 -*-

import os
import sys

def ler_arquivo():
    # Lê o nome do arquivo e retira os espaços em branco de suas extremidades
    file_name = raw_input('Nome do arquivo: ').strip()

    # Verifica se o arquivo existe no sistema de arquivos
    if not os.path.exists(file_name):
        print 'ERRO: Arquivo inexistente!'
        sys.exit()

    # Abre o arquivo em modo de leitura
    file = open(file_name, 'r')
    content = []
    line = []
    field = ''

    while 1:
        char = file.read(1) # Le um caracter (1 byte)
        # Caso seja EOF
        if not char:
            break # interrompe o loop
        else:
            field += char
            if char == ',':
                line.append(field[:-1]) # remove a vírgula
                field = ''
            if char == '\n':
                if field and field != '\n':
                    line.append(field[:-1])
                    field = ''
                if line:
                    content.append(tuple(line))
                    del line[:] # limpa a linha
    # Retorna o conteúdo do arquivo lido
    return content


if __name__ == '__main__':
    os.system('clear')
    print ler_arquivo()

Soma, média, variância e desvio padrão de uma lista de números com Python

#!/usr/bin/env python
#-*- encoding: utf-8 -*-

# Autor: Thiago Monteiro
# Data: 10/10/2012
# Local: Goiânia/Goiás/Brasil

import math, os, sys

def calcular(valores=None, calculos=None):
	if valores:
		if valores.__class__.__name__ == 'list' and calculos.__class__.__name__ == 'dict':
			def somar(valores):
				soma = 0
				for v in valores:
					soma += v
				return soma


			def media(valores):
				soma = somar(valores)
				qtd_elementos = len(valores)
				media = soma / float(qtd_elementos)
				return media


			def variancia(valores):
				_media = media(valores)
				soma = 0
				_variancia = 0

				for valor in valores:
					soma += math.pow( (valor - _media), 2)
				_variancia = soma / float( len(valores) )
				return _variancia


			def desvio_padrao(valores):
				return math.sqrt( variancia(valores) )
				

			calculos['soma'] = somar(valores)
			calculos['media'] = media(valores)
			calculos['variancia'] = variancia(valores)
			calculos['desvio_padrao'] = desvio_padrao(valores)


if __name__ == '__main__':
	os.system('clear')
#	valores = range(1, 16)
	valores = [7, 5, 3]
	calculos = {}
	calcular(valores, calculos)
	print 'VALORES INFORMADOS: %s' % valores
	print 'SOMA => %d' % calculos['soma']
	print 'MÉDIA => %.2f' % calculos['media']
	print 'VARIÂNCIA => %.2f' % calculos['variancia']
	print 'DESVIO PADRÃO => %.2f' % calculos['desvio_padrao']

Lista única a partir de uma lista de listas em Python

Esse é um simples programa em Python que cria uma lista única a partir de uma lista de listas.

#!/usr/bin/env python
#-*- encoding: utf-8 -*-

# Autor: Thiago Monteiro
# Data: 10/10/2012
# Local: Goiânia/Goiás/Brasil

import os, sys


def criar_lista_unica(lista_de_listas=[]):
	lista_unica = None
	if lista_de_listas:
		lista_unica = []
		for lista in lista_de_listas:
			for item in lista:
				lista_unica.append(item)
	return lista_unica


if __name__ == '__main__':
	while(True):
		os.system('clear')
		print '\033[33mPROGRAMA QUE CRIA UMA LISTA ÚNICA A PARTIR DE UMA LISTA DE LISTAS\033[0m\n'
		print 'INFO => Para finalizar o programa informe 0 como a quantidade de listas a serem inseridas na lista principal.\n'
		print '=> Informe os dados a seguir de acordo com os passos abaixo:'
		passo = 1
		quantidade_listas = int( raw_input('%do. => Quantidade de listas a serem inseridas na lista de listas: ' % passo) )
		if quantidade_listas == 0:
			break
		passo = passo + 1
		lista_de_listas = []
		for q in range(0, quantidade_listas):
			lista_de_listas.append( input('%do. => %da. lista => ' % (passo, q + 1) ) )
			passo = passo + 1
		print '\n%do. => CRIANDO UMA LISTA ÚNICA COM A LISTA DE LISTAS' % passo
		passo = passo + 1
		print '\n%do. => RESULTADO: %s\n' % (passo, criar_lista_unica(lista_de_listas) )
		print 'INFO => Pressione ENTER para continuar'
		sys.stdin.read(1)

Programa em C similar ao comando nl do GNU/Linux

Esse é um simples programa em C que lê um arquivo texto e mostra o conteúdo do mesmo na saída padrão.
Ele faz isso numerando cada linha e a saída é colorida.

/*
 * Programa: dog
 * Arquivo: dog.c
 * Desenvolvedor: Thiago Monteiro
 * Data: 05/11/2010
 * Local: Goiania/Goias/Brasil
 *
 * DESCRICAO
 *
 *	Este e um programa de funcionamento semelhante ao comando cat
 *	do Linux.
 */

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(int argc, char **argv)
{
 	FILE *fp;
	char *path;
 	char linha[250];
  	int register i = 0;

  	system("clear");

  	path = argv[1];

	if (argc == 2) {
		if ( (strcmp(argv[1], "--help") == 0) || (strcmp(argv[1], "-h") == 0) )  {
			fprintf(stdout, "Uso: dog <path/file>\n\n");
			fprintf(stdout, "Desenvolvido por: Thiago Monteiro\n\n");
			exit(0);
		}
	}

  	if ( !(fp = fopen(path, "r") ) ) {
    		fprintf(stderr, "ERRO: O arquivo a ser lido não foi informado.\n");
		fprintf(stdout, "Para obter ajuda digite dog --help\n");
    		exit(1);
  	}

  	printf("\033[0;32mArquivo:\033[0m %s\n", path);
  	while( fgets(linha, 250, fp) )
    		fprintf(stdout, "\033[0;33m%d\t\033[0m%s", ++i, linha);
  	fclose(fp);

  	return(0);
}