▄▄▄▄▄▄▄ ▄▄▄▄▄▄▄ ▄▄▄▄▄▄▄ ▄▄▄▄▄▄▄ ▄▄▄▄▄▄▄ ▄▄▄▄▄▄▄▄
████ ████ ████ ████ ████ ████ ████ ████ ████ ████ ████ ████
█▓▓█ █▓▓█ █▓▓█ █▓▓█ █▓▓█ █▓▓█ █▓▓█ █▓▓█ █▓▓█ █▓▓█ █▓▓█ █▓▓█
· █▒▒█ █▒▒█ █▒▒█ █▒▒█ █▒▒█ █▒▒█ █▒▒█ █▒▒█ █▒▒█ █▒▒█ █▒▒█ █▒▒█ ·
. █░░█ ▀▀▀▀ █░░█ █░░█ █░░█ █░░█ █░░█ ▀▀▀▀ █░░█ █░░█ ▀███ ▀▀▀▀ .
: █ █ ▄▄▄▄ █ █ █ █ █ █ █ █ █ ███ █ ██ █ ▀███▄ :
│ █░░█ █░░█ █░░█ █░░█ █░░█ █░░█ █░░█ ▄▄▄▄ █░░█ █░░█ ▄▄▄▄ ██▄▄ │
: █▒▒█ █▒▒█ █▒▒█ █▒▒█ █▒▒█ █▒▒█ █▒▒█ █▒▒█ █▒▒█ █▒▒█ █▒▒█ █▒▒█ :
│ █▓▓█ █▓▓█ █▓▓█ █▓▓█ █▓▓█ █▓▓█ █▓▓█ █▓▓█ █▓▓█ █▓▓█ █▓▓█ █▓▓█ │
│ ▀███▄███▀ ▀███▄███▀ ████▄██▀▀ ████▄███▀ ████ ▀██ ▀██████▀ │
├─────────────────────────────────────────────────────────────┤
: ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ :
· █ 1o. Zine Brasileiro sobre Programacao, Demos & Graficos █ ·
: ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ :
└─────────────────────────────────────────────────────────────┘
CodersZine 00 - Junho/98
www.come.to/coders - coders@usa.net
from the #Coders of BrasIRC
─ ── ─── ──────────════<>──────────────<>════────────── ─── ── ─
"Programar e' uma arte, e como toda arte e' bela"
(BadGod)
"O ministerio da saude adverte: 'Nao programar faz mal a saude'"
(xCrown)
"Diga-me com q programas que eu te direi o q faras!!"
(xCrown)
"Se so Deus pode criar a vida, entao sou Deus"
(Azr)
"Se vc programa, vc e' um criador,
se nao, vc e' um simples e misero usuario"
(X_cAmArO)
CodersZine.══════════════════════════════════════════════════════¤════════════
║ ─ ──<>─────────┤ INDICE ├─────────<>── ─ ║
║ ║
║ ║
║ INTRODUCAO.....................X_cAmArO ║
║ ║
║ Let's coder ║
║ 1. ALGORITIMOS..................Jac{Delpher} ║
║ 2. ASSEMBLY........................cr4sh^0v3 ║
║ 3. PASCAL..............................Mingo ║
║ 4. COBOL............................X_cAmArO ║
║ 5. C/C++..............................xCrown ║
║ 6. DJGPP................................xROD ║
║ 7. VISUAL C++.......................xCaption ║
║ 8. VISUAL BASIC........................Rashi ║
║ 9. VISUAL BASIC COM WINSOCK..........Hammett ║
║ 10.DELPHI............................Progman ║
║ 11.DELPHI COM ACTIVEX.................BADGod ║
║ 12.JAVA.........................Jac{Delpher} ║
║ 13.GRAFICOS...........................KDoskD ║
║ 14.GRAFICOS EM 3D.........................hC ║
║ 15.DEMOSCENE...........................Mingo ║
║ 16.REDES NEURAIS ARTIFICIAIS.............Wiz ║
║ ║
║ About CodersGroup ║
║ E-MAILS RECEBIDOS.........Coders Editors ║
║ QUEM SOMOS??..............Coders Editors ║
║ AGRADECIMENTOS............Coders Editors ║
║ SOME LINKS................Coders Editors ║
║ ║
════════════¹══════════════════════════════════════════════════════CodersZine.
─────────────<>─═══< INTRODUCAO >═══─<>─────────────
Ate' que enfim saiu. O primeiro demora mas sai! Putz, e tinha gente que
estava quase desistindo. Bah, pensei que fosse bem + facil fazer um zine,
mas agora que saiu, e' so' alegria...
Um pouco de historia...
Era uma vez um knal de IRC chamado #Programadores, onde a maioria de
nos costumava se encontrar, mas que por uma serie de brigas entre founders
e operadores, gerou o #Coders (se vc ainda nao entendeu, quem programa e'
um coder), e e' desse novo knal que surge nosso zine.
Tantos zines por ai, e nenhum sobre programacao, pronto agora existe,
boa sorte. ;)
Talvez, publicaremos o zine bimestralmente, pois quase todos trabalham
e estudam, e alem do mais, estamos pensando na qualidade. Talvez lancaremos
outras materias , tipo ultimas novidades na programacao, dicas de
programacao e fluxogramas, e talvez outras coisas que nao tem relacao com
programacao, mas isso e' uma outra historia. :-]
Fizemos esse zine pensando no futuro de vcs. Acreditem.. Muitos paises
formam muito menos programadores do que precisam. Hmm.. talvez publicaremos
algumas coisas sobre como montar um curriculum.
Ahh.. outra coisa.. tirei toda a acentuacao do zine, para ficar melhor
visualizavel nos diferentes editores que existem, porem pode ter passado
algum acento.. mas.. nosso logo fica melhor mesmo e' no edit.com.
Esperamos a colaboracao de vcs, mandando mails e divulgando nosso zine.
Obrigado.
┌ ── ─── ─────── ───────────────── ── ──────────────── ─────── ─── ── ┐
Lembre-se: qualquer texto ou exemplo retirado daki, podera ser publicado
│ somente se indicado junto o nome do autor e de onde foi tirado. │
- Construa, nao copie! -
└ ── ─── ─────── ───────────────── ── ──────────────── ─────── ─── ── ┘
Vou parar por aki, pq eu sei que ninguem le a introducao, todo mundo
vai direto a pratica. :o)
by X_cAmArO
CodersZine.═════════════════════════════════
─────────<>───═══════<<< LET'S CODER >>>═══════───<>─────────
La' vao as materias, facam bom proveito.. ;^)
Mas lembre-se: nao fiquem so' por aki, leiam livros e tutoriais, pois
hj em dia esta phoda p/ se encontrar um bom programador.
──────────════< ALGORITIMOS >════──────────
by Jac{Delpher}
Ola pessoal, estou escrevendo a materia sobre Algoritmos (e' mesmo??).
Ah, e tambem irei escrever sobre JAVA e JAVASCRIPT. Aguardem e confiem.
Bom, infelizmente, eu queria que o dia tivesse mais de 24 horas, so pra eu
poder escrever com mais calma essa materia. Mas tudo bem, eu so vou furar
com a data de entrega da revista. Espero que o X_cAmArO compreenda e adie o
dia do lancamento da revista mais uma semaninha :)). Mas vamos ao que
interessa.
Aos queridos leitores, que programam ou desejam programar, eu antecipo
uma coisinha: vc nao aprende a mexer em uma linguagem de programacao.Nao e'
como o MS WORD, onde vc sai futucando e acaba fazendo um texto lindo. Para
se fazer um sistema de computador, e' necessario uma base teorica muito
forte. Digo isso por experiencia propria. A maioria dos cursos de
linguagens de programacao ensinam a fazer o programa hello world!, como o
primeiro programa que vc faz. Francamente, eu nao consideraria isso como o
meu primeiro programa, pois isso ate uma crianca de 6 anos faz. Isso e'
muito facil na pratica, vamos ver em varias linguagens:
Em Delphi: ShowMessage ('Hello World');
Em Visual Basic: MsgBox ("Hello World") { nao programo nessa linguagem, mas
sei fazer esse programa, tah vendo? }
Em C: printf ("Hello World");
Em Pascal: WriteLn ('Hello World');
Bom, como vcs podem ver, isso e' muito facil de fazer, mas certamente
isso nao e' a primeira coisa a se aprender. Mas por incrivel que pareca e'
isso que as escolas de informatica ensinam no inicio do aprendizado de uma
linguagem. Algumas ate dao cobertura a materia de Algoritimos, mas dao um
curso fajuto de 14 horas. Nao sabe eles que isso e' o primordial. Entao, e'
isso que pretendo fazer nessa revista. Ah, e outra coisa, aos iniciantes,
leiam primeiro a minha materia e depois o resto, ok? Essa materia e'
temporaria. Acho que na proxima edicao da revista, eu jah acabo. E espero
que o X_cAmArO concorde que eu passe um pouco de Estrutura de Dados. Acho
que incluirei os dois juntos, nao sei. Vamos ver. Bom, mas vamos comecar.
Como eu havia falado, para se escrever um programa de computador, e'
necessario uma boa base teorica, principalmente sobre Algoritmos. Mas
finalmente, o q e' Algoritmo?
---> Pessoal, imaginem o seguinte. Vou dar um exemplo um tanto quanto
radical: para um ser humano andar (e outros animais tbm!), eles precisam
das pernas, isso e' primordial, certo? Muito bem. Para se escrever um
programa de computador ( ou programar, simplificando ), a LOGICA DA
PROGRAMAcAO equivale as pernas da gente. Ou seja, para andar, a gente
precisa das pernas, para programar, nos precisamos da Logica da
Programacao!(que se resume aos Algoritmos e Estrutura de Dados!). Entendeu?
Entao, outro exemplo legal e' que, quando nos aprendemos equacao de
segundo grau, primeiro o Professor nos mostra a formula ax² + bx + c = 0. E
depois nos substituimos os valores de a, b, e c por numeros e solucionamos
a equacao, certo? Pois entao, para se construir um sistema, o mesmo passa
por varias etapas. A primeira delas e' o projeto ou analise (que e' feita
puramente em algoritmos, junto com alguns diagramas). Esse projeto e'
justamente a parte teorica do sistema. Se voce for fazer for comecar a
fazer um sistema simplesmente pensando: "poxa! vou fazer um sistema. Vou
passar a noite acordado digitando codigo!". Ai e'que vc se engana, meu caro
amigo. Se esse tal que pensa assim for iniciante, certamente ele tentara
copiar o codigo de algum outro sistema, jah que existem milhoes de codigos
espalhados pela rede. E ainda mais diz que foi ele mesmo que fez. Bom, alem
disso ser uma atitude completamente Lamah, o que adianta viver de
aparencia? O gosto vai ser melhor quando a coisa e'feita por vc mesmo e com
muito esforco. Ai vc realmente sente o gosto da vitoria! Mas isso foi mais
um desabafo e serve de conselho para vcs iniciantes. Ah, e pedir ajuda aos
mais experientes nao significa que vc seja um Lamah. Os experientes sempre
iram te ajudar com o maior bom gosto.
Bom, isso serviu de conselho. Isso tudo e' pra explicar que para se
construir um sistema, tem que se ter um projeto antes da pratica. Tah certo
que a parte de codificacao e' a melhor, mas ela sera muito melhor se vc
projeta-la completamente antes. A conclusao para a construcao de um sistema
jah pode ser definida:
Projeto ou Analise do Sistema (Algoritmos e Diagramas) --> Codificacao -->
Teste, Teste e Teste.
Entao, como Dr. Niklaus Wirth (criador da linguagem Pascal) menciounou:
"Programas sao formulacoes concretas de algoritmos abstratos, baseados em
representacoes e estruturas especificas de dados".
E' incrivel como as palavras de um Cientista sao valiosas. Sempre
conversem com Cientistas quando vcs puderem , eles sao a voz da
experiencia :)).
Depois de todo essa "baboseira", podemos definir ( formalmente! ) o que
e' algoritmo:
╔═════════════════════════════════════════════════════════════════════════╗
║ Algoritmo e' a descricao de um padrao de comportamento, expressado em ║
║ temos de um repertorio bem definido e finito de acoes "primitivas", ║
║ das quais damos por certo que elas podem ser executadas. ║
╚═════════════════════════════════════════════════════════════════════════╝
Diante dessa explicacao, observe o seguinte:
"Ir ao supermercado";
"Fazer as compras";
"Pagar os produtos";
"Voltar para casa";
Observe que todas as frases acima sao acoes ( finitas, por sinal ).
Pode-se considerar que cada acao dessa e' um comando e que tem um fim
delimitado pelo ;. Isso e'um exemplo de agoritmo, embora que abstrato. Mas
por incrivel que pareca, algoritmo e' apenas a resolucao de um determinado problema.
Nesse caso, o problema e' fazer as compras. Mas e se surge um incoveniente?
Se, por exemplo, quando ela for pagar as compras ela nao tiver dinheiro
suficiente? Logicamente ela teria que devolver todos os produtos.
Escrevendo um novo algoritmo:
"Ir ao supermercado";
"Fazer as compras";
Se "o dinheiro e' suficiente" entao
"Pagar os produtos"
se nao
"Devolver os produtos"
"Voltar para casa"
Ai nos ja nos deparamos com uma estrutrura condicional. Isso e'
essencial. Vcs vao notar, que ao escrever um programa, vcs imaginaram, na
pratica, varias hipoteses. Por exemplo, se o usuario do seu programa
digitar o CPF errado, certamente vc tera que dar uma aviso a ele, certo?
Pois entao, e' isso!
Pessoal, isso e'so um introducao mesmo, na proxima edicao eu jah vou acabar
essa materia (ao menos espero que sim!), entao, aguarde e confie! Abracao!
Jac{Delpher} ---> qualquer coisa, envie o e-mail p/ javanes@thepentagon.com
CodersZine.═════════════════════════════════
──────────════< ASSEMBLY >════──────────
by cr4sh^0v3
/* Bom, queria comecar agradecendo o convite para participar desta talvez
arrogante, porem acertada e aprovada iniciativa do pessoal do #coders da
BrasIRC. Sem muito tempo, infelizmente (p/ mim, e felizmente p/ vcs) nao
poderei entrar muito em detalhes, mas como sei que para a grande maioria
Assembler eh um bicho de sete cabecas...eu vou fazendo aqui minha parte de
cavaleiro e vou cortando as 6(seis) sobressalentes... aproveitando para
introduzi-los ao mundo binario e as nocoes basicas desta linguagem.
Para comecar, quero deixar claro, que me considero um iniciante nesta
linguagem tb, assim como aprendiz em tudo o resto a que se diz respeito
nesta vida... afinal, a cada dia aprendemos uma nova licao...
Entao, deixemos o "bla bla bla" de lado, e ... COMECEMOS! */
-------------------------------cute here-----------------------------------
Todos nos temos uma certa concepcao sobre o que um computador faz. No
entando trataremos do computador neste artigo, como uma maquina que
manipula bits. Parto desde ja, da ideia de que todos a lerem este artigo
tem uma ideia ainda que vaga sobre o que seria um "BIT".
Um "bit" tem dois estados: ON/OFF, ou LIGADO/DESLIGADO (ou ainda
VERDADEIRO/FALSO), representados por "0"'s e "1"'s. Nao pense em "0" e "1"
como numeros, sao apenas convencoes p/ nomearmos o estado de um "bit". A
memoria no seu computador consiste de uma enorme colecao de "bits", cada um
podendo estar em "0" ou "1" ("on" ou "off").
O centro de seu computador pode ser interpretado, como o coracao dele,
e e' um microprocessador, chamado de 8088 pela Intel (claro que aqui
generalizamos pela grande maioria, ainda que realmente o "batismo" do
"chip" tenha sido feito por ela, o que nao cabe discutirmos aqui...). O que
esse processador faz e' manipular os bits que compoem a memoria. O seu
processador gosta de lidar com bits em grupos, e entao introduziremos aqui
nomes especiais para os dois tamanhos de grupos de bits que satisfazem
usualmente o 8088. Um "byte" refere-se a uma colecao de 8(oito) bits. Um
"word" consiste de 2(dois) bytes, ou consequentemente, 16(dezesseis) bits.
Uma colecao de bits tem um determinado padrao ou modelo, determinado pelo
estado individual de seus bits. Aqui temos alguns modelos tipicos de bytes:
10101010 11111111 00001111
Se voce ja estudou probabilidade, e' facil deduzir que ha 256 modelos
possiveis de um byte. De modo analogo, um "word" pode ter 65,536 modelos
diferentes.
Bem, agora vamos a ideia principal da programacao em Assembler. Voce
esta sentado? :-) Estes modelos de bits podem ser usados para representar
outros conjuntos de coisas, projetando-se cada modelo em um membro do outro
conjunto. Nao parece muito...,mas a IBM faturou BILHOES com essa ideia.
Por exemplo, associando-se os modelos de uma "word" a um conjunto de
INTEIROS, voce pode representar tanto os numeros de 0 a 65535 como os
numeros de -32768 a 32767 , dependendo da associacao exata que voce usar.
Voce pode reconhecer esses intervalos como os intervalos possiveis de
numero de linhas, e dos possiveis valores de uma variavel inteira, em
BASIC; assim tambem como outras situacoes em programacao, e claro... isso
nao e' por acaso. Isso explica de alguma forma esses limites arbitrarios..:
BASIC usa "words" de memoria para guardar numeros de linha e variaveis
inteiras.
Como um outro exemplo, voce poderia associar as formas(ou modelos) que
um byte pode assumir a uma serie de pequenas figuras arbitrariamente
escolhidas que poderiam ser colocadas numa tela de video. Se voce olhar no
Apendice G do seu manual de BASIC, voce notara que ha exatamente 256
caracteres diferentes que podem ser mostrados na sua tela. O seu computador
usa um byte de memoria para informar qual caracter deve ser mostrado, em
cada posicao da tela.
Sem querer me adiantar muito, posso mencionar que ha cerca de 256
operacoes fundamentais que o microprocessador 8088 pode executar. Isso
sugere uma outra associacao que nao cabe agora...,mas deve ser discutida em
detalhes mais adiante, quem sabe na proxima edicao!??
A ideia principal desta parte e' que podemos usar modelos de bits para
representar qualquer coisa que quisermos, e manipulando os modelos de
diferentes formas nos podemos produzir resultados significativos em termos
do que escolhemos representar.
--------------------------------cute here----------------------------------
/* baboseira follows
Chega de chatice,ne!? Fica p/ proxima,... assim que eu for convidado
novamente... e entao posso introduzir-lhes o "Sistema de Notacao Para
Modelos de Bits". Espero que possa ter tirado um pouquinho o medo de
Assembler de voces, ou pelo menos que tenha deixado voces um pouco mais
a vontade quando se tratar sobre os principios da programacao de baixo
nivel. E antes de mais nada, peco aos que se assustaram ainda mais, que
nao desistam, talvez eu nao seja o mais indicado, e alem de tudo... nao
se pode compreender tudo, ainda mais, quando se explica pela metade ;-]
Thanks and Thoughts:
xcaRIOca,X_cAmArO,Rashi,hC,Wiz, e toda a galera do #coders... rZ! */
CodersZine.═════════════════════════════════
──────────════< PASCAL >════──────────
by Mingo
PASCAL, uma linguagem das mais difundidas mundialmente. Com
compiladores para as mais diversas linhas de computadores, incluindo ate
mesmo MAINFRAMES. Criada para o ensino da logica e programacao.
Muito utilizada para o aprendizado principalmente voltado a
conceituacao de linguagem estruturada. Facil de aprender, entender e
depurar. Seus comandos sao baseados em palavras da lingua inglesa.
E' muito recomendado o aprendizado de PASCAL antes de se aprender C e
DELPHI. PASCAL e C sao linguagens muito proximas, principalmente quanto a
estrutura. O DELPHI consiste em uma evolucao do PASCAL.
Os primeiros compiladores de PASCAL para computadores IBM-PC
compativeis deixavam um pouco a desejar. Sendo que, com a evolucao dos
mesmos, em pouco tempo se equipararam com os compiladores C.
Hoje dispomos de diversos compiladores de PASCAL no mercado. O que mais
se destaca e o da BORLAND, porem o mesmo foi descontinuado. Com grande
destaque encontramos tambem o TMT PASCAL (SHAREWARE) com registro pela
internet e o FPK-PASCAL (FREEWARE). Existem compiladores de menor destaque
porem eficientes, como o STONY BROOKY PASCAL+.
Vamos entao a um famoso exemplo:
BEGIN
WRITELN('Alo, Mundo!');
END.
CodersZine.═════════════════════════════════
──────────════< COBOL >════──────────
by X_cAmArO
Wala all! Olha eu aki de novo... maos a obra..
Alguns ja' devem ter pensado:
- Por que aprender Cobol?? Cobol ja morreu!!
Na verdade, nao e' bem assim.
COBOL(COmon Business Orient Language), apesar de ser antigo eh uma
linguagem usada por cerca de 80% das grandes empresas brasileiras, pois tem
muita facilidade em gerenciar grande massa de dados. Ai que chato...
imagine vc, desenvolvendo um simples programinha para gerar relatorios,
cobrando, quem sabe, alguns milhares de reais.. hehe.. acho que exagerei :)
Cobol nao e' bem o meu forte, mas acho que posso passar aguma coisa...
Antes, da pratica, um pouco de historia...
O Cobol apareceu em 1959, gracas ao Cap. Grace Murray Hopper, da
marinha dos EUA. Na epoca queriam uma linguagem que fosse: mutavel (capaz
de suportar mudancas e melhoramentos) e de ser altamente portavel (escrito
para um IBM pudesse tbm rodar em um UNIVAC ou TRS-80 - acho que nao sao da
epoca de vcs, e muito menos da minha ). ;o)
Normalmente,todo programa em COBOL e' dividido em 4 partes, que devem
seguir a seguinte ordem:
IDENTIFICATION DIVISION - Contem o nome do programa, de quem o escreveu, e
mais algumas informacoes opcionais. E' muito simples. So' Program-id e
Author sao obrigatorios.
Identification Division.
Program-Id. Prog00. <-- nome do programa
Author. X_cAmArO. <-- nome do autor
Date-Written. 05-05-97. <-- dia escrito
Date-Compiled. <-- dia compilado, o compilador coloca
Installation. No trabalho. <-- lugar onde foi feito
Security. Prog exemplo p/ o <-- comentario sobre o programa
CodersZine00. <-- comentario sobre o programa
ENVIRONMENT DIVISION - E' formada por duas secoes, a Configuration Section
onde fica o Source-Computer (computador onde foi feito) e Object-Computer
(onde sera usado), servem apenas p/ documentacao e formado tbm pela
Input-Output Section onde sao declarados os arquivos de entrada e saida (p/
o COBOL a impressora eh um arquivo de saida).
Environment Division.
Configuration Section. <-- nome da sessao
Source-Computer. IBM PC.
Object-Computer. IBM PC.
Special-Names. <-- nomes especiais
Decimal-Point Is Comma. <-- define que a casa decimal e'separada
por virgula
DATA DIVISION - Tbm dividida em duas secoes, File Section e Working-Storage
Section. Na File Section, sao definidos os campos e registros dos arquivos
usados. Na Working, sao declarado as variaveis que nao sejam arquivos. Pic
e' uma mascara de entrada (qtdade e numero de caracteres aceitos), Pic 9999
e' igual a Pic 9(4). Para aceitar somente numeros, coloca-se 9, pra letras
e numeros coloca-se X. Ex.: Pic X(12). Nesse exemplo, nao coloquei a File
Section, pois nao declarei arquivos nesse programa.
Data Division.
Working-Storage Section. <-- nome da sessao
77 Num1 Pic 9999.
77 Num2 Pic 9(4).
77 Resul Pic ZZZZZZZ9.
PROCEDURE DIVISION - Contem toda a logica do programa, ou seja, contem a
descricao das intrucoes que serao executadas pelo sistema. Pode ser divida
em paragrafos (sub-rotinas).
Procedure Division.
Inicio.
Display (01, 01) "Digite o primeiro numero: ". <-- exibe na tela
Accept (, ) num1.
Display (02, 01) "Digite o segundo numero: ".
Accept (, ) num2.
Compute <-- permite vc usar sinais aritmeticos
Resul = Num1 + Num2. <-- coloca a soma na variavel resul
Display (04, 03) "A soma e' : ", resul. <-- exibe a variavel
Stop run.
Obs. Para testar, e' so' juntar os exemplos na ordem certa. Nao se esqueca
de manter as colunas e tirar os comentarios. Cole, em um arquivo com
extensao .cob (tipo.. program1.cob).
NUNCA SE ESQUECA!!
Dos pontos nos finais das linhas...
E das regras das colunas:
* 1 a 6, eram usadas p/ identificar as linhas, mas agora, com as
atualizacoes do compilador, elas nao sao mais necessarias, porem, tem que
permanecerem em branco.
* 7, utilizada p/ caracteres especiais:
- (traco) separacao de literais; se a linha de comando nao couber ate'
a coluna 72, na proxima linha colocar um traco e continuar.
* (asterisco) = comentario; colocar asterisco, e escrever o comentario
* 8 a 11 chamadas area A,onde comecam obrigatoriamente o nome das divisoes,
das secoes e dos paragrafos.
* 12 a 72 chamadas area B; o compilador so' reconhece ate essa coluna.
Existem diversos compiladores de Cobol, aki, uso o Microsoft (argh)
Cobol 2.10.
Por enquanto e' so', proxima edicao tem mais..
[]'s a todos do #Federal que tbm sao coders como nos.
CodersZine.═════════════════════════════════
──────────════< C/C++ >════──────────
by xCrown
Primeiramente eu queria agradecer a todos que me cederam um lugar para
colocar minhas ideias para serem passadas para a elite de programadores do
Brasil. Fico muito feliz pelo que este pessoal esta fazendo e espero que
nunca acabe esta rede de fraternidade para contruir um futuro melhor para
todos.
Um pouco sobre a linguagem C.
A linguagem C tem uma longa historia, criada nos laboratorios bell a
a linguagem C teve varios nomes e mutacoes ate chegar no que e' hoje. A
linguagem C surgiu a partir de uma linguagem chamada B (Criada no final dos
anos 60 por Ken Thompson ). O resto desta historia voce pode encontrar em
qualquer livro de linguagem C. Na verdade estou aqui para iniciar o leitor
na linguagem C.
Todos dizem diversas coisas sobre a linguagem C. Alguns dizem C, C++,
Turbo C, etc... Na verdade nao existe um nome altamente apropriado para
esta linguagem. Entre estes nomes muda pouca coisa. Mas vale voce saber o q
voce esta usando.
Entendendo a logica de sintaxe da linguagem C.
Todos dizem q a linguagem C e' um bixo de 7 cabecas. Na verdade todos
que dizem isso ou estao aprendendo ou nao tiveram uma boa orientacao sobre
esta linguagem. Basicamente voce tem que entender q para escrever um
programa voce tem q escrever uma serie de instrucoes para q o computador
execute cada uma delas.
main() <- Cabeca do programa
{
clrscr(); <- instrucao que limpa a tela
printf("Ola mundo... pra variar"); <- Instrucao q exibe uma
mensagem na tela.
return 0;
}
Este e' um programa simples q mostra q a linguagem C nao e'um bixo de 7
cabecas. Este programa esta dividido em cabeca ( "main()" ), chaves onde
as instrucoes sao escritas com "{ }" e as instrucoes q sao delimitadas
pelas chaves. Ha tambem algumas coisas que voce tem que obedecer como
colocar um ";" no final de cada instrucao para que o compilador entenda
que a linha foi terminada.
Agora eu vou explicar a utilidade de cada linha do programa para que
voce entenda melhor.
"main()" -> main() tambem e' uma instrucao, so' que ela funciona
diferente. Ela avisa ao computador onde o programa comeca. MAIN na
verdade significa PRINCIPAL.
Chaves "{ }" -> Sao tambem bastante importantes por que sao elas que
reunem quase todas as instrucoes escritas para o programa. O computador
so consegue ler a instrucao principal ( no caso main() ) e o que esta
dentro das chaves. Se alguma instrucao estiver fora das chaves e
causando um erro. Sendo assim voce tera que colocar todas as suas
instrucoes dentro das chaves.
Quanto as outras instrucoes que ficaram dentro das chaves, sao
instrucoes simples que eu vou explicar na proxima zine.
Ta vendo! Este foi o aspecto mais importante q voce deveria notar na
linguagem C. Nao e' uma coisa monstruosa como todos dizem. E' ate bastante
simples.
Bom, acho que ate aqui ja esta bom. Nao tive muito tempo para elaborar
melhor esta materia e me desculpem os erros de portugues. Na proxima
vou explicar sobre funcoes, comandos, compiladores q podem ser usados e
entrar de cabeca no mundo da criacao de jogos e demos.
Queria novamente agradecer todos os camaradas do #Coders e
principalmente ao X_cAmArO que me cedeu este espaco na Zine.
Aste a proxtche.
E lembrem-se: "Nao programar faz mal a saude."
Caso alguma duvida mande um mail para fenix@netpatos.com.br
CodersZine.═════════════════════════════════
──────────════< DJGPP >════──────────
by xROD
O que e' DJGPP?
DJGPP e' um compilador de C/C++ para DOS, que opera em modo protegido e
e' 32-bits. Esse compilador funciona em DOS e em Linux.
URL: http://www.delorie.com/djgpp/
Por que obter o DJGPP?
Como ja foi dito, ele opera em modo protegido e e' 32-bits.
Mas esse nao e' o principal motivo para obter o DJGPP. O principal
motivo e' que ele e' gratis! Isso e' bom, nao e'? E tem mais: se voce fizer
um jogo com o DJGPP, voce pode vende-lo, independente de voce ter comprado
o DJGPP ou pego de graca na Internet.
Alem disso, a id Software usou o DJGPP para fazer o famoso jogo Quake.
Oba! Onde eu pego esse DJGPP?
O compilador DJGPP e' distribuido em varios FTPs ao redor do mundo
(incluindo dois aqui no Brasil), atraves de varios arquivos, de modo que e'
muito facil pegar os arquivos errados. Mas, para nao se enganar, va ao
endereco http://www.delorie.com/djgpp/zip-picker.html . La voce pode
escolher os itens que voce quer, as linguagens que vai usar, se vai querer
editor (eu recomendo), bibliotecas adicionais, e ainda pode escolher entre
uma grande lista de FTPs. Aperte o botao, e, dentro de instantes, voce vai
ver os arquivos que precisa, com links para o FTP que voce escolheu.
Beleza, ne? Agora e' so pegar os arquivos ( que totalizam
aproximadamente 10 megabytes). Descompactados, sao mais ou menos 20
megabytes.
E agora, o que eu faco com esses arquivos todos?
Eu imagino que voce tenha ou PKUNZIP, ou WinZip, ou UNZIP,certo? Se nao
tem nenhum deles, procure adquirir algum, sao muito importantes.
Siga esses passos para instalar o DJGPP
1. Crie um diretorio (pasta). Por exemplo: C:\DJGPP
2. Agora descompacte todos os arquivos para essa pasta.
Se voce usa PKUNZIP:
PKUNZIP -d arquivo.zip C:\DJGPP
Se voce usa UNZIP:
UNZIP arquivo.zip C:\DJGPP
Se voce usa WinZip, basta sair clicando :)
Sendo que "arquivo.zip" e' o nome do arquivo a descompactar.
3. Pronto para usar? Que nada... Primeiro, e' bastante recomendavel que
voce coloque o DJGPP no PATH do autoexec.bat. Para fazer isso, basta
ver onde tem SET PATH=... e acrescentar C:\DJGPP\BIN. Lembrando,
deve sempre haver um ponto-e-virgula (;) entre um diretorio e outro.
4. Opa, nao feche o autoexec.bat ainda... Para finalizar, voce deve
incluir no autoexec.bat:
SET DJGPP=C:\DJGPP\DJGPP.ENV
5. Reinicie o computador.
Agora tente digitar GCC. Se apareceu a mensagem:
gcc.exe: no input files.
entao pode comecar a comemorar: voce instalou tudo certo. Mas, se nao deu
certo, meus pesames...
Como eu compilo meus programas?
Por enquanto vamos compilar um simples .C:
GCC arquivo.c -o arquivo.exe
Sendo que "arquivo.c" e' o seu codigo-fonte e "arquivo.exe" e' o
arquivo .EXE que sera gerado a partir do seu codigo-fonte.
Quais as diferencas entre o DJGPP e outros compiladores de C?
Vamos tomar como base o Borland C++ 3.1.
Eis algumas diferencas que eu constatei entre o DJGPP e o BC++ 3.1:
Os arquivos .OBJ nao sao de fato .OBJ. Sao .O, e incompativeis com os
arquivos .OBJ. Ou seja, se voce quer compilar qualquer coisa junto com um
.OBJ, simplesmente nao vai dar certo, porque o DJGPP so aceita .O.
Do mesmo modo, no subdiretorio LIB voce nao vai encontrar arquivos com
extensao .LIB, e sim com extensao .A. Ou seja, o DJGPP tambem nao vai
aceitar as .LIBs do seu outro compilador.
No DJGPP ha algumas LIBs e comandos novos. Um exemplo de comando novo:
_go32_dpmi_set_protected_mode_interrupt_vector; assustador, nao? :). Mas
fique calmo, nao sao todos os comandos novos que sao assim.
Voce nao pode utilizar asm { ... }. Em vez disso, voce deve utilizar
__asm__ { ... }. Parece simples, nao? Mas nao e'... Provavelmente voce esta
acostumado a utilizar a sintaxe de Assembly da Intel, que e' a utilizada em
programas como TASM, MASM, NASM, etc. Mas o ASM do DJGPP utiliza a sintaxe
AT&T, que tem algumas grandes diferencas.
Os arquivos de C++ agora tem extensao .CC. Mas isso nao quer dizer
nada, voce pode gravar como .CPP, nao tem problema... So muda mesmo o nome,
o resto e' igual (formato, comandos, etc.).
Divirta-se!
/*
* Copyright (C) 1998 - "Rodrigo Rocha Gomes e Souza" <rod@svn.com.br>
* xROD do #Coders. (BrasIRC)
* Todos os direitos reservados - Nao modifique! hehehehehe
*/
#include <stdio.h>
void main() {
printf("Alo, Mundo!\n");
}
CodersZine.═════════════════════════════════
──────────════< VISUAL C++ >════──────────
by xCaption
Apresentando o Visual C++
O Visual C++ 5.0 e' uma ferramenta de programacao em 32-Bit, com
ambiente de desenvolvimento integrado(IDE) rodando em Windows. Seu ambiente
integra praticamente todos os requisitos para a geracao de um aplicativo
Windows. Em sua janela de projeto estao o ClassWiew - Manipula as classes
e/ou funcoes definidas em seus projetos, como uma hierarquia; O FileView -
que exibe os arquivos de projetos; O ResourceView - Manipula os recursos de
seu projeto, como menus, icones e caixas de dialogos; InfoWewer - O Sumario
da ajuda on-line interna do VC++. O VC++ conta com a biblioteca MFC, que
prove uma aproximacao orientada a objeto para desenvolvimento de Windows
que pode salvar tempo, e tambem pode fazer o desenvolvimento processar
muito menos doloroso que e' quando voce usa a API no osso. Em nosso caso,
iremos estudar no osso, nao MFC por enquanto.
Criando o Projeto Generic
A partir do IDE do VC++, no menu File clique sobre New ao aparecer a
caixa de dialogo New clique na guia Project e selecione Win32 Application
da lista, na caixa Project Name entre com o nome do nosso projeto: Generic,
na caixa Location entre com o caminho onde o diretorio base de projeto(como
mesmo nome do projeto) vai ficar e clique em OK.
Neste ponto, com projeto vazio criado precisamos agora adicionar os
arquivos de projeto, porem antes vamos dar uma olhada no processo de
criacao de um .EXE no Windows:
Todo o codigo fonte (.c/.cpp) e' compilado em .obj's e o script de
recursos (.rc) e' compilado em .res. O .rc e' opcional voce pode criar um
.exe somente com codigo sem recursos.
Implementando o Projeto
Adicionando o fonte
Iniciando
Voce pode ter varios arquivos de fonte em seus projetos, mas neste caso
teremos apenas um.
Para incluir o arquivo de codigo fonte em seu projeto no menu File
clique sobre New ao aparecer a caixa de dialogo New clique na guia Files e
selecione C++ Source File (tanto para c ou c++), na caixa Filename digite
main.c e clique em OK. O VC++ criou o arquivo vazio e adicionou sua
referencia ao projeto, como voce pode ver na janela de projeto na guia
FileView, e tambem abriu o arquivo para voce, vamos entao ao codigo:
Incluindo cabecalhos(Headers).
Temos que incluir o windows.h, esse header e' requerido para os
programas escritos para windows, nele e em outros incluidos por ele, contem
todos os prototipos das funcoes, tipos de dados definidos, constantes,
entre outras coisas que vamos utilizar.
tambem incluimos o resource.h que e' o header que contem as constantes
dos recursos. Para nos referenciarmos no codigo fonte a um recurso, este
arquivo e' requerido.
#include <windows.h>
#include "resource.h"
Declarando prototipos.
Nesse caso temos somente um prototipo: o da funcao de janela, a qual o
Windows chama quando ocorre algum evento, como veremos mais adiante.
LRESULT WINAPI MainWndProc (HWND, UINT, WPARAM,LPARAM);
Declarando variaveis globais.
A unica variavel global que iremos declarar neste modulo e' ghInstance
que contem o valor da instancia do aplicativo. Cada copia da mesma
aplicacao que e' executada recebe uma instancia diferente.
HANDLE ghInstance;
A Funcao WinMain.
Esta funcao e' o ponto de entrada do programa, e' chamada pelo sistema
quando inicializada o aplicativo. Seus parametros sao:
hInstance -Identifica a instancia corrente do aplicativo.
hPrevInstance -Identifica a instancia anterior do aplicativo. Em um
aplicativo Windows de 32-Bit esse parametro e' sempre nulo, o motivo dele
estar ai e manter a compatibilidade com aplicativos escritos para outros
ambientes como o Windows 3.1.
lpCmdLine - Ponteiro para uma string que especifica a linha de comando
para a aplicacao, excluindo o nome de programa.
nCmdShow - Especifica como a janela deve ser exibida de acordo com
constantes definidas em windows.h
int PASCAL WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR
lpszCmdLine,int nCmdShow )
{
Quando nosso aplicativo iniciar ele devera mostrar uma janela simples
na tela, para isso devemos primeiramente registrar a nossa janela para
depois criarmos e exibi-la na tela. Declaramos aqui as variaveis locais de
WinMain, sao elas:
wc - Que sera preenchida para o registro da janela.
msg - Usada no loop de mensagens.
hWnd - Ira receber um numero que identifica a janela criada (Handle).
WNDCLASS wc;
MSG msg;
HWND hWnd;
Podemos agora preencher a estrutura da classe de janela (nao confunda
classe de janela com classes de C++), destacando alguns itens como:
lpszClassName - String com o nome da classe da janela, este pode ser
definido por voce. Por exemplo o nome da classe da janela principal do
Microsoft Word e' OpusApp.
lpfnWndProc - Ponteiro para a funcao de janela
hInstance - Handle da instancia do aplicativo.
hIcon - Handle do icone para a janela, conseguido com uma chamada e'
LoadIcon que veremos mais adiantes nos recursos.
wc.lpszClassName = "GenericAppClass";
wc.lpfnWndProc = MainWndProc;
wc.style = CS_OWNDC | CS_VREDRAW | CS_HREDRAW;
wc.hInstance = hInstance;
wc.hIcon = LoadIcon( NULL, IDI_APPLICATION );
wc.hCursor = LoadCursor( NULL, IDC_ARROW );
wc.hbrBackground = (HBRUSH)( COLOR_WINDOW+1 );
wc.lpszMenuName = "";
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
Com a estrutura preenchida registramos a janela:
RegisterClass( &wc );
Fazemos uma copia da variavel da instancia da local para a global.
ghInstance = hInstance;
Criamos a janela e o seu handle e' atribuido a hWnd.
hWnd = CreateWindow("GenericAppClass",
"Generic",
WS_OVERLAPPEDWINDOW|WS_HSCROLL|WS_VSCROLL,
0,
0,
CW_USEDEFAULT,
CW_USEDEFAULT,
NULL,
NULL,
hInstance,
NULL
);
Finalmente exibimos a janela:
ShowWindow( hWnd, nCmdShow );
E entramos no loop de mensagens onde os eventos serao captados e
enviados a funcao de janela.
while( GetMessage( &msg, NULL, 0, 0 ) ) {
DispatchMessage( &msg );
}
Quando o ponto de execucAo chega aqui a sua funcao de janela ou a
padrao recebeu uma mensagem WM_QUIT e fez GetMessage retornar 0 e o loop de
mensagens parar. Entao e' retornado ao sistema o wParam de msg, que no caso
e' o codigo de saida do programa.
return msg.wParam;
}
A Funcao De Janela (MainWndProc)
Esta e'a funcao que e' chamada a cada evento ocorrido na janela que ela
esta associada. E' possivel por exemplo associar uma funcao de janela a uma
janela ja criada de um aplicativo fazendo com que voce intercepte os
eventos antes que o aplicativo fique sabendo que ocorreu, alias e' mais ou
menos assim que o XCaption trabalha. Seus parametros sao:
hWnd - Handle da janela.
msg - Especifica a mensagem
wParam - Informacao adicional da mensagem, o valor depende da mensagem.
lParam - Informacao adicional da mensagem, o valor depende da mensagem.
LRESULT CALLBACK MainWndProc( HWND hWnd, UINT msg, WPARAM wParam,
LPARAM lParam)
{
Faremos com que quando a janela for exibida um texto colocado em sua
area. Poderiamos simplesmente chamar a funcao da API TextOut para escrever
o texto e pronto mas nao e' tao simples. Tudo o que e' desenhado na janela
e' apagado quando esta se sobreposta por outra. Quando ela e' reexibida nao
sobra mais nada. Porem quando isso ocorre o windows causa um evento de
redesenho enviando a janela a mensagem WM_PAINT. Processando essa mensagem,
podemos manter a vida do que ha dentro da janela. Declaramos duas
variaveis:
ps - Que contem informacoes para o desenho
hdc -que contem o contexto de dispositivo: dados que define os objetos
graficos, seus atributos associados, e os modos graficos que afetam
producao em um dispositivo
szMsg - Buffer que vai receber a string dos recursos.
PAINTSTRUCT ps;
HDC hDC;
CHAR szMsg[255];
Das mensagens recebidas fazemos uma selecao das que nos interessa com
um switch
switch( msg ) {
Para pegar o texto que esta nos recursos chamamos LoadString passando o
identificador IDS_HELLO que e' definido no resource.h como sera visto
adiante. A janela precisa ser repintada, nosso desenho e' apenas um texto,
para isso chamamos TextOut com o contexto de dispositivo conseguido com
BeginPaint e o liberamos com a chamada a EndPaint.
case WM_PAINT:
LoadString ( ghInstance , IDS_HELLO , szMsg, sizeof(szMsg));
hDC = BeginPaint( hWnd, &ps );
TextOut( hDC, 10, 10, szMsg, lstrlen(szMsg) ); EndPaint( hWnd, &ps );
break;
Quando a janela for fechada nossa aplicacao termina, entao devemos
chamar PostQuitMessage para terminar o loop de mensagens.
case WM_DESTROY:
PostQuitMessage( 0 );
break;
Aqui deixamos a funcao de janela padrao cuidar das mensagens nao
processadas.
default:
return( DefWindowProc( hWnd, msg,wParam, lParam ));
}
Retornamos 0 quando a mensagem for usada e nao necessitar retorno
especial.
return 0;
}
Criando os Recursos
Iniciando
Nossa primeira aplicacao nao vai possuir muitos recursos, mas afinal o
que sao recursos?
Todos os dados adicionais binarios que voce inclui para o seu
executavel pode ser considerado recurso. Os recursos mais comuns do Windows
sao icones, cursores, menus , caixas de dialogo , bitmaps , fontes,
aceleradores, tabelas de string, dados de versao, alem de recursos
definidos pelo o usuario, como por exemplo um .wav contendo som ou um .avi
contendo animacao.
Um dos maiores beneficios dos recursos e' o fato de que voce pode
alterar muitas coisas, incluindo as strings sem mexer em seu codigo fonte.
Tornando facil a producao de um aplicacao com diferentes idiomas.
Para criar um recurso no menu File clique sobre New ao aparecer a caixa
de dialogo New clique na guia Files e selecione Resource Script, na caixa
Filename digite resource.rc e clique em OK. O VC++ criou o arquivo vazio e
adicionou sua referencia ao projeto, (alem de ter criado o arquivo
resource.h que vai conter todas as definicoes de constantes de recursos que
serao compartilhadas pelo resource.rc e o main.c) como voce pode ver na
janela de projeto na guia FileView, e tambem abriu o arquivo para voce,
porem voce deve fecha-lo pois iremos trabalhar diretamente na janela de
projetos no ResourceView.
Inserindo uma tabela de Strings
Vamos agora implementar a unica string que o aplicativo usa nos
recursos: IDS_HELLO, a que nos referenciamos no codigo fonte, para isso no
menu Insert clique em Resource, quando a caixa de dialogo Insert Resource
aparecer, selecione String Table da lista e clique em New. O editor de
strings e' exibido, clique com o botao direito na primeira linha, ao
aparecer o menu clique sobre Properties, na caixa de dialogo String
Properties, em ID, digite IDS_HELLO e logo depois na caixa Caption digite:
"Hello Word, hello Excel!" e clique no X para fechar a janela de
propriedades.
Vendo realmente o que foi feito
O VC++ fez quase todo o trabalho para voce nos recursos, porem voce
pode ver o que ocorreu e ate modificar manualmente todo o trabalho, para
isso no menu File clique sobre Open selecione os arquivos: resource.rc e
resource.h e selecione Text em Open As, clique em Open(Abrir).
Compilando, Ligando e Testando
Talvez voce se questione porque estes tres passos sao apresentados
juntos? A resposta e': sao feitos um atras do outro e voce nao precisa se
preocupar, desde que o seu codigo nao tenha erros de compilacao ou de
ligacao. Se isso ocorrer verifique a listagem, posteriormente veremos a
depuracao de programas. Bem, pressione F5.
CodersZine.═════════════════════════════════
──────────════< VISUAL BASIC >════──────────
by Rashi
O Visual Basic e' um ambiente de desenvolvimento de aplicativos para
Windows amigavel e facil de aprender, utilizando uma das linguagens de
programacao mais conhecidas em todo o mundo. Quando foi criado, seu
objetivo era permitir que programadores que nao conheciam a linguagem C
pudessem desenvolver aplicativos para Windows. Desnecessario dizer que foi
muito bem aceito.
Hoje, em sua versao 5, este ambiente conseguiu se firmar como um dos
melhores ambientes de desenvolvimento do mercado, contando com recursos que
antes so eram conseguidos mediante programacao em C. Alem dos programas
convencionas, o VB pode tambem criar controles e bibliotecas ActiveX, dando
maior liberdade ao desenvolvedor.
O Visual Basic nao e' 100% orientado a objetos, mas sua base nessa area
ja e' bastante extensa. Ele possui varios objetos, tanto internos a seu
ambiente quanto de outras bibliotecas e aplicativos, e tambem permite que
criemos nossos proprios objetos, recurso implantado na versao 4. A versao 5
trouxe outro beneficio ao desenvolver: a criacao de controles ActiveX, que
podem ser utilizados em qualquer aplicativo que suporte esta tecnologia,
inclusive paginas da Web.
O objeto mais utilizado no VB e' o form. E'este objeto que usamos, na
maioria das vezes, para criar a interface com o usuario. Um programa em VB
pode ter tanto um como varios objetos form; e, neste objeto, sao inseridos
os controles que serao utilizados, tais como botoes de comando, caixas de
texto, etc. A criacao de um programa basico em VB, tal como cadastro de
clientes, e' facil. Os objetos possuem propriedades, metodos e eventos
proprios. O VB trabalha com projetos, que nada mais sao dos que os
programas em sim seus forms, modulos e demais arquivos e objetos.
Na proxima edicao desse zine, veremos quais os tipos de dados com os
quais o VB trabalha, o que sao propriedades, eventos e metodos e
comecaremos a montar nosso primeiro programa no qual, passo a passo, serao
mostrados os recursos dessa linguagem.
CodersZine.═════════════════════════════════
──────────════< VISUAL BASIC COM WINSOCK >════──────────
by Hammett
Hey programadores, iniciantes na area ou curiosos. Sou um novo membro e
estarei enviando materias sobre programacao winsock e programacao para
acesso a dados SQL Server 6.5/Access.
Nao sei se o que vou mandar esta muito facil ou muito dificil,
portanto, manifeste sua opniao. 8)
Microsoft Winsock Control
Antes de cair com a cara na API da winsock.dll, vamos primeiro utilizar
o winsock control da microsoft porque sera de mais facil manuseio, alem
disso, o winsock funciona muy bien com Proxy ou acesso direto, no caso da
API, pra configura-la pra acessar o proxy..... cara..... melhor usar o
winsock control. 8)
O winsock control e' uma refinacao dos metodos mais usados para
utilizacao dos sockets do windows. Conta com o metodos e propriedades mais
usados como Accept, Connect, Send, RemoteHost.
Para iniciarmos com essa pequena experiencia, vamos utilizar o controle
para uma aplicacaozinha de check e-mail.
Aqui esta o codigo do frmCheckEmail.frm, recorte e cole-o no bloco de
notas e salve-o como frmCheckEmail.frm
VERSION 5.00
Object = "{248DD890-BB45-11CF-9ABC-0080C7E7B78D}#1.0#0"; "MSWINSCK.OCX"
Begin VB.Form frmCheckEmail
BorderStyle = 3 'Fixed Dialog
Caption = "Check e-mail 1"
ClientHeight = 4245
ClientLeft = 3075
ClientTop = 1740
ClientWidth = 4155
BeginProperty Font
Name = "Tahoma"
Size = 8.25
Charset = 0
Weight = 400
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
LinkTopic = "Form1"
MaxButton = 0 'False
MinButton = 0 'False
ScaleHeight = 4245
ScaleWidth = 4155
StartUpPosition = 2 'CenterScreen
Begin MSWinsockLib.Winsock Winsock1
Left = 120
Top = 3660
_ExtentX = 741
_ExtentY = 741
_Version = 327681
End
Begin VB.CommandButton Command2
Cancel = -1 'True
Caption = "Sair"
Height = 435
Left = 2160
TabIndex = 10
Top = 3720
Width = 1215
End
Begin VB.CommandButton Command1
Caption = "&Aguardar"
Height = 435
Left = 780
TabIndex = 9
Top = 3720
Width = 1215
End
Begin VB.Frame Frame1
Caption = "Configuracoes:"
Height = 3435
Left = 120
TabIndex = 0
Top = 120
Width = 3915
Begin VB.TextBox Text1
Height = 315
IMEMode = 3 'DISABLE
Left = 360
TabIndex = 11
Text = "pop.sao.nutecnet.com.br"
Top = 2220
Width = 3075
End
Begin VB.TextBox txtTempo
Height = 315
Left = 2100
MaxLength = 2
TabIndex = 7
Text = "05"
Top = 2940
Width = 375
End
Begin VB.Frame Frame2
Height = 75
Left = 180
TabIndex = 5
Top = 2700
Width = 3555
End
Begin VB.TextBox txtPass
Height = 315
IMEMode = 3 'DISABLE
Left = 360
PasswordChar = "*"
TabIndex = 4
Text = "naointeressa"
Top = 1440
Width = 3075
End
Begin VB.TextBox txtLogin
Height = 315
Left = 360
TabIndex = 2
Text = "hammettwhom"
Top = 660
Width = 3075
End
Begin VB.Label Label5
AutoSize = -1 'True
BackStyle = 0 'Transparent
Caption = "Pop Server:"
Height = 195
Left = 240
TabIndex = 12
Top = 1980
Width = 855
End
Begin VB.Label Label4
AutoSize = -1 'True
BackStyle = 0 'Transparent
Caption = "minutos."
Height = 195
Left = 2580
TabIndex = 8
Top = 3000
Width = 615
End
Begin VB.Label Label3
AutoSize = -1 'True
Caption = "Verificar email a cada "
Height = 195
Left = 480
TabIndex = 6
Top = 3000
Width = 1560
End
Begin VB.Label Label2
AutoSize = -1 'True
BackStyle = 0 'Transparent
Caption = "Password:"
Height = 195
Left = 240
TabIndex = 3
Top = 1200
Width = 750
End
Begin VB.Label Label1
AutoSize = -1 'True
BackStyle = 0 'Transparent
Caption = "Username:"
Height = 195
Left = 240
TabIndex = 1
Top = 420
Width = 780
End
End
Begin VB.Timer Timer1
Left = 3600
Top = 3660
End
End
Attribute VB_Name = "frmCheckEmail"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Option Explicit
' Geralmente a porta do servidor POP e' 110, mas se um dia mudar, mude aqui
Private Const PopPorta As Byte = 110
Private Sub Command1_Click()
Me.WindowState = vbMinimized
Timer1.Enabled = True
End Sub
Private Sub Command2_Click()
Unload Me
End Sub
Private Sub Verificar(sServer As String)
On Error GoTo Manipular
' -------------------------
' Primeiro Passo: A CONEXAO
' -------------------------
' Inicia Winsock
Winsock1.Close
DoEvents
Winsock1.Connect sServer, PopPorta
DoEvents
Problemas:
Exit Sub
Manipular:
Select Case MsgBox("Ocorreu um erro inesperado." &
vbNewLine & vbNewLine & Err.Number & vbNewLine & vbNewLine &
Err.Description & vbNewLine & vbNewLine & "Deseja tentar novamente?",
vbQuestion + vbAbortRetryIgnore, "Erro")
Case vbAbort
Resume Problemas
Case vbRetry
Resume
Case vbIgnore
Resume Next
End Select
End Sub
Private Sub Timer1_Timer()
Me.Caption = "Verificando mensagens..."
Call Verificar(Text1.Text)
End Sub
Private Sub txtTempo_LostFocus()
On Error Resume Next
If Not IsNumeric(txtTempo.Text) Then
MsgBox "Entre com um valor numerico.", vbInformation, "Erro"
txtTempo.SetFocus
Exit Sub
End If
' 1 = 1000
' 60 = 60000
Timer1.Interval = Val(txtTempo.Text) * 60000
End Sub
Private Sub Winsock1_Close()
Me.Caption = "Check e-mail 1"
End Sub
Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Dim sRetorno As String
Dim iPos As Integer
Static TotalMens As String
Static BaixandoMsg As Integer
Static sInco As String
Winsock1.GetData sRetorno, vbString
' Esse pequeno truque e' para evitar perda da integridade
' das respostas do servidor devido ao delay da internet
If Right(sRetorno, 2) <> vbNewLine Then
sInco = sInco & sRetorno
Exit Sub
Else
sRetorno = sInco & sRetorno
sInco = ""
End If
Select Case UCase(Left(sRetorno, 3))
Case "+OK"
' Se o server respondeu um +OK, entao tudo bem, analizemos o que mais ELE
' disse, porem como nem todos respondem igualmente, vamos buscar por
' palavras chaves deles.
If InStr(4, sRetorno, "starting", vbTextCompare) > 0 Then
' -----------------------------
' Segundo Passo: ENVIO DO LOGIN
' -----------------------------
Winsock1.SendData "user " & txtLogin.Text & vbCrLf
DoEvents
ElseIf InStr(4, sRetorno, "password required", vbTextCompare) > 0 Then
' ---------------------------
' Terceiro Passo: A SENHA !!!
' ---------------------------
Winsock1.SendData "pass " & txtPass.Text & vbCrLf
DoEvents
ElseIf InStr(4, sRetorno, txtLogin.Text & " has", vbTextCompare) > 0 Then
' -------------------------------
' FINALE: Descarregue os headers
' -------------------------------
iPos = InStr(4, sRetorno, "has", vbTextCompare)
iPos = iPos + 4
TotalMens = ""
Do
If Not IsNumeric(Mid(sRetorno, iPos, 1)) Then Exit Do
TotalMens = TotalMens & Mid(sRetorno, iPos, 1)
iPos = iPos + 1
Loop
If Val(TotalMens) = 0 Then
Winsock1.Close
Me.Caption = "Check e-mail 1"
DoEvents
Exit Sub
Else
BaixandoMsg = 1
Me.Caption = "Baixando cabeþalho " & BaixandoMsg
Winsock1.SendData "Top " & BaixandoMsg & " 15" & vbCrLf
DoEvents
End If
End If
Case "FRO"
Load frmNews
frmNews.Text1.Text = sRetorno
frmNews.Parsing
BaixandoMsg = BaixandoMsg + 1
If BaixandoMsg > Val(TotalMens) Then
Winsock1.Close
DoEvents
frmNews.Show
Me.Caption = "Check e-mail 1"
Exit Sub
Else
Me.Caption = "Baixando cabeþalho " & BaixandoMsg
Winsock1.SendData "Top " & BaixandoMsg & " 15" & vbCrLf
DoEvents
End If
Me.Enabled = False
Case Else
'
' Se nao respondeu +OK e' que algo esta errado
'
'
Me.Caption = "Check e-mail 1"
MsgBox "Resposta do servidor " & vbNewLine & vbNewLine & sRetorno &
vbNewLine & vbNewLine & "Operacao Cancelada.", vbInformation, "Erro"
Winsock1.Close
DoEvents
Exit Sub
End Select
End Sub
Aqui esta o codigo do frmNews.frm, recorte e cole-o no bloco de notas e
salve-o como frmNews.frm
VERSION 5.00
Object = "{6B7E6392-850A-101B-AFC0-4210102A8DA7}#1.2#0"; "COMCTL32.OCX"
Begin VB.Form frmNews
AutoRedraw = -1 'True
BorderStyle = 3 'Fixed Dialog
Caption = "Check Email Funciona !!!"
ClientHeight = 3435
ClientLeft = 1935
ClientTop = 1530
ClientWidth = 6705
BeginProperty Font
Name = "Tahoma"
Size = 8.25
Charset = 0
Weight = 400
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
LinkTopic = "Form1"
MaxButton = 0 'False
MinButton = 0 'False
ScaleHeight = 3435
ScaleWidth = 6705
StartUpPosition = 2 'CenterScreen
Begin VB.TextBox Text1
Height = 2475
Left = 120
MultiLine = -1 'True
ScrollBars = 3 'Both
TabIndex = 3
Top = 3480
Width = 6435
End
Begin VB.CommandButton Command1
Caption = "OK"
Default = -1 'True
Height = 435
Left = 2640
TabIndex = 2
Top = 2940
Width = 1335
End
Begin ComctlLib.ListView ListView1
Height = 2475
Left = 120
TabIndex = 0
Top = 360
Width = 6435
_ExtentX = 11351
_ExtentY = 4366
View = 3
LabelWrap = -1 'True
HideSelection = 0 'False
_Version = 327682
ForeColor = -2147483640
BackColor = -2147483643
BorderStyle = 1
Appearance = 1
BeginProperty Font {0BE35203-8F91-11CE-9DE3-00AA004BB851}
Name = "Tahoma"
Size = 8.25
Charset = 0
Weight = 400
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
NumItems = 2
BeginProperty ColumnHeader(1) {0713E8C7-850A-101B-AFC0-4210102A8DA7}
Key = ""
Object.Tag = ""
Text = "De:"
Object.Width = 3882
EndProperty
BeginProperty ColumnHeader(2) {0713E8C7-850A-101B-AFC0-4210102A8DA7}
SubItemIndex = 1
Key = ""
Object.Tag = ""
Text = "Assunto:"
Object.Width = 6174
EndProperty
End
Begin VB.Label Label1
AutoSize = -1 'True
Caption = "Mensagens:"
Height = 195
Left = 120
TabIndex = 1
Top = 120
Width = 870
End
End
Attribute VB_Name = "frmNews"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Option Explicit
Private Sub Command1_Click()
Unload Me
End Sub
Private Sub Form_Load()
ListView1.ListItems.Clear
End Sub
Private Sub Form_Unload(Cancel As Integer)
frmCheckEmail.Enabled = True
End Sub
Public Sub Parsing()
On Error Resume Next
Dim iIni As Integer, iFim As Integer
Dim lista As ListItem
Dim strString As String
iIni = InStr(1, Text1.Text, "From:", vbTextCompare)
iFim = InStr(iIni + 1, Text1.Text, Chr(13), vbTextCompare)
If iIni > 0 Then
Set lista = ListView1.ListItems.Add(, , Mid(Text1.Text, iIni + 6, iFim -
(iIni + 7)))
iIni = InStr(1, Text1.Text, "Subject:", vbTextCompare)
iFim = InStr(iIni + 1, Text1.Text, Chr(13), vbTextCompare)
lista.SubItems(1) = Mid(Text1.Text, iIni + 8, iFim - (iIni + 8))
End If
Text1.Text = ""
End Sub
Crie um novo projeto, adicione o controle Winsock e o Common Controls.
Adicione estes dois formularios.
O programa e' simples, apenas conecta no servidor pop, loga-se com seu
username e password, verifica se ha mensagens. Se sim, puxa os headers, faz
um parsing para pegar o nome de quem mandou e o assunto.
Qualquer duvida, estarei respondendo na proxima edicao.
[]'s !!!
Hammett
hammett@thepentagon.com
http://www.geocities.com/Hollywood/Set/2008/activemenu.html
UIN 1223824
CodersZine.═════════════════════════════════
──────────════< DELPHI >════──────────
by Progman
Ai galera !!!!!
1. Aprendendo
2. Dicas
1 - Aprendendo...
== Para ler esta Secao... ==
Fiz esta secao nao pensando exclusivamente em pessoas que conhecem o
delphi, mas em pessoas que estejam interessadas em programar esta
maravilhosa linguagem da Borland. Nao nego que um pequena nocao em
programacao ira ajudar muito a entender o que eu coloquei aqui. O exemplo
e' uma boa forma de aprender sobre um comando, por isso a cada exemplo voce
encontrara informacoes sobre cada comando do mesmo.
== Comecando... ==
== PARTE I - Introducao a linguagem ==
== Variaveis ==
Talvez programadores oriundos de outras linguagens tenham certa
dificuldade para se acostumar com os padroes delphi. A declaracao de
variaveis e seu uso, provavelmente parecera chato para programadores Visual
Basic. Vamos a algumas regras praticas:
1.Nao e'possivel declarar variaveis em qualquer lugar, apenas no inicio
do procedimento.
2.Os tipos de dados Delphi nao sao compativeis (como no VB), por
exemplo, voce nao pode multiplicar a string "X" pela string "Y", mas sim
transforma-las em numeros inteiros e depois multiplica-los, veja:
Z := StrToInt(X) * StrToInt(Y);.
Nem mesmo numeros inteiros sao compativeis com reais.
== Sinal de igual ==
Nao use o sinal de igual para atribuir valores(como em grande parte das
linguagens) mas sim ":=" como na linha abaixo:
i := 0;
O sinal de igual e' usado apenas para comparacao como em comandos "If",
veja:
If i = 0 then
ShowMessage('O valor de i e' 0');
else
ShowMessage('O valor de i nao e' 0';
Note que nao se usa o EndIf como no caso do Visual Basic, por
exemplo... Mas pode-se usar o begin e end para determinar o inicio e o fim
como em:
if i = 0 then
begin
ShowMessage('O valor de i e' 0');
ShowMessage('Foi usado Begin e End porque foram utilizadas duas linhas');
end
else
ShowMessage('O valor de i nao e' 0');
Quando se usa uma unica linha nao ha necessidade de usar Begin e End.
- IMPORTANTE -
Voce deve ter notado que em Delphi nao se usam aspas duplas ("), mas
aspas simples ('), ou apostrofo, como preferir. Tambem e' usado ponto e
virgula (;) no final de cada comando (mas nao nos que terminam com comandos
como If. Mas lembre-se que NaO se deve usar ponto e virgula antes de else.
Outro motivo pelo qual no final de cada declaracao usa-se o ponto e
virgula e' para mostrar que acabou. Por esta razao pode-se continuar o
comando na linha de baixo (menos partir strings ao meio), veja:
Estaria CORRETO:
MessageDlg ('Esta e' uma mensagem!',
mtinformation, [mbok], 0);
Mas estaria INCORRETO:
MessageDlg ('Esta e' uma
mensagem!', mtinformation, [mbok], 0);
Se for necessario use:
MessageDlg ('Esta e' uma' +
+ ' mensagem!', mtinformation, [mbok], 0);
Isso e' correto.
== Comentarios ==
Os comentarios podem estar entre chaves:
{Este e' um comentario que pode estar
em mais de uma linha};
entre sinais de parenteses e asterisco, como o mostrado abaixo:
(* este e' um comentario
que pode estar em mais de uma linha
ate que seja colocado o sinal de asterisco e fecha parenteses *)
Ou pode estar depois de duas barras, para comentarios rapidos de apenas uma
linha, veja:
// Este comentario nao pode passar de uma linha...
== Operadores ==
Eles sao:
* - Multiplicacao aritmetica.
/ - Divisao de numeros que obtem um numero real (exemplo: 5/2 = 2.5).
div - Divisao de numeros que obtem um numero inteiro (exemplo: 5/2 = 2).
+ - Adicao.
- - Subtracao.
= - Igual.
<> - Diferente.
> - Maior.
>= - Maior ou igual.
< - Menor.
<= - Menor ou igual.
Exemplo:
Form1.Canvas.TextOut (1, 1, IntToStr((2 * 5) div 3));
Form1: Nome do formulario;
Canvas: Propriedade (nao apenas do formulario) relacionada com desenho.
Neste caso ela e' usada para escrever no formulario (com o TextOut), algo
como o print do Visual Basic. Sua cor de fundo padrao e' branca, mas e'
possivel muda-la acessando a propriedade brush. O primeiro parametro e' o
left, o segundo e' o top e o terceiro e' o texto a ser escrito.
IntToStr : Transforma um inteiro em caracteres ( como ja foi dito
anteriormente, o Delphi nao possui compatibilidade entre Integers e
Strings, a nao ser que sejam usadas Variants).
Iniciantes:
Para quem ainda nao esta integrado com programacao aqui vao alguns
conceitos:
Parametros: Sao "valores extras", colocados entre parenteses para fornecer
outras informacoes ao metodo ( function ou procedure ). No exemplo
mostrado, a funcao precisa dos parametros inteiros (que foram determinado
como 1 neste caso) para saber a que distancia da margem esquerda e o topo,
respectivamente;
Left: Valor inteiro que diz a distancia ate o canto esquerdo de um objeto;
Top: Valor inteiro que diz a distancia ate o topo de um objeto;
2 - Dicas...
2.1. Usando funcoes externas (de DLLs)...
Usar funcoes externas, de uma ou mais DLLs e' muito simples, basta
declara-las da seguinte forma:
function NomeDaFuncao(Parametros: Tipo): TipoRetorno; stdcall; external
'NomeDaDLL';
Voce pode ver o nome de uma funcao da DLL na Visualizacao Rapida do
Windows (se esta estiver sido instalada), para isso encontre o arquivo DLL,
clique nele com o botao direito do mouse e escolha visualizacao rapida.
2.2. Manipulando "Application"...
A classe TApplication proporciona muitas manipulacoes uteis do aplicativo
como um todo. Por exemplo, caso voce queira que quando um aplicativo for
minimizado apareca a hora atual no titulo da barra de tarefas, e quando ele
for restaurado nao apareca, use o seguinte codigo no evento OnLoad do
formulario, por exemplo:
Application.OnMinimize := ShowDate;
Application.OnRestore := NShowDate;
procedure ShowDate;
begin
TForm1.Timer1Timer(Sender);
Timer1.Enabled := True;
end;
procedure NShowDate;
begin
Timer1.Enabled := False;
Application.Title := 'Titulo do Aplicativo';
end;
Este exemplo considera que o aplicativo possua um relogio que atualiza de
tempos em tempos (a cada 250 milesimos de segundo por exemplo). Este e'
desabilitado quando o formulario e' restaurado.
2.3. Undo na caixa de texto (Memo)...
Use o seguinte codigo para Desfazer a ultima acao em uma caixa de Texto
(Memo):
Memo1.Perform(EM_UNDO, 0, 0);
o valor retornado de Memo1.Perform(EM_CANUNDO, 0, 0) sera diferente de zero
se o comando de Desfazer estiver disponivel.
2.4. Pegando a posicao do cursor...
Use o seguinte codigo para ver a posicao do cursor na tela, ele e' muito
util quando o evento usado nao possui como parametros "X" e "Y":
procedure GetPosition (var X; var Y);
var CPos: TPoint;
begin
GetCursorPos(CPos);
X := CPos.X;
Y := CPos.Y;
end;
Espero que este guia pratico tenha lhe servido para alguma coisa! :)))
CodersZine.═════════════════════════════════
──────────════< DELPHI COM ACTIVEX >════──────────
by BADGod
Nova tecnologia produzida pela Microsoft que esta no Delphi97. Vai ser
muito facil para o desenvolvimento de aplicativos clientes pequenas e sem
necessidade de configura-lo para ambiente distribuido web com ou sem
arquitetura de banco de dados Cliente/Servidor multicamadas.
Um nome bem recente na area desenvolvimento para INTERNET o ActiveX,
visa empacotar as principais tecnologias de reutilizando de funcoes
programadas e prestacao de servico em aplicativos OLE* e COM*.
Apos examinar toda a tecnologia de controle OLE*, a Microsoft descobriu
um "poco de petroleo".
O OLE* tinha crescido assustadoramente, e consigo adquiriu tantas
informacoes e caracteristicas de interface que os componentes OLE* nao
poderiam navegar com rapidez por uma tipica conneccao a Internet. Vamos
debulhar isso mais um pouco, no control e OLE* e' preciso carregar consigo
mesmo informacoes que definem uma janela na tela, mesmo que esse controle
jamais seja visivel.
Assim a Microsoft planejou e construiu uma tecnologia mais adaptavel a
situacao e muito mais agil. Vindo do mesmo Kernel do COM*, com o OLE*, mas
com um conjunto menor de exigencias centrais e novas opcoes para que se
possa contruir refinadas e dinamicas Home Pages.
Todos os controles criados apartir do COM* e do OLE* foram chamados de
Controles Activex.
Agora isso quer dizer que toda a industria de controles Controles
Activex/OCX estam automaticamente disponiveis para a Internet tambem o que
promete facilitar muito a nossa vida. Do mesmo jeito que um Controles
Activex/OCX sao usados num programa, ele podera ser usado numa pagina HTML
atraves como um applet na linguagem JAVA, ou dentro de um programa. De
acordo com a sua aplicacao, esses controles vao poder ser usados por leigos
ou por programadores. Ex.: Tem uma possibilidade de existir um controle que
o usuario sa precise escrever uma frase para ela ficar pulando pela tela,
enquanto outro que trate com banco de dados precise de programacao.
Esses arquivos serao executados junto com a pagina que os contem e
colocados num cache permanente no computador do usuario, o que fara da
navegacao um processo mais rapido, sera notificado instalacao na maquina.
Devido a questao da seguranca, existe um tipo de diploma dado pela
Microsoft ou por uma representante sua que certifica que este controle nao
pode causar danos ao usuario, se o controle que estiver sendo executado nao
possui-lo, a pessoa sera perguntada se deseja executa-lo ou nao.
Agora, e principalmente na nova versao (3.0 ou 97), o Delphi usara a
tecnologia ActiveX para criacao de aplicacoes Servidoras Web e aplicacoes
Clientes Web.
A tecnologia ActiveX tem tudo para dar certo, so depende da Microsoft
cooperar.
Duvidas:
COM:
Essa nova tecnologia dos Sistemas Operacionais 32 Bits Microsoft
estara implementada no Delphi97. Tera muita utilidade no desenvolvimento
cliente/servidor multiplas camadas
OLE:
A tecnologia OLE e' usada para a criacao de controles OCX, que pode
ser 32 bits. Devido a um imenso apoio da Microsoft as empresas deste ramo,
logo todas elas atualizaram seus produtos para a nova tecnologia, hoje os
VBX estao ficando mais que desaparecendo, enquanto o OCX cresce a cada dia.
A tecnologia OLE e' componente central dos sistemas operacionais Windows
(da Microsot) do seu grupo de aplicativos, tais como Microsoft Office que
monopolisa todo o mercado. (Na minha opiniao a Microsoft domina o mercado
apenas por falta de conhecimento da maioria da populacao, pois alguns de
seus programas sao de pessima qualidade mais no entanto sao os mais
usados).
CodersZine.═════════════════════════════════
──────────════< JAVA >════──────────
by Jac{Delpher}
Olah, aqui vai eu novamente escrever sobre JAVA e JAVASCRIPT. Bom,
espero q vcs jah tenham lido minha materia sobre Algoritmos, jah que isso
e' requerido p/ qualquer linguagem. Bom, mas aqui so vai uma introducao,
por enquanto, nada de codigo. Codigo so na proxima edicao.
Bom, por incrivel que pareca, JAVA e JAVASCRIPT naum tem nenhuma
relatividade(ao menos comercialmente). JAVA e'uma linguagem de programacao,
JAVASCRIPT, tbm, se levarmos o conceito de que uma linguagem de programacao
e' aquela que suporta variaveis e tudo mais, JAVASCRIPT e' uma linguagem.
Mas, comercialmente falando, JAVA foi criada pela SUN e JAVASCRIPT pela
NETSCAPE. A BUGSOFT naum criou nada referido a JAVA, so depois que viu
que essa linguagem ele naum ia conseguir derrubar. E outra coisa, essas
duas linguagens vao ser em materias diferentes, mas como e' introducao...
Entao, vamos as definicoes. JAVASCRIPT, naum deixa de ser uma linguagem
de programacao, mas ela constroi programas que rodem STAND ALONE, ou seja,
vc naum pode criar um programa em JAVASCRIPT e chegar no prompt do DOS
digitar: MEU_PRIMEIRO_PROGRAMA_JAVASCRIPT. O JAVASCRIPT e' embutido entre
TAGS em uma Home Page, ou seja, vc poe o codigo entre <SCRIPT> </SCRIPT>.
O JAVASCRIPT e' uma linguagem exepcional, uma vez que a linguagem de
HyperTexto (HTML) naum tem capacidade de dar muita beleza a uma Home Page.
Entao a NETSCAPE criou essa linguagem c/ a intencao de justamente capacitar
a Home Page de se ter animacoes, etc. A linguagem JAVASCRIPT estah
intimamente ligada ao HTML. O JAVASCRIPT naum funciona sem o HTML, ok?
Agora , tecnicamente falando, o JAVA e o JAVASCRIPT tem muitas
semelhancas. O estilo de codificacao e' um pouco semelhante, mas o JAVA e'
super-parecido c/ o C++, jah o JAVASCRIPT e' uma mistura de PASCAL c/ C++.
Ah e esqueci, ambas sao Orientadas a Objeto, entao eu tbm aconselho que
vcs leiam sobre isso. E um livro classico (embora antigo) e' o MODELAGEM E
PROJETOS BASEADOS em OBJETOS -- CAMPUS (www.campus.com.br).
Entao vamos ao JAVA. Essa e' a grande revolucao pessoal. Essa
linguaugem e' tao exepcional que eu naum tenho muitas palavras para
descreve-la. Imagine vc poder fazer um grande trabalho, e poder executar em
qualquer computador, sem ter restricoes de Sistema Operacional,etc. Isso e'
espetacular. Ah, isso tbm e' valido para o JAVASCRIPT (multi-plataforma).
E' isso pessoal, e' o JAVA, a linguagem do século XXI. Essa e' a unica
linguagem que naum tem dependencia de WIndows, Mac, Dos, Unix, o q for. A
linguagem estah tao forte que nem o BILL GAY tah conseguindo derrubar. Ele
tah puto da vida e tah se aliando ao JAVA. Daqui a uns 6 ou 10 anos, vcs so
vao ouvir falar em JAVA. As demais linguagens, como o Pascal, C, Assembly e
outras, vao tudo sair do GIBI, uma vez que com o JAVA tudo estah ao
alcance. Simplificando, o JAVA vai ser o Assembly do Século XXI. Vao
existir CHIPS com JAVA, tudo, mas tudo mesmo JAVA. Acho q ate o nome do meu
filho vai ser JAVANES :)).
Vamos falar um pouco mais do funcionamento da linguagem. Alguns
programadores estao recusando o JAVA por causa da lentidao, principalmente
os que fazem aplicativos comerciais. o meu amigo TICO me disse um dia
desses ai que fez uma aplicacao comercial em JAVA e ficou a maior lentidao.
E', mas percebam que a linguagem estah no comeco, e logicamente que a SUN
vai investir toda a sua grana para deixar JAVA mais rapido ate que o
Assembly! :)). Pode ter certeza.
Na Computacao vc naum pode gostar de nada. Vc tem que ser malandro. Tem
que se adaptar de acordo com o que estah no momento. Se ficar nessa de
"naum e' pq eu gosto dessa linguagem e naum vou abandonar..." ai vc se
estrumbica. Naum tem essa de se apaixonar, tem que se adapatar de acordo
com o mercado. O DOS e' passado a muito tempo, mas existe ainda tantos
desenvolvedores p/ essa plataforma. Tudo bem, mas no futuro eles vao ter
que tratar o desenvolvimento p/ DOS como "Masturbacao Intelectual". Admiro
muito os meus amigos hC e Mingo, grande programadores DOS, que fazem lindas
DEMOS, mas eles tbm vao ter que estudar um JAVA de leve, se nao pode ate
ficar p/ tras. Mas acho que isso vai demorar, pq artistas na computacao
estah dificil. E, para mim, a parte mais fascinanate da computacao e'
justamente a mistura de computacao com arte. Isso e' legal, mas espero que
eles facam uma DEMO em JAVA, so p/ esperimentar. Deve sair legal.
Mas voltando ao assunto, vamos falar um pouco de como o JAVA funciona.
O processo e' o seguinte (seria melhor descrever como uma figura, mas...).
COMPILADOR JAVA ---> BYTECODES JAVA (o mesmo p/ todas plataformas) --->
INTERPRETADOR JAVA (um para cada sistema diferente) (WINDOWS, MAC, UNIX...)
Chega de LOTUS 1 2 3 p/ DOS, WINDOWS 3.11, WINDOWS 95! E o bom e'que quando
se recompila o sistema, em uma determinada plataforma, naum se precisa
mudar uma linha de codigo, e' so recompilar e pronto. Isso poupa um bocado
do saco do programador, pode crer!
Por essa edicao e' so!
Qualquer duvida, critica ou sugestao.. ----> javanes@thepentagon.com
by Jac{Delpher} from #CODERS to CODERS!
"So ALEGRIA O RESTO É MONOTONIA!" --> adapatado por KDosKD e eu! :))
CodersZine.═════════════════════════════════
──────────════< GRAFICOS >════──────────
by KDoskD
Hi ALL
Introducao:
Comecamos com esse texto uma secao que trata de programacao grafica ou
seja, a parte grafica de um programa. Como os graficos sao partes
importantes de um programa tentaremos abordar esse assunto da melhor
maneira possivel, tentando demostrar todos os modos possiveis de se fazer
um grafico.
Parte I : Definicoes
Bem, vamos comecar dizendo ou definindo o que eh um ponto. Um ponto eh
uma marca no espaco ( Um ponto eh um ponto...). Um conjunto de pontos eh
uma reta. E finalmente um poligono eh um conjunto de retas. Uma imagem
tambem eh um conjunto de elementos que podem ser um ponto, uma reta ou um
poligono. Outra definicao para imagem ou graficos eh a representacao
atravez de imagens alguma coisa, por exemplo, um botao, uma janela, etc...
Os graficos no computador sao formados por pixels ( Pequenos pontos que
existem na tela, que no caso, eh o monitor), sendo assim, se decompormos
uma imagem de computador, a menor parte que conseguiriamos seria um pixel.
Assim como as figuras sao formadas por pixels, os caracteres tambem sao
formados por pixels, so que no caso de caracteres, a tela e' dividida em
quadrados (80 colunas por 43 linhas, no caso do DOS), onde cada caracter
ocupa um quadrado na tela, e como os graficos, os caracteres tambem sao
formados por pontos. Bom, acho que para a primeira parte ja basta.
Aguarde ate a Parte II onde comecamos a entrar na programacao.
CodersZine.═════════════════════════════════
──────────════< GRAFICOS EM 3D >════──────────
by hC
. Introducao
Heya povo... Eu sou o mestre da preguica para escrever, entao
preparem-se para muito codigo e pouco texto :)
Eu escrevi isso aqui ha umas semanas, a pedido do xROD, que estava
precisando de um toque sobre como fazer rotacoes de poligonos. O codigo eh
ANSI-C puro, poden do ser facilmente portado para qualquer compilador.
Eu testei no Watcom C/C++ 10.6 , no Borland C/C++ 3.1 e no
DJGPP v2.alguma_coisa :)
OBS: Estou partindo do principio de que voce que esta lendo isso aqui
compreende o basico da linguagem C e possui nocoes de programacao para o
modo VGA 320x200 (13h).
. Teoria Matematica
Eu sei que muitos coders odeiam matematica, especialmente algebra
linear e geometria analitica. Mas ambas sao necessarias para se fazer
graficos 3D de alguma precisao.
Neste artigo eu vou apenas explicar a utilizacao das formulas de
rotacao de vertices no espaco 3D e nao sua origem matematica.
Talvez nos proximos artigo, seja necessaria a explicacao matematica das
formulas, mas por enquanto voce pode ir se contentando em apenas decora-las
(acredite, eu fiz isso por muito tempo, antes de ter aulas de geometria
analitica e nunca me dei mal. :))
. O Ponto no Espaco 3D
No espaco, a menor unidade seria um ponto. Aqui associaremos um ponto a
um vertice, apenas para facilitar. Por exemplo, um cubo possui 8 vertices,
entao para desenha-lo precisaremos de 8 pontos.
typedef struct {
float x,y,z;
int color;
} Vertex;
Com o codigo acima eu defini a estrutura Vertex, que possui armazena as
informacoes x, y e z (coordenadas do ponto no espaco) e a sua respectiva
cor.
O proximo passo seria definir um objeto utilizando essas informacoes.
Vamos usar um cubo aqui...
Vertex Cubo[8] = { -20, -20, -20, 15, // vertices: coordenadas x,y,z e cor
-20, 20, -20, 15,
20, 20, -20, 15,
20, -20, -20, 15,
-20, -20, 20, 15,
-20, 20, 20, 15,
20, 20, 20, 15,
20, -20, 20, 15 };
O que eu fiz foi definir as coordenadas de cada vertice no espaco,
partindo do principio de que o cubo possui dimensao 40, ou seja, cada
vertice esta 20 unidades distante do seu centro, seja qual for a direcao.
. A Rotacao em si
Agora que o objeto esta definido, vira a parte principal deste artigo:
Rotacionar os vertices do cubo. O que voce precisa entender antes
de mais nada, e que a estrutura Cubo nao pode ser alterada. Voce vai
rotaciona-la mas guardar o resultado em outras variaveis.
Bem, vamos la... A rotacao e realizada em 3 etapas. Voce rotaciona o
vertica em cada plano de acordo com o angulo. Como seria isso:
[ Rotacao no eixo Z ]
Novo X = X Original * cosseno do angulo - Y Original * seno do angulo
Novo Y = X Original * seno do angulo + Y Original * cosseno do angulo
Novo Z = Z Original
[ Rotacao no eixo Y ]
Novo X = X Original * cosseno do angulo + Z Original * seno do angulo
Novo Y = Y Original
Novo Z = -X Original * seno do angulo + Z Original * cosseno do angulo
[ Rotacao no eixo X ]
Novo X = X Original
Novo Y = Y Original * cosseno do angulo - Z Original * seno do angulo
Novo Z = Y Original * seno do angulo + Z Original * cosseno do angulo
Voce deve ter estar se perguntando o porque de nao se rotacionar tambem a
coordenada Z quando se realiza a rotacao no eixo Z e o mesmo com as demais
coordenadas. Isso eh feito dessa forma porque estamos rotacionado as demais
coordenadas em relacao ao eixo em questao. Nao ha logica em rotacionar o
proprio eixo em relacao a ele mesmo :)
Bem, com essas formulas voce ja deve estar imaginando como seria o codigo
em si que utilizaria elas. Fique sabendo que nao e nem um pouco complicado.
apenas aplicacao direta dessas formulas utilizando funcoes do proprio
compilador C, como a sin(); para a funcao seno e cos(); para a funcao
cosseno.
A ultima coisa que eu gostaria de colocar eh que eu vou realizar as 3
rotacoes em sequencia no codigo exemplo e por isso eu defini algumas
variaveis temporarias para armazenar os valores resultado das equacoes.
[ Variaveis ]
- old_x, old_y e old_z : armazenam os valores originais do objeto
- new_x e new_y : armazenam os valores resultado da rotacao em Z
- tmp_x e tmp_z : armazenam os valores resultado da rotacao em Y
- swp_y e swp_z : armazenam os valores resultado da rotacao em X
. Perspectiva, Camera FOV e etc
A ultima coisa que vou mencionar aqui e' a adicao de perspectiva aos
poligonos. Isso eh bastante simples mas eh muito importante na beleza do
produto final.
As formulas sao simples e so se aplicam as coordenadas X e Y do pologono,
pois sao as unicas que podem ser representadas na tela.
X Final = X * FOV da Camera / Z + FOV da camera + deslocamento X
Y Final = Y * FOV da Camera / Z + FOV da camera + deslocamento Y
As variaveis 'deslocamento X' e 'deslocamento Y' sao a posicao do objeto
na tela, enquanto 'FOV da Camera' eh o aspecto da perspectiva. Eu costumo
utilizar o valor 256 para ele, mas voce vai descobrir muita coisa
interessante com os multiplos de 16 :)... Experimente 128, 64, 512, etc...
. O Programa Exemplo
O programina eh este aqui. A unica observacao que eu faco e'que voce deve
mudar o protitipo malloc.h para alloc.h se voce utiliza o Borland C. No
DJGPP e no Watcom o nome da biblioteca e' malloc.h mesmo.
De resto, voce deve mudar a rotina para setar o video de acordo com o
seu compilador (WCC_SetMode para Watcom, BCC_SetMode para Borland e
GCC_SetMode para DJGPP).
/*-------------------------------[ cut here ]------------------------------
3Dtest.c by Hugo Cristo para CodersZine. Magazine 01
-------------------------------------------------------------------------*/
#include <dos.h>
#include <conio.h>
#include <malloc.h>
#include <stdio.h>
#include <math.h>
//ponteiro para o video
char *VIDMEM = (char *)0xA0000;
//buffer virtual
char *vis;
/* ===================================================================== */
/* Estrutura 3D e Poligono */
/* ===================================================================== */
typedef struct {
float x,y,z;
int color;
} Vertex;
Vertex Cube[8] = { -20, -20, -20, 15, // vertices: coordenadas x,y,z e cor
-20, 20, -20, 15,
20, 20, -20, 15,
20, -20, -20, 15,
-20, -20, 20, 15,
-20, 20, 20, 15,
20, 20, 20, 15,
20, -20, 20, 15 };
/* ===================================================================== */
/* Funcoes de video */
/* ===================================================================== */
// espera retraco de video
void wait_vertical(void)
{
while(inp(0x3DA) & 8);
while((inp(0x3DA) & 8) == 0);
}
// seta modo de video para WATCOM C/C++
void WCC_SetMode(short mode);
#pragma aux WCC_SetMode = \
"int 10h" \
parm [ax];
//seta modo de video para DJGPP C/C++ (deve funcionar com o BC4.0)
void GCC_SetMode(int mode) {
union REGS in;
in.x.ax=mode;
int86(0x10,&in,&in);
}
// seta modo de video para Borland C/C++
void BCC_SetMODE(int mode) {
asm mov ax,mode
asm int 0x10
}
/* ===================================================================== */
/* Coloca Ponto na tela */
/* ===================================================================== */
void PutPixel(int x, int y, char cor, char *dest) {
dest[x+(y<<6)+(y<<8)] = cor;
}
/* ===================================================================== */
/* Funcao Main */
/* ===================================================================== */
void main(void)
{
// temp
float old_x, old_y, old_z;
float new_x, new_y, // rotacao em Z
tmp_x, tmp_z, // rotacao em Y
swp_y, swp_z, // rotacao em X
fin_x, fin_y; // coordenadas finais dos vertices apos perspectiva
float s_x, s_y; // screenx e screeny
float ang = 0;
int i;
//aloca off-screen buffer
vis = (char *) malloc(64000);
// seta modo 0x13 = VGA 320x200x256 cores
WCC_SetMode(0x13);
// seta deslocamento para centro do video
s_x = 160;
s_y = 100;
while (!kbhit()) {
// limpa off-screen buffer
memset(vis, 0, 64000);
//rotaciona vertices
for (i = 0; i < 8; i++) {
old_x = Cube[i].x;
old_y = Cube[i].y;
old_z = Cube[i].z;
// rotaciona em Z
new_x = old_x*cos(ang)-old_y*sin(ang);
new_y = old_x*sin(ang)+old_y*cos(ang);
// rotaciona em Y
tmp_x = new_x*cos(ang)+old_z*sin(ang);
tmp_z = -new_x*sin(ang)+old_z*cos(ang);
// rotaciona em X
swp_y = new_y*cos(ang)-tmp_z*sin(ang);
swp_z = new_y*sin(ang)+tmp_z*cos(ang);
// equacao de perspectiva
// x_screen = FOV * x / z + FOV + deslocamento x
// y_screen = FOV * y / z + FOV + deslocamento y
fin_x = (256*tmp_x / (swp_z+256))+s_x;
fin_y = (256*swp_y / (swp_z+256))+s_y;
PutPixel(fin_x, fin_y, Cube[i].color, vis);
}
// copia para o video
memcpy(VIDMEM,vis,64000);
// espera retraco de video
wait_vertical();
// atualiza angulo
ang+=0.05;
if (ang >= 6.28) ang-=6.28;
}
WCC_SetMode(0x3);
}
//-------------------------------[ cut end ]-------------------------------
. Finalizando
Espero que voce divirta-se com seus 3DS... Se voce quiser implementar
wireframe aqui, basta desenhar linhas ligando os vertices. Se voce nao
conseguir um algoritmo para desenhar linhas, e so pedir por e-mail que eu
mando, ok? :)
. Greetings
xcaRIOca, xROD, Wiz, X_cAmArO, _TesT_, Mingo, Forg3, Evilspirit
e o resto do CodersZine.
Imago, theEnd, Crazy Creations, XKR e o resto da demoscene brasileira
. A seguir cenas dos proximos capitulos
- Poligonos Wireframe
- Preenchimento de Poligonos
- Algoritmos de Remocao de faces Ocultas
- Sombreamento
- Faca voce mesmo seu proprio leitor de arquivos .3DS
Salutaciones,
Hugo Cristo
CodersZine.═════════════════════════════════
──────────════< DEMOS >════──────────
by Mingo
UMA INTRODUCAO AS DEMONSTRACOES MULTIMIDIA
As demonstracoes multimidia, que tanto fascinam os programadores do
mundo inteiro, consistem em programas que procuram demonstrar ao maximo as
capacidades da maquina (computador), do programador, do musico e do artista
grafico envolvidos. Principalmente ressaltando a multimidia.
Geralmente estao envolvidos grupos na producao de uma demo, onde sao
divididas as tarefas. O que nao impede de um componente arcar com mais de
uma tarefa. Costuma-se dividir as tarefas em tres partes basicas:
programacao (coder), graficos (gfx) e sons (sfx).
A matematica anda junto com os programadores envolvidos com as
demonstracoes multimidia. Sobressai a Algebra Linear, que esta relacionada
principalmente aos graficos tridimensionais.
Como a arte tambem e fundamental na producao de demonstracoes
multimidia, sempre os envolvidos procuram inovar, apresentando novas
rotinas, com isso, sem sombra de duvida, ajudando ate mesmo na producao de
utilitarios e principalmente na producao de jogos.
As demos surgiram ha muito tempo, sendo que, vieram a se consolidar a
partir de 1990, com os concursos, tambem conhecidos por festas/competicoes
(PARTIES/COMPOS). Inicialmente se afirmaram nos computadores da linha
AMIGA, mais tarde comecaram a surgir as primeiras demos nos computadores da
linha IBM-PC, que nos tanto utilizamos hoje.
Encontramos tambem as intros, que consistem em pequenas demos. Em
concursos relacionados chegam a consolidar limites para as mesmas, como
relacionado ao seu tamanho. Tambem surgem categorias, como as intros de
ate 4KBytes, as demos de ate 64KBytes e as mega-demos com mais de 64KBytes.
As regras variam em cada competicao.
Atraves da internet , muito se pode encontrar relacionado as
demonstracoes multimidia. Procure imaginar como esses programadores ,
verdadeiros herois, que foram os precursores das demonstracoes multimidia
conseguiam criar as mesmas.
Para saber mais sobre este assunto, e impressindivel a sua visita,
atraves da internet, a HORNET (http://www.hornet.org), o maior agente
organizador atualmente de demonstracoes multimidia no mundo.
Nao deixe de visitar tambem minhas HOME-PAGES, atraves das mesmas
podera obter maiores informacoes, em portugues, sobre as demonstracoes
multimidia como tambem sobre diversos outros assuntos.
(http://n3.com.br/~mingo)
Eduardo Motta Buhrnheim (a.k.a. Mingo)
mingo@n3.com.br
CodersZine.═════════════════════════════════
──────────════< REDES NEURAIS ARTIFICIAIS >════──────────
by Wiz
PARTE 1
"Inteligencia eh a capacidade de se adaptar
a novas situacoes atraves do raciocionio".
Na area de inteligencia artificial a utilizacao das redes neurais
artificiais tem um papel bastante importante. No entanto, poucas pessoas
tem ideia do que sao e o que fazem essas tais redes, ou o quanto elas
possam ser uteis.
O QUE EH UMA REDE NEURAL ARTIFICIAL?
Para responder a essa pergunta vou primeiro me referir as redes neurais
naturais :)
O nosso cerebro eh constituido de celulas nervosas chamadas neuronios,
que por sinal sao bem diferentes das demais celulas do corpo. Sao muito
mais complexas. Os neuronios estao interligados de um jeito que formam uma
rede, e se comunicam atraves de impulsos eletricos(algo em torno de 70mv).
Cada neuronio recebe varios sinais de entrada atraves de seus dendritos e
somente uma saida que eh enviada atraves de uma ramificacao chamada
axonio. Fiz um grafico meio primitivo (tambem nao posso fazer milagres)
mostrando como eh um neuronio:
| | | |
- /----------\ axonio (saida) /
dendritos - | neuronio >==================== - sinapses
(entradas) - \----------/ \
| | | |
Os neuronios realizam sinapses, que sao conexoes com outros neuronios.
Sao atraves dessas conexoes sinapticas que os sinais sao propagados pelo
cerebro. E nosso cerebro tem em media 10.000.000.000 de neuronios. Cada
neuronio consegue fazer ate 10.000 sinapses. Se considerarmos que cada
neuronio trasmite um bit, entao concluiremos que o cerebro transmite uma
densidade de 100.000.000.000.000 de bits. Da para se dizer que o cerebro
recebe em torno de 100.000.000 de sensacoes por segundo. Interessante,
nao? Realmente o cerebro eh a maquina mais complexa que conhecemos.
Pesquisas recentes indicam que o cerebro eh muito mais complexo do que
imaginavamos anteriormente, por que eh como se cada neuronio (ou conjunto
deles) funcionasse de uma maneira diferente. Outro detalhe: a inteligencia
de uma pessoa nao pode ser calculada atraves do tamanho de seu cerebro,
mas sim pela quantidade e qualidade das suas conexoes sinapticas. O
aprendizado tambem esta intimamente ligado ao numero de sinapses. Mas isso
ja eh outra historia...
Enfim, as redes neurais artificias tentam abstrair as caracteristicas
desses neuronios para um modelo matematico, e atraves disso criar maquinas
"inteligentes".
HISTORIA DAS REDES NEURAIS ARTIFICIAIS
Voce acha que esse negocio de redes neurais eh coisa de agora, e que
foi inventada a poucos anos atras? Na verdade as pesquisas em torno disso
ja sao bem antigas! Provavelmente mais antigas do que voce :)
As primeiras tentativas de se criar uma rede neural artificial foram
feitas na decada de 40 pelo neurofisiologista Warren McCuloch e o
matematico Walter Pitts da universidade de Illinois. O conceito era
diferente do que existe hoje, mas da para afirmar que a tecnica das redes
neurais eh a mais antiga na area de inteligencia artificial.
No ano de 1949, um tal de Donald O. Hebb descobriu como funcionava o
aprendizado a nivel celular, e isso ajudou os pesquisadores a criarem
algoritmos de treinamento de redes neurais.
Foi em 56 que a primeira rede neural artificial foi apresentada ao
publico, numa conferencia sobre inteligencia artificial. Durante toda essa
epoca foram apresentados novos modelos de redes. Mas todas elas eram ainda
muito simples, e suas aplicacoes praticas eram muito limitadas. Foi entao
que em 69 um tal de Marvin Minsky e Seymour Papert, que eram cientistas de
renome na epoca, aproveitaram esse ponto fraco para publicarem um livro
criticando duramente as redes neurais artificiais. Eles bem que tinham
razao (na epoca), pq todos os modelos de redes soh tinham uma camada de
neuronios, e ninguem sabia como implementar uma com varias camadas. O
problema eh que redes de uma soh camada nao fazem nada de realmente
inteligente. Mas o pior eh que essa publicacao teve um efeito desastroso
para todas as pesquisas que estavam sendo feitas nessa area, pois os
investimentos que estavam sendo aplicados foram todos desviados para
pesquisas em outros campos de IA.
Somente 13 anos depois, em 82, o fisico e biologo John Hopfield
conseguiu contestar com sucesso as teses de Minsky e Papert, criando um
novo modelo de rede neural, o que deu um novo impulso a essa area. Isso
significa que mesmo durante esse tempo de hibernacao aparente , as
pesquisas nao pararam. Muitos cientistas continuaram trabalhando na area,
mas as escondidas, talvez com medo de receber criticas dos colegas.
Pessoalmente eu admiro muito essas pessoas, que trabalham pela verdadeira
ciencia, ao contrario da maioria dos cientistas que soh querem aumentar
sua reputacao, trocando favores diante da comunidade cientifica (que esta
mais para politica do que cientifica). Me desculpem o desabafo... :P
O FUTURO
Felizmente hoje existem muitas pesquisas sendo realizadas neste campo,
mas eh importante lembrar que ainda estamos dando os primeiros passos nessa
tecnologia. Eh pura ficcao imaginar que logo vai ser inventado um
computador mais inteligente que os humanos, ou ainda que criarao um ser
cibernetico. Essa euforia inicial eh compreensivel, mas deve ser evitada,
para nao corrermos o risco de cair no mesmo erro que os pesquisadores
pioneiros. Pode ter certeza que ha sempre um Minsky esperando que isso
aconteca :)
A limitacao de se fazer sistemas complexos nao eh tao somente do
computador, mas sim do ser humano. A complexidade de um sistema assim seria
extrema. Isso sem falar da dependencia que temos de pesquisas de outras
areas, principalmente da neurofisiologia. O que teremos agora nos proximos
anos serao computadores com reconhecimento de voz e reconhecimento de
padroes melhores que os atuais. Outra area emergente eh o da compreensao da
linguagem natural, que devera ser incluida em novos sistemas operacionais.
Enfim, as redes neurais artificiais trabalharao em conjunto com outros
metodos (ex.: logica nebulosa) e seguindo essa evolucao sua eficiencia a
tornara cada vez mais popular, a ponto de fazer parte ativa de nossas
vidas.
CodersZine.═════════════════════════════════
──────────════< E-MAILS >════──────────
Estamos com um e-mail temporario -=> coders@usa.net <=- assim que
mudarmos, avisaremos, e' claro.
So' pediremos uma coisa, nao mandem mails pedindo compiladores,
turoriais, ou disassembladores, nao mandaremos nada por e-mail!! Todos
nossos tutoriais, compiladores e arquivos, estarao disponivel em nosso site
www.come.to/coders. Ahh.. tentaremos arrumar um bot com ircserver, para
disponibilizar nosso zine tbm no IRC (no #coders da brasirc).
Essa e' a resposta q mandaremos p/ todos vao mandar e-mails pedindo para
ser um membro do grupo!!
Resposta: O CodersGroup e' mais do que um grupo de programadores, e' um
grupo de amigos, que frequentam um knal de IRC (#Coders na BrasIRC),
por isso nao podemos colocar qualquer um de membro, porem vcs podem
frequentar o knal, se enturmar, ai... quem sabe...
CodersZine═════════════════════════════════
──────────════< LINKS >════──────────
by CodersGroup
Ai estao alguns links sobre programacao, demos e graficos...
http://www.come.to/coders - hehhe.. a nossa page
http://www.hornet.org - um dos melhores sites dobre demoscene
http://www.vix.nutecnet.com.br/~imago - page da quakeEStation
http://www.geocities.com/WallStreet/6932 - site do grupo XKR
http://www.gustavo.net - uma otima page sobre programacao
http://dicas-l.unicamp.br - varios tutoriais sobre informatica
http://phenomenon.magnet.at - #C++ da efnet
http://www.info.ex.ac.uk/~PMBearne/DGC.html - the delphi game's criator
http://ftp.arl.mil/ftp/historic-computers/gif - fotos de computadores
MUITO velhos
CodersZine.═════════════════════════════════
──────────════< QUEM SOMOS?? >════──────────
Opa.. aki vai uma breve descricao da galera que se matando
para escrever esse o zine:
CR4sH^0v3 <cr4sh_0v3rrid3@hotmail.com>
Nome: Crash Override - Idade: 19
Linguagens: Clipper, Pascal, C/C++, ASM, Jscript
Hammett <hammett@thepentagon.com>
Nome: - Idade:
Linguagens: Visual Basic
hC <hcristo@zaz.com.br>
Nome: Hugo Cristo - Idade: 18
Linguagens: C/C++
Jac{Delpher} <>
Nome: Breno Jacinto Duarte da Costa - Idade: 16
Linguagens: Delphi, Pascal, Java e JavaScript
KdoskD <aama@svn.com.br>
Nome: Alessandro - Idade: 17
Linguagens: Variantes do Basic, C/C++ e Delphi.
Mingo <mingo@n3.com.br>
Nome: Eduardo Buhmheim- Idade: 27
Linguagens: Pascal e ASM
Progman<e.lang@mfa-creativenet.com.br>
Nome: - Idade:
Linguagens:
Rashi <next@mandic.com.br> colaboradora da revista Forum Access
Nome: Larissa Redeker - Idade: 23
Linguagens: Visual Basic, Foxpro, Clipper
XCaption <rodrigorodriguez@usa.net>
Nome: Rodrigo Rodriguez - Idade: 18
Linguagens: C++, Java, Visual Basic e Delphi
xcaRIOca <xcarioca@usa.net>
Nome: Ricardo G. Soares Filho - Idade: 19
Linguagens: C/C++
xCrown <fenix@netpatos.com.br>
Nome: Claudio - Idade: 16
Linguagens: C/C++ e Pascal
xROD <rod@svn.com.br>
Nome: Rodrigo Rocha Gomes e Souza - Idade: 13
Linguagens: DJGPP, Asm, Pascal e Basic
X_cAmArO <x_camaro@thepentagon.com>
Nome: Thiago M. M. Teodoro - Idade: 16
Linguagens: Um pouco de Cobol e Pascal, aprendendo C++, Clipper e Vb
Wiz <harlen@geocities.com>
Nome: Harlen C. Batagelo - Idade: 20
Linguagens: C/C++ e Asm
CodersZine.═════════════════════════════════
──────────════< AGRADECIMENTOS >════──────────
ThanX a todos que estao nos apoiando e divulgando esse novo zine.
Muito obrigado tbm a Micro$oft, que nos motiva a programar,
visto que seus softwares sao um lixo.
Obrigado a todos vcs que estao lendo esse humilde, mas promissor zine.
ThanX tbm a todos do #Linux que estao apoiando!!
Brigado a Delorie, por ter deixado o DJGPP de graca.
E um obrigado especial para todos os outros membros que nao
tiveram tempo de contribuir p/ o zine!!
ZeR0w, Hate-Win, Writeln, GusTyler, _TesT_, WordMacro, Kaotica,
underwater, KRoNoS, EvilSpirit, Cyron, HC_, ^MAX^, _DRiKa_,
CBRaMoNe, |MaLuCo| e ]Anjo[
acho que estao todos ai ;-)
by Coders Editors
─ ── ─── ──────────════<>──────────────<>════────────── ─── ── ─
Jonny olha para os lados, confuso, sem saber sobre o que pensar.
Ele recompoe-se e olha fixamente para a professora. "Eu quero criar
demos.", ele diz. Suas palavras iam tornando-se mais fortes e confiantes a
medida que ele as pronunciava. "Eu quero criar algo que mudara a percepcao
de realidade das pessoas. Eu quero que elas saiam de perto do computador
atordoadas, incertos de seus passos e visao. Eu quero criar algo que saia
do monitor e atinja-os , fazendo batimentos cardiacos e respiracao
diminuirem pela metade. Eu quero criar algo que, apas assistido, deixe as
pessoas relutantes em sair, pois saberao que nada mais naquele dia podera
ser tao real, tao luminoso, tao bom. Eu quero criar demos." Silencio. A
classe e a professora olham para Jonny, pasmos. Agora e' a professora quem
esta confusa. Jonny fica envergonhado, sentindo que algo mais precisa ser
dito. "Ou isso ou eu quero ser bombeiro."
- Grant Smith, 14:32, 21/11/1993
─ ── ─── ──────────════<>──────────────<>════────────── ─── ── ─
;!;, ;!;
;!!!!, !!!!
`!!!!!; !!!!>
!!!`!!! !!!!!>
!!! !!!> !!!!!!
!!! !!!!> !!!>!!>
;!!!,`!!!!> {!!!>!!!
!!!>d'!!!!> !!!!>`!!>
{!!!,$ !!!!' ;!!!! `!!!
{!!!,$F,!!!> !!!!'J !!!
!!!!,$$ !!!! !!!!! $>!!!
!!!'J$$ !!!! !!!!!>,$>!!!
;!!!'z$P !!!! {!!!!!,$P !!!
{!!!'J$P !!!! ,!!!!!',$$'{!!'
{!!!!J$",!!!' ;!!!!! d$P {!!'
{!!!!,$P,!!!' ,{!!!!'z$P";!!!
!!!!'J$ !!!' ,{!!!'_zP",{!!''
:!!!!:$({!!' ;!!!' ,;;!!''
`!!!!,P'!!! {!!',;{!!''
{!!!> {!! { ;{>' ,,;!''
{!!!,`!! !!!!!!!!; `
`!!!!!!-`'!!!!!!;;>>
{!! {!!!>!!!!!!!'{!!!,
',!',cccc,`{!!!!>,bc,
;!'J$$$$$$$c`!!!'$$$$b
!! $$$$$$$$$b,!!,?$$$$$c _,
!!,?$$$$$$$$$L`!!.$$$$$$b nMMMMn,
!!! ?$$$??$$$$,!!> `3$$"dMMMMMMML
=nMMMMMMhx.` ?$ `$$$h`!!> ,$"JMMM?MMMMM.
udMMMMMMMMMMhn" $$$P !',{CC MP",nMMMMM>
uMMMMMMMMMMMMMMMMMMnmnnxxnmx`{>'xP4MMMMMMMM>
3MMMMMMMMMMMTMMMMMMPP"".::`TMMMMP,MMMMMMMM"
`MMMMMMMMMMMMnmnmnmMbm`:'': ccvc dP"',`MP'
"MMMMMMMMMMMMMMMMMMMML`::: $$P'd",d$$b
"4MMMMMMMMMMMMMMMMMMb,`::,udM'dP'$$$b
`""""""""""""" "MMMMM",, "="?$$$b,
,;!!!!;,",;{!!,d$$$$$$$$b';>;
,{!!!!!!!!!!!!!!,?$$$?$$$$F{ {!>
;!!!!!!!!' !!!!!!!>,""",, ,,,;!!!`
{!!!!!!!' !!!!!!!!!!!!!!L `!'`
``{!!!!!!!!,`{!!!!!!!!!!''''
``'!!!'.;`'{!'`,xnnMMMM>
' d$ dMMMMMMMMMP
4$c"P)d$$P )MMMMMMMM"
$$r $$$" { 4MMMMP"
"???",;!!!> ,;-
.,,uuu, ._ !!!!!!',!!' ,>,unMMMMnn,
,udMMMMMMMMMn,`!!!;;,. !!!!!';!!' ,;;!!,nMMMMMMMM,TMb,
.nMMMMP"3MMMMMMMMn`!!!!!!!;;, !!!!! {!!' ,;!!!!!'nMMMMMMC"4MMMn"Mb
,MMMM",dMMMMMMMMMMML`!!!!!!!!!!!;;,!!!! {!!;;{!!!!!!!! dMMMMMMMMMb,4MMM,4L
MMMP,MMMMMMP",ndMMMML`!!!!!!!!!!!!!!!! !!!!!!!!!!!!!! MMMMMMMMMMMMMh"MMM.P
MMP,MMMMMP,dMMMMMMMMML{!!!''',,unnnn= =nnnnn,,,`''!!'dMMMMMMMMMMMMMMM'MM;
4M MMMMMF,MMMMMMMMMMMM,,udMMMP"" `"TTMMMMbudMMMMMMMMMMMMMMMM M"
T MMMMM.MMMMMMMMMMMMMMMP"" `"TTMMMMMMMMMMMMMMMMP''
4MMMM:MMMMMMMMMMMMP" `""TTTMMTTTT"
"TMM 4MMMMMMMMP"
`"""
─ ── ─── ───── ────────────────────────
E', acho que por enquanto esta bom. Foi apenas uma introducao as
linguagens, aguardem as proxima edicoes, que viremos com mais codigo.
────────────────────────── ──── ─── ── ─
──────────────────────────────────<cout << "EOF";>────────────────────────────