
Foi conseguido mais um marco na história da Revista PROGRAMAR!
A PCGuia incluiu a revista no seu último DVD, edição de Dezembro de 2008.
por noreply@blogger.com (vITOR) a 19 Nov 08 05:09 (vitortomaz)

por noreply@blogger.com (vITOR) a 19 Nov 08 05:09 (vitortomaz)
The query builder class helps you build SQL queries
Although it might be simpler to write the queries yourself with this class you ensure consistent code style throughout the project in a simple to understand format
Select query example
$qb = &new QueryBuilder(); $qb->select('table') ->where('remove' , qbValues::integer(0), '>') ->andWhere('age' , qbValues::integer(30) ) ->returns('Name') ->returns('AVG(Salary) as AVGSalary') ->build();
output:
SELECT Name, AVG(Salary) AS AVGSalary FROM TABLE T1 WHERE remove > 0 AND age = 30
Complex Select query example:
$qb = &new QueryBuilder(); $qb->select('table1') ->join('table2') ->on('id','joinvalue', 'table1', 'table2') ->returns('id', 'table1') ->returns('Name', 'table2') ->getRecords(30) ->getFrom(300) ->where('email', qbValues::string('asd@asd.com'), '=', 'table2') ->orderBy('Name DESC', 'table1') ->groupBy('asd', 'table2') ->build();
output:
SELECT T1.id, T2.Name FROM table1 T1 JOIN table2 T2 ON T1.id = T2.joinvalue WHERE T2.email = "asd@asd.com" ORDER BY T1.Name DESC GROUP BY T2.asd LIMIT 300,30
Insert query example:
$qb = &new QueryBuilder(); $qb->insert('table') ->addColumn('Name') ->addColumn('Email') ->addColumn('Age') ->addValue(qbValues::string('Name')) ->addValue(qbValues::string('spam@francodacosta.com') ) ->addValue(qbValues::integer(31)) ->build();
output:
INSERT INTO TABLE ( Name, Email, Age ) VALUES ( "Name", "spam@francodacosta.com", 31 )
Share and Enjoy:
Um grande (de pequenas dimensões) aparelho, totalmente opensource, onde o seu proprietário pode tanto alterar o codigo do microprocessador, como alterar o seu hardware. TV-B-Gone, criado por Mitch Altman, da Cornfield Electronics. Encontra-se à venda por 10$, com apenas 1 LED Infravermelho, mas podes comprar um kit por apenas 19$, com 4 IR.
Já andava atrás dum a alguns dias, por isso aproveitei a oportunidade de a vinda do Mitch ao Codebits, para aprender a fazer um!
Ai tens algumas fotos do meu TV-B-Gone:
Podem comprar em: http://www.tvbgone.com
Bem, e o grande Codebits deste ano acabou. Já nas ultimas horas estavamos sem ideias, e estavamos mesmo para não apresentar nada. Estavamos numa mesa, com 2 gajos a codar (LuRsT e tsenart) até que o skin, que não conhecia o Rick Roll, tendo sido apresentado a este horas antes (:P) viciou-se e só via filmes em altos berros do Rick Roll (com outras pessoas a tentar dormir), lembrei-me de fazer o Rick Roll a passar em PC Speaker (Aqueles Beeps da Motherboard). Tendo o Skin a ideia do Rick roll, eu a ideia do PC Speak, foi a altura do Tharis ter a ideia de como implementa-la. Por isso fizemos um script em python onde havia uma função com 3 argumentos:
Basicamente o codigo chamava o comando beep -f $frequencia -l $duracao e mais um que não me lembro. E através do codigo sound(do, 0.5, 16) conseguiamos fazer um dó de 0.25 segundos (salvo erro, o tempo estava 1/2 de segundo).
Então fomos procurar a pauta do “Rick Astley - Never Gonna Give You Up”, e finalmente encontramos, o Tharis, que entende de música, passou para as notas, e voilá, em 3 horas tivemos o projecto pronto.
Supostamente também iriamos passar um video, mas o MPlayer deixou de conseguir reproduzir .flv por isso tivemos de passar um do youtube.
Wow, foi facil esplicar aqui no blog, mas ao vivo, com 500 pessoas, e cameras em directo a apontar foi mais complicado.
- Instale las pilas siguiendo los diagramas de polaridad (+ y -).
In: TI 84 Plus - Silver Edition (Manual de instruções, 2 Idiomas PT/ES (Total +- 400 paginas)
1. Pega no livro mais próximo.
2. Abre na página 56.
3. Procura a quinta frase.
4. Coloca um post no teu blog com o texto e seguido destas instruções.
5. Não escolhas o teu livro favorito, o mais cool ou o mais intelectual
De volta a casa depois de mais uma edição do Sapo Codebits. Este ano com mais pessoas e um espaço maior e mais actividades como o Quizz Show e Rock Band Battle of the Bands.
Em termos de workshops e palestras (palestras não é em brasileiro? Como se escreve em português?) só vi uma do início ao fim e a prestar atenção ao mesmo tempo, que foi a do Mário Valente, Serverside Javascript: Hope and Opportunity. Apesar de não ser um defensor do Javascript achei a ideia muito interessante e talvez estaremos mesmo diante de uma mudança histórica nas tecnologias server-side (…ou não).
Quanto ao meu projecto, lembrei-me de uma ideia que tive no fim de semana passado, para a qual tinha feito mais ou menos o webservice, só precisei de criar a interface e adicionar mais umas coisinhas ao webservice. O meu projecto foi o myGuito, um mini-gestor de dinheiro à la twitter, em que a pessoa escreve uma pequena descrição (40 char) e um valor dizendo se perdeu ou ganhou o valor e ele adiciona ao stack, sendo possível ver numa coluna os gastos e ganhos de uma forma simples (para a geração dos hi5s).
A apresentação não correu como eu esperava, fui amaldiçoado pela #Anita, porque ao colocar como descrição “Kit da #Anita” o programa falhou, e como algumas pessoas notaram, o problema estava no cardinal + ajax. Mas não me lembrei disso no palco então optei por explicar o que fazia o programa.
Em suma, achei que a apresentação correu melhor do que o ano passado, e para quem estiver interessado (anyone…) eu estou a pensar seriamente em melhorar o projecto e disponibilizar publicamente.
Em relação a coisas más do codebits só tenho uma queixa: As casas de banho, a melhor forma de dizer isto é com esta analogia: Pergunto-vos se enquanto jogam à batalha naval gostam que enquanto afundam os navios do adversário vos vejam o jogo? Eu não.
Aguardo impacientemente pelo próximo codebits! Obrigado Sapo!
EDIT: Adorei conhecer muitos dos meus contactos do Twitter!
Here it is the Portuguese (pt_PT) translation of Ext JS
13-11-2008 : It’s now included in ext SVN
/** * Ext 2.2.0 - Portuguese/Portugal (pt_PT) Translation * by Nuno Franco da Costa - francodacosta.com * translated from ext-lang-en.js * 11 Nov 2008 */ Ext.UpdateManager.defaults.indicatorText = '<div class="loading-indicator">A carregar...</div>'; if(Ext.View){ Ext.View.prototype.emptyText = ""; } if(Ext.grid.GridPanel){ Ext.grid.GridPanel.prototype.ddText = "{0} linha(s) seleccionada(s)"; } if(Ext.TabPanelItem){ Ext.TabPanelItem.prototype.closeText = "Fechar aba"; } if(Ext.LoadMask){ Ext.LoadMask.prototype.msg = "A carregar..."; } Date.monthNames = [ "Janeiro", "Fevereiro", "Março", "Abril", "Maio", "Junho", "Julho", "Agosto", "Setembro", "Outubro", "Novembro", "Dezembro" ]; Date.getShortMonthName = function(month) { return Date.monthNames[month].substring(0, 3); }; Date.monthNumbers = { Jan : 0, Feb : 1, Mar : 2, Apr : 3, May : 4, Jun : 5, Jul : 6, Aug : 7, Sep : 8, Oct : 9, Nov : 10, Dec : 11 }; Date.getMonthNumber = function(name) { return Date.monthNumbers[name.substring(0, 1).toUpperCase() + name.substring(1, 3).toLowerCase()]; }; Date.dayNames = [ "Domingo", "Segunda", "Terça", "Quarta", "Quinta", "Sexta", "Sabado" ]; Date.getShortDayName = function(day) { return Date.dayNames[day].substring(0, 3); }; if(Ext.MessageBox){ Ext.MessageBox.buttonText = { ok : "OK", cancel : "Cancelar", yes : "Sim", no : "Não" }; } if(Ext.util.Format){ Ext.util.Format.date = function(v, format){ if(!v) return ""; if(!(v instanceof Date)) v = new Date(Date.parse(v)); return v.dateFormat(format || "Y/m/d"); }; } if(Ext.DatePicker){ Ext.apply(Ext.DatePicker.prototype, { todayText : "Hoje", minText : "A data é anterior ao mínimo definido", maxText : "A data é posterior ao máximo definido", disabledDaysText : "", disabledDatesText : "", monthNames : Date.monthNames, dayNames : Date.dayNames, nextText : 'Mês Seguinte (Control+Right)', prevText : 'Mês Anterior (Control+Left)', monthYearText : 'Escolha um mês (Control+Up/Down avaçar/recuar anos)', todayTip : "{0} (barra de espaço)", format : "y/m/d", okText : "*OK*", cancelText : "Cancelar", startDay : 0 }); } if(Ext.PagingToolbar){ Ext.apply(Ext.PagingToolbar.prototype, { beforePageText : "Página", afterPageText : "de {0}", firstText : "Primeira Página", prevText : "Página Anterior", nextText : "Pr%oacute;xima Página", lastText : "Última Página", refreshText : "Recaregar", displayMsg : "A mostrar {0} - {1} de {2}", emptyMsg : 'Sem dados para mostrar' }); } if(Ext.form.Field){ Ext.form.Field.prototype.invalidText = "O valor deste campo é inválido"; } if(Ext.form.TextField){ Ext.apply(Ext.form.TextField.prototype, { minLengthText : "O comprimento mínimo deste campo &eaute; {0}", maxLengthText : "O comprimento máximo deste campo &eaute; {0}", blankText : "Este campo é de preenchimento obrigatório", regexText : "", emptyText : null }); } if(Ext.form.NumberField){ Ext.apply(Ext.form.NumberField.prototype, { minText : "O valor mínimo deste campo &eaute; {0}", maxText : "O valor máximo deste campo &eaute; {0}", nanText : "{0} não é um numero" }); } if(Ext.form.DateField){ Ext.apply(Ext.form.DateField.prototype, { disabledDaysText : "Desabilitado", disabledDatesText : "Desabilitado", minText : "A data deste campo deve ser posterior a {0}", maxText : "A data deste campo deve ser anterior a {0}", invalidText : "{0} não é uma data válida - deve estar no seguinte formato{1}", format : "y/m/d", altFormats : "m/d/Y|m-d-y|m-d-Y|m/d|m-d|md|mdy|mdY|d|Y-m-d" }); } if(Ext.form.ComboBox){ Ext.apply(Ext.form.ComboBox.prototype, { loadingText : "A Carregar...", valueNotFoundText : undefined }); } if(Ext.form.VTypes){ Ext.apply(Ext.form.VTypes, { emailText : 'Este campo deve ser um endereço de email no formato "utilizaor@dominio.com"', urlText : 'Este campo deve ser um URL no formato "http:/'+'/www.dominio.com"', alphaText : 'Este campo deve conter apenas letras e _', alphanumText : 'Este campo deve conter apenas letras, numeros e _' }); } if(Ext.form.HtmlEditor){ Ext.apply(Ext.form.HtmlEditor.prototype, { createLinkText : 'Indique o endereço do link:', buttonTips : { bold : { title: 'Negrito (Ctrl+B)', text: 'Transforma o texto em Negrito.', cls: 'x-html-editor-tip' }, italic : { title: 'Italico (Ctrl+I)', text: 'Transforma o texto em italico.', cls: 'x-html-editor-tip' }, underline : { title: 'SUblinhar (Ctrl+U)', text: 'Sublinha o texto.', cls: 'x-html-editor-tip' }, increasefontsize : { title: 'Aumentar texto', text: 'Aumenta o tamanho da fonte.', cls: 'x-html-editor-tip' }, decreasefontsize : { title: 'Encolher texto', text: 'Diminui o tamanho da fonte.', cls: 'x-html-editor-tip' }, backcolor : { title: 'Côr de fundo do texto', text: 'Altera a côr de fundo do texto.', cls: 'x-html-editor-tip' }, forecolor : { title: 'Côr do texo', text: 'Altera a aôr do texo.', cls: 'x-html-editor-tip' }, justifyleft : { title: 'ALinhar à esquerda', text: 'ALinha o texto à esquerda.', cls: 'x-html-editor-tip' }, justifycenter : { title: 'Centrar', text: 'Centra o texto.', cls: 'x-html-editor-tip' }, justifyright : { title: 'ALinhar à direita', text: 'ALinha o texto &agravce; direita.', cls: 'x-html-editor-tip' }, insertunorderedlist : { title: 'Lista', text: 'Inicia uma lista.', cls: 'x-html-editor-tip' }, insertorderedlist : { title: 'Lista Numerada', text: 'Inicia uma lista numerada.', cls: 'x-html-editor-tip' }, createlink : { title: 'Hyperlink', text: 'Transforma o texto num hyperlink.', cls: 'x-html-editor-tip' }, sourceedit : { title: 'Editar código', text: 'Alterar para o modo de edição de código.', cls: 'x-html-editor-tip' } } }); } if(Ext.form.BasicForm){ Ext.form.BasicForm.prototype.waitTitle = "Por favor espere..."; } if(Ext.grid.GridView){ Ext.apply(Ext.grid.GridView.prototype, { sortAscText : "Ordenação Crescente", sortDescText : "Ordenação Decrescente", lockText : "Fixar Coluna", unlockText : "Libertar Coluna", columnsText : "Colunas" }); } if(Ext.grid.GroupingView){ Ext.apply(Ext.grid.GroupingView.prototype, { emptyGroupText : '(Nenhum)', groupByText : 'Agrupar por este campo', showGroupsText : 'Mostrar nos Grupos' }); } if(Ext.grid.PropertyColumnModel){ Ext.apply(Ext.grid.PropertyColumnModel.prototype, { nameText : "Nome", valueText : "Valor", dateFormat : "Y/j/m" }); } if(Ext.layout.BorderLayout && Ext.layout.BorderLayout.SplitRegion){ Ext.apply(Ext.layout.BorderLayout.SplitRegion.prototype, { splitTip : "Arastar para redimensionar.", collapsibleSplitTip : "Arastar para redimensionar. DUplo clique para esconder" }); }
É esta também a essência da utilização das tropas.
in: A Arte da Guerra, por Sun Tzu (é a 4º frase porque não tinha 5º
1. Pega no livro mais próximo.
2. Abre na página 56.
3. Procura a quinta frase.
4. Coloca um post no teu blog com o texto e seguido destas instruções.
5. Não escolhas o teu livro favorito, o mais cool ou o mais intelectual
Pelas mais diversas razões preciso de ter a minha ligação à rede wireless activa e não ter que andar sempre a dar um sinal de actividade ao PDA para não me entrar em standby, pois caso entre, a ligação à rede vai à vida e é novamente estabelecida quando o volto a ligar.
Para manter a ligação activa mesmo em standby é necessário alterar uns valores no registo do windows mobile que são as seguintes:
(Deverão fazer um backup do registo antes de qualquer alteração)
Para aceder ao registo utilizo a aplicação gratuita Task Manager.
Tagged: pocketpc, software, windows mobile
Para os que, por alguma razão, mantêm um registo dos meus projectos, serve este texto para dar ideia do que tenho andado a fazer, talvez sirva mais para me tentar convencer que, afinal, até tenho feito qualquer coisa com o tempo livre
Lista de projectos pendentes/em trabalho:
Bem, afinal até tenho muito entre mãos, se a isto acrescentar mais algumas coisas que não posso publicar. Vamos ver se consigo cumprir os objectivos e ter as aplicações completas, principalmente a da Funambol porque quero ver se recebo alguma coisa por isso ![]()
Esta é uma sensação que tem vindo a crescer cada vez mais, será que os programadores portugueses têm algum orgulho em serem portugueses? Em falarem e defenderem a língua portuguesa? Ou a maioria de nós esconde-se no facto de que é mais simples utilizar os termos, supostamente técnicos, em inglês?
Recentemente li mais uma resposta de um utilizador do P@P que me fez voltar para o mesmo pensamento. Dizia esse utilizador que ou se sabia Inglês ou não seria possível evoluir os conhecimentos na área de programação, que sem Inglês estaremos condenados à estagnação e a não evoluirmos enquanto programadores.
A minha primeira reacção foi concordar com esta ideia, afinal desde que me iniciei na utilização de computadores que o Inglês tem sido uma ajuda fundamental, o DOS não estava traduzido, o primeiro Linux que usei veio em Inglês os jogos só recentemente nos oferecem conteúdo traduzido, e mesmo esses são diminutos, e no meio da programação não há dúvida que a quantidade de livros e tutoriais em Inglês é tal que elimina qualquer tipo de concorrência que os livros da FCA podiam fazer. Se bem que sendo livros da FCA estariam condenados à mediocridade desde o início, mas esse é assunto para outra altura…
No entanto existe sempre um “mas”, afinal não estavamos nós numa comunidade PORTUGUESA de programadores? Não falamos todos nós PORTUGUÊS? Não fazemos textos, esclarecemos dúvidas, apresentamos tutorias, estudamos livros e apontamentos em Português? Eu pelo menos sei que sim.
Então porque continuamos a achar que é necessário dominar o Inglês para se poder aprender a programar? Aliás, peguando numa conversa que tive com um programador do projecto FreeCol, todo este uso de “Inglês Técnico”, que tem pouco de técnico e por vezes até de Inglês, tem feito com que as minhas faculdades na língua tenham vindo a diminuir.
Pessoalmente, acho que todos nós, portugueses, sofremos de um síndroma de desdém das capacidades que temos, pessoalmente acho que temos conhecimentos e capacidades para ser mais e melhor, pessoalmente acho que todos os que não são portugueses reconhecem a qualidade do que fazemos, nós é que continuamos a fazer e a considerar que não é suficiente que “lá fora” se faz melhor.
Como programador português acho que apenas com a nossa língua é possível aprender, crescer e evoluir na área da programação! Se assim não fosse, que sentido faria a minha participação no Portugal-a-programar?!
Sempre me considerei uma pessoa ponderada, às vezes demasiado complacente é verdade, mas sempre achei que não há motivo algum para perdermos as estribeiras ou para nos deixarmos afectar com o que os outros fazem, dizem ou pela opinião que têm de nós. Mas recentemente, com ou sem razão, perdi completamente a cabeça com um utilizador neste vasto meio que é a Internet.
Acho que sempre respeitei as pessoas com quem me cruzo na net, acho que faço o possível para ser cordeal, responsável e justo para com os utilizadores que se cruzam comigo. Mas esta pessoa em particular tem sido alguém difícil de lidar, alguém conflituoso, que cria alguns desconfortos nos que o rodeiam e que tem respondido, senão a todos, a grande parte dos contactos que tivemos, com um tom que sempre me pareceu agressivo, prepotente e sem ponta de respeito por quem com ele comunica.
Agora que penso no assunto com mais calma, sinto que foi precipitação perder a cabeça, afinal, olhando para várias das mensagens e textos desse utilizador, vejo que sempre fui conseguindo tolerar a forma como ele se exprimia mas talvez tenha sido esse o problema: tanto tive de aguentar que algum dia tinha de ceder, mesmo que tivesse sido, como agora vejo, por tão pouco.
Enfim, fiquei chateado mas que há a fazer? Não deixa de ser curioso ter sido a primeira vez que, em 11 anos de utilização de Internet, me deparo com uma situação destas.
Pois é, o Codebits já está quase! Dois dias, e a contar!! Ainda continuo, como hei de dizer, indeciso, porque a dois dias do Codebits, ainda não está nada organizado. Mas em principio irei. Vai ser divertido, pois segundo andei a ler no blogue do Codebits tem tecnologias muito intressantes de serem exploradas, engraçadas, e também vai haver apresentações muito boas!
Tenho pena de não puder assistir à Conferencia sobre o Joomla, pois deve ser intressante, mas depois vejo o video quando for disponiblizado ao Publico. Infelizmente Quinta-Feira não puderei ir, visto ter um maltido teste de Matemática.
Mais uma vez penso que serei o mais novo do evento… Vamos ver…
Já está. A parte mais complicada da renovação NeoPT já está praticamente concluida.
Foi adicionado um novo tema, Revolution Two Blog Theme, e renovei as Categorias todas.
É engraçado porque antes utilizava um pouco as categorias como TAG’s todas desorganizadas, já tinha umas noventa e tal categorias. Pronto. Todos os artigos posteriores à data de hoje estarão incluídos na categoria Arquivos, visto que faz parte do passado do NeoPT.
E um brinde, ao futuro do NeoPT.
“Velocidade, qualidade, preço”. Estas palavras comandam o mundo do desenvolvimento de software nos tempos actuais. Cada vez mais os clientes exigem software a baixo custo, que esteja disponível amanhã, e que funcione à primeira. Uma empresa que responda a estes pedidos dizendo “estará pronto no próximo semestre”, está morta. O mundo mudou! Este seminário destina-se a engenheiros de software, líderes de equipa e gestores de projecto que queiram aprender mais sobre desenvolvimento rápido de software, em particular usando a metodologia SCRUM.
• Organização e gestão de equipas ágeis
• Gestão de requisitos de forma eficaz
• Planeamento e acompanhamento
• Estimação
• Engenheiros de Software
• Lideres de equipa e gestores de projecto
• Empresas interessadas em colaborar com o programa CMU|Portugal
• Prof. Paulo Marques, Universidade de Coimbra
• Prof. Mário Zenha Rela, Universidade de Coimbra
![]() |
Paulo Marques Paulo Marques é Professor Auxiliar no Dep. de Eng. Informática da Universidade de Coimbra e Professor Associado Adjunto da Universidade de Carnegie Mellon, nos Estados Unidos. Recentemente foi responsável pelos projectos RAIL e RAIL2, financiados pela Microsoft Research, assim como uma série de outros projectos para a Agência Espacial Europeia. Desses destaca-se os projectos LeonVM e QERL que visaram o desenvolvimento de simuladores avançados para os processadores a serem usados em futuras missões. É também autor de dois livros sobre desenvolvimento de software em C# e .NET. |
|
![]() |
Mário Zenha Rela Mário Zenha Rela é Professor Auxiliar na Universidade de Coimbra, onde se doutorou, e Professor Associado Adjunto da Universidade de Carnegie Mellon, nos Estados Unidos. As suas principais áreas de investigação são Confiabilidade de Computadores e metodologias de e-Learning. Tem estado envolvido em diversos projectos nacionais e internacionais, nomeadamente com a Agência Espacial Europeia (European Space Agency, ESA) na área de certificação de software. É Director do IPNlis, laboratório de investigação aplicada criado pela Universidade de Coimbra para promover a transferência de tecnologia para a indústria e Presidente do Departamento de Engenharia Informática da Universidade de Coimbra. |
• [1.5h] Desenvolvimento ágil de software usando SCRUM
• [0.5h] CMU|UC Master of Software Engineering (http://mse.dei.uc.pt)
• Porto: 22 de Novembro 2008, 10:00, Hotel Ipanema Porto , Rua Do Campo Alegre, 156/172
• Lisboa: 29 de Novembro 2008, 10:00, Hotel Tivoli Tejo, Av. D.João II
Os workshops terão lugar entre as 10:00 e as 13:00
Tagged: scrum, workshop
Ó meus amigos,
Estive tão ocupado que deixei passar.
O meu Penultimo Post foi o Post do 1º ano no formato blog do NeoPT!
Bem, o NeoPT já existe há quase 2 anos, mas passou por grandes coisas, sempre diferentes até se fixar neste blog. Para comemorar, o blog terá uma nova imagem, e passará a ser, ou pelo menos tentar, um sitio com informações mais sérias, mas sempre informal. Este não é um blog de camisa e gravata. Se compararmos este blog com os famosos anúncios do “Hello. I’m a Mac. And I’m a PC”, eu sou o Mac.
Hmm, enfim… Passando aos planos do blog para o próximo ano:
Enfim, então que seja um novo ano para o NeoPT!
E Viva a nova sociedade da informação!
PARABENS ![]()