Mensagens enviadas por: louds
Índice dos Fóruns » Perfil de louds » Mensagens enviadas por louds
Autor Mensagem
hmm
vc quer salvar o resultado da pagina jsp?
usar 1 filter
Logs sao os arquivos onde se registra informacao operacional do software normalmente.

O tomcat, por padrao, salva logs em $CATALINA_HOME/logs
olha o pacote bcel em jakarta.apache.org
pq em vez disso nao usar:

if(x & 1 == 1) //é impar
vc setou a variavel de ambiente CATALINA_HOME (se for tomcat 4.x)?
vc nao ta usando algum path que seja particular do windows? (ex: c: omcatwebapps)

Podem ser muitas coisas mas sem 1 minimo de informação é impossivel dizer doque se trata.

Qual distribuição? Versao?
Quais parte relevantes foram instaladas? (JDKs, jars, libs, etc)
Qual o sintoma alem de "nao funciona"?
Ja tentou olhar nos logs? Logs existem para serem usados.
Postar os logs enxugados normalmente resolve 90% dos problemas, sanitize eles se eles conterem informação confidencial.
As vezes upward compatibility deve ser quebrada (VM da 1.4 nao rodar codigo da 1.5) pra poder fazer o negocio direito.

No caso do C# provavelmente vao tomar esse sacrificio.

Porem não é necessario se em vez de mudar a semantica e os metadados das classes para implementar generics fosse feito simplesmente name mangling das classes.

Ou seja, pra 1 classe generica X, quando compilada em modo de compatibilidade geraria 1 classe por tipo primitivo e outra p/ referencias com runtime check (X__int, X__byte, X__long, etc)..

Ou seja, supondo que eu esteja usando ant para controlar a compilacao do projeto, seria apenas adicionar 1 flag p/ gerar codigo com suporte legado e pronto. Minha aplicacao iria automagicamente rodar numa VM que nao conhece generics e ainda assim teria a oportunidade de ter generics como deveriam ser...

quando ao meu exemplo:



Pelo que eu entendi da especificação a ultima linha funcionaria sem gerar excessoes. Caso der throw, vai causar muita confusao porque de repente codigo que funcionava vai começar a dar throw sem motivo algum aparente.
Eu quero kerberos pq é seguro, pq mantenho todas senhas no mesmo lugar e ldap pq posso guardar todos parametros de autorizacao lá de forma simples e sem criar replicação de dados.

Como, ate onde eu sei, nao rola mandar tickets sobre http, nao rola ter 1 single-sign-on no website, como ja tem pra todos demais servicos.

Outra coisa que pretendo fazer tb é experimentar com uns patches para mysql que te permite usar kerberos tb pra autenticação, oq resolve o problema de ter a senha on-the-clear nos arquivos de deploy.

Implementar 1 Realm no tomcat não era meu problema, já fiz isso pra poder usar uma versão modificada de java.security.Principal

Meu problema é usar JAAS, que nunca mexi antes.

Se vc souber, JAAS permite usar PAM ou usar os tickets kerberos da sessao criados via kinit & cia?
bani, não é exatamente isso, pq java usa complemento de 2, mas sim, sempre que tivermos o bit mais significativo setado, ele é negativo.

Cada tipo inteiro do java possui 1 tamanho em bits fixo:

long -> 64
int -> 32
short -> 16
byte -> 8
(vou omitir o tipo char pra nao complicar as coisas)

ok?
codigo binario funciona feito o decimal, mas so tem digitos 0 e 1
o numero:
1234
nao é a mesma coisa que
1 * 1000 +
2 * 100 +
3 * 10 +
4 * 1
o 1 é o bit mais significativo e o 4 o menos.

a mesma coisa vale pra representacao binaria:

00001001 (9 em decimal)
o 1 a direita é o mais significativo

como funciona conversao entre binario e decimal?
sem entrar no merito da teoria, como regra pratica vc faz assim:
vai da direita pra esquerda somando os numeros das varias casas da seguinte forma:
d * 2 ^ i
onde:
d é o digito na casa em questão
i é a posição do digito no número, conte da direita pra esquerda e comece no zero.
^ é pra exponenciação
entao
00001001 fica:
1 * 2 ^ 0 = 1
0 * 2 ^ 1 = 0 +
0 * 2 ^ 2 = 0 +
1 * 2 ^ 3 = 8 + (=9)
....


Muito bem, já da pra explicar os operadores de shift.
Esses 3 operadores funcionam deslocando, 'empurrando', os bits para a esquerda ou para a direita.

nosso exemplo 1 byte, tem 8 bits lembra?, com o numero 9 fica 00001001
vamos ver oq acontece com os varios shifts:

00001001 << 1 = 00010010
00001001 << 2 = 00100100
00001001 << 3 = 01001000
00001001 << 4 = 10010000
00001001 << 5 = 00100000
00001001 << 6 = 01000000
00001001 << 7 = 10000000
00001001 << 8 = 00000000

00001001 >> 1 = 00000100
00001001 >> 2 = 00000010
00001001 >> 3 = 00000001
00001001 >> 4 = 00000000

00001001 >>> 1 = 00000100
00001001 >>> 2 = 00000010
00001001 >>> 3 = 00000001
00001001 >>> 4 = 00000000

Ate aqui tudo bem? Ok, mas >> e >>> fazem a mesma coisa não? Aparentemente sim, a diferença é sutil, mas fundamental.

Primeiro a explicação do pq, se tiver notado o << vai multiplicando o numero por 2, entao 10 << 1 = 10 * 2 = 20, 10 << 2 = 10 * 2 * 2 = 40
e da mesma forma >> e >>> vao dividindo: 16 >> 1 = 8, 16 >> 3 = 2.

Java pode guardar numeros negativos num byte tambem, porem esse esquema que mostrei agora nao resolve isso, pq so guarda numeros positivos e o zero. É ai que entra a notação de complemento de 2, é a forma com que todas maquinas de hoje em dia usam pra representar numeros negativos, a formula é bem simples:

dado o numero x positivo vc inverte os bits (quem era 0 vira 1 e vice-versa) e depois soma 1, pronto vc tem -x. Ex:

10 = 00001010
invertemos os bits:
11110101
somamos 1
11110110
pronto, -10 em binario é 11110110 (isso quando tamos usando 8 bits, senao vc extende com 1's a esquerda)

aqui que aparece a diferença entre >> e >>>.
esses operadores vao 'empurrar' os bits a direita. Porem como vc pode imaginar, fazer simplemente isso aquela propriedade de ir dividindo o numero por 2 nao vale mais pq:
11110110 (-10) >> 1 =
01111011 não é -5 e sim 123.
Pra isso serve o >>>, ele vai preencher a esquerda com o bit do sinal, ai vai dar a conta que voce esperava:
11110110 >>> 1 =
11111011 = -5

Pra nao ficar nenhuma duvida:

0110 >>> 1 -> 0011
1000 >>> 1 -> 1100

espero ter exclarecido sua duvida.
os operadores bit a bit <<, >> e >>> fazer deslocamento

vc conhece notacao binaria de numeros ne?
e representacao de numeros negativos? java usa complemento de 2.

contando que o bit significativo (maior valor) fica a esquerda temos:

13 (1101)

13 << 2 -> 52
1101 -> 110100

o >> é deslocamento logico, preenche sempre com zero a esquerda
o >>> é deslocamento matematico, preenche sempre o sinal a esquerda

13 >> 2 - > 3
13 >>> 2 -> 3
1101 -> 11

ok, mas pro numero negativo -5 o resultado muda, primeiro vamos calcular a representação dele:
5 -> 0101
-5 -> 1010 + 1 -> 1011

1011 (-5) >> 2 -> 0010 (2)
1011 (-5) >>> 2 -> 1110 (-2)

alguma duvida?
java3d é agnostica a API 3d utilizada.
Então pouco importa se você usar a versão DirectX ou OpenGL. So faz diferença se tua placa 3d funcionar melhor com 1.
Nao li o negocio todo, grande pacas
Mas so algumas coisas ja me fazer duvidas do negocio todo:

1)RedHat não é a melhor distro pra rodar Oracle, a Oracle certificou apenas o Suse ate onde eu sei...

2)Nao vi nada sobre como o servidor foi configurado, mas RH é notorio por atuar mal como plataforma p/ servidor, era o 8.0 desktop ou o enterprise edition?

3)Os caras perderam algumas horas fazendo todo fine-tuning nescessario para o sistema funcionar direito com 4/8 cpus e oracle?

4)Não conheco a aplicação, mas se ela contem conteudo estatico como html ou imagens, seria interessante comparar performance usando Tux e apache como frontend servers.

5)Eles desabilitaram o sendmail!?!?!?
6)Eles tavam rodando tudo via X?
o prevayler é 1 grande sacada, mas sofre de algumas deficiencias graves:

-Voce tem que escrever os comandos, isso é tedioso e sucetivel a bugs, o prevayler é tão seguro quanto o pior dos comandos usados com ele, ou seja, é muito mais sucetivel a erros de programação. Um RDBMS nao tem esse problema, uma query nao deixa o banco em estado inconsistente.

-Com prevayler voce é muito mais refem do hardware que com bancos de dados normais. Uma vez que ele usa serialização do java que falha miseravelmente quando ocorre falhas em disco. Ou seja, pode puxar a tomada a vontade, mas quando 1 cluster com defeito e teu log é inutilizado por completo a partir dele, uim bom banco de dados consegue superar isso ate certo ponto.

-Prevayler é ideal para aplicações single threaded, já que todas modificações são executadas em serie, nao importa se voce tem 1 ou 100 cpus.


Por ultimo, apenas uma critica contra a metodologia dos benchmarks.
Nele o autor compara 'apples to oranges' pq compara 2 ambientes diferentes. Pouco injusto rodar o banco em um processo separado.

Oque eu gostaria de ver era algum benchmark contra 1 MySQL embedded usando HEAP tables.

O Oracle possui uma JVM emdedded nao? Pq nao rodar os testes dali?
Vou implementar autenticação/autorização de realm no tomcat usando ldap/kerberos. Gostaria de saber se alguem conhece alguma implementação de realm pra tomcat que faça isso.

Não adianta falar pra usar o JNDI realm, na documentação não existe como expecificar o metodo de autenticação e como isso não pode ser feito na url, o jndi realm não me é util.

Oque eu exatamente busco é um realm que me permita autenticar usando ldap, porem podendo expecificar o metodo de autenticação ou então simplesmente kerberos, com gssapi.

Alguem já fez isso ou conhece algum lugar onde me de alguma dica/ideia sobre o assunto?
So não escrece de criar 1 usuario pro jboss e rodar o jboss sobre ele
ou pode ser o nobody/nogroup do apache mesmo
Paulo Silveira wrote:
Hotspot nao eh um JIT. O termo Java HotSpot Client Compiler eh apenas algo fashion, A Hostpot age em outra Thread alias. Ela fica dando pitaco ao JIT, indicando quem ele deve compilar.

Voce nao deveria atacar os outros pessoalmente. Voce poderia, educamente, ter apontado o engano, e mostrado que, alem de conhecer muito de computacao, sabe lidar com as pessoas.


Se pareceu que eu ataquei, peço desculpas. Porem, se você olhar na documentação da sun, ela cita o tempo todo o termo 'The Java HotSpot Dynamic Compiler' entre outras coisas, ou seja um Just In Time compiler.
Ok que é apenas o nome da tecnologia, mas ainda assim não é sinonimo de milagre.

Paulo Silveira wrote:

a relacao 3 para 11 eh constante. Se java fosse sempre 3x mais lento q C++, ja estava otimo.



Se java fosse 3x mais lento que c++ pouca gente estaria usando hoje em dia. So não entendi qual a pertinencia disso em relação com oque comentava, que é a diferença de implementar operações matematicas com Objetos e com tipos primitivos.

Paulo Silveira wrote:
A VM atual coloca objeto na stack sim, e faz desvitualizacao de acordo com o classloading (se aparecer alguem com overriden mais profundo). A performance novamente aqui seria um fator constante em relacao ao C e C++. Se java com soma de objetos fosse 100x mais lento que c++, ainda assim a funcao assintotica era a mesma.

Nao sei porque o pessoal gosta tanto de pequenas otimizacoes. Nem o nerd do Knuth gosta, como diz a minha assinatura.



Hmm, de qual VM vc ta falando? Não a 1.4.x que a Sun distribui ne? Pq essa não aloca objetos na pilha e faz muito pouca desvirtualização, so não lembro se era via ssa ou grafo de dependencias. Pode ir e verificar no fonte da VM.
Eu não considero um perda de performance de mais de 2x 'pequena', não posso me dar a esse luxo.
Agora, a diferença é assintotamente linear e não contante, pq se for 100x mais lenta, como citado, 10 operações não vão levar a mais o mesmo tempo que uma operação, oque é falso.

Uma das características que mais atrai em java é o baixo custo em termos de performance em relação a linguagens compiladas, hoje um programa de computação cientifica escrito em java é so alguns % mais lento que o equivalente em c++, se de repente esses, sei lá, 20%, se tranformam em 500%, muita gente vai questionar se java realmente vale a pena.


louds wrote:Oque seria muito legal num java3 seria completar a parte de reflection, criar 1 forma de poder obter as mesmas informacoes que da via a API mas interagindo diretamente com a classe (Integer.class x this.getClass())
seria muuuito util se desse pra fazer isso com todo o resto, metodos, variaveis, etc. Isso iria causar 1 boom na utilização de reflection.

nao entendi. ja da pra fazer isso.

Me expressei mal então, ou dá pra fazer e não sei.
Hoje o único objeto de reflecção que pode ser obtido sem ser via api é Class (Integer.class), porem não existe sintaxe pros demais objetos, como Method, se pudesse fazer algo como 'Method m = Integer.parseInt;'
usar reflection seria infinitamente melhor, não acha?
 
Índice dos Fóruns » Perfil de louds » Mensagens enviadas por louds
Ir para:   
Powered by JForum 2.1.8 © JForum Team