Selfie to Word Art Conversion

I have a single selfie and I’d like it transformed into clean, modern word art similar to the reference here: https://snipboard.io/KcrUkq.jpg. Key points you should know: • Style: modern—no vintage flourishes or graffiti effects… (Budget: ₹1500 – ₹12500 INR, Jobs: AI (Artificial Intelligence) HW/SW, Artificial Intelligence, Laravel, Next.js, OpenAI, PHP, React.js)

Read more here:: https://www.freelancer.com/projects/php/Selfie-Word-Art-Conversion.html

      

Expert Developer for Remote Python, C++, SQL Work

Senior Software Developer Needed (Python, C++, SQL) – Remote Access Work We are looking for an experienced Senior Software Developer with over 10 years of hands-on experience in Python, C++, and SQL to support ongoing and upcoming projects… (Budget: $8 – $15 USD, Jobs: C# Programming, C++ Programming, Debugging, PHP, Python, Software Architecture, Software Development, SQL)

Read more here:: https://www.freelancer.com/projects/python/Expert-Developer-for-Remote-Python.html

      

Collaborative Junior/Middle Developer Needed

I looking for Junior / Middle Developer who can collaborate with me for some projects. (Budget: $750 – $1500 USD, Jobs: Development, Graphic Design, HTML, PHP, Project Management, Software Development, Website Design)

Read more here:: https://www.freelancer.com/projects/development/Collaborative-Junior-Middle-Developer.html

      

Build AI Voice Agent + GoHighLevel Lead Qualification System (Vapi + n8n)

I want every new lead in our GoHighLevel (GHL) account to receive a phone call within 60 seconds of submitting a form, hear an AI-driven qualification script, and move through the pipeline with zero human intervention… (Budget: $1500 – $3000 USD, Jobs: AI Chatbot, AI Chatbot Development, API, API Integration, Asterisk PBX, GoHighLevel, n8n, PHP, Software Architecture, Telemarketing)

Read more here:: https://www.freelancer.com/projects/n8n/Build-Voice-Agent-GoHighLevel-Lead.html

      

Instalando Laravel Framework

laravelLaravel utiliza o composer para gerenciar suas dependências. Então, antes de usar o Laravel, você precisa ter o composer instalado em sua máquina. Caso não tenha veja como fazer a instalação neste post anterior: Instalando Composer

 

1. Baixe o instalador do laravel via composer

php composer.phar global require "laravel/installer=~1.1"

 

2. Criar projeto

php composer.phar create-project laravel/laravel phpConference 4.2 --prefer-dist

 

3. Configurar ambiente laravel

Nesses arquivos você poderá configurar a URL para os diferentes ambientes como também o local, timezone, chave para criptografia, entre outros.

Produção:

phpConference/app/config/app.php

Local:

phpConference/app/config/local/app.php

 

4. Permitir escrita ao servidor web para o seguinte diretório:

phpConference/app/storage

 

Requisitos:

PHP >= 5.4
Extensão PHP MCrypt
Modulo apache mod_rewrite

Referência: http://laravel.com/docs/4.2

Instalando Composer

composer
Composer: ferramenta para gerenciamento de dependências em PHP. Ele permite que você declare as bibliotecas dependentes que seu projeto precisa e vai instalá-los.

Pré-Requisito: versão minima do PHP 5.3.2.

Para instalar a última versão do composer digite a seguinte linha no terminal do Linux/Unix/OSX.

Instalação via cURL:

curl -sS https://getcomposer.org/installer | php

Ou instalação via PHP:

php -r "readfile('https://getcomposer.org/installer');" | php

 

Referencia: https://getcomposer.org/doc/00-intro.md

Instalando PHPUnit no Windows com XAMPP

Partindo do principio de que o XAMPP já está instalado e configurado abra o painel de controle do XAMPP (XAMPP Control Panel) e clique no botão Shell.

Painel de controle do XAMPP
Painel de controle do XAMPP

 

 

 

 

 

 

 

 

 

Quando abrir o terminal/prompt de comando digite os seguintes comandos:

pear config-set auto_discover 1
pear install pear.phpunit.de/PHPUnit
pear install phpunit/PHPUnit_SkeletonGenerator

Pronto ao final destes três comandos deverá retornar a mensagem: install ok

Para verificar se o PHPUnit está executando e qual a versão digite o comando abaixo:

phpunit --version

 

Agora você já pode começar a escrever seus testes.

Somar dias em uma data

/**
 * função pra somar dias em uma data
 * @param string $date formato YYYY-MM-DD
 * @param integer $dias quandidade de dias que deseja somar
 * @param string $tipo formato do retorno
 * @return string
 */
function SomaDiasData($date, $dias, $tipo) { 
	if ($date != '') {
		$sel_dia  = substr($date, 8, 2); # retorna dia
		$sel_mes  = substr($date, 5, 2); # retorna mes	
		$sel_ano  = substr($date, 0, 4); # retorna ano

		//$result	= $sel_dia."/".$sel_mes;
		$result	= date($tipo, mktime(12, 0, 0, $sel_mes, $sel_dia + $dias, $sel_ano));

	} else {
		$result = "";
	}
	return $result; 
    }

Agrupando elementos com Zend_Form (Fieldset)

Olá, hoje falarei de um assunto simples e fácil de implementar em um formulário html e com Zend_Form, apesar de não parecer a primeira vista também é bem simples com o Zend_Form.

Sem nenhum rodeio ou enrolação descreverei como utilizar o Fieldset.

<?php

class Application_Form_Cadastro extends Zend_Form {

	public function __construct($options = null) {
		parent::__construct ($options);

		//campo nome
		$nome = new Zend_Form_Element_Text('nome');
		$nome->setLabel('Nome: ');
		//campo sobrenome
		$sobrenome = new Zend_Form_Element_Text('sobrenome');
		$sobrenome->setLabel('Sobrenome: ');

		//campo telefone
		$telefone = new Zend_Form_Element_Text('telefone');
		$telefone->setLabel('Telefone: ');
		//campo sobrenome
		$email = new Zend_Form_Element_Text('email');
		$email->setLabel('E-mail: ');

		//adiciona elementos ao formulario
		$this->addElements(array($nome, $sobrenome, $telefone, $email));

		//cria grupo no formulario (fieldset) e sua legenda (legend)
		$this->addDisplayGroup(array('nome','sobrenome'), 'dadosPessoais', array('legend'=>'Dados Pessoais:'));
		//caso queira pode tambem inserir decorators
		//$dPessoal = $this->getDisplayGroup('dadosPessoais');
		//$dPessoal->setDecorators(array com as especificacoes do decorator do fieldset);

		//cria grupo no formulario (fieldset) e sua legenda (legend)
		$this->addDisplayGroup(array('telefone','email'), 'dadosContato', array('legend'=>'Contatos:'));
	}
}

?>

Pronto está ai, simples e fácil!

Wildcard challenge (Desafio wildcard)

Em julho de 2011, fiz uma entrevista em uma empresa na qual foi-me solicitado a resolução de um teste, para ser feito em casa e enviado via e-mail, resolvi em 3 dias, após meu horário de trabalho e usando a análise combinatória na solução, fui aprovado, porém infelizmente cancelaram a contratação.

Na época existia apenas uma solução pronta do teste na internet para exemplo e usando binários na sua resolução.

Achei o teste interessante e com um bom nível de complexidade, pois não basta saber apenas PHP, mas também um pouco de estatística e análise combinatória, por isso estou compartilhando a minha solução.

Enunciado do teste

Escrever um algoritmo, em PHP, que tenha como entrada uma string composta por palavras separadas por pipe (|) e  a saída seja uma sequência com todos os wildcards possíveis.

Exemplo 1:

Entrada: “sao-paulo”

Saída:       *

Exemplo 2:

Entrada: “sao-paulo|restaurante”

Saída:

sao-paulo|*

*|restaurante

Exemplo 3:

Entrada: “a|b|c”

Saída:

*|b|c

a|*|c

a|b|*

a|*|*

*|b|*

*|*|c

Solução

<?php
/**
 * @author Daniel Satiro da Rocha
 * Teste - 15/07/2011
 */

/**
 * retorna combinacoes sem repeticao
 * @param array $elementos
 * @param int $s
 * @return Ambigous <multitype:, string>
 */
function combinacoes($elementos = array(), $s) {
	$combinArr = array ();
	$combin = ( int ) sprintf ( "1%0{$s}d", 0 ) - 1;
	for($cur = 0; $cur <= $combin; $cur ++) {
		$number = sprintf ( "%0{$s}d", $cur );
		$equal_digits = array ();
		for($digit = 0; $digit < $s; $digit ++) {
			if (in_array ( $number {$digit}, $elementos ) && ! in_array ( $number {$digit}, $equal_digits )) {
				$equal_digits [] = $number {$digit};
			}
		}
		if (count ( $equal_digits ) == $s) {
			$numArr = array();
			for ($i = 0; $i < strlen($number); $i++) {
				$numArr[] = $number[$i];
			}
			sort($numArr);
			$combinArr [] = implode($numArr);
		}
	}
	$combinArr = array_unique($combinArr);
	$elemComb = array();
	foreach ($combinArr as $value) {
		$numArr = array();
		for ($i = 0; $i < strlen($value); $i++) {
			$numArr[] = $value[$i];
		}
		$elemComb[] = $numArr;
	}
		return $elemComb;
}

/**
 * calcula fatorial
 * @param int $valor
 * @return number|Ambigous <unknown, number>
 */
function fatorial($valor) {
	if ($valor == 0) {
		return 1;
	}
	$result = $valor;
	for ($index = $valor-1; $index > 1; $index--) {
		$result *= $index;
	}
	return $result;
}

/**
 * Calcula quantidade de combinacoes possiveis sem repeticao
 * Onde $n é o total de elementos e $s o número de elementos escolhidos.
 * @param int $n
 * @param int $s
 * @return number
 */
function combinatoria($n, $s){
	$c = fatorial($n)/(fatorial($s)*fatorial($n-$s));
	return $c;
}
/**
 * Calcula arranjo simples
 * Onde $n é o total de elementos e $s o número de elementos escolhidos.
 * @param int $n
 * @param int $s
 * @return number
 */
function arranjos($n, $s) {
	$a = fatorial($n)/fatorial($n-$s);
	return $a;
}
/**
 * Executa calculos conforme entrada e retorna as combinacoes
 * @param string $entrada
 * @return string|string
 */
function processaSaida($entrada) {
	$entArray = explode ( '|', $entrada );
	$n = count ( $entArray );
	if ($n == 1) {
		return '*';
	} else {

		$linhas = array ();
		$html = "";
		for($s = 1; $s < $n; $s ++) {
			$combin = combinatoria ( $n, $s );
			$combArr = combinacoes ( range ( 0, $n - 1 ), $s );
			for($c = 0; $c < $combin; $c ++) {
				$aux = array ();
				$d = 0;
				for($index = 0; $index < $n; $index ++) {
					if ($combArr [$c] [$d] == $index) {
						$aux [$index] = "*";
						$d ++;
					} else {
						$aux [$index] = $entArray [$index];
					}
				}
				$linhas [] = $aux;
			}
		}

		$html = "";
		foreach ( $linhas as $key => $value ) {
			$html .= implode ( '|', $value ) . "<br />";
		}
		return $html;
	}
}
$saida = "Nenhuma saida processada!";
if($_POST){
	$entrada = trim($_POST['entrada']);
	$saida = processaSaida($entrada);
}
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Teste Wildcard challenge</title>
</head>
<body>
<center>
<form action="<?php echo $_SERVER['PHP_SELF'];?>" method="post">
<table border="0">
	<tr valign="top">
		<td>Entrada:</td>
		<td><input type="text" name="entrada"
			value="<?php echo $_POST['entrada'];?>" /></td>
		<td><input type="submit" value="Enviar" /></td>
	</tr>
	<tr>
		<td>Saída:</td>
		<td colspan="2"><?php echo $saida;?></td>
	</tr>
</table>
</form>
</center>
</body>
</html>

É isso aí, não sei se a empresa ainda usa esse teste para avaliar seus candidatos, mas se ainda utilizar acho que ficará mais difícil para os próximos candidatos encontrar outra solução.