MPlayer e Compiz Fusion no Ubuntu

Caso você use, como eu, o Ubuntu em seu computador e tenha habilitado o Compiz Fusion (no menu: Aparência->Efeitos Visuais) poderá notar que o mplayer não roda como deveria.

Ocorre um efeito de cintilamento, ou flickering, principalmente quando a janela do mplayer fica logo acima de alguma outra janela. Outro problema ocorre ao arrastarmos a janela do mplayer: a janela vai, mas o vídeo fica.

Para solucionar isto, basta clicar com o botão direito do mouse na janela do mplayer e entrar n configuração de preferências. Na aba de vídeo mude o driver para o x11.

O problema é que agora, ao ampliarmos a janela, o vídeo permanece do mesmo tamanho, não acompanhando o tamanho da janela. É preciso habilitar o zoom. Para isto abra um terminal de linha de comando (ou então apenas pressione Alt + F2) e entre com o comando:

echo "zoom=yes" >> ~/.mplayer/config

Pronto! Isto é apenas outra maneira de incluir a linha zoom=yes no arquivo ~/.mplayer/config. Se quiser utilize um editor de textos.

Posted in linux, software | Tagged , | 1 Comment

Problemas com o Hibernate

Ao testar a opção de hibernar, o sistema apenas tentou gravar as informaçõe da RAM na partição swap. Tentou e não conseguiu, pois eu estava sem swap. Fui verificar e realmente o swap acusava zero de espaço livre.

Fui ver o /etc/fstab e parecia que estava ok. Usando o Gnome Partition Editor dava pra ligar o swap (swapon), mas não usando o terminal, através do comando swapon -s.

O caso é que a entrada da partição swap no fstab estava errada. O UUID estava com um valor diferente do indicado pelo comando vol_id.

Através de uma busca no google encontrei isto: https://bugs.launchpad.net/ubuntu/+bug/105490

Bom, basicamente é o seguinte. Encontre qual o dispositivo associado à sua partição swap:

sudo fdisk -l

No meu caso é o /dev/sda7. Então veja qual o UUID dele executando o seguinte comando em um terminal:

sudo vol_id /dev/sda7

Algo parecido com isto será mostrado:

ID_FS_USAGE=other
ID_FS_TYPE=swap
ID_FS_VERSION=2
ID_FS_UUID=9c465eac-fb28-4ead-a3dd-8b364da88a4e
ID_FS_LABEL=
ID_FS_LABEL_SAFE=

Pegue o UUID correto mostrado e coloque nos arquivos /etc/fstab e /etc/initramfs-tools/conf.d/resume.

/etc/initramfs-tools/conf.d/resume:

RESUME=UUID=9c465eac-fb28-4ead-a3dd-8b364da88a4e

/etc/fstab:

UUID=9c465eac-fb28-4ead-a3dd-8b364da88a4e none            swap    sw              0       0

Agora execute o comando:

sudo update-initramfs -u

Após um tempinho, o initram é atualizado e tudo funcionará.

Posted in linux, software | Tagged , | Leave a comment

Estendendo o BoundField

Uma das facilidades que o esquema POO provê é a criação de classes a partir de outras existentes, a fim de incorporarmos (ou até restringirmos) funcionalidades, através da herança.

No Asp.Net temos os controles GridView e DetailsView, muito úteis por simplificar o processo de listar e editar entradas em um banco de dados, por exemplo. Nelas temos os controles de campo, ou coluna, tais como o BoundField, ButtonField e TemplateField entre outros .

Se você já é familiar à utilização destes controles, sabe como eles acabam por ser limitados. Caso seja necessário uma simples validação em um campo no DetaisView é preciso substituir o BoundField por um TemplateField, e colocar em seu interior algo como um TextBox mais um RequiredFieldValidator ou algum outro controle de validação.

Pegue um formulário com uns 30 campos e verá o tamanho do trabalho braçal necessário para modificar o DetailsView. Se o lema da MS é criar sistemas sem perder tempo escrevendo linhas de código redundantes, espero também não perder este tempo substituindo tags no código.

Aí que entra a herança, podemos facilmente estender um BoundField e incorporar nele um validador como o RequiredFieldValidator. Assim podemos marcar nosso campo como obrigatório apenas marcando um atributo da tag como true.

Por exemplo, estendendo o BoundField em uma classe denominada MyBoundField e adicionando uma propriedade denominada RequiredField podemos substituir a tag:

<BoundField DataField=“numCNPJ” HeaderText=“CNPJ” SortExpression=“numCNPJ” />

Por:

<cc1:MyBoundField DataField=“numCNPJ” HeaderText=“CNPJ” SortExpression=“numCNPJ” RequiredField=“true” />

Ao invés da prolixa:

<asp:TemplateField HeaderText=“CNAE” SortExpression=“numCNPJ”>
<EditItemTemplate>
<asp:TextBox ID=“TextBox1″ runat=“server” Text=‘<%# Bind(“numCNPJ”) %>’></asp:TextBox>
<asp:RequiredFieldValidator ID=“RequiredFieldValidator1″ runat=“server” ControlToValidate=“TextBox1″ ErrorMessage=“Campo requerido!” />
</EditItemTemplate>
<InsertItemTemplate>
<asp:TextBox ID=“TextBox2″ runat=“server” Text=‘<%# Bind(“numCNPJ”) %>’></asp:TextBox>
<asp:RequiredFieldValidator ID=“RequiredFieldValidator2″ runat=“server” ControlToValidate=“TextBox2″ ErrorMessage=“Campo requerido!” />
</InsertItemTemplate>
<ItemTemplate>
<asp:Label ID=“Label1″ runat=“server” Text=‘<%# Bind(“numCNPJ”) %>’></asp:Label>
</ItemTemplate>
</asp:TemplateField>

O código da classe MyBoundField é o seguinte:

using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.ComponentModel;

namespace Custom.DataBinding
{
    /// <summary>
    ///  A custom BoundField that agregates validators
    /// </summary>
    public class MyBoundField : System.Web.UI.WebControls.BoundField
    {
        protected override void InitializeDataCell(DataControlFieldCell cell, DataControlRowState rowState)
        {
            base.InitializeDataCell(cell, rowState);

            if (this.RequiredField)
            {
                if (cell.Controls[0] is TextBox)
                {
                    TextBox box = cell.Controls[0] as TextBox;
                    box.ID = this.DataField;

                }
                RequiredFieldValidator reqField = new RequiredFieldValidator();
                reqField.ControlToValidate = this.DataField;
                reqField.Text = "*";
                reqField.ErrorMessage = this.HeaderText + " is required.";
                reqField.Display = ValidatorDisplay.Dynamic;
                cell.Controls.Add(reqField);
            }
        }

        /// <summary>
        /// Require Validation
        /// </summary>
        ///
        [Browsable(true)]
        public bool RequiredField
        {
            get
            {
                if (ViewState["RequiredField"] == null)
                    return false;

                return (bool)ViewState["RequiredField"];
            }
            set
            {
                ViewState["RequiredField"] = value;
            }
        }
    }
}

Para utilizá-la em sua solução, basta criar um projeto que contenha a classe acima e colocar a diretiva Register na página aspx ou ascx:

<%@ Register Assembly=“NomeDoAssembly” Namespace=“Custom.DataBinding” TagPrefix=“cc1″ %>

Ou seu equivalente no Web.config.

Nota: Infelizmente parece que o autocompletar do intellisense não funciona ao utilizar o MyBoundField, limitando bastante os prós deste tipo de abordagem. Verificarei com mais cuidado o porquê disto. Tem alguma informação aqui: intellisense in html view. O caso é que se for necessário criar um XSD contendo a definição do novo controle, será muito difícil utilizar estas classes estendidas durante o desenvolvimento.

Posted in programação | Tagged | Leave a comment

Consertando o GRUB

Como sempre ocorre, acabei ficando sem espaço em meu disco rígido. Resolvi então diminuir o espaço dado ao Windows no sistema (qualquer dia eu apago de vez, mas ainda quero jogar GP Legends…) usando o Ubuntu 6.10 LTS Live CD e o Gparted.

O melhor a fazer com o Gparted é realizar uma ação por vez. Diminui a partição em 10GB do Windows e criei uma nova no sistema de arquivos ext3 com o espaço criado. Reboot! Ops…

O sistema deixou de subir, mostrando uma mensagem de erro do GRUB bem elucidativa: ERROR

O fato é que com a movimentação nas partições, os números que as identificam também mudaram. Eu precisava então fazer algumas coisas:

  1. descobrir a nova numeração;
  2. atualizar o GRUB na MBR;
  3. atualizar o arquivo /boot/grub/menu.lst.

Solução: usar novamente o Ubuntu Live CD.

Após carregar o sistema do CD, abri um terminal e montei o sistema de arquivos da partição onde se encontrava o Linux, com o seguinte comando:

sudo mount -o dev /dev/sda5 /media

Isto monta a partição raiz do Linux do disco rígido no diretório /media. Eu soube que era /dev/sda5 através do Gparted.

Entrei no diretório /media e executei o GRUB, o que abriu seu próprio prompt, :

$>sudo grub

grub>

Neste prompt procurei então pela nova denominação da partição

grub>find /boot/grub/stage1

O que devolveu:

(hd0,4)

Ah ha! Agora é so consertar o GRUB, configurando corretamente em que partição se encontram seus binários e arquivos de configuração:

grub>root (hd0,4)
grub>setup (hd0)
grub>quit

Agora o sistema irá ligar e deixar de emitir o erro do GRUB, MAS…. Ainda falta atualizar o arquivo de listagem do boot. Executei então o comando:

$>sudo gedit /media/boot/grub/menu.lst

E troquei todas as instâncias em que estavam escritas (hd0,6) por (hd0,4), que é a nova numeração da partição.

E agora que consegui entrar no Ubuntu vou atualizá-lo para o Feisty Fawn! =)

Nota: o comando para saber o UUID de uma determinada partição é vol_id <device>.

Posted in linux | Tagged | Leave a comment

Compilation Error CS0433

Compiler Error Message: CS0433: : The type '<um tipo>' exists in both '<um local>' and '<outro local>'

Este erro surgiu em minha aplicação. O que isto quer dizer? Simplesmente que a aplicação tem uma ou mais classes definidas com o mesmo nome em assemblies distintos.

Mas como isto pode ocorrer? Bom, pode ser resultado de uma migração da aplicação da versão 1.1 para a versão 2.0 do .Net (http://forums.asp.net/t/980517.aspx e http://webproject.scottgu.com/CSharp/Migration2/Migration2.aspx). Refaça a migração que tudo ficará ok (haha).

Pode também ocorrer se você atualizou algum assembly mas o servidor de páginas não atualizou o cache, geralmente localizado em C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files. Vá para a pasta em questão e remova tudo. Pode ser necessário fechar o Visual Studio antes disto.

Se nada disso resolveu (provável), pode ser que os assemblies conflitantes estejam uma na aplicação e uma no GAC de sua máquina. Para remover o assembly do GAC entre em C:\WINDOWS\assembly, encontre o safado e escolha a opção Uninstall. Com sorte você conseguirá realmente apagá-lo (http://technet.microsoft.com/en-us/library/aa559881.aspx).

Sem sorte? Pois é, o jeito é chafurdar no temível registro do windows, e remover algumas entradas de lá (http://support.microsoft.com/?scid=kb%3Ben-us%3B873195&x=11&y=17 e http://blogs.msdn.com/alanshi/archive/2003/12/10/42690.aspx). Após editar o registro, quem sabe seja possível remover o assembly.

Não conseguiu remover a entrada Default (ou Padrão) do registro? Cheque suas permissões quanto à entrada em questão. Quem diz que configurar o Linux é complicado nunca mexeu no registro do Windows…

Posted in software | Tagged , | Leave a comment

Recriando o Show Desktop

Desde o Windows 95 existe um botão muito útil, o Show Desktop, que minimiza todas as janelas abertas, permitindo uma visualização rápida do desktop. Se você o apagou sem querer ou utiliza o Windows 2003 Server, vai ser necessário recriá=lo. Como?

Basta criar o arquivo abaixo em seu desktop:

Show Desktop.scf

[Shell]
Command=2
IconFile=explorer.exe,3
[Taskbar]
Command=ToggleDesktop

Depois mova-o com o botão direito para o quick launch area!

Posted in software | Tagged | Leave a comment

O servidor de páginas do VS 2005

Hoje reparei em uma coisa, que quase me fez perder os cabelos.

Os links para algumas imagens em uma página aspx não apareciam na minha máquina. Daí reparei que os links estavam assim:

<img src="/caminho/para/imagens//imagem.gif" />

Reparou na dupla barra? Isto fazia com que não aparecesse a imagem aqui, tanto no IE quanto no FF. Depois de quebrar a cabeça um tempão, tentando fazer com que os image links (gerados por um template column em um datagrid) tivessem o src correto, verifiquei que no servidor, com o fonte do aspx idêntico ao meu, funcionava!

Tanto na própria máquina do servidor quanto na minha, acessando pelo navegador de minha máquina local. Percebi que isto era problema do servidor de páginas, e não de qqer outra coisa.
O servidor embutido (Cassini) no VS2005 se embanana e não consegue entregar a imagem quando existe // no endereço. =(

O IIS entrega a imagem sem problemas…. =)

Posted in programação, software | Tagged , | Leave a comment

Ubuntu 6.06 Dapper Drake num Laptop Sharp

Um amigo meu tem um notebook ultra-portátil da Sharp, o PC-MR80J, com tela de 10 polegadas. Diminuto e super leve! Mas ele foi comprado no Japão e ele instalou o Windows XP brasileiro na pobre máquina. Como nada funcionava direito, reinstalamos o Windows, agora o XP SP2.

Ocorreram alguns problemas: o som não funcionava e a rede sem fio tampouco. Encontrei o driver para rede wi-fi e pude acessar a internet pelo roteador sem fio. Mas faltava o som.

Após encontrar o driver correto para a placa de som, ele foi instalado e tudo correu bem. O som funcionava, MAS a rede parou de funcionar. Nem a com fio nem a sem fio. Após quebrar a cabeça por um tempo tentando sanar o problema, resolvi testar o live cd do Ubuntu Dapper Drake que tenho guardado. E não é que TUDO funcionou sem problemas?

Convenci-o a usar o novo SO. Mais um usuário linux no mundo e menos trabalho de manutenção para mim, pois após uma instalação limpa do Windows sempre é preciso instalar drivers, procurar codecs, instalar anti-vírus, instalar programas essenciais e manter todos atualizados.

Me certifico, dia após dia, que instalar, configurar e utilizar o Linux é muito mais simples e prático, sob qualquer ponto de vista.

Especificações

Processador: Intel® Pentium® M 730(1.60GHz)
Memória: 512 MB (expansível até 1024 MB)
Disco Rígido: 80GB (5400 RPM)
DVD SuperMulti: CD-RW, DVD+/-RW
Rede sem fio: IEEE802.11a(J52)/b/g
Sistemas Operacionais: Ubuntu Linux!
Página oficial do notebook

Instalação

Inserir o CD, rebootar a máquina, esperar o sistema carregar e clicar no ícone de instalação. Depois é só seguir o wizard.

Posted in linux | Tagged | Leave a comment

Encodings e charsets

Geralmente não precisamos nos preocupar com os Encodings em uma aplicação em .NET. Isto porque ao desenvolvermos um sistema .NET, utilizamos ferramentas uniformizadas, afinal, elas provêm de uma mesma fabricante: Microsoft.

(Já quando desenvolvemos soluções LAMP (Wikipedia:LAMP), ou mesmo WAMP, nosso cuidado precisa aumentar e muito.)

Mas e quando precisamos mudar o encoding de alguma string em Asp.NET? Simples:

Encoding.UTF8.GetString(Encoding.GetEncoding("iso8859-1").GetBytes("Média"));

A código acima toma uma string em ISO-8859-1 e tranforma-a em uma no formato UTF-8.

Posted in programação | Tagged | Leave a comment

Eclipse no Ubuntu

No Ubuntu é muito simples instalar o Eclipse, basta instalá-lo a partir dos repositórios oficiais. (mas sempre dá para instalar o pacote baixado da SUN)

Quanto ao Java, caso não queira utilizar o GCJ, não é necessário baixar diretamente da SUN os pacotes da versão mais recente (já estamos no Java 6). É só instalar a partir do Synaptic. Faça uma busca por sun-java e instale os pacotes necessários.

Depois, para mudar qual dos javas será o padrão para o sistema em geral entre com o seguinte comando para listar as versões instaladas:

update-java-alternatives -l

Para configurar o Java 6 como padrão entre com:

update-java-alternatives -s java-6-sun

Caso o Eclipse teime em usar o GCJ, você tem duas alternativas: editar o arquivo /etc/eclipse/java_home (mudança global) ou editar o arquivo ~/.eclipse/eclipserc (mudança em nível de usuário).

Caso resolva-se editar o eclipserc, basta adicionar a seguinte linha:

JAVA_HOME="/usr/lib/jvm/java-1.6.0-sun"

E para saber que problemas estão ocorrendo no Eclipse, nada como o log de erros: Window->Show View->PDE runtime->Error log

Referência: http://weblogs.java.net/blog/robogeek/archive/2007/05/ubuntu_and_easi.html

Posted in linux, software | Tagged , , | 1 Comment