Pular para o conteúdo
24 de fevereiro de 2014 / rafaelti

Linguagem R

Objetivo

Instalar e utilizar a Linguagem R

Plataforma

Linux e Linguagem R

Conhecimento

Linux e Linguagem R

Introdução

A linguagem R é largamente usada entre estatísticos e data miners para desenvolver software de estatística e análise de dados.

Solução

Há um guia para instalar facilmente R no Ubuntu. Para verificar o poder do R vamos utilizar o pacote igraph. Para instalar os pacotes no R é fácil também ele utiliza o CRAN (Comprehensive R Archive Network) onde se encontra a maioria dos pacotes. Utilizar o R pode ser feita via comando ou arquivo. Vamos utilizar comando.

Iniciar R execute.

$ R

Instalar o pacote igraph via CRAN

> install.packages("igraph")

Importar ao ambiente o pacote

> library("igraph")

Gerar um grafo

> str(g2)

Imprimir graficamente o grafo

> plot.igraph(g2)

Isto é uma das várias funcionalidades que o R proporciona

9 de janeiro de 2014 / rafaelti

Twitter Bootstrap CDN

Twitter Bootstrap CDN

CDN do bootstrap

http://glyphicons.getbootstrap.com/

CDN do Font Awesome

http://glyphicons.getbootstrap.com/#tab_fontawesome

CDN do Bootswatch

http://glyphicons.getbootstrap.com/#tab_bootswatch

22 de outubro de 2013 / rafaelti

Guia Oracle – Sequence

Guia Oracle – Sequence

Guia com informações do oracle

Trabalhando com sequence

Verificar quais sequences existem.

select * from all_sequences;
select * from user_sequences;

Sintaxe para criar sequence

CREATE SEQUENCE sequence_name
  MINVALUE value
  MAXVALUE value
  START WITH value
  INCREMENT BY value
  CACHE value;

Gerar próximo valor

select se_test.nextval from dual;

Ou simplesmente pode chamar de dentro de um insert

INSERT INTO teste
(id, name)
VALUES
(se_test.nextval, 'test');

Alterar o lastnumber do sequence

alter sequence se_test
increment by 124;

select se_test.nextval from dual;

alter sequence se_test
increment by 1;

Referência oficial

Na página da Oracle
Related Views

  • DBA_SEQUENCES describes all sequences in the database.
  • USER_SEQUENCES describes all sequences owned by the current user. This view does not display the SEQUENCE_OWNER column.
Column Datatype NULL Description
SEQUENCE_OWNER VARCHAR2(30) NOT NULL Owner of the sequence
SEQUENCE_NAME VARCHAR2(30) NOT NULL Sequence name
MIN_VALUE NUMBER Minimum value of the sequence
MAX_VALUE NUMBER Maximum value of the sequence
INCREMENT_BY NUMBER NOT NULL Value by which sequence is incremented
CYCLE_FLAG VARCHAR2(1) Indicates whether the sequence wraps around on reaching the limit (Y) or not (N)
ORDER_FLAG VARCHAR2(1) Indicates whether sequence numbers are generated in order (Y) or not (N)
CACHE_SIZE NUMBER NOT NULL Number of sequence numbers to cache
LAST_NUMBER NUMBER NOT NULL Last sequence number written to disk. If a sequence uses caching, the number written to disk is the last number placed in the sequence cache. This number is likely to be greater than the last sequence number that was used.
20 de agosto de 2013 / rafaelti

Kick Ass App – Destrua a páginas que não goste

Uma dupla construíram um ferramenta poderoso para desestressar. Kick Ass App você literalmente destrói a página que está visitando com uma navinha tipo Galaga.

http://kickassapp.com/

27 de julho de 2013 / rafaelti

Criador de URL do google

Ótima ferramenta para criar URL e ajudar no SEO

https://support.google.com/analytics/answer/1033867?hl=pt-BR

22 de maio de 2013 / rafaelti

ZF2 paginação no banco de dados

Objetivo

Criar paginação no banco de dados utilizando o Zend Framework 2

Plataforma

PHP e ZF2

Conhecimento

PHP e ZF2

Introdução

Quando as aplicações ficam grandes as requisições aos BDs crescem e devemos refatorar o código para otimizar essas requisições. Uma das atitudes a ser feita é a paginação no BD.

Solução

Para paginar no ZF2 devemos utilizar o método offset da classe Select.

public function fetchAll($offset = -1, $limit = -1, $searchField = '', $searchString = '', $searchOper = '') {
        $select = new \Zend\Db\Sql\Select;
        $select->from($this->tableGateway->table);
        if ($offset >= 0 && $limit >= 0) {
            $select->offset($offset)->limit($limit);
        }
        /*
          odata : ['equal', 'not equal', 'less', 'less or equal', 'greater', 'greater or equal', 'begins with', 'ends with', 'contains'],
          // if you want to change or remove the order change it in sopt
          sopt: null // ['bw','eq','ne','lt','le','gt','ge','ew','cn']
          by default all options are allowed. The codes are as follow:
          bw - begins with ( LIKE val% )
          eq - equal ( = )
          ne - not equal ( <> )
          lt - little ( < )
          le - little or equal ( <= )
          gt - greater ( > )
          ge - greater or equal ( >= )
          ew - ends with (LIKE %val )
          cn - contain (LIKE %val% )
         * 
         */
        if (!is_array($searchField))
            $searchField = array($searchField);

        if (!is_array($searchString))
            $searchString = array($searchString);

        if (!is_array($searchOper))
            $searchOper = array($searchOper);


        for ($i = 0; $i < count($searchField); $i++) {
            if (!Empty($searchField[$i])&& !Empty($searchOper[$i])) {
                //Empty($searchString[$i]) 
                switch ($searchOper[$i]) {
                    case "cn":
                        $select->where->like($searchField[$i], "%$searchString[$i]%");
                        break;
                    case "ge":
                        $select->where->greaterThanOrEqualTo($searchField[$i], $searchString[$i]);
                        break;
                    case "eq":
                        $select->where->equalTo($searchField[$i], $searchString[$i]);
                        break;
                }
            }
        }
        //$sqlString = $select->getSqlString();
        //var_dump($select->getSqlString());

        $resultSet = $this->tableGateway->selectWith($select);
        $resultSet->buffer();
        $resultSet->next();
        return $resultSet;
    }
26 de abril de 2013 / rafaelti

Oracle sqlcode = 100

A exceção PL/SQL  irá retornar o erro ORA-01403,  logo é necessário testar sqlcode para ver se o mesmo é igual a 100.

O sqlcode=100 é erro mais capicioso no PL/SQL,  o “no data found” é uma expressão booleana.  Por exemplo, se o banco de dados retorna o SQLCODE=100, a variável do PL/SQL  NO_DATA_FOUND será  TRUE.

19 de fevereiro de 2013 / rafaelti

Generic CRUD Service – CRUD Session Bean EJB

Objetivo

Criar um Session Bean para cuidar dos CRUDs da aplicação.

Plataforma

Java, EJB 3, GlassFish

Conhecimento

Java, EJB 3

Introdução

Alguns design patterns são complicados demais para fazer coisas simples, encontrar um jeito fácil de criar CRUD é essencial.

Solução

A melhor forma que encontrei é o Generic CRUD Service que facilita bastante.

@Stateless
@TransactionAttribute(TransactionAttributeType.REQUIRED)
public class CrudService implements GenericCrudService {

	@PersistenceContext
	EntityManager em;

	@Override
	public <T> T create(T t) {
		em.persist(t);
		em.flush();
		em.refresh(t);
		return t;
	}

	@Override
	public <T> T find(Class<T> type, Object id) {
		return (T) em.find(type, id);
	}

	@Override
	public <T> void delete(T t) {
		t = em.merge(t);
		em.remove(t);
	}

	@Override
	public <T> T update(T t) {
		return (T) em.merge(t);
	}

	@Override
	public void delete(Class type, Object id) {
		Object ref = em.getReference(type, id);
		em.remove(ref);

	}

	@Override
	public List findWithNamedQuery(String queryName) {
		return em.createNamedQuery(queryName).getResultList();
	}

	@SuppressWarnings("rawtypes")
	@Override
	public List findWithNamedQuery(String queryName, int resultLimit) {
		return em.createNamedQuery(queryName).setMaxResults(resultLimit)
				.getResultList();
	}

	public List findByNativeQuery(String sql, Class type) {
		return em.createNativeQuery(sql, type).getResultList();
	}

	@Override
	public List findWithNamedQuery(String namedQueryName, Map parameters) {
		return findWithNamedQuery(namedQueryName, parameters, 0);
	}

	@Override
	public List findWithNamedQuery(String namedQueryName, Map parameters,
			int resultLimit) {

		return findWithNamedQuery(namedQueryName, parameters, 0, resultLimit);

	}

	public List findWithNamedQuery(String namedQueryName, Map parameters, int startPosition,
			int resultLimit){

		// Set rawParameters = parameters.entrySet();
		Query query = em.createNamedQuery(namedQueryName);

		if (startPosition > 0) {
			query.setFirstResult(startPosition);
		}

		if (resultLimit > 0) {
			query.setMaxResults(resultLimit);
		}

		for (final Entry entry : (Set<Entry>) parameters.entrySet()) {
			query.setParameter((String) entry.getKey(), entry.getValue());

		}
		return query.getResultList();
	}
}

Para usar GenericCrudService

public GenericCrudService getCrudService() {

		GenericCrudService sf = null;

		try {
			javax.naming.Context ctx;
			ctx = new javax.naming.InitialContext();
			 sf = (GenericCrudService) ctx
					.lookup("java:global/prjEAR/prjEJB/CrudService!br.com.prj.GenericCrudService");

		} catch (NamingException e) {
			e.printStackTrace();
		}
		return sf;
	}
1 de fevereiro de 2013 / rafaelti

ZF2 – Customizar mensagem de autenticação

Objetivo

Modificar as mensagens após a tentativa de autenticação no Zend Framework 2/ZF2

Plataforma

PHP, ZF2

Conhecimento

PHP, ZF2

Introdução

O Zend Framework fornece-nos um conjunto de mensagens padrões e essas mensagem pode não estar adequada ao nosso público, assim sendo se faz necessário a modificação das mesmas.

Solução

A melhor forma que encontrei até agora é interceptar o código da mensagem como no exemplo abaixo.

/Use set
use Zend\Authentication\Result as AuthenticationResult;
//...
//Your method and code
$result = $this->getAuthService()->authenticate();
                switch ($result->getCode()) {

                    case AuthenticationResult::FAILURE_IDENTITY_NOT_FOUND:
                        $messages[] = 'Email ou senha incorretos.';
                        break;

                    case AuthenticationResult::FAILURE_CREDENTIAL_INVALID:
                        $messages[] = 'Email ou senha incorretos.';
                        break;

                    case AuthenticationResult::SUCCESS:
                        $messages[] = 'Logado com sucesso.';
                        break;

                    default:
                        $messages = $result->getMessages();
                        break;
                }
                foreach ($messages as $message) {
                    if(!Empty($message))
                        $this->flashmessenger()->addMessage($message);
                }
17 de janeiro de 2013 / rafaelti

Renderizando o FeedbackPanel da Page do Wicket através de um Panel através do AJAX

Objetivo

Renderizar o FeedBackPanel de uma page onde panel é filho através do AJAX.

Plataforma

Java, Wicket 6

Conhecimento

Java, Wicket, Container/Servidor Java

Introdução

Ao componentizar é necessario atualizar informação que pode não estar dentro do componente, no caso de exemplo é o panel.

Solução

No caso é só pegar a page em que o panel está inserido como exemplo abaixo

public class FooSearchForm extends Panel {
	/*
	*Code
	*
	*
	*/
	public FooSearchForm(String id) {
		super(id);

		setGrid(searchField);

		final Form<Void> frmSearch = new Form<Void>("frmSearch");

		frmSearch.add(new AjaxButton("ajaxSubmit") {
			@Override
			protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
				setGrid(searchField);

				info("FeedbackPanel updated");

				target.add(FooSearchForm.this);
				Layout l = (Layout)FooSearchForm.this.getPage();
				target.add(l.feedbackPanel);

			}

		}
		//More code!!!
	}
	//More code!!!
}

O Layout é a classe que toda page herda e que o FeedbackPanel fica, ao  chamar o target.add forçamos renderizar o mesmo.


														
Seguir

Obtenha todo post novo entregue na sua caixa de entrada.

Junte-se a 100 outros seguidores