Recent posts

Instalar WordPress no Cloud Server Pro da Locaweb – Linux

wordpress-logo

São alguns passos simples, mas como não encontrei nenhum tutorial na internet com todos eles, lá vai.
Logicamente, primeiro de tudo, contrate o Cloud Server Pro no site da Locaweb. Eu aconselho sempre pegar a menor máquina possível. 512mb de RAM, em alguma distribuição Linux que vc se sinta a vontade de trabalhar.

Aqui estou com um Ubuntu.

Acesso ssh

A senha padrão do usuário root ssh do teu servidor é a mesma do painel de controle, que vc configurou para o seu usuário durante a contratação.

Abra o seu terminal e digite:

$ ssh root@cpro9999.publiccloud.com.br

Sendo o 9999, o número da sua máquina que vc encontra no painel do seu cloud.
Coloque a senha e pronto, vc está logado na máquina.

Alias de comando no terminal

vim ~/.bash_profile

Eu uso sempre:

alias la="ls -la"

depois basta recarregar

source ~/.bash_profile 

Instalando dependências

Essa parte é bem simples.

$ apt-get update
$ apt-get dist-upgrade
$ apt-get install apache2 mysql-server mysql-client php5 php5-mysql php5-cli libapache2-mod-php5 vim

Ativando o php

Se por algum motivo o php não subir automaticamente após a instalação dos pacotes, entre no apache e ative:

$ cd /etc/apache2/mods-enabled
$ a2enmod php5

Instalando o WordPress

Quanto mais coisas pudermos fazer direto no cloud melhor, pois a conexão lá é violenta de rápida.
Para baixar o wp direto no servidor, basta fazer um wget

Direto na pasta /usr/share faça o download da última versão:

$ wget http://wordpress.org/latest.zip

Se não tiver instalado, instale o unzip

$ apt-get install unzip

E ai abra o zip:

$ unzip latest.zip

Ao extrair, a pasta wordpress/ será criada. Agora aponte o root do servidor para ela:

$ vim /etc/apache2/sites-available/default

Edite o DocumentRoot para

DocumentRoot /usr/share/wordpress

Criando o banco

Crie o banco no terminal:

$ mysql -u root -pSENHAROOT
mysql> create database wordpress;

Acesse no seu browser o IP do seu servidor(vc encontra ele pelo painel do cloud).
Basta rodar normalmente a instalação do wp. Caso o instalador automático não consiga criar o arquivo wp-config.php, volte lá via terminal e crie, dentro de usr/share/wordpress

$ vim wp-config.php

Pronto, tudo instalado e rodando. Falta apenas fazer upload do seu tema.

Instalando um servidor ftp

Este artigo é bastante bom:
http://www.vivaolinux.com.br/artigo/Instalando-e-configurando-um-servidor-FTP/

$ apt-get install proftpd

Eu confirei o name server do ftp como o endereço do cloud: cpro9999.publiccloud.com.br

Assim que terminar de instalar, crie um usuário

$ adduser wp

Basta seguir as instruções.

Altere o usuário da pasta themes, que fica dentro de wp-content/

chown wp:wp themes

Enviando o tema via ftp

Terminado isso, abra outra aba do seu terminal e permaneça local na sua máquina.
Navegue até encontrar a pasta em que está o seu tema zipado, pois ficará mais simples enviar tudo em um só comando.

Localmente digite:

$ ftp wp@cpro9999.publiccloud.com.br
ftp> ls
ftp> cd /usr/share/wordpress/wp-content/themes

Assim que eu conecto em algum ftp via terminal, eu sempre mando um ls, apenas para o servidor aceitar minha conexão e ficar rápido.

Para verificar em qual diretório vc está local, basta usar lcd, com 2 tabs, será listado o diretório atual local em que vc está.

Envie o tema:

ftp> put seu_tema.zip seu_tema.zip

Volte para a aba ssh, extraia o tema do zip e apague o zip

$ unzip seu_tema.zip
$ rm seu_tema.zip

Ative seu tema no painel do WordPress, e parabéns!! está no ar.

Plugin jQuery em elemento criado dinamicamente com javascript – append jQuery

Eu já postei como utilizar a função .live() do jQuery, que inclusive foi removida na nova versão da biblioteca(para usarmos o método .on() no estilo delegate), já mostrei como instanciar plugins depois de carregar um elemento com ajax.

Mas e como podemos fazer para chamar/ativar um plugin, em elementos criados dinamicamente, com o append ?

O problema – não funciona em elementos criados com append

<!doctype html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>


	<link rel="stylesheet" href="colorbox.css" />

	<script src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
	<script src="jquery.colorbox.js"></script>
<script>
jQuery(document).ready(function(){
	var $add = jQuery('#add'),
		$insert = jQuery('#insert');

	jQuery('a').colorbox();

	$add.on('click', function(){
		$insert.append('<a href="images/1.jpg">colorbox - nao funciona</a><br />');
	});
});
</script>
</head>
<body>
	<input type="button" name="add" id="add" value="add" />
	<div id="insert">
		<a href="images/1.jpg">colorbox</a><br />
	</div><!-- #insert -->
</body>
</html>

O motivo do colorbox só funcionar na tag <a> que já existe no documento, é pq nós atrelamos o plugin apenas no carregamento da página.
Logo, só funciona nos elementos que já existiam no instante em que a página terminou de carregar(evento disparado pelo dom.ready).

A solução – instanciar o plugin novamente cada vez que inserir um elemento

Então, para que o colorbox funcione nos demais elementos, precisamos atrelar o plugin nestes elementos, assim que eles forem inseridos na página, ou seja, após o append.

$add.on('click', function(){
	$insert.append('<a href="images/1.jpg">colorbox</a><br />');
	$insert.find('a').colorbox();
});

Simples assim. Note a linha abaixo do append. Estou chamando o plugin nos elementos que foram criados, logo após criar eles.

Ai sim, tudo funciona perfeitamente. O princípio é o mesmo para qualquer plugin que você quiser usar.

Código da Solução

<!doctype html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>


	<link rel="stylesheet" href="colorbox.css" />

	<script src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
	<script src="jquery.colorbox.js"></script>
<script>
jQuery(document).ready(function(){
	var $add = jQuery('#add'),
		$insert = jQuery('#insert');

	$add.on('click', function(){
		$insert.append('<a href="images/1.jpg">colorbox</a><br />');
		$insert.find('a').colorbox();
	});
});
</script>
</head>
<body>
	<input type="button" name="add" id="add" value="add" />
	<div id="insert">
		<a href="images/1.jpg">colorbox</a><br />
	</div><!-- #insert -->
</body>
</html>

É isso galera, comentem caso usem. =)

Review: Tableless Conf 2013

Hoje dia 16 de maio de 2013, está acontecendo o segundo Tableless Conf.

tablessconf

Palestras

bbui.js

com Fellyph Cintra

Essa palestra provavelmente patrocinada falando sobre o Black Berry e um framework de criação de app nativos, o bbui.js.
Eu achei fraca, ficou muito tempo só na motivação, o app demonstrado não fazia “nada de mais”, e os pontos fracos do fw é o xml de configuração, a forma esquisita de fazer includes, e a marcação divmaniaca demonstrada, apesar de ser possível escrever sua própria marcação.

Acessibilidade e Mobile

com Horácio Soares

Ótima palestra! o Horácio manda muito bem. Poucos palestrantes conseguem fazer o motivacional com contexto, no meio da palestra, enqnto faz piadas e passa o conteúdo, e não nos fazendo dormir no início da palestra.
Ele citou que desenvolver mobile é um problema e uma solução. Um problema pois temos que nos preocupar em desenvolver para telas pequenas, com pouca bateria, com internet lenta, com acessibilidade ruim, e uma solução pois priorizamos o conteudo e fazemos projetos mais funcionais e com melhor usabilidade.

Isso para lembrar que todos nós precisamos de acessibilidade e usabilidade, e não apenas pessoas com defiência.

tweet

Devemos pensar antes de usar. Carousel e Slider não vendem, atrapalham o usuário, e ninguém gosta de captcha. Pesquisar com o usuário em vez de copiar e colar soluções que vimos em outros lugares.

Firefox OS

por Clauber Stipkovic

Antes da palestra o Diego Eis sorteou alguns livros e uma caneca. Tranquilo, ocorreu tudo bem.
“A web é a plataforma”.
A palestra começa com um histórico da web e web mobile, e introdução de como desenvolver para firefox os. O futuro realmente parece ser escrevermos aplicativos nativos para os devices com HTML, CSS e JS.

Um amigo do trabalho fez um Hello World no Firefox OS:
hello world firefox os/ por Marco Bruno

HTML5, CSS3 e Padrões Web

por Bernard de Luna

Aquela palestra que conhecemos sobre os projetos legais e sexys em css, só que mais focado em frontend e mostrando código ao vivo.
Os tweets durante a palestra mostram bem como ela foi

ber

Defina bom

por René de Paula
Essa palestra é provocativa para nos fazer pensar, refletir.

Localização

Perto do Guaraci Silveira(escola técnica), e do Shopping Eldorado. Bem localizado, tem opções próximas de almoço, e o acesso até que é fácil apesar de ser complicado achar lugar para estacionar na rua.

Credenciamento

Bem feito, sem filas e com muuuito tempo para ser feito. Cheguei as 8h e já estava sendo feito, e o evento iria começar apenas as 9h30.

Almoço

Será por conta própria, acho que vou num habbibs que tem ali.

Internet

Difícil conectar na rede, mas depois funciona bem. Desconectou meu iphone e não consegui logar mais nela, mas no note por enquanto está tudo ok.

Coffee Break

Vamos ver quando chegar a hora.

Fundamentos de SO – 1º Revisão NP2

NP2

O professor irá passar duas lista de exercícios com foco na NP2, sendo assim, segue abaixo a primeira lista:

Primeira lista de Exercicios para NP2

  1. 1) Porque o espaço de endereço de um processo é dividido em várias regiões?

    Resp. Cada região de um espaço comunmente contém informações que são acessadas de um modo similar. Por exemplo, a maioria dos processos lê e executa instruções, mas não modifica sua instruções.
    Processos lêem e escrevem dados em qualquer ordem. Separar o espaço de endereço de um processo em diferentes regiões habilita o S.O. a impor essas regras.

  2. 2) Os termos, “processo” e “programas” são sinônimos?

    Resp. Não necessariamente. Um processo é um programa em execução. Um programa é uma entidade conceitual.

  3. 3) A qualquer dado instante somente um processo pode executar instruções em um computador?

    Resp. Isso depende do tipo de processo. Um computador multiprocessador pode ter tantos processos em execução quantos são os processadores, pois cada processador executa apenas uma tarefa por vez.

  4. 4) Um processo entra em estado de bloqueado quando está esperando que um evento ocorra. Cite diversos eventos que podem fazer um processo entrar no estado de bloqueado.

    Resp. Um processo pode entrar em estado de bloqueio se emitir uma requisição de dados localizados em um dispositivo de alta latência, tal como um disco rígido, ou requisição de um recurso que esta alocado a um outro processo e indisponível naquele momento(por exemplo, uma impressora). Um processo também pode ficar bloqueado até que ocorra um evento, como a utilização do teclado ou mouse.

  5. 5) Como o S.O. impede que um processo monopolize um processador?

    Resp. Um relógio de interrupção gera uma interrupção após um ciclo de tempo especifico, e o S.O. despacha um outro processo para executar. O processo interrompido executará novamente novamente quando alcançar o topo da lista de prontos e um processador fica disponível novamente.

  6. 6) Qual a diferença entre processos que estão acordados e processos que estão adormecidos?

    Resp. Um processo acordado está disputando ativamente um processador; Um processo adormecido não pode usar um processador

  7. 7) Por que é vantajoso criar uma hierarquia de processo em vez de uma simples lista?

    Resp. Uma hierarquia de processos permite o S.O. controlar os relacionamentos pai/filho entre processos, o que significa operações como localizar todos os processos filho de um determinado processo pai quando esse é finalizado.

  8. 8) Por que um processo deve usar o IPC (Comunicador entre processos) para compartilhar dados com outros processos?

    Resp. O S.O. não permite que processo não relacionados compartilhem o segmento de dados de seus espaços de memória, ou seja, os dados armazenados por um processos são inacessíveis a processos não relacionados. Portanto, o S.O. deve fornecer algum mecanismo que torne os dados de um processo disponível para outro.

Pronto! Agora só esperar o próximo post.

The post Fundamentos de SO – 1º Revisão NP2 appeared first on Desenvolvedor Front-End - Marco Bruno.

Mudando permalink do wordpress

É.. eu não sabia que o wordpress faz automaticamente..

Mas se por um acaso não fizer ou vc precisar fazer manualmente, o script abaixo lê todos os posts publicados, e escreve a regra htaccess para redicionar do formato year/day/month/post_name para category/post_name

Chega de enrolação, e lá vai o código:

<?php
ini_set('display_errors', 1);

$mysqli = new mysqli('localhost', 'usuario', 'senha', 'banco');

$sql = "SELECT ID, post_name, DATE_FORMAT(post_date, '%Y/%m/%d') AS data FROM wp_posts 
		WHERE
			 post_type = 'post' AND 
			 post_status = 'publish'
		";

$query = $mysqli->query($sql);


while( $dados = $query->fetch_object() ) {

	$sql = "SELECT * FROM `wp_term_taxonomy` 
			JOIN wp_terms 
				ON wp_terms.term_id = `wp_term_taxonomy`.term_taxonomy_id 
			WHERE term_taxonomy_id 
				IN (
					SELECT term_taxonomy_id  
					FROM  `wp_term_relationships` 
					WHERE object_id = {$dados->ID}
					) 
				AND taxonomy = 'category'
			ORDER BY name ASC
			LIMIT 1";

	$query_cat = $mysqli->query( $sql );
	$dados_cat = $query_cat->fetch_object();


	$url = $dados->data.'/'.$dados->post_name.'/';
	$to = $dados_cat->slug.'/'.$dados->post_name.'/';


	echo 'RewriteRule ^'.$url.'$', ' ', $to ,' [NC,R=301,L]<br />';
}

A saída é neste formato:

RewriteRule ^2009/08/14/verificar-se-usuario-ja-existe-no-banco/$ ajax/verificar-se-usuario-ja-existe-no-banco/ [NC,R=301,L]