Olá pessoal.
Aqueles que teem acompanhado os tweets e o SVN, devem ter notado que
recentemente, viemos fazendo grandes investidas na “aprendizagem” do
Mind.
Ele ainda engatinha neste quesito, mas mesmo assim, já aponta grandes inovações e diferenciais, que estou empolgado em anunciar.
Quero apresentar aqui, muito brevemente, algumas das novas features, e
pedir idéias e sugestões àqueles mais entendidos/interessados/nerds a
respeito de futuras implementações.
Vamos inicialmente às novidades:
* Habilitando o fator Q.I.:
Agora, há novas opções na tela no menu “Tools>Options>Mind
Options”. Visite esta tela, e marque as opções conforme o desejado.
Ao adicionar novos verbos, eles podem ser de uso local, ou seja, apenas
do projeto atual, ou de uso Global, em que todos os projetos conhecerão
este verbo, a partir da li. Podemos nestas opções, selecionar quais
dicionários preferimos usar, e podemos também marcar para que ele
adicione novos sinônimos automaticamente a um, ou a outro dicionário.
Além disso, também podemos marcar para que o mind nos informe sobre as
decisões tomadas durante o processamento (juntamente com possíveis
dicas), e também que reporte suas dúvidas, que são situações nas quais
ele não tem certeza sobre como proceder, e que possivelmente, ignorou a
instrução.
* Aprendizagem de novos verbos:
Sempre que o Mind tiver uma dúvida, e reporta-la, você verá um ícone
na lateral direita da linha amarela, onde a sua duvida está sendo
exibida (na guia “Debug” do output panel). Clicando neste ícone,
podemos adicionar ou especificar o que é necessário, respondendo a
pergunta feita pelo Mind. Assim, ele aprenderá conosco.
O verbo será adicionado ao dicionário global, ou local, conforme estiver especificado nas opções.
* Aprendizagem de novos tipos:
Da mesma forma que verbos, Mind lhe perguntará sobre possíveis tipos
de dados que ele não conhece, reportando isto como uma dúvida.
Também na guia “Debug”, você encontrará um ícone na direita da linha
onde a dúvida foi reportada. Clicando nele, poderás informar o tipo
básico correspondente a este tipo de dado. A partir daí, Mind conhecerá
este tipo, e não perguntará na próxima vez.
* Aprendizagem de sinônimos:
Agora o Mind também pode aprender sinônimos, que em português são
especialmente úteis. Porém, o Mind ainda não pode aprender os sinônimos
por conta própria. Precisa então, da ajuda do desenvolvedor para
aprender. A sintaxe padrão para a adição de sinônimos é esta:
@usuario= usuarios, usuaria, usuarias.
Usando o @, identificamos um elemento (que nao necessariamente
precisa existir no código), e após o sinal de igualdade, temos sua
lista de sinônimos.
A partir deste momento, o Mind saberá que em qualquer lugar que
qualquer uma daquelas palavras for usada, a entidade deverá se chamar
“usuario”.
Assim, ganhamos o poder de escrever códigos como.
@aluno= alunas, aluna, alunos.
Professor pode ter muitos alunos.
Aluno tem vários professor.
Qualquer aluna tem nome:string(60).
Agora, o mind criará apenas uma entidade aluno e uma professor. Caso tenhas deixado habilitada uma das opções para adicionar sinônimo automáticamente, o Mind aprenderá tais sinônimos para todos os outros projetos ou somente para este projeto, após este ter sido rodado a primeira vez. Sendo assim, podemos remover a primeira linha onde definimos os sinônimos assim que rodamos o projeto uma vez, pois o Mind já terá aprendido sobre aquelas entidades.
Agora, a parte em que quero a sua opinião.
Tenho a intenção de implementar duas novas funcionalidades.
A primeira, é a aprendizagem de subtipos, que são atualmente criados como segue abaixo, porém, somente existem no projeto atual:
$sexo:char(1, obrigatório, {F=Feminino|M=Masculino}).
Assim, identificamos:
cliente tem sexo:sexo().
funcionario tem sexo:sexo().
fornecedor tem sexo:sexo().
Tanto cliente, quanto funcionário e fornecedor passarão a ter a
propriedade sexo obrigatória, do tipo char, tamanho um, com aquelas
duas opções.
Achariam que vale a pena oferecer a opção de uma aprendizagem a este
nível? Onde a partir daí, todo projeto onde algo fosse do tipo sexo(),
teria tais características? Ou é algo pouco usual?
O segundo item que quero abordar é mais delicado, trata-se do “Mind Universe” (sim, o nome foi uma primeira ideia, pode mudar, hehe). A base da idéia é manter uma base de conhecimento sobre as entidades. Por exemplo, você usa a entidade CLIENTE em um projeto, coloca nele idade, sexo, e nome. Então, outra pessoa que esteja trabalhando em outro projeto (usando o mesmo servidor que você) cria também uma entidade cliente, porém, apenas com a propriedade nome. Neste caso, o Mind diria algo como “Eu conheço o que é um CLIENTE, gostaria de ver minhas sugestões?”, mostrando a lista de propriedades que ele conhece sobre o que é um cliente, para o cara aceitar e passar a usar, ou não.
A idéia ainda é jovem e precisa ser amadurecida, mas aqueles que tiverem interesse em colaborar, seja com novas ideias, pontos de vista, testes ou desenvolvimento mesmo, sintam-se bem a vontade para nos contactar.
Nosso grupo de discussão ainda é relativamente pequeno, mas conta com alguns dos melhores em suas áreas. Por isto, levo muito em conta suas opiniões. O que acham, é algo que vai vingar? Algo usual, algo que seria um diferencial? Alguma melhor maneira pra implementação?
Muito grato pelo seu tempo e atenção, que sei muito bem ser deveras valioso.
Ps.: acabamos reorganizando e comentando todo principal arquivo (mind_process.php) justamente para facilitar aqueles que tivessem interesse em dar uma olhada no código (tivemos comentários sobre o mesmo, e percebemos que realmente precisava ser melhor cuidado). Com certeza ainda iremos evoluir mais neste quesito, com o tempo.
A grande questão é:
Flexibilizar demais a linguagem dificulta o aprendizado e o
entendimento por outras pessoas, exemplo clássico: ingles é bem rígido
por isso é fácil de aprender, já portugues com tanta opção e variações
só complica nossas vidas, nem precisa dizer que isso ocorre
principalmente nos verbos não é?
Imagine uma grande corporação com mais de 20 projetos, com certeza
alguns terao entidades com nomes iguais, o mind gerenciaria todos os
projetos fazendo varreduras para trazer essas informações?se sim, ok
em um servidor standalone seria perfeito, mas e se vc tivesse um
servidor clusterizado, a coisa complicaria um pouco..
Mas as demais idéias são bem interessantes.
On 10 abr, 22:31, Felipe Nascimento de Moura <felipenmo...@gmail.com>
wrote:
> http://felipenascimento.orghttp://twitter.com/felipenmoura
A documentação desenvolvida acabou ficando bem focada naqueles que
usarão o Mind, e acabamos não conseguindo especificar muitos detalhes
para aqueles que estão dispostos a mecher na estrutura. Colocamos
alguma documentação mais direcionada ao desenvolvimento de Módulos e
plugins, mas não para lidar com o core do sistema, mesmo.
Quanto à flexibilidade, é uma questão como um "cão de dois donos". Um
dos pontos que tentamos martelar é que no Mind, a linguagem é quem
aprende com o desenvolvedor, e não o contrario. Assim, o que
aconteceria é justamente que o programador não precisaria se preocupar
em aprender a linguagem, mas sim em sair usando-a, o que ela não
souber, ela perguntará. Este seria o princípio do conceito de
linguagem de programação discreta que adotamos. Para tanto, esta
flexibilidade pode ser tanto como um extremo facilitador, como um
complicador, logo no início, por ser uma forma muito diferente de
desenvolvimento.
O Mind acaba funcionando de uma forma m uito difernte dos
compiladores, onde o que não está certo, ESTÁ ERRADO. No caso do Mind,
aquilo que está certo é utilizado, o que não está certo, é
questionado, pois pode ser simplesmente um trexo a mais de texto que
pode ser descartado, ou pode conter algo que o Mind simplesmente ainda
não conheça, que será questionado para que na próxima vez seja
reconhecido.
Esta, claro, é uma abordagem, e com toda certeza ainda evoluiremos
muito isto tudo. Toda ajuda e opinião é sempre útil para o
amadurecimento do Mind.
O que achas que ainda devemos dar uma atenção, ou focar no momento?
Abraço
2010/4/12 Walker de Alencar <walker...@gmail.com>
> --
> ------------------------------------------------------------------------------------------------------
> Você recebeu esta mensagem por fazer parte grupo "TheWebMind".
> Para postar mande um e-mail para thewe...@googlegroups.com
> Para maiores informações visite o grupo: http://groups.google.com/group/thewebmind?hl=en