How to fix permissions on globally installing npm packages on linux

Is common have packages that works globally, they make the work more easy in some ways, provide functionalities, et al..

The difference in npm packages that are installed globally and locally is that you will setup a package like a program avaliable by a CLI(Command Line Interface)¹, this require permissions to write in some directories that the npm normally don’t has.

When you try install some globally package(using the -g):

npm install -g <package>

You can face errors and warnings like this:

npm WARN checkPermissions Missing write access to /usr/lib/node_modules
npm ERR! path /usr/lib/node_modules
npm ERR! code EACCES
npm ERR! errno -13
npm ERR! syscall access
npm ERR! Error: EACCES: permission denied, access '/usr/lib/node_modules'
npm ERR!  { [Error: EACCES: permission denied, access '/usr/lib/node_modules']
npm ERR!   stack:
npm ERR!    'Error: EACCES: permission denied, access \'/usr/lib/node_modules\'',
npm ERR!   errno: -13,
npm ERR!   code: 'EACCES',
npm ERR!   syscall: 'access',
npm ERR!   path: '/usr/lib/node_modules' }
npm ERR! 
npm ERR! The operation was rejected by your operating system.
npm ERR! It is likely you do not have the permissions to access this file as the current user
npm ERR! 
npm ERR! If you believe this might be a permissions issue, please double-check the
npm ERR! permissions of the file and its containing directories, or try running
npm ERR! the command again as root/Administrator (though this is not recommended).

npm ERR! A complete log of this run can be found in:

Continue lendo “How to fix permissions on globally installing npm packages on linux”

Exercício adivinhar um número com busca binária

Implementar um jogo “adivinha-número” utilizando busca binária:
Deve ser solicitado ao usuário que pense em um número entre 1 e 10000

O programa deve dar o primeiro palpite
– Se estiver errado, deve ser perguntado se o número é maior ou menor que um certo número
– O programa apresenta um novo palpite e assim por diante até que adivinha o número certo.
– O programa deve contar quantos palpites foram necessários para acertar o número

 

#include <stdio.h>
#include <math.h>

int guess(int i, int j){
    char r1, r2;
    int g = abs((i+j) / 2);
    printf("E o numero: %d ?(Y = Sim, N = Nao)\n", g);
    scanf(" %c", &r1);
    if(r1 == 'Y'){
        return g;
    }
    else{
        printf("O numero eh maior ou menor que %d ?(M = Maior, N = Menor)\n", g);
        scanf(" %c", &r2);
        if(r2 == 'M'){
            guess(g,j);
        }
        else{
            guess(i,g);
        }
    }
}
int main(){
    printf("Pense em um numero entre 1 e 10000.\n");
    guess(1,10001);
}

 

Challenge: Binary search(Khan Academy)

Solução para o problema de busca binária no Khan Academy:

/* Returns either the index of the location in the array,
  or -1 if the array did not contain the targetValue */
var doSearch = function(array, targetValue) {
    var min = 0;
    var max = array.length - 1;
    var guess, count = 0;
    while(min <= max){
        guess = Math.floor((min+max)/2);
        println(guess);
        count++;
        if(array[guess] === targetValue){ 
            println(count);
            return guess; 
        }
        else if(array[guess]<targetValue){
            min=guess+1;
        }
        else{ 
            max = guess-1;
        }
    }
    return -1;
};

var primes = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 
		41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97];

var result = doSearch(primes, 970);
println("Found prime at index " + result);
Program.assertEqual(doSearch(primes, 73), 20);
Program.assertEqual(doSearch(primes, 2), 0);
Program.assertEqual(doSearch(primes, 97), 24);

Instalando Julia 1.0.0 no Ubuntu 18.04

  1. Baixe os arquivos binários da Julia no site: https://julialang.org/downloads/ (Generic Linux Binaries for x86).
  2. Extraia o diretório do arquivo julia-1.0.0-linux-x86_XX.tar.gz baixado por exemplo:
    tar -vzxf julia-1.0.0-linux-x86_64.tar.gz
  3. Mova a pasta para algum diretório, eu recomendo /opt:
    sudo mv ~/Dowloads/julia-1.0.0 /opt
    sudo mv /opt/julia-1.0.0 /opt/julia
  4. Crie um link simbólico em alguma pasta presente em $PATH
    sudo ln -s /opt/julia/bin/julia /usr/local/bin/julia
    
  5. Abra um novo terminal e teste:
    julia -v
    julia