Um pequeno depósito de receitas simples, que ajudam no dia a dia...
Programadores JAVA que não sabem OO vivem fazendo isso...
Gerar link
Facebook
X
Pinterest
E-mail
Outros aplicativos
-
Veja o código que encontrei em uma aplicação open source famosa:
static double[] getValues(double[] source, int index) { double[] result = new double[obj.size() - 1];
int index = obj.getIndex(); if (index == 0) {
for(int i=1 ; i result[i-1] = values[i]; }
} else {
if (index == result.length) {
for(int i=0 ; i result[i] = values[i]; }
} else {
for(int i=0 ; i
result[i] = values[i]; }
for(int i=index-1 ; i result[i] = values[i+1]; }
}
} }
Esse código é chamado milhares de vezes para um conjunto de registros... sendo que a maior frequência dos casos ocorre para a segunda condição.... me pergunto, qual a dificuldade em optar por duas soluções: 1) duplicar os dados sem o elemento do vetor desejado (no problema o valor do index é constante para cada conjunto de dados), ou 2) usar um pouco dos recursos da OO:
static interface ConvertArray {
double[] convert(double[] source, int ignoreIndex);
}
static class ClassFirstPos implements ConvertArray {
public double[] convert(double[] source, int ignoreIndex) {
return Arrays.copyOfRange(source, 1, source.length);
}
}
static class ClassLastPos implements ConvertArray {
public double[] convert(double[] source, int ignoreIndex) {
return Arrays.copyOfRange(source, 0, source.length-1);
}
}
static class ClassOtherPos implements ConvertArray {
public double[] convert(double[] source, int ignoreIndex) {
double[] result = new double[source.length - 1];
System.arraycopy(source, 0, result, 0, ignoreIndex - 1);
System.arraycopy(source, ignoreIndex, result, ignoreIndex - 1, result.length - ignoreIndex + 1);
return result;
}
}
E para quem quiser testar as pequenas diferenças....
public static void main(String[] args) {
double[] values = new double[5000];
for(int i=0 ; i values[i] = (double)i+1;
}
ConvertArray first = new ClassFirstPos();
ConvertArray last = new ClassLastPos();
ConvertArray other = new ClassOtherPos();
System.out.println("Original");
long t2 = System.nanoTime();
print( getValues(values,0) );
print( getValues(values,values.length) );
print( getValues(values,3) );
long t3 = System.nanoTime();
System.out.println(t3-t2);
Na média, a versão OO que demonstrei aqui tende a consumir 30% do tempo de processamento da versão original. Em vetores muito pequenos, pode ficar mais lento que a original, em função do custo do chamado das funções internas do método. Se for esse o caso, coloque os mesmos fors da versão original na versão OO e evite o uso dos IFs...
Eu precisei criar um histograma dos k-mers para diferentes tamanhos. O jellyfish surpreende em performance e facilidade de uso. Mas mesmo assim, precisamos de vários passos. Segue um script para facilitar o uso dele. O script precisa de dois parâmetros: o nome do arquivo fasta/fastq e o prefixo do arquivo de resultados. Ex: run.sh reads.fasta jf_kmer_ #!/bin/bash for kmerSize in {13..29..2} do echo "kmer size $kmerSize - creating kmer-map..." jellyfish count -m $kmerSize -o output -c 16 -s 500000000 -t 60 $1 arq_out=`ls -1 output* | wc -l` banco=out_$kmerSize if [ $arq_out -gt 1 ]; then echo "merging" jellyfish merge -o $banco output\* rm -rf output* sleep 5 else echo "renaming..." auxFileName=`ls -1 output*` mv $auxFileName $banco fi ...
A nova versão do moodle precisa do encode utf8mb4 para codificação os emoticons, após a atualização da versão 3.2 para a 3.8, tive que rever as tabelas no mariadb. Uma consulta simples para verificar a codificação das tabelas: select table_schema,table_name,table_collation from information_schema.TABLES where TABLE_SCHEMA='NOME_DO_BANCO'; E a rotina para converter as mais de 360 tabelas do moodle... DELIMITER // CREATE PROCEDURE convert_encode() BEGIN DECLARE _stmt CHAR(255); DECLARE cmd CHAR(255); DECLARE done BOOL DEFAULT 0; DECLARE c1 CURSOR FOR SELECT CONCAT("ALTER TABLE ", TABLE_SCHEMA, '.', TABLE_NAME, ' CONVERT TO CHARACTER SET "utf8mb4" COLLATE "utf8mb4_bin";') FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='NOME_DO_BANCO' ; DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1; OPEN c1; ...
O GBParsy é uma biblioteca para realizar o parser de arquivos GenBank para o Python. No Ubuntu para realizar a instalação do módulo eu segui as instruções http://code.google.com/p/gbfp/wiki/HowToInstall até o ponto em que a instrução "$ python setup.py build " produziu o erro de ausência do arquivo "python.h". Para resolvê-la, sudo apt-get install python-dev site do projeto: http://code.google.com/p/gbfp/ Artigo: http://www.biomedcentral.com/1471-2105/9/321
Comentários
Postar um comentário