Arquivos da categoria: Software Livre

Acesse o OTRS com seu AndroidAccess OTRS with Android Mobile

Muita gente pediu:

https://otrsteam.ideascale.com/a/dtd/App-for-mobile-devices-like-Android–Blackberry/83263-10369

Um desenvolvedor mandou ver!

https://market.android.com/details?id=com.ptitov.megaticket&rdid=com.ptitov.megaticket&rdot=1Lot of people asked it:

https://otrsteam.ideascale.com/a/dtd/App-for-mobile-devices-like-Android–Blackberry/83263-10369

One guy or company made it!

https://market.android.com/details?id=com.ptitov.megaticket&rdid=com.ptitov.megaticket&rdot=1

A small Web Hosting with OpenPanel + Ubuntu Server 10.04 LTS + some tricks

Hi,

I’m trying Openpanel, a great new opensource tool that helps developers make a complex server tasks with some mouse clicks.

http://www.openpanel.com/

You can create domains, mail accounts, DNS and other stuff in a “Panel” way. You can create user accounts and allow them to create their own domains, emails and vhosts.

I’m trying it on linode

www.linode.com

With Ubuntu Server 10.04 LTS (You can deploy this image from linode dashboard. You have a virtual machine running after 5 min max)

After a successful OpenPanel install, I need to make my users vhosts run as Apache process of their own user. This way, their php and other apps could write under their directories and make some personal stuff, as also it gets better to my administration tasks.

Unfortunately, this feature is not yet implemented (but it’s on the roadmap), so I need to create the followin “hack”:

  • Install a new MPM apache module:
    sudo apt-get install apache2-mpm-itk
  • Write a script that’s create the directives which makes every vhost runs under it’s owner account and put ir under crontab to run every 10 minutes
    sudo pico /opt/apacheexec.sh
    Put the following content on it:
#!/bin/bash
for sites in /home/*/sites/*
do
    user=`echo "${sites}"|cut -d'/' -f 3`
    site=`echo "${sites}"|cut -d'/' -f 5`
    arquivo=`echo "/etc/apache2/openpanel.d/${site}.inc/mpmitkUser"`
    if [ -f $arquivo ]; then
        true
    else
        echo "<IfModule mpm_itk_module>" > $arquivo
        echo "AssignUserId ${user} ${user}" >> $arquivo
        echo "</IfModule>" >> $arquivo
        exec `/usr/sbin/apache2ctl graceful`
    fi
done
  • Then, make it executable
    chmod a+x /opt/apacheexec.sh
  • Finally, put it to run on crontab
    sudo crontab -e -u root
  • Write it:
    */10 * * * * /opt/apacheexec.sh

And we are done!

OTRS: Mostrar/ocultar itens no menu do Ticket de acordo com o grupo do usuárioOTRS: Show/Hide itens on Ticket Menu according to the user group

O OTRS é uma ferramenta poderosa que oculta muitos de suas possibilidades no código que ainda não está 100% documentado. Essa eu descobri fazendo engenharia reversa no código.

Imagine que você quer retirar o menu Prioridade do Ticket para os atendentes de 1o nível e deixar apenas visível para supervisores.

Acesse ADMIN-> Configurações do Sistema -> Ticket -> Frontend::Agent::Ticket::MenuModule

Em seguida ache o parametro de configuração referente ao item que você deseja ocultar. Neste caso, Ticket::Frontend::MenuModule###300-Priority

Adicione um chave “Group” e no campo conteúdo coloque “rw:nome_do_grupo_que_tera_acesso”. Para adicionar mais de um grupo, separe por ponto e virgula: “rw:admin;rw:supervisores”OTRS is a great software it’s not 100% documentated. I find this tip digging the source code.

Imagine that you want to remove the Priority link from Nav Bar of Level 1 Agente Front end, while he/she is viewing a ticket and you want it to be viewable only for supervisors.

Go to ADMIN-> SysConfig -> Ticket -> Frontend::Agent::Ticket::MenuModule

Then find the parameter you want to hide/remove. In this case, Ticket::Frontend::MenuModule###300-Priority

Add a key called “Group” and the put “rw:group_that_has_access” as the content. To add more groups, separete with “;”. For example: “rw:admin;rw;supervisors”.

Passo a Passo para instalar um OTRS 3 completo no Ubuntu Server 11.04Step by Step OTRS 3 on Ubuntu Server 11.04 installation

A partir de uma instalação clean do Ubuntu. Vamos executar os seguintes comandos:

Vamos atualizar o sistema

sudo apt-get update
sudo apt-get upgrade

Vamos instalar a maior parte dos pacotes necessários pelo OTRS 3

sudo apt-get install otrs2 aspell-pt-br build-essential

Durante este processo, o servidor pedirá que você indique uma senha de Mysql para seu servidor. Coloque uma senha e anote-a!

O sistema também te perguntará se deseja configurar automaticamente a base de dados do OTRS. Eu escolhi que não (Configure database for otrs2 with dbconfig-common?)

Agora, removemos o OTRS 2 que não será necessário.

sudo apt-get remove otrs2

Vamos baixar o otrs para o servidor, descompactar e renomear sua pasta.

cd /opt
wget http://ftp.otrs.org/pub/otrs/otrs-3.0.10.tar.bz2
tar jcvpf otrs-3.0.10.tar.bz2
mv otrs-3.0.10 otrs

Instalando os módulos perl necessários:

sudo perl -MCPAN -e shell

Responda todas as perguntas com a resposta padrão que está entre “[]”. Quando surgir o prompt (cpan[1]>) digite:

install YAML
install Encode::HanExtra
install JSON::XS
install Net::LDAP

(aqui na instalação do Net::LDAP, quando perguntado se você deseja instalar um modulo opcional, responda sim (y))

install MKUTTER/SOAP-Lite-0.710.10.tar.gz
exit

Criando os arquivos de configurações

sudo rm /etc/apache2/conf.d/otrs2
sudo cp /opt/otrs/scripts/apache2-httpd.include.conf /etc/apache2/sites-available/otrs
sudo cp /opt/otrs/Kernel/Config.pm.dist /opt/otrs/Kernel/Config.pm
sudo a2ensite otrs
sudo apache2ctl restart

Arrumando permissões:

sudo usermod -a -G nogroup otrs
sudo usermod -a -G www-data otrs
cd /opt/otrs/bin
sudo ./otrs.SetPermissions.pl /opt/otrs --otrs-user=otrs --web-user=www-data --otrs-group=nogroup --web-group=www-data

Finalmente, acesse o instalador do OTRS via Web, de um outro computador que tenha um navegador:

http://seu_servidor_ou_ip/otrs/installer.pl

Siga o passo a passo apresentado na tela. Neste método, você vai precisar da senha do servidor de banco de dados que você instalou e anotou 🙂This article is only available in portuguese, sorry =\

Acessando o Internet Banking Santander pelo Ubuntu

Um passo a passo bem resumido:

  1. Abra a Central de Programas do Ubuntu
  2. Pesquise pelo termo “jre”
  3. Remova o “Runtime do OpenJDK Java 6”
  4. Instale o “Sun Java(TM) Runtime Enviroment (JRE) 6 (architecture independent files)” (pacote sun-java6-jre)
  5. Instale o “Java(TM) Plug-in, Java SE 6” (pacote sun-java6-plugin)
  6. Reinicie o Firefox e acesse o site do Santander
  7. Digite as informações de sua conta, clique no seu nome
  8. Siga o passo a passo para instalar o modulo de segurança do Banco.

Aqui funcionou 🙂 Um motivo a menos pra ter Windows na máquina.

Removendo Virus (malware) do WordPress e protegendo seu blogRemoving virus (badware) from WordPress e protecting your blog

Note: não me responsabilizo por danos causados em sua instalação. Utilize essas dicas por sua própria conta e risco 🙂

Estes dias tive dois sites wordpress infectados por malwares! Penei um pouco pra limpar o site e resolvi compartilhar aqui as dicas que fui juntando pelo caminho.

Basicamente, os virus se criam um “backdoor”  se aproveitando de alguma falha de segurança ou bug em sua instalação. Com esse backdoor criado, o virus tem acesso direto ao seu site mesmo após a correção do bug ou atualização do sistema. É como se o virus tivesse criado uma conta de ssh em seu servidor e pudesse executar praticamente qualquer comando lá dentro.

Em um dos casos, o bug que permitiu a instalação do virus estava em um tema que utilizava uma biblioteca chamada timthumb.php. Descobri neste link a falha que esse arquivo continha e segui os passos descritos lá para resolver o problema. Este virus se instalava através do timthumb.php e criava um backdoor. Através do backdoor, outros virus se instalaram no site. Corrigi o arquivo timthumb.php para remover a possibilidade de uma nova invasão.

Estes virus por sua vez, inseriam um iframe na home page do site, fazendo com que o visitante fosse redirecionado para um site com código malicioso. No meu caso, era um iframe para um site chamado wordpress-counter.com

Tive então que remover backdoor antes de remover o gerador de iframe, pois sempre que removia o iframe em si, o mesmo se instaurava novamente após 15 minutos através do backdoor.

Segui as dicas deste post e descobri o backdoor no arquivo wp-config.php. Após o fim do código tradicional do WordPress haviam cerca de 100 linhas em branco e, em seguida, o código nocivo que permitia a executação de scripts php enviados por REQUESTs.

Depois, segui as dicas deste outro post, para eliminar os geradores de iframe.

Finalmente, fiz um congelamento dos arquivos da minha instalação do WordPress. Para isso, acessei a raiz do site através do SSH e realizei os passos abaixo (note que isto impedirá você de atualizar automaticamente o WordPress para versões mais recentes pelo Dashboard):

Para proteger pastas:

find . -type d -exec chmod 755 {} \;

Para proteger arquivos:

find . -type f -exec chmod 644 {} \;

Para impedir que outros usuários enxerguem os dados de seu banco de dados, o que é possível em algumas hospedagens compartilhadas:

chmod 750 wp-config.php

Para impedir que novos ataques modifiquem qualquer arquivo no seu sistema (menos arquivos de plugins e temas):

chmod u-w * -R
chmod u+w wp-content -R

Referencias

http://blog.sucuri.net/2011/08/timthumb-php-security-vulnerability-just-the-tip-of-the-iceberg.html
http://markmaunder.com/2011/08/01/zero-day-vulnerability-in-many-wordpress-themes/
http://cantonbecker.com/work/musings/2009/how-to-search-for-backdoors-in-a-hacked-wordpress-site/
http://blog.unmaskparasites.com/2011/03/02/versatile-cc-attacks/
http://codex.wordpress.org/Hardening_WordPress Note: I’m not responsible for damage to your installation. Use these tips at your own risk:)

These days I have two wordpress sites infected with malware! I suffered a bit to clean the site and decided to share the tips here that I was joining the road.

Basically, viruses create a “backdoor” taking advantage of some security flaw or bug in your installation. With this backdoor created, the virus has direct access to your site even after the bug fix or upgrade the system. It is like as if the virus had established an ssh account on your server and could perform almost any command in there.

In one case, the bug that allowed the installation of the virus was a theme that uses a library called timthumb.php. I Found the failure in this link and follow the steps there to solve the problem. This virus is installed through the timthumb.php and creates a backdoor. Through the backdoor, other viruses have settled on the site. I’ve fixed the file timthumb.php to remove the possibility of a new invasion.

This virus inserted an iframe on the home page of the site, causing the visitor to be redirected to a site with malicious code. In my case it was an iframe to a site called wordpress-counter.com

Then I had to remove the backdoor before removing the iframe code generator, because when removing the iframe itself, it was introduced again after 15 minutes through the backdoor.

Follow the tips this post and discovered the backdoor in the file wp-config.php. After the end of the traditional code of WordPress, it has about 100 blank lines and then the malicious code.

Then follow the tips this other post to eliminate the iframe generators.

Finally, I froze the files of my WordPress instalation. I accessed the site root via SSH and perform the steps below (note that this will block you from WordPress to automatically update the latest versions of the Dashboard):

To protect folders:

 find. -type d -exec chmod 755 {} \; 

To protect files:

 find. -type f -exec chmod 644 {} \; 

To prevent other users to view data from your database, which is possible in some shared hosting:

 chmod 750 wp-config.php 

To prevent further attacks modify any file on your system (files less plugins and themes):

 chmod u-w -R *
chmod u+w -R wp-content

References

http://blog.sucuri.net/2011/08/timthumb-php-security-vulnerability-just-the-tip-of-the-iceberg.html
http://markmaunder.com/2011/08/01/zero-day-vulnerability-in-many-wordpress-themes/
http://cantonbecker.com/work/musings/2009/how-to-search-for-backdoors-in-a-hacked-wordpress-site/
http://blog.unmaskparasites.com/2011/03/02/versatile-cc-attacks/
http://codex.wordpress.org/Hardening_WordPress

Ubuntu 11.04 no Dell Vostro 3450 com placa Radeon 6330M – parte 2Ubuntu 11.04 on Dell Vostro 3450 with Radeon 6330M – part 2

Este post substitui as dicas que dei no primeiro post relacionado ao assunto. Naquele post, a dica para inicializar o laptop era desativar um recurso chamado modeset, colocando uma flag na inicialização do sistema “radeon.modeset=0”.

O problema é que desativando este recurso, o laptop fica um pouco mais lento e alguma funções adicionais do sistema param de funcionar.

A segunda solução que encontrei, e a melhor até agora, é a seguinte:

Depois de instalado, para realizar o primeiro boot com o sistema, na tela de escolha do sistema operacional (o famoso Grub), pressione “e”. Uma tela de edição abrirá. Digite no fim da linha onde está o parametro quiet splash (ou algo assim):
radeon.modeset=0

Pressione Crtl+X e o sistema inicializará.

Em seguida, vamos impedir o carregamento automático da placa de video Radeon adicionando-a num blacklist de modulos que são reconhecidos automáticamente. No terminal, digite:

sudo gedit /etc/modprobe.d/blacklist.conf

Na ultima linha do arquivo, escreva o seguinte:

blacklist radeon

Salve o arquivo. Em seguida, vamos fazer com que o modulo seja carregado posteriormente a inicialização básica do sistema. No terminal digite:

sudo gedit /etc/rc.local

Após a linha “# By default this script does nothing.” digite o conteúdo abaixo:

modprobe radeon
chown root:plugdev /sys/kernel/debug/vgaswitcheroo/switch
echo OFF > /sys/kernel/debug/vgaswitcheroo/switch
exit 0

Salve o arquivo e reinicie o computador. Isso deve ser o suficiente para que o sistema suba da maneira correta, sem desativar o modeset da placa.This post overwrites the tips I gave on this first one. On that post, the tip was start the laptop disabling a featured called “modeset”.

The problem is that disabling it makes the laptop slower and disable some other interesting features like GPU switching.

The second way I found, and the best one, is the following:

After the system is installed, press “e” when you get Grub screen when you boot it first time. A boot options editor will open and you should add the line below after the param quiet splash:

radeon.modeset=0

Press Crtl+X and the system will boot up.

After that, we need to block the automatic load of radeon module adding it to a blacklist. Open Gnome-terminal and type:

sudo gedit /etc/modprobe.d/blacklist.conf

In the end of the file, type:

blacklist radeon

Save it. After that, we need to make the system load the module in a second moment of the boot process. Type in gnome-terminal:

sudo gedit /etc/rc.local

After the line “# By default this script does nothing.” type this:

modprobe radeon
chown root:plugdev /sys/kernel/debug/vgaswitcheroo/switch
echo OFF > /sys/kernel/debug/vgaswitcheroo/switch
exit 0

Save the file e reboot the system. This may be sufficient to the system work out without disabling radeon modeser.

Criando seu próprio banco de dados de geo localização baseado em IPYour own database with geo located ip information

Para aqueles que desejam servir um conteúdo em sua aplicação baseado na localização de seus usuários, uma das alternativas é a localização por IP, quando o visitante não dispoem de um dispositivo GPS.

Existem algumas bibliotecas que podemos utilizar para fazer esta pesquisa através de webservices:

http://www.geoplugin.com
http://www.maxmind.com

Estas aplicações no entanto, nem sempre fornecem uma informação correta sobre o posicionamento do visitante. Em meu caso, precisei criar uma banco de dados proprio, obtendo grande parte das informações de um BD gratuíto disponibilizado pela MaxMind.

O primeiro passo é fazer o donwload do arquivo CSV e descompacta-lo. Você encontra o arquivo neste link:

http://www.maxmind.com/app/geolitecity

Em seguida, é precisa criar duas tabelas em seu BD. Eu as criei desta forma:

CREATE TABLE `geo_blocks` (
`id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`location_id` INT(10) UNSIGNED NOT NULL,
`ip_start` INT(10) UNSIGNED NOT NULL,
`ip_end` INT(10) UNSIGNED NOT NULL,
`index_geo` INT(10) UNSIGNED NOT NULL,
PRIMARY KEY (`id`),
INDEX `idx_start` (`ip_start`),
INDEX `idx_end` (`ip_end`),
INDEX `idx_geo` (`index_geo`)
);

CREATE TABLE `geoip`.`location` (
`locId` INT NOT NULL ,
`country` VARCHAR( 100 ) NOT NULL ,
`region` VARCHAR( 100 ) NOT NULL ,
`city` VARCHAR( 150 ) NOT NULL ,
`postalCode` VARCHAR( 20 ) NOT NULL ,
`latitude` VARCHAR( 10 ) NOT NULL ,
`longitude` VARCHAR( 10 ) NOT NULL ,
`metroCode` VARCHAR( 100 ) NOT NULL ,
`areaCode` VARCHAR( 100 ) NOT NULL ,
PRIMARY KEY ( `locId` )
) ENGINE = MYISAM ;

Em seguida, vamos importar os arquivos para as tabelas. Também no Mysql, rode os seguintes comandos:

load data local infile '/caminho/para/o/arquivo/GeoLiteCity_20110802/GeoLiteCity-Blocks.csv'
into table geo_blocks
fields terminated by ',' enclosed by '"'
lines terminated by '\n' ignore 2 lines (ip_start, ip_end, location_id);

load data local infile '/caminho/para/o/arquivo/GeoLiteCity_20110802/GeoLiteCity-Location.csv'
into table location
fields terminated by ',' enclosed by '"'
 lines terminated by '\n' ignore 2 lines (locId,country,region,city,postalCode,latitude,longitude,metroCode,areaCode) ;

O restante é com você 🙂

Veja como trabalhar com essas tabelas, neste tutorial da MaxMind:
http://www.maxmind.com/app/csv 

For those who wants to serve content based on viewers location, one good alternative is IP geolocalization, when the viewer or the aplication ins’t integrated with GPS.

There are some libs that we can use to geo locate viewers with IP information:

http://www.geoplugin.com
http://www.maxmind.com

Those applications doens’t offer 100% accurated information but they are a good start point. Let’s create our own Geo Database using MaxMind CityLite free Database.

First, download the CSV file from MaxMind Web Site:

http://www.maxmind.com/app/geolitecity

Then, we need to create 2 tables:

CREATE TABLE `geo_blocks` (
`id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`location_id` INT(10) UNSIGNED NOT NULL,
`ip_start` INT(10) UNSIGNED NOT NULL,
`ip_end` INT(10) UNSIGNED NOT NULL,
`index_geo` INT(10) UNSIGNED NOT NULL,
PRIMARY KEY (`id`),
INDEX `idx_start` (`ip_start`),
INDEX `idx_end` (`ip_end`),
INDEX `idx_geo` (`index_geo`)
);

CREATE TABLE `geoip`.`location` (
`locId` INT NOT NULL ,
`country` VARCHAR( 100 ) NOT NULL ,
`region` VARCHAR( 100 ) NOT NULL ,
`city` VARCHAR( 150 ) NOT NULL ,
`postalCode` VARCHAR( 20 ) NOT NULL ,
`latitude` VARCHAR( 10 ) NOT NULL ,
`longitude` VARCHAR( 10 ) NOT NULL ,
`metroCode` VARCHAR( 100 ) NOT NULL ,
`areaCode` VARCHAR( 100 ) NOT NULL ,
PRIMARY KEY ( `locId` )
) ENGINE = MYISAM ;

After that, you need to import the CSV files to the mysql:

load data local infile '/pathe/to/the/file/GeoLiteCity_20110802/GeoLiteCity-Blocks.csv'
into table geo_blocks
fields terminated by ',' enclosed by '"'
lines terminated by '\n' ignore 2 lines (ip_start, ip_end, location_id);

load data local infile '/pathe/to/the/file/GeoLiteCity_20110802/GeoLiteCity-Location.csv'
into table location
fields terminated by ',' enclosed by '"'
 lines terminated by '\n' ignore 2 lines (locId,country,region,city,postalCode,latitude,longitude,metroCode,areaCode) ;

That’s all, use it as you want 🙂

MaxMind has a small tutorial teaching how to use the CSV file also:
http://www.maxmind.com/app/csv

Passando informações numa URL utilizando RewriteRules ao invés de QueryStringsSending information through GET Method (URL) using RewriteRules instead of QueryStrings

Um pequeno tutorial para quem faz sistemas que precisam de pretty Urls

Exemplo tosco:

Você tem um formulário de pesquisa que permite ao usuário escolher uma categoria de um livro, o nome do autor e/ou a editora de uma obra.

A URL gerada para uma pesquisa deste form seria algo como:

http://localhost/pesquisa.php?categoria=12&autor=22&editora=12
ou se escolhermos apenas o campo editora:
http://localhost/pesquisa.php?editora=12

Se quisermos transformar o resultado desta pesquisa, num link interpretável pelos mecanismos de busca precisamos utilizar o recurso RewriteRules do Apache.

A URL ficaria assim:
http://localhost/pesquisa/categoria/12/autor/22/editora/12

O arquivo .htaccess precisaria das seguintes diretrizes:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^.*$ index.php
RewriteRule ^pesquisa pesquisa.php
RewriteRule ^(.+)categoria/([0-9]+)/? pesquisa.php/?categoria=$2 [QSA]
RewriteRule ^(.+)autor/([0-9]+)/? pesquisa.php/?autor=$2 [QSA]
RewriteRule ^(.+)editora/([0-9]+)/? pesquisa.php/?editora=$2 [QSA]
</IfModule>

A flag [QSA] (Query String Append) faz com que o Apache concatene todas as Query Strings tratadas nas regras definidas do arquivo. Desta forma, não importa a ordem que você utiliza para construir a URL. As duas formas abaixo irão funcionar:

http://localhost/pesquisa/categoria/12/autor/22/editora/12
http://localhost/pesquisa/editora/12/autor/22/categoria/12

Um pouco sobre as expressões regulares

Nunca me dei bem com essas benditas RegExp, mas vou tentar explicar as principais que utilizei neste exemplo:

^(.+)categoria/([0-9]+)/?

o ^ indica o início da string, neste caso, a URL do navegador, pra ser mais especifico, tudo o que está entre a primeira barra após o nome do host e a primeira interrogação (inicio da querystring), ou seja, no nosso exemplo de pretty URL, seria:
/pesquisa/categoria/12/autor/22/editora/12

O “.+” indica que 1 ou vários caracteres podem ser encontrados entre o início da string (determinado pelo sinal ^) e a palavra “categoria/”. Estes dois caracteres estão entre parenteses “(.+)” pois desta forma o apache entende que o que for encontrado que corresponda à este expressão regular deve ser armazenado numa variável. Neste caso, por ser o primeiro parenteses, a variável será $1

A expressão [0-9] indica que procuramos caracteres numéricos (de 0 a 9). O sinal “+” após “[0-9]” indica que procuramos um ou mais caracteres desta espécie e os parenteses que envolvem a expressão toda “([0-9]+)” indica que queremos armazenar o resultado encontrado por essa expressão numa variável. Como é o segundo conjunto de parenteses, esta variável será a $2.

Finalmente, a expressão “/?” no fim da string, nos diz que pode haver ou não uma “/” no fim da expressão “categoria/([0-9]+)”. O sinal de interrogação representa 0 ou uma ocorrência da expressão que ele acompanha.

Ufa!Small Pretty URLs tutorial.

Imagine the your app have a search form that allows the user choose a  book category, the author and/or the publisher.

The generated URL in get method for an query example would be something like:

http://localhost/search.php?category=12&author=22&publisher=12
or if we choose only the publisher field:
http://localhost/search.php?publisher=12

We can use Apache Rewrite Rules to transform it into a search engine robot readable link. The URL would be something like this:
http://localhost/search/category/12/author/22/publisher/12

.htaccess file needs these directives:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^.*$ index.php
RewriteRule ^search search.php
RewriteRule ^(.+)category/([0-9]+)/? search.php/?category=$2 [QSA]
RewriteRule ^(.+)author/([0-9]+)/? search.php/?author=$2 [QSA]
RewriteRule ^(.+)publisher/([0-9]+)/? search.php/?publisher=$2 [QSA]
</IfModule>

[QSA] (Query String Append) is a flag that makes Apache concatenate the Query Strings generated by all rules defined on .htaccess. This make all following queries work, independent of the variables order:

http://localhost/search/category/12/author/22/publisher/12
http://localhost/search/publisher/12/author/22/category/12

Regular Expressions

I’m not expert on Regular Expressions, but I’ll try to explain those I used in the given examples

^(.+)category/([0-9]+)/?

^ indicates the string start, the browser URL in this case or everything after the first slash from host name on and everything before the query string (the interrogation sign). On our example, this is the string:
/pesquisa/categoria/12/autor/22/editora/12

“.+” indicates that one or mor chars can be found from the string’s start and the word “category/”. Both chars are inside a parentheses because we want to indicate that the found result should be assigned to a var, in this case, the var will be $1.

The expression is [0-9] indicates that we search for numbers only. The “+” sign after [0-9] indicates that we look for one ore more numbers, and the parentheses indicates that we want to assign the found result into a next var ($2).

Finally, the expression “/?” in the end of the string, indicates that a slash can be found or not in the end of the string.

Ubuntu 11.04 no laptop Vostro 3450 com placa gráfica Radeon 6330M HD

ESTE POST ESTÁ DESATUALIZADO. VEJA ESTE POST POR FAVOR.

Um dos problemas de se adquirir um equipamento novo e utilizar o Ubuntu como distribuição, é que geralmente, falta um módulo ou outro que funcione 100% como deveria. Nada grave, a gente contorna e ajuda a desenvolver a integração por completo.

Por enquanto, tive algumas dificuldades na utilização do Vostro 3450 com a placa gráfica 6330M HD da AMD (Radeon). Trata-se de uma tecnologia bem recente que utiliza duas placas de vídeo no mesmo laptop, uma de baixo processamento e outra para graficos mais complexos. Este recurso ainda não está super bem resolvido nos kernels atuais.

Enquanto isso, para rodar o ubuntu neste laptop, é necessário desativar um recurso relativo à esta comutação entre as placas.

Para instalar o Ubuntu, logo que você realiza o boot, acesse as opções de Boot navegando com as setas do teclado e escolha a opção “nomodeset”.

Depois de instalado, para realizar o primeiro boot com o sistema, na tela de escolha do sistema operacional (o famoso Grub), pressione “e”. Uma tela de edição abrirá. Digite no fim da linha onde está o parametro quiet splash (ou algo assim):
radeon.modeset=0

Pressione Crtl+X

O sistema irá bootar. Essa configuração não é permanente. Para torná-la, após iniciar seu sistema pela primeira vez, edite o arquivo de configurações do grub. Abra o terminal e de o comando:

sudo gedit /etc/default/grub

e modifique a linha

GRUB_CMDLINE_LINUX_DEFAULT=”quiet splash”
para

GRUB_CMDLINE_LINUX_DEFAULT=”quiet splash radeon.modeset=0″

Salva o arquivo, feche o Gedit e rode o seguinte comando:

sudo update-grub

Pronto! Infelizmente, essas modificações diminuem o desempenho da parte gráfica deste laptop. Se algum tiver uma nova dica para habilitar corretamente esta placa de video no Ubuntu, por favor deixe seu comentário! 🙂

O sistema que instalei, foi o Ubuntu 11.04 64 bits.THIS POST IS DEPRECATED. SEE THIS ONE PLEASE.

Um dos problemas de se adquirir um equipamento novo e utilizar o Ubuntu como distribuição, é que geralmente, falta um módulo ou outro que funcione 100% como deveria. Nada grave, a gente contorna e ajuda a desenvolver a integração por completo.

Por enquanto, tive algumas dificuldades na utilização do Vostro 3450 com a placa gráfica 6330M HD da AMD (Radeon). Trata-se de uma tecnologia bem recente que utiliza duas placas de vídeo no mesmo laptop, uma de baixo processamento e outra para graficos mais complexos. Este recurso ainda não está super bem resolvido nos kernels atuais.

Enquanto isso, para rodar o ubuntu neste laptop, é necessário desativar um recurso relativo à esta comutação entre as placas.

Para instalar o Ubuntu, logo que você realiza o boot, acesse as opções de Boot navegando com as setas do teclado e escolha a opção “nomodeset”.

Depois de instalado, para realizar o primeiro boot com o sistema, na tela de escolha do sistema operacional (o famoso Grub), pressione “e”. Uma tela de edição abrirá. Digite no fim da linha onde está o parametro quiet splash (ou algo assim):
radeon.modeset=0

Pressione Crtl+X

O sistema irá bootar. Essa configuração não é permanente. Para torná-la, após iniciar seu sistema pela primeira vez, edite o arquivo de configurações do grub. Abra o terminal e de o comando:

sudo gedit /etc/default/grub

e modifique a linha

GRUB_CMDLINE_LINUX_DEFAULT=”quiet splash”
para

GRUB_CMDLINE_LINUX_DEFAULT=”quiet splash radeon.modeset=0″

Salva o arquivo, feche o Gedit e rode o seguinte comando:

sudo update-grub

Pronto! Infelizmente, essas modificações diminuem o desempenho da parte gráfica deste laptop. Se algum tiver uma nova dica para habilitar corretamente esta placa de video no Ubuntu, por favor deixe seu comentário! 🙂

O sistema que instalei, foi o Ubuntu 11.04 64 bits.