Vários code pages em PDF

Muito interessante:

http://www.easymarketplace.de/codepages.php

PDF para cada EBCDIC e ASCII code page.

Anúncios

Problemas de um Block Size pequeno

Este post é só para constatar a boa ou má elaboração de um job.

Um programa Cobol deveria rodar 30 minutos aproximadamente concorrendo com outras aplicações. Por ser uma execução emergencial, não foi aguardado o período de janela ou menor utilização de máquina.

Quando o job foi montado, colocou-se o Block Size do arquivo de saída igual ao LRECL (tamanho do registro). A idéia é que o sistema grave blocos com uma boa quantidade de registros, e não registro a registro. Do jeito que foi montado ele está fazendo a “desgastante” operação de I/O a cada linha. Em uma leitura de batimento de um arquivo de entrada de 130 milhões de registros, o tempo de duração foi de 30 minutos (estimado) para 2h30min. De quebra deu ABEND S837  pela quantidade de volumes máxima pré-configurada e talves atrapalhada pelo tamanho mínimo do bloco.

Após a correção do Job no tamanho do BLKSIZE (deve ser um múltiplo do tamanho registro do registro) para um valor considerável (por isso bloco) a execução ocorreu em 29min.

Use sempre um múltiplo bem alto para menor operação de I/O, mas lembre-se que você deve avaliar a utilização para o propósito da sua execução.

Abraço!

Usando contador de grupo periódico

De vez em quando precisamos contar quantos elementos temos em um vetor no banco (Adabas) através de um programa Natural.
Muitas vezes deparei com um código fazendo um loop de 1 a 199 e verificando um a um para ver se não está em branco ou zerado.
Ok! Às vezes é necessário, pois não se sabe como o programa foi inicialmente concebido e como pode se comportar (deixar posições sem uso, por exemplo). De qualquer forma, uma maneira de verificar a quantidade de elementos no vetor (múltiplo ou periódico) é usar o count:

IF C*GR-HISTORICO EQ 0...

Isso faz com que eu veja se está vazio – nunca foi populado -, ou já tem algo – quantos tem.
Hmmm deu pau 0047 (erro na definição da variável)…

Na definição do seu programa deve estar assim:
1 F513 VIEW OF AA-SIMRAV-ATIVACAO
...
2 C*GR-HISTORICO
2 GR-HISTORICO (1:191)
3 CO-HISTORICO
3 DA-HISTORICO
...

Deve-se repetir o campo, uma vez com o “C*” e a outra a definição propriamente dita. Aí funciona!

Date and Time

É sempre bom relembrar as variáveis de ambiente para trabalhar com data e hora no Natural. Chupinhado do site da SoftwareAg (http://documentation.softwareag.com/natural/nat426mf/vari/dtime.htm).

Data

Variável Formato/Tamanho Formato*
*DATD A8 DD.MM.YY
*DAT4D A10 DD.MM.YYYY
*DATE A8 DD/MM/YY
*DAT4E A10 DD/MM/YYYY
*DATG A15 DDNomeDoMêsYYYY (data gregoriana)
*DATI A8 YY-MM-DD
*DAT4I A10 YYYY-MM-DD
*DATJ A5 YYDDD (data juliana anual / dia no ano)
*DAT4J A7 YYYYDDD (data juliana anual / dia no an)
*DATN N8 YYYYMMDD
*DATU A8 MM/DD/YY
*DAT4U A10 MM/DD/YYYY
*DATV A11 DD-Mês-YYYY
*DATVS A9 DDMONYYYY
*DATX D formato de data interno

* D = dia, M = mês, Y = ano, Mês = apenas as 3 primeiras letras do nome obtido por *DATG

Hora

Variável Formato/Tamanho Explicação
*TIMD (r) N7 Pode apenas ser usado junto com o comando SETTIME, pois fornece a diferença de tempo no formato HHIISST da sua execução do SETTIME e a da chamada da variável.(r) representa o label/marca ou linha do comando SETTIME usado como base para o *TIMD.
*TIME A10 Contem a hora do dia no formato HH:II:SS.T (*).
*TIME-OUT N5 Contem o número de segundos antes da transação atual dar time out (apenas disponível com Natural Security).*TIME-OUT é 0 se o mode transacional não foi acionado, que somente ocorre quando é executado um FINDREAD or GET para ler um registro da base para atualizá-lo.

*TIME-OUT é reiniciado para 0 quando um END TRANSACTION ou BACKOUT TRANSACTION é executado.

*TIMESTMP B8 Valor do relógio interno da máquina.

Sob BS2000/OSD, este valor é disponível como hora local ou como GMT. Para ser consistente em todos os ambientes, o conteúdo de *TIMESTMP sob BS2000/OSD é sempre em GMT.

*TIMN N7 Contém a hora do dia no formato HHIISST (*).
*TIMX T Contém  a hora do dia no formato de hora interno.

* H = hora, I = minuto, S = segundo, T = décimo de segundo.

 

Linguagens Antigas

Recebemos um comentário a respeito de linguagens antigas. Respondi, mas vou postá-lo por achar interessante a possibilidade de discussão. Quer quiser opinar, questionar, discordar, complementar… fique à vontade!

Nadia disse:
agosto 6, 2010 às 7:55 pm

Olá Daniel! Beleza?
Eu estou fazendo meu TCC sobre Cobol e estou procurando por linguagens antigas, na verdade eu ia comentar sobre o Natural como uma linguagem que não se usava mais, mas pesquisando eu vi que ainda usa-se bastante. Você sabia me dizer quais tipo de empresas usam e porque ainda usam?

Muito obrigada!

=)

Resposta:

Nadia,

Vai ser muito difícil você achar uma linguagem que não se usa mais. Existem linguagens da moda, linguagens que se fixaram, outras já tiveram seu ápice, mas deixar de ser usada… ainda existe até programas rodando em clipper… vai numa lojinha de bairro e olha para a tela.
Com relação ao Cobol ou Natural, muitas empresas usam, principalmente que necessitam de grande processamento e grande massa de dados em mainframe como bancos e órgãos governamentais (SERPRO, PRODESP etc). Um dos motivos é que sistemas grandes e antigos estão consolidados e realizar alterações drásticas como plataforma migrando para algo ainda com performance e confiabilidade desconhecida é muito arriscado, além de muito custoso.
Cuidado para não iniciar o seu TCC por um caminho irreal! As linguagens surgem para suprir uma necessidade, seja ela performance, arquitetura, ambiente, facilidade, hardware ou qualquer outra coisa. Enquanto houver essa necessidade, ela pode ser aos poucos substituída, mas dificilmente completamente erradicada. Cobol ainda é muito usado, por exemplo, já que foi citado no seu comentário – peça a lista de casamento no Extra e olhe para a tela da atendente. E Natural, há 1 ou 2 anos foi lançada a nova versão. Já ouvi muita coisa sobre estas linguagens e sobre “agora é só Java” (que é uma excelente plataforma para integração e reaproveitamento com código moderno em OO), mas é na maioria das vezes empolgação de quem não sabe o que está falando, ou que acreditou em fulano e repassa como verdade… ou necessidade de auto-afirmação… rsrs. Mais uma vez: CUIDADO para não cair em armadilhas!

Bjo e bom TCC!