Pegar o elemento script que está sendo escrito

Em um script eu precisava pegar o elemento pai do script que estava escrevendo (parent do elemento script atual), surgiu uma dúvida então de como selecionar o script que eu estava escrevendo e é o que vou compartilhar neste post.

Como o javascript é executado em tempo de carregamento, o último elemento script será o que você está trabalhando, para pegar este elemento é só fazer o seguinte:

var scripts = document.getElementsByTagName( 'script' );
var thisScriptTag = scripts[ scripts.length - 1 ];

A explicação do código:

Primeiro pegamos todos os elementos script da página – como ela só foi carrega até o momento do código, na verdade pegamos todos os elementos script carregados até o momento. A segunda linha pega a última tag script carregada até o momento, que sempre será a que estamos trabalhando.

Com o elemento selecionado é só navegar no DOM da forma que você achar melhor!

Expressão Regular com variável no Javascript

Nesta sábado estava com um problema para fazer uma magia negra com NodeJS, precisava manipular um texto que seria publicado com código parecido com BBCode para identificar a posição de elementos (parecidos com widgets) que deveriam ser substituídos de acordo com seu tipo.

Para isso, precisava identificar o padrão [#tipo_id], como poderiam ser vários tipos de componentes (e como sempre o sistema pode crescer e novos tipos serem adicionados) a melhor forma de trabalhar com isso seria uma expressão regular com uma variável.

Antes eu tinha o seguinte:

var er = new RegExp(/\[#img_.*?\]/g);
var results = minhastring.match(er);

O que eu precisava era que o #img fosse uma variável para que esta rotina de busca e replace pudesse ser transformada em uma função parametrizada, o resultado final:

var er = new RegExp('\\['+ busca +'.*?\\]', 'g');

A sugestão do @knorrium em uma consultoria rápida pelo Twitter e sem saber exatamente o que eu precisava foi o uso do eval(), testei e funcionou, mas esta modo diferente de uso do new RegExp com dois parâmetros string que o @manuWell sugeriu ficou mais elegante. 

E você, como faria uma Regexp com variável no javascript?

Comparativo entre o Amazon EC2 e o Cloud Locaweb

Depois de alguns problemas com a Locaweb comecei a pesquisar alternativas de hosting e trocar idéias com outros desenvolvedores usando o Twitter (@gserrano). O que eu procurava:


  • Gerenciar o servidor
  • Estabilidade e disponibilidade (preferência por Cloud)
  • Preferencia por SO Ubuntu
  • Gerenciar o servidor com liberdade de instalação / atualização de pacotes
  • Facilidade para aumentar espaço / ram / banda com facilidade (Cloud)

Vou escrever aqui um comporativo opinativo sobre minha experiência com os servidores da Locaweb e da Amazon.

1. Servidor e disponibilidade

Por muito tempo fui cliente da Locaweb: hospedagem normal, mudei para uma revenda e posteriormente contratei um cloud gerenciado pelo cliente (Windows) e um Cloud Linux gerenciado pelo cliente.

Apesar de alguns problemas eu gostava da Locaweb, mas a indisponibilidade e aparente descaso com os problemas que se tornaram frequentes me fizeram passar a ser um cliente totalmente insatisfeito, hoje não recomendo a Locaweb.

O último período de indisponibilidade que presenciei enquanto era cliente com a Locaweb coincidiu com o final de semana de lançamento do Eu Compraria! Camisetas –  foi a gota da água. Promoções planejadas, tweets, links no Facebook, divulgação anterior, tudo com a data marcada e anunciada… junto com a indisponibilidade da Locaweb.

Como eu fiquei no lançamento da nova loja…

Foi um final de semana para eu esquercer.

A Locaweb deu mil desculpas: oscilação de energia, gerador que não funcionou porque a energia apenas oscilou e não foi cortada. Só faltou um Tsunami para tornar a situação tão trágica quanto ao Japão.

Estou a pouco mais de 3 meses com o EC2 da Amazon, ainda é cedo para avaliar. Mas o uptime até agora foi garantido, o servidor é o que eu esperava, os cuidados com segurança de acesso são melhores (chave ao invés de apenas senha). 

A velocidade de resposta dos dois servidores é bem parecida, ao meu ver neste comparativo não seria nenhum fato decisivo na escolha.

No quesito disponibilidade neste curto período que estou na Amazon ela se mostrou muito melhor que a Locaweb, quanto a performance só tive uma vez problema com a Locaweb que não era referente a aplicação ou acessos, como passei muito mais tempo considero normal. 

Cloud Locaweb: nada a reclamar da performance, o uptime se tornou um problema e a desculpa nos últimos meses que fui cliente sempre era de alguma empresa que fornecia os links, ou problemas de DNS (não cumpriam o SLA e diziam que a culpa não era deles).

EC2: nenhuma reclamação até agora, uptime total até o momento e nenhuma reclamação de performance.

2. Cloud

A Locaweb vende sua hospedagem como Cloud mas você não tem a liberdade que um Cloud deveria oferecer.

Ao meu ver o Cloud da Locaweb não oferece vantagem sobre nenhum VPS. Não posso aproveitar o que o Cloud oferece de melhor: alta disponibilidade (vide meus relatos nos parágrafos acima) e facilidade para aumentar ou reduzir hardware quando necessário.

Se preciso de mais provessamento ou espaço com a Locaweb eu preciso contratar outro cloud e se os contratos continuam os mesmos, você não pode contratar por uma semana ou um mês apenas. 

Com o Amazon EC2 eu vi o que é realmente gerenciar um servidor ou uma rede "na nuvem". Lançar uma instância (novo servidor) é mais fácil que tomar doce de criança, existem várias opções de Sistema Operacional e máquinas pré-configuradas (e posso salvar uma pré configuração se vou usar com frequência).

O servidor é cobrado por hora – portanto se preciso de processamento ou armazenamento para uma tarefa ou período específico (um hot-site, um advergame, etc) eu não preciso fazer um contrato que me prenda, lanço quantos servidores forem necessários para a operação em questão (e posso aumentar e diminuir as configurações conforme for necessário) e depois desligo tudo, cortando a geração de qualquer custo adicional.

Cloud Locaweb: não oferece as vantagens que um Cloud deveria oferecer, é igual um VPS mas carrega o nome marketeiro "Cloud".

EC2: fantástico.

3. Preços

O plano do Amazon EC2 ganha com folga no quesito economia. Peguei um plano do EC2 no qual paguei uma taxa para 1 ano de desconto na hora do servidor, além desta taxa minha conta é de aproximadamente 30 dólares mensais.

Cloud Locaweb: na Locaweb era de aproximadamente R$1.500,00 / ano.

EC2:  O custo anual no EC2 ficou em torno de $600 (incluindo o contrato anual para desconto/hora e todo o custo mensal),  uma redução de aproximadamente 40% nos custos.

 

4. Suporte

Aqui é um ponto que pode influenciar algumas pessoas, com a Locaweb eu tinha uma relação razoável – abria um chamado, se ele não era resolvido com agilidade eu xingava muito no Twitter e logo a Locaweb entrava em contato para resolver. Feio, mas era o meu servidor que estava fora, né?

Ainda não utilizei o suporte do Amazon, mas ele será em inglês (assim como todos os painés), então se você não tem facilidade com inglês vai estudar meu filho pode ter dificuldades para entender o painel ou se comunicar com o suporte do EC2.

Locaweb: suporte atencioso e normalmente esclarecedor, apesar de as vezes não conseguir resolver o problema (falando da rede, das empresas que fornecem links, culpando os provedores de acesso a internet no brasil, etc) sempre tentava atuar no problema.

EC2: não testado.

 

É isso, se quiserem relatar suas experiências nos comentários elas serão bem vindas!

O último período de indisponibilidade que presenciei enquanto era cliente com a Locaweb coincidiu com o final de semana de lançamento do Eu Compraria! Camisetas – e foi a gota da água. Promoções planejadas, tweets, links no Facebook, divulgação anterior, tudo com a data marcada e a Locaweb me fez passar um infernal final de semana correndo atrás de colocar a loja no ar – e deram mil desculpas, oscilação de energia, gerador que não funcionou porque a energia apenas oscilou e não foi cortada, só faltou um Tsunami na lista de desculpas.
 
Comecei a procurar alternativas e 

Como instalar o nodeJs no Ubuntu

Estou a algum tempo estudando e desenvolvendo algumas coisas com Node.js aqui no iG, resolvi compartilhar com vocês a configuração e instalação dos pacotes do Node no Ubuntu.

Instalando o NodeJS com git

Agora o NodeJS tem um pacote para instalação via apt-get, então não é necessário realizar o processo por Git (mas ainda funciona).

Para instalar o último pacote que está no git, você precisará de alguns pacotes. Se eles não estiverem instalados instale:

sudo apt-get install g++ curl libssl-dev apache2-utils
sudo apt-get install git-core

Agora vamos fazer o clone do Node para instalação:

git clone git://github.com/ry/node.git
cd node
./configure
make
sudo make install

Instalando o NodeJS com o gerenciador de pacote Ubuntu

Agora o NodeJS tem um pacote no Ubuntu, então não é necessário fazer o processo anterior (baixar o pacote do Git e instalar), o processo ficou mais simples:

sudo apt-get install nodejs node

Atenção: se você precisa de alguma versão específica do Node, precisa instalar através do processo de pegar do repositório.

Com isso o node vai ser instalado no seu Ubuntu, você pode verificar a instalação digitando:

node --version

 

Instalando o NPM

O NPM é um gerenciador de pacotes para o Node, sua instalação é bastante simples:

curl http://npmjs.org/install.sh | sh

E para instalar um pacote com o npm você só precisa digitar no terminal "npm nome_do_pacote install", no exemplo abaixo irei instalar o express:

npm install express

Para fazer seu nodejs funcionar com o MongoDB estou usando o Mongoose, a instação também é com o npm:

 

npm install mongoose

Pronto, agora você tem o NodeJS rodando, dúvidas e sugestões nos comentários! 🙂

Upgrade Ubuntu – The following packages have been kept back

Quando fui realizar as últimas atualizações do Ubuntu Server do And After através do sudo apt-get upgrade recebi a seguinte mensagem:

The following packages have been kept back

Fui pesquisar e descobri que um pacote pode retornar se ele for fazer alguma atualização do sistema, e era exatamente o que estava acontecendo.

Gerei um backup do sistema (recomendo que tu faça isso antes de cada atualização que tem alguma chande de dar problema) e para forçar a atualização dos pacotes que alterar o sistema utilize o aptitude no lugar do apt-get, o comando vai ficar assim:

sudo aptitude dist-upgrade

Pronto, Ubuntu Server com todos os pacotes atualizados e nada quebrado. 🙂