Removendo anúncio do msn

Sempre quis remover aquela quantidade de parafernalhas do msn. Bom, finalmente consegui :)
no site http://apatch.org/ tem utilitários para modificar o Yahoo Messenger e o msn, retirando propagandas, milhares de botôes desnecessários e outras firulas.

A única coisa que conseguia remover era as guias e o msn hoje, que não passa somente de mais propaganda, mas isso ele mesmo tem a opção de remover.

Eu achei incrível, pois antes de achar um contato, passava por 10 propagandas e uma tonelada de poluição visual, então fica ai a dica.

55 sem sair de cima

55 min completos. Desisti.

Hoje é o lançamento do OpenOffice 3. E eu que adoro esta suite, não poderia deixar de baixar uma cópia.
Apesar do site www.OpenOffice.org ainda estar funcionando(E caindo direto na página de downloads sem opções para o portugues), o broffice.org nem dá sinal de vida :)
no site do OpenOffice, tem a simpática mensagem:
Apologies - our website is struggling to cope with the unprecedented demand for the new release 3.0 of OpenOffice.org. The technical teams are trying to come up with a solution. Thank you for your patience.
Chegaram antes de mim!!!frown

Simpsons


Show de bola

ZOHO Writer

Gostaria de falar desta novidade (Que não é mais novidade, hehe )

A pouco tempo estava usando a suite completa do Google (Google Docs), mas acabei pensando comigo, este lançe de deixar todas as minhas informações em um único lugar a disposição do google é meio "perigoso".

Podem achar que é teoria da conspiração ou o que for, mas não achei legal. ]

Fora que postar direto do google docs no blogger tem uma série de problemas com identação, principalmente pq eu costumo postar algorítmos, SQLs e etc, o que acho que não deveria acontecer, pois os serviços por serem do mesmo dono deveriam ser mais integrados.

Ai começei a procurar um outro editor, e acabei topando com o Zoho, em 5 min de pesquisa :)

Fantástico editor, com bons recursos e não sacaneia o código postado. Vale a pena conferir

for ct := 0 to list.count-1 do begin   ShowMessage('Código inútil'); end;
só falta colorir automaticamente o código, mas ta valendo.

Pegando a versão do firebird sem depender da API

Olhadno o release Notes do Firebird, me deparei com uma dúvida que sempre vejo nas listas de discussões.
Como saber a versão do firebird que está rodando no servidor?
A equipe do firebird viu que esta informação é importânte para o desenvolvimento de softwares e incluiu a função interna RDB$GET_CONTEXT.
Para retornar a versão atual do firebird, é só usar o SQL abaixo.

SELECT RDB$GET_CONTEXT('SYSTEM', 'ENGINE_VERSION') FROM RDB$DATABASE

Lembrando que este recurso só está disponível a partir do Firebird 2.1

Domínios órfãos

Salve, salve.
Tava hoje aqui com meu pc. Eu e ele, ele e eu. Ai pensei .. deve ter uma dúzia e meia de domínios que não estão sendo usados na base. E tinha mesmo :)
Isso acontece pq eu crio os domínios na mão e associo ao field na hora da criação. Só que as vezes eu crio uma tabela sem o carinha pq ele não está criado, e depois eu vou cria-los.. ai ficava cheio de domínios criados automaticamente pelo fb na porcaria da base.
Resolvi fazer uma limpesa. O SQL abaixo informa quais domínios não estão sendo usados:

select * from rdb$Fields where rdb$field_name not in (select rdb$field_source from and rdb$system_flag = 0
rdb$relation_fields)

Aquele abraço.

TDBCtrlGrid

Hoje, tive um sério problema ao utilizar o TDBCtrlGrid. Eu precisava que o foco dos controles que ele contem fosse modificado para o próximo componente quando a tecla Enter fosse pressionada. Procurei muito em fóruns, e não encontrei nenhuma resposta, resolvi com esta função e resolvi compartilhar. Bom, ta ai o código. Aquele abraço. Código recomendado para chamada. procedure TForm.DBCtrlGridKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); if Key = VK_RETURN then begin NextFocus(DBCtrlGrid); Key := 0; end; end E finalmente o código da procedure:

(* Procedure que controla o próximo foco *) function NextFocus(ADBCtrlGrid : TDBCtrlGrid; NextInDataSet : boolean = true) : boolean; var ct : integer; DataSet : TDataSet; Form : TForm; FirstControl : TWinControl; begin result := false; DataSet := ADBCtrlGrid.DataSource.DataSet; Form := TForm(ADBCtrlGrid.Owner); FirstControl := nil; for ct := 0 to Form.ComponentCount-1 do if (Form.Components[ct] is TWinControl) and (Form.ActiveControl.Parent = TWinControl(Form.Components[ct]).Parent) then begin if (not result) and (Form.ActiveControl.TabOrder+1 = TWinControl(Form.Components[ct]).TabOrder) then begin TWinControl(Form.Components[ct]).SetFocus; result := true; end; if TWinControl(Form.Components[ct]).TabOrder = 0 then FirstControl := TWinControl(Form.Components[ct]); end; if (not result) and (NextInDataSet) then begin DataSet.Next; if DataSet.Eof then DataSet.Append; FirstControl.SetFocus; end; end;