Hora da mudança

Vamos crescendo e nossos sonhos aumentando…

Obrigado a todos que utilizaram este blog como uma ferramenta de crescimento profissional e auxilio às dificuldades de TI que encontraram durante seus experimentos, testes e prototipação.

Este blog não está acabando, ele será continuado em http://www.coderi.com.br, um projeto pessoal de longo planejamento que finalmente está formalizado.

O foco ainda será o conteúdo de Tecnologia da Informação, com o estilo e linguajar que os participantes frequentes deste blog conhecem. =)
Gostaria muito de abordar também questões políticas e os absurdos cometidos na gestão e politicagem atual do nosso país, mas neste blog, mesmo descontente vou me abster. Minha lista de Políticos em quem nunca votar está ficando lotada!

Compartilho com vocês as estatísticas simplificadas que captei desde dezembro 2010, quando migrei para o WordPress. Foi um grande aprendizado!

Captura de Tela 2016-03-26 às 17.59.17

Visitem o novo blog e somente compartilhem conteúdos com credibilidade, vamos aproveitar a nossa geração para deixar a internet mais limpa e mais confiável.

Um abração.
Thiago Pereira Rosa.
http://www.coderi.com.br

Popcorn Time – Remote

Controle remoto para seu Popcorn Time

O Popcorn é um cliente BitTorrent em multiplataforma livre e de código aberto. O programa destina-se como uma alternativa gratuita para serviços de vídeo sob demanda em assinatura, como o Netflix.

Durante essa semana fui desafiado por amigos a desenvolver uma solução para facilitar a navegação pela interface do programa, à distância de um computador, estando ambos conectados à uma mesma LAN.

Assim criei o PopRemote : http://coderi.com.br:81/remote/
um controle remoto para o Popcorn Time que pode ser utilizado do seu smartphone ou tablet como um webapp.
Disponível a partir das versões 3.0+ do Popcorn.

Posso escolher qualquer filme ou série, adicioná-lo aos meus favoritos ou iniciar a reprodução. O PopRemote também Reproduz, Pausa ou Avança/Recua o vídeo, tudo isto no conforto do sofá.

Instalação

1 – Abra seu Popcorn.

O processo de instalação é muito simples, basta você estar conectado à internet e seguir as instruções abaixo.

Para iPhone:

  1. Acessar o endereço: http://coderi.com.br:81/remote/
    e toque no ícone de compartilhamento (indicado pela seta verde).
  2. Toque em Tela de Início.
  3. Adicionar.
  4. O webapp será adicionado à sua home screen.

popInstrucoes

Para Android:

  1. Acessar o endereço: http://coderi.com.br:81/remote/
  2. Toque no ícone de Menu.
  3. Toque em Adicionar à Tela Inicial.

popConfigA

Configuração

Ao acessar o endereço acima, será solicitado os dados básicos de configuração, para que o PopRemote se conecte ao seu Popcorn.
Abaixo mostro como você pode encontrar estas informações.

1 – No seu Popcorn Time, clique no ícone de Configuração:

popConfig

2 – Encontre a opção Controle Remoto:

Captura de Tela 2015-09-14 às 19.42.34

3 – Informe os dados no PopRemote, e clique em salvar:

4 – Pronto, já pode controlar seu Popcorn de qualquer lugar da sua casa, estando conectado à mesma rede que o seu computador.

Remoção

1 – Remova o PopRemote, afinal ele é apenas um webApp!

Interface

Também é possível navegar entre Filmes, Séries e Animes, alterar a Qualidade e visualizar o Trailer de determinados filmes, quando estas funções estão disponíveis.


=)

Um método para o desenvolvimento de software baseado em microservices

Durante a ultima semana de junho apresentei meu trabalho de conclusão de curso em Engenharia de Software pela Universidade Federal do Ceará, que foi planejado ao longo do semestre de 2015.1.
Minha proposta resumidamente consiste em criar um Método Formal para auxiliar o desenvolvimento de software baseado em Microserviços.

microserviços

A evolução da tecnologia da informação (TI) e a melhoria da conectividade da internet permitiram uma revolução na forma como as aplicações e os serviços de TI são construídos e disponibilizados aos usuários. Nesse contexto, a computação em nuvem dispõe, a um custo acessível, uma infraestrutura escalável, com qualidade de serviço e altamente disponível. Desse modo, a forma de desenvolver software também tem evoluído para melhorar a construção de software complexo e confiável de maneira modular.

Uma das maneiras de se construir um software a partir do contexto de negócios é utilizar o Domain-Driven Design ou design orientado ao domínio. É necessário entender os problemas de negócio, bem como o funcionamento das aplicações corporativas e planejar um cenário que se assemelhe ao mesmo, para que, em seguida, seja possível desenvolver um produto de software que atenda a estes requisitos.

Atualmente, há diversos padrões comumente difundidos para o desenvolvimento de aplicações corporativas, visto que as fases do desenvolvimento não são atividades triviais. A arquitetura monolítica é um padrão amplamente usado para o desenvolvimento de aplicações corporativas. Esse padrão funciona razoavelmente bem para pequenas aplicações, pois o desenvolvimento, testes e implantação de pequenas aplicações monolíticas são relativamente simples. No entanto, para aplicações grandes e complexas, a arquitetura monolítica se torna um obstáculo ao desenvolvimento e implantação, além de dificultar a utilização de uma entrega contínua e limitar a adoção de novas tecnologias. Para aplicações complexas é mais interessante utilizar uma arquitetura de microserviços, que divide a aplicação em um conjunto de serviços.

O termo Microservices ou Microserviços surgiu nos últimos anos para descrever uma maneira particular de conceber aplicações de software como uma suite de serviços independentemente implementáveis (FOWLER; LEWIS, 2014). Embora não exista uma definição precisa deste estilo arquitetônico, pode-se elencar um conjunto de características comuns, tais como controle descentralizado de linguagens e de dados e independência dos serviços.

[…]

Apresentação:
TCC 1 – Apresentação (Slides)

TCC:
Thiago Pereira Rosa – Um método para desenvolvimento de software baseado em microserviços

Instantâneo Filosófico

Já dizia Luiz Pondé, provavelmente daqui mil anos não vao lembrar da nossa época como, “A época da iPad”, vão lembrar da nossa época como “A era do ressentimento”.

O filosofo alemão Friedrich Nietzsche, costumava dizer que nós sonhamos com um sol que se preocupe com o que agente sente.
Nietzsche dizia que, no final das contas, quando a gente descobre que o sol não tá nem aí pra nós, que as estrelas não brilham pra nós, que o mar não existe para que a gente se banhe nele, nós entramos num estado de desespero, onde ele claramente chamava de ressentimento.

Mas o que é o ressentimento?

Em minha opinião, é você achar que todos deviam te amar mais do que já amam, você achar que todos deviam reconhecer em você grandes valores que você não tem.
De lá pra cá (do século 19 para cá), o ressentimento piorou muito e ele está em toda parte. Você não pode falar nada que todos se ofendem, você não pode fazer uma crítica que todos tomam como pessoal.

Provavelmente daqui a mil anos, não vão lembrar da nossa época como a época do iPad, não mesmo, vão lembrar da nossa época como a era do ressentimento.

Somos uma civilização de mimados, que não é capaz de receber uma crítica sequer, sem achar que é uma questão de ofensa pessoal.

IMG_0156 Thiago

Verificação de Certificado SSL com PHP 5.6

caRoot

Recentemente atualizei minha versão do PHP para a 5.6 no FreeBSD 10.
Daí em diante estou passando por diversos problemas com conexões que utilizam os protocolos SSL, TLS porque agora acontece a verificação dos certificados pelo próprio PHP.

Até para atualizar o Composer eu recebia a seguinte mensagem:

[Composer\Downloader\TransportException]
The "https://getcomposer.org/version" file could not be downloaded: SSL operation failed with code 1. OpenSSL Error messages:
error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
Failed to enable crypto
failed to open stream: operation failed

Pesquisando por aí, eu finalmente percebí várias melhorias no SSL do PHP 5.6 e que o problema era que não estávamos conseguimos encontrar os certificados OpenSSL em meu sistema operacional.

Há uma nova função no PHP openssl_get_cert_locations que pode nos ajudar:
php -r "print_r(openssl_get_cert_locations ());"

Via linha de comando, este foi o retorno:
Array
(
[default_cert_file] => /usr/local/openssl/cert.pem
[default_cert_file_env] => SSL_CERT_FILE
[default_cert_dir] => /usr/local/openssl/certs
[default_cert_dir_env] => SSL_CERT_DIR
[default_private_dir] => /usr/local/openssl/private
[default_default_cert_area] => /usr/local/openssl
[ini_cafile] =>
[ini_capath] =>
)

Como podemos perceber, não foi definido o arquivo de configuração do “cafile”

Para corrigir isso, eu instalei o ca_root via Ports.

/usr/ports/security/ca_root_nss

Isso instala os certificados do OpenSSL no diretório /usr/local/etc/ssl/cert.pem (para o FreeBSD 10), então, podem agora adicionar o novo atributo de configuração no php.ini

Adicione no arquivo php.ini
openssl.cafile = /usr/local/etc/ssl/cert.pem

Reinicie o Apache para carregar as novas informações, e também verifique via linha de comando.

Também tente atualizar o composer… =)

Protegendo o FreeBSD de ataques por Força Bruta

A partir do momento que seu Servidor de Aplicação/BD/etc… fica acessível pela internet, bots e usuários maliciosos buscam por serviços em execução mal configurados para explorar suas vulnerabilidades. Recentemente venho registrando logs de tentativas de acesso para verificar o tipo de estratégia que os atacantes mais utilizam.

Dentre elas pude notar durante os dias analisados

A maioria das tentativas de acesso vem de bots, que buscam serviços em portas padrões, por ex: SSH (22) FTP (21) MySQL (3306) SQLServer (1433) e utilizam brute force. Mudar a porta padrão em que determinados serviços executam é uma ótima opção (a curto prazo), eu notei que após alterar a porta de um determinado serviço, a maioria das tentativas diminuíram, porem não findavam. Durante estes últimos testes consegui registrar os Usuário e Senhas mais informados nas tentativas de ataque.

Nomes de usuário:
root (60%)
test (3%)
oracle
admin
info
user
postgres
mysql
backup
guest
web
tomcat
michael
r00t
upload
alex
sales
linux
bin
ftp
support
temp
nagios
user1
www
est1
nobody
Senhas:
123456 (2%)
password (1%)
12345 (<1%)
1234
root
123
qwerty
test
1q2w3e4r
1qaz2wsx
qazwsx
123qwe
12
123qaz
0000
oracle
1234567
123456qwerty
password123
12345678
1q2w3e
abc123
okmnji
test123
123456789
postgres
q1w2e3r4

Como se proteger? O que é o SSHGuard?

logossh SSHGuard monitora servidores. Quando os logs informarem que alguém está realizando alguma operação maliciosa, o SSHGuard reage, bloqueando-o de acordo com sua configuração customizada. Segundo seus criadores, o SSHGuard tem uma personalidade sensível, quando um usuário impertinente insiste em perturbar o seu host, ele reage mais firme e assim por diante, mais firme ainda. Estes são os serviços que o SSHGuard suporta:

  • sshd
  • Sendmail
  • Exim
  • dovecot
  • Cucipop
  • UWimap (imap, pop)
  • vsftpd
  • proftpd
  • pure-ftpd
  • FreeBSD ftpd

Estas são os Logs que o SSHGuard interpreta:

  • syslog
  • syslog-ng
  • metalog
  • multilog
  • raw log

Firewalls que o SSHGuard opera:

  • PF (OpenBSD, FreeBSD, NetBSD, DragonFly BSD)
  • netfilter/iptables (Linux)
  • IPFIREWALL/ipfw (FreeBSD, Mac OS X)
  • IPFILTER (FreeBSD, NetBSD, Solaris)
  • IBM AIX’s firewall

Instalando o SSHGuard?

Optei por utilizar o Firewall PF e bloquear conexões TPC/UDP/ICMP do atacante.

  1. Vamos atualizar a lista de Ports, com o comando: portsnap fetch update
  2. Vamos acessar o Port e instalar, com os comandos: cd /usr/ports/security/sshguard-pf make install clean
  3. Configurando para executar o utilitário através do syslogd: Adicione esta linha ao final do arquivo /etc/syslog.conf (Assim protegeremos os serviços de SSH, FTP e SendMail) auth.info;authpriv.info;ftp.info;mail.info |exec /usr/local/sbin/sshguard
  4. Recarregue o syslogd com o comando: killall -HUP syslogd
  5. Bloqueando com o firewall PF. Edite e adicione no arquivo /etc/pf.conf (Adicionaremos esta tabela, que persistirá os endereços IPv4 e IPv6 dos possíveis atacantes) table <sshguard> persist block in quick on $ext_if proto { tcp, udp, icmp } from label "SSHGuard - Firewall"
  6. Recarregando o PF: pfctl -f /etc/pf.conf

Assim que ocorrer novos bloqueios, o usuário é notificado na janela do servidor. Os endereços bloqueados podem ser consultados com o seguinte comando: pfctl -vT show -t sshguard PS: Mensagens como “No ALTQ support in kernel” e “ALTQ related functions disabled” devem ser ignoradas (Caso não os utilize). Reinicie o servidor, e verifique o arquivo /var/log/messages caso tenha ocorrido algum problema. Até =)


Antes: Captura de Tela 2014-12-27 às 15.43.51 Depois: Captura de Tela 2014-12-27 às 15.45.27 Captura de Tela 2014-12-27 às 15.46.25 Captura de Tela 2014-12-27 às 15.47.33


Atualização: 07/01/2014

Após algumas comprovações, estou criando e disponibilizando um serviço com os endereços IPv4 que frequentemente continuam tentando realizar ataques de força bruta.
O serviço está disponível em formato JSON na uri: http://coderi.com.br:81/thiagop/crawlerBlackList

Os endereços são adicionados à blacklist após 20 tentativas recorrentes de acesso e bloqueio, quando há Hostname, o mesmo é armazenado para facilitar bloqueios posteriores.

Ps: No meu caso, criei um tabela persistente no PF que consulta o serviço citado acima e bloqueia as conexões para os protocolos TCP, UDP e ICMP (Sim, depois de confirmado os ataques, nem testar a conectividade entre equipamentos será mais possível).

 

Satisfação RU

Durante o segundo semestre de 2014, como projeto final da disciplina de Redes Sociais da Universidade Federal do Ceará – Campus Quixadá, fomos incentivados a desenvolver um aplicativo social para a maior rede social da atualidade, o Facebook.

Surgindo assim o Satisfação RU. Link: https://coderi.com.br/thiagop/fbApp/

O Satisfação RU é uma ferramenta social de avaliação diária das refeições fornecidas pelo Restaurante Universitário da Universidade Federal do Ceará – Campus Quixadá.

Nosso projeto como um todo, foi inicializado e finalizado esquematicamente simples (se tratando do Produto Mínimo Viável), como é mostrado na representação hierarquia da estrutura da ferramenta:
mapa_do_site

Unimos o útil ao agradável procurando desenvolver uma solução híbrida, mobile-first, com alto desempenho, alta disponibilidade e unificada com o Facebook, para o atual problema em mensurar o nível de satisfação dos docentes e discentes para com as refeições servidas pelo Restaurante Universitário do Campus.
A ferramenta deveria ser leve, poder ser utilizada de qualquer dispositivo móvel ou não do mercado e principalmente, o processo de votação deveria ser o mais simplista possível (Que desafio tentador em IHC).

Finalizamos o desenvolvimento e testes da ferramenta e ela será disponibilizada em breve!

Depois de avaliado pelos professores, pretendemos fornecer o código-fonte sob iniciativa OpenSource, com licença da Free Software Foundation.

Então mostraremos como se dá o workflow principal da nossa ferramenta, que é o processo de votações seguras e anônimas fornecido aos stakeholders.

workflow

Esperamos que com as estatísticas que consolidaremos, nossa ferramenta seja útil e se torne um marco em que soluções simples, porem bem elaboradas, podem influenciar diretamente no cotidiano dos docentes/discentes em nosso campus.

Exemplo das estatísticas que fornecemos

Atenciosamente;
Thiago Pereira

Por mais transparência nas eleições

O professor Diego Aranha, da Unicamp, demonstrou, no teste das urnas do TSE antes das eleições de 2012, que a nossa urna eletrônica não é tão boa como querem nos convencer. este ano, o TSE resolveu que ninguém vai testar urna nenhuma e aí a gente não vai saber se corrigiram o que Diego descobriu antes da última eleição e nem, como é mais do que o caso no desenvolvimento de software, se alguma nova falha foi introduzida [na urna ou em outra parte do sistema].

Diego e o time dele resolveram não ficar parados e lançaram um projeto de financiamento e uso coletivo de um sistema para fiscalizar a eleição, o #vocêFISCAL. abaixo.

Diego aranha fala sobre o atual estado das eleições eletrônicas no país e sobre seu esforço para aumentar a transparência do processo. a entrevista foi feita por email e os negritos são do blog.

0XBH7dG

Atualizando OpenSSL no FreeBSD10

O FreeBSD 10 ainda possui a versão OpenSSL 1.0.1e-freebsd de 2013.

A principal vulnerabilidade desta versão é conhecida como Heartbleed Bug.
É possível verificar se os certificados gerados e os programas compilados com sua versão do OpenSSL estão vulneráveis no site: https://filippo.io/Heartbleed/

De acordo com a Errata Security em abril de 2014 mais de 300.000 servidores estariam comprometidos com este bug.

Atualizando o OpenSSL

Aparentemente é uma tarefa rotineira, com uma pequeno detalhes que não deve ser esquecido.

1. Atualize seu Ports:
portsnap fetch update

2. Reinstale o OpenSSL: (Minha versão: OpenSSL 1.0.1h 5 Jun 2014)

cd /usr/ports/security/openssl/
make install clean

Ps: FreeBSD 9 (Poderá pular o passo 3)
make OPENSSL_OVERWRITE_BASE=yes install clean

Ps: Ou também FreeBSD 10  (Poderá pular o passo 3)
make WITH_OPENSSL_BASE=yes install clean

3. Atualize os executáveis: Importante!
ln -sf /usr/local/bin/openssl /usr/bin/

Todos as instalações que utilizaram o OpenSSL antigo devem ser recompiladas.
Felizmente temos um utilitário para isso =)

portupgrade -Rrf security/openssl

Após esta atualização todos os certificados gerados com a versão antiga do OpenSSL também devem ser renovados.

T.O.R. Flags

First, understand TOR Hashed Control Password

Allow connections on the control port if they present the password whose one-way hash is hashed_password.
You can compute the hash of a password by running:

tor --hash-password password


Flags

Authority
A router is called an ‘Authority’ if the authority generating the network-status document believes it is an authority

Exit
A router is called an ‘Exit’ iff it allows exits to at least two of the ports 80, 443, and 6667 and allows exits to at least one /8 address space.

Fast
A router is ‘Fast’ if it is active, and its bandwidth is either in the top 7/8ths for known active routers or at least some minimum (20KB/s until 0.2.3.7-alpha, and 100KB/s after that).

Guard
A router is a possible ‘Guard’ if its Weighted Fractional Uptime is at least the median for “familiar” active routers, and if its bandwidth is at least median or at least 250KB/s.
To calculate weighted fractional uptime, compute the fraction of time that the router is up in any given day, weighting so that downtime and uptime in the past counts less.
A node is ‘familiar’ if 1/8 of all active nodes have appeared more recently than it, OR it has been around for a few weeks.

HSDir
A router is a v2 hidden service directory if it stores and serves v2 hidden service descriptors, and the authority believes that it’s been up for at least 25 hours (or the current value of MinUptimeHidServDirectoryV2).

Named
Directory authority administrators may decide to support name binding. If they do, then they must maintain a file of nickname-to-identity-key mappings, and try to keep this file consistent with other directory authorities. If they don’t, they act as clients, and report bindings made by other directory authorities (name X is bound to identity Y if at least one binding directory lists it, and no directory binds X to some other Y’.) A router is called ‘Named’ if the router believes the given name should be bound to the given key.
Two strategies exist on the current network for deciding on values for the Named flag. In the original version, relay operators were asked to send nickname-identity pairs to a mailing list of Naming directory authorities’ operators. The operators were then supposed to add the pairs to their mapping files; in practice, they didn’t get to this often.
Newer Naming authorities run a script that registers routers in their mapping files once the routers have been online at least two weeks, no other router has that nickname, and no other router has wanted the nickname for a month. If a router has not been online for six months, the router is removed.

Running
A router is ‘Running’ if the authority managed to connect to it successfully within the last 45 minutes.

Stable
A router is ‘Stable’ if it is active, and either its Weighted MTBF is at least the median for known active routers or its Weighted MTBF corresponds to at least 7 days. Routers are never called Stable if they are running a version of Tor known to drop circuits stupidly. (0.1.1.10-alpha through 0.1.1.16-rc are stupid this way.)
To calculate weighted MTBF, compute the weighted mean of the lengths of all intervals when the router was observed to be up, weighting intervals by $\alpha^n$, where $n$ is the amount of time that has passed since the interval ended, and $\alpha$ is chosen so that measurements over approximately one month old no longer influence the weighted MTBF much.
[XXXX what happens when we have less than 4 days of MTBF info.]

Unnamed
Directory authorities that support naming should vote for a router to be ‘Unnamed’ if its given nickname is mapped to a different identity.

Valid
A router is ‘Valid’ if it is running a version of Tor not known to be broken, and the directory authority has not blacklisted it as suspicious.

V2Dir
A router supports the v2 directory protocol if it has an open directory port, and it is running a version of the directory protocol that supports the functionality clients need. (Currently, this is 0.1.1.9-alpha or later.)

Como utilizar o proxy da UFC

Recentemente me deparei com a necessidade de pesquisar artigos do IEEE (Instituto de Engenheiros Eletricistas e Eletrônicos) para buscar por inovações na área de Qualidade de Software para tal disciplina da faculdade de Engenharia de Software na Universidade Federal do Ceará.

Todas as publicações no IEEE (desde 1988) podem ser acessadas, desde que se realize o pagamento de U$ 31,00 por publicação.

Captura de Tela 2013-11-27 às 20.30.02

Mas há um acordo com a Universidade que permite acessar as publicações para pesquisa sem a necessidade de pagamento.
Pela rede interna da UFC o acesso é transparente, mas quando se está fora podemos utilizar o Proxy.

As configurações são bem simples, acesse as configuração de Proxy do seu navegador ou SO e utilize os dados abaixo:

Endereço: proxy.ufc.br
Porta: 8080
Usuário: CPF cadastrado no SIGAA
Senha: Senha cadastrada no SIGAA

Habilite as configurações para HTTP, HTTPS e FTP.

Captura de Tela 2013-11-27 às 20.28.31

As melhores pessoas para se conhecer na Europa

Achava-me, no percurso do século XXI, em momento de inaudita nostalgia, donde começara a escrever este post ao vigésimo nono dia de abril do ano de 2013 na cidade de Madri na Espanha (desta vês vivendo distante de moles rochosas, que se viam na direção do Ocidente). Quisera eu finaliza-lo, mas bem provável que o faça quando já estiver de volta ao Brasil…
Gostaria de compartilhar com você, leitor amigo, um pouco da sorte que tive de encontrar pessoas maravilhosas durante esta temporária caminhada. Sabeis, por certo, que não quero engrandecer-me, mesmo possuidor de total direito.

Queria poder falar de cada um em particular, mas faltariam palavras e armazenamento em disco.

Pensar em si é igual a não pensar em si. Não pensar em si é igual a pensar em si.
(Esta referência circular paradoxal é a síntese do auto-conhecimento em alto nível de quem deseja chegar mais longe e que resume muito bem cada uma das pessoas que conheci abaixo)

Há uma estrada que temos que viajar; Há uma luta que ainda temos que vencer; Porque esperar sentados seria um pecado; Há um sonho no futuro…

Caríssimo leitor, apresento-lhe tais indivíduos.

E é praticamente impossível quando se fala de CsF, Madrí e/ou Espanha, não lembrar de uma pessoa, que gastou boa parte do seu tempo ajudando estas dezenas de intercambistas e nunca pediu nada em troca.
Nilton Pereira, formalizo aqui o meu muito obrigado!

nilton

E ainda tivemos leitura de mãos
Trabalhos e + trabalhos via Hangout
E por fim, fomos expulsos da Biblioteca ao som de Guns N’Rose
Comemorando aniversários (sem pressão)

Sem chantagens… Só por vontade própria… =)

Algumas reuniões sem compromissos que acabavam em trilhas sonoras…

Buscando vislumbrar além de devassar o horizonte com os olhos da alma o solo da pátria querida, qual encantadora miragem que fascina e consola.
Esta temporada, será eterna para mim…

UmBrinde

Otimização de imagens + media queries

Otimizando imagens

  • smushit comprime imagens sem perda de qualidade
  • Servir imagens a partir de um subdomínio ajuda o browser “aumentar o paralelismo”
  • Subdomínio devem ser preferencialmente cookieless
  • Servidor nginx no lugar do Apache, é mais recomendado para assets
  • Se configurarmos eTags no servidor os assets irão cachear
  • Devemos ter gzip para que sejam servidos arquivos menores
  • Devemos ter certeza de que não há nenhuma requisição inválida, afinal o browser perde um tempo considerável ao buscar um recurso com erro, e isso impacta na performance

Mas hoje em dia, temos que nos preocupar também com os diversos tamanhos de tela, por isso, não faz sentido deixar o visitante fazer download de uma imagem de tamanho considerável e que não apareça em sua tela.

Servindo imagens específicas

As nossas novas amigas media queries podem nos ajudar nessa otimização de imagens. E para isso, me apoio num comportamento inteligente dos browsers modernos.

body { background: url('image-1.jpg'); }
body { background: url('image-2.jpg'); }

Mesmo declarando dois backgrounds imagens diferentes para um mesmo elemento, o browser não faz download dos dois arquivos. Ele traz apenas aquele que realmente irá ser usado.

Media Queries

Podemos usar media queries para trocar backgrounds, colocando arquivos menores e mais otimizados para específicas resoluções de tela, com a tranquilidade de saber que apenas o recurso que tiver com mais especificidade será baixado.

Para dispositivos pequenos

Podemos servir um background mais largo que 480px de largura para as telas que tiverem essa largura ou mais, e podemos servir outro background menor para as telas em que essa imagem não seria completamente visualizada.

body { background: url('image-1.jpg'); }
@media screen and (max-width: 480px) {
body { background: url('image-2.jpg'); }
}

Para telas grandes

Assim como podemos fazer o contrário também, e só mostrar um background grande se a tela for grande

@media screen and (min-width: 1280px) {
body { background: url('image-1.jpg'); }
}

Nesse caso, se a resolução tiver no mínimo 1280 px, apresento esse background, caso seja menor, não exibimos nada.

iPhone and iPad Web App Startup Images

In order to avoid having a blank white screen when launching a web app, you can use a apple-touch-startup-image. This is displayed momentarily while the web app is loading.

There are a number of link tags to target all iPhone and iPad devices which you must use. But there’s also a very important thing to not do, and that is to not use width=device-width on the viewport meta tag because this will letterbox the viewport and it will not work.

Here is the gist:

Command Line Wireless Tool for OS X

Mi first post en English…

I went looking for the Mac equivalent of iwconfig today so that I could get a command-line readout of the current wireless signal strength. This is good for sniffing out WiFi reception “sweet spots” in the office, and for tuning antenna positioning on the access point.

Apple hides their airport command line tool at

/System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport

There’s no manual page, but the –help switch will tell you everything you need to know. 🙂

Okay, so here’s one way to make the airport command a little more useful: link it into /usr/sbin.

cd /usr/sbin
sudo ln -s /System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport

Hmmm, what other private frameworks are there?

It seems only responsible to mention that stuff in the PrivateFrameworks folder is use-at-your-own-risk software.
Not because it’s buggy or unsafe (no promises) but because it’s likely to change drastically in some near-future version of OS X.

That said, as a special bonus, here’s a little PHP script I wrote called airquality.php to parse the output of “airport -I” and chart signal quality in real time.

PHP Code:

$iwconfig = '/usr/sbin/airport -I';

while (1) {
$out = `$iwconfig`;

$outa = explode(“\n”,$out);

// get commQuality
list( $key, $value ) = explode( ‘:’, $outa[0] );

print str_repeat(‘+’,$value).”\n”;

usleep(100000);
}

Good luck!

Certificados Digitais + Auth

caa

A diferença fundamental entre autenticação e confiança está na confirmação de algo. Enquanto que na autenticação duvidamos até que se prove a veracidade, na confiança acreditamos até que algum evento prove que estamos errados. Para usuários, o conceito de autenticação segue o mesmo princípio. Ele se identifica com seu nome, email etc…

É comum, em uma aplicação, termos um formulário no qual o usuário informa um identificador (nome de usuário, email etc.) e uma senha. Chamamos essa senha de autenticador de identidade e, com ela, através de consulta em uma base de dados, verificamos se determinada senha pertence à determinada identidade. A grande pergunta que fica é: “A informação provida pelo usuário é autêntica?”

Uma vez que não temos como confirmar se foi, de fato, o dono da credencial que a utilizou, penso nessa verificação como confiança, e não como autenticação. O usuário pode ter perdido a senha, pode ter sido roubado, N coisas podem ter acontecido, inclusive ter emprestado a senha para alguém. Se outra pessoa, em vez do dono, estiver utilizando essa identidade, mesmo que o par “identidade e senha” seja válido, ele não é autêntico.

Certificado digital

O certificado digital é um arquivo que contém diversas informações sobre a identidade de alguém ou alguma coisa. Além de dados como nome (do indivíduo, da empresa ou de uma máquina), cidade, estado (UF), país etc., o certificado digital funciona como uma espécie de contrato, no qual uma autoridade certificadora assina o certificado, afirmando que os dados daquele certificado pertencem àquela identidade.

Cada certificado digital possui um par de chaves criptográficas assimétricas – uma pública, que é enviada para o destinatário, e uma privada, que é de posse e responsabilidade exclusiva do dono do certificado.

Quando uma comunicação é estabelecida, por exemplo, entre Fulano e Beltrano, Fulano recebe de Beltrano sua chave pública, utiliza sua chave privada para criptografar a informação para a chave pública de Beltrano e envia a mensagem. Como Fulano utilizou sua chave privada para criptografar para a chave pública de Beltrano, mesmo que a mensagem seja interceptada, apenas a chave privada de Beltrano poderá ser utilizada para descriptografar a mensagem de Fulano.

Essa abordagem é utilizada na autenticação digital de forma geral. Podemos utilizar um certificado digital para criptografar dados enviados entre cliente e servidor, para assinar digitalmente um documento, comprovando a leitura e a aceitação, para autenticação de usuários, para afirmar que os dados contidos em uma nota fiscal eletrônica são verdadeiros etc.

Para o propósito deste artigo, vamos usar um cenário hipotético de uma aplicação rodando em localhost. Essa aplicação chama-se example.localhost, e vamos fazer esse nome resolver para o IP 127.0.0.1. O primeiro passo é criar o certificado da CA.

Nota: Pressupõe-se, nos passos abaixo, que a máquina onde serão executados já possui openssl, Apache httpd, mod_ssl e php com a extensão openssl.

CA – Autoridade Certificadora

Criaremos um diretório de forma que seja inacessível publicamente. Nesse diretório, criaremos as chaves e os certificados.

$ mkdir ~/certs

Dentro desse diretório, criaremos um diretório para o certificado da CA. Assim que criado, entramos nele diretório e utilizamos openssl para gerar a chave (vai solicitar a senha da chave):

$ mkdir ~/certs/ca
$ cd ~/certs/ca
$ openssl genrsa -des3 -out ca.key 4096
Generating RSA private key, 4096 bit long modulus
…………………………………………………………………………………………….++
……………………………………………………………++
e is 65537 (0x10001)
Enter pass phrase for ca.key:
Verifying – Enter pass phrase for ca.key

Utilizamos a chave para gerar uma requisição de assinatura (CSR) e o certificado da CA:

$ openssl req -new -x509 -days 365 -key ca.key -out ca.crt
Enter pass phrase for ca.key:
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter ‘.’, the field will be left blank.
—–
Country Name (2 letter code) [XX]:BR
State or Province Name (full name) []: Goiás
Locality Name (eg, city) [Default City]: Goiás
Organization Name (eg, company) [Default Company Ltd]: Home
Organizational Unit Name (eg, section) []: Dev
Common Name (eg, your name or your server’s hostname) []: HostName
Email Address []: thiagorosa@wgo.com.br

Certificado do servidor

Criamos um diretório para o certificado do servidor de forma que seja inacessível publicamente. Da mesma forma que fizemos para a CA, vamos gerar a chave:

$ mkdir ~/certs/server
$ cd ~/certs/server
$ $ openssl genrsa -des3 -out server.key 4096
Generating RSA private key, 4096 bit long modulus
………………………………………………………………………..++
…………………………………………………………………………………………………………………………………………..++
e is 65537 (0x10001)
Enter pass phrase for server.key:
Verifying – Enter pass phrase for server.key:

Com a chave, vamos gerar uma requisição de assinatura (CSR) para o servidor:

$ openssl req -new -key server.key -out server.csr
Enter pass phrase for server.key:
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter ‘.’, the field will be left blank.
—–
Country Name (2 letter code) [XX]:BR
State or Province Name (full name) []:Goias
Locality Name (eg, city) [Default City]:Goias
Organization Name (eg, company) [Default Company Ltd]:Home
Organizational Unit Name (eg, section) []:Dev
Common Name (eg, your name or your server’s hostname) []:exemplo.localhost
Email Address []:admin@exemplo.localhost

Please enter the following ‘extra’ attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

Atenção!
Nota: Perceba que, ao contrário do certificado da CA, utilizamos o nome do servidor em Common Name. Se não existir um nome de domínio, então o IP do servidor deverá ser utilizado.

Usamos o certificado da CA, que criamos anteriormente, para assinar a requisição de assinatura do servidor:

$ openssl x509 -req -days 365 -in ~/certs/server/server.csr -CA ~/certs/ca/ca.crt -CAkey ~/certs/ca/ca.key -set_serial 01 -out ~/certs/server/server.crt
Signature ok
subject=/C=BR/ST=Goias/L=Goias/
O=Home/OU=dev/CN=exemplo.localhost/emailAddress=admin@exemplo.localhost
Getting CA Private Key
Enter pass phrase for /home/thiago/certs/ca/ca.key:

Nesse instante temos: Chave privada da CA, Certificado da CA, Chave privada do servidor, Requisição de assinatura de certificado do servidor e Certificado do servidor assinado pela CA. Precisamos configurar o servidor:

Adicionamos a linha 127.0.0.1 exemplo.localhost ao arquivo hosts (/etc/hosts). Isso garantirá a resolução do nome exemplo.localhost para o IP 127.0.0.1:

$ sed -i ‘1 i 127.0.0.1 exemplo.localhost’ /etc/hosts

Criamos do DocumentRoot, onde serviremos nossa aplicação:

$ mkdir /var/www/html/example /var/www/html/example/public
3. Criamos um VirtualHost para nosso example.localhost:
$ vi /etc/httpd/conf.d/example.conf

Nota: O conteúdo de /etc/httpd/conf.d/example.conf segue abaixo:

NameVirtualHost 127.0.0.1:443

<Directory “/var/www/html/example”>
Options -Indexes
AllowOverride All
Order allow,deny
Allow from all
SSLEngine ON
SSLCertificateFile /home/thiago/certs/server/server.crt
SSLCertificateKeyFile /home/thiago/certs/server/server.key
SSLCACertificateFile /home/thiago/certs/ca/ca.crt

ServerAdminadmin@exemplo.localhost
DocumentRoot /var/www/html/example/public
ErrorLog /var/www/html/example/error_log
ServerName example.localhost:443
LogLevel warn
ServerSignature On

Após reiniciar o serviço httpd, já teremos acesso ao nosso example.localhost utilizando SSL. Um detalhe interessante é que, como nossa CA não é reconhecida pelo navegador, veremos uma tela como a abaixo:

ca-error

Como podemos ver, voltamos àquela questão de confiança. Como o navegador (no caso, Firefox), não reconhece a CA, ele não consegue dizer se aquele certificado é autêntico. Isso pode ser um problema se estivermos trabalhando em um ambiente web, mas em um ambiente controlado, como de uma intranet, essa situação não é problemática, e basta adicionar o certificado da CA na lista de expedidores confiáveis do browser.

Configurando a Aplicação

O primeiro passo para configurar a aplicação é fazer o servidor solicitar o certificado do usuário. Para isso, criaremos um arquivo .htaccess no diretório /var/www/html/example, com o seguinte conteúdo:

SSLVerifyClient optional
SSLVerifyDepth 1
SSLOptions +StdEnvVars

A primeira linha diz que o certificado é opcional. Se estivermos, por exemplo, em uma área administrativa da aplicação, podemos utilizar require em vez de optional. O require exigirá que o usuário tenha um certificado e, se não tiver, o servidor não permitirá acesso.

A segunda linha diz que o servidor deve verificar certificado do client e verificar a CA que o expediu. Isso é especialmente interessante, pois configuramos anteriormente o certificado da CA no nosso VirtualHost, ou seja, se o certificado do usuário não for expedido por uma CA em que o servidor confia, o servidor não permitirá acesso ao usuário.

A terceira linha vai pedir para o servidor definir as variáveis de ambiente com alguns dados do certificado. Essas variáveis estarão na super global $_SERVER, com o prefixo SSL_CLIENT_*. Vamos utilizar esses dados para autenticar o usuário.

Por uma questão de espaço, não vou demonstrar todo o código da aplicação de exemplo aqui, contudo, ela está disponível no Github e pode ser obtida através do seguinte:

$ git clone git://github.com/kamihouse/example
$ composer.phar install

Ao clonar o repositório, a seguinte estrutura será criada:

$ cd ./example
$ find .
./.htaccess
./composer.json
./error_log
./public
./public/login.html
./public/login.php
./public/register.html
./public/register.php
./public/index.php
./src
./src/thiago
./src/thiago/openssl
./src/thiago/openssl/CertificateSigningRequest.php
./src/thiago/openssl/Certificate.php
./src/thiago/openssl/CertificateKey.php
./src/thiago/openssl/OpenSSLInfrastructure.php
./src/thiago/Registration.php

Da mesma forma que utilizamos openssl para gerar os certificados da CA e do servidor, utilizaremos as funções openssl_* do PHP para gerar as chaves, as requisições de assinatura de certificado e os certificados do cliente. Abaixo, a descrição das funções utilizadas:

openssl_pkey_new

A função openssl_pkey_new será utilizada para a geração das chaves. Ela é equivalente ao seguinte:

openssl genrsa -des3 -out client.key 4096
openssl_csr_new

A função openssl_csr_new será utilizada para gerar a requisição do certificado. Ela é equivalente ao seguinte:

openssl req -new -key client.key -out client.csr

openssl_csr_sign

A função openssl_csr_sign será utilizada para assinar uma requisição de assinatura de certificado utilizando uma chave. Ela é equivalente ao seguinte:

openssl x509 -req -days 365 -in client.csr -CA ca.crt -CAkey ca.key -set_serial 01 -out client.crt

Sempre que o usuário acessar a aplicação, verificaremos a existência de um certificado:

if (!isset($_SERVER[‘SSL_CLIENT_M_SERIAL’]) ||
!isset($_SERVER[‘SSL_CLIENT_V_END’]) ||
!isset($_SERVER[‘SSL_CLIENT_VERIFY’]) ||
$_SERVER[‘SSL_CLIENT_VERIFY’] !== ‘SUCCESS’ ||
!isset($_SERVER[‘SSL_CLIENT_I_DN’]) ||
$_SERVER[‘SSL_CLIENT_V_REMAIN’] <= 0) {

//usuário não possui um certificado da aplicação
//redirecionamos o usuário para o formulário de registro.
} else {
//usuário possui um certificado da aplicação
//utilizaremos as variáveis SSL_CLIENT_M_SERIAL e SSL_CLIENT_I_DN para
//identificar o usuário na aplicação, verificar a validade do
//certificado e, se o processo de autenticação for bem sucedido,
//autorizamos o acesso.
}

Apesar de mais burocrático, a utilização de um certificado digital de cliente para autenticação adicionará uma camada de segurança à aplicação. Podemos, inclusive, chamar essa camada extra de autenticação em dois passos. Primeiro verificamos o certificado digital, sua validade (para uma política de renovação de credenciais) e, então, solicitamos ao usuário suas credenciais (nome e senha).

Uma vez autenticado no sistema, todas as ações do usuário podem ser assinadas; por exemplo, se a aplicação tratar de documentos que precisam ser aprovados pelo presidente da empresa, ele pode utilizar seu certificado digital para assinar o documento, evitando a impressão do documento e o tempo necessário para trafegar esse documento até sua sala.

Além disso, o uso de certificados digitais permite que os usuários da aplicação utilizem seus certificados para criptografar dados confidenciais.

Utilizando o mod_rewrite e .htaccess no OS X

mod_rewrite-cheat-sheet

Olá!

Geralmente quem usa Mac como plataforma de desenvolvimento web, eventualmente precisa utilizar o mod_rewrite do Apache para que algum dos quase infinitos frameworks (sejam eles em PHP, Python, Ruby, ou etc) possam executar de forma mais elegante =).

Então… Habilitar esta feature no OS X (pelo menos de forma elegante) não é tão simples quanto parece.
O arquivo que contém as informações que devem ser alteradas para seu usuário está disponibilizado em:

/etc/apache2/users/[seu-usuario].conf

Este arquivo é carregado pelo Apache sempre que o compartilhamento de arquivos é iniciado para seu usuário.
O arquivo comanda todos os sites que estão disponibilizados em:

/Users/[seu-usuario]/Sites

E é nele que devem ser feitas todas as alterações deste post.

Para habilitar o mod_rewrite corretamente, é necessário permitir o Apache seguir links simbólicos. Pra isso, é só adicionar a entrada FollowSymLinks na linha Options.
A próxima entrada que deve ser adicionada é a que permite a utilização do arquivo .htaccess para criar regras específicas para cada diretório dentro de /Users/[seu-usuario]/Sites.
Fica assim:

<Directory "/Users/[seu-usuario]/Sites/">
Options Indexes MultiViews FollowSymlinks
AllowOverride All
Order allow,deny
Allow from all

Agora basta reiniciar o Apache (pode utilizar o apachectl) e é isso!

Amplexos?

Bom desenvolvimento!

Opera adota o WebKit

Opera-logo1

Opera anunciou que a sua gama de navegadores da Web já está sendo usado por 300 milhões de pessoas para navegar na Internet através de telefones celulares, computadores, tablets e muito mais.
A empresa norueguesa está firmando o marco com o anúncio de que fará a transição seus navegadores para o WebKit open source, em um movimento que vai eventualmente acabar o desenvolvimento de seu próprio motor de renderização.

Mudança para o Webkit

A mudança para o motor de código aberto WebKit vai trazer benefícios para os usuários do Opera em todas as plataformas. Em adotá-lo, Opera elimina a necessidade de continuar o desenvolvimento de seu próprio motor de renderização, que libera recursos para desenvolver novos recursos e construir novos produtos.

WebKit é o motor Google Chrome (que StatCounter sugere é o navegador da Web para desktop mais utilizado) e Safari, da Apple. Ele tem o maior alcance de qualquer motor, sendo responsável por cerca de 40% de todo market share.

Há algo apropriadamente comovente sobre a união de Opera e WebKit, uma vez que ambos têm suas origens de volta para o Oslo.

Papo de Aluno

A ideia do projeto Papo de Aluno é tentar recolher depoimentos de ex-alunos e alunos do nosso campus da Universidade Federal do Ceará que estão vivendo experiências diferenciadas, como por exemplo, o Programa Ciências Sem Fronteira (CSF).

Segue meu depoimento.

Estados do protocolo TCP

O TCP é o protocolo da camada de transporte do modelo de referência OSI que é orientado a conexão.

Estados do TCP: LISTEN, SYN-SENT, SYN-RCVD, ESTABLISHED, FIN-WAIT-1, CLOSE-WAIT, FIN-WAIT-2, LAST-ACK, TIME-WAIT, CLOSED.

Por ter essa característica, antes de ocorrer a transmissão de dados deve-se estabelecer uma sessão de comunicação entre as duas partes. Essa sessão é estabelecida através de um processo chamado three-way handshake, que irá sincronizar os números de sequência e oferecer informações de controle necessárias para estabelecimento da conexão.

Como o início e o fim de uma sessão de comunicação são bem definidos e o TCP acompanha o estado de suas conexões com flags é importante saber quais são os muitos estados que uma conexão TCP passa.

Os estados possíveis da conexão TCP são os seguintes:

LISTEN: esse é o estado verdadeiro de uma conexão TCP, ele ocorre quando um host está esperando um pedido para iniciar uma conexão.
SYN-SENT: esse estado indica que o host enviou um SYN para iniciar a conexão e está aguardando a resposta SYN-ACK adequada.
SYN-RCVD: esse estado indica que o host enviou a resposta SYN-ACK depois de ter recebido o SYN.
ESTABLISHED: esse estado indica que a conexão foi estabelecida. O host que iniciou a conexão entra nesse estado depois de receber o SYN-ACK e o host que responde depois que recebe o ACK.
Estes são os estados que os hosts passam no processo de estabelecimento da conexão TCP no processo chamado 3-way handshake.

Existem outros estados que acontecem no desmembramento de uma conexão TCP:

FIN-WAIT-1: O estado que um host se encontra após ter enviado um pacote FIN inicial pedindo um fechamento correto da conexão TCP.
CLOSE-WAIT: O estado da conexão do host que recebeu um FIN inicial e envia de volta um ACK para confirmar o FIN.
FIN-WAIT-2: O estado da conexão do host que recebeu a resposta ACK para seu FIN inicial, e indica que agora está esperando um FIN final.
LAST-ACK: Esse estado indica que o host acabou de enviar seu segundo FIN, que é necessário para encerramento correto da conexão TCP, e está aguardando uma confirmação.
**
TIME-WAIT:
Nesse estado encontra-se o host iniciador que recebeu um FIN final e enviou um ACK para fechar a conexão. Nesse momento ele não irá mais receber nenhuma confirmação do ACK que acabou de enviar, portanto espera um período de tempo para fechar a conexão.

CLOSED: pode-se considerar como “sem estado”. Esse estado existe antes que uma conexão seja iniciada ou quando ela é finalizada.

Estes estados ocorrem no fechamento correto da conexão TCP.

** Estou cogitando a possibilidade de existir um estado de CLOSING entre o Last-ACK e Time-Wait, mas ainda não estou certo…


Thiago

Café com a Presidenta

Hoje, 19 de novembro, nós, bolsistas do programa Ciências sem Fronteiras nos reunimos com a presidenta Dilma aqui em Madri.

A presidente Dilma Rousseff, acompanhada pelo ministro da Educação espanhol, José Ignacio Wert, reuniu-se com uma representação de estudantes brasileiros que estudam na Espanha graças ao programa “Ciência sem Fronteiras”.

Nossa entrevista para o Voz do Brasil e blog do Planalto.

Eu com a senhorita Cristiane M. Pereira, responsável pelo programa em Madri.

Eu, Fernanda e Ramom (Universidad Autónoma de Madrid).


O encontro aconteceu na Casa do Brasil em Madri pouco antes de Dilma ir ao Palácio de la Moncloa para se reunir com o chefe do Executivo espanhol, Mariano Rajoy, durante sua primeira visita oficial à Espanha.

Para quem ainda não conhece o programa.

O programa de bolsas de estudos “Ciência sem Fronteiras” oferece a possibilidade de estudo em 41 universidades espanholas a estudantes brasileiros, e começou em fevereiro após a assinatura de um memorando de entendimento entre os dois países.

Na Espanha, o “Ciência sem Fronteiras” ocorre em dois períodos. O primeiro já beneficia 1487 estudantes matriculados para realizar uma estadia de setembro deste ano até junho de 2013. A segunda fase financiará, a partir de junho do ano que vem, a estadia de 2 mil brasileiros em instituições educativas públicas e privadas espanholas que ofereceram vagas no programa.

O plano visa aumentar a presença de estudantes, professores e pesquisadores brasileiros em instituições de excelência no exterior, assim como ampliar o número de estudantes e acadêmicos estrangeiros em instituições brasileiras.

Apache Server Tokens

Alguns web servers Apache estão fornecendo mais informações que deveriam.
Para mim isso compromete a segurança, para outros não e assim por diante.

Você pode verificar o cabeçalho da requisição com o seguinte comando:

curl -I http://site.com

No meu caso, como tenho preferência pelo Apache no Unix, a diretiva ServerTokens controla o fornecimento de dados de resposta do servidor Apache.
Os valores possíveis são: Full, OS, Minor, Minimal, Major e Prod. Onde Full transmite mais, e Prod menos informações.

Alguns exemplos:

ServerTokens Prod[uctOnly]
Server sends: Server: Apache

ServerTokens Major
Server sends: Server: Apache/2

ServerTokens Full (or not specified)
Server sends: Server: Apache/2.0.41 (Unix) PHP/4.2.2 MyMod/1.2

Eu recomendaria o uso do Prod.
Não é interessante que qualquer usuário tenha acesso aos detalhes técnicos do servidor!

Adicione ao arquivo http.conf:

ServerTokens Prod
ServerSignature Off

Até
:wq!

Como é feito o cálculo do IRA na UFC?

A nota média do aluno, quando observada independente do curso, possui uma limitação para a utilização na comparação entre alunos de cursos diferentes.
Para tanto, a Universidade Federal do Ceará está utilizando o cálculo do Rendimento Acadêmico com a utilização do IRA_Geral, que é o cálculo da nota média do aluno, normalizado por intermédio do seu respectivo curso. Esta normalização utiliza a média dos desempenhos (IRAm) e o desvio-padrão destes rendimentos (IRAdp) dos alunos ativos, para cada semestre letivo.

O IRA_Geral será dado pela seguinte fórmula:

Para evitar valores discrepantes, se o IRA_Geral apresentar valor negativo, que corresponde a uma distância de três desvios-padrão, será adotado o valor 0 (zero), e se o IRA_Geral apresentar valor acima de 10 (dez), que corresponde a 2 (dois) desvios- padrão, será adotado o valor 10 (dez). Para ter a mesma precisão do IRA anteriormente utilizado, o IRA_Geral será apresentado em números de zero a dez, com 3 (três) casas decimais.

Dessa forma, os cursos terão médias, em relação aos alunos ativos de um mesmo semestre, iguais a 6 (seis), e o IRA_Geral de cada aluno deve ser avaliado em relação à distância a este valor de referência. Um IRA_Geral, independente do curso, igual a 8 (oito) significa que o aluno está com rendimento superior à média do seu curso em 1(um) desvio-padrão, pertencendo à cota dos 84% (oitenta e quatro por cento), na qual somente um a cada sete alunos possui notas superiores às suas.

O IRA_Individual, que permanece utilizado na UFC, agora serve como base para o cálculo do IRA_Geral.
Sua fórmula possui o seguinte cálculo:

Em que:

T = somatório de carga horária das disciplinas trancadas;

C = somatório de carga horária das disciplinas cursadas ou trancadas;

Ni = nota final da disciplina “i”;

Ci = carga horária da disciplina “i”;

Pi = período em que a disciplina “i” foi cursada, obedecendo à seguinte limitação: Pi = mínimo{6, semestre em que a disciplina foi cursada}. Nas disciplinas anuais, será considerado o semestre de início delas.


Considerações importantes:

1. Uma disciplina cursada mais de uma vez, no caso da existência de reprovação, será incluída no cálculo do IRA_Individual o mesmo número de vezes em que ela consta no histórico do aluno.
2. A disciplina reprovada por freqüência terá nota final zero.
3. Disciplinas inseridas no histórico por intermédio de aproveitamento, tanto interno como externo, não farão parte do cálculo do IRA_Individual.
4. Atividades complementares de ensino não farão parte do cálculo do IRA_Individual.

Hackitat – A film about political hacking, world wide.

Este filme irá tratar sobre o planeta terra em meio a um conflito em curso entre aqueles que querem manter a tecnologia e Internet livres e aqueles que querem controlá-la.

“Nós queremos fazer este documentário e liberá-lo sob uma licença Creative Commons para que todos possam ver o filme.” hackitat.com

Sobre o Filme

O que obriga algumas pessoas a gastar muito tempo e energia na criação de servidores, a criação de programas e até mesmo cometer crimes para ajudar as pessoas em uma ditadura em outro país para comunicar-se livremente?

Quem são as pessoas construindo uma nação na Internet e por que eles estão fazendo isso? Como são os hackers na Bolívia trabalhando para integrar as línguas indígenas em software de computador para que todas as pessoas podem acessar a tecnologia?

Quem são os hackers no Oriente Médio, que alguns chamam de terroristas e outros de ativistas da liberdade. O que impulsiona esse ativismo anonymous em Bahrain uma ideologia comum com anonymous no Brasil?

Em todo o mundo há uma rede de hackerspaces que exploram e criar novas formas de expressar-se com a tecnologia. Hackerspaces que por alguns são vistos como uma ameaça à nossa sociedade digital. O que é que leva essas pessoas? Quais são seus propósitos e as suas razões para o que fazem? Como vivem?

Estas são algumas das perguntas que vai procurar responder com este filme.

Catalão GO, operações de câmbio em Espécie

Bom dia pessoal.
Dia 29/08 vou viajar para a Europa (já estou aqui ao publicar este post!), atualmente passo minhas férias em Catalão Goiás, pois faço faculdade no Ceará.
Daí surgiu a necessidade de comprar Euros em Espécie, logo fui pesquisar com minha Ag no Banco Santander e Banco do Brasil, e nada surpreso, nenhuma delas operava com compra/venda de moeda estrangeira em espécie.
Então entrei em contato com vários amigos para evitar viajar para MG ou DF para comprar uma quantidade de segurança, e, descobrí que em Catalão – GO há uma empresa que faz operações de câmbio em espécie.

A empresa é a Antares Turismo. E pode-se contactar:

Fernanda Ribeiro
DEPARTAMENTO FINANCEIRO
Av. Raulina Fonseca Paschoal, nº1700, sala01.
Centro Catalão/GO
Cep:75.701-480
Tel/fax: (64) 3442-8893 / 8434-1033

InaDyn – Simples cliente de DNS dinâmico + Afraid.org

O InaDyn é um cliente DynDNS gratuito. Ele dá a possibilidade de ter o seu próprio hostname fixo registrado na internet, embora o seu IP possa continuar mudando.
Ele verifica periodicamente se o endereço IP armazenados pelo servidor DNS é o endereço real (atual IP) da máquina que está executando o cliente.

Vou mostrar como Instalar e Configurar basicamente num servidor (FreeBSD) para atualizar mais de um domínio registrado no Registro.br (Lanic) e usando os servidores de DNS da Afraid.org que são free.

O primeiro passo é registrar um domínio no Registro.br
Após isso.

Criando usuário (Afraid.org)

Acesse o link abaixo e crie seu usuário.
http://freedns.afraid.org

Vá no menu Domains

Adicione o domínio criado.
Obs: Agora você receberá os IPs do servidor DNS para usar no Registro.br

Instalação:

Acesse o diretório usando o comando abaixo
cd /usr/ports/dns/inadyn/
Instale…
Acesse o diretório.
cd /usr/local/etc/
Crie o arquivo inadyn.conf

Use este código de exemplo para o arquivo de configuração:
# DNS System
dyndns_system default@freedns.afraid.org

# Usuário e Senha
username login-afraid.org
password senha-afraid.org

# Domínios e URL para atualiza??o
alias nome-dominio-registrado.com.br, codigo-de-domínio-afraid.org
#--> Este código pode ser visualizado no Menu Dynamic DNS no site Afraid.org, depois de registrado seu domínio vc terá o link Direct URL para cada domínio, este código está disponível na url ao clicar.
alias outro-dominio-registrado.com.br, codigo-de-domínio-afraid.org

# Período de checagem de IP
update_period 60000

# Configurações de LOG
log_file /var/log/inadyn.log
background
verbose 5

Reinicie o serviço do InaDyn.
Você pode acompanhar o resultado pelo arquivo de Log.

=)

Instalar e Configurar o Apache, MySQL e PHP no OSX 10.8 Mountain Lion

Para usar as opções de Web Sharing no OS X Mountain Lion 10.8, que precede o Mac OS X 10.7 Lion, ficou um pouco mais trabalhoso, pois muita coisa deve ser feita manualmente.

Apache / WebSharing

A primeira diferença no novo OS X 10,8 é no GUI em:
Preferências do Sistema > Compartilhamento > Compartilhamento da Web

Sim, esta opção foi removida, mas servidor Apache está instalado em um nível inferior do sistema operacional e pronto para rodar.
O Apache precisa ser INICIADO via linha de comando

sudo apachectl start

E poder tambem ser PARADO e REINICIADO

sudo apachectl stop

sudo apachectl restart

Depois de iniciar o Apache – teste no navegador usando a URL – http://localhost
Opcional: Se você quiser a facilidade do ícone de Web Sharing nas Preferências do Sistema instale este aplicativo.

Raiz do Apache

Raiz do documento é o local onde os arquivos são compartilhados do sistema de arquivos, e é semelhante aos nomes tradicionais de ‘public_html’ e ‘htdocs’, OS X historicamente teve 2 raízes da web, uma a nível do sistema e uma a nível de usuário.

Nível do Sistema:

http://localhost/

/Library/WebServer/Documents/

Nível do Usuário:

Você precisará criar um diretório “Sites” no diretório raiz de sua conta.

Verifique se você tem um “NOME_DE_USUARIO.conf” classificado em:

/etc/apache2/users/

Caso não tenha, crie-o (ele deve ter o mesmo nome do seu usuário do sistema).
Acessando o diretório:

cd /etc/apache2/users

Criando e Editando o arquivo:

sudo vim NOME_DE_USUARIO.conf

Em seguida, adicione o conteúdo abaixo trocando NOME_DE_USUARIO para seu nome de usuário:

<Directory “/Users/NOME_DE_USUARIO/Sites/”>
Options Indexes MultiViews
AllowOverride All
Order allow,deny
Allow from all
<Directory>

Permissão do arquivo deve ser:

-rw-r–r– 1 root wheel 298 Jul 31 12:53 NOME_DE_USUARIO.conf

Reinicie o Apache:

sudo apachectl restart

Então, poderá acessar como antes:

http://localhost/~NOME_DE_USUARIO/

PHP

PHP 5.3.13 está instalado na OSX 10,8 mas precisa ser habilitado no httpd.conf.

sudo vim /etc/apache2/httpd.conf

Remova o comentário deste modulo:

LoadModule php5_module libexec/apache2/libphp5.so

Salve e Reinicie o Apache:

sudo apachectl restart

Para testar o PHP, crie um nome de arquivo “phpinfo.php” no diretório .~Site com o conteúdo abaixo:

phpinfo();

MySQL

Primeiro será necessário ajustar a Segurança:


Instale nesta ordem:

  • mysql5.5.xxx.pkg
  • MySQLStartupItem.pkg
  • MySQLPrefPane

Agora, você pode iniciar o servidor MySQL a partir das Preferências do Sistema, ou via linha de comando

sudo /usr/local/mysql/support-files/mysql.server start

Para encontrar a versão do MySQL a partir do terminal, digite no prompt:

/usr/local/mysql/bin/mysql -v

Após a instalação, você poderá usar comandos mysql sem digitar o caminho completo,você precisa adicionar o diretório mysql para o seu caminho shell, (etapa opcional) isto é feito no seu “bash_profile” arquivo em seu diretório home, caso não tenha esse arquivo basta criá-lo usando seu editor e adicionar o código abaixo.

export PATH=”/usr/local/mysql/bin:$PATH”

Defina a senha de root

/usr/local/mysql/bin/mysqladmin -u root password ‘SUA_SENHA_AQUI’

É isso, que agora você tenha os serviços rodando no OS X Mountain Lion quase como nativamente.

Thiago

VIM vimrc – Tornando sua vida mais fácil

O Vim (Vi Improved) é uma versão mais poderosa e maior em termos de espaço em disco e requisitos de memória do editor de texto vi.
Essa versão é mantida como software livre, com algumas cláusulas de Careware inclusas, e acompanha a maioria das distribuições Linux. Está disponível também para variantes UNIX, Windows, Amiga, OS/2 e Macintosh.

O Vim é um editor muito prático para qualquer situação de edição de textos. A contrapartida, porém, é que o editor costuma ter uma curva de aprendizagem maior, por isso é fato bastante comum ser mais apreciado por programadores ou especialistas que desprendem muitas horas do seu dia editando textos técnicos.

E vou disponibilizar aqui uma versão do ~/.vimrc que utilizo e que realmente torna o editor mais maleável e poderoso.
Você pode aproveitar dela o que achar que realmente é necessário, pois todos os comandos estão comentados ou caso queira como todo.

” ****************************************************************************
” * File: ~/.vimrc
” * Author: J. F. Mitre
” * Url: <URL:http://jfmitre.com, http://notasemcfd.blogspot.com&gt;
” * Last Update: Qui 04 Jun 2009 17:28:36 BRT
” * Created: Sex 22 Mai 2009 10:01:22 BRT
” * Installation: – As dotfile drop the file into your $HOME/ folder.
” * – In Command line put $vim -U .vimrc.
” * License: GNU General Public License v3
” * <http://www.gnu.org/licenses/gpl.html&gt;
” * Version: 2.1
” * Notes: Based on the file .vimrc (1.0) made by Ivan Carlos da Silva Lopes
” * .vimrc made by Aurelio Marinho Jarga (verde) and
” * .vimrc made by Sérgio Luiz Araújo Silva (voyeg3r)
” *
” ****************************************************************************

” Configuração do Ambiente de Edição {{{
” —————————————————————————-
” Use VIM padrão é muito melhor
” Valores padrão para algumas opções são adequados ao Vim, não Vi.
” —————————————————————————-
set nocompatible
” —————————————————————————-
” Definindo o bash para o GNU/Linux
” —————————————————————————-
if has(“unix”)
let &shell=”bash”
set clipboard=autoselect
endif
” —————————————————————————-
” Numerando as linhas do arquivo, isto é, qualquer arquivo carregado é
” Editado com a numeração de linhas ligada
” —————————————————————————-
set number
” —————————————————————————-
” Permite remover e adicionar o número de linhas
” —————————————————————————-
map :set nu!
imap :set nu!
” —————————————————————————-
” Exibe o modo atual de operações do VI (Inserção ou comandos)
” Mostra o modo que você esta.
” —————————————————————————-
set showmode
” —————————————————————————-
” Recua cada linha para o mesmo nível da linha superior
” —————————————————————————-
set autoindent
” —————————————————————————-
” Aqui definimos uma chave para a alternância entre os modos:

” — INSERT (paste) — e — INSERT —

” O primeiro não segue o padrão de linha indentada enquanto o segundo
” é o modo normal de trabalho. Digitar alterna entre os dois modos
” —————————————————————————-
set pastetoggle=
” —————————————————————————-
” régua: mostra a posição do cursor
” —————————————————————————-
set ruler
” —————————————————————————-
” Caso o arquivo seja modificado FORA do vim ele é atualizado DENTRO do vim
” —————————————————————————-
set autoread
” —————————————————————————-
” tabstop: número de colunas para o comando
” A tecla TAB no vim vem padronizada com 8 espaços, sendo assim, quando
” editar um código em c, c++, pascal ou outra linguagem qualquer o texto
” do código torna-se algo meio confuso, principalmente quando o código é
” longo e possui inúmeros escopos. Para tanto, podemos mudar o tamanho do
” TAB, isto é do número de espaços gerados pelo mesmo, utilizando o comando
” ‘set tabstop=3’ que transforma o tamanho do TAB de 8 para 3.
” —————————————————————————-
set ts=3
” —————————————————————————-
” Tabs são convertidos para espaços por padrão
” —————————————————————————-
set expandtab
” set noexpandtab
” —————————————————————————-
” ShiftWidth: número de colunas deslocadas pelo comando > ou <
” —————————————————————————-
set sw=3
” —————————————————————————-
” SHortMessages: encurta as mensagem da régua
” —————————————————————————-
” set shm=filmnrwxt
” —————————————————————————-
” ShowMatch: Toda vez que você fecha um parêntese, colchete
” ou chave, o Vi mostra onde este foi aberto. Caso não haja
” nenhum aberto para este, deixa em vermelho parênteses ou
” chaves que não têm um par.
” —————————————————————————-
set sm
” —————————————————————————-
” mostra os comandos sendo executados
” —————————————————————————-
set showcmd
” —————————————————————————-
” Configurações de filetype
” Check :filetype para status atual
” —————————————————————————-
filetype on
filetype plugin on
” filetype indent on
” —————————————————————————-
” reporta ações com linhas no rodapé
” —————————————————————————-
set report=0
” —————————————————————————-
” Usando para deletar linha
” —————————————————————————-
set backspace=eol,start,indent
” —————————————————————————-
” Tecla Backspace volta 4 espaços quando estiver numa indentação.
” —————————————————————————-
set softtabstop=3
” —————————————————————————-
” Permite mover com as setas para áreas onde não tem texto.
” —————————————————————————-
” set ve=all
” —————————————————————————-
” (window) Define o número de linhas deslocadas com os comandos
” ^B (Ctrl+B) e ^F (Ctrl+F)
” —————————————————————————-
set window=10
” —————————————————————————-
” Define o número de linhas deslocadas com os comandos
” ^U (Ctrl+U) e ^D (Ctrl+D)
” —————————————————————————-
set scroll=5
” —————————————————————————-
” Em caso de se cometer um comando inválido aciona-se um alarme visual
” visual-bells
” —————————————————————————-
” set visualbell
” —————————————————————————-
” Em caso de se cometer um comando inválido aciona-se um alarme sonoro
” error-bells
” —————————————————————————-
” Para habilitar
” set eb
” Para desabilitar
set noerrorbells
” —————————————————————————-
” Habilita o salvamento automático (parcial ou completo)
” —————————————————————————-
” set autowrite
” set autowriteall
” —————————————————————————-
” Envia mais caracteres ao terminal, melhorando o redraw de janelas.
” —————————————————————————-
set ttyfast
” —————————————————————————-
” Antes de sobrescrever um arquivo mantém um backup do mesmo

” Por exemplo, após salvar um arquivo de nome Alfa.txt, o vim cria uo
” outro arquivo chamado Alfa.txt~ com a configuração anterior do arquivo
” antes do mesmo ser alterado
” —————————————————————————-
set bk
” —————————————————————————-
” Usar a pasta pessoal de backup
” É onde será escrito o arquivo *~
” Nessa configuração, primeiro usa o diretório ~/.vim/.backup, se não existir
” usa o diretório corrente
” —————————————————————————-
set backupdir=~/.vim/.backup/,.
” —————————————————————————-
” Habilita a mudança de coluna quando movimenta-se através das linhas
” —————————————————————————-
” set startofline
” —————————————————————————-
” Diretórios onde o VIM busca por arquivos
” —————————————————————————-
set path=.,./include/,/usr/include/,/usr/local/bin/,~/.vim/scripts/
” —————————————————————————-
” Uma configuração interessante da barra de status é defini-la com tamanho de
” duas linhas e fundo com cor azul e fonte branca.
” —————————————————————————-
” Mostra duas linhas
set laststatus=2
” Fundo azul e fonte branca (foi adicionando ao meu código de cores nativas)
” highlight StatusLine ctermfg=blue ctermbg=white
” —————————————————————————-
” Configurando o formato da régua
” Novos arquivos possuem uma data de modificação em um certo dia muito tempo
” no passado. Ignore.
” —————————————————————————-
” set statusline=%t%m%r%h%w
” \%=[FORMATO=%{&ff}]
” \[TIPO=%Y]
” \[ASCII=%03b]
” \[HEX=%02B]
” \[\ XY=%04v,%04l]
” \[%03P]
” set statusline=%<%F%h%m%r%h%w%y\ ft:%{&ft}\ ff:%{&ff}\
” \Modificado:\ %{strftime(\”%a\ %d/%B/%Y\ %H:%M:%S\”,
” \getftime(expand(\”%:p\”)))}%=\ coluna:%04v\ linha:%04l\
” \total:%04L\ hex:%03.3B\ ascii:%03.3b\ %03P\
set statusline=%<%F%h%m%r%h%w%y\ ft:%{&ft}\ ff:%{&ff}\
\Modificado:\ %{strftime(\”%c\”,getftime(expand(\”%:p\”)))}
\%=\ coluna:%04v\ linha:%04l\
\total:%04L\ hex:%03.3B\ ascii:%03.3b\ %03P\
” —————————————————————————-
” Mostra o nome do arquivo na parte superior do prompt
” —————————————————————————-
set title
” —————————————————————————-
” Alguns tipos de arquivos devem ser ignorados pelo Vim.
” —————————————————————————-
set wildignore=*.o,*.obj,*.bak,*.exe,*.dll,*.com,*.class,*.au,*.wav,*.ps,\
\*.avi,*.wmv,*.flv,*.djvu,*.pdf,*.chm,*.dvi,*.svn/,*~
” —————————————————————————-
” Definindo e trabalhando com histórico da linha de comando
” —————————————————————————-
set cedit=
” —————————————————————————-
” (history) Define o tamanho do arquivo de histórico, onde é o
” número de linhas de comandos a serem armazenados (5000).
” —————————————————————————-
set hi=5000
” —————————————————————————-
” Guarda posição do cursor e histórico da linha de comando :
” —————————————————————————-
set viminfo=’100,\”1000,:40,%,n~/.viminfo
au BufReadPost * if line(“‘\””)|execute(“normal `\””)|endif
autocmd BufReadPost *
\ if line(“‘\””) > 0 && line(“‘\””) <= line(“$”) |
\ exe “normal g`\”” |
\ endif
” —————————————————————————-
” Tamanho da barra de título
” —————————————————————————-
set titlelen=78
” —————————————————————————-
” Exibe a barra de título no formato configurado

” Exemplo1:
” ———
” formato:”nome=”NomeArq.EXT [se alterado mostrar +]
” set titlestring=%t%(\ %M%)%(\ (%{expand(\”%:~:.:h\”)})%)%(\ %a%)

” Exemplos2:
” ———-
” set titlestring=%t%(\ %M%)%(\ (%{expand(\”%:p\”)})%)%(\ %a%)
” —————————————————————————-
” ————————– [Formato] —————————————
” [Nome=nome] buffer={current} [Total de linhas=999] ‘
” —————————————————————————-
” Se editar múltiplos arquivos
” —————————————————————————-
” [Nome=nome] buffer={current} [{current} of {max})] [Total de linhas=999] ‘
” —————————————————————————-
” set titlestring=%<Nome=%t%m%r%h%w
” \%=
” \BUFFER=%n
” \%(\ %a%)
” \%28([Total\ de\ linhas=%L]%)
set titlestring=%<%F%h%m%r%h%w\ \ \ \ \ \ coluna:%04v\ \ \
\ linha:%04l\ de\ %04L\ \ \ \ %03P\
” —————————————————————————-
” Define qual é o tamanho da margem direita para a quebra de linhas
” automáticas, wrapmargin
” —————————————————————————-
set wm=10
” —————————————————————————-
” Quando esta opção encontra-se ativa o VIM lê o arquivo, e qualquer
” comando de configuração que estiver nas cinco primeiras linhas e cinco
” ultimas do arquivo, serão executados. Um exemplo disso são os arquivos
” do help, onde as últimas linhas a apresentam a seguinte sintaxe:
” ‘vim:tw=78:ts=8:ft=help:norl:’
” A opção nomodeline assegura que esse recurso estará desabilitado
” —————————————————————————-
” set modeline
set nomodeline
” —————————————————————————-
” Utilizando a barra de espaço para mover uma página
” —————————————————————————-
” noremap ” —————————————————————————-
” }}}

” Configurações de cores, fonte, visual, etc {{{
” —————————————————————————-
” Ligando configurações de cor, isto é, faz com que o vim busque no
” diretório /usr/share/vim/vim62/syntax os arquivos de configuração de
” cores de acordo com o tipo de arquivo que é aberto
” —————————————————————————-
syntax on
” —————————————————————————-
” Sintaxe para fundo escuro (dark) ou claro (light)
” —————————————————————————-
set background=dark
” set background=light
” —————————————————————————-
” Mapeamento para trocar o tipo de background
” Pode fazer com que a função SwitchColorSchemes() pare de funcionar
” dependendo do tema que estiver sendo usado ao acionar esse mapeamento
” Para quem não usa temas, não há qualquer problema.
” —————————————————————————-
map :set background=light
map :set background=dark
” —————————————————————————-
” Função para trocar o tema de cores
” A primeira linha refere-se ao esquema padrão
” —————————————————————————-
colorscheme native
function! SwitchColorSchemes()
if g:colors_name == ‘native’
colorscheme automation
elseif g:colors_name == ‘automation’
colorscheme moria
elseif g:colors_name == ‘moria’
colorscheme desert
elseif g:colors_name == ‘desert’
colorscheme colorful
elseif g:colors_name == ‘colorful’
colorscheme navajo-night
elseif g:colors_name == ‘navajo-night’
colorscheme bmichaelsen
elseif g:colors_name == ‘bmichaelsen’
colorscheme impact
elseif g:colors_name == ‘impact’
colorscheme ir_black
elseif g:colors_name == ‘ir_black’
set background=dark
colorscheme native
endif
endfunction
map :call SwitchColorSchemes():echo g:colors_name
” —————————————————————————-
” Define a cor para o menu contextual dos complementos
” —————————————————————————-
” highlight Pmenu ctermbg=13 guibg=Gray
” highlight PmenuSel ctermbg=7 guibg=DarkBlue guifg=White
” highlight PmenuSbar ctermbg=7 guibg=DarkGray
” highlight PmenuThumb guibg=Black
” —————————————————————————-
” Cor da numeração lateral
” —————————————————————————-
” hi LineNr guifg=pink ctermfg=lightMagenta
hi LineNr guifg=green ctermfg=lightGreen
” —————————————————————————-
” Destaca a linha e coluna sobre o cursor e define a cor
” Não há como especificar a cor e conseguir algo bom para todos os ambientes
” —————————————————————————-
set cursorline
” hi CursorLine ctermbg=blue cterm=none
” hi CursorLine ctermbg=black cterm=none
” set cursorcolumn
” hi CursorColumn ctermbg=4
” —————————————————————————-
” Configuração de fonte (tamanho e nome) para o GVim
” —————————————————————————-
if has(“gui_running”)
if has(“gui_gtk2″)
” Para GTK2
” Ajustando o tamanho da fonte de acordo com o tamanho da resolução
” Adicionando no ~/.bashrc as linhas :
” #——————————————————————–
” # Definindo variável de screen para o vim
” #——————————————————————–
” export SCREENSIZE=$(xdpyinfo 2>/dev/null2>/dev/null | grep ‘dim’\
” | sed -e ‘s/x.*//g’ -e ‘s/^.*[a-z]: *//g’)
” #——————————————————————–
” A beleza dessas linhas é que elas observam o tamanho da resolução do
” computador cliente, e não do host. Apenas o tamanho horizontal é
” utilizado como referência, ou seja, 1280×1024, apenas 1280 é
” verificado para determinar o tamanho da fonte. Isso não funciona bem
” em monitores cujo o maior tamanho seja o vertical.
if exists(“$SCREENSIZE”)
” se existe a variável $SCREENSIZE
if ($SCREENSIZE > 1300)
” se $SCREENSIZE é maior que 1300
set guifont=monospace\ 14
elseif ($SCREENSIZE < 850)
” se $SCREENSIZE é menor que 850
set guifont=monospace\ 8
else
” se $SCREENSIZE é maior que 850 e menor que 1300
set guifont=monospace\ 10
endif ” Existe SCREENSIZE, e com base nele define-se guifont
else
” caso a variável $SCREENSIZE não exista, use…
set guifont=monospace\ 10
endif ” Define tamanho se existe ou não $SCREENSIZE
elseif has(“x11″)
” Para GTK1
set guifont=*-lucidatypewriter-medium-r-normal-*-*-180-*-*-m-*-*
elseif has(“gui_win32″)
” Para Windows
set guifont=Luxi_Mono:h12:cANSI
else
” Para todos as outras gui use …
set guifont=monospace\ 12
endif ” Conclui a verificação do tipo de interface gráfica
endif ” Conclui sobre a existência de uma interface gráfica
” —————————————————————————-
” }}}

” Configurações de Dobras (folders) {{{
” —————————————————————————-
” Ajuda:
” zf ……………. operador para criar folders
” zfis ………….. cria um folder da sentença atual
” zd ……………. delete folder
” zo ……………. abrir dobra sob o cursor
” zc ……………. fechar dobra sob o cursor
” zv ……………. visualizar linha sob o cursor
” zR ……………. abre todos os folders
” zM ……………. fecha todos os folders
” —————————————————————————-
” Método das dobras
” —————————————————————————-
set foldmethod=marker
” —————————————————————————-
” Dobra padrão
” Quando cria-se ou deleta-se uma dobra, são esses caracteres que são
” adicionados ou removidos do texto.
” —————————————————————————-
set fmr={{{,}}}
” —————————————————————————-
” Mapeamento para dobras
” —————————————————————————-
” Abrindo uma dobra
map + zo
” Fechando um certa dobra
map – zc
” Abrindo todo mundo
map ++ zR
” Fechando todo mundo
map — zM
” —————————————————————————-
” folderlevel define quantos níveis de dobras ficam abertos por padrão
” —————————————————————————-
set foldlevel=0
” —————————————————————————-
” Barra de espaço abre e fecha folders
” —————————————————————————-
nnoremap @=((foldclosed(line(“.”)) < 0) ? ‘zc’ : ‘zo’)
” —————————————————————————-
” }}}

” Configurando a busca {{{
” —————————————————————————-
” Ativa o recurso de colorir, dando realce a pesquisa de palavra(s)
” que estiver em andamento. O hlsearch abreviado chama-se hls
” —————————————————————————-
set hlsearch
” —————————————————————————-
” O método de busca pode ser incrementado com a adição do comando
” incsearch”. A pesquisa torna-se diferenciada e dinâmica em tempo de
” pesquisa, isto é, antes do usuário entrar com o comando a fim
” de buscar os resultados, os mesmos já aparecerão em sua tela.
” —————————————————————————-
set incsearch
” —————————————————————————-
” Se começar uma busca em maiúsculo ele habilita o case
” —————————————————————————-
” set smartcase
” —————————————————————————-
” Que tal trocar a cor do texto ?
” daquela seleção que aparece quando você procura algo com o comando ” / ?
” é fácil, basta definir a cor do componente da sintaxe. Ah sim, a
” opção hls (veja acima) deve estar ativa.
” você pode colocar as cores que quiser, em inglês. Note que é
” ctermBG e FG, de background e foreground (fundo e letra). E veja
” também que o IncSearch (busca enquanto você digita) é invertido!
” —————————————————————————-
” hi Search ctermbg=yellow ctermfg=red
” hi IncSearch ctermbg=green ctermfg=cyan
” —————————————————————————-
” No vim temos diversas opções para modificar seu comportamento
” através do comando set. para ver todas as opções disponíveis, faça
” :set all. Diversas opções já vêem ligadas por padrão, então
” vamos mais opções de busca
” IncrementedSearch, HighLightedSearch, IgnoreCase e SmartCaSe
” —————————————————————————-
set ic scs
” —————————————————————————-
” Limpando o registro de buscas
” —————————————————————————-
nno :let @/=””
” —————————————————————————-
” }}}

” Abreviações, correções e jeitinhos para o modo de inserção {{{
” —————————————————————————-
” Mapeando abreviações para o modo de inserção
” —————————————————————————-
iab linux GNU/Linux
iab gnome GNOME
iab kde KDE
iab latex LaTeX
” —————————————————————————-
” Mapeando correções para o modo de inserção
” —————————————————————————-
iab tambem também
iab vc você
iab assenção ascenção
iab assougue açougue
iab corrijir corrigir
iab definitamente definitivamente
iab deshonestidade desonestidade
iab díficil difícil
iab distingeu distingue
iab ecessão exceção
iab ecessões exceções
iab excessão exceção
iab Excesões exceções
iab excurção excursão
iab exijir exigir
iab nao não
iab noã não
iab portugu6es português
iab portugês português
iab portugues português
iab dividos divididos
iab lisensa licença
iab licenssa licença
iab licensa licença
iab Licensa Licença
iab drives drivers
iab drive driver
iab Drive Driver
iab Drives Drivers
” —————————————————————————-
” caso o teclado esteja desconfigurado use:
” —————————————————————————-
” iab ‘a á
” iab ‘A Á
” iab ‘e é
” iab ‘E É
” iab ‘i í
” iab ‘I Í
” iab ‘o ó
” iab ‘O Ó
” iab ~a ã
” iab ~A Ã
” iab ^a â
” iab ^A Â
” iab `a à
” iab `A À
” iab ,c ç
” iab ,C Ç
” iab ^e ê
” iab ^E Ê
” iab ^o ô
” iab ^O Ô
” iab ~o õ
” iab ~O Õ
” iab ‘u ú
” iab ‘U Ú”
” }}}

” Configurando o dicionário e corretor ortográfico {{{
” —————————————————————————-
” Utilizando o dicionário do aspell
” —————————————————————————-
cmap ckBR w!:!aspell check %:e! %
cmap ckEN w!:!aspell –lang=en check %:e! %
” —————————————————————————-
” Verificação automática do arquivo (spell check interno ao vim)
” Para baixar o dicionário: http://www.broffice.org/verortografico/baixar
” Descompacte e no diretório abra o vim. Nele execute:
” :mkspell pt pt_BR
” cp pt*.spl ~/.vim/spell/
” Adicione no .vimrc as linhas:
” —————————————————————————-
set spelllang=pt
map :set spelllang=en
map :set spelllang=pt
set nospell
nnoremap :set spell! spell?
” —————————————————————————-
” Para habilitar a identificação automática das palavras erradas, por tipo de
” arquivo, use:
” —————————————————————————-
” autocmd BufNewFile,BufRead *.txt setl spell spl=pt
” —————————————————————————-
” Plugin vimspell. Somente foi implementado devido ao funcionamento pouco
” correto do plugin interno do vim.
” URL: http://www.vim.org/scripts/script.php?script_id=465
” —————————————————————————-
” Para desabilitar o vimspell (habilite apenas quando for usar).
let loaded_vimspell = 1
” Configurando a coloração de sintaxe
highlight link SpellErrors Error
” Usando o aspell (opções: aspell e ispell)
let spell_executable = “aspell”
” Restrigindo os idiomas disponíveis
” Para o aspell
” let spell_language_list = “pt_BR,en”
let spell_language_list = “en,pt_BR”
” Para o ispell
” let spell_language_list = “brazilian,english”
” Não quero auto correção ativa. Aguarde eu chamar o programa
let spell_auto_type = “none”
” —————————————————————————-
” Dicionário para procurar o auto-complemento de palavras
” —————————————————————————-
set dictionary=~/.vim/dict/words.dic
” —————————————————————————-
” Auto-complemento de palavras
” —————————————————————————-
” Exemplo de como usar o dicionário com mapeamento:
” (1) dentro do modo de inserção — INSERT —
” (2) posicione o cursor sob a palavra a ser completada
” (3) ligar dicionário ao pressionar a seqüência “”
imap
” (4) busca palavra no arquivo corrente “”
imap
” (5) o trava meu computador, assim, eliminarei ele
” imap
” —————————————————————————-
” Quando completar uma palavra seguir a seguinte seqüência de
” busca, sendo primeiro em 1, segundo em 2, …

” 1 – no buffer atual (.)
” 2 – buffer de outra janela (w)
” 3 – outros buffers carregados (b)
” 4 – buffers não carregados (u)
” 5 – arquivo de tags (t)
” 6 – arquivo de include (i)
” 7 – dicionário (K)
” —————————————————————————-
” set complete=.,w,b,u,t,i,k “(*default*)
” set complete=k,.,w,t,i,b,u
set complete=k,t
” set complete=.,w,k,t,i
” —————————————————————————-
” Completa a palavra ignorando se é maiúscula ou minúscula
” Não é uma idéia muito boa, se o propósito envolver completar códigos.
” —————————————————————————-
” set infercase
” —————————————————————————-
” Marca como erro duas palavras idênticas separadas por espaço
” —————————————————————————-
syntax match DoubleWordErr “\c\<\(\a\+\)\_s\+\1\>”
hi def link DoubleWordErr Error
” —————————————————————————-
” }}}

” Configurações do taglist {{{
” —————————————————————————-
” URL: http://www.vim.org/scripts/script.php?script_id=273
” —————————————————————————-
” Inclua:
” –langdef=tex
” –langmap=tex:.tex
” –regex-tex=/\\subsubsection[ \t]*\*?\{[ \t]*([^}]*)\}/- \1/s,subsubsection/
” –regex-tex=/\\subsection[ \t]*\*?\{[ \t]*([^}]*)\}/+\1/s,subsection/
” –regex-tex=/\\section[ \t]*\*?\{[ \t]*([^}]*)\}/\1/s,section/
” –regex-tex=/\\chapter[ \t]*\*?\{[ \t]*([^}]*)\}/\1/c,chapter/
” –regex-tex=/\\label[ \t]*\*?\{[ \t]*([^}]*)\}/\1/l,label/
” –regex-tex=/\\ref[ \t]*\*?\{[ \t]*([^}]*)\}/\1/r,ref/

” no arquivo ~/.ctags para permitir ajustar o ctags para o LaTeX.
” URL: http://vim.wikia.com/wiki/Use_Taglist_with_LaTeX_files
” —————————————————————————-
” Auto Update da lista de tags
” —————————————————————————-
let Tlist_Auto_Update = 1
” —————————————————————————-
” Habilitando o menu tags no gvim
” —————————————————————————-
let Tlist_Show_Menu = 1
” —————————————————————————-
” Ajustando o tamanho da janela do taglist
” —————————————————————————-
let Tlist_WinWidth = 30
let Tlist_WinHeight = 30
” —————————————————————————-
” Fechamento automático das dobras que estão inativas
” —————————————————————————-
let Tlist_File_Fold_Auto_Close = 1
” —————————————————————————-
” Se ao fechar, apenas o taglist estiver aberto, fechar o vim
” —————————————————————————-
let Tlist_Exit_OnlyWindow = 1
” —————————————————————————-
” Abreviações para linha de comando
” —————————————————————————-
cab ctg TlistToggle
cab ctgo TlistOpen
cab ctgs Tlist
cab ctgadd TlistAddFiles
cab ctgaddall TlistAddFilesRecursive
cab ctgup TlistUpdate
cab ctglock TlistLock
cab ctgsync TlistSync
cab ctgsave TlistSessionSave
cab ctgopen TlistSessionLoad
” —————————————————————————-
” }}}

” Configurações do PotWiki {{{
” —————————————————————————-
” URL: http://www.vim.org/scripts/script.php?script_id=1018
” —————————————————————————-
” Definindo o caminho padrão para o wiki
” —————————————————————————-
let potwiki_home = “$HOME/.vim/.wiki/HomePage”
” —————————————————————————-
” Habilitando o autosalvamento para o wiki
” —————————————————————————-
let potwiki_autowrite = 1
” —————————————————————————-
” Personalizando as cores do wiki
” —————————————————————————-
highlight PotwikiWord guifg=darkcyan
highlight PotwikiWordNotFound guibg=Red guifg=Yellow
” —————————————————————————-
” }}}

” Configurações do NERDTree {{{
” —————————————————————————-
” URL: http://www.vim.org/scripts/script.php?script_id=1658
” —————————————————————————-
” Veja ~/.vim/doc/NERDTree.txt para mais informações
” —————————————————————————-
” Abreviando a inicialização dele
” —————————————————————————-
cab ntree NERDTree
map :NERDTree
imap :NERDTree
” —————————————————————————-
” Configurando o arquivo que registrará os bookmarks
” —————————————————————————-
let NERDTreeBookmarksFilee=”~/.vim/.NERDTreeBookmarks”
” —————————————————————————-
” Ativando os Bookmarks ao iniciar
” —————————————————————————-
let NERDTreeShowBookmarks=1
” —————————————————————————-
” Ajustando o tamanho da janela para melhor aproveitamento do espaço
” —————————————————————————-
let NERDTreeWinSize=45
” —————————————————————————-
” }}}

” Configurações para o snipMate {{{
” —————————————————————————-
” URL: http://www.vim.org/scripts/script.php?script_id=2540
” —————————————————————————-
” Os snippets utilizados por esse .vimrc e que são diferentes da versão de
” instalação, podem ser encontrados em:
” URL: http://snipt.net/jfmitre/tag/snippet
” —————————————————————————-
” O snipMate deve usar tabulação para funcionar
” —————————————————————————-
au BufNewFile,BufRead *.snippets set noexpandtab
” —————————————————————————-
” Não quero usar folder nos arquivos do snipMate
” —————————————————————————-
au BufNewFile,BufRead *.snippets set foldlevel=2
” —————————————————————————-
” }}}

” Configuração para GNU GPG {{{
” —————————————————————————-
” URL: http://www.vim.org/scripts/script.php?script_id=661
” —————————————————————————-
” Definindo a variável GPG_TTY no .vimrc
” O correto é acrescentar ao .bashrc:
” export GPG_TTY=”tty”
” —————————————————————————-
let $GPG_TTY = “tty”
” —————————————————————————-
” Não crie arquivo de backup de arquivos encriptados
” —————————————————————————-
au BufNewFile,BufRead *.gpg,*.asc,*.pgp setlocal nobk
\ | setlocal noswf
” —————————————————————————-
” Utilizando o mesmo esquema de cores que foi criado para arquivos .txt
” Vide ‘Funções, mapeamentos e abreviações para edição de texto em geral’
” —————————————————————————-
au BufNewFile,BufRead *.gpg,*.asc,*.pgp source ~/.vim/data/txt.vim
” —————————————————————————-
” Facilitando o acesso ao meu arquivo de senhas, abre o mesmo em uma nova tab
” Para navegar entre tabs:
” :tabnext, :tabprev, :tabfirst, :tablast ou :tab n
” O mapeamento abaixo refere-se a
” —————————————————————————-
map ^_ :tabnew ~/.passwords.gpg
” —————————————————————————-
” }}}

” Para melhor uso do vim e seus plugins {{{
” —————————————————————————-
” Utilizando abreviações em linha de comando
” Para tanto vamos utilizar o comando Cab
” —————————————————————————-
cab W w
cab Wq wq
cab wQ wq
cab WQ wq
cab Q q
” —————————————————————————-
” Melhorando o trabalho com várias janelas
” —————————————————————————-
imap
” Teclas de copiar, colar e recortar tipo: , e
” —————————————————————————-
” copy – copiar
” —————————————————————————-
vmap y
” —————————————————————————-
” paste – colar
” —————————————————————————-
nmap p
imap p
” —————————————————————————-
” cut – cortar
” —————————————————————————-
vmap x
” —————————————————————————-
” undo – desfazer
” —————————————————————————-
noremap u
inoremap u
” —————————————————————————-
” select all – selecionar tudo
” —————————————————————————-
map ggvG
” —————————————————————————-
” Faz o shift-insert comportar-se semelhante ao Xterm
” Sendo assim você seleciona um bloco de texto com o mouse
” e cola com o botão do meio do mouse
” —————————————————————————-
map
map!
” —————————————————————————-
” Atalhos para o plugin Calendar
” —————————————————————————-
” URL: http://www.vim.org/scripts/script.php?script_id=52
” —————————————————————————-
cab C Calendar
cab CH CalendarH
” —————————————————————————-
” Embaralha a tela para evitar bisbilhoteiros
” —————————————————————————-
map ggVGg?
” —————————————————————————-
” Alterna o modo de quebra de linha
” —————————————————————————-
map b :set wrap! ec &wrap ? ‘wrap’ : ‘nowrap’
” —————————————————————————-
” }}}

” Funções, mapeamentos e abreviações para edição de texto em geral {{{
” —————————————————————————-
” Definindo tamanho da linha, isto é, coluna onde a linha deve ser “quebrada”
” com a inserção de fim de linha (, abreviação de end-of-line).
” Existe a recomendação majoritária de ter textos com quebra inferior ou igual
” a 80. Contudo, 90 é uma boa escolha para uma formatação genérica.
” Especifique outros valores de acordo com interesse
” —————————————————————————-
set textwidth=90
” —————————————————————————-
” Se uma linha ultrapassar o valor estipulado em textwidth ela será
” mostrada em destaque colocá-la em uma função de liga desliga junto
” com uma que mostre as linhas e colunas de um arquivo em destaque
” —————————————————————————-
au BufNewFile,BufRead * exec ‘match Error /\%>’ . &textwidth . ‘v.\+/’
” —————————————————————————-
” Fazer a primeiria letra depois de uma pontuação tornar-se maiúscula
” —————————————————————————-
” :%s/[.!?]\_s\+\a/\U&\E/g
” —————————————————————————-
” Para remover linhas em branco duplicadas
” —————————————————————————-
” map ,d my:%s/\(^\n\{2,}\)/\r/g`y
” —————————————————————————-
” Adição de um cabeçalho genérico
” —————————————————————————-
fun! InsertUpdateData()
normal(1G)
call append(0, ” File: “)
call append(1, ” Author: J. F. Mitre <http://jfmitre.com>&#8221;)
” Escreve a data na forma: DD/MM/AA hs HH:MM
” call append(2, ” Created: ” . strftime(“%a %d/%b/%Y hs %H:%M”))
” Escreve a data na forma: Semana DD MES AAAA HH:MM:SS TIMEZONE
call append(2, ” Created: ” . strftime(“%c”))
” Escreve a data na forma: DD/MM/AA hs HH:MM
” call append(3, ” Last Update: ” . strftime(“%a %d/%b/%Y hs %H:%M”))
” Escreve a data na forma: Semana DD MES AAAA HH:MM:SS TIMEZONE
call append(3, ” Last Update: ” . strftime(“%c”))
call append(4, ” Notes: “)
normal($)
endfun
cmap ,cl call InsertUpdateData()A
” —————————————————————————-
” Dando destaque para notas
http://vivaotux.blogspot.com/2009/01/
” \ uniformizao-de-espaamento-nos-cdigos.html
” —————————————————————————-
highlight MinhasNotas ctermbg=blue ctermfg=yellow guibg=blue guifg=yellow
match MinhasNotas /[Nn]otas\? \?:/
” —————————————————————————-
” a função (strftime) é predefinida pelo sistema
” —————————————————————————-
iab YDATE =strftime(“%a %d/%b/%Y hs %H:%M”)
iab HDATE =strftime(“%a %d/%b/%Y hs %H:%M”)
” —————————————————————————-
” Adicionando o suporte a calculadora no vim
” —————————————————————————-
command! -nargs=+ Calc :py print
py from math import *
” —————————————————————————-
” Fechamento automático para parênteses
” —————————————————————————-
inoremap ( ()i
inoremap { {}i
inoremap [ []i
” —————————————————————————-
” Função para atualizar a data da última modificação
” Verifica se existe uma data nas 5 primeiras linhas do documento
” Se não existe, escreve na primeira linha
” Se existe, atualiza a informação
” Essa função gera uma mensagem de erro em documento com menos de 5 linhas
” —————————————————————————-
fun! LastUpdate()
mark z
if getline(0) =~ “.*Last Update:” ||
\ getline(1) =~ “.*Last Update:” ||
\ getline(2) =~ “.*Last Update:” ||
\ getline(3) =~ “.*Last Update:” ||
\ getline(4) =~ “.*Last Update:” ||
\ getline(5) =~ “.*Last Update:”
” Atualiza apenas o que estiver nas 5 primeiras linhas
exec “1,5s/\s*Last Update: .*$/Last Update: ” . strftime(“%c”) . “/”
” Atualiza apenas a linha que contém o cursor
” exec “s/\s*Last Update: .*$/Last Update: ” . strftime(“%c”) . “/”
else
” call append(0, ” Last Update: ” . strftime(“%a %d/%b/%Y hs %H:%M”))
call append(0, ” Last Update: ” . strftime(“%c”))
endif
exec “‘z”
endfun
” —————————————————————————-
” Abreviação para a função acima
” —————————————————————————-
cmap data call LastUpdate()
” —————————————————————————-
” Man: Páginas de manual são na verdade textos em NROFF
” —————————————————————————-
au BufNewFile,BufRead *.man set ft=nroff
” —————————————————————————-
” MostraTab: mostra TAB no inicio e espaços no fim das linhas
” —————————————————————————-
map ,mt /^\t\+\\|\s\+$
” —————————————————————————-
” PalavrasRepetidas: procura palavras repetidas no texto
” —————————————————————————-
map ,pr /\<\(\w*\) \1\>
” —————————————————————————-
” Numerar linhas dentro do arquivo
” :let i=1 | g/^/s//\=i.”\t”/ | let i=i+1
” —————————————————————————-
map ,n :let i=1 g/^/s//\=i.”\t”/ let i=i+1
” —————————————————————————-
” Destaca uma linha no texto com o código de erro
” —————————————————————————-
nnoremap k mk:exe ‘match Search /%’.line(“.”).’l/’
” —————————————————————————-
” Justifica: justifica os textos com o justificador em sed
” —————————————————————————-
vmap ,je :!sed.alinha-justify
” —————————————————————————-
” Digitar “;l” retira espaços em branco de final de arquivo
” —————————————————————————-
map ;l :%s/\s*$//g
” —————————————————————————-
” Mail: Configurações especiais para arquivos de e-mail
” —————————————————————————-
au FileType Mail set fo=ctq tw=65 et
” —————————————————————————-
” Identação de textos e códigos com o TAB no modo visual
” URL: http://gustavodutra.com/post/72/
” \ dicas-de-movimentacao-e-identacao-no-gvim/
” —————————————————————————-
vnoremap < >gv
vmap >
vmap <
imap <<i
” —————————————————————————-
” Permite abrir um arquivo mencionado com o caminho dentro de outro arquivo
” Funciona em cabeçalhos de programação
” —————————————————————————-
nmap gf :new %:p:h/
” —————————————————————————-
” }}}

” Funções, mapeamentos e abreviações para aquivos .txt {{{
” —————————————————————————-
” Quebra os arquivos de texto na coluna 79
” —————————————————————————-
au BufNewFile,BufRead *.txt setl tw=79
” —————————————————————————-
” Usa uma source para edição de arquivo .txt
” Source txt.vim do Aurelio Marinho Jarga
” URL: http://aurelio.net/vim/txt.vim
” —————————————————————————-
au BufNewFile,BufRead *.txt source ~/.vim/data/txt.vim
” —————————————————————————-
” Os arquivo README, NEWS e ToDo também são arquivos de texto
” —————————————————————————-
au BufNewFile,BufRead *{R,r}{E,e}{A,a}{D,d}{M,m}{E,e} setl ft=txt tw=79
au BufNewFile,BufRead *{R,r}{E,e}{A,a}{D,d}{M,m}{E,e}
\ source ~/.vim/data/txt.vim
au BufNewFile,BufRead *{N,n}{E,e}{W,w}{S,s} setl ft=txt tw=79
au BufNewFile,BufRead *{N,n}{E,e}{W,w}{S,s} source ~/.vim/data/txt.vim
au BufNewFile,BufRead *{T,t}{O,o}{D,d}{O,o} setl ft=txt tw=79
au BufNewFile,BufRead *{T,t}{O,o}{D,d}{O,o} source ~/.vim/data/txt.vim
” }}}

” Funções, mapeamentos e abreviações para programação e edição de dotfiles {{{
” —————————————————————————-
” Função que mapeia para mostrar/ocultar comentários
” —————————————————————————-
fu! CommOnOff()
if !exists(‘g:hiddcomm’)
let g:hiddcomm=1 | hi Comment ctermfg=black guifg=black
else
unlet g:hiddcomm | hi Comment ctermfg=cyan guifg=cyan term=bold
endif
endfu
map :call CommOnOff()
” —————————————————————————-
” Função para comentar vários arquivos de acordo com o tipo
” URL: http://vim.wikia.com/wiki/Comment_Lines_according_to_a_given_filetype
” —————————————————————————-
fu! CommentLines()
“let Comment=”#” ” shell, tcl, php, perl
exe “:s@^@”.g:Comment.”@g”
exe “:s@$@”.g:EndComment.”@g”
endfu
” mapeando a função no modo visual com a combinação ‘co’
vmap co :call CommentLines()a
” definindo os comentários por tipo de arquivo (a primeira linha é um padrão)
au BufRead,BufNewFile * let Comment=”# ” | let EndComment=””
au BufRead,BufNewFile *.inc,*.ihtml,*.html,*.tpl,*.class
\ let Comment=”
au BufRead,BufNewFile *.sh,*.pl,*.tcl let Comment=”# ” | let EndComment=””
au BufRead,BufNewFile *.js set | let Comment=”// ” | let EndComment=””
au BufRead,BufNewFile *.cc,*.php,*.cxx,*.cpp
\ let Comment=”// ” | let EndComment=””
au BufRead,BufNewFile *.c,*.h let Comment=”/* ” | let EndComment=” */”
au BufRead,BufNewFile *.f90,*.f95 let Comment=”! ” | let EndComment=””
au BufRead,BufNewFile *.f let Comment=”C ” | let EndComment=””
au BufRead,BufNewFile *.tex,*.bib let Comment=”% ” | let EndComment=””
au BufRead,BufNewFile *.vim,.vimrc let Comment=”\” ” | let EndComment=””
” —————————————————————————-
” }}}

” Para editar o vimrc {{{
” —————————————————————————-
” Permite recarregar e editar o ~/.vimrc
” —————————————————————————-
” Para recarregar o .vimrc manualmente
imap ,u :source ~/.vimrc
” Para permitir que ele seja automaticamente carregado ao ser salvo
” autocmd! bufwritepost .vimrc source %
” Para editar o .vimrc
imap ,v :e ~/.vimrc
” —————————————————————————-
” }}}

” Funções, mapeamentos e abreviações para Makefiles {{{
” —————————————————————————-
” O Makefile deve usar Tabs
” —————————————————————————-
au BufNewFile,BufRead *[mM]akefile setlocal noexpandtab
” —————————————————————————-
” Esses arquivos também são tipo scripts
” —————————————————————————-
au BufNewFile,BufRead *[mM]akefile* setlocal ft=make
” —————————————————————————-
” }}}

” Funções, mapeamentos e abreviações para LaTeX {{{
” —————————————————————————-
” Identificando o .tex como código LaTeX
” —————————————————————————-
let g:tex_flavor=’latex’
” —————————————————————————-
” Registrando tamanho de coluna em arquivo LaTeX
” —————————————————————————-
au BufNewFile,BufRead *.tex setlocal tw=79
au BufNewFile,BufRead * exec ‘match Error /\%>’ . 79 . ‘v.\+/’
” —————————————————————————-
” Dicionário que é a lista dos nomes dos snippets utilizados pelo snipMate
” quando o LaTeX é utilizado
” —————————————————————————-
au BufNewFile,BufRead *.tex setlocal dictionary=~/.vim/dict/latex.dic
” —————————————————————————-
” Dicionário relativo as tags do arquivo de bibliografia.
” Digite (ou sua tecla personalizada) para criar o arquivo ./bib.dic
” —————————————————————————-
au BufNewFile,BufRead *.tex setlocal dictionary+=./bib.dic
” —————————————————————————-
” Dicionário completo de comandos. Adaptado do dicionário do Kile.
” URL: http://sites.google.com/site/bemylifeeasy/Home/tex.zip
” —————————————————————————-
au BufNewFile,BufRead *.tex setlocal dictionary+=~/.vim/dict/tex/*.cwl
\ iskeyword+=\\,.,{,},[,],*,=,/,(,),>,<
” —————————————————————————-
” Alguns comandos para LaTeX (para o modo de inserção)
” Ative a complementação de chaves para melhor aproveitamento
” —————————————————————————-
au BufNewFile,BufRead *.tex imap ,bf \textbf{
\ | imap ,it \textit{
\ | imap ,tt \texttt{
\ | imap ,fn \footnote{
\ | imap ,se \section{
\ | imap ,ch \chapter{
\ | imap ,un \underline{
\ | iab latex \LaTeX
” —————————————————————————-
” Gerando um dicionário de bibliografia
” O script (em bash) catbib varre todos os .bib do diretório corrente e
” cria o arquivo ./bib.dic que é parte da lista de dicionários acima

” Código do script: catbib
” #!/bin/bash
” # File: catbib
” # Author: J. F. Mitre <http://jfmitre.com&gt;
” # Created: Qui 28/Mai/2009 hs 23:15
” # Last Update: Dom 31 Mai 2009 13:17:25 BRT
” # Notes: write an bib.dic with labels for \cite{}

” TEMP=`ls *.bib 2>/dev/null`
” if [ ! -z $TEMP ]; then
” #if there is/are *.bib, then
” grep @ *.bib |sed -e ‘/STRING/d’ \
” -e ‘/ /d’ \
” -e ‘s/^.*{//g’ >bib.dic 2>/dev/null
” fi
” —————————————————————————-
au BufNewFile,BufRead *.tex,*.bib
\ map :!~/.vim/scripts/catbib
” —————————————————————————-
” Correlacionando as aspas estilo LaTeX
” e mapeando a função “” para ser “” se digitar ‘””‘, ou seja,
” aspas, espaço, aspas, será incluído as aspas comuns.
” —————————————————————————-
au BufNewFile,BufRead *.tex setlocal matchpairs+=`:’
\ | inoremap “” “”a
” —————————————————————————-
” Gerenciando folders em LaTeX (apenas seções são folders)
” —————————————————————————-
au BufNewFile,BufRead *.tex setlocal foldmarker=%bfold,%efold
\ | setlocal foldlevel=0
” —————————————————————————-
” Construindo e gerenciando um ‘projeto’ com o taglist
” Não deixa de ser abreviações criadas anteriormente, mas aqui possui um
” propósito mais definido, com um nome mais claro.
” —————————————————————————-
cab texctg TlistAddFilesRecursive ./ *.tex
cab texp Tlist
” —————————————————————————-
” Filtrando e abrindo log para melhor avaliação do resultado da compilação
” modifique vsplit para split caso prefira dividir a tela horizontalmente.
” URL: http://sites.google.com/site/bemylifeeasy/latexfilter
” —————————————————————————-
au BufNewFile,BufRead *.tex,*.bib
\ map :!~/.vim/scripts/latexfilter
\:vsplit ./filter.log
au BufNewFile,BufRead filter.log
\ map :!~/.vim/scripts/latexfilter
\:e!
” —————————————————————————-
” Carregando sintaxe para destacar erros no código LaTeX
” Ela será aplicada apenas ao arquivo filter.log criado no item anterior
” —————————————————————————-
au BufNewFile,BufRead filter.log syn clear | syn case ignore
\ | syn match logError ‘.*Error.*’
\ | syn match logWarning ‘.*Warning.*’
\ | syn match logOverUnderFull ‘.*[Over|Under].*[v|h]box.*’
\ | syn match logFile ‘.*\.\/.*\….$’
\ | syn match logNoFile1 ‘.*No\ file.*’
\ | syn match logNoFile2 ‘.*File.*does.not.*’
\ | hi logOverUnderFull ctermfg=LightGrey cterm=bold
\ | hi logWarning ctermfg=Red cterm=bold
\ | hi logFile ctermfg=Green cterm=bold
\ | hi logError ctermfg=yellow ctermbg=Red
\ | hi logNoFile1 ctermfg=Blue
\ | hi logNoFile2 ctermfg=Blue
” —————————————————————————-
” Templates em LaTeX
” —————————————————————————-
” Documento para escrever relatórios e textos em geral.
au BufNewFile,BufRead *.tex cmap TEXD 0r ~/.vim/headers/documento.tex
” Escrever pequenos resumos de uma página
au BufNewFile,BufRead *.tex cmap TEXR 0r ~/.vim/headers/resumo.tex
” Escrever cartas
au BufNewFile,BufRead *.tex cmap TEXL 0r ~/.vim/headers/carta.tex
” Apresentação com o Prosper
au BufNewFile,BufRead *.tex cmap TEXP 0r ~/.vim/headers/prosper.tex
” —————————————————————————-
” }}}

” Funções, mapeamentos e abreviações para programação em shell script {{{
” —————————————————————————-
” BashTemp: linha de criação do arquivo temporário com o mktemp
” —————————————————————————-
” map ,bt IA_TMP=`mktemp /tmp/$(basename $0).XXXXXX`
” —————————————————————————-
” O arquivo .sh é na verdade um arquivo bash
” —————————————————————————-
au FileType sh let b:is_bash=1
” —————————————————————————-
” Esss arquivos também são tipo scritps
” —————————————————————————-
au BufNewFile,BufRead .alias*,.funcoes* set ft=sh
” —————————————————————————-
” Cria um cabeçalho para scripts bash
” —————————————————————————-
fun! InsertHeadBash()
normal(1G)
call append(0, “#!/bin/bash”)
call append(1, “# File: “)
call append(2, “# Author: J. F. Mitre <http://jfmitre.com>&#8221;)
call append(3, “# Created: ” . strftime(“%c”))
call append(4, “# Last Update: ” . strftime(“%c”))
call append(5, “# Notes:”)
normal($)
endfun
cmap ,sh call InsertHeadBash()A
” —————————————————————————-
” Se for um arquivo .sh e ele estiver vazio, insira o cabeçalho
” —————————————————————————-
” au BufNewFile,BufRead *.sh if getline(1) == “” | normal ,sh
au BufNewFile,BufRead *.sh if getline(1) == “” | call InsertHeadBash()
” }}}

” Funções, mapeamentos e abreviações para programação em Python {{{
” —————————————————————————-
” Cria uma cabeçalho para programas em Python
” —————————————————————————-
fun! BufNewFile_PY()
normal(1G)
call append(0, “#!/usr/bin/env python”)
call append(1, “# # -*- coding: UTF-8 -*-“)
call append(2, “# Author: J. F. Mitre <http://jfmitre.com>&#8221;)
call append(3, “# Created: ” . strftime(“%c”))
call append(4, “# Last Update: ” . strftime(“%c”))
call append(5, “# File: “)
call append(6, “# Notes: “)
normal gg
endfun
cmap ,py call BufNewFile_PY()A
” —————————————————————————-
” Arquivos Python devem ter tabulação
” —————————————————————————-
au FileType python set noexpandtab
” —————————————————————————-
” Se for um arquivo .py e ele estiver vazio, insira o cabeçalho
” —————————————————————————-
au BufNewFile,BufRead *.py if getline(1) == “” | call BufNewFile_PY()
” —————————————————————————-
” Indentação inteligente para python
” —————————————————————————-
au! FileType python set smartindent
\ cinwords=if,elif,else,for,while,try,except,finally,def,class
” —————————————————————————-
” Pydoc, plugin que integra o Pydoc com o vim
” URL: http://www.vim.org/scripts/script.php?script_id=910
” Uso: no modo normal, digite \pw com o cursor sobre o verbete
” —————————————————————————-
” Para desabilitar o highlight na busca por ajuda
” let g:pydoc_highlight = 0
” —————————————————————————-
” }}}

” Funções, mapeamentos e abreviações para programação para web {{{
” —————————————————————————-
” Relaciona o caractere < com o caractere > em arquivo HTML
” —————————————————————————-
au FileType html set matchpairs+=
” —————————————————————————-
” Auto complete < com > em arquivo HTML
” —————————————————————————-
au FileType html inoremap < <>i
” —————————————————————————-
” Dicionário para snippets de arquivo HTML
” —————————————————————————-
au FileType html set dictionary=~/.vim/dict/html.dic
” —————————————————————————-
” Convertendo arquivo do vim para página em HTML (sintaxe colorida)
” —————————————————————————-
map 2html :so $VIMRUNTIME/syntax/2html.vim
” —————————————————————————-
” }}}

” Funções, mapeamentos e abreviações programação em FORTRAN {{{
” —————————————————————————-
” Leia a parte relativa a FORTRAN em: http://www.vim.org/htmldoc/syntax.html
” —————————————————————————-
” Define qual é a extensão do arquivo
” —————————————————————————-
let s:extfname = expand(“%:e”)
” —————————————————————————-
” Dependendo da extensão, é FORTRAN 77 ou FORTRAN 90/95
” Para cada caso é definido formato fixo ou formato livre do código
” Considerar ou não considerar a tabulação
” E para o caso de formato fixo, definir o exato tamanho permitido
” —————————————————————————-
if s:extfname ==? “f90”
let fortran_free_source=1
unlet! fortran_fixed_source
let fortran_have_tabs=1
elseif s:extfname ==? “f95”
let fortran_free_source=1
unlet! fortran_fixed_source
let fortran_have_tabs=1
elseif s:extfname ==? “f”
let fortran_fixed_source=1
unlet! fortran_free_source
set tw=72
endif
” —————————————————————————-
” Mais precisão na definição de sintaxe do código
” —————————————————————————-
let fortran_more_precise=1
” —————————————————————————-
” Usar ou não usar folders no código
” —————————————————————————-
” let fortran_fold=1
” let fortran_fold_conditionals=1
” let fortran_fold_multilinecomments=1
” —————————————————————————-
” }}}

” Referências {{{
” —————————————————————————-

” * vimbook – tirei muitas dicas dali, mais do que isso, aprendi coisas
” para adaptar e escrever outras. Aliás, essa foi a força
” motriz para a iniciativa dessa configuração.
” URL: http://vivaotux.blogspot.com/2009/01/nosso-livro-sobre-o-vim.html

” * aurelio.net – referência clássica, mesmo que eu não tivesse visitado a
” página do camarada (e eu visitei), eu teria absorvido
” através de terceiros.
” URL: http://aurelio.net/

” * vivaotux – muitas dicas sobre vim (plugins e outras coisas).
” URL: http://vivaotux.blogspot.com/

” * Vim (Página oficial) – a documentação existente nesse site é fantástica.
” URL: http://www.vim.org/

” * Alguns arquivos vimrc:

” * http://aurelio.net/vim/vimrc-ivan.txt
” * http://aurelio.net/doc/vim/vimrc-voyeg3r.txt
” * http://dotfiles.org/~voyeg3r/.vimrc
” * http://aurelio.net/doc/dotfiles/vimrc.txt
” * http://www.stripey.com/vim/vimrc.html
” * http://www.8t8.us/configs/vimrc.txt
” * http://snipt.net/voyeg3r/my-vimrc
” —————————————————————————-
” }}}

Um agradecimento aos autores…
Como sempre, espero que ajude!
=)

MySQL Acesso pela rede (acesso remoto) – FreeBSD

Olá pessoal.
É realmente comum após a instalação do MySQL Server no FreeBSD, ou em qualquer sistema UNIX Like, ter a necessidade de acessá-lo pela rede ou remotamente.
Mas por default esta opção é desabilitada.

Há uma maneira fácil de resolver este problema. Teremos apenas que criar um outro usuário com determinados privilégios na própria tabela de Usuários do MySQL.

Então, acesse seu MySQL localmente, e execute o comando após o “mysql>”

mysql> grant all privileges on *.* to <usuario>@’%’ identified by ‘<senha>’ with grant option;

Onde:
<usuario> é o usuário que deseja definir os privilégios.
<senha> a senha para este usuário que será criado.

Ao consultar a tabela de Usuários, o resultado será este primeiro antes de executar o comando, e, o segundo após executar o comando.


Espero que ajude!
=)

O World IPv6 Launch (lançamento mundial do IPv6)

IPv6

Como continuidade do processo de disseminação do IPV6, a Internet Society coordenará, em 06 de Junho de 2012, o World IPv6 Launch, ou Lançamento Mundial do IPv6. Desta vez não será apenas um teste. O IPv6 será ativado de forma definitiva pelos participantes da iniciativa. Trata-se de tornar o IPv6 parte do processo normal de negócios. Dentre as empresas que se comprometeram estão Google, Facebook e Yahoo, provedores de acesso, como Comcast e ATT, dos Estados Unidos, Free, da França, e fabricantes de equipamentos de redes, como Cisco e D-Link.

A Sociedade da Internet no Brasil (chapter brasileiro da Internet Society – ISOC) promoverá na data uma série de palestras para disseminar a importância do IPv6. Além deste evento na USP, haverá outros em Salvador, Fortaleza e Jundíai. Mais informações sobre a iniciativa e os locais das palestras podem ser obtidas em: http://www.worldipv6launch.org e www.isoc.org.br.

Histórico
Há aproximadamente 1 ano, em 8 de Junho de 2011, a Internet Society promoveu um teste global de uso do IPv6, conhecido como World IPv6 Day. Durante vinte e quatro horas, importantes players na Internet ativaram o novo protocolo em seus sítios na Web. O teste tinha como objetivo verificar que tipo de problemas aconteceriam na ativação do IPv6, e foi um completo sucesso. De forma geral, simplesmente não houve problemas.

Como a maioria dos sítios Web brasileiros não teve condições do participar do World IPv6 Day, o NIC.br coordenou um novo teste. De 6 a 12 de Fevereiro de 2012 foi realizada a Semana IPv6. Durante a Semana sítios Web, provedores de acesso e de serviços Internet ativaram o IPv6 num grande teste regional e houve atividades também na Campus Party Brasil. Foram 196 websites, nove datacenters e provedores de hospedagem e 21 provedores de acesso, incluindo Globo.com, Terra, UOL, iG, Tecla, Kinghost, entre outros. Como no World IPv6 Day, o teste também mostrou-se um completo sucesso e muitos provedores decidiram manter o IPv6 ativo. Foi o caso, por exemplo, do Terra, do UOL, e da Globo (com o blog techtudo).

Estatísticas
O Google coleta estatísticas sobre a adoção do IPv6 na Internet continuamente. Esperando que a publicação dessas informações ajude provedores de Internet, proprietários de websites e criadores de políticas à medida que o setor implementa o IPv6.

Introdução ao JSON

JSON (JavaScript Object Notation – Notação de Objetos JavaScript) é uma formatação leve de troca de dados. Para seres humanos, é fácil de ler e escrever. Para máquinas, é fácil de interpretar e gerar. Está baseado em um subconjunto da linguagem de programação JavaScriptStandard ECMA-262 3a Edição -Dezembro – 1999. JSON é em formato texto e completamente independente de linguagem, pois usa convenções que são familiares às linguagens C e familiares, incluindo C++, C#, Java, JavaScript, Perl, Python e muitas outras. Estas propriedades fazem com que JSON seja um formato ideal de troca de dados.

JSON está constituído em duas estruturas:

  • Uma coleção de pares nome/valor. Em várias linguagens, isto é caracterizado como um object, record, struct, dicionário, hash table, keyed list, ou arrays associativas.
  • Uma lista ordenada de valores. Na maioria das linguagens, isto é caracterizado como uma array, vetor, lista ou sequência.

Estas são estruturas de dados universais. Virtualmente todas as linguagens de programação modernas as suportam, de uma forma ou de outra. É aceitavel que um formato de troca de dados que seja independente de linguagem de programação se baseie nestas estruturas.

Em JSON, os dados são apresentados desta forma:

Um objeto é um conjunto desordenado de pares nome/valor. Um objeto começa com { (chave de abertura) e termina com } (chave de fechamento). Cada nome é seguido por : (dois pontos) e os pares nome/valor são seguidos por , (vírgula).

Uma array é uma coleção de valores ordenados. O array começa com [ (conchete de abertura) e termina com ] (conchete de fechamento). Os valores são separados por , (vírgula).

Um valor (value, na imagem acima) pode ser uma cadeia de caracteres (string), ou um número, ou true ou false, ou null, ou um objeto ou uma array. Estas estruturas podem estar aninhadas.

Uma string é uma coleção de nenhum ou mais caracteres Unicode, envolvido entre aspas duplas usando barras invertidas como caracter de escape. Um caracter está representando como um simples caracter de string. Uma cadeia de caracteres é parecida com uma cadeia de caracteres em C ou Java.

Um número é similar a um número em C ou Java, exceto quando não se usa os números octais ou hexadecimais.

Espaços em branco podem ser inseridos em quanlquer parte dos símbolos. Exceto pequenos detalhes de codificação, a linguagem é completamente descrita.

PROTECT IP / SOPA Um ato para quebrar a Internet

O conteúdo da internet atualmente tem um significativo valor, porque é consideravelmente desobstruído.

Falando de mim, mas dividindo o mesmo conceito que muitos, adoro abrir enormes bibliotecas de música, livros e vídeo. Não gosto de censura e meios legais que te processam por fazer coisas “interessantes”.
Amo a privacidade, amo plataformas abertas para criar e inventar.

Não me importo, e fico feliz em pagar por coisas boas, mas detesto ser coagido a pagar por mediocridade e intermediários.

Eu, você, todas as pessoas têm o direito de desejar todas essas coisas, mesmo quando os governos e corporações, tem seus próprios interesses contrários, intitulando a Liberdade Expansiva Cultural como Perigosa ou Destrutiva.

Meu objetivo aqui hoje é fazer com que o interesse do público vivamente claro, tão claro que nem mesmo os lobistas mais poderosos, os mais inteligentes monopólios poderão destruí-la, prevaleça!

O movimento CONTRA os projetos de lei PIPA/SOPA é de extrema importância para que a internet possa permanecer livre!

Assistam ao vídeo e por favor divulguem:

Existe uma ferramenta do site da Casa Branca que permite aos internautas criarem petições oficiais sobre quaisquer assuntos. Aquelas que atingem 25 mil assinaturas no prazo de um mês ganham uma resposta oficial da Casa Branca.
Em apenas dois dias, a petição que pede o veto ao SOPA ultrapassou esse mínimo e, no momento, já ultrapassou a casa dos 50 mil. Pessoal é só cadastrar o email e assinar. Segue o Link:

https://wwws.whitehouse.gov/petitions/!/petition/veto-sopa-bill-and-any-other-future-bills-threaten-diminish-free-flow-information/g3W1BscR

“This will kill the free flow of information and conversation on the internet.”

Acentuação no MySQL

CHARSET e COLLATE são coisas distintas, no MySQL, cada CHARSET possui COLLATEs, cada um com sua particularidade.

O intuito aqui não será explicar as características de cada um deles, pois pode ser visto da documentação do MySQL, vou dar um pequeno descritivo entre latin1_general_ci, latin1_general_cs e latin1_swedish_ci, que são os que uso com mais freqüência.

latin1_general_ci: Não há distinção entre letras maiúsculas e minúsculas. Buscando por “teste”, registros como “Teste” ou “TESTE” serão retornados.
latin1_general_cs: Distingue letras maiúsculas e minúsculas. Buscando por “teste” retornará somente “teste”. Opções como “Teste” e “TESTE” não serão retornadas.
latin1_swedish_ci: Não distingue letras minúsculas e maiúsculas e nem caracteres acentuados e com cedilha, ou seja, o registro que contém a palavra “Intuição” será retornado quando houver uma procura pela palavra “intúicao”.

Quando você estiver importando, ou exportando os dados da sua base, certifique-se de estar especificando a codificação corretamente.
No phpMyAdmin ou no WorkBench há um menu DropDown próximo às opções de compactação que normalmente está selecionada a opção ‘utf-8’. Mantenha-o caso sua base foi definida com este CHARSET, do contrário, especifique ‘iso-8859-1’ caso ela esteja com o CHARSET Latin1.

Obs: Não se preocupar com a diferença de codificação entre Latin1 e UTF8 é uma das principais causas de erros de acentuação.

Uma rede anônima distribuída

Sempre admirei pessoas como o Michael Moore, Julian Assange, Jacobe Appelbaum, entre outros, mas o que eles tem em comum para mim?
Ambos pregam a verdade nua e crua, diante disso me perguntava como eu poderia ajuda-los, ou simplesmente fazer parte destes, tão raros e ousados.

Então sem muita inspiração, mas com muita vontade, decidí fazer parte de um seleto grupo que prega pela liberdade de expressão, e principalmente pela segurança de quem o faz, em forma de privacidade e anonimato na internet (TOR – The Onion Router). Muitos podem pensar que para nós isso não é necessário, mas lhes digo, não pensemos somente em nós, mas sim em quem tem sua privacidade controlada por ditadores, por governos autoritaristas e etc.

E agora vamos falar um pouco sobre o TOR.

Faz algum tempo que estou, junto com outros brasileiros, participando da rede como Exit Relay, e espero contribuir muito para a sua privacidade e anonimato na Internet.

TOR é um software projetado com o objetivo de assegurar a liberdade e privacidade dos usuários, bem como proteger negócios confidenciais, relacionamentos e a segurança de Estado. Tais informações podem ser ameaçadas por analisadores de tráfego, que interceptam e guardam pacotes que trafegam pela rede. Em vez de seguir uma rota direta entre origem e destino, toda a informação transmitida por ele segue um caminho randômico, que se altera permanentemente, através de diversos servidores voluntários que cobrem a rota. Fica difícil para qualquer sistema saber quem você é, onde você está ou de onde veio, embora seja possível saber o que você está levando consigo.

Com o TOR é possível proteger o conteúdo de emails, textos de softwares de mensagens instantâneas, IRC e outros aplicativos que usam o protocolo TCP. Porém ele se restringe ao envio de dados. Para que seja possível navegar por sites anonimamente, é necessário que o Tor seja utilizado em conjunto com softwares como o Privoxy, para bloquear o envio de informações do browser.

O programa é utilizado por diversos públicos, pois oferece a base para uma gama de aplicações que possibilitam que organizações e particulares partilhem informação através deredes públicas sem comprometer a sua privacidade.

Por exemplo, uma pessoa pode usar o TOR para impedir que sites registrem seus acessos ou para acessar serviços bloqueados pelo provedor de acesso. O programa também permite a publicação de sites e outros serviços sem revelar a localização de quem publica. Alguns jornalistas e funcionários de ONGs usam o TOR para se comunicarem de forma mais segura com seus contatos e com as organizações em que trabalham.

Como funciona?

TOR Socks

O TOR-cliente é um programa que deve ser instalado no computador e que funciona como um proxy socks 5 para este. É fornecido um bind na porta local da máquina.
Em seguida, os programas devem ser configurados para usar um servidor proxy socks 5 e apontados para o endereço localhost.

A partir daí, o TOR vai rotear todo o tráfego do computador através de túneis HTTP da rede TOR até o destino, na rede “convencional”. Se o usuário entrar em site do tipo http://myip.is, vai ver que o seu endereço vai aparecer diferente do seu endereço real. O endereço que vai aparecer é o endereço do nó TOR por onde ele saiu da rede TOR para a rede “convencional”. O tráfego é roteado por vários nós TOR.
Ou seja, para o servidor acessado você terá o endereço IP de um do nó de saída, como a rede TOR tem uma topologia caótica (randomica), não se pode escolher o IP final ou de qual região da rede será. Por exemplo, usando a rede tor você não pode escolher ter um IP de uma máquina localizada em um país ou região especifica.

A instalação é bastante simples e intuitiva, caso também queira contribuir, abaixo estão as telas de configuração e de uso de banda.

Windows Server 2008 - Data Center

Obs: Caso faça NAT na sua rede local, você deverá se atentar aos encaminhamentos de porta.

Wikileaks – Bloqueio financeiro

Estão tentando calar o Wikileaks… Profético, ou apenas óbvio!

O que a MasterCard, Visa, Bank of America, Paypal e Western Union têm em comum?
Eles te ajudam a pagar por aquilo que você quer?
Bem; Sim… a menos que você queira ajudar o WikiLeaks a tornar o mundo um lugar melhor.

Para ver os detalhes chocantes, acesse wikileaks.org/​Banking-Blockade.html

Que não esqueçamos:
“Notícia é o que alguém, em algum lugar, está tentando suprimir. O resto é só propaganda.” 

“Toda verdade passa por três estágios. Primeiro, ela é ridicularizada. Segundo, é violentamente combatida. Terceiro, é aceita como sendo auto-evidente.” 

“Mesmo se você está em uma minoria de um, a verdade ainda é a verdade.”

Como substituir a placa lógica (Logic Board) do MacBook Core 2 Duo (White)

Recentemente tive problemas com meu MacBook e o diagnóstico foi problema na Logic Board, procurei ajuda com o pessoal do #HMBT e #iFixit e depois de abrir e substituir a placa, estou montando este tutorial para auxiliar quem tenha necessidade do mesmo.

Espero que ajude os entusiastas.
Aproveitei para fazer um upgrade trocando a placa lógica com processador 2.0 para uma com processador 2.16 Aqui.

Obs: Clique nas imagens para ampliar.

  • Passo 1 – Bateria

Texto alternativo
Use uma moeda para girar o parafuso da bateria 90 graus no sentido horário.

  • Passo 2 – Retirar bateria


Retire a bateria do computador.

  • Passo 3 – Cover da Memória


Desparafuse os três parafusos com espaçamento uniforme com uma chave Phillips.

Obs: Os parafusos são fixados nesta cobertura de metal para que você não possa perdê-los.

  • Passo 4 – Retirar a cobertura de proteção em L

Gire a cobertura da memória em forma de L e levante-a para fora do computador.

  • Passo 5 – Parafusos maiores


Remova os seguintes parafusos:

-> Um 11 milímetros Phillips #0 no meio do case. (5 milímetros x .75 mm de espessura)
-> Dois 14,5 milímetros Phillips #0 (5 milímetros x .75 mm de espessura)
Obs: Se os parafusos não saírem, você pode usar uma chave de fenda magnetizada para atraí-los para fora.

  • Passo 6


Remova os seguintes parafusos da parede traseira do compartimento da bateria:

-> Um 3 milímetros Phillips #0. (2,75 milímetros de diâmetro).
-> Dois 4 milímetros Phillips #0. (2,75 milímetros de diâmetro).

  • Passo 7


Remova os dois parafusos Phillips da parede direita do compartimento da bateria (NÂO os mais próximos ao conector da bateria).
-> Dois 6,25 milímetros Phillips # 0. (4 milímetros de diâmetro 0,5 mm x espessura)

  • Passo 8


Remova os quatro parafusos Phillips indicados na parede frontal do compartimento da bateria.
Obs: Comece a partir da esquerda, remova somente os parafusos, 2, 4, 7 e 9.
-> Quatro 3,25 milímetros Phillips # 0. (4 milímetros de diâmetro x 4mm de espessura)

  • Passo 9


Remova os seguintes parafusos da parte traseira do computador:
Obs: Os parafusos maiores no interior, parafusos mais curtos na parte externa.
-> Dois 11 milímetros Phillips # 0,  (2,2 milímetros x 2 mm) (3,2 milímetros de diâmetro x 0,5 milímetros de espessura)
-> Dois 7,25 milímetros Phillips # 0,  (2mm de diâmetro x 3,75 milímetros) (3,2 milímetros de diâmetro x 0,5 milímetros de espessura)

  • Passo 10


Remova os dois parafusos Phillips do lado do drive óptico do computador.
-> Dois 5,2 milímetros Phillips # 0,  (2,3 milímetros x 3,5 milímetros) (3,2 milímetros de diâmetro x 0,5 milímetros de espessura)
Obs: Não é necessário retirar os parafusos semelhante do outro lado do computador.

  • Passo 11


Obs: Há uma fita do trackpad e teclado ligada a placa lógica, por isso não puxe o top case para cima ainda.
Começando pela frente do computador, levante um pouco o top case, use uma palheta de guitarra para ajudar a soltar as bordas que estavam presas (principalmente nas laterais).

  • Passo 12 – Desconectar a flag do teclados


Levante um pouco o top case, puxe a guia preta do cabo prata para cima.
Se não houver nenhuma guia preto, você pode usar algo para erguer o conector.
Obs: Conector muito sensível, quando abrí pela primeira vez acabei danificando por esquecer de desconecta-lo.

  • Passo 13 – Quadro de alimentação


Desconecte o cabo MagSafe da placa lógica, puxando o snap-in do conector de saída (para direita).

  • Passo 14


Remova o parafuso Phillips acima do alto-falante da esquerda.
Tire o alto-falante esquerdo para fora.

  • Passo 15


Remova os seguintes três parafusos:
-> Dois 9 milímetros Phillips de cada extremidade da esquerda.
-> Um 7,5 milímetros Phillips do meio.
Remova o espaçador de plástico preto na parte inferior do quadro.

  • Passo 16


Levantar o quadro para cima e para fora do computador.
Obs1: Preste atenção aos ganchos de metal fino EMI, pois eles podem se prender na placa.
Obs2: O cabo do alto-falante pode ser ligado no quadro. Não se esqueça de colocá-lo de volta quando você estiver invertendo o procedimento.
A parte do quadro que você está removendo é anexado a outra parte por pequenos ganchos embaixo que são difíceis de ver até que você tenha o diferenciado. Eles estão localizados ao longo do conector do fone de ouvido e porta firewire

  • Passo 17


Descasque a fita entre o ventilador e a unidade óptica.

  • Passo 18


Use algo para mover os cabos pretos das colunas para a direita. Isto irá revelar um parafuso prata que fixa a ventoinha.

  • Passo 19


Desconecte o cabo laranja da unidade óptica.

  • Passo 20


Descasque a tampa de borracha preta do dissipador de calor.

  • Passo 21


Desconecte o conector do ventilador preto e dois conectores de sensor de temperatura da placa lógica.
Obs: Se você tiver um processador Core 2 Duo MacBook Santa Rosa / Penryn / início de 2009, há apenas um sensor de temperatura.
O dissipador de calor dos MacBooks podem ser diferentes.

  • Passo 22


Remova os seguintes parafusos:
-> Um 3 Phillips mm no lado direito do ventilador.
-> Um 6 milímetros Phillips no lado esquerdo do ventilador.
-> Quatro 9 milímetros Phillips.

  • Passo 23


Segure o dissipador de calor com uma mão e o ventilador com a outra mão, e levante-os para fora do computador. O ventilador é ligado ao dissipador de calor apenas com uma tira de feltro preto, por isso não deixe de remover ambas as partes como uma unidade
Obs: Se você precisa montar o dissipador de calor de volta para o laptop, tenha pasta térmica.

  • Passo 24


Desconecte os três cabos da antena da placa do airport, e o cabo inversor preto da placa lógica.
Obs: Se você tiver um processador Core 2 Duo MacBook Santa Rosa / Penryn / início de 2009, há apenas dois cabos de antena e o cabo inversor preto é em um local diferente.

  • Passo 25


Remova os seguintes parafusos da placa airport:
-> Um 3 Phillips mm do lado esquerdo.
-> Um de 8 mm (com uma cabeça grande +-2 milímetros) Phillips do lado direito.

  • Passo 26


Segure o cartão Airport pela parte superior e deslize-o em direção à tela do computador.

  • Passo 27


Use algo para desconectar o conector do alto-falante esquerdo da placa lógica.
Tire o alto-falante para fora do computador.

  • Passo 28


Desconecte o cabo de dados, puxando para cima na aba preta.

  • Passo 29


Desligue o recém revelado cabo do disco rígido da placa lógica.

  • Passo 30


Use algo para desconectar o conector alto-falante e conector do bluetooth da placa lógica.
Obs: Se você tiver um processador Core 2 Duo MacBook Santa Rosa / Penryn, desconecte o cabo da bateria PRAM.

  • Passo 31


Use algo para cuidadosamente desconectar o cabo do microfone da placa lógica.

  • Passo 32


Retire o cabo do microfone acima do slot de memória RAM direita.
Obs: Este clip de metal pode não estar presentes em alguns modelos Santa Rosa / Penryn.

  • Passo 33


Use algo para cuidadosamente retirar o conector da bateria e desliga-lo da placa lógica.

  • Passo 34


Remova os três parafusos de 3 milímetros Phillips.

  • Passo 35


Levante a placa lógica a partir do lado direito, e deslize-a para cima e para fora do computador.

  • Passo 36 – Bateria da Logic Board


Vire a placa lógica.
Descasque a bateria PRAM.
Obs: Se você tiver um processador Core 2 Duo Macbook Santa Rosa / Penryn, a bateria PRAM não está localizado na placa lógica. Por favor, pule esta etapa.

  • Passo 37 –  Remova as Memórias


Puxe a alavanca de metal e deslize o chip de memória RAM para fora da placa lógica.
Repita esse procedimento se houver dois chips de memória instalada no seu computador.

Pronto!
Para colocar outra placa basta seguir os passos de forma decrescente.

[]’s
Thiago

R.I.P. Steve Jobs

Steve Jobs (1955-2011)

Steve Jobs - The Hero

A Apple perdeu um visionário e um gênio criativo, e o mundo perdeu um ser humano sensacional. Steve deixa uma grande empresa que apenas ele poderia ter construído, e seu espírito será para sempre a fundação da Apple.

‎”Mesmo as pessoas que querem ir para o céu não querem morrer para chegar lá.
E, por outro lado, a morte é um destino do qual todos nós compartilhamos. Ninguém escapa.
É a forma como deve ser, porque a morte é provavelmente a melhor invenção da vida. É o agente da vida. Limpa o velho para dar espaço ao novo.” (Steve Jobs)

Baixar e Executar vários tipos de arquivos de mídia no iPad sem utilizar o iTunes.

Bom dia.
A idéia do post não é apenas rodar tais formatos citados, mas sim o conceito de baixar arquivos da internet, armazena-los e executar posteriormente no iPad sem utilizar o iTunes.

Usuários novatos encontram uma tremenda dificuldade em usar seu iPad sem um computador para converter e sincronizar seus arquivos, outros alegam que essa é a principal limitação. Aqui vou passar algumas dicas de aplicativos que auxiliam nessa tarefa.

1 – Downloads HD – AppStore
“O App é um Gerenciador de Downloads que permite baixar arquivos da Internet para o iPad. Você pode visualizar ou reproduzir os arquivos baixados diretamente no iPad ou transferi-los para o seu computador. Podemos navegar via Abas, o que ao meu ver é bem mais agradável. A experiência de usuário assemelha-se bem mais à do Safari para Mac, do que às alternativas disponíveis para iOS”
20110928-120502.jpg

2 – GoodPlayer – AppStore
“Assista vídeos no seu iPhone e iPad sem necessidade de converter os arquivos de mídia antes, GoodPlayer pode rodar AVI, Xvid, DivX, DAT, VOB, FLV, WMV, MKV, RM, RMVB, AC3, HTTP, FTP, RTSP, MMS, MMSH, MMST, RTP e UDP, arquivos e streaming diretamente em dispositivos IOS”
20110928-121329.jpg

Esta é uma maneira que pensei XD. Idéias são bem vindas!

Obs: O App Downloads HD possui a função “Abrir com”, que não funciona para os formatos que ele não reconhece, o procedimento abaixo resolve esse problema para esses formatos de arquivo, para os demais basta escolher o app na função “abrir como”

– assumiremos a partir de agora que vc saiba acessar seu iPad via SSH, conheça a senha do Root definida pela Apple e tenha conhecimento em manipulação de arquivos via linha de comando…

Acesse seu iPad via SSH, entre no diretório de aplicativos.
/var/mobile/Applications
Agora você deve localizar o diretório dos aplicativos (parte chata, tente buscar por alguma referencia, ou olhe diretório por diretório), no meu caso são os citados nos links na imagem.
20110928-123347.jpg

Crie um link simbólico para o diretório “Documents” de ambos aplicativos na raiz, ou onde preferir para mover com facilidade as mídias baixadas.
20110928-124040.jpg

Após efetuar seus downloads, move-los, assim que abrir o GoodPlayer a biblioteca será atualizada e você poderá assistir as mídias que estiverem nos formatos suportados.

[]’s
Thiago

Web + RGB & HSL

A manipulação de cores no HTML nunca foi muito flexível. No começo escolhíamos as cores escrevendo seus nomes por extenso. Os nomes eram padrões eram: black, blue, yellow, green, etc… Na década de 80 houve um acréscimo de 131 novas cores com nomes estranhos chamada X11. Estes nomes foram adotados pelos primeiros browsers tem sido suportados até hoje. Há nomes como mintcream, moccasin, navajowhite, powderblue entre outros… O W3C ainda mantém uma lista completa com os nomes destas cores aqui.

Além de ser muito difícil de manter uma coleção de cores com seus nomes esquisitos, é quase impossível você criar um website tentando se adequar a quantidade limitada de cores disponíveis. Já tínhamos problemas sufientes com a quantidade limitada de fonts que poderíamos utilizar. Isso não poderia acontecer com as cores também. Com esse problemas vários padrões matemáticos foram estabelecidos para que criássemos as cores que gostaríamos de utilizar. Vou falar de dois padrões aqui: RGB e HSL. Vou ligá-los ao desenvolvimento web e não de uma forma geral. Caso contrário o artigo seria mais longo e envolveríamos outros assuntos mais extensos.

Você já deve ter lido algo sobre utilizar para web cores no formato RGB. Esse formato está ficando mais popular com o CSS3 por que agora podemos controlar o canal alpha, tendo uma combinação nova chamada RGBA. Há também outro formato que ganhou alguma atenção do workgroup no W3C que é o formato de cor chamado HSL. Como o RGB, o HSL também ganhou um canal de opacidade, ficando HSLA. Muitos desenvolvedores ainda tem dúvidas sobre as diferenças entre RGBA e HSLA e qual utilizar.

Tudo é muito simples de entender. RGB e HSL são dois formatos de composição de cores digitais. Você pode escolher qual dos dois utilizar, vai do seu gosto. Contudo como até hoje utilizamos o HEXADECIMAL como padrão de cores para web, minha sugestão é esperar para ver qual das duas específicações cairá no gosto do mercado para escolher um dos formatos para utilizá-la mais frenquentemente nos projetos. Entretanto os dois formatos tem flexibilidades diferentes e por isso pode ser muito difícil apenas uma delas se tornar mais popular que outra.

Abaixo vou introduzir brevemente as diferenças entre o formato HSL e RGB para que você entenda quais suas características.

O RGB

O processo é simples: como na vida real onde você mistura cores para obter uma outra cor como resultado, você faz a mesma coisa com o RGB: você mistura as cores para obter uma outra cor como resultado. Para tanto você utilizará a soma de 3 valores: Red, Green e Blue: rgb(red, green, blue);

Veja a sintaxe abaixo para entender melhor a aplicação:

p {
color: rgb(100%, 100%, 0%);
}

Os três valores são ligados às três principais respectivamente vermelha, verde e azul. No caso acima inseri 100% de cor para Vermelho e Verde. Como bom aluno de educação artística, você deve saber que misturando vermelho e verde a cor resultante será amarelo.

Você pode ser mais específico controlando até mesmo a fração da porcentagem, por exemplo:

p {
color: rgb(55.2%, 100%, 0%);
}

Assim você consegue exatamente a cor que precisa. Esse formato de porcentagem e controle de fração também é aplicado ao HSL.

Obs: O RGB pode ser configurado utilizando valores hexadecimais.

O HSL

Funciona um pouco diferente. A sintaxe é como abaixo:

p {
color: hsl(0, 100%, 30%);
}

A escolha de cores no HSL não é baseado na mistura mas sim em um esquema baseado em um cilindro. O primeiro número de valor na sintaxe é onde escolhemos a cor. Começamos no topo com vermelho, onde o valor é 0, e damos uma volta de 360 graus, retornando novamente no topo, na cor vermelha. Conforme aumentamos o valor vamos selecionando as cores. Por exemplo, se selecionarmos um valor por volta de 120 obtemos um verde.

20110902-030004.jpg

Embora possamos escolher qualquer cor misturando as cores com o RGB, é muito mais instintivo escolhermos uma cor específica e modificarmos sua luminosidade. Escolhemos o azul e modificamos sua luminosidade para obtermos o tom que você deseja.

Para escolhermos a luminosidade e a saturação da cor modificamos os dois outros valores, o segundo valor é a luminosidade e o terceiro valor é a saturação ou a quantidade de cinza que você colocará na cor. Modificar a saturação é como se você mudasse a quantidade de cor. Quanto menos cor, mais cinza. Se você quiser uma cor mais suja, mais apagada, você diminui este valor. Caso contrário você a mantém como 100% e utiliza a quantidade integral da cor. Normalmente esse será o padrão.

E o hexadecimal?

O hexadecimal, queridinho dos nossos corações, sempre estará ao nosso lado. A sintaxe é muito mais curta que as outras duas específicações. Não temos todas as vantagens que as outras especificações nos dão, começando pelo canal alpha. Com a grande maioria dos programas visuais dando suporte ao formato hexadecimal ele ainda perdurará durante muito tempo ainda em nossas vidas.

Afinal, qual a diferença entre os encodings?

20110714-124921.jpg
A diferença do ISO-8859-1 e do UTF-8 é que um suporta até 256 caracteres (0 a 255, ou 0x00 a 0xFF) e o outro suporta até 65.536 caracteres (0 a 65535, ou 0x0000 a 0xFFFF).

O que leva alguns desenvolvedores a utilizarem o ISO-8859-1 é a economia de espaço, tráfego de rede e velocidade na exibição no caso de grandes quantidades de dados, pois um caractere UTF-8 chega a ter o dobro do tamanho de um caractere ISO-8859-1, em compensação, o UTF-8 suporta a maioria das letras, números e outros caracteres dos diversos países do mundo (se não forem todos), o que acaba fazendo do UTF-8 um padrão internacional.

Entretando, é aconselhável ser utilizado o UTF-8 somente quando se prevê que seu sistema lidará com textos em idiomas distintos, como japonês, chinês, árabe, russo, grego e outros cujos caracteres não são de origem romana, do contrário, você pode usar o ISO-8859-1, pois ele suporta os idiomas de origem latina (português, espanhol, francês e italiano) e também inglês, alemão, dinamarquês e dos demais países da Europa Ocidental.

Tipo de dados, SQL Server

Abaixo segue uma relação dos tipos de dados básicos e ao meu ver, mais usados do SQL Server, sendo que os que estiverem marcados com (*) somente foram introduzidos a partir do SQL Server 2000.
20110428-100516.jpg
TINYINT: Valores numéricos inteiros variando de 0 até 256

SMALLINT: Valores numéricos inteiros variando de –32.768 até 32.767

INT: Valores numéricos inteiros variando de -2.147.483.648 até 2.147.483.647

* BIGINT: Valores numéricos inteiros variando de –92.23.372.036.854.775.808 até 9.223.372.036.854.775.807

BIT: Somente pode assumir os valores 0 ou 1. Utilizado para armazenar valores lógicos.

DECIMAL(I,D) e NUMERIC(I,D): Armazenam valores numéricos inteiros com casas decimais utilizando precisão. I deve ser substituído pela quantidade de dígitos total do número e D deve ser substituído pela quantidade de dígitos da parte decimal (após a vírgula). DECIMAL e NUMERIC possuem a mesma funcionalidade, porém DECIMAL faz parte do padrão ANSI e NUMERIC é mantido por compatibilidade. Por exemplo, DECIMAL(8,2) armazena valores numéricos decimais variando de – 999999,99 até 999999,99

SMALLMONEY: Valores numéricos decimais variando de -214.748,3648 até 214.748,3647

MONEY: Valores numéricos decimais variando de -922.337.203.685.477,5808 até 922.337.203.685.477,5807

REAL: Valores numéricos aproximados com precisão de ponto flutuante, indo de -3.40E + 38 até 3.40E + 38

FLOAT: Valores numéricos aproximados com precisão de ponto flutuante, indo de -1.79E + 308 até 1.79E + 308

SMALLDATETIME: Armazena hora e data variando de 1 de janeiro de 1900 até 6 de junho de 2079. A precisão de hora é armazenada até os segundos.

DATETIME: Armazena hora e data variando de 1 de janeiro de 1753 até 31 de Dezembro de 9999. A precisão de hora é armazenada até os centésimos de segundos.

CHAR(N): Armazena N caracteres fixos (até 8.000) no formato não Unicode. Se a quantidade de caracteres armazenada no campo for menor que o tamanho total especificado em N, o resto do campo é preenchido com espaços em branco.

VARCHAR(N): Armazena N caracteres (até 8.000) no formato não Unicode. Se a quantidade de caracteres armazenada no campo for menor que o tamanho total especificado em N, o resto do campo não é preenchido.

TEXT: Armazena caracteres (até 2.147.483.647) no formato não Unicode. Se a quantidade de caracteres armazenada no campo for menor que 2.147.483.647, o resto do campo não é preenchido. Procure não utilizar este tipo de dado diretamente, pois existem funções específicas para trabalhar com este tipo de dado.

NCHAR(N): Armazena N caracteres fixos (até 4.000) no formato Unicode. Se a quantidade de caracteres armazenada no campo for menor que o tamanho total especificado em N, o resto do campo é preenchido com espaços em branco.

NVARCHAR(N): Armazena N caracteres (até 4.000) no formato Unicode. Se a quantidade de caracteres armazenada no campo for menor que o tamanho total especificado em N, o resto do campo não é preenchido.

NTEXT: Armazena caracteres (até 1.073.741.823) no formato Unicode. Se a quantidade de caracteres armazenada no campo for menor que 1.073.741.823, o resto do campo não é preenchido. Procure não utilizar este tipo de dado diretamente, pois existem funções específicas para trabalhar com este tipo de dado.

BINARY(N): Armazena N (até 8.000 bytes) dados no formato binário. Se a quantidade de dados binários armazenados no campo for menor que o tamanho total especificado em N, o resto do campo é preenchido com espaços em branco. Procure não utilizar este tipo de dado diretamente, pois existem funções específicas para trabalhar com este tipo de dado.

VARBINARY(N): Armazena N (até 8.000 bytes) dados no formato binário. Se a quantidade de dados binários armazenados no campo for menor que o tamanho total especificado em N, o resto do campo não é preenchido. Procure não utilizar este tipo de dado diretamente, pois existem funções específicas para trabalhar com este tipo de dado.

IMAGE: Armazena dados no formato binário (até 2,147,483,647 bytes). Se a quantidade de dados binários armazenados no campo for menor que o tamanho total especificado em N, o resto do campo não é preenchido. Procure não utilizar este tipo de dado diretamente, pois existem funções específicas para trabalhar com este tipo de dado.

CURSOR: Armazena uma referência (ponteiro) de um cursor do SQL Server. Não pode ser utilizado como um tipo de dado de uma tabela, somente em declarações de variáveis.

* SQL_VARIANT: Permite o armazenamento de todos os tipos de dados em uma mesmo campo de uma tabela com exceção dos tipos TEXT, NTEXT, TIMESTAMP e SQL_VARIANT

* TABLE: Armazena um conteúdo do resultado de uma instrução SELECT em uma variável de memória do SQL Server. Não pode ser utilizado como um tipo de dado de uma tabela, somente para declarações em variáveis. Este tipo de dados pode servir para suprir a necessidade de criação de arrays e matrizes no SQL Server.

TIMESTAMP: Este tipo de dado permite a geração automática de uma valor binário para um campo de uma tabela do SQL Server. Cada tabela pode possuir somente um campo com o tipo de dadoTIMESTAMP. Para o tipo de dado TIMESTAMP, devemos ou criar um DEFAULT para seu valor padrão ou passar NULL para este campo em uma instrução INSERT, pois o banco de dados automaticamente gerará um valor binário para esta coluna.

UNIQUEIDENTIFIER: Este tipo de dado deve ser utilizado para a criação de um identificar global para uma coluna de uma tabela. Também podemos possuir somente um campo como tipo UNIQUEIDENTIFIER por tabela. Este identificador deve ser utilizado quando temos certeza absoluta que nenhum valor para o campo deve ser repetido. Para alimentar o conteúdo deste campo, devemos preferencialmente utilizar a função NEWID() que retornar um identificador no formato desde tipo.

Microsoft libera versão final do Messenger 8.0 for Mac

Sem novidades significativas desde o quarto beta do Office 2011, no começo de junho, o tão esperado Microsoft Messenger 8.0 foi liberado hoje para download.
Ele também estará incluído na suíte completa, que chega ao mercado mundial amanhã.

Com uma interface renovada e melhorias gerais em performance/estabilidade, o novo Messenger finalmente traz suporte oficial a conferências de voz e vídeo para usuários de Macs com contas Windows Live.

O Microsoft Messenger 8.0 para Mac requer o Mac OS X 10.5.8 ou superior e pesa 24MB.

A Microsoft também disponibilizou ontem o Remote Desktop Connection Client 2.1, que permite que Macs sejam conectados remotamente a PCs com Windows. O software pesa 7,7MB; mais detalhes sobre ele podem ser obtidos neste artigo de suporte da Microsoft.

Mac OS X – Terminal como Root

Logar como Root no Terminal do Mac OS X?

Muita gente ao usar o Terminal no Mac OS X de cara já tenta logar como Root e não consegue.
Ao procurar na internet sobre o assunto vai encontrar muito material leigo dizendo que não é possível fazer o mesmo.

Então, estou aqui para dizer, tem jeito sim! Basta seguir os procedimentos abaixo:

1 – No terminal faça o seguinte: $sudo passwd root



2 – Tecle enter na opção “Old password”. Digite a nova Senha desejada.



3 – Assim que a senha for alterada, basta fazer: $su e digitar a senha definida no passo anterior


No final foi executado o comando $whoami só pra exibir o usuário logado… Um abração e bom proveito

Uma lista de Utilitários (freeware) realmente úteis… XD

20110428-104811.jpg

Softwares Microsoft

Administração

Segurança

  • AccessChk – Essa ferramenta mostra a você os acessos de usuário ou de grupo a arquivos, a chaves do Registro ou a serviços do Windows.
  • AccessEnum – Essa ferramenta de segurança simples, embora muito eficiente, mostra a você quem tem que tipo de acesso a diretórios.
  • Microsoft Private Folder 1.0 – Mantenha seus arquivos longe de bisbilhoteiros em uma pasta particular e protegida por senha.(não funfa no 7)
  • Sigcheck – Despeje informações sobre a versão do arquivo e verifique se as imagens em seu sistema estão assinadas digitalmente.
  • ShareEnum – Verifique compartilhamentos de arquivos em sua rede e exiba suas configurações de segurança para corrigir falhas de segurança.
  • SDelete – Substitua com segurança seus arquivos confidenciais e libere espaço livre de arquivos excluídos.
  • Microsoft Security Compliance Manager 2.51 – Kit da Microsoft para definir linhas de base de segurança para sua empresa.
  • PortQry Command Line Port Scanner – Analise de estado das portas TCP e UDP
  • Port Reporter – Quais portas que são usadas, qual o processo está usando a porta, se o processo é um serviço
  • Port Reporter Parser Tool – Analisador de log para arquivos de log Port Reporter.
  • Promqry and PromqryUI – Detecta Sniffers Promiscuos
  • PromqryUI – Interface grafica para promqey
  • Promqry – linha de comando para detecção de sniffers no modo promiscuous.

Softwares não Microsoft

Administração

  • CubicExplorer – Gerenciador de arquivos
  • Taskbarmeters – Monitore CPU, Memoria e Disco no seu taskbar
  • FileMenu Tools – Adiciona ao menu de contexto do Windows um serie de funcionalidades.
  • Network Emulator Toolkit 32-Bits. – Simulador de uma rede remote
  • Network Emulator Toolkit 64-Bits. – Simulador de uma rede remota
  • Gizmo Drive – “Monta” VHD, ISO, BIN, CUE, NRG, CCD, MDS, MDF e roda no Win7
  • RocketDock – Barra de Tarefas personalizável no estilo MacOS.
  • CPU-Z 1.55 – Os principais detalhes quanto aos componentes do seu computador são exibidos neste pequeno programa.
  • Everest – Saiba o nome, modelo, fabricante e muitas informações de todo hardware e de vários softwares instalados no seu PC
  • Aida32 – Aida32 mostra informação detalhada sobre o hardware instalado no seu PC
  • Keyfinder – Recupera a chave do Sistema operacional.
  • UnLock-IT – Sabe aqueles arquivos que nunca consegue apagar.
  • Directory Printer – Imprime o nome dos arquivos ou das pastas

Segurança

  • Nmap – O melhor Security Scanner
  • Wireshark – Analisador de protocolos de rede com recursos de captura de dados
  • Piriform Recuva – Ferramenta para recuperar arquivos apagados.
  • Nessus: A melhor ferramenta de inventariação de vulnerabilidades com código fonte disponível
  • Snort: Um sistema de detecção de intrusões (IDS) público para as massas
  • Netcat: O canivete Suíço da rede
  • TCPDump / WinDump: A ferramenta clássica de captura de dados em redes para monitorização
  • Hping2: Um utilitário para sondar a rede, um ping dopado
  • DSniff: Uma série de ferramentas poderosas para auditoria de redes e testes de penetração
  • OpenSSH / SSH: Um modo seguro de acessar computadores remotamente
  • Network Stumbler: Inspector de rede 802.11 gratuito para Windows
  • Cain Abel: Bão d+. Faz analise de redes e senhas.
  • putty: Um excelente cliente SSH para Windows
  • Calculadora HASH: Criar hash para frases, e ou arquivos. Super completa.

Na verdade esta lista é mais para mim do que para qualquer outro usuário, como estou migrando de plataforma gostaria de deixar algo afim de não cair em esquecimento.
Abraço fraterno…

Mac OS X, 130 codec’s para Quick Time

Olá. bom dia.

Como todos sabemos, cada codec tem sua especialidade.
20110428-103853.jpg
Então muitos usuários, iniciantes ou não no mundo Mac OS da Apple, acabam vendo-se obrigado a instalar diversos programas, como:

DivX, Perian, Flip4Mac e etc…

E mesmo assim ainda continuam com problemas, como por ex, o QuickTime não processa o audio de alguns vídeos, principalmente *.wmv

Então… Pelo menos a princípio, “Seus problemas acabaram!”

Estou disponibilizando um pacote de 130 codecs para o Quick Time Player no Mac OS X, que na verdade foi obra do inenarrável camarada @f41qu3 nem mais, nem menos, que o administrador do HMBT o maior fórum brasileiro de Hackintosh.

O Procedimento de instalação é simples:

– Baixe o arquivo do endereço http://www.4shared.com/file/_o3NtP2p/QuickTime.html

– Coloque os arquivos individuais descompactados no diretório: /Library/QuickTime (/Biblioteca/QuickTime)

E pronto. Quase um K-Lite Codec Pack!

Mikrotik Winbox para Mac OS X (Intel)

Bom dia!!
Este post tem o intuito de demonstrar que não há necessidade de instalar programas que podem danificar o seu sistema (Ex: MacPorts, Darwine, etc.), caso não sejam usados corretamente para usar o Mikrotik Winbox em seu Mac Os X com processador INTEL.

Eu encontrei duas formas pela internet que realmente funcionam:
– Você pode fazer a instalação emulada, para rodar o Winbox através do Darwine, seguindo as instruções desta página wiki “Mikrotik para Mac”.
O interessante neste procedimento é que é possível fazer a instalação da aplicação tanto para Mac OS X Tiger (10.4) quanto para o Leopard (10.5) e para o Snow Leopard (10.6).

– E também a maneira que optei, utilizando o Mikrotik WinBox App pré-compilado para rodar no Mac OS X Snow Leopard (10.6), com processadores INTEL, sem o uso de nenhum outro software.
Você pode baixa-ló aqui (54.4mb), basta descompactar o arquivo e executa-ló!

Boa sorte, e um abração…

Atualizar o Windows Mobile 5.0 para o 6.1 no Palm Treo 700wx

Srs. nada melhor que após realizar tamanha façanha, compartilha-lá.

Meu celular Palm Treo 700wx, com Windows Mobile 5.0 da VIVO estava parado por algum tempo, até um amigo resolver re-habilita-ló…

Acredito que todos saibam que este telefone é CDMA, o que prende os usuários a uma certa operadora. Então após habilitado, entrei em contato com a Palm, com a Vivo e até mandei um e-mail para a Microsoft Brasil falando que gostaria de fazer um upgrade no SO; mas ninguém esclareceu se a mudança poderia ser feita.

Então corri atrás, pesquisei muito, reuni diversas opções até decidir testar a mais confiável, a qual descrevo abaixo:

Obs.: Após a atualização o SO ficou com o Idioma EN-US (Inglês), e como prefiro assim, nem procurei meios de altera-ló. Mas acredito que possa ser feito por aqui: http://www.palm.com/br/support/downloads/drivers/updater-treo750-wm6-tradutor.html

Após a atualização Não foi preciso reconfigurar: Numero do Telefone, ESN DEC, ESN HEX, MSID, SID, Channel e etc… Mas isso não quer dizer que você não deva fazer uma cópia destes dados, que estão em INICIAR/Configurações/Telefone, antes de realizar a atualização.

Requerimentos:
– Você precisará de um SD Card de no mínimo 70mb para colocar a Imagem do novo S.O.
– Carregador do telefone.

*Procedimentos:
1° Passo:
Baixar Windows Mobile 6.1.
Encontrei 3 versões na Web disponibilizadas pelas operadoras (Bell/Telus – Verizon – Sprint) todas norte-americanas. Optei por usar a da Sprint, porque ainda é a única operadora que fornece serviços CDMA nos EUA.

2° Passo: Formatar o SD Card. no formato FAT32.

3° Passo: Copiar a Imagem (NapaBoth.nb0) do W.M. 6.1 que foi baixada no 1° passo.

4° Passo: Remova a Bateria e coloque o SD Card. no Telefone.

5° Passo: Recoloque a bateria, com o botão de aumentar o Volume, na lateral esquerda do telefone, pressionado.


6° Passo: Siga a instrução na tela (Nas teclas de navegação; para Cima = Yes; para Baixo = Cancel).

7° Passo: Após iniciado a atualização, conecte seu cabo de alimentação. A ultima coisa que queremos agora é que acabe a carga da bateria enquanto é feita a atualização do SO.

8° Passo: Aguarde aproximadamente 20 minutos para que a atualização seja concluída. Para quem está acostumado a atualizar Flash sabe como é esta parte de ociosidade, mas o melhor de tudo é que há uma barra de progresso para acompanhar o andamento da atualização.

Et Voila…
Windows Mobile 6.1 instalado no Palm Treo 700wx e quase pronto para ser usado…

Apos a exibição da tela de Inicialização, será feita a calibração da tela, e o acerto da data/hora.

Opcionais:
Baixar Windows Live Messenger Mobile
(Para instalar, envie o arquivo Windows_Live_10.6.0034.0800.cab para o Celular e dê um clique em cima do mesmo, você será questionado sobre o local da instalação e só)

*Gostaria de deixar claro que, não me responsabilizo por danos na realização desta atualização, bem como tambem não ofereço suporte à mesma. Comigo não houve problemas.

ASP – Entendamos o objeto Request ServerVariables

Sr.(s)(as) a coleção ServerVariables contém várias informações enviadas do browser do cliente e informações do servidor. Estas variáveis de ambiente são sempre criadas quando uma nova página ASP é requisitada no servidor.
O uso das ServerVariables são bem úteis em várias aplicações que necessitam de informações do servidor ou do navegador do cliente.

A sintaxe para o uso dessa coleção é a mesma usada nas outras coleções do objeto request: (objeto.coleção(“elemento”))
request.ServerVariables(“variável_de_ambiente”)

Abaixo as variáveis de ambiente e sua respectiva função:

ALL_HTTP – Lista todos os headers HTTP enviados pelo browser do cliente ao servidor. Informações tais como: host origem, página de origem, características do navegador cliente, entre outras.
ALL_RAW – Retorna todas as informações enviadas por cabeçalho HTTP da página em seu estado original.
APPL_MD_PATH – Devolve o caminho lógico do arquivo ASP em questão (path do metabase).
APPL_PHYSICAL_PATH – Caminho físico do arquivo no disco. Este corresponde ao caminho lógico do APPL_MD_PATH (path do metabase).
AUTH_TYPE – Método de autenticação utilizado pelo servidor para validar usuários que solicitam um script.
AUTH_USER – Nome de usuário fornecido ao servidor em caso de não permitir acesso anônimo ao diretório. Este poderá ser o nome de um usuário de domínio ou usuário do Windows.
AUTH_PASSWORD – Senha referente ao usuário logado. Esta variável apenas se encontra disponível no modo básico de autenticação (basic authentication). Para este, é necessário o login ser feito pela caixa de diálogo ao requisitar a página.
CERT_COOKIE – ID do certificado digital do cliente.*
CERT_FLAGS – Valor de dois bits: bit 0 igual a 1 indica se o certificado do cliente está presente, bit 1 igual a 1, indica que a autoridade de certificação do certificado do cliente é inválida.*
CERT_ISSUER – Campo Issuer do certificado do cliente (O=MS, OU=IAS, CN=usuário, C=USA).*
CERT_KEYSIZE – Número de bits na chave de conexão Secure Sockets Layer – SSL. Ex.: 64, 128.*
CERT_SECRETKEYSIZE – Número de bits na chave do “Server certificate private” (chave privada).*
CERT_SERIALNUMBER – Campo Serial Number do certificado digital do cliente.*
CERT_SERVER_ISSUER – Campo Issuer do certificado do servidor.*
CERT_SERVER_SUBJECT – Campo Subject do certificado SSL do servidor.*
CERT_SUBJECT – Campo Subject do certificado do cliente.*
CONTENT_LENGTH – Tamanho em bytes, do conteúdo de uma requisição request ao servidor.
CONTENT_TYPE – Tipo de requisição enviada ao servidor pelo cliente.
GATEWAY_INTERFACE – Tipo de interface CGI usada no servidor web para manipular a solicitação (request).*
HTTP_nomeheader – Valor armazenado no header especificado. Podemos destacar os mais comuns: HTTP_ACCEPT, HTTP_ACCEPT_ENCODING, HTTP_ACCEPT_LANGUAGE, HTTP_COOKIE, HTTP_USER_AGENT, HTTP_REFERER.
HTTPS – Retorna à uma solicitação request, dizendo se o canal é seguro (ON) ou não seguro (OFF).
HTTPS_KEYSIZE – Número de bits na chave de conexão Secure Sockets Layer – SSL.*
HTTPS_SECRETKEYSIZE – Número de bits na chaver do “server certificate private”.*
HTTPS_SERVER_ISSUER – Campo Issuer do certificado do servidor.*
HTTPS_SERVER_SUBJECT – Campo subject do certificado do servidor.*
INSTANCE_ID – ID, em formato texto, para a instância do Internet Information Server (IIS).*
INSTANCE_META_PATH – Path do metabase para a instância do Internet Information Server (IIS) que responde à solicitação (request).*
LOCAL_ADDR – Retorna o endereço lógico do servidor onde foi feito a requisição (o endereço do servidor onde se encontra o arquivo chamado).
LOGON_USER – Conta do usuário usada para efetuar o logon no Windows.*
PATH_INFO – Caminho virtual do arquivo que realizou a requisição, a partir da raiz do servidor. Ex.: /arquivos/documento.asp
PATH_TRANSLATED – Versão da variável “PATH_INFO” transformado em path físico.
QUERY_STRING – Retorna as variáveis passadas por cabeçalho HTTP à uma página via QueryString.
REMOTE_ADDR – Retorna endereço IP da máquina cliente que requisitou algo ao servidor.
REMOTE_HOST – Nome do host que requisitou algo ao servidor.
REMOTE_USER – Nome da máquina que solicitou o arquivo asp ao servidor. Disponível somente se disponível.
REQUEST_METHOD – Método usado pela requisição ao servidor (GET ou POST)
SCRIPT_NAME – Path virtual do arquivo ASP requisitado ao servidor.
SERVER_NAME – Nome do servidor onde foi realizada a requisição (pode ser retornado o endereço IP, DNS alias ou nome do host).
SERVER_PORT – Retorna o número da porta onde foi realizada a requisição ao servidor.
SERVER_PORT_SECURE – Retorna 0 ou 1. Diz se a porta onde é recebida as solicitações pelo servidor é segura (1) ou não segura (0).
SERVER_PROTOCOL – Retorna nome e versão respectivamente do protocolo usado pelo servidor WEB para interpretar a solicitação.
URL – Endereço URL base requisitado (sem a QueryString) pelo browser cliente

Obs: As variáveis que HTTPS, provavelmente não poderão ser testadas ou usadas sem um ambiente seguro.

Que tenhamos todos um bom dia…

ASP – Variáveis e conversões no VB

Bom dia, senhoras e senhores…
Hoje (11/02/2010 04:49 AM), após apanhar muito com uma rotina que imprime dados de acordo com determinados intervalos de horários definidos pelo usuário, resolvi fazer este post para relembrar e até mesmo ter uma referencia para possíveis e indesejáveis problemas futuros…

Uma limitação no mínimo incômoda existente no vb (Visual Básic Script).
É que não há possibilidade de se definir o tipo da variável, ou seja, todas variáveis tem seu tipo automaticamente marcados como Variant. O tipo “Variant” verifica o tipo do valor da variável, e automaticamente define um outro tipo, por exemplo:

Dim THIAGO (declarei a variável THIAGO, e ela esta por default como Variant)

THIAGO = 100 (agora o tipo Variant detecta um valor numérico, e o transforma em Integer, um tipo para números inteiros)

THIAGO = “100” (aqui ocorre algo interessante, é definido um valor numérico, mas como texto (devido as aspas), ou seja, número o car*lho. Por tanto THIAGO passa a ser considerado do tipo String)

Apesar de não ser possível marcar “na hora” um tipo para a variável, existe a opção para converte-la no tipo desejável, pois o tipo Variant pode ser cômodo, mas em termos de performance é lento e consome mais recursos, porque o interpretador tem que analisar os dados e setar um tipo para os mesmos…

A sintaxe para converter o tipo de uma variável explicitamente é simples: TIPO(variável) abaixo seguem os tipos:

CBOOL – Boolean
CBYTE – Byte
CCUR – Currency
CDATE – Date
CDBL – Double
CINT – Integer
CLNG – Long
CSTR – String

Outro recurso interessantíssimo, e auxilia bastante por a linguagem não oferecer um debug para detectar as exceções, é poder conferir o tipo da variável, basta utilizar a função varType.
Sintaxe: varType(variável) – Que retorna os seguintes valores padrões:

0 – Empty
1 – Null
2 – Integer
3 – Long
4 – Single
5 – Double
6 – Currency
7 – Date
8 – String
9 – Object
10 – Error
11 – Boolean
12 – Variant
13 – DataObject
14 – Decimal
17 – Byte

Aprecie com moderação…