quarta-feira, 22 de abril de 2009

Oracle, order by e acentos

Problemas acentuação na ordenação oracle?!?

O oracle, por default, ordena primeiros os caracteres sem acentuação, depois os caracteres com acentos. Isso, na maioria das vezes, não é o que a gente precisa.

A solução é uma variável de ambiente, que faz o oracle ignorar os acentos:

NLS_SORT=generic_m_ai

Ou, no conf do Apache:

SetEnv NLS_SORT generic_m_ai

Lembrando que isso faz a ordenação ser também "case insensitive"

Fonte: http://glufke.net/2009/01/08/ignorando-acentos-e-maiusculasminusculas-no-10g/

terça-feira, 14 de abril de 2009

IA: robô com sentimento?!

A Inteligência Artificial evoluiu muito, mas ainda é um mistério a forma como funcionam os sentimentos humanos. Nada impedem pesquisas nesse sentido, claro.

Pesquisadores japoneses - sempre eles - criaram um robô que tinha sentimentos. Só não sei dizer quem confundiu o quê. Apesar disso, garanto que programadores também tem sentimentos...

Só que, num belo dia, o robo tornou-se obsessivo! Não deixou mais a pesquisadora sair da "casa" onde estavam juntos (era um estudo, nada de sacanagem). Bloqueou a porta e a agarrava com abraços e fazia sons animalescos. Só acabou quando ela pediu ajuda para outros pesquisadores, que desligaram o robô através de um botão em suas costas...

Eu fiquei aqui pensando... tem comportamento mais humano do que isso? =P



E se você já assistiu o final, tenha certeza: all this happened before... and it will be happen again!


Fonte: http://www.geek.com.br/blogs/832697632/posts/9488-robo-programado-para-amar-tem-ataque-obsessivo
http://www.muckflash.com/?p=200

segunda-feira, 13 de abril de 2009

Youtube também é educação

Eu achava que o youtube era só perda de tempo/porcarias. Estava errado... Patrocinado por algumas grandes universidades, temos aulas disponíveis online.

Tem uma de física quântica! =D

Agora sim vou me dedicar um pouco a aprender inglês...


Os links para os vídeos estão aqui: http://www.youtube.com/edu

domingo, 12 de abril de 2009

Assembly - goto x,y

No pascal (onde aprendi a programar), existia uma biblioteca que eu não lembro o nome que dava um comando que colocava o cursor em um ponto da tela. Depois, era só escrever que ele colocava o texto ali.

Pois bem, vamos fazer isso em assembly! É um longo código:

.MODEL SMALL
.STACK 200h
.386

.DATA
Message db "Hello World$"

.CODE

;
;Posiciona o cursor em posicao dh (linha) e dl (coluna)
;
posic:
push bx
push ax
mov bh, 0 ;pagina
mov ah, 2 ;numero do servico de BIOS
int 10h ;chama a interrupcao
pop ax
pop bx
ret

escreve:
push ax ;empilhar tudo o que usamos (para nao corromper outro codigo)
push dx
push ds

mov ax, seg Message ;faz a escrita
mov dx, offset Message
mov ds, ax
mov ah, 09h
int 21h

pop ds ;volta tudo o que empilhamos
pop dx
pop ax
ret

Start:
xor dh, dh ;escrever na coordenada 0,0
xor dl, dl
call posic
call escreve

mov dh, 1 ;escreve na coordenada 1,1
mov dl, 1
call posic
call escreve

mov dh, 1 ;escreve a mensagem no fim da primeira linha, em 1,79
mov dl, 79
call posic
call escreve

mov ax, 4c00h ;retorna para o SO (DOS)
int 21h
End Start


Aqui já temos várias coisas novas. O programa é dividido em partes (como funções), que são executadas através de "call".

O que temos de novo aqui é o uso da pilha, identificada através da diretiva:
.STACK 200h

Ela é usada através do push e do pop. Como todas as operações são feitas com os registradores e só temos 4, então precisamos de espaço para guardar os valores. "push" coloca na pilha, "pop" retira dela, sempre usando o registrador passado por parâmetro. Nenhuma validação é feita, então dá pra empilhar ax e ler bx...

Em "posic", você pode ver que a idéia das interrupções é sempre a mesma: empilhar os registradores, setar os que a interrupção vai usar, chamar a interrupção e desempilhar tudo. No fim, o "ret" manda o fluxo de execução (ou seja, o IP - Instruction Pointer) de volta para quem o chamou...

Uma lista de interrupções pode ser encontrada em http://www.emu8086.com/assembly_language_tutorial_assembler_reference/8086_bios_and_dos_interrupts.html
A lista de comandos assembly para os processadores da Intel estão em http://www.intel.com/software/products/compilers/embedded/toolsuite/docs/compiler/assembler/asxscale_p.htm

HP, Microsoft e o notebook - HD Sata, Windows XP e a solução

Encontrei uma solução para o problema que reportei aqui, com o HD Sata e sem drive de disquete.

Usar o NLite (http://www.nliteos.com/) para recriar o CD de instalação do Windows XP. Baixar o driver da controladora SATA do site da HP e usar o programa.

A única coisa que alterei foi adicionar o driver, criar a ISO e gravar o CD (de tão simples o processo, fiz numa máquina virtual com o KVM... hehe).

É simples, permite adicionar atualizações do XP e até o SP3. Realmente interessante, mas não testei nem mesmo 1% da ferramenta.

Fica a ajuda se precisar de novo da solução...

sábado, 11 de abril de 2009

Assembly - hello world

Iniciando uma nova série sobre... assembly! =D

Aos navegantes: um programa simples em assembly para plataforma Intel, que só roda em Windows (o Linux usa arquitetura AT&T).

.MODEL SMALL ;avisamos o montador que não vamos precisar de muita memória (por hora, fica nisso)
.386 ;indica que vamos brincar de ser um 386

.DATA ;indica o segmento de dados
Msg db "Hello World", "$" ;"cria" uma string de bytes (db) chamada Message

.CODE ;indica o segmento de codigo
Start: ;indica o comeco do programa (vc escolhe o nome que quiser)
mov ax, seg Msg ;move o numero do segmento "Msg" para o registrador AX
mov dx, offset Msg ;move o endereço de Msg para o registrador DX
mov ds, ax ;move ax para ds, carregando o segmento de dados
mov ah, 09h ;coloca o nro da interrupcao "DOS" de escrever na tela em AH
int 21h ;chama a interrupcao com o codigo AH

mov ax, 4c00h ;coloca o nro da interrupcao de retorno para o DOS
int 21h ;chama a interrupcao
End Start ;indica o fim do programa


Estamos usando 2 segmentos aqui: DS (ou DATA SEGMENT) e CS (ou CODE SEGMENT). No DS estão os dados (!) e no CS está o código do programa (!!). Temos outros, mas só usamos esses.
As linhas que começam com pontos são diretivas para o montador (assembly não se compila, se monta).

AX é um registrador de uso geral, assim como DX. AX tem 16 bits, que são divididos em 2: AH (8 bits mais significativos) e AL (8 bits menos significativos - à direita). O mesmo vale para DX, que possui DH e DL. Temos outros, mas só usamos esses (no novo).

mov faz uma atribuição. Então, mov ah, 09h significa:
av <- 9h
O "h" depois do número indica que ele é hexadecimal.

int chama uma interrupção de BIOS (Basic Input/Output System) ou de DOS (Disk Operating System). o número depois dela é o código da interrupção.

Por hora é isso... :P

domingo, 5 de abril de 2009

HP, Microsoft e o notebook

Alguns acham que eu odeio a HP. Esses estão certos.

Outros acham que eu odeio a Microsoft. Esses estão errados: eu só acho que eles são incompetentes.

Estou tentando instalar a porcaria do XP no notebook da minha irmã. Ele veio com o Vista, mas o Autocad nunca funcionou direito nele. Ela me pediu e eu, prestativo como sou, fui lá instalar o XP (antes que perguntem, a compra foi antes de dar problema no meu note).

Eis que surge:



Pra quem não consegue ler na imagem:

Insira o disco com a etiqueta Disco de suporte do hardware fornecido pelo fabricante na unidade A:


Unidade "A:"?! Num notebook? Ah, ok... sou mágico agora.

Aí vamos ao site da HP e encontramos:

NOTE: A USB diskette (floppy) drive is required to use this driver. If an external USB diskette drive is used, ensure that it is plugged into the system before starting Step 1.


http://h20000.www2.hp.com/bizsupport/TechSupport/SoftwareDescription.jsp?lang=en&cc=us&prodTypeId=321957&prodSeriesId=3375953&swItem=ob-51454-1&prodNameId=3375995&swEnvOID=1093&swLang=8&taskId=135&mode=4&idx=1

Significa que vou ter que comprar a porcaria do drive de disquete USB pra poder usar um software ultrapassado nele? Ah, VTnC...

================================================================================
Solução em HP, Microsoft e o notebook - HD Sata, Windows XP e a solução