Chrome.exe com erro 0xc0000018 [Resolvido]

Agora a pouco liguei meu notebook no meu Windows 10, já que fazia uns dias que só estava usando o meu Linux e quando fui abrir meu Google Chrome, me deparei com esta mensagem abaixo:

“A aplicação não pôde ser inicializado corretamente (0xc0000018). Clique em OK para fechar o aplicativo.”

Bom, logo pensei: Bah! O Chrome corrompeu! Vou abrir o Edge para verificar isso no Google… E para a minha surpresa, também deu o mesmo erro! E adivinhem se o Internet Explorer não estava apresentando o mesmo erro?!??

Então via smartphone, achei esta solução: Fixing “the application was unable to start correctly (0xc0000018)” in Windows.

A solução para mim foi um pouco diferente do que ele comenta no post, mas foi o caminho da solução:

  1. Abra o executar e digite: regedit (e clique em OK).
  2. Confirme que você quer executar o Regedit.
  3. Navegue nas pastas até HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\­Microsoft\WindowsNT\CurrentVersion\Windo­­ws
  4. Localize a chave “APPINIT_DLLS”, dê um duplo clique e delete todos os caracteres delete esta chave.

Reiniciando o computador, consegui acesso a todos os executáveis que estavam dando erro de acesso!

Era isso pessoal! 😉

Mundo das nuvens: Swap em linux

Desde que iniciei minha vida nas nuvens (cloud computing ou cloud services), uma questão que sempre tenho que resolver, é a questão de criar a memória de swap. Os provedores de nuvem pública não deixam configurados espaços de memória swap, mas porque?

  1. A maneira mais fácil de ter uma imagem de sistema operacional para qualquer configuração de máquina
  2. Como prever um espaço em disco para swap em um disco que nem sabemos qual tamanho vai ter? 🙂

Então uma boa prática quando falamos em nuvem e ambiente Linux, é configurar a memória swap! Mas e a áreas de disco? Preciso de outro HD virtual só para isso? Mais custos? – Calma! Vamos a fatos que nos permitem criar uma área de swap de maneira fácil e prática de mover, aumentar ou diminuir (bem conceitos de nuvem)!

  • Podemos criar uma área de swap em arquivo, então, dependendo podemos usar as partições que temos disponiveis
  • Usar swap é sempre interessante, justamente em ambientes que podem sofrer “bursts” (pequenos surtos de uso intenso de memória) inesperados (outro conceito de nuvem)
  • Para um datacenter de alto desempenho (ambiente esperado em provedores de nuvem) trabalhar com área de disco ou arquivo é quase a mesma coisa
  • Alguns datacenters (eu conheço apenas a Microsoft Azure), que permitem ter um “disco temporário”, que foi concebido exatamente para fins de cache ou swap de aplicações

Ok, vamos a receita de bolo:

Deixo um conjunto de comandos que podem ser facilmente colocados em um script de inicialização.

fallocate -l 512m /tmp/swapfile
chown root:root /tmp/swapfile
chmod 600 /tmp/swapfile
mkswap /tmp/swapfile
chmod 600 /tmp/swapfile
swapon /tmp/swapfile

Lembro aqui que estou criando um arquivo swapfile em um diretório /tmp/, isso não deve ser feito em ambientes de produção (use o espaço que você tem para dados e extenda mais um pouquinho para este tipo de arquivo.

Magento e seu top menu!

Estive trabalhando em um projeto de personalização de menu do Magento e percebi uma questão muito chata dele: A documentação oficial é muito fraca! 🙁

Com isso tive que pesquisar na internet para entender os objetos que o Magento me libera para customizar e foi uma briga feia!! Até que achei uma explicação muito simples no link Generate Magento top menu navigation html [$_menu = $this->getHtml(‘level-top’)].

Depois de ler e fazer meus testes, resumi o código para remover a linha <?php $_menu = $this->getHtml('level-top') ?> e adicionar:

<?php

$obj = new Mage_Catalog_Block_Navigation();
$storeCategories = $obj->getStoreCategories();

$_menu = '';

foreach ($storeCategories as $_category) {
    $_menu .= '<li><a href="'. $obj->getCategoryUrl($_category) .'">' . $_category->getName() . '</a>' . "n";
    $categoryChildren = $_category->getChildren();
    if($categoryChildren->count()) {
        $_menu .= '<ul>' . "n";
        foreach($categoryChildren as $_categoryChild) {
            $_categoryChildModel = Mage::getModel('catalog/category')->load($_categoryChild->getId());
            $categoryGrandchildren=$_categoryChild->getChildren();
            $_menu .= '<li><a href="' . $_categoryChildModel->getUrl() . '">' . $_categoryChild->getName() . '</a></li>' . "n";
            if($categoryGrandchildren->count()) {
                $_menu .= '<ul>' . "n";
                $_menu .= '<ul>' . "n";
                foreach($categoryGrandchildren as $_categoryGrandchild) {
                    $_categoryGrandchildModel = Mage::getModel('catalog/category')->load($_categoryGrandchild->getId());
                    $_menu .= '<li><a href="' . $_categoryGrandchildModel->getUrl() . '">' .  $_categoryGrandchild->getName() . '</a></li>' . "n";
                }
                $_menu .= '</ul>' . "n";
            }
        }
        $_menu .= '</ul>' . "n";
    }
    $_menu .= '</li>' . "n";
}

?>

Depois foi só personalizar a realidade do cliente! 😀

Fazendo um “tail” em arquivos no Windows [PowerShell]

Sempre que estou usando meu ambiente em Windows, acho um problema a forma de fazer um “tail” nos arquivos, para ler em tempo de inserção (normalmente arquivos de log).

Eis que hoje me deparo com um artigo muito legal que é 13 Ways to Tail a Log File on Windows & Linux. No artigo mostra diversas formas de fazer a leitura de arquivos tanto no Windows, quando no Linux, mas a que achei mais simples, fácil e sem requerer instalações é a usando o PowerShell:

Get-Content arquivo.log –Wait

Se quiser fazer filtros, podemos usar outro comando concatenado chamado where:

Get-Content myTestLog.log -wait | where { $_ -match "WARNING" }

Barbadinha né? 😉

Cansei de esperar: Atualização do Moto X (2013 – 1ª Geração) para o Lollipop!

E então, até hoje não vi atualizações em meu celular, o Moto X de primeira geração, para o Lolipop. Faz um tempo que foi liberado o 5.0.1 para atualizar e nada do meu telefone avisar que esta disponivel. 🙁 Agora foi liberado em abril uma atualização nova, que leva o 5.1 aos Moto X e novamente, nada de aviso! Então, cansado de esperar a boa vontade da Motorola em liberar as atualizações para a minha versão, corri atras de onde encontrar!
Continue lendo “Cansei de esperar: Atualização do Moto X (2013 – 1ª Geração) para o Lollipop!”

Instalando Ubuntu Desktop 14.04 no Hyper-V (2-gen)

Depois de reinstalar o meu Windows 8.1 Pro, e reinstalar o Hyper-V nele, me perguntei se precisaria instalar o Virtualbox para fazer uma estação de trabalho Ubuntu. Depois de dar uma verificada na internet, achei dois artigos super interessantes que me ajudou a instalar em modo “Geração 2” das Maquinas Virtuais no Hyper-V. Os artigos foram: Ubuntu 14.04 in a Generation 2 VM e Changing Ubuntu Screen Resolution in a Hyper-V VM.

Então o que fiz para instalar?

  1. Criei uma placa de rede interna, pois como uso meu note e ele usa uma placa de rede sem fio, é antigo o problema do Hyper-V com placas de rede externa, e compartilhei a internet da placa de rede sem fio.
  2. Configurei também o uso de mais de 1 processador para agilizar a performance.
  3. Criei uma VM de 2ª geração e desativei da firmware o boot seguro e coloquei a ISO do Ubuntu para instalar.
  4. Depois de instalado, editei o arquivo /etc/default/grub e na linha que diz GRUB_CMDLINE_LINUX_DEFAULT, adicionei video=hyperv_fb:1366×768.
  5. Coloquei a VM do ubuntu em tela cheia.

Depois disso fiz uns testes, mas senti levemente lento, comparado ao uso no Virtualbox. Mas para um uso básico, não vejo problemas no uso! Aprovado! 😀

Instalando Sublime Text 3 no Ubuntu

Para quem desenvolve, acabam descobrindo que um dos melhores editores para código é o Sublime Text. Eu levei um bom tempo pra perceber mas quando o fiz, não troquei mais! Agora, a instalação dele no Ubuntu pode ser um processo chato pra uns, principalmente porque ele não faz parte dos pacotes de instalação padrão do Ubuntu e nem no repositório “non-free” deles!

Então encontrei no Launchpad um repositório APT para o Sublime Text!

$ sudo add-apt-repository ppa:webupd8team/sublime-text-3
$ sudo apt-get update
$ sudo apt-get install sublime-text-installer

Pronto! Sublime Text instalado em seu Ubuntu! 😀

CodeIgniter: Roteamentos Inteligentes

O roteamento inteligente permite criar URLs personalizadas. Com isso, a URL padrão do Codeigniter pode ser customizada. Cuidado extra é que no default controller deve ter um método para implementar o erro de not found (404). No exemplo dos arquivos, ele simula as URLs encontradas em um blog:

  • http://{blog}/{ano}/{mes}/{dia}/{slug-noticia}
  • http://{blog}/{página}

[project-root]/application/config/routes.php

[project-root]/application/controller/defaultController.php

CodeIgniter 3 na Azure Websites

Estou usando faz um mês, a Microsoft Azure para meus projetos e estou curtindo bastante! Então, fui começar um projeto usando CodeIgniter 3 e me peguei em uns problemas usando ambiente PHP no IIS da Azure Websites: Conexão com o banco de dados (SQL Azure) e redirecionamento de “URL Amigáveis“. Continue lendo “CodeIgniter 3 na Azure Websites”

Transformando seu notebook em um chromebook!

Em Dezembro, quando comecei minhas férias do trabalho, iniciei com a cabeça cheia de ideias! E uma delas foi converter um dos meus notebooks para um chromebook! Porque? Atualmente uso um Ubuntu Linux neste notebook e analisando o meu uso, acredito que poderia portar para um sistema operacional baseado em nuvem! Fora que o desafio de converter um note em um Chromebook foi o que também o meu motivador! Hehehe!

Continue lendo “Transformando seu notebook em um chromebook!”