Autor Arquivo: Jac

Pesquisando Arquivos no Linux – locate e find

Localizar um arquivo por linha de comando no Linux pode se mostrar uma tarefa complicada para usuários iniciantes. Por isso, vou fazer um resumo aqui que será o suficiente para resolver a necessidade da maioria das pessoas.

Files

Continuar Lendo →

Reembolso do Windows pela Dell

Em outubro desse ano que está se encerrando, decidi comprar um novo notebook. Mas como me tornei usuária de Linux e já havia lido outros casos de reembolso do windows, decidi que gostaria de comprar um note já com Linux.

Decidi comprar da Dell porque 1-meu notebook antigo era deles e eu estava bem satisfeita com o produto; 2-a Dell parecia ser a fabricante que mais apoiava o software livre e para a qual seria mais fácil solicitar reembolso.

Dell
Continuar Lendo →

Lista de programas úteis para Linux

Eu costumo ser uma pessoa bem organizada e gosto de ter tudo o que é meu sempre na mão. Por isso, eu s faço backups dos meus arquivos, mantenho as minhas músicas separadas e devidamente “tageadas”, organizo fotos pessoais por data, por exemplo. Mas uma coisa estava me incomodando desde a minha migração para Linux (no caso, Ubntu 11.10): o medo de perder a instalação de um programa e esquecer do nome dele.

Alguns programas são óbvios, como o Chrome, mas eu tenho alguns que são frutos de uma vasta pesquisa que não gostaria de repetir. Então, como surgiu a necessidade de eu mudar de notebook, decidi fazer uma checklist com os programas que eu utilizo para meu controle e para quem quiser alguma sugestão.

ps. Não escolhi o método de instalação ideal ou mais elegante ou mais nerd, apenas pelo mais prático.

EDIT: Modo de instalação atualizado para Ubuntu 16.04!
Continuar Lendo →

Django: URLs – Parte 01

Para arquitetar as URLs do seu projeto Django, criamos um módulo de Python informalmente chamado URLconf. URLconfs são como Django associa uma URL com um determinado código a ser executado (no caso, nossas views).

Quando o usuário acessa uma página, o sistema confere a varíavel ROOT_URLCONF no arquivo setting.py, que contém o nome do módulo que deverá ser executado. Ao executar esse módulo, ele carrega uma variável chamada urlpatterns que contém a lista de todas as nossas urls.

Quando nós criamos um projeto rodando o django-admin.py startproject MeuProjetoIncrivel, é criado automaticamente a URLconf em MeuProjetoIncrivel/url.py e, também automaticamente, é definida a setting ROOT_URLCONF (em MeuProjetoIncrivel/settings.py) para indicar nosso arquivo url.py:

ROOT_URLCONF = 'MeuProjetoIncrivel.urls'

Tudo muito fácil e perfeito. Agora é nossa vez de trabalhar! Visualizando o que temos no arquivo url.py e desconsiderando as linhas comentadas (que servirão para habilitar o admin e a documentação do admin), veremos o seguinte código:

from django.conf.urls import patterns, include, url

urlpatterns = patterns('',
)
  • A primeira linha importa alguns objetos de django.conf.urls import patterns, incluindo uma função chamada patterns.
  • A segunda linha chama a função patterns e salva o retorno na variável urlpatterns. Nós iremos alterar o parâmetro da função para inserirmos nossas urls.

A url que nós certamente queremos alterar é do root do nosso site. Então primeiramente acrescentaremos o seguinte código:

from django.conf.urls import patterns, include, url

urlpatterns = patterns('',
(r'^$', 'app.views.view_da_minha_homepage'),
# ...
)

Explicação:

  • O “r” inicial de cada expressão regular é opcional, mas recomendada. Ela diz que uma string é “raw” e não deve ser “escapada”. Ou seja, quando tiver um “\t” na string, ela deve ser lida como “barra-tê” ao invés de virar um tab.
  • O acento circunflexo (^) e o cifrão ($) são caracteres que indicam que o padrão combine exatamente com o começo da string (^) e com o final ($).

Exemplos: Se nós temos uma url ‘^exemplo/’ (sem o $ no final), então qualquer URL que comece com /exemplo/ vai ser reconhecida, como /exemplo/foo ou /exemplo/bar, não apenas /hello/. Da mesma forma, se nós tirarmos o circunflexo (i.e. ‘exemplo/$’), Django vai reconhecer qualquer url terminada em exemplo/, como /foo/exemplo e /bar/exemplo. E, finalmente, se deixarmos a url só como ‘exemplo/‘ qualquer url que tenha ‘exemplo/‘ no meio vai ser aceita (foo/exemplo/bar, foo/bar/exemplo, exemplo/foo, etc).

Agora, imagine que tenhamos um blog no MeuProjetoIncrivel, cuja url será /blog/. Para mapearmos essa url, basta acrescentar no nosso código:

from django.conf.urls import patterns, include, url

urlpatterns = patterns('',
(r'^$', 'app.views.view_da_minha_homepage'),
(r'^blog/$', 'app.views.view_do_meu_blog'),
# ...
)

Assim estamos informando que toda solicitação ao root do projeto (digamos, um endereço como http://www.meuprojetoincrivel.com.br) deve ser encaminhada para a app.views.view_da_minha_homepage e toda solicitação ao blog/ (www.meuprojetoincrivel.com.br/blog) deve ir para view_do_meu_blog.

Agora imagine que escolhemos ter um id para cada postagem, como nas url blog/45/ e blog/9/. Bastaria adicionarmos o seguinte código:

from django.conf.urls import patterns, include, url

urlpatterns = patterns('',
(r'^$', 'app.views.view_da_minha_homepage'),
(r'^blog/$', 'app.views.view_do_meu_blog'),
(r'^blog/\d+/$', 'app.views.view_do_meu_post'),
# ...
)

O \d+ é uma expressão regular que indica que a url pode ser compatível, naquele espaço, com um ou mais dígitos (1 ou 1000000000). Se quiséssemos limitar esse número até a postagem 999 (três dígitos), bastaria usarmos a expressão \d{1,3}.

Já conseguimos mapear a url do post, mas ainda não passamos o id do post para a view tratar. Para fazermos isso, basta colocarmos a expressão entre parênteses, assim:

from django.conf.urls import patterns, include, url

urlpatterns = patterns('',
(r'^$', 'app.views.view_da_minha_homepage'),
(r'^blog/$', 'app.views.view_do_meu_blog'),
(r'^blog/(\d+)/$', 'app.views.view_do_meu_post'),
# ...
)

Entretando dessa forma estamos obrigando nossa view a receber os argumentos dela obrigatoriamente na ordem em que são passadas. Para evitarmos isso e facilitarmos possíveis manutenções no código, vamos passar nossos argumentos já nomeados. Para isso basta alterar no (/d+) para ficar assim:

from django.conf.urls import patterns, include, url

urlpatterns = patterns('',
(r'^$', 'app.views.view_da_minha_homepage'),
(r'^blog/$', 'app.views.view_do_meu_blog'),
(r'^blog/(?P<post_id>\d+)/$', 'app.views.view_do_meu_post'),
# ...
)

E assim já temos o básico de informação para construir nossas urls =)


Fontes: Documentação Oficial do Django e Django Book

Configurando roteador com internet da GVT

Esse ano me bati feio para conseguir configurar dois roteadores. Decorei manuais, implorei ajuda ao Google, mas só recentemente descobri que um detalhe importantíssimo, como explica o Blog do Luguta:

O modem da GVT já vem configurado da prestadora como servidor DHCP. A faixa de IP usada por eles no modem é a 192.168.1.x. O modem deles vem com o IP fixo de 192.168.1.1 e é aí que mora o problema! A grande maioria dos roteadores do mercado vem configurado com esse mesmo endereço IP, e está configurado para distribuir IPs nessa mesma faixa.

Os roteadores que eu consegui configurar foram Multilaser Wireless 150Mb e o Tp-Link TL-WR941N.

Roteador

Aqui está o pass-a-passo:

Continuar Lendo →