tag:blogger.com,1999:blog-56304739575829677462024-03-19T04:59:05.500-03:00What's the deal with...Blog que trata sobre novas tendências em meteorologia, bem como uma visão humorada do cotidiano carioca.Tozzihttp://www.blogger.com/profile/01966951944976005794noreply@blogger.comBlogger81125tag:blogger.com,1999:blog-5630473957582967746.post-9816448888613659552009-02-19T21:45:00.004-03:002009-02-20T00:32:19.653-03:00Matéria de variabilidade climática no mestradoNesse período do mestrado eu fiz uma matéria na <a href="http://www.meteorologia.ufrj.br/home.asp">Meteorologia</a> chamada Variabilidade Climática. A matéria, apesar de ser bem longa e complexa, foi bem interessante e me acrescentou muito profissionalmente.<br /><br />Como cientistas, nós não podemos ver a ciência apenas como números, equações, grades e experimentos. Temos que ver a ciência aplicada na vida cotidiana e toda essa mobilização em torno das <a href="http://mudancasclimaticas.cptec.inpe.br/abc/index.html">mudanças climáticas</a>, <a href="http://www.ipcc-data.org/">IPCC</a>, cenários e etc tem sido bem interessante para nossa formação como meteorologistas.<br /><br />Estou colocando abaixo algumas apresentações da última metade do curso, sobre as mudanças climáticas. O material é todo da professora <a href="http://buscatextual.cnpq.br/buscatextual/visualizacv.jsp?id=K4782467U4">Claudine Dereczynski</a>, do departamento de Meteorologia da UFRJ.<br /><br /><li><a href="https://dl.getdropbox.com/u/554731/blog/Mudan%C3%A7as_Climaticas_Globais_060808.ppt">Mudanças_Climaticas_Globais_060808.ppt</a><br /></li><br /><li><a href="https://dl.getdropbox.com/u/554731/blog/Unidade2_T%C3%A9cnicas_Reconstru%C3%A7%C3%A3o_Climas_Passados.ppt">Unidade2_Técnicas_Reconstrução_Climas_Passados.ppt</a><br /></li><br /><li><a href="https://dl.getdropbox.com/u/554731/blog/Unidade4_Variabilidade_Natural.ppt">Unidade4_Variabilidade_Natural.ppt</a><br /></li><br /><li><a href="https://dl.getdropbox.com/u/554731/blog/Unidade5_Negocia%C3%A7%C3%B5es_Internacionais.ppt">Unidade5_Negociações_Internacionais.ppt</a></li><br /><br />Este material cobre desde os protocolos internacionais até detalhes sobre as técnicas de reconstrução de climas passados. É um material bem abrangente.<br /><br />A outra metade do curso, ministrada pela professora <a href="http://buscatextual.cnpq.br/buscatextual/visualizacv.jsp?id=K4783276Z6">Maria Gertrudes Justi</a>, será colocada em breve num post à parte. O tema era sobre as oscilações que regem a variabilidade climática.<br /><br />Vale a pena dar uma boa olhada neste material (o ideal é ouvir a explicação também, claro...).Tozzihttp://www.blogger.com/profile/01966951944976005794noreply@blogger.com0tag:blogger.com,1999:blog-5630473957582967746.post-81170231962864353242009-02-10T09:44:00.006-02:002009-02-10T13:04:42.285-02:00Migração do NCEP para o formato GRIB2Todos que mexem com modelagem numérica em meteorologia já devem ter ouvido falar do <a href="http://www.ncep.noaa.gov/">NCEP/NOAA (National Centers for Environmental Prediction / National Oceanic and Atmospheric Administration)</a>, que é o órgão "oficial" de modelagem para previsão de tempo e clima dos EUA.<br /><br />Desde o primeiro semestre de 2008, o <a href="http://www.ncep.noaa.gov/">NCEP</a> tomou a decisão de atualizar aos poucos o sistema de armazenamento e difusão de produtos de observação, tempo e clima. O plano de atualização incluia mudanças relativas à rede interna e externa, máquinas, serviços e formatos de armazenamento e distribuição de dados. Uma das mudanças marcadas para o começo de 2009 era a atualização dos produtos de seus modelos para o formato GRIB2, atual formato padrão da <a href="http://www.wmo.ch">WMO (Organização Meteorológica Mundial)</a> para dados espaçados em formato de grade. Esta migração já está em curso e desse ser completada ainda nesse mês.<br /><br />A migração para este novo formato está em curso em todos os grandes centros do mundo, apesar deste formato ser em grande parte incompatível com aplicações que usem o formato anterior (GRIB1), e portanto requerer uma conversão para que os produtos continuem sendo utilizados por estas aplicações.<br /><br /><br /><span style="font-weight:bold;">GRIB2</span><br /><br />Há anos a <a href="http://www.wmo.ch/">WMO</a> vem ditando os formatos padrões de distribuição e armazenamento de dados de meteorologia, seja para dados observados como para dados previstos de tempo e clima.<br /><br />Desde 1985, o formato <a href="http://en.wikipedia.org/wiki/GRIB">GRIB</a> (GRIdded Binary) tem sido o formato padrão adotado para a transmissão de dados espaçados em formato de grade, com várias vantagens, por exemplo o tamanho reduzido (devido a uma compactação intrínseca à codificação dos dados). Em novembro de 2001, após dois anos de testes e validações, a <a href="http://www.wmo.ch/">WMO</a> aprovou o padrão GRIB2, que seria uma evolução do padrão anterior (agora conhecido como GRIB1), mas nos mesmos moldes de codificação interna.<br /><br />Em termos gerais, a grande diferença entre GRIB1 e GRIB2 é a flexibilidade e compactação do último. Uma desvantagem no uso do GRIB1 era a sua dificuldade ao lidar com previsões por conjunto (ensembles), dados complexos de clima e dados espectrais. O novo formato agrega soluções para esses problemas dentro da própria codificação, além de uma maior compressão dos dados e ser modular, tornando fácil acrescentar características sem a necessidade de fazer atualizações de software.<br /><br />Em resumo, o GRIB2 é um novo formato que traz maiores possibilidades para o armazenamento e transmissão de dados meteorológicos, ocupando pelo menos a metade do tamanho que um arquivo GRIB1, ou seja, com maior facilidade para ser transferido pela Internet.<br /> <br />Apesar de terem uma codificação baseada no mesmo princípio, os formatos GRIB1 e GRIB2 não são inteiramente compatíveis. Aplicações de GRIB1 não podem acessar GRIB2, enquanto que aplicações GRIB2 não necessariamente podem ser capazes de ler GRIB1. Existem vários conversores disponíveis para fazer esta mudança de formato, como o cvngrib. Uma lista de codificadores, decodificadores e conversores de e para GRIB2 pode ser encontrada em <a href="http://www.nco.ncep.noaa.gov/pmb/codes/GRIB2">http://www.nco.ncep.noaa.gov/pmb/codes/GRIB2</a><br /><br />Uma explicação técnica sobre a codificação de GRIB1 e GRIB2 pode ser encontrada nos links abaixo:<br /><a href="http://www.nws.noaa.gov/tdl/iwt/grib2/GRIB.427.pdf">http://www.nws.noaa.gov/tdl/iwt/grib2/GRIB.427.pdf</a><br /><a href="http://www.wmo.ch/pages/prog/www/WMOCodes/Guides/GRIB/Introduction_GRIB1-GRIB2.pdf">http://www.wmo.ch/pages/prog/www/WMOCodes/Guides/GRIB/Introduction_GRIB1-GRIB2.pdf</a><br /><a href="http://www.cptec.inpe.br/ManualGrADS/grib2.html">Criando GRIB no GrADS</a>Tozzihttp://www.blogger.com/profile/01966951944976005794noreply@blogger.com1tag:blogger.com,1999:blog-5630473957582967746.post-40091643502975248222009-02-01T10:00:00.003-02:002009-02-06T21:07:04.061-02:00Visualização de previsão numérica de tempo do CPTEC/INPEQuem me conhece ou já acompanha o blog há mais tempo sabe que eu sou bem exigente com a análise e visualização dos produtos de previsão de tempo. Afinal, de que adianta uma boa previsão se ela é difícil de ser visualizada? De que adianta uma boa física se não conseguimos traduzir essa informação em algo útil para nossas necessidades?<br /><br />Pois o <a href="http://previsaonumerica.cptec.inpe.br">site de previsão numérica do CPTEC/INPE</a> foi totalmente remodelado (junto com o restante do portal do centro) e ganhou um serviço bem interessante de visualização online de campos e produtos de meteorologia.<br /><br /><a href="http://previsaonumerica.cptec.inpe.br"><img src="http://luizrodrigotozzi.googlepages.com/cptec_sys.jpg" border=0></a><br /><br />O visual é bem compacto e as ferramentas são intuitivas (diferente daquela animação antiga, que era bem confusa de se usar). A animação agora é bem localizada e simples, usando com certeza várias das idéias que já tinham sido comentadas aqui no post <a href="http://thedealwith.blogspot.com/2007/12/animando-mapas-de-meteorologia.html">Animando mapas de meteorologia</a>. Um destaque é o zoom e movimentação do mapa, que funcionam muito bem e NÃO PIXALIZA A IMAGEM, algo que era minha reclamação com o <a href="http://pirandira.cptec.inpe.br/sigma/">sistema SIGMA do DSA</a>. O exemplo abaixo mostra bem que não há perda de qualidade com o zoom.<br /><br /><a href="http://previsaonumerica.cptec.inpe.br"><img src="http://luizrodrigotozzi.googlepages.com/cptec_zoom.jpg" border=0></a><br /><br />Há ainda a geração dinâmica de meteogramas e perfis verticais, bastando clicar na opção desejada e depois no ponto de interesse. Isso sem contar na opção de salvar as figuras em PDF (que podia ter algumas opções de personalizar o texto e o nome do arquivo, mas que seja...).<br /><br />O desempenho também está muito bom, muito superior do que os primeiros protótipos de anos atrás.<br /><br />Em resumo, parece que o pessoal da Visualização do CPTEC estava inspirado dessa vez e fez um ótimo trabalho! Valeu a pena eu encher a paciência deles, viu?! risosTozzihttp://www.blogger.com/profile/01966951944976005794noreply@blogger.com0tag:blogger.com,1999:blog-5630473957582967746.post-88199746636740767872008-11-12T13:18:00.001-02:002008-11-12T15:25:39.156-02:00Dicas para Wiki em Meteorologia<div style="text-align: center; font-weight: bold; font-style: italic; font-family: arial;">POST EM CONSTANTE ATUALIZAÇÃO<br />PARA VER MAIS DICAS, ASSUNTOS E COMANDOS<br />BUSQUE NA BARRA ACIMA, À ESQUERDA</div><br />O <a href="http://www.gepac.meteoro.ufrj.br/index1.php/P%C3%A1gina_principal">Grupo de Estudos, Prognósticos e Análises de Clima da UFRJ (GePaC)</a> me pediu para desenvolver um portal de conteúdo na internet, que não só disponibilizasse produtos mas também trabalhos e artigos. Para isso eu logo pensei que a saída correta era apostar em uma página de Wiki, ou seja, um site onde cada aluno, professor e colaborador ficaria responsável por atualizar o que lhe compete.<br /><br /><img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 130px; height: 125px;" src="http://upload.wikimedia.org/centralnotice/images/puzzle-piece.png" border="0" alt="" />Instalei o <a href="http://www.mediawiki.org/wiki/MediaWiki">MediaWiki</a> em poucos minutos e recomendo! O help do sistema está em <a href="http://meta.wikimedia.org/wiki/Help:Contents">http://meta.wikimedia.org/wiki/Help:Contents</a><br /><br />Coloco abaixo algumas dicas e trechos de códigos que para mim foram bem úteis:<br /><br />PS.: o site do GePaC ainda está em endereço e com cara provisórios, mas em breve será lançado oficialmente.<br /><br /><span style="font-weight:bold;">Inserir figuras como links externos usando Clickpic</span><br /><span style="font-style:italic;"><span style="font-weight:bold;">Uso:</span></span><pre>{{clickpic|LINK|ENDEREÇODAFIGURA}}<br />{{clickpic|Clima|http://www.algo.com/clima.jpg}}</pre><span style="font-style:italic;"><span style="font-weight:bold;">Conteúdo da Predefinição:Clickpic</span></span><pre><span class="plainlinks">[{{SERVER}}{{localurl:{{{1}}}}} {{{2}}}]</span><br /></pre><br /><br /><span style="font-weight:bold;">Tabela em WIKI com formatação de HTML e CSS</span><br /><pre>{| valign="top" class="wikitable"<br />style="margin: 1em auto 1em auto"<br />|-<br />| A 1<br />| B 1<br />| C 1<br />|-<br />| A 2<br />| B 2<br />| C 2<br />|-<br />|}<br /></pre><br /><br /><span style="font-weight:bold;">Usando iframe em Wiki</span><br /><span style="font-style:italic;"><span style="font-weight:bold;">Uso:</span></span><pre>< websiteFrame ><br />website=http://www.paginaasermostrada.com.br<br />height=400<br />width=100%<br />border=0<br />scroll=yes<br />< / websiteFrame ></pre><br /><span style="font-style:italic;"><span style="font-weight:bold;">Instalação desta tag de Wiki:</span></span><br /><a href="http://www.mediawiki.org/wiki/Extension:Website_in_iFrame">Website in iFrame</a><br /><br /><br /><div style="text-align: center; font-weight: bold; font-style: italic; font-family: arial;">POST EM CONSTANTE ATUALIZAÇÃO<br />PARA VER MAIS DICAS, ASSUNTOS E COMANDOS<br />BUSQUE NA BARRA ACIMA, À ESQUERDA</div>Tozzihttp://www.blogger.com/profile/01966951944976005794noreply@blogger.com0tag:blogger.com,1999:blog-5630473957582967746.post-88699715240110473512008-10-10T20:55:00.001-03:002009-02-06T17:55:54.212-02:00Workshop Latino Americano de Dados - UNIDATANo dia 21 de agosto de 2008 teve início o <a href="http://www.unidata.ucar.edu/events/2008LatinAmericanDataWorkshop">Latin American Data Workshop (Workshop Latino Americano de Dados)</a> do <a href="http://www.unidata.ucar.edu">Unidata Program Center / UCAR</a> e com apoio do <a href="http://www.iag.usp.br">Instituto de Astronomia, Geofísica e Ciências Atmosféricas da USP</a> (onde também foi realizado o workshop).<br /><br />O programa foi dividido em 3 dias com muitas apresentações e exemplos práticos de como o mundo científico da nossa área de meteorologia está se adaptando à nova realidade de gerar toneladas de informações e compartilhá-las em tempo real, para aplicações também em tempo real.<br /><br />A responsabilidade do workshop ficou a cargo de pessoas que já têm um longo histórico em lidar com dados geofísicos, como Tom Yoksas (<a href="http://www.unidata.ucar.edu">UNIDATA/EUA</a>), Waldenio Gambi (<a href="http://www.cptec.inpe.br">CPTEC/INPE</a>), Tom Whittaker (<a href="http://www.ssec.wisc.edu">University of Wisconsin/EUA</a>) e Guilherme Chagas (<a href="http://www.ua.pt">UA/Portugal</a>).<br /><br />O workshop cobriu vários aspectos, como:<br /><ul><li> o uso do sistema LDM de distribuição de informação para compartilhar dados meteorológicos</li><br /><li> o papel do Brasil no IDD</li><br /><li> o uso de programas de visualização desses dados (McIDAS, IDV, Google Earth, etc)</li><br /><li> ferramentas de ensino e colaboração online</li><br /></ul><br />Muita gente sequer conhece muitas dessas siglas e tópicos aí em cima. Nos próximos posts vou dar um enfoque a cada um desses temas e explicar cada uma dessas siglas e serviços! <br /><br />Para maiores informações sobre o workshop, visite o site <a href="http://www.unidata.ucar.edu/events/2008LatinAmericanDataWorkshop/">http://www.unidata.ucar.edu/events/2008LatinAmericanDataWorkshop/</a>, que tem várias fotos, apresentações e material do curso.Tozzihttp://www.blogger.com/profile/01966951944976005794noreply@blogger.com0tag:blogger.com,1999:blog-5630473957582967746.post-83567172979462913652008-10-04T19:24:00.000-03:002008-10-31T22:25:17.556-02:00OpenGrADS CookbookVeja Também:<br />- <a href="http://thedealwith.blogspot.com/2008/01/opengrads-uma-nova-verso-do-grads-com.html">OpenGrADS: uma nova versão do GrADS com grandes melhorias</a><br /><br /><br /><img style="margin: 0pt 0pt 0px 0px; float: right;" src="http://cookbooks.opengrads.org/skins/clean/wikilogo.small.gif" alt="" border="0" />Eu comentei num post anterior (<a href="http://thedealwith.blogspot.com/2008/01/opengrads-uma-nova-verso-do-grads-com.html">OpenGrADS: uma nova versão do GrADS com grandes melhorias</a>) que a comunidade científica tem se esforçado para manter um projeto de código livre chamado <a href="http://opengrads.org/">OpenGrADS</a>, que contém uma série de melhorias para o <a href="http://www.iges.org/grads/">GrADS</a>. Para quem não sabe GrADS significa <span class="plaintext">Grid Analysis and Display System e é um programa de visualização de dados georeferenciados geofísicos muito (muito) utilizado na área de meteorologia. Ele foi desenvolvido no começo da década de 90 e é mantido até hoje por um grupo de desenvolvedores no IGES (<a href="http://www.iges.org/aboutiges.html">Institute of Global Environment and Society/COLA</a>).<br /><br />O projeto OpenGrADS veio para dinamizar o processo de atualização do GrADS, em função das necessidades da própria comunidade e não necessariamente do IGES.<br /><br />Tem muita coisa legal rolando nesse projeto e uma das mais interessantes para o usuário final é o <a href="http://cookbooks.opengrads.org/index.php?title=Table_of_Contents">OpenGrADS Cookbook</a>. Traduzindo ao pé da letra seria "Caderno de receitas do OpenGrads".<br /><br />No caderno de receitas, a comunidade pode postar (seguindo algumas regras) códigos, dicas e tutoriais sobre como fazer determinadas coisas no GrADS. Têm tópicos como "</span><a href="http://cookbooks.opengrads.org/index.php?title=Recipe-002:_Saving_GrADS_variable_data_to_a_text_file" title="Recipe-002: Saving GrADS variable data to a text file">Saving GrADS variable data to a text file</a><span class="plaintext">", "</span><a href="http://cookbooks.opengrads.org/index.php?title=Recipe-005:_Creating_GrADS_binary_station_data_from_ASCII" title="Recipe-005: Creating GrADS binary station data from ASCII">Creating GrADS binary station data from ASCII</a><span class="plaintext">", "</span><a href="http://cookbooks.opengrads.org/index.php?title=Recipe-009:_Scatter_plot_with_linear_fit_and_basic_statistics" title="Recipe-009: Scatter plot with linear fit and basic statistics">Scatter plot with linear fit and basic statistics</a><span class="plaintext">" e eu mesmo já escrevi uma receita: <a href="http://cookbooks.opengrads.org/index.php?title=Recipe-013:_Gridding_and_Plotting_Station_Data" title="Gridding and plotting station data">Gridding and plotting station data</a>.<br /><br /><img style="margin: 0px; float: left;" src="http://luizrodrigotozzi.googlepages.com/guiabolso-livro.jpg" alt="" width="270" border="0" height="225" />Acredito que esse seja o meio mais facil de dividir conhecimento sobre o GrADS e seu irmão mais novo (e mais esperto) OpenGrADS.<br /><br />Nas próximas semanas vou escrever aqui com mais calma algumas das melhorias do OpenGrADS, como figuras mais bem acabadas, suporte a shape file e várias interfaces.<br /><br /><span style="font-style: italic;">Em tempo: qualquer um pode contribuir no OpenGrADS Cookbook. Basta se cadastrar, confirmar o cadastro, escrever uma prévia da receita (em inglês, claro) e submeter para o administrador ver se a receita é boa. Se for aprovada, basta fechar a receita!</span><br /></span><br /><br /><br />Veja Também:<br />- <a href="http://thedealwith.blogspot.com/2008/01/opengrads-uma-nova-verso-do-grads-com.html">OpenGrADS: uma nova versão do GrADS com grandes melhorias</a>Tozzihttp://www.blogger.com/profile/01966951944976005794noreply@blogger.com5tag:blogger.com,1999:blog-5630473957582967746.post-87242524605048170092008-09-07T13:14:00.002-03:002010-10-11T19:01:27.830-03:00Previsão do Tempo no orkutVeja Também:<br />- <a href="http://thedealwith.blogspot.com/2007/12/widgets-de-previso-do-tempo-para-blogs.html">Widgets de Previsão do Tempo para Blogs e Sites</a><br />- <a href="http://thedealwith.blogspot.com/2008/01/gadgets-de-previso-do-tempo-para.html">Gadgets de Previsão do Tempo para iGoogle</a><br />- <a href="http://thedealwith.blogspot.com/2008/05/complemento-de-firefox-para-previsao-do.html">Complemento de Firefox para Previsão do Tempo</a><br />- <a href="http://thedealwith.blogspot.com/2008/07/opensocial-e-previsao-de-tempo.html">Opensocial e Previsão do Tempo</a><br /><br /><br /><img style="margin: 0pt 10px 10px 0pt; float: right; width: 320px;" src="http://luizrodrigotozzi.googlepages.com/tempoagora.gif" alt="" border="0" />Finalmente começam a aparecer os primeiros aplicativos sociais de meteorologia no orkut.<br /><br />Na realidade até agora só foi a público um aplicativo: o <a href="http://tempoagora.uol.com.br/orkut.html/">Tempo Amigo</a>, da <a href="http://tempoagora.uol.com.br/">Tempo Agora (Somar)</a>.<br /><br />A idéia do aplicativo é muito boa. Na descrição do aplicativo: "Localize seus amigos pelo mapa, veja onde eles moram, e tambem confira a previsão do tempo para a sua cidade, e para as cidades dos seus amigos com as informações do TempoAgora."<br /><br />O aplicativo é essencialmente um mapa com a sua foto de orkut e a de seus amigos num mapa e na lateral uma previsão simples para o próprio dia e para o dia seguinte.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://luizrodrigotozzi.googlepages.com/tempoamigo1.jpg"><img style="margin: 0pt 10px 10px 0pt; cursor: pointer; width: 420px;" src="http://luizrodrigotozzi.googlepages.com/tempoamigo1.jpg" alt="" border="0" /></a><br />A minha opinião faltou um pouco mais de cuidado ao desenvolver esse aplicativo, por vários detalhes.<br /><br />Primeiro que ao iniciar o aplicativo a foto de orkut sempre aparece num lugar diferente. Nas duas imagens (aqui em cima e aqui embaixo) a minha foto apareceu primeiro na favela do Borel e depois boiando na Baia de Guanabara! Ué? Não poderiam pegar o CEP do perfil de orkut e colocar a minha foto na minha rua? Ou mesmo usar o esquema do aplicativo <a href="http://www.orkut.com.br/AppInfo.aspx?appUrl=http%3A%2F%2Fbr1514.mentez.com%2Fngbh.xml&objs=&sn=&ref=SR">Vizinhança</a>, que pergunta para você seu endereço e tem até balões com informações e Google Earth embutido.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://luizrodrigotozzi.googlepages.com/tempoamigo2.jpg"><img style="margin: 0pt 10px 10px 0pt; cursor: pointer; width: 420px;" src="http://luizrodrigotozzi.googlepages.com/tempoamigo2.jpg" alt="" border="0" /></a><br /><br />Segundo que o aplicativo explora muito pouco a interatividade do orkut e também a interface do mapa do google maps. Têm infinitas possibilidades de coisas para fazer e a unica coisa que fazem é um mapa e uma previsao estática fora do mapa?<br /><br />Entenderia algo assim no Orkut Sandbox, em fase de testes, mas para algo lançado oficialmente e até com hotsite no Tempo Agora, achei muito pobre.<br /><br />Bem, já é pelo menos um começo. É esperar para ver se vão lançar aplicativos melhores no futuro!<br /><br />Veja Também:<br />- <a href="http://thedealwith.blogspot.com/2007/12/widgets-de-previso-do-tempo-para-blogs.html">Widgets de Previsão do Tempo para Blogs e Sites</a><br />- <a href="http://thedealwith.blogspot.com/2008/01/gadgets-de-previso-do-tempo-para.html">Gadgets de Previsão do Tempo para iGoogle</a><br />- <a href="http://thedealwith.blogspot.com/2008/05/complemento-de-firefox-para-previsao-do.html">Complemento de Firefox para Previsão do Tempo</a><br />- <a href="http://thedealwith.blogspot.com/2008/07/opensocial-e-previsao-de-tempo.html">Opensocial e Previsão do Tempo</a>Tozzihttp://www.blogger.com/profile/01966951944976005794noreply@blogger.com1tag:blogger.com,1999:blog-5630473957582967746.post-49595345602084907392008-09-01T21:33:00.003-03:002008-11-04T09:45:57.435-02:00Exemplo de consultas para MySQL<div style="text-align: center; font-weight: bold; font-style: italic; font-family: arial;">POST EM CONSTANTE ATUALIZAÇÃO<br />PARA VER MAIS DICAS, ASSUNTOS E COMANDOS<br />BUSQUE NA BARRA ACIMA, À ESQUERDA</div><br />Eu coloquei abaixo alguns exemplos de consultas para bancos de dados MySQL em meteorologia...<br /><br /><span style="font-weight: bold;">CONSULTAS SIMPLES DA TABELA <span style="font-style: italic;">WRF</span></span><br /><pre>select * from WRF;<br />select Tempo_Início, Tempo_Previsão, Localidade, T2M from WRF;<br />select T2M from WRF where Localidade="Palmas" and<br />Tempo_Previsão="1993-05-02 03:00:00";<br />select T2M from WRF where (Localidade="Palmas" or<br />Localidade="Abreulandia") and<br />Tempo_Previsão<"1993-05-02 03:00:00";</pre><br /><span style="font-weight: bold;">USANDO GROUP</span><br /><pre>select Localidade,max(PREC_CONV)-min(PREC_CONV) from WRF<br />where Tempo_Inicio="2007-03-20 00:00:00" and<br />(Tempo_Previsao>="2007-03-21 09:00:00" and<br />Tempo_Previsao<="2007-03-22 15:00:00") and<br />(Localidade="Itaperuna" or<br />Localidade="Rio de Janeiro") group by Localidade;</pre><br /><span style="font-weight: bold;">CONTAGEM</span><br /><pre>select count(*) from WRF<br />where Tempo_Início="2007-03-13 00:00:00" and<br />Localidade="Paraty";</pre><br /><span style="font-weight: bold;">UPDATE</span><br /><pre>update WRF set PREC_CONV=PREC_CONV*10;</pre><br /><span style="font-weight: bold;">DELETE</span><br /><pre>delete from WRF<br />where Localidade!="Rio de Janeiro" and<br />Localidade!="Palmas";</pre><br /><span style="font-weight: bold;">MULTIPLAS TABELAS</span><br /><pre>select Localidade from WRF9km,Localidade<br />where Tempo_Inicio='2007-05-14 00:00:00' and<br />Tempo_Inicio=Tempo_Previsao and<br />Localidade=Localidade.Nome limit 20;</pre><br /><span style="font-weight: bold;">PREC DIARIA USANDO CALCULO DE DATAS E GROUP BY<br />Pega so as 24h apesar de consultar tudo, 24 em 24h<br /></span><br /><pre>select * from<br />(select Tempo_Inicio as t0,<br />(1+floor((Tempo_Previsao-Tempo_Inicio-30000)/1000000))*24 as dia,<br />max(Tempo_Previsao) as t1,max((PREC_CONV+PREC_NCONV)*1) as p<br />from MM5<br />where Localidade='Rio de Janeiro' and<br />Tempo_Inicio>='2003-05-02 00:00:00' and<br />Tempo_Inicio<='2003-05-05 00:00:00' and<br />Tempo_Previsao>='2003-05-02 03:00:00' and<br />Tempo_Previsao<'2003-05-10 03:00:00'<br />group by 2,1 order by 1,2) as a where a.dia=24;</pre><br /><span style="font-weight: bold;">Junta a precipitação de uma tabela com a lat lon em outra</span><br /><pre>SELECT description,lat,lon,Prec FROM GeorioDia<br />INNER JOIN GeorioLatLon ON<br />GeorioLatLon.description = GeorioDia.Localidade<br />where GeorioDia.Data = '2007-09-09 00:00:00'<br />order by description asc;</pre><br /><span style="font-weight: bold;">PEGA WRF EM ALGUMAS CIDADES SO AS PRIMEIRAS 48 HORAS</span><br /><pre>SELECT Localidade,Tempo_Inicio,Tempo_Previsao,<br />FORMAT((UNIX_TIMESTAMP(Tempo_Previsao)-<br />UNIX_TIMESTAMP(Tempo_Inicio))/(60*60),0) as hprev,<br />U10M, V10M FROM `WRF`<br />WHERE (Localidade='Itaperuna' or<br />Localidade='Campos dos Goytacazes' or<br />Localidade='Resende' or<br />Localidade='Arraial do Cabo' or<br />Localidade='Macae' or<br />Localidade='Niteroi' or<br />Localidade='Parati' or<br />Localidade='Petropolis' or<br />Localidade='Teresopolis' or<br />Localidade='Duque de Caxias' or<br />Localidade='Mage')<br />and<br />((UNIX_TIMESTAMP(Tempo_Previsao)-<br />UNIX_TIMESTAMP(Tempo_Inicio))/(60*60)) <= 48 and<br />Tempo_Inicio>='2006-01-01 00:00:00' and<br />Tempo_Inicio<'2007-01-01 00:00:00';</pre><br /><br /><br /><div style="text-align: center; font-weight: bold; font-style: italic; font-family: arial;">POST EM CONSTANTE ATUALIZAÇÃO<br />PARA VER MAIS DICAS, ASSUNTOS E COMANDOS<br />BUSQUE NA BARRA ACIMA, À ESQUERDA</div>Tozzihttp://www.blogger.com/profile/01966951944976005794noreply@blogger.com0tag:blogger.com,1999:blog-5630473957582967746.post-67355746125127142822008-09-01T21:31:00.002-03:002008-11-04T09:46:16.724-02:00Tabelas de exemplo para MySQL<span style="font-weight: bold;">Esses são exemplos de como criar tabelas em MySQL para determinadas aplicações em Meteorologia<br /><br />TABELA DE MODELO - PREVISÕES EM SUPERFÍCIE</span><br />use <span style="font-style: italic;">modelos </span>;<br />CREATE TABLE `WRF` (<br />`Tempo_Início` datetime NOT NULL default '0000-00-00 00:00:00',<br />`Tempo_Previsão` datetime NOT NULL default '0000-00-00 00:00:00',<br />`Localidade` varchar(50) NOT NULL default '',<br />`PNMM` float NOT NULL default '0',<br />`PSUP` float NOT NULL default '0',<br />`T2M` float NOT NULL default '0',<br />`Q2M` float NOT NULL default '0',<br />`NEBB` float NOT NULL default '0',<br />`NEBM` float NOT NULL default '0',<br />`NEBA` float NOT NULL default '0',<br />`U10M` float NOT NULL default '0',<br />`V10M` float NOT NULL default '0',<br />`PREC_CONV` float NOT NULL default '0',<br />`PREC_NCONV` float NOT NULL default '0',<br />PRIMARY KEY (`Tempo_Início`,`Tempo_Previsão<div id="mb_0"><wbr>`,`Localidade`)<br />) ENGINE=MyISAM DEFAULT CHARSET=latin1;<br />show tables;<br /><br />ou<br /><br />CREATE TABLE `WRFClima` (<br /> `Tempo` datetime NOT NULL default '0000-00-00 00:00:00',<br /> `Lat` float NOT NULL default '0',<br /> `Lon` float NOT NULL default '0',<br /> `PNMM` float NOT NULL default '0',<br /> `PSUP` float NOT NULL default '0',<br /> `T2M` float NOT NULL default '0',<br /> `Q2M` float NOT NULL default '0',<br /> `NEBB` float NOT NULL default '0',<br /> `NEBM` float NOT NULL default '0',<br /> `NEBA` float NOT NULL default '0',<br /> `U10M` float NOT NULL default '0',<br /> `V10M` float NOT NULL default '0',<br /> `PREC_CONV` float NOT NULL default '0',<br /> `PREC_NCONV` float NOT NULL default '0',<br /> PRIMARY KEY (`Tempo`,`Lat`,`Lon`)<br />) ENGINE=MyISAM DEFAULT CHARSET=latin1;<br /><br /><br /><br /><span style="font-weight: bold;">TABELA DE MODELO - </span><span style="font-weight: bold;">PREVISÕES EM </span><span style="font-weight: bold;">ALTITUDE</span><br />use <span style="font-style: italic;">modelos </span>;<br />CREATE TABLE `MM5alt` (<br />`Tempo_Inicio` datetime NOT NULL default '0000-00-00 00:00:00',<br />`Tempo_Previsao` datetime NOT NULL default '0000-00-00 00:00:00',<br />`Localidade` varchar(50) NOT NULL default '',<br />`P` float NOT NULL default '0',<br />`T` float NOT NULL default '0',<br />`Td` float NOT NULL default '0',<br />`U` float NOT NULL default '0',<br />`V` float NOT NULL default '0',<br />PRIMARY KEY (`Tempo_Inicio`,`Tempo_Previsao`,`Localidade`,`P`)<br />) ENGINE=MyISAM DEFAULT CHARSET=latin1;<br />show tables;<br /><br /><br /><br /><span style="font-weight: bold;">TABELA DE MODELO - LOCALIDADES</span><br />use <span style="font-style: italic;">modelos </span>;<br />CREATE TABLE `Localidade` (<br />`Nome` varchar(50) NOT NULL default '',<br />`NomeOK` varchar(50) NOT NULL default '',<br />`Indice` float NOT NULL default '0',<br />`lat` float NOT NULL default '0',<br />`lon` float NOT NULL default '0',<br />PRIMARY KEY (`Nome`,`Indice`)<br />) ENGINE=MyISAM DEFAULT CHARSET=latin1;<br />show tables;<br /><br /></div>Tozzihttp://www.blogger.com/profile/01966951944976005794noreply@blogger.com1tag:blogger.com,1999:blog-5630473957582967746.post-81302921629866230282008-09-01T21:09:00.004-03:002008-11-04T09:54:03.091-02:00Dicas para KSH<div style="text-align: center; font-weight: bold; font-style: italic; font-family: arial;">POST EM CONSTANTE ATUALIZAÇÃO<br />PARA VER MAIS DICAS, ASSUNTOS E COMANDOS<br />BUSQUE NA BARRA ACIMA, À ESQUERDA</div><br /><span style="font-weight: bold;">FOREACH (que na realidade é for heheh) NUM LS COM HIDE</span><br /><pre>for item in `ls -lrt --hide=*ksh | head -3 | awk '{print $9}'`<br />do<br /> echo $item<br /> head -2 $item<br /> head -2 $item | awk '{print "'$item' "$1" "$5"\n'$item' "$9}'<br />done</pre><br /><span style="font-weight: bold;">IDEM USANDO SUBSTRING E TABULAÇÃO</span><br /><pre>head -2 $item | awk '{print "'$item'\t<br />"substr($1,7,4)"-"substr($1,1,2)"-"substr($1,4,2)" 00:00:00\t<br />"$2" "$3" "$4" "$5}'</pre><br /><span style="font-weight: bold;">PASSAR VARIAVEL SHELL PARA O AWK</span><br /><pre>awk -v dd="20$ano $mes $dia 00 " '{print dd $1}' dados.txt</pre><br /><span style="font-weight: bold;">CRIA UM VETOR</span><br /><pre>set -A prev td t2m t rh pslv nt nm nb na k dvpt chuva w</pre><br /><span style="font-weight: bold;">OBTEM DATAS DO SISTEMA</span><br /><pre>d=`date +'%d'`<br />m=`date +'%m'`<br />y=`date +'%Y'`</pre><br /><span style="font-weight: bold;">LOOP DE HORÁRIOS E VARIÁVEIS PEGANDO O TAMANHO DO VETOR</span><br /><pre>i=0<br />while (( $i < 170 )) do<br />ii=0<br />while (( $ii < ${#prev[*]} )) do<br />if ((i<10)) then<br />echo "Gerando ${prev[$ii]}0${i}.png"<br />else<br />echo "Gerando ${prev[$ii]}${i}.png"<br />fi<br />let ii=$ii+1<br />done<br />let i=$i+3<br />done</pre><br /><span style="font-weight:bold;">VENDO O TAMANHO DO TERCEIRO ARGUMENTO (E SE EXISTE)</span><br /><pre>if (( "${#3}"!="1")) then<br /> echo "Terceiro argumento existe e so tem um caracter"<br />fi</pre><br /><br />- <span style="font-style: italic;"><span style="font-weight: bold;">Vários tipos de IF</span></span><br /><br /><span style="font-weight: bold;">IF BEM SIMPLES</span><br /><pre>if (($1>=24)) then<br /> echo "oi"<br />else<br />echo "tchau"<br />fi</pre><br /><span style="font-weight: bold;">IF ESTILO NUMÉRICO</span><br /><pre>if [ $count -lt 10 ] ; then<br /> echo "oi"<br />else<br />echo "tchau"<br />fi</pre><br /><span style="font-weight: bold;">IF ESTILO CARACTER</span><br /><pre>if [ "$answer" != "y" ] ; then<br /> echo "oi"<br />else<br />echo "tchau"<br />fi</pre><br /><span style="font-weight: bold;">IF DIRETÓRIO EXISTE</span><br /><pre>if [ -d RCS ] ; then<br /> echo "oi"<br />else<br />echo "tchau"<br />fi</pre><br /><span style="font-weight: bold;">IF ARQUIVO EXISTE</span><br /><pre>if [ -f ${datfile}ctl ] ; then<br /> echo "oi"<br />else<br />echo "tchau"<br />fi</pre><br /><br /><div style="text-align: center; font-weight: bold; font-style: italic; font-family: arial;">POST EM CONSTANTE ATUALIZAÇÃO<br />PARA VER MAIS DICAS, ASSUNTOS E COMANDOS<br />BUSQUE NA BARRA ACIMA, À ESQUERDA</div>Tozzihttp://www.blogger.com/profile/01966951944976005794noreply@blogger.com0tag:blogger.com,1999:blog-5630473957582967746.post-85833118709946584852008-09-01T20:56:00.007-03:002008-11-07T15:50:02.123-02:00Dicas para administrar um MySQL<div style="text-align: center; font-weight: bold; font-style: italic; font-family: arial;">POST EM CONSTANTE ATUALIZAÇÃO<br />PARA VER MAIS DICAS, ASSUNTOS E COMANDOS<br />BUSQUE NA BARRA ACIMA, À ESQUERDA</div><br />- <span style="font-weight: bold;"><span style="font-style: italic;">Na linha de comando do linux:</span></span><br /><br /><span style="font-weight: bold;">ENTRANDO NO MySQL</span><br />mysql --user=USUARIO --password=SENHA<br /><br /><span style="font-weight: bold;">HABILITANDO O SERVIÇO AUTOMATICAMENTE</span><br />ntsysv<br /><br /><span style="font-weight: bold;">CHECANDO SE O MYSQLD ESTÁ RODANDO</span><br />service mysqld status<br /><br /><span style="font-weight: bold;">INICIANDO NA MÃO O MYSQLD</span><br />/etc/init.d/mysqld restart<br /><br /><span style="font-weight: bold;">EDITAR CONFIG, REINICIAR O DAEMON E DEFINIR AS SENHAS DE ROOT</span><br />vi /etc/my.cnf<br />/etc/init.d/mysqld restart<br />/usr/bin/mysqladmin -u root password 'SENHA'<br />/usr/bin/mysqladmin -u root -h MAQUINA.DOMINIO.BR password 'SENHA'<br />mysql -v --user=root --password=SENHA<br /><br /><br />- <span style="font-style: italic;"><span style="font-weight: bold;">Na linha de comando do MySQL:</span></span><br /><br /><span style="font-weight: bold;">CRIANDO UMA BD</span><br />create database if not exists modelos ;<br />create database `ciclones` DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci;<br /><br /><span style="font-weight: bold;">CRIA UM USUÁRIO</span><br />create user 'USUARIO'@'localhost'<br /><br /><span style="font-weight: bold;">TROCAR SENHAS (INCLUSIVE ROOT)</span><br />update user set password=PASSWORD("NEWPASSWORD") where User='USER';<br />flush privileges;<br /><br /><span style="font-weight: bold;">VENDO AS DBs DISPONÍVEIS</span><br />show databases;<br /><br /><span style="font-weight: bold;">DESCREVENDO UMA TABELA</span><br />desc WRF;<br /><br /><span style="font-weight: bold;">EVITAR REGISTROS DUPLICADOS</span><br />ALTER IGNORE TABLE dupTest ADD UNIQUE INDEX(a,b);<br /><br /><span style="font-weight: bold;">MUDAR O NOME DE UMA TABELA</span><br />RENAME TABLE first TO second;<br /><br /><span style="font-weight: bold;">MANUTENÇÃO</span><br />OPTIMIZE TABLE `WRFClima`<br />ANALYZE TABLE `WRFClima`<br />CHECK TABLE `WRFClima`<br /><br /><span style="font-weight: bold;">ACESSAR SERVIDOR ATRAVÉS DE CLIENTE</span><br />- no SERVIDOR:<br />GRANT ALL PRIVILEGES ON *.* TO <span style="font-style: italic;">USER_CLIENTE</span>@<span style="font-style: italic;">IP_CLIENTE</span> IDENTIFIED BY "<span style="font-style: italic;">PWD_CLIENTE</span>";<br />FLUSH PRIVILEGES;<br />(garantir que a porta 3306 no IPTABLES está aberta!)<br /><br />- no CLIENTE:<br />mysql --host=<span style="font-style: italic;">IP_SERVIDOR</span> --port=3306 --user=<span style="font-style: italic;">USER_CLIENTE</span>--password=<span style="font-style: italic;">PWD_CLIENTE</span> modelos<br />(para testar, dar um telnet -l root <span style="font-style: italic;">IP_SERVIDOR</span> 3306 e ver se a porta ta aberta!)<br /><br />OBS.: <span style="font-style: italic;">USER_CLIENTE</span> e <span style="font-style: italic;">PWD_CLIENT</span>E podem ser quaisquer, contanto q estejam tanto na consulta do cliente quanto nos privilégios do servidor!<br /><br /><br />- <span style="font-style: italic;"><span style="font-weight: bold;">Procedimentos para backup</span></span><br /><br /><span style="font-weight: bold;">* Backup de todos os bancos existentes com conteúdo e estrutura</span><br />mysqldump -u usuario --password=senha --A > arquivo_saida<br /><br /><span style="font-weight: bold;">* Backup só das estruturas de todos os bancos</span><br />mysqldump -u usuario --password=senha -A -d > arquivo_saida<br /><br /><span style="font-weight: bold;">* Backup só dos dados de todos os bancos</span><br />mysqldump -u usuario --password=senha -c -t -e -A > arquivo_saida<br /><br /><span style="font-weight: bold;">* Backup só dos dados da BD modelos e clima</span><br />mysqldump -u usuario --password=senha -c -t -e --databases modelos clima > arquivo_saida<br /><br /><span style="font-weight: bold;">* Backup só dos dados da BD modelos, tabela WRF, criando tabelas se necessário</span><br />mysqldump -u usuario --password=senha -c -e modelos WRF > arquivo_saida<br /><br /><br /><div style="text-align: center; font-weight: bold; font-style: italic; font-family: arial;">POST EM CONSTANTE ATUALIZAÇÃO<br />PARA VER MAIS DICAS, ASSUNTOS E COMANDOS<br />BUSQUE NA BARRA ACIMA, À ESQUERDA</div>Tozzihttp://www.blogger.com/profile/01966951944976005794noreply@blogger.com0tag:blogger.com,1999:blog-5630473957582967746.post-71994380758916904802008-09-01T20:43:00.004-03:002008-11-04T09:53:38.729-02:00Dicas para CVS<div style="text-align: center; font-weight: bold; font-style: italic; font-family: arial;">POST EM CONSTANTE ATUALIZAÇÃO<br />PARA VER MAIS DICAS, ASSUNTOS E COMANDOS<br />BUSQUE NA BARRA ACIMA, À ESQUERDA</div><br /><span style="font-weight: bold;">Raiz do CVS</span><br /><pre>$ echo $CVSROOT<br />/usr/local/cvs-rep</pre><br /><span style="font-weight: bold;">Inicia um repositorio AQUI (sem variavel ambiente)</span><br /><pre>cvs -d $CVSROOT co -l .</pre><br /><span style="font-weight: bold;">Adiciona um diretório ao repositorio</span><br /><pre>cvs add DIR</pre><!--<span style="font-weight: bold;">Faz o que foi pedido</span><pre>cvs checkout ou cvs commit (??)</pre>--><br /><span style="font-weight: bold;">Incluir um diretório todo e prepará-lo</span><br /><pre>cd lpm_op<br />cvs import -m "Operacional do LPM" lpm_op lpm_op start<br />cd ..<br />mv lpm_op lpm_op.orig<br />cvs checkout lpm_op<br />diff -r lpm_op.orig lpm_op<br />rm -r lpm_op.orig</pre><br /><span style="font-weight: bold;">Criando .keepme (útil para cvs)</span><br /><pre>find DIRWORK -type d -ls | awk '{print "touch "$11"/.keepme"}' > criakeepme.exe<br />chmod u+x criakeepme.exe</pre><br /><br /><div style="text-align: center; font-weight: bold; font-style: italic; font-family: arial;">POST EM CONSTANTE ATUALIZAÇÃO<br />PARA VER MAIS DICAS, ASSUNTOS E COMANDOS<br />BUSQUE NA BARRA ACIMA, À ESQUERDA</div>Tozzihttp://www.blogger.com/profile/01966951944976005794noreply@blogger.com0tag:blogger.com,1999:blog-5630473957582967746.post-46035974760318691502008-09-01T20:42:00.003-03:002008-11-04T09:53:02.232-02:00Administrando o Fedora<div style="text-align: center; font-weight: bold; font-style: italic; font-family: arial;">POST EM CONSTANTE ATUALIZAÇÃO<br />PARA VER MAIS DICAS, ASSUNTOS E COMANDOS<br />BUSQUE NA BARRA ACIMA, À ESQUERDA</div><br /><span style="font-weight:bold;">Reiniciar o servidor web apache</span><br />/etc/rc.d/init.d/httpd restart<br /><br /><br /><div style="text-align: center; font-weight: bold; font-style: italic; font-family: arial;">POST EM CONSTANTE ATUALIZAÇÃO<br />PARA VER MAIS DICAS, ASSUNTOS E COMANDOS<br />BUSQUE NA BARRA ACIMA, À ESQUERDA</div>Tozzihttp://www.blogger.com/profile/01966951944976005794noreply@blogger.com0tag:blogger.com,1999:blog-5630473957582967746.post-68748932738848540342008-09-01T20:22:00.003-03:002008-11-04T09:52:51.052-02:00Dicas rápidas para R<div style="text-align: center; font-weight: bold; font-style: italic; font-family: arial;">POST EM CONSTANTE ATUALIZAÇÃO<br />PARA VER MAIS DICAS, ASSUNTOS E COMANDOS<br />BUSQUE NA BARRA ACIMA, À ESQUERDA</div><br />O ambiente de software estatístico R é muito difundido em várias áreas de ciêncie, indo de biologia até geofísica. A linguagem a princípio é bem dificil de se lidar por ser basicamente toda vetorial, mas eu gosto sempre de ter uma "colinha" para me ajudar.<br /><br />Coloquei abaixo algumas dessas dicas, algumas bobas e outras que vivo esquecendo...<br /><br /><span style="font-weight: bold;">EXECUTAR UM SCRIPT NO PROMPT DO R</span><br />source(paste(dir,"/batchGRADE.R",sep=""))<br /><br /><span style="font-weight: bold;">QUEBRA UM VETOR CHARACTER EM VARIAS COMPONENTES</span><br />strsplit("ola tudo bem"," ")<br /><span style="font-style:italic;">resultado: um vetor de 3 posições: "ola", "tudo" e "bem"</span><br /><br /><span style="font-weight: bold;">PARA ACESSAR APENAS UMA PARTE DE UM MAPA E REESCREVER O SHP</span><br />shape0=c("0.shp")<br />library(maps)<br />library(maptools)<br />mapa0=readShapeLines(shape0)<br />writeLinesShape(mapa0[mapa0[[3]]=="RJ",],"testeRJ")<br /><br />#MOSTRA APENAS AS RODOVIAS DO SHAPE<br />plot(mapa2[mapa2[[1]]=="Rodovia",])<br /><br />#MOSTRA APENAS UM SUB-OBJETO DO SHAPE<br />plot((mapa2[1,]@lines[[1]])@Lines[[1]]@coords,type="l")<br /><br /><span style="font-weight: bold;">PARA RODAR UM SCRIPT NO R (tabajara version)</span><pre>#!/bin/ksh<br />/usr/bin/time R --no-save --no-restore --no-site-file --no-init-file --no-environ --no-readline < script.R<br /><br /># Usando o X Virtual Frame Buffer como servidor X para rodar o R em crontab<br />/usr/bin/Xvfb :7 -screen 0 1152x900x24&<br />export DISPLAY=":7.0"</pre><br /><span style="font-weight: bold;">GREP TABAJARA EM R</span><br />as.real(read.table("model.ctl",skip=5,nrows=1)[2])<br /><span style="font-style:italic;">(o exemplo pega o valor de tdef num ctl)</span><br /><br /><span style="font-weight: bold;">APAGA TODOS OS OBJETOS</span><br />rm(list = ls())<br /><br /><span style="font-weight: bold;">TAMANHO DO OBJETO NA MEMÓRIA</span><br />object.size(temp)<br /><br /><span style="font-weight: bold;">MEMÓRIA</span><br />memory.size()<br />gc()<br /><br /><span style="font-weight: bold;">EXEMPLO DE IF VETORIAL</span><br />sqrt(ifelse(x > 0, x, NA))<br /><br /><span style="font-weight: bold;">SEQUÊNCIAS E CLASSIFICAÇÃO</span><br />b1=rep(a1,length(a2))<br />b2=rep(a2,length(a1))<br />b2=sort(b2)<br />lon=seq(-45,,length.out=5)<br />llon=length(lon)<br />lon=rep(lon,llon)<br />dim(lon)=c(llon,llon)<br />lon=t(lon)<br /><br /><span style="font-weight: bold;">VIEWPORTS E ARROWS</span><pre>plot.new()<br />plot(lon, lat, type="n",xlab="latitude", ylab="longitude",main="China<br />Sea Wind Speed/Direction and Temperature")<br />vps <- baseViewports()<br />par(new=TRUE)<br />pushViewport(vps$inner, vps$figure, vps$plot)<br />length <- 0.5 # "cm"<br />x1 <- unit(lon, "native") - unit(0.5*length*bu, "cm")<br />y1 <- unit(lat, "native") - unit(0.5*length*bv, "cm")<br />x2 <- unit(lon, "native") + unit(0.5*length*bu, "cm")<br />y2 <- unit(lat, "native") + unit(0.5*length*bv, "cm")<br />grid.arrows(grob=grid.segments(x1, y1, x2, y2),length=unit(1.5, "mm"),gp=gpar(col="red"))<br />popViewport(3)<br />plot(mapa_estado,lwd=2,xlim=c(a2[1],a2[5]),ylim=c(a1[1],a1[8]))<br />#plot(mapa_estado,lwd=2,xlim=c<wbr>(-25,-18),ylim=c(-45,-41))<br /></pre><br /><br /><br /><div style="text-align: center; font-weight: bold; font-style: italic; font-family: arial;">POST EM CONSTANTE ATUALIZAÇÃO<br />PARA VER MAIS DICAS, ASSUNTOS E COMANDOS<br />BUSQUE NA BARRA ACIMA, À ESQUERDA</div>Tozzihttp://www.blogger.com/profile/01966951944976005794noreply@blogger.com0tag:blogger.com,1999:blog-5630473957582967746.post-84836419290672823602008-09-01T16:25:00.003-03:002008-11-04T09:48:27.673-02:00Dicas para PHP<div style="text-align: center; font-weight: bold; font-style: italic; font-family: arial;">POST EM CONSTANTE ATUALIZAÇÃO<br />PARA VER MAIS DICAS, ASSUNTOS E COMANDOS<br />BUSQUE NA BARRA ACIMA, À ESQUERDA</div><br />PHP é uma linguagem de programação que utiliza scripts e foi muito difundida em desenvolvimento de sistemas web. Hoje, mesmo com novos recursos na internet, o PHP ainda sobre vive bem devido à sua flexibilidade e rapidez em se adaptar.<br /><br />Esse post contém algumas coisas bem básicas da estrutura do PHP, seja para refrescar a memória ou tirar alguma dúvida boba.<br /><br /><br /><br /><span style="font-weight: bold;">APRESENTAÇÃO BÁSICA</span><br />#!/usr/bin/php (se for usar em linha de comando)<br /><br /><\?php (sem a barra...)<br />echo $var;<br />?><br /><br /><br /><span style="font-weight:bold;">DEFINIÇÃO DE FUNÇÕES</span><i m="" g="" src="http://www2.blogger.com/meteo_plot.php?cidade=%27.$cidade.%27&umidade=1"><br />function InsTxt ($img,$text,$size,$cor,$x1,$y1,$fonte,$align) {<br />global $vermescuro;<br />...<br />echo $resposta;<br />}<br /><br /><br /><span style="font-weight: bold;">IF ELSE</span><br />if ($pos === false) { ... }<br />else { ... }<br /><br /><br /><span style="font-weight: bold;">SWITCH CASE</span><br />switch ($align) {<br /><br />case "center":<br />...<br />break;<br /><br />case "left":<br />...<br />break;<br />}<br /><br /><br /><span style="font-weight: bold;">ARGUMENTOS VIA LINHA DE COMANDO</span><br />$var = $argv[1];<br /><span style="font-style:italic;">(o "0" do vetor é o nome do comando)</span><br /><br /><span style="font-weight: bold;"><br />ARGUMENTOS VIA BROWSER (FORMULÁRIO HTML) E QUEBRA DE STRING</span><br />$Tdata = $_REQUEST["Tdata"]; // a data vem de um formulário HTML com um objeto de nome "Tdata"<br />$TdataY = substr($Tdata, 0, 4);<br />$TdataM = substr($Tdata, 5, 2);<br />$TdataD = substr($Tdata, 8, 2);<br /><br /><br /><span style="font-weight: bold;">GERANDO DATAS</span><br />if ($varJ=="0024") { $Tok=mktime(0,0,0,$TdataM,$TdataD,$TdataY)+(24*60*60); $prev = date("H\Z d/m/Y", $Tok); }<br />if ($varJ=="2448") { $Tok=mktime(0,0,0,$TdataM,$TdataD,$TdataY)+(48*60*60); $prev = date("H\Z d/m/Y", $Tok); }<br /><br /><span style="font-weight: bold;"><br />JUNTANDO / AGREGANDO / CONCATENANDO VARIÁVEIS</span><br />$Tinteg = $Tdata.' 00:00:00';<br /><br /><br /><span style="font-weight: bold;">LOOP DE FOR</span><br />for ( $tempo = 0; $tempo <= sizeof($prev); $tempo += 1) { $e=6.112*exp(17.67*($temp[$tempo])); $ee=log($q1[$tempo]/0.622); $eee=sqrt(pow($u10[$tempo],2)); } </i><br /><br /><br /><div style="text-align: center; font-weight: bold; font-style: italic; font-family: arial;">POST EM CONSTANTE ATUALIZAÇÃO<br />PARA VER MAIS DICAS, ASSUNTOS E COMANDOS<br />BUSQUE NA BARRA ACIMA, À ESQUERDA</div>Tozzihttp://www.blogger.com/profile/01966951944976005794noreply@blogger.com0tag:blogger.com,1999:blog-5630473957582967746.post-567472193557723242008-09-01T16:00:00.004-03:002008-11-04T09:46:40.458-02:00Dicas para usar MySQL em PHP<div style="text-align: center; font-weight: bold; font-style: italic; font-family: arial;">POST EM CONSTANTE ATUALIZAÇÃO<br />PARA VER MAIS DICAS, ASSUNTOS E COMANDOS<br />BUSQUE NA BARRA ACIMA, À ESQUERDA</div><br />Quem mexe com grande volume de dados (como o profissional de Meteorologia) tem que aprender a mexer com banco de dados. O banco de dados que tenho mais contato atualmente é o MySQL e costumo usar aplicações em PHP para acessar e manipular esses dados.<br /><br />Coloquei abaixo algumas dicas para facilitar essa comunicação.<br /><br /><br /><span style="font-weight:bold;"><br />ABRINDO A CONEXÃO</span><br />$db = mysql_connect("SERVIDOR", "USUARIO","SENHA") or die ("Erro1");<br /><br /><span style="font-weight:bold;">CONECTANDO NO BANCO DE DADOS</span><br />mysql_select_db("BANCODEDADOS") or die ("Erro2");<br /><br /><span style="font-weight:bold;">ESCREVENDO A CONSULTA</span><br />$consulta1 = "select VAR1,VAR2 from TABELA where Localidade='".$cidade."' AND Tempo_Inicio='".$Tinteg."' ";<br /><br /><span style="font-weight:bold;">EXECUTANDO A CONSULTA</span><br />$consulta = mysql_query($consulta1,$db) or die ("Erro3");<br /><br /><span style="font-weight:bold;">OBTENDO DADOS DA CONSULTA</span><br />if ($myrow=mysql_fetch_array($consulta)) {<br />do {<br />$var1[] = $myrow["VAR2"];<br />$var2[] = $myrow["VAR2"];<br />}while ($myrow=mysql_fetch_array($consulta));<br />}<br /><br /><br /><div style="text-align: center; font-weight: bold; font-style: italic; font-family: arial;">POST EM CONSTANTE ATUALIZAÇÃO<br />PARA VER MAIS DICAS, ASSUNTOS E COMANDOS<br />BUSQUE NA BARRA ACIMA, À ESQUERDA</div>Tozzihttp://www.blogger.com/profile/01966951944976005794noreply@blogger.com0tag:blogger.com,1999:blog-5630473957582967746.post-91816712323279702662008-09-01T15:08:00.003-03:002008-11-04T09:52:24.361-02:00Usando máscaras em GrADSUsar máscaras em GrADS é algo que enrola muita gente. Já vi muita gente boa não saber usar, ou pior: nem entender como funciona.<br /><br />O problema não é bem da função MASKOUT do GrADS, mas da fusão (quase sempre necessária) entre as funções MASKOUT e CONST. O ideal é ler os exemplos abaixo com o manual de cada uma das duas funções (<a href="http://www.cptec.inpe.br/ManualGrADS/gradfuncmaskout.html">manual do MASKOUT</a> e <a href="http://www.cptec.inpe.br/ManualGrADS/gradfuncconst.html">manual do CONST</a>).<br /><br /><span style="font-style: italic;">Só para lembrar: maskout(#1,#2) plota #1 quando #2 é positivo e undef quando #2 é negativo</span><br /><br /><br /><span style="font-weight: bold;">Mask simples </span><br />d maskout(maskout(var,var-50),-var+60)<br /><span style="font-style: italic;">(mostra a var entre 50 e 60)</span><br /><br /><br /><span style="font-weight: bold;">Mask confuso com MASKOUT e CONST</span><br />d maskout(maskout(maskout(1, ( const(maskout(maskout(var1*10,var1*10-3.9),-var1*10+5.1),6)-6 ) ), ( const(maskout(maskout(var2,var2-50),-var2+70),9)-9 ) ), ( const(maskout(maskout(var2,var2-50),-var2+70),9)-9 ) )<br /><span style="font-style: italic;">(mostra o valor 1 onde var1 esta entre 4 e 5 e var2entre 50 e 70. o restante mostra undef)<br /></span><br /><br />Confuso, né? Mas bem útil!Tozzihttp://www.blogger.com/profile/01966951944976005794noreply@blogger.com0tag:blogger.com,1999:blog-5630473957582967746.post-77743721130815631042008-09-01T14:49:00.003-03:002008-11-04T09:52:16.929-02:00Dicas rápidas para GrADS<div style="text-align: center; font-weight: bold; font-style: italic; font-family: arial;">POST EM CONSTANTE ATUALIZAÇÃO<br />PARA VER MAIS DICAS, ASSUNTOS E COMANDOS<br />BUSQUE NA BARRA ACIMA, À ESQUERDA</div><br />Apesar de mexer em meteorologia quase 100% do tempo do meu trabalho, mexo em tantas linguagens de programação que é sempre bom manter um lembrete de algumas estruturas e pedaços de código.<br /><br /><br /><span style="font-weight: bold;">Usa um LS para pegar parâmetros e usar em variáveis (versão DUMB)</span><br />'!ls -l u_niveis1000_*dat | tail -1 | awk "{print substr(\$9,14,12)}" > prefixo.txt'<br />prefixo=read('./prefixo.txt')<br />prefixo=sublin(prefixo,2)<br />say prefixo<br /><br /><br /><span style="font-weight: bold;">Pega argumentos direto da linha de comando (versão SMART)</span><br /><span style="font-weight: bold;"></span><span style="font-style: italic;">no começo do script</span><br />function main(args)<br /><br /><span style="font-style: italic;">dentro do script</span><br />cidade=subwrd(args,1)<br />say cidade<br /><br /><span style="font-style: italic;">uso</span><br />gradsc -lc "script.gs Rio_de_Janeiro"<br /><br /><br /><div style="text-align: center; font-weight: bold; font-style: italic; font-family: arial;">POST EM CONSTANTE ATUALIZAÇÃO<br />PARA VER MAIS DICAS, ASSUNTOS E COMANDOS<br />BUSQUE NA BARRA ACIMA, À ESQUERDA</div>Tozzihttp://www.blogger.com/profile/01966951944976005794noreply@blogger.com0tag:blogger.com,1999:blog-5630473957582967746.post-52641761074146381702008-09-01T10:54:00.002-03:002008-11-04T09:51:46.210-02:00Dicas para administrar o R<div style="text-align: center; font-weight: bold; font-style: italic; font-family: arial;">POST EM CONSTANTE ATUALIZAÇÃO<br />PARA VER MAIS DICAS, ASSUNTOS E COMANDOS<br />BUSQUE NA BARRA ACIMA, À ESQUERDA</div><br />O ambiente de software estatístico R é muito difundido em várias áreas de ciêncie, indo de biologia até geofísica. A linguagem a princípio é bem dificil de se lidar por ser basicamente toda vetorial, mas eu gosto sempre de ter uma "colinha" para me ajudar.<br /><br />Coloquei abaixo algumas dessas colas, voltadas para a administração do ambiente, como por exemplo a instalação e manutenção de pacotes e a comunicação entre R e banco de dados MySQL.<br /><br /><p><span style="font-weight: bold;">INSTALAÇÃO DO R + MySQL NUM FEDORA</span><br />yum install R.x86_64<br />yum install mysql-devel.x86_64 mysqlclient14*_64<br /><br /><span style="font-weight: bold;">INSTALAÇÃO DE PACOTES ÚTEIS</span><br />install.packages(c("sp","maps","maptools","gridBase","pixmap","RadioSonde"))<br /><br /><span style="font-weight: bold;">ATUALIZAÇÃO DOS PACOTES</span><br />update.packages()<br />chooseCRANmirror() <em>[bem útil no terminal]</em><br /><br /><span style="font-weight: bold;">INSTALAÇÃO DO PACOTE RMySQL NUM FEDORA</span><br />export PKG_LIBS='-L/usr/lib64/mysql -lmysqlclient'<br />export PKG_CPPFLAGS='-I/usr/include/mysql'<br />install.packages (c("DBI","RMySQL")<br /><br /><br /><div style="text-align: center; font-weight: bold; font-style: italic; font-family: arial;">POST EM CONSTANTE ATUALIZAÇÃO<br />PARA VER MAIS DICAS, ASSUNTOS E COMANDOS<br />BUSQUE NA BARRA ACIMA, À ESQUERDA</div>Tozzihttp://www.blogger.com/profile/01966951944976005794noreply@blogger.com0tag:blogger.com,1999:blog-5630473957582967746.post-20511077334053983782008-09-01T10:37:00.006-03:002008-11-04T09:51:31.365-02:00Transformações de variáveis meteorológicas<div style="text-align: center; font-weight: bold; font-style: italic; font-family: arial;">POST EM CONSTANTE ATUALIZAÇÃO<br />PARA VER MAIS DICAS, ASSUNTOS E COMANDOS<br />BUSQUE NA BARRA ACIMA, À ESQUERDA</div><br />Uma das coisas sempre presentes em Meteorologia é a transformação de variáveis meteorológicas. Às vezes temos umidade específica mas queríamos umidade relativa, outras vezes temos a variável certa, mas na unidade errada...<br /><br />Vou colar aqui alguns códigos de programação em PHP e GrADS com as transformações que eu mais uso.<br /><br /><span style="font-weight: bold;">* UMIDADE ESPECÍFICA (q) PARA UMIDADE RELATIVA (UR) E TEMPERATURA DO PONTO DE ORVALHO (Td) - PHP</span><br /><br /><span style="font-style: italic;">*dados originais:</span><br /><br />vetores de 169 posições (7 dias horários)<br /><br /><span style="font-style: italic;">* código:</span><br /><pre>for ( $tempo = 0; $tempo <= 168; $tempo += 1) {<br /> $e1=( $q1[$tempo]*$pressao[$tempo])/($q1[$tempo]+0.622);<br /> $es1=6.112*exp(17.67*($temp[$tempo])/($temp[$tempo]+243.5));<br /> $e2=log($q1[$tempo]/0.622*$pressao[$tempo]/(1.0+$q1[$tempo]/0.622));<br /> $tempd[$tempo]=(243.5*( $e2 )-440.8)/(19.48-( $e2 ) );<br /> $ur[$tempo]=($e1/$es1)*100;<br />}</pre><br /><br /><div style="text-align: center; font-weight: bold; font-style: italic; font-family: arial;">POST EM CONSTANTE ATUALIZAÇÃO<br />PARA VER MAIS DICAS, ASSUNTOS E COMANDOS<br />BUSQUE NA BARRA ACIMA, À ESQUERDA</div>Tozzihttp://www.blogger.com/profile/01966951944976005794noreply@blogger.com0tag:blogger.com,1999:blog-5630473957582967746.post-57866310325915105682008-09-01T10:20:00.002-03:002008-11-06T13:42:39.857-02:00Plotando vento como no meteogramaMuita gente não sabe dar display do vento para ficar como nos meteogramas (como nos <a href="http://www.cptec.inpe.br/prevnum/modelo_eta20km/eta20km_met_br.shtml">meteogramas do ETA20 do CPTEC</a>).<br /><br />Vou colar aqui embaixo um código comentado para isso:<br /><pre><br /><span style="font-style: italic;">* abre o arquivo, prepara a tela e da as coordenadas do ponto</span><br />'open arquivo.ctl'<br />'set display color white'<br />'clear'<br />lat=-22<br />lon=-42<br />'set lat 'lat<br />'set lon 'lon<br /><br /><span style="font-style: italic;">* prepara o ambiente do GrADS</span><br />'set z 1'<br />'set dfile 1'<br />'set t 1 169'<br />'set parea .4 8.25 .2 1.9'<br /><br /><span style="font-style: italic;">* busca o maximo e o intervalo dos dados<br />* (o minimo e o maximo de sinal trocado)</span><br />'set gxout stat'<br />'d mag(u,v)'<br />rec=sublin(result,9)<br />say "rec "rec<br />maximo=subwrd(rec,6)<br />say "maximo "maximo<br />intervalo=subwrd(rec,7)<br />say "intervalo "intervalo<br />intervalo=intervalo*2<br /><br /><span style="font-style: italic;">*configuracoes da magnitude do vento</span><br />'set gxout line'<br />'set vrange 0 ' maximo<br />'set cmark 0'<br />'set cthick 10'<br />'set cstyle 1'<br />'set ccolor 1'<br />'set ylint 'intervalo<br /><br /><span style="font-style: italic;">*da display da magnitude do vento</span><br />'set grads off'<br />'d mag(u,v)'<br /><br /><span style="font-style: italic;">* aqui que eh importante! detalhe no set lev abaixo.<br />* com este set lev variando em torno de 1, o GrADS<br />* acha que existem 3 pontos: o lev .99, 1 e 1.01. com<br />* esses tres pontos ja e possivel plotar vetores para<br />* cima e para baixo na tela.</span><br /><span style="font-weight: bold;">'set lev .99 1.01'</span><br /><span style="font-style: italic;">* o exemplo acima esta em coordenadas de massa (WRF,<br />* por exemplo). se fosse em coordenada de pressão,<br />* ficaria algo como 'set lev 950 1050',<br />* deixando 1000hPa no centro</span><br /><br /><span style="font-style: italic;">*configuracoes do vetor</span><br />'set cthick 10'<br />'set ylab off'<br />'set xlab off'<br />'set frame off'<br />'set gxout vector'<br />'set ccolor 12'<br />'set arrlab off'<br /><br /><span style="font-style: italic;">*display do vetor</span><br />'set grads off'<br />'d u;v'<br /><br /><span style="font-style: italic;">*processos finais e geracao de um arquivo PNG</span><br />'set ylab on'<br />'set xlab on'<br />'set frame on'<br />'printim meteo.png'<br />'quit'<br /></pre><br />Atenção, pois sem o <span style="font-style: italic;">set lev</span> variando, o GrADS entende o problema como unidimensional e não plota o vetor.Tozzihttp://www.blogger.com/profile/01966951944976005794noreply@blogger.com0tag:blogger.com,1999:blog-5630473957582967746.post-38995321241131155172008-09-01T01:13:00.003-03:002008-12-12T16:40:39.225-02:00Dicas para SED e AWK<div style="text-align: center; font-weight: bold; font-style: italic; font-family: arial;">POST EM CONSTANTE ATUALIZAÇÃO<br />PARA VER MAIS DICAS, ASSUNTOS E COMANDOS<br />BUSQUE NA BARRA ACIMA, À ESQUERDA</div><br />Manipular bem arquivos e linhas de texto é muito importante, especialmente ao lidar com dados brutos.<br /><br />ATENÇÃO: dependendo da versão de linux os comandos abaixo podem variar. Foram testados em um FEDORA 7 em diante.<br /><br /><br /><span style="font-weight: bold;">SED mudando a ultima virgula de cada linha mas limitado a ultima linha ($)<br /></span><span>sed '$ s:,$:;:g' arquivo.txt</span><span style="font-weight: bold;"><br /><br /></span><span>o que era:<br />4 5 6 7 8 9 1 2 5,<br /></span>5 8 7 4 5 6 9 5 4,<br />7 5 8 4 1 2 3 6 8<span style="font-weight: bold;">,<br /><br /></span>vira:<br /><span>4 5 6 7 8 9 1 2 5,<br /></span>5 8 7 4 5 6 9 5 4,<br />7 5 8 4 1 2 3 6 8<span style="font-weight: bold;">;</span><br /><br /><span style="font-weight: bold;font-size:100%;" >Criando arquivos .keepme (útil para cvs)</span><span style="font-weight: bold;"> usando AWK</span><br />find DIRWORK -type d -ls | awk '{print "touch "$11"/.keepme"}' > criakeepme.exe<br /><br /><span style="font-weight: bold;">Usando LS e AWK para pegar parametros externos e escrever no GrADS<br /></span>'!ls -l u_niveis1000_*dat | tail -1 | awk "{print substr(\$9,14,12)}" > prefixo.txt'<br />prefixo=read('./prefixo.txt')<br />prefixo=sublin(prefixo,2)<br />say prefixo<br /><span style="font-style: italic;">(existem formas melhores, mas dependendo do tipo e tamanho do parâmetro isto é bem útil)</span><br /><br /><span style="font-weight: bold;">Usando HEAD e AWK para formatar um arquivo</span><span style="font-weight: bold;"> usando tabulações (\t), pedaços de strings (substr) e quebras de linha (\n)</span><br />head -2 arquivo.txt | awk '{print "X\t"substr($1,7,4)"-"substr($1,1,2)"-"substr($1,4,2)" 00:00:00\n"$2" "$3" "$4" "$5}'<br /><br /><span style="font-weight: bold;">Forma fácil de passar variáveis shell para o AWK</span><br />Passando $ano, $mes e $dia<br />awk -v datafull="20$ano $mes $dia 00 " '{print datafull $1" "$2" "$3" "$4}' arquivo.txt<br /><br /><span style="font-weight:bold;">Somando colunas usando AWK</span><br /><pre>awk '{for (i=1; i<=NF; i++) { sum[i]+= $i } } END { for (i=1; i<=NF; i++ ) { print "Col[", i, "] =", sum[i] } }'</pre><br /><span style="font-style:italic;">passa de:</span><pre>32 0<br />6 0<br />21 11</pre><span style="font-style:italic;">para...</span><br /><pre>Col[ 1 ] = 59<br />Col[ 2 ] = 11<br /><br /><br /><br />awk '{ sum1+=$1; sum2+=$2; } END { print sum1" "sum2 }'</pre><br /><span style="font-style:italic;">passa de:</span><pre>32 0<br />6 0<br />21 11</pre><span style="font-style:italic;">para...</span><br /><pre>59 11</pre><br /><br /><br /><br /><div style="text-align: center; font-weight: bold; font-style: italic; font-family: arial;">POST EM CONSTANTE ATUALIZAÇÃO<br />PARA VER MAIS DICAS, ASSUNTOS E COMANDOS<br />BUSQUE NA BARRA ACIMA, À ESQUERDA</div>Tozzihttp://www.blogger.com/profile/01966951944976005794noreply@blogger.com0tag:blogger.com,1999:blog-5630473957582967746.post-26245241421969658552008-09-01T01:10:00.001-03:002008-11-04T09:49:59.024-02:00Dicas para usar bem o ImageMagick<div style="text-align: center; font-weight: bold; font-style: italic; font-family: arial;">POST EM CONSTANTE ATUALIZAÇÃO<br />PARA VER MAIS DICAS, ASSUNTOS E COMANDOS<br />BUSQUE NA BARRA ACIMA, À ESQUERDA</div><br />Tem momentos em que nós que nós temos muitos arquivos de imagem que precisam ser tratados e formas que apenas um bom programa gráfico faz, mas estamos na linha de comando...<br /><br />Para isso existe o pacote de comandos gráficos ImageMagick e o comando mais útil para mim é o <span style="font-style: italic;">convert</span>.<br /><br /><br /><span style="font-weight: bold;">Gerando thumbnails</span> com o convert<br />convert -quality 40 -depth 8 -resize 100x75 entrada.png saida.jpg<br /><br /><br /><div style="text-align: center; font-weight: bold; font-style: italic; font-family: arial;">POST EM CONSTANTE ATUALIZAÇÃO<br />PARA VER MAIS DICAS, ASSUNTOS E COMANDOS<br />BUSQUE NA BARRA ACIMA, À ESQUERDA</div>Tozzihttp://www.blogger.com/profile/01966951944976005794noreply@blogger.com0tag:blogger.com,1999:blog-5630473957582967746.post-57093279697112391122008-09-01T01:04:00.001-03:002008-11-04T09:49:41.711-02:00Dicas para lidar com datas no linux<span><div style="text-align: center; font-weight: bold; font-style: italic; font-family: arial;">POST EM CONSTANTE ATUALIZAÇÃO<br />PARA VER MAIS DICAS, ASSUNTOS E COMANDOS<br />BUSQUE NA BARRA ACIMA, À ESQUERDA</div><br />Em meteorologia nós temos sempre </span><span>que ter o cuidado de pegar o dado certo, no local certo, do tempo certo.<br /><br />Lidar com as datas é fundamental pois no caso de previsão de tempo e clima, temos duas datas em jogo: de onde a previsão parte (data de integração ou data inicial) e para qual data ela é válida</span><span style="font-weight: bold;">.<br /></span><span><br />Para organizar grandes discos também é imporatnte saber lidar com datas e horas.<br /></span><span style="font-weight: bold;"><br /><br />Andando no tempo com o comando de linux date</span><br />date +%Y%m%d%h -d "12:12:12 2005-08-20 7 days"<br /><br /><span style="font-weight: bold;">Apagando os últimos dois arquivos de uma data</span><span style="font-weight: bold;"> (USANDO RM)</span><br />rm -f `ls -lrt ${htmlpath}s*$((${e}-3)).png | tail -2 | awk '{print $9}'`<br /><br /><span style="font-weight: bold;">Apagando por data (USANDO FIND)</span><br />find -mtime +40 -exec rm -Rf {} \;<br /><br /><span style="font-weight: bold;">Listando </span><span style="font-weight: bold;">por data</span><span style="font-weight: bold;"> (USANDO FIND)</span><br />find -mtime +40 -exec ls -o {} \;<br /><br /><br /><div style="text-align: center; font-weight: bold; font-style: italic; font-family: arial;">POST EM CONSTANTE ATUALIZAÇÃO<br />PARA VER MAIS DICAS, ASSUNTOS E COMANDOS<br />BUSQUE NA BARRA ACIMA, À ESQUERDA</div>Tozzihttp://www.blogger.com/profile/01966951944976005794noreply@blogger.com0tag:blogger.com,1999:blog-5630473957582967746.post-82598255055331735192008-09-01T01:01:00.001-03:002008-11-04T09:49:31.509-02:00Dicas para o comando FIND do linux<div style="text-align: center; font-weight: bold; font-style: italic; font-family: arial;">POST EM CONSTANTE ATUALIZAÇÃO<br />PARA VER MAIS DICAS, ASSUNTOS E COMANDOS<br />BUSQUE NA BARRA ACIMA, À ESQUERDA</div><br />Essas dicas eu peguei na época que eu era funcionário lá do CPTEC e guardei até hoje!<br /><br /><span style="font-weight: bold;">Busca simples usando find<br /></span><span>find . -name libjasper.so<br /><br /></span><span style="font-weight: bold;">Somatória de tamanhos de arquivos usando find</span><br />find dataout/T213L42 -name "???????????200503151*.gif" -ls | awk '{s=s+$7}END{print s}'<br /><br /><span style="font-weight: bold;">Criando .keepme (útil para cvs)</span><br />find DIRWORK -type d -ls | awk '{print "touch "$11"/.keepme"}' > criakeepme.exe<br />chmod u+x criakeepme.exe<br /><br /><span style="font-weight: bold;">Apagando por data usando find</span><br />find -mtime +40 -exec rm -Rf {} \;<br /><br /><span style="font-weight: bold;">Listando </span><span style="font-weight: bold;">por data </span><span style="font-weight: bold;">usando find</span><br />find -mtime +40 -exec ls -o {} \;<br /><br /><br /><div style="text-align: center; font-weight: bold; font-style: italic; font-family: arial;">POST EM CONSTANTE ATUALIZAÇÃO<br />PARA VER MAIS DICAS, ASSUNTOS E COMANDOS<br />BUSQUE NA BARRA ACIMA, À ESQUERDA</div>Tozzihttp://www.blogger.com/profile/01966951944976005794noreply@blogger.com0