J2V

Informática & Tecnologia

Números Romanos em PHP

Função para trabalhar com números Romanos. A primeira é para converter numero INTEIRO para ROMANO e a segundo o contrário, número ROMANO para INTEIRO.

/**
* Converter número inteiro para romano
*/
function numberIntegerToRoman($num, $debug = false){ 
    
    $n = intval($num); 
    $nRoman = ''; 

    $default = array(
	    'M' 	=> 1000,
	    'CM' 	=> 900,
	    'D' 	=> 500,
	    'CD' 	=> 400,
	    'C' 	=> 100,
	    'XC' 	=> 90,
	    'L' 	=> 50,
	    'XL' 	=> 40,
	    'X' 	=> 10,
	    'IX' 	=> 9,
	    'V' 	=> 5,
	    'IV' 	=> 4,
	    'I' 	=> 1,
	);

    foreach ($default as $roman => $number){ 
        $matches = intval($n / $number); 
        $nRoman .= str_repeat($roman, $matches); 
        $n = $n % $number; 
    } 

    if($debug){
		return sprintf('%s = %s', $num, $nRoman);
	}

    return $nRoman; 
}

/**
* Converter número romano para inteiro
*/
function numberRomanToInteger($numRoman, $debug = false){

	$nRoman = $numRoman;
	$default = array(
	    'M' 	=> 1000,
	    'CM' 	=> 900,
	    'D' 	=> 500,
	    'CD' 	=> 400,
	    'C' 	=> 100,
	    'XC' 	=> 90,
	    'L' 	=> 50,
	    'XL' 	=> 40,
	    'X' 	=> 10,
	    'IX' 	=> 9,
	    'V' 	=> 5,
	    'IV' 	=> 4,
	    'I' 	=> 1,
	);

	$int = 0;
	foreach ($default as $key => $value) {
	    while (strpos($numRoman, $key) === 0) {
	        $int += $value;
	        $numRoman = substr($numRoman, strlen($key));
	    }
	}

	if($debug){
		return sprintf('%s = %s', $nRoman, $int);
	}

	return $int;
}

Utilização:
echo numberIntegerToRoman(2016, true);
/* Saída: 2016 = MMXVI */

echo numberRomanToInteger('MMXVI', true);
/* Saída: MMXVI = 2016 */

echo numberIntegerToRoman(2016);
/* Saída: MMXVI */

echo numberRomanToInteger('MMXVI');
/* Saída: 2016 */

Convertendo Segundos em Horas no PHP

Uma das formas de se converter SEGUNDOS em HORAS no PHP é utilizando o código abaixo:

echo gmdate("H:i:s", 86399);
/* Saída: 23:59:59 */

Lembrando que esse método é para segundos até 23:59:59. Caso queira hora “infinita” utilize algo do tipo:
$segundos = 99200;
$h = floor($segundos / 3600);
$m = floor(($segundos - ($h*3600)) / 60);
$s = floor($segundos % 60);

echo sprintf('%02s:%02s:%02s', $h, $m, $s);
/* Saída: 27:33:20 */

$segundos = 297600;
$h = floor($segundos / 3600);
$m = floor(($segundos - ($h*3600)) / 60);
$s = floor($segundos % 60);

echo sprintf('%02s:%02s:%02s', $h, $m, $s);
/* Saída: 82:40:00 */

 

Capturando último dia do Mês em PHP

Caso queira capturar o último dia do mês, uma das formas é utilizar o código abaixo:

$data = "2016-02-01";
echo date("Y-m-t", strtotime($data));
/** Saída: 2016-02-29 */

Capturando somente o dia:
$data = "2016-02-01";
echo date("t", strtotime($data));
/** Saída: 29 */

A variável $data pode ser qualquer data válida do mês, no caso utilizei o primeiro dia. Mas você poderia utilizar da seguinte forma também.
$data = "2017-02-27";
echo date("t", strtotime($data));
/** Saída: 28 */

 

Servidor Web Interno PHP

A partir do PHP 5.4.0, o CLI SAPI fornece um servidor web embutido. Esse servidor embutido roda uma single-thread, de forma que aplicações PHP irão congelar se uma requisição bloquear.

Para iniciar o servidor interno execute o comando abaixo:

php -S localhost:8000

Isso fará com que o diretório atual em que o comando acima foi executado se torne o DocumentRoot do servidor.

Caso queira especificar um diretório raiz execute:

php -S localhost:8000 -t /caminho/do/diretorio

Caso queria especificar um arquivo de rota execute:
php -S localhost:8000 router.php

Com isso todas as requisições serão redirecionadas primeiro para o router especificado.

Mas até agora só podemos chamar o servidor localmente, caso queira torna-lo acessível de qualquer interface execute:

php -S 0.0.0.0:8000


Aviso: 
Esse servidor web foi desenvolvido para auxiliar no desenvolvimento de aplicações. Ele também pode ser útil para testes ou para demonstrações de aplicações que forem executadas em ambientes contralados. Ele não foi desenvolvido para ser um web server completo. Ele não deve ser utilizado em uma rede pública.

Documentação completa:
http://php.net/manual/pt_BR/features.commandline.webserver.php

Caso tenha alguma dúvida deixe nos comentários.

Exemplo de arquivo YML para docker-compose

php:
  image: jeffersonvv/php:5.6-xdebug
  ports:
    - 80:80
  volumes:
    - /home/jefferson/www:/var/www/html
    - /home/jefferson/DataBase/mysql/:/mysql

mysql:
  image: mysql/mysql-server
  ports:
    - 3306:3306
  volumes:
    - /home/jefferson/DataBase/mysql:/var/lib/mysql
  environment:
    MYSQL_ROOT_PASSWORD: SENHA_ROOT_BANCO
    MYSQL_DATABASE: NOME_DO_BANCO

myadmin:
  image: phpmyadmin/phpmyadmin
  links:
    - mysql
  ports:
    - 8080:8080

* Caso o banco não exista o mesmo será criado. Dessa forma o banco de dados fica no HOST, ou seja na máquina real do usuário, caso seja necessário criar um novo container, você não perderá os dados.

Instalando Docker Compose no Ubuntu

Abaixo segue os passos para a instalação do docker-compose no Ubuntu, estou levando em consideração que você já tenha o Docker instalado. O teste foi realizado na versão Ubuntu 14.04.

  1. curl -L https://github.com/docker/compose/releases/download/1.5.2/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
  2. chmod +x /usr/local/bin/docker-compose
  3. # Quando realizamos essa instalação obtivemos o seguinte resultado 
    # docker-compose version: 1.5.2; com o comando abaixo:
    docker-compose --version

Monitore Tarefas no Linux com o Comando Watch

Você pode monitorar tarefas ou o que sua criatividade permitir, utilizando o comando watch.

A sintaxe é simples, veja:

watch [parametro] [comando/tarefa/script/etc]

Por padrão o intervalo de atualização é de 2 segundos, você pode mudar esse tempo passando o parametro -n seguido do tempo em segundos que deseja.

Exemplos:

# a cada 5 segundos a tela irá executar o comando date novamente
watch -n 5 date 

# a cada 30 segundos verifico o uso da memória
watch -n 30 free -m

 

Trabalhando com Aliases de Comandos no Ubuntu

  1. Abra o arquivo: ~/.bashrc
    sudo nano ~/.bashrc
  2. Vá até o final do arquivo
  3. Adicione o seguinte conteúdo:
    if [ -f ~/.bash_aliases ]; then
        . ~/.bash_aliases
    fi
  4. Crie o seguinte arquivo no diretório especificado: ~/.bash_aliases
    sudo nano ~/.bash_aliases
  5. Agora você pode criar seus comandos personalizados. Veja alguns exemplos abaixo.
    #!/bin/bash
    # utils
    alias bash-reload='source ~/.bashrc'
    alias edit-al='nano ~/.bash_aliases'
    alias home='cd /home/$(whoami)'
    alias update='sudo apt-get update'
    alias install='sudo apt-get install'
    alias downloads='cd /media/jefferson/Dados/Downloads'
    alias lock='gnome-screensaver-command --lock'
    alias python-dir='cd /media/jefferson/Dados/Desenvolvimento/Python'
    alias dev-dir='cd /media/jefferson/Dados/Desenvolvimento'
    
    # docker
    alias dkimg='docker images'
    alias dkps='docker ps'
    alias dkps-a='docker ps -a'
    alias dkst='docker stop'
    alias dkrm='docker rm'
    alias dkrm-f='docker rm -f'
    
    # php
    alias www='cd /home/jefferson/www'
    alias php56='sudo docker run -d -p 80:80 --name php -v /home/jefferson/www:/var/www/html -v /home/jefferson/DataBase/mysql/:/mysql jeffersonvv/php:5.6-xdebug'
    alias php56-here='sudo docker run -d -p 80:80 --name php -v "$PWD":/var/www/html -v /home/jefferson/DataBase/mysql/:/mysql jeffersonvv/php:5.6-xdebug'
    
    # phpmyadmin
    alias myadmin='docker run -d --name myadmin --link mysql:db -p 8080:8080 phpmyadmin/phpmyadmin'
    
    # composer
    alias composer-install='docker run --rm --name composer -v $(pwd):/app composer/composer install'
    alias composer-cmd='docker run --rm --name composer -v $(pwd):/app composer/composer'
    
    # python
    alias python-exec='docker run -it --rm --name python -v "$PWD":/usr/src/myapp -w /usr/src/myapp jeffersonvv/python:3-webscraping python'
    
    # mysql
    alias mysql-exec='docker run -d -p 3306:3306 --name mysql -v /home/jefferson/DataBase/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=SENHA_ROOT -e MYSQL_DATABASE="NOME_DO_BANCO" mysql/mysql-server'
    
    # mysql-server
    alias mysql-server='mysql-exec && myadmin'
  6. Após criar o seu arquivo ou sempre que incluir um aliases nove execute o comando:
    source ~/.bashrc

     

Gerenciar várias versões do PHP na mesma máquina utilizando PHPBrew

Veja os requisitos e como instala-los no link abaixo.
https://github.com/phpbrew/phpbrew/wiki/Requirement

Depois de verificar e configurar os requisitos básicos vamos para a instalação.

curl -L -O https://github.com/phpbrew/phpbrew/raw/master/phpbrew
chmod +x phpbrew
sudo mv phpbrew /usr/bin/phpbrew

Concluído a instalação execute o comando abaixo para iniciar seu “ambiente” no PHPBrew
phpbrew init

Acrescente aos arquivos: .bashrc ou .zshrc a seguinte linha abaixo. Adicione no final do arquivo.
source ~/.phpbrew/bashrc

Para verificar as versões do PHP disponíveis execute o seguinte comando:
phpbrew known
# Saída: (algo parecido com o abaixo)
# 5.6: 5.6.16, 5.6.15, 5.6.14, 5.6.13, 5.6.12, 5.6.11, 5.6.10, 5.6.9 ...
# 5.5: 5.5.31, 5.5.30, 5.5.29, 5.5.28, 5.5.27, 5.5.26, 5.5.25, 5.5.24 ...
# 5.4: 5.4.45, 5.4.44, 5.4.43, 5.4.42, 5.4.41, 5.4.40, 5.4.39, 5.4.38 ...
# 5.3: 5.3.29, 5.3.28, 5.3.27, 5.3.26, 5.3.25 ...
# You can run `phpbrew update` to get a newer release list.

Para instalar uma nova versão execute o seguinte: (Inclusive podemos fazer instalações de versões direto do Git)
phpbrew install 5.6.16 +default+dbs

Caso queira instalar/habilitar extensões execute o seguinte:
phpbrew install 5.6.16 +mysql+sqlite+cgi

phpbrew install 5.6.16 +mysql+debug+pgsql +apxs2

phpbrew install 5.6.16 +pdo +mysql +pgsql +apxs2=/usr/bin/apxs2

Para listar as extensões disponíveis execute:
phpbrew variants
/*Saída:
Variants: 
  all, apxs2, bcmath, bz2, calendar, cgi, cli, ctype, curl, dba, debug, dom, 
  embed, exif, fileinfo, filter, fpm, ftp, gcov, gd, gettext, gmp, hash, 
  iconv, icu, imap, inifile, inline, intl, ipc, ipv6, json, kerberos, libgcc, 
  mbregex, mbstring, mcrypt, mhash, mysql, opcache, openssl, pcntl, pcre, 
  pdo, pgsql, phar, phpdbg, posix, readline, session, soap, sockets, sqlite, 
  static, tidy, tokenizer, wddx, xml, xml_all, xmlrpc, zip, zlib, zts


Virtual variants: 
  dbs: sqlite, mysql, pgsql, pdo
  mb: mbstring, mbregex
  neutral: 
  default: bcmath, bz2, calendar, cli, ctype, dom, fileinfo, filter, ipc, 
  json, mbregex, mbstring, mhash, mcrypt, pcntl, pcre, pdo, phar, posix, 
  readline, sockets, tokenizer, xml, curl, openssl, zip
  everything: dba, ipv6, dom, calendar, wddx, static, inifile, inline, cli, 
  fpm, ftp, filter, gcov, zts, json, hash, exif, mbstring, mbregex, libgcc, 
  pdo, posix, embed, sockets, debug, phpdbg, zip, bcmath, fileinfo, ctype, 
  cgi, soap, pcntl, intl, phar, session, tokenizer, opcache, imap, tidy, 
  kerberos, xmlrpc, pcre, mhash, mcrypt, zlib, curl, readline, gd, icu, 
  openssl, mysql, sqlite, pgsql, xml, xml_all, gettext, iconv, bz2, ipc, 
  gmp


Using variants to build PHP:

  phpbrew install php-5.3.10 +default
  phpbrew install php-5.3.10 +mysql +pdo
  phpbrew install php-5.3.10 +mysql +pdo +apxs2
  phpbrew install php-5.3.10 +mysql +pdo +apxs2=/usr/bin/apxs2
*/

Para uma documentação mais completa dos comandos acesse:

http://phpbrew.github.io/phpbrew/

P.S: Lembrando que podemos fazer uma melhor utilização de várias versões do PHP utilizando o Docker.

Caso tenha alguma dúvida deixe nos comentários.

Caputrando Data e Hora no Android

Capturando a Hora (24h) utilizando String.format();

//-- Esse formato captura a hora (24h) completa. Ex: 15:30:40
String.format("%tT", calendar)

//-- Esse formato captura a hora (24h) sem os segundos. Ex: 15:30
String.format("%tR", calendar)

//-- Esse formato captura a hora (12h) completa. Ex: 03:30:40 PM
String.format("%tT", calendar)

Exemplo com Toast para exibir a hora atual:
Toast.makeText(this, String.format("%tr", calendar), Toast.LENGTH_SHORT).show();

Capturando a Data no padrão ISO 8601 formato (YYYY-MM-DD)
//-- Ex: 2015-12-23
String.format("%tF", calendar)

Exemplo com Toast para exibir a data atual:
Toast.makeText(this, String.format("%tF", calendar), Toast.LENGTH_SHORT).show();

Informações mais completas e detalhadas você pode encontrar aqui: http://goo.gl/zhXzna

Page 4 of 5

Desenvolvido em WordPress & Tema por Anders Norén