BitTorrent: a força do compartilhamento P2P


Recentemente os EUA indiciaram criminalmente Artem Vaulin, ucraniano de 30 anos, que é apontado como fundador do Kickass Torrent e principal mantenedor do 2º site mais conhecido do ramo de compartilhamento de arquivos. A tecnologia BitTorrent (em português “torrente de bits”) é dos mais populares recursos usados para a troca de conteúdos digitais na internet, e tem atraído ininterruptamente a atenção dos órgãos de policiamento da pirataria na rede. Mas se você ainda está com dúvida acerca de como esse outros casos polêmicos envolvendo o BitTorrent surgem nós vamos dar uma ajudinha. Continue lendo →

Remover caractere nulo da codificação ASCII


Galera,

Como é bom resolver problemas que parecem insolúveis. Esbarrei em um caractere que se passava por invisível aos olhos ao vasculhar um arquivo CSV. Só conseguia ver direito quando abria o arquivo com o Gedit, mas não conseguia substituir o caractere pois ocorria inúmeras vezes em um arquivo gigantesco. Até que consegui descobrir que o símbolo que seu símbolo “\00” representava nulo na codificação ASCII. Foi aqui que um maravilho SED deu conta do recado:

sed 's/\x0//g' -i nome_do_arquivo.txt

Esse aí passou!

Open365: o LibreOffice das Nuvens


Há uma semana entrou em fase beta o serviço Open365, que possibilita a edição de textos online através de uma versão do Libreoffice portado para páginas de internet. Desenvolvido pela EyeOS o serviço conta com toda a suite de aplicativos muito conhecidos no universo do software livre: Writer, Calc e Impress; com interface totalmente integrada ao navegador web. Para usar o recurso basta criar uma conta no site https://cloud.open365.io e de quebra levar 20 gigas de espaço na nuvem para armazenar, compartilhar e abrir seus documentos em diversos formatos: odt, odp, ods, docx, xlsx, pptx etc. Continue lendo →

Jide corrige violação de licenças livres no Remix OS


Recentemente a Jide Technology foi acusada de desreipeitar as licenças GPL e Apache com seu Remix OS e, em resposta, ela veio a público anunciar que estaria trabalhando na correção desse problema. A denúncia foi movida por usuários experientes que, ao ver o software de implantação do sistema nos pendrives encontrou uma semelhança incrível com o Unetbootin. Outra violação foi não fazer as devidas referências e a liberação dos códigos do projeto Android-x86, esse sob licença Apache e, claro, do kernel Linux, pois o Android é baseado no sistema do pinguim, que está sob GPL. Agora, a Jide veio a público novamente com explicações sobre o ocorrido e algumas desculpas inacreditáveis sobre o erro. Mas segundo algumas fontes a nova versão, do dia 23 de janeiro de 2016, já traz as devidas alterações. Vamos conferir! Continue lendo →

Remix OS 2.0 no HD Interno (Dual Boot)


Logo que foi lançado, o Remix OS adquiriu muitos novos usúarios, mas todos devem ter se perguntado por que não era possível instalar esse sistema no HD interno, podendo assim aumentar sua capacidade (vejam a imagem abaixo) e instalá-lo paralalamente a outros sistemas, o que é conhecido como “dual boot”. Continue lendo →

Remix OS: da expectativa à experiência


Nesta semana começou a ser compartilhado o sistema que pode ser o primeiro grande sucesso do Android em desktops: o Remix OS 2.0. A adaptação feita pela chinesa Jide Technology já é utilizada no Remix Mini, um computador de baixo custo (em torno de R$ 600,00 no Mercado Livre) lançado em 2015 e faz parte de uma evolução natural dos esforços do grupo de ex-engenheiros da Google, criadores do tablet Star Jide Remix. Como prometido na CES 2016 a empresa disponibilizou o sistema gratuitamente no dia 12 de janeiro, que agora pode ser instalado em um pendrive ou HD portátil e usado nos computadores via USB. Continue lendo →

Separar arquivo de texto grande em outros menores usando delimitador


Peguei um grande arquivo (12 GB) de texto com um dump do posgresql e precisava analisar separadamente algumas tabelas antes de rodar a recuperação delas. Portanto, procurei uma forma de separar cada uma das tabelas em arquivos separados e encontrei no Cantinho do Shell. Usando o comando “csplit” com a opção de separação por delimitador. Veja como ficou meu comando:

csplit -k -f tabela base_de_dados "/-- Data/" {10000}

Nesse comando usei o termo “— Data” como delimitador para gerar tantos arquivos quanto for possível com os títulos “tabela00”, “tabela01”, “tabela02” etc. Desse modo poderei conferir e utilizar os arquivos separadamente.

Obs.: Informe entre as “{}” um número que você terá certeza que será maior que a quantidade de arquivos gerados.

Instalando o driver VGA SIS no Elementary OS (Linux/Ubuntu)


Instalei o Elementary OS em um notebook que usa VGA SiS. Como sei que o Elementary OS tem como base o Ubuntu/Linux pesquisei e encontrei a seguinte dica no blog BLENO LOPES, AQUI JAZ!. Confira os passos que ele indicou e acesse-os originalmente através do link indicado no final:

1. Identifique o dispositivo:

lspci | grep VGA

2. Baixando os pacotes necessários:

sudo apt-get install git xorg-dev mesa-common-dev libdrm-dev libtool build-essential

3. Criando o repositório do driver:

sudo git clone git://github.com/hellnest/xf86-video-sismedia-0.9.1.git

4. Acessando o repositório:

cd xf86-video-sismedia-0.9.1

5. Compliando o driver:

sudo ./configure --prefix=/usr --disable-static
sudo make
sudo make install

Então basta reiniciar o computador.

Alternando entre barras, linhas e colunas nos gráficos do Highcharts


Pesquisei sobre as possibilidades de visualização de gráficos utilizando o Highcharts e consegui encontrar uma forma de alternar rapidamente entre barras, colunas e linhas (e pizza também!). Essa solução peguei no StackOverflow:

http://stackoverflow.com/questions/24693506/highcharts-change-chart-type-with-radio-buttons

As linhas de código abaixo criam o gráfico com jQuery:

$(function () {    


// Create the chart

var options = {
    chart: {
       events: {
            drilldown: function (e) {
                if (!e.seriesOptions) {

                    var chart = this;

                        

                    // Show the loading label
                    chart.showLoading('Loading ...');

                    setTimeout(function () {
                        chart.hideLoading();
                        chart.addSeriesAsDrilldown(e.point, series);
                    }, 1000); 
                }

            }
        },
        plotBorderWidth: 0
    },

    title: {
        text: 'Chart Title',
    },
    //
    subtitle: {
            text: 'Subtitle'
    },
    //
    xAxis: {
            type: 'category',
    },
    //
    yAxis: {

            title: {
                margin: 10,
                text: 'No. of user'
            },      
    },
    //
    legend: {
        enabled: true,
    },
    //
    plotOptions: {
        series: {
            pointPadding: 0.2,
            borderWidth: 0,
            dataLabels: {
                enabled: true
            }
        },
        pie: {
            plotBorderWidth: 0,
            allowPointSelect: true,
            cursor: 'pointer',
            size: '100%',
            dataLabels: {
                enabled: true,
                format: '{point.name}: <b>{point.y}</b>'
            }
        }
    },
    //
     series: [{
        name: 'Case',
        colorByPoint: true,
        data: [3, 2, 1, 3, 4]
    }],
    //
    drilldown: {
        series: []
    }
};

// Column chart
options.chart.renderTo = 'container';
options.chart.type = 'column';
var chart1 = new Highcharts.Chart(options);

chartfunc = function()
{
var column = document.getElementById('column');
var bar = document.getElementById('bar');
var pie = document.getElementById('pie');
var line = document.getElementById('line');

        
if(column.checked)
    {
        
        options.chart.renderTo = 'container';
        options.chart.type = 'column';
        var chart1 = new Highcharts.Chart(options);
    }
else if(bar.checked)
    {
        options.chart.renderTo = 'container';
        options.chart.type = 'bar';
        var chart1 = new Highcharts.Chart(options);
    }
else if(pie.checked)
    {
        options.chart.renderTo = 'container';
        options.chart.type = 'pie';
        var chart1 = new Highcharts.Chart(options);
    }
else
    {
        options.chart.renderTo = 'container';
        options.chart.type = 'line';
        var chart1 = new Highcharts.Chart(options);
    }

}

$('#change_chart_title').click(function(){
    var new_title = $('#chart_title').val();
    var chart = $('#container').highcharts();
    chart.setTitle({ text: new_title });
        
    alert('Chart title changed to '+new_title+' !');
    
});
});

Já as linhas abaixo são do HTML:

<script src="http://code.highcharts.com/highcharts.js"></script>
<script src="http://code.highcharts.com/modules/exporting.js"></script>

<div id="container" style="min-width: 310px; height: 400px; margin: 0 auto"></div>

<input type="radio" name="mychart" class="mychart" id= "column" value="column" onclick= "chartfunc()" checked>Column
<input type="radio" name="mychart" class="mychart" id= "bar" value="bar" onclick= "chartfunc()">Bar
<input type="radio" name="mychart" class="mychart" id= "pie" value="pie" onclick= "chartfunc()">Pie
<input type="radio" name="mychart" class="mychart" id= "line" value="line" onclick= "chartfunc()">Line
    
    <br>
        Chart title:
        <input type="text" id="chart_title" value="Chart Title">
        <input type="button" id="change_chart_title" value="Change">    

Veja o exemplo no JSFIDDLE: http://jsfiddle.net/phpdeveloperrahul/sSLnn/