TortoiseCVS and TortoiseSVN on Vista and Windows 7 x64 – Overlay Icons

Posted by pardini · 11 Comments 

For more than a year, getting icon overlays to work with both TortoiseCVS and TortoiseSVN on x64 has been a nightmare.

Not anymore.

First, install the latest stable TortoiseSVN.

Then install my custom build of TortoiseCVS, TortoiseCVS-1.11.6-pardini.exe. It is a custom built CVS-HEAD checkout, without many changes.

Please note that apparently TCVS is the one that decides the icons to use (both TSVN and TCVS will use the same icons), but they all work.

If it’s not working for you, uninstall all TortoiseSVN, TortoiseCVS and TortoiseOverlays you may have installed.

Also delete the registry key HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\ShellIconOverlayIdentifiers.

Then reinstall in the order I suggested above.

Atualização do Boot Camp para 2.1 (Brazilian Portuguese)

Posted by pardini · 1 Comment 

Para algum infeliz, brasileiro, que tenha um Mac, rodando Boot Camp (Windows), que tente atualizar o Boot Camp do 2.0 para o 2.1. Acho que sou só eu no mundo todo. Se o Windows instalado for em inglês, mas com preferências/teclado/regional settings como Brazil, a instalação do Boot Camp 2.0 faz uma cagada federal, e localiza o nome do produto no registro do Windows. Resultado, o update para o 2.1 não consegue atualizar, devido a algo esotérico do tipo ”Error applying transforms. Verify that the specified transform paths are valid.” Muito informativo, parabéns Apple. A Apple também resolveu ignorar o problema, apesar de centenas de usuários com problemas (com certeza são todos estrangeiros, então fodam-se). A ajuda veio de um outro cara que fala Português (de PT). Porém, para máquinas em pt_BR, a chave de registro é diferente. Convém procurar por “Serviços do Boot Camp”. No meu caso resultou na chave HKEY_CLASSES_ROOT\Installer\Products\82654E0F812156845A61E8A84572A2CD. Altere a chave “Language” para 1033 (em decimal). Boot. Reinstale o update e voilá.

Flash is Single Threaded: RPC and AsyncToken behavior

Posted by pardini · 2 Comments 

So in Flex you can invoke a service (like a WebService method, or HTTPService.send()), which returns a token (mx.rpc.AsyncToken). After that, you set a responder on the token. When the results come back, the responder is called. Calling the send() method actually sends the request, so the whole construct looks bizarre, since you’re setting a responder/handler AFTER the call has been sent. This is a very common pattern in Cairngorm applications.

The fact is that this never fails, and I wondered why, because it looks possible (although unlikely) for an RPC call to return data before the responder is set. After thinking for a while, I remembered one of my first problems with Flash, years ago: it’s single threaded. After investigating on the web, I found out this is really what makes this (and a whole host of other async stuff) work in Flash/Flex. The call may return data, but since it’s single threaded, your method will surely be able to continue, and set the responder, before the result handler is called. Uncommon, to say the least.

Ultimate Debian Etch VMWare Server setup (16Gb Dual Quad Core Dell 2950 with OMSA)

Posted by pardini · 5 Comments 

With assistance from the helpful folks at the VMWare Discussion Forum, I came up with what I think is the ultimate VMWare Server setup. It’s essentially Debian Etch (4.0) x86 running on a Dell 2950, with dual Xeon E5310 (Quad-Core) and 16Gb RAM. The focus here is on cleanliness: no hacks, no bizarre compat libraries, no patches. Just plain Debian-Dell-VMWare fun.
First, a word about x64. Since I have a lot of RAM, the initial tests were with the amd64 port of Debian. Unfortunately, and not being Debian’s fault, a lot has conspired against x64. First, VMWare not being a native 64-bit application, a lot of compat libraries would be involved. Also, a lot of trouble arises with Dell OMSA. Finally, most people agree that there’s some performance penalty for VMWare on x64, quirks aside. If we had native VMWare and OMSA, I’d go with amd64. The best option I’ve found (and recommended on the forums) is installing standard x86 Debian, and then switching kernel to a ‘bigmem’ one. More on that later.
So lets head on to the method:

1) Prepare the RAID setup for initial install. Dell does not support Debian, so you need a way to configure your RAID volumes beforehand (at the very least, the volume where you will install Debian, but I just go ahead and configure all my volumes). For this purpose I’ve found the excellent “CentOS Dell OMSA 5.1 Live CD”. Just burn the ISO, boot from it, set the root password, wait a lot, and you can get into the Web Interface for OMSA where you can set up the storage. I’ve set “Adaptive Read Ahead”, “Write back” and other performance-enabling RAID options.

2) Install Debian Etch (x86). I used a 3-in-1 CD, which has a i486, amd64 and power installer, and with that it was a little tricky to force i386/i486 instead of amd64 (it seems to auto-detect). The Dell PERC controller and NICs were all detected, even though it seems the (Gigabit) Ethernet ports were reversed (port 1 was eth1 and port 2 was eth0 – I’ve seen this reported before). Proceeded with standard install, I went with straight ext3 filesystems. You may want LVM or other fancy stuff, but I didn’t bother. I took care of unchecking the “Standard system” install option, which would install a lot of uneeded stuff like NFS, and results in a very, very minimal Debian install. Complete install, set root password, apt sources etc, and boot into the new system.

3) New kernel and packages. “aptitude update” and install SSH and the new kernel “aptitude install ssh linux-image-2.6-686-bigmem”. This should be all handled automatically, including the new kernel being setup in grub. Reboot. Once the system is back up, check /proc/cpuinfo, /proc/meminfo and “top” for correct 8-logical-CPU and 16635720 kB MemTotal. You may want to do a “aptitude upgrade” too to update everything with security updates. I also like ntpdate, tz-brasil and ntp-server for keeping the clock right.

4) Install Dell OMSA. The nice folks at sara.nl offer some excellent pre-packaged Dell OMSA install for Debian (it’s version 5.2, so it just plain works, without the “storage not found” problem). Thanks to them, you can just add “deb http://ftp.sara.nl/pub/sara-omsa dell sara” to /etc/apt/sources.list (ftp:// also works), do “aptitude update”, and “aptitude install dellomsa” and it’s quite ready. It’s a large package, around 100mb, but installs perfectly. After the install, run “update-rc.d dsm_om_connsvc defaults” and “/etc/init.d/dsm_om_connsvc start”. You can then go to “https://x.y.z.w:1311″ (on another machine) and get to the OMSA web interface. Log-in as “root” with root’s shell password. It’s just that sweet. Dell’s own install system on supported OSes are not even close. I will post about SNMP support for OMSA later.

5) Install VMWare prerequisites. VMWare Server links dynamically to a lot of stuff. I got a few pointers from other sites, but ultimately “ldd” and “apt-cache search” were my best friends. The best indication you’re missing libraries is the VMWare install program complaining about them, or even rejecting your VMWare serial number, or vmware-mui telling you vmware isn’t installed. Anyway, this is the final aptitude line for install all the dependencies I found: “aptitude install libx11-6 libx11-dev libxtst6 xinetd wget linux-headers-`uname -r` build-essential gcc g++ psmisc libxt6 libxrender1 libxi6″.

6) Install VMWare Server and VMWare Management Interface. You get these from vmware.com after registering. Don’t forget to request your free serial number from them too. You should download the latest version (I got 1.0.3) in .tar.gz format. Just “tar xzvf” them, and run the installer script as per the manual. Everything should go smooth – VMWare will say you’ll need to compile the modules, and that should go just fine (no need for any-to-any patches). Do the same install routine for vmware-mui. Once it’s installed you can get to the nice VMWare web interface via “https://x.y.z.w:8333″. You will also connect via VMWare Console (I run that on Windows…) on x.y.z.w port 902. VMWare is able to see around 14.5Gb of RAM, which is excellent for my needs. Any given VM is limited to 3600mb, as usual.

Carrinho de Compras com AJAX

Posted by pardini · 2 Comments 

Inspirado pela onda web 2.0, estou prototipando um Carrinho de Compras com AJAX. Usando, óbvio, prototype.js. Ainda não está pronto, mas acho que vai ficar bom. Veja um screenshot recente:

Carrinho Com AJAX

High Nerd!

Posted by pardini · Leave a Comment 

I am nerdier than 80% of all people. Are you nerdier? Click here to find out!

Burrocracia NET/Virtua chega a novos extremos

Posted by pardini · 8 Comments 

Apesar do serviço ser excelente (e caro), a NET/Virtua me surpreendeu com a burocracia na semana passada. Quando fomos morar no antigo apartamento da minha avó, reativei a assinatura NET que meu pai tinha feito para minha avó. Com isso passei a pagar R$69/mês para ver enlatados americanos, e nenhum canal de filme. Além disso, fiz um pacote ‘fidelidade’ (você não paga assinatura, nem instalação, mas tem que ficar 12 meses senão paga multa) de um Vírtua 600kps, pagando $89/mês. Aqui no escritório temos um Vírtua 1200/600kbps, pagando R$140, então não achei ruim.
Agora, cinco meses depois, estamos nos mudando (pergunte a Dine sobre os detalhes, e sobre o coletivo, ok? isso aqui é blog de nerd) e preciso transferir tudo (TV e Virtua) para um novo endereço. Liga na ‘central de emburrecimento’ e olha que fácil: “Isso não é possível, senhor”. Pergunto a razão. “O contrato NET que o senhor possui, senhor, é vinculado ao condomínio, senhor, e não pode ser transferido, senhor”. 3 horas depois: “a nossa sugestão, senhor, é que o senhor faça uma nova assinatura no novo endereço, senhor, e depois cancele a antiga, senhor”. Mas é o plano ‘fidelidade’? “Nesse caso, senhor, o senhor estará pagando uma multa de R$240, senhor. Afinal o senhor está cancelando o serviço, senhor”. É o fim…
Depois de cinco horas (sério!!!) no telefone com os infelizes, um supervisor me indica a solução mágica: “Basta fazer uma nova assinatura NET/TV no novo endereço, senhor, com a mesma titularidade, que será possível transferir o Virtua/fidelidade para o novo endereço”. Trouxa eu que fiz isso, e agora estou a 6 dias tentando convencer algum outro infeliz, na área de PJ, ou via FAX, ou sinal de fumaça, “senhores”, que fiz o que mandaram, e que se não transferirem isso rapidinho, vou meter todo mundo no PROCOM, e cancelar todos os elogios jamais feitos ao Virtua. Fim do mundo!

Obs: já mandei mais de 50 faxes, e perdi nada menos do que 7 horas e quinze minutos no telefone, contadinhos, com esses infelizes. Anda logo, vai.

PS. Consegui finalmente esvaziar meu gmail, via POP/SSL. O POP deles só manda 600 mails de cada vez, é um inferno. Agora colocarei a conta do gmail via fetchmail na minha conta principal, tornando a menos inútil e mais verificada.

Novo build do Miranda, com novo anti firewall facista e protocolo Yahoo

Posted by pardini · Leave a Comment 

É isso. Se você usa ou já usou meu build do Miranda e/ou o esquema totalmente ilícito de Fura Firewall Facista, vá já baixar o novo build 262. Nossos proxy hosts já estão com o novo código e os build anteriores (252 até 258) não funcionam mais…

Gente demais, tentando demais, se divertir ao mesmo tempo

Posted by pardini · 1 Comment 

As vezes me vejo metido numa fria. Trânsito para ir até a esquina. Filas para entrar numa balada. Filas para entrar no cinema. Fila para qualquer coisa. Desde o ano passado venho dizendo que isso é pq “tem gente demais tentando se divertir ao mesmo tempo”. Aquele mundo de gente, que se fodeu a semana toda, o dia todo, trabalhando, no trânsito, no escritório, agora está num momento de ‘lazer’, e precisa urgentemente se divertir; fazem absolutamente qualquer coisa e passam qualquer perrengue necessário para fazer algo que outras pessoas igualmente estressadas chamariam convencionalmente de ‘diversão’.

Isso, claro, deriva da idéia básica que tem gente demais no mundo. Mas muita gente mesmo. E a quantidade de imbecis aparenta aumentar exponencialmente com a quantidade total de pessoas. Para um sociofóbico como eu, isso quer dizer: fique o mais longe possível de aglomerações; ao se cercar de pessoas, tente ao máximo manter a proporção de pessoas que já conhece em 1 para 1. (Hoje em dia estou perto da crise absoluta, que é “não saia de casa; não vale a pena”).

Um exemplo clássico de ‘diversão’ é ir ao cinema. Você paga caro (dois ingressos de cinema == 1 DVD original), pega trânsito para chegar, ao chegar fica horas rodando procurando uma vaga para estacionar, depois fica numa fila em ziguezague suando, pois fora da sala de cinema não tem ar condicionado; depois você entra na sala, e morre de frio, pois está suado e o ar agora está no máximo. Daí você assiste a 40 minutos de propaganda, que você não solicitou, e aí sim poderá assistir ao seu filme. Isso sim é diversão! Ou então, você pode também chegar ‘atrasado’ na sala (na hora marcada), e pegar um lugar na primeira fila, e ficar com torcicolo olhando para cima/lados tentando enxergar alguma coisa. Pelo menos não terá ficado na fila tanto tempo…

Este último domingo fui ao cinema, com minha mulher e minha afilhada, ver um filme infantil, dublado. Até que não tinha trânsito! Não pegamos fila também. Chegamos 30 minutos antes da hora marcada para o filme, e sentamos na quarta fileira, com o cinema já quase lotado. Mesmo assim parecia bom demais. Then came the catch. Always a catch. Na fileira de trás, sobravam dois lugares pouco antes de começar o filme. Chega uma família, o pai, a mãe, e duas crianças, de uns 3 anos. Como estamos no Brasil, e esses caras eram brasileiros, lógico, solução óbvia e correta, sentam-se os quatro nas duas cadeiras, com as crianças no colo, logo atrás de nós. Não precisaria ir longe para imaginar o que aconteceu durante o filme… uma das crianças, que não ficava sentada no colo dos pais, ficou o filme todo pendurada na minha poltrona, gritando de vez em quando na minha orelha. Pior que a criança, o pai do infeliz passou o tempo inteiro tentando ‘acalmar’ a criança, sem calar a boca por um segundo sequer. Uma hora perdi a cabeça e gritei para o infeliz atrás que calasse a boca, “porra”. Pronto, agora eu sou grosso, e mal-educado…

De qualquer maneira, essa familinha-imbecil me mostrou um novo patamar de “gente demais, tentando demais, se divertir ao mesmo tempo”. Não basta me divertir, tenho que me divertir a valer, a qualquer custo!

Some more on COM+ and .NET

Posted by pardini · 1 Comment 

A few interesting bits from c2.com’s “ComIsLove”, of all places…

“The problem is the definition of COM. Here is a summary of how COM/COM+ are affected by the .Net Framework.

COM and COM+ are many different things. It is a low level API based infrastructure that consists of APIs like CoSetProxyBlanket, AddRef, Release, QueryInterface, etc. It is a programming model that revolves around creating objects and calling methods on those objects (procedure oriented). And it is a set of services that sit on top of both of these things that apply and provide behavior to the objects such as synchronization, pooling, transactions, etc.

Over time, the .Net framework will replace the underlying goo. Everybody agrees that this is good.

However, the programming model is here to stay. The way it is implemented might change – for example, the procedural programming model might be built on top of a messaging layer, which programmers also might have access to. I believe the installed base of applications that depend on this type of programming (e.g. VBScript for Office, ASP pages, etc.) and the familiarity that programmers have with it means that this is here to stay.

The services are definitely here to stay. The requirements for them are not going to go away – anybody who writes a business app will likely need to use these services when they use the .NET framework. Our goal is to make accessing the services from the .Net framework as seamless and as easy as possible. We’ve made great strides for this in V1 of the .Net framework – there are custom attributes for virtually all of the services, we do automatic registration when unregistered components are created, etc. We plan to make this even better in subsequent releases of the products. We recognize that some of the benefits of the .Net Framework (like XCOPY install/uninstall, automatic memory management, etc) are currently reduced when using some of the COM+ services inside the .Net Framework. However this is a function of schedule and not intent. We will be working diligently to integrate these services with the .Net infrastructure and create a seamless experience for our customers to use the whole of the .Net platform.

It is important to understand that we are not throwing out the old and bringing in the new. We are refocusing our platform to empower the next generation of the web. In doing so we are leveraging all of the assets we currently have and the existing COM+ features are key to this platform. The DCOM protocol is an interesting issue. Clearly our story for the Internet is HTTP and SOAP. Some intranet scenarios will use this too because there is increasing use of firewalls to partition corporate Internets. That said, DCOM is a high performance binary remoting protocol and is valuable in some tightly-coupled scenarios. In fact the common language runtime object remoting services use DCOM for some remoting. We will have to see how this evolves in the future, but there will likely always be a need to a higher performance protocol than HTTP and XML.”