terça-feira, 1 de dezembro de 2009

Lua - Linguagem totalmente Brasileira


Segundo pesquisa da TIOBE, Lua (a linguagem de programação da PUC) está entre as 20 linguagens de programação mais utilizadas no mundo. Logo abaixo temos exemplos de código Lua, veja como é simples.

O que é Lua?

Lua é uma linguagem de programação poderosa, rápida e leve, projetada para estender aplicações.

Lua combina sintaxe simples para programação procedural com poderosas construções para descrição de dados baseadas em tabelas associativas e semântica extensível. Lua é tipada dinamicamente, é interpretada a partir de bytecodes para uma máquina virtual baseada em registradores, e tem gerenciamento automático de memória com coleta de lixo incremental. Essas características fazem de Lua uma linguagem ideal para configuração, automação (scripting) e prototipagem rápida.

Por que escolher Lua?

Lua é uma linguagem estabelecida e robusta

Lua é usada em muitas aplicações industriais (e.g., Adobe's Photoshop Lightroom), com ênfase em sistemas embutidos (e.g., o middleware Ginga para TV digital) e jogos (e.g., World of Warcraft). Lua é atualmente a linguagem de script mais usada em jogos. Lua tem um sólido manual de referência e existem vários livros sobre a linguagem. Várias versões de Lua foram lançadas e usadas em aplicações reais desde a sua criação em 1993.

Lua é rápida

Lua tem uma merecida reputação de ótimo desempenho. Outras linguagens de script aspiram ser "tão rápidas quanto Lua". Vários benchmarks mostram Lua como a linguagem mais rápida dentre as linguagens de script interpretadas. Lua é rápida não só em programas específicos para benchmarks, mas no dia-a-dia também. Porções substanciais de aplicações grandes são escritas em Lua.

Lua é portátil

Lua é distribuída via um pequeno pacote e compila sem modificações em todas as plataformas que têm um compilador ANSI/ISO C. Lua roda em todos os tipos de Unix e Windows, e também em dispositivos móveis (como computadores de mão e celulares que usam BREW, Symbian, Pocket PC, etc.) e em microprocessadores embutidos (como ARM e Rabbit) para aplicações como Lego MindStorms.

Lua é embutível

Lua é uma engine rápida e pequena que você pode facilmente embutir na sua aplicação. Lua tem uma API simples e bem documentada que permite uma integração forte com código escrito em outras linguagens. É simples estender Lua com bibliotecas escritas em outras linguagens. Também é simples estender programas escritos em outras linguagens com Lua. Lua é usada para estender programas escritos não só em C e C++, mas também em Java, C#, Smalltalk, Fortran, Ada, e mesmo outras linguagens de script, como Perl and Ruby.

Lua é poderosa (e simples)

Um conceito fundamental no projeto de Lua é fornecer meta-mecanismos para a implementação de construções, em vez de fornecer uma multidão de construções diretamente na linguagem. Por exemplo, embora Lua não seja uma linguagem puramente orientada a objetos, ela fornece meta-mecanismos para a implementação de classes e herança. Os meta-mecanismos de Lua trazem uma economia de conceitos e mantêm a linguagem pequena, ao mesmo tempo que permitem que a semântica seja estendida de maneiras não convencionais.

Lua é pequena

Incluir Lua numa aplicação não aumenta quase nada o seu tamanho. O pacote de Lua 5.1.4, contendo o código fonte, documentação e exemplos, ocupa 212K comprimido e 860K descompactado. O fonte contém cerca de 17000 linhas de C. No Linux, o interpretador Lua contendo todas as bibliotecas padrões de Lua ocupa 153K e a biblioteca Lua ocupa 203K.

Lua é livre

Lua é software livre de código aberto, distribuída sob uma licença muito liberal (a conhecida licença MIT). Lua pode ser usada para quaisquer propósitos, incluindo propósitos comerciais, sem qualquer custo ou burocracia. Basta fazer um download e usá-la.

Material retirado do site: http://www.lua.org/
---------------------------------------------------------------

Exemplos de código:

hello.lua: "Hello, World!"

Roda em:
Todas as arquiteturas

Descrição:
Chamar isto de um "programa" é um grande exagero, mas já é uma tradição, logo, vamos mantê-la :) Este programa imprime "Hello, World!" em um terminal e retorna para o shell. Baixe-o somente se sentir-se muito incomodado em executar o interpretador Lua inserido em eLua e digitá-lo você mesmo :)

Código fonte comentado:

print("Hello World")

---------------------------------------------------------------

info.lua: Obtendo os dados sobre a plataforma

Roda em:
Todas as arquiteturas

Descrição:
Este programa não é muito mais complicado do que o "Hello, World!", porém ele mostra um módulo específico de eLua: o módulo "platform data" (pd). Você pode ler mais sobre os módulos "platform" na distribuição do código fonte (docs/platform_modules.txt). O programa mostrará o nome da plataforma, o nome da CPU, o nome da placa e o clock da CPU e então finaliza e volta para o shell.

Código fonte comentado:

-- Usa o módulo pd para ter acesso aos dados da plataforma e mostrá-lo no Terminal
print( "Estou usando a platforma " .. pd.platform() )
print( "A CPU é uma " .. pd.cpu() )
print( "A placa é uma " .. pd.board() )

quarta-feira, 25 de novembro de 2009

GO - Nova linguagem de programação da Google

Mascote da GO - Gordon the gopher


É pessoal, é isso mesmo que vocês estão ouvindo (digo lendo). Mais uma linguagem pro povo. Não sei onde isso vai parar. Até hoje já trabalhei com mais de 10 linguagens diferentes, que no final é tudo a mesma coisa. É claro que cada linguagem é melhor em alguma coisa ou em alguma área, mas se tivessemos apenas uma ou duas resolveriamos as coisas da mesma forma.

Acho que o que a Google quer é mostrar que é muito grande mesmo, a maior de todas. Não acho que essa linguagem dure muito, a não ser que eles passem todas as APIs de sua vasta gama de aplicações (gmail, orkut, docs, earth, maps, wave, youtube, etc) para a nova linguagem, o que não acho provável.

No site da GO eles dizem que a linguagem é uma mistura de C++ com Python na velocidade do C. Pra quem conhece a maioria das linguagens, quando vemos o código abaixo, é realmente uma mistureba. Parece Python com C.

Eles dizem que a linguagem é experimental e que está quase tão rápida quanto o C.

“Em nossos experimentos, a versões típicas parecem instantâneas. Mesmo os binários maiores compilam em apenas alguns segundos. E o código compilado roda quase na mesma velocidade do C. A GO foi feita para você se mover rápido”, afirmaram os desenvolvedores no blog do Google.

Exemplo do famoso HelloWorld na nova linguagem:

package main

import "fmt"

func main() {
fmt.Printf("Hello, 世界\n")
}


terça-feira, 24 de novembro de 2009

Principais funções do MySql

Comparação

GREATEST (X, Y ,...)| Retorna o maior (máximo de valor) argumento. Os argumentos são comparados usando as mesmas regras, pelo menos.

IF (expr1, expr2, expr3) | Se expr1 é VERDADEIRA (expr1 <> 0 e expr1 <> NULL) então IF () retorna expr2, senão ela retorna expr3

IFNULL (Expr1, expr2) | Se expr1 não é NULL, IFNULL () retorna expr1, senão retorna expr2.

INTERVAL (N, N1, N2, N3 ,...)| Retorna 0 se N ISNULL (expr) | Se expr é NULL, ISNULL () retorna 1, senão retorna 0.

LEAST (X, Y ,...)| Com dois ou mais argumentos, retorna o menor (valor-mínimo) argumento.

NULLIF (expr1, expr2) | Se expr1 = expr2 for verdadeiro, retornar NULL else return expr1.

STRCMP (expr1, expr2) | retorna 0 se as strings forem iguais, -1 se o primeiro argumento é menor que o segundo acordo com a ordem de classificação atual, e 1 contrário.

Matemática

ABS (X) | Retorna o valor absoluto de X.

ACOS (X) | Retorna o arco cosseno de X, isto é, o valor cujo cosseno é X. Retorna NULL se X não está na faixa de -1 a 1.

ASIN (X) | Retorna o arco seno de X, isto é, o valor cujo seno é X. Retorna NULL se X não está na faixa de -1 a 1.

ATAN (X) | Retorna o arco tangente de X, isto é, o valor cuja tangente é X.

ATAN2 (X, Y) | Devolve o arco tangente de duas variáveis X e Y. É semelhante ao cálculo do arco tangente de Y / X, exceto que os sinais de ambos os argumentos são usados para determinar o quadrante do resultado.

CEILING (X) | Retorna o menor valor inteiro não menor que X.

COS (X) | Devolve o seno de X, onde X é dado em radianos.

COT (X) | Retorna a tangente de X.

DEGREES (X) | Retorna o argumento X, convertido de radianos para graus.

EXP (X) | Retorna o valor de e (base dos logaritmos naturais) elevado à potência de X.

Floor (x) | Retorna o maior valor inteiro não maior do que X.

LOG (X) | Retorna o logaritmo natural de X.

LOG10 (X) | Retorna o logaritmo de base 10 de X.

MOD (N, M) | Modulo (como o operador% em C). Retorna o resto de N dividido por M.

PI () | Retorna ao valor de PI.

POW (X, Y) | Retorna o valor de X elevado à potência de Y.

POWER (X, Y) | Retorna o valor de X elevado à potência de Y.

RADIANS (X) | Retorna o argumento X, convertido de graus para radianos.

RAND (N) | Retorna um valor em ponto flutuante aleatório no intervalo de 0 a 1,0. Se um argumento inteiro N é especificado, ele é usado como o valor da semente.

ROUND (X, D) | Retorna o argumento X, arredondado para um número com decimais D. Se D é 0, o resultado não terá nenhum ponto decimal.

SIGN (X) | Retorna o sinal do argumento como -1, 0 ou 1, dependendo se X é negativo, zero ou positivo.

SIN (X) | Devolve o seno de X, onde X é dado em radianos.

SQRT (X) | Retorna a não-raiz quadrada negativa de X.

TAN (X) | Retorna a tangente de X, onde X é dado em radianos.

TRUNCATE (X, D) | Retorna o número X, truncado para D casas decimais. Se D é 0, o resultado não terá nenhum ponto decimal ou parte fracionária.

String

ASCII (str) | Retorna o valor do código ASCII do caractere mais à esquerda da string str. Retorna 0 se str é uma string vazia. Retorna NULL se str é NULL.

BIN (N) | Retorna uma representação string do valor binário de N, onde N é um número muito grande (BIGINT).

CHAR (N ,...)| interpreta os argumentos como inteiros e retorna uma string com caracteres dados pelo valor do código ASCII dos números inteiros.

CHARACTER_LENGTH (str) | Retorna o comprimento da string str.

CHAR_LENGTH (str) | Retorna o comprimento da string str.

COALESCE (lista) | Retorna o primeiro não-NULL elemento na lista.

CONCAT (str1, str2 ,...)| Retorna a string resultante da concatenação dos argumentos.

CONCAT_WS (separador, str1, str2 ,...)| significa CONCAT com separador e é uma forma especial de CONCAT (). O primeiro argumento é o separador para o resto dos argumentos

CONV (N, da_base, para_base) | Converte números entre diferentes bases. Retorna uma representação string do número N, convertido a partir da_base base para para_base base.

ELT (N, str1, str2, str3 ,...)| Retorna str1 se N = 1, str2 se N = 2, e assim por diante. Retorna NULL se N é menor que 1 ou maior que o número de argumentos. ELT () é o complemento de FIELD ().

EXPORT_SET (bits, on, off, [separador, [numero_de_bits]]) | Retorna uma string onde para cada bit conjunto de "bits", você começa um "na" corda e para cada bit reset você começa um "off" de cadeia. Cada string é separada com "separador" ( "default") e apenas "numero_de_bits" (padrão 64) de "bits" é usado.

FIELD (str, str1, str2, str3 ,...)| Retorna o índice de str na lista str1, str2, str3, ... lista. Retorna 0 se str não foi encontrado. FIELD () é o complemento de ELT ().

FIND_IN_SET (str, strlist) | Retorna um valor de 1 para N se a string str está na strlista lista contendo N substrings. A lista de string é composta de substrings separadas por "," caracteres.

FORMAT (X, D) | Formata o número X de um como "#,###,###.##", formato arredondado para D casas decimais. Se D é 0, o resultado não terá nenhum ponto decimal ou parte fracionária.

HEX (N) | Retorna uma representação string do valor hexadecimal de N, onde N é um número muito grande (BIGINT).

INSERT (str, pos, len, newstr) | Retorna a string str, com o início substring na posição pos e personagens long len substituído pelo newstr cadeia.

INSTR (str, substr) | Retorna a posição da primeira ocorrência da substring substr na string str

LCASE (str) | Retorna a string str com todos caracteres alterados para minúsculas de acordo com o mapeamento atual conjunto de caracteres (o padrão é ISO-8859-1 Latin1).

LEFT (str, len) | Retorna os tam caracteres mais a esquerda da string str.

LENGTH (str) | Retorna o comprimento da string str.

LOCATE (substr, str, pos) | Retorna a posição da primeira ocorrência da substring substr na string str, iniciando na posição pos.

LOWER (str) | Returns a string str com todos caracteres alterados para minúsculas de acordo com o mapeamento atual conjunto de caracteres (o padrão é ISO-8859-1 Latin1).

LPAD (str, len, padstr) | Retorna a string str, deixou-preenchido com o padstr string str é até len caracteres de comprimento.

LTRIM (str) | Retorna a string str com caracteres de espaço à esquerda removidos.

MAKE_SET (bits, str1, str2 ,...)| Retorna um conjunto (uma string contendo substrings separadas por "," caracteres) contendo as strings que tem o bit correspondente em bits definido. str1 corresponde ao bit 0, str2 ao bit 1, cordas etc NULL em str1, str2, ... não são adicionadas ao resultado.

MID (str, pos, len) | Retorna uma substring de caracteres da string str, iniciando na posição pos.

OCT (N) | Retorna uma representação string do valor octal de N, onde N é um número do tipo long.

OCTET_LENGTH (str) | Retorna o comprimento da string str.

ORD (str) | Se o caracter mais a esquerda da string str é um caracter multi-byte, retorna o código de carácter multi-byte, devolvendo o valor do código ASCII do caractere

POSITION (substr IN str) | Retorna a posição da primeira ocorrência da substring substr na string str.

REPEAT (str, count) | Retorna um string consistindo da string str repetida cont vezes. Se a contagem de <= 0, retorna uma string vazia. REPLACE (str, da_str, para_str) | Retorna a string str com todas as ocorrências da string from_str substituído pelo to_str de cadeia.

REVERSE (str) | Retorna a string str com a ordem dos personagens invertidos.

RIGHT (str, len) | Retorna os tam caracteres mais à direita da string str.

RPAD (str, len, padstr) | Retorna a string str, preenchida a direita com a string até padstr str é tam caracteres de comprimento.

RTRIM (str) | Retorna a string str com caracteres de espaço removido.

SOUNDEX (str) | Retorna uma string soundex de str.

SPACE (N) | Retorna uma string consistindo de N caracteres de espaço.

SUBSTRING (str, pos, len) | Retorna uma substring longa tam caracteres da string str, iniciando na posição pos.

SUBSTRING_INDEX (str, delim, count) | Retorna a substring da string str antes de cont ocorrencias do delimitador delim.

TRIM ([[BOTH LEADING | | TRAILING] [remstr] FROM] str) | Retorna a string str com todos prefixos remstr e / ou sufixos removido. Se nenhum dos especificadores BOTH, LEADING ou TRAILING são dados, é considerado BOTH.

UCASE (str) | Retorna string str com todos caracteres alterados para letra maiúsculas de acordo com o mapeamento atual conjunto de caracteres (o padrão é ISO-8859-1 Latin1).

UPPER (str) | Retorna a string str com todos caracteres alterados para letra maiúsculas de acordo com o mapeamento atual conjunto de caracteres (o padrão é ISO-8859-1 Latin1).

Data e Hora

ADDDATE (data, INTERVAL tipo expr) | Realiza aritmética data.

CURDATE () | Retorna a data de hoje como um valor em "AAAA-MM-DD" ou no formato AAAAMMDD, dependendo se a função é usada em um contexto string ou numérico.

CURTIME () | Retorna a hora atual como um valor em "HH: MM: SS" ou HHMMSS, dependendo se a função é usada em um contexto string ou numérico.

DATE_ADD (data, INTERVAL tipo expr) | Realiza aritmética data.

DATE_FORMAT (data, formato) | Formata o valor de data de acordo com a seqüência de formato.

DATE_SUB (data, INTERVAL tipo expr) | Realiza aritmética data.

DAYNAME (data) | Retorna o nome do dia da semana para a data.

DAYOFMONTH (data) | Devolve o dia do mês para a data, no intervalo de 1 a 31.

DAYOFWEEK (data) | Retorna o índice da semana para a data (1 = domingo, 2 = segunda-feira, ... 7 = sábado). Estes valores do índice correspondem ao padrão ODBC.

DAYOFYEAR (data) | Retorna o dia do ano para a data, no intervalo de 1 a 366.


FROM_DAYS (N) | Dado um dayNumber N, retorna um valor DATE.

FROM_UNIXTIME (unix_timestamp , format) | Retorna uma representação do argumento unix_timestamp como um valor em "AAAA-MM-DD HH: MM: SS" ou no formato YYYYMMDDHHMMSS, dependendo se a função é usada em um contexto string ou numérico.

HOUR (hora) | Retorna a hora para hora, na faixa de 0 a 23.

MINUTE (hora) | Retorna o minuto de tempo, no intervalo de 0 a 59.

MONTH (data) | Retorna o mês para a data, no intervalo de 1 a 12.

MONTHNAME (data) | Retorna o nome do mês para a data.

NOW () | Retorna a data e hora atual como um valor em "AAAA-MM-DD HH: MM: SS" ou no formato YYYYMMDDHHMMSS, dependendo se a função é usada em um contexto string ou numérico.

PERIOD_ADD (P, N) | Adiciona N meses de período P (no formato YYMM ou AAAAMM). Retorna um valor no formato AAAAMM.

PERIOD_DIFF (P1, P2) | Retorna o número de meses entre os períodos P1 e P2. P1 e P2 deve estar no formato AAAAMM ou YYMM.

QUARTER (data) | Retorna o trimestre do ano para a data, no intervalo de 1 a 4.

SECOND (hora) | Retorna o minuto de tempo, no intervalo de 0 a 59.

SEC_TO_TIME (segundos) | Retorna o argumento segundo, convertido em horas, minutos e segundos, como um valor em "HH: MM: SS" ou HHMMSS, dependendo se a função é usada em um contexto string ou numérico.

SUBDATE(data, INTERVAL tipo expr) | Realiza aritmética data.

SYSDATE () | Retorna a data e hora atual como um valor em "AAAA-MM-DD HH: MM: SS" ou no formato YYYYMMDDHHMMSS, dependendo se a função é usada em um contexto string ou numérico.

TIME_FORMAT (hora, formato) | Esta é usado como o DATE_FORMAT () acima, mas a seqüência de formato pode conter apenas os especificadores de formato que lidar com horas, minutos e segundos.

TIME_TO_SEC(time) | Retorna o argumento de tempo, convertido em segundos.

TO_DAYS (data) | Com base em uma data data, retorna uma dayNumber (o número de dias desde o ano 0).

UNIX_TIMESTAMP (data) | Se chamado sem argumento, retorna um timestamp de Unix (segundos desde "1970-01-01 00:00:00 GMT"). Se UNIX_TIMESTAMP () é chamado com um argumento de data, ele retorna o valor do argumento como segundo, já que "1970-01-01 00:00:00" GMT.

WEEK (data) | Com um único argumento, retorna a semana para a data, no intervalo de 0-53

WEEKDAY (data) | Retorna o índice da semana para a data (0 = segunda-feira, 1 = Segunda-feira, ... 6 = domingo).

YEAR (data) | Retorna o ano para a data, no de 1000 a 9999.

YEARWEEK (data, first) | Retorna ano e uma semana para a data. O segundo argumento funciona exatamente como o segundo argumento para WEEK ().

Resumindo

AVG (expr) | Retorna o valor médio de expr.

BIT_AND (expr) | Retorna ao bitwise AND de todos os bits em expr. O cálculo é realizado com 64-bits (precisão BIGINT).

BIT_OR (expr) | Retorna o bitwise OR de todos os bits em expr. O cálculo é realizado com 64-bits (precisão BIGINT).

COUNT (expr) | Retorna uma contagem do número de valores não-NULL nos registros recuperados por uma instrução SELECT.

MAX(expr) | Retorna o valor máximo de expr. Pode tomar um argumento de cadeia, em tais casos, retorna o valor máximo da seqüência.

MIN (expr) | Retorna o valor mínimo de expr. Pode tomar um argumento de cadeia, em tais casos, ele retorna o valor da seqüência mínima.

STD (expr) | Retorna o desvio padrão de expr. Esta é uma extensão do SQL ANSI. O formato STDDEV () desta função é fornecida para compatibilidade com Oracle.

STDDEV(expr) | Retorna o desvio padrão de expr. Esta é uma extensão do SQL ANSI. O formato STDDEV () desta função é fornecida para compatibilidade com Oracle.

SUM (expr) | Retorna a soma de expr. Note que se o conjunto de retorno não tem linhas, ele retorna NULL!

Diversos

BENCHMARK (count, expr) | executa a expressão expr repetidamente cont vezes. Ele pode ser usado para medir a velocidade que o MySQL processa a expressão.

BIT_COUNT (N) | Retorna o número de bits que são definidos no argumento N.

CONNECTION_ID () | Retorna o ID da conexão (thread_id) para a conexão. Cada conexão tem seu próprio ID único.

DATABASE () | Retorna o nome do banco de dados atual.

DECODE (cript_str , senha_str) | Descrypts cript_str a string encriptada utilizando senha_str como a senha. cript_str deve ser uma seqüência de caracteres retornado ENCODE ().

ENCODE (str, senha_str) | Criptografa str usando senha_str como a senha. Para descriptografar o resultado, utilize DECODE (). O resultado é uma seqüência binária do mesmo comprimento de cadeia. Se você quiser salvá-lo em uma coluna, use uma coluna do tipo BLOB.

ENCRYPT (str [, salt]) | Criptografa str usando o Unix crypt () do sistema. O argumento salt deve ser uma string com dois caracteres. (A partir do MySQL 3.22.16, o sal pode ser maior que dois caracteres.)

GET_LOCK (str, timeout) | Tries obter um bloqueio com um nome dado pela string str, com um tempo limite de timeout segundos. Retorna 1 se o bloqueio foi obtido com sucesso, 0 se o tempo esgotou, ou NULL se ocorreu um erro (como ficar sem memória ou o fio foi morto com mysqladmin kill).

INET_NTOA (expr) | Retorna o endereço de rede (4 bytes ou 8) para a expressão numérica.

INET_ATON (expr) | Retorna um inteiro que representa o valor numérico para um endereço de endereços de rede podem ser de 4 ou 8 endereços de bytes.

LAST_INSERT_ID ([expr]) | Retorna o último valor gerado automaticamente que foi inserido em um coluna AUTO_INCREMENT.

LOAD_FILE (file_name) | Lê o arquivo e retorna o conteúdo do arquivo como uma string. O arquivo deve estar no servidor, você deve especificar o caminho completo para o arquivo, e você deve ter o privilégio de arquivo.

MD5 (string) | Calcula um checksum MD5 para a cadeia. O valor é retornado como um número longo hex 32 que podem, por exemplo, ser usado como uma chave hash.

PASSWORD (str) | Calcula uma seqüência de senha do str senha plaintext. Esta é a função que é usada para criptografar a senha do MySQL para armazenamento na coluna Password da tabela de subsídio do usuário.

RELEASE_LOCK (str) | Libera a trava nomeada pela string str que foi obtido com GET_LOCK (). Retorna 1 se o bloqueio foi lançado, 0 se o bloqueio não foi bloqueado por este segmento (caso em que o bloqueio não é liberado) e NULL se o nome da trava não existe.

SESSION_USER () | Retorna o nome de usuário do MySQL em curso.

SYSTEM_USER () | Retorna o nome de usuário do MySQL em curso.

USER () | Retorna o nome de usuário do MySQL em curso.

VERSION () | Retorna uma string indicando a versão do servidor MySQL.


Ler e escrever arquivos texto no Delphi

//Rotina para escrever em um arquivo texto:

Var

F:TextFile;

Begin

AssignFile(f,'c:\arquivo_qualquer.txt');

Rewrite(f); //abre o arquivo para escrita

Writeln(f,'Dúvidas de Programação'); escreve no arquivo e desce uma linha

Write(f,'duvidasdeprogramacao.blogspot.com'); //escreve no arquivo sem descer a linha

Closefile(f); //fecha o handle de arquivo

End;

//Rotina para ler de um arquivo texto:

var

f:TextFile;

linha:String;

begin

AssignFile(f,'c:\arquivo_qualquer.txt');

Reset(f); //abre o arquivo para leitura;

While not eof(f) do

begin

Readln(f,linha); //lê do arquivo e desce uma linha. O conteúdo lido é transferido para a variável linha

Memo1.lines.add(linha); //adiciona a um campo Memo

End;

Closefile(f);

end;

Dicas e truques com o Delphi

Pessoal, olhando algumas coisas antigas achei algumas dicas interessantes para se brincar com o Delphi. Acredito que nem tudo funciona no Windows XP/Vista, mas vale a pena conferir.

Lendo o volume do HD

Function ExtractDiskSerial(Drive:String):String;

Var

Serial:DWord;

DirLen,Flags: DWord;

DLabel : Array[0..11] of Char;

begin

GetVolumeInformation(PChar(Drive+':\'),dLabel,12,@Serial,DirLen,Flags,nil,0);

Result := IntToHex(Serial,8);

end;


Descobrindo o número serial do HD

procedure TForm1.Button1Click(Sender: TObject);

var

SerialNum : pdword;

a, b : dword;

Buffer : array [0..255] of char;

begin

if GetVolumeInformation('c:\', Buffer, SizeOf(Buffer), SerialNum, a, b, nil, 0) then

Label1.Caption := IntToStr(SerialNum^);

end;

Abrir e fechar a bandeja do CD-ROM

{Para Abrir:}

mciSendString('Set cdaudio door open wait', nil, 0, handle);

{Para Fechar:}

mciSendString('Set cdaudio door closed wait', nil, 0, handle);


Como saber se o CD está no drive

Function MidiaPresente(MediaPlayer: TMediaPlayer): Boolean;
var
Params: MCI_STATUS_PARMS;
S: array [0.255] of char;
r: Integer;
begin
//verifica se existe um cd inserido
Params.dwItem:= MCI_STATUS_MEDIA_PRESENT;
r:= MCISendCommand(MediaPlayer.DeviceID, MCI_STATUS, MCI_STATUS_ITEM, Integer(Addr(Params)));
if r <> 0 then
begin
MCIGetErrorString(r, S, SizeOf(S));
ShowMessage('Erro: ' + StrPas(S));
end
else
Result:= Params.dwReturn = 1;
end;


Verificar se tem disquete no drive

function TForm1.TemDiscoNoDrive(const drive : char): boolean;

var

DriveNumero : byte;

EMode : word;

begin

result := false;

DriveNumero := ord(Drive);

if DriveNumero >= ord('a') then

dec(DriveNumero,$20);

EMode := SetErrorMode(SEM_FAILCRITICALERRORS);

try

if DiskSize(DriveNumero-$40) = -1 then

Result := true

else

messagebeep(0);

finally

SetErrorMode(EMode);

end;

end;

procedure TForm1.Button1Click(Sender: TObject);

begin

if TemDiscoNoDrive('a') then

ShowMessage('Tem disco No drive A:')

else

ShowMessage('Não tem Disco no Drive A:');

end;


Ligar/Desligar o monitor

Desligar

SendMessage(Application.Handle, WM_SYSCOMMAND, SC_MONITORPOWER, 0);

Ligar

SendMessage(Application.Handle, WM_SYSCOMMAND, SC_MONITORPOWER, -1);

Modificar senha de root no Mysql

Geralmente quando instalamos o mysql podemos informar a senha de root. Muitas pessoas por não saberem direito não informam senha, deixando o banco aberto a qualquer usuário e se estiver usando a net, ai então é que está vulnerável mesmo. Por isso resolvi postar como alterar a senha do usuário root.

Você pode fazer isto como a seguir (perceba que a senha foi especificada utilizando a função PASSWORD() para a criptografia da mesma):

shell> mysql -u root mysql
mysql> SET PASSWORD FOR root@localhost=PASSWORD
('nova_senha');

Substitua 'nova_senha' pela senha que você deseja usar.

Se você souber o que esta fazendo, você também pode manipular diretamente a tabela privilégios:

shell> mysql -u root mysql
mysql> UPDATE user SET Password=PASSWORD('nova_senha')
-> WHERE user='root';
mysql> FLUSH PRIVILEGES;

Outra forma de configurar a senha é utilizando o comando mysqladmin:

shell> mysqladmin -u root password nova_senha

Somente usuários com acesso de escrita/atualização ao banco de dados mysql podem alterar a senha de outros usuários. Todos os usuários comuns (não os anônimos) podem alterar somente a própria senha com um dos comandos acima ou com SET PASSWORD=PASSWORD('nova_senha').

Perceba que se você atualizar a senha na tabela user diretamente utilizando UPDATE, você deve dizer ao servidor para reler as tabelas de permissões (com FLUSH PRIVILEGES), de outra forma a alteração não seria notificada.

Uma vez que a senha de root foi configurada, você deve informar a senha quando se conectar ao servidor MySQL como root.

Material retirado de: http://dev.mysql.com

segunda-feira, 23 de novembro de 2009

PythOnCampus


Pessoal,

Depois de muito tempo sem postar resolvi voltar com o blog aos poucos. Ultimamente tenho trabalhado muito, ministrando muitas aulas e ficando sem tempo para o blog.

Acontece que o IFF Fluminense, local onde atualmente sou professor fará um evento sobre Python nos dias 27 e 28 desse mês. Confiram a programação. Vale a pena conferir!

Algumas Palestras:

Dia 27/11

Horário: 15:30
Título: Coding Dojo - Tornando-se Faixa Preta em Programação

Horário: 16:15
Título: Desenvolvendo DSLs em Python

Horário: 17:00
Título: Servidor de Conversão de Documentos utilizando Open Office

Horário: 17:15
Título: Zope de Alta Performace com ERP5

Horário: 18:30
Título: The Zen Of Python

Horário: 19:15
Título: Python para brasileiros (Coral)

Horário: 19:30
Título: Software Livre e Launchpad.net: impulsionando sua carreira

Horário: 20:45
Título: Controlando Web Browsers

Horário: 21:00
Título: Modelagem multi-nível de Sistemas de Informação em Python

Horário: 21:45
Título: Utilizando Twitter com Python

-------------------------------------------------------------
Dia 28/11

Horário: 14:00
Título: A cobra que bebe café - Python + Java

Horário: 14:15
Título: Pyramid - BDD em Python

Horário: 15:15
Título: Programando a inteligência coletiva com Python

Horário: 15:30
Título: Welcome to the Jungle

Horário: 16:30
Título: Desenvolvendo Ágil para Web com web2py

Horário: 17:15
Título: Multimídia com GStreamer

Horário: 17:30
Título: Frameworks Web

Horário: 18:15
Título: Do Código ao Diagrama: Prisma

-------------------------------------------------
Nos dias 27 e 28 de Novembro, o NSI (Núcleo de Pesquisa em Sistemas de Informação) trará a PythOnCampus para o IFF.

O evento contará com palestras e mini-cursos sobre a linguagem de programação Python, que tem como objetivo trazer esta linguagem pra dentro das universidades.

A PythOnCampus será realizada no campus Campos-Centro do IF Fluminense, na rua Dr. Siqueira, 273 - Pq. Dom Bosco, Campos dos Goytacazes.


Quem quiser fazer inscrição para os minicursos, pode acessar o endereço http://www.pythoncampus.iff.edu.br

quarta-feira, 8 de abril de 2009

Formas de usar o CSS

Pessoal,estou postando as três formas de se inserir código css em sites html.

A primeira forma é dentro da própria tag do html.

A segunda forma é dentro do cabeçalho do html.

A terceira forma que é mais recomendada e mais utilizada consiste em linkar um arquivo .css no seu html. Você pode usar este mesmo arquivo para várias páginas.


O material foi retirado do site: http://www.pt-br.html.net/tutorials/css/

quinta-feira, 2 de abril de 2009

Introdução a Engenharia de Softwares - Parte 5

Histórico da evolução do Software
Pessoal, hoje vamos falar sobre o surgimento do software. É uma história muito interessante. É claro que será bem resumida, porque afinal são mais de 50 anos de evolução.

O quadro acima resumi bem o que aconteceu mais ou menos em cada época.

Não sei se todos lembram, mas quando foi inventado o primeiro computador, o Eniac (1946), os softwares eram programados na mão, através de painéis. O programador, ou operador como era conhecido na época, fazia as instruções de programa através de painéis elétricos. Como naquela época não existiam memória, hd ou qualquer dispositivo parecido, era preciso conectar fios, relês e seqüências de chaves para que se determinasse a tarefa a ser executada. A cada tarefa diferente o processo deveria ser refeito. A resposta era dada por uma seqüencia de lâmpadas.

Então se tivessemos 10 programas para ser executado, eles teriam que ser executados um após o outro, em lote (processamento batch).

Mais tarde com o advento da memória, que naquela época eram as famosas fitas magnéticas, e com computadores que possuiam leitores de fitas, os computadores já podiam ler, processar e gravar o resultado em outras fitas que posteriormente teriam que ser introduzidas em outro computador para que fizessem a impressão nos cartões perfurados.

Isso trazia muitos problemas, porque os computadores eram lentos e se tivessem processando alguma fita de dados, a próxima fita a ser processada deveria esperar a anterior acabar todo o processo, que as vezes levava dias. Foi devido a esse problema que inventaram a memória, e mais tarde a multiprogramação, mas esse é assunto pro próximo post.

Introdução ao Python


Realmente somente utilizando para poder quebrar o preconceito que os mais experientes programadores tem a linguagens da moda. Uma linguagem recente mas que pode oferecer muito é o Python. Aqui apenas uma introdução a linguagem.

Python é uma linguagem de programação dinâmica e orientada a objetos que pode ser usada por diferentes tipos de desenvolvimento de software. Ele oferece um forte suporte para integração com outras linguagens e ferramentas, vem com uma extensa biblioteca padrão, e pode ser aprendida em poucos dias.

Muitos programadores Python relatam um substancial ganho de produtividade e sentem que a linguagem encoraja o desenvolvimento de alta qualidade, com código de mais fácil manutenção.

Python roda no Windows, Linux/Unix, Mac OS X, OS/2, Amiga, Palm Handhelds, e telefones celulares Nokia. Python também pode ser usado nas plataformas Java e .NET.

Python é distribuído sobre a licensa open source que a torna free para uso, mesmo para produtos comerciais.

A Python Software Foundation (PSF) mantém e protege os direitos de propriedade intelectual por trás do Python.

O interpretador Python é facilmente estendido com novas funções e tipos de dados implementados em C or C++ (pu outra linguagem chamada por C). Os programas feitos em Python são as vezes bem menores que programas feitos em C ou C++.


  • Não é necessário declarar variáveis.
  • Expressões complexas podem ser resolvidas em simples sentenças
  • Não é preciso indicar início e fim de bloco (ex. Begin...End)

Leia mais: Python

Links

Related Posts with Thumbnails