Web & Desktop AI Agent Development

I’m seeking an experienced developer to create an AI agent using Claude. Key Requirements: – Primary function: Audit paperwork, edit, produce reports – Compatibility: Web and Desktop platforms. – Task capabilities: I have the skill sets Ideal Skills: – Proficiency in AI/ML development… (Budget: £250 – £750 GBP, Jobs: AI Automation, AI Chatbot, AI Development, Desktop Application, Graphic Design, HTML, Machine Learning (ML), PHP, Web Development, Website Design)

Read more here:: https://www.freelancer.com/projects/ai-automation/Web-Desktop-Agent-Development.html

      

WhatsApp Chat Admin & Script

I run a busy WhatsApp Business number and can’t keep up with all the incoming messages. Most of them are straightforward: people ask basic questions about our products, current deals, or how to place an order… (Budget: $15 – $25 USD, Jobs: Chatbot, Copywriting, Customer Service, Customer Support, JavaScript, PHP, Project Management, Sales)

Read more here:: https://www.freelancer.com/projects/chatbot/WhatsApp-Chat-Admin-Script.html

      

Bina Laman Blog Dengan Komen

Saya ingin membangunkan sebuah laman web berasaskan blog/artikel yang ringkas tetapi kemas dan mudah diurus. Fokus utama projek ini ialah menyediakan ruang penulisan artikel berserta sistem komen yang stabil supaya pembaca boleh berinteraksi secara langsung pada setiap entri… (Budget: $250 – $750 USD, Jobs: Blog Design, Content Management System (CMS), Graphic Design, HTML, PHP, SEO, Web Development, Website Design)

Read more here:: https://www.freelancer.com/projects/web-development/Bina-Laman-Blog-Dengan-Komen.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.