Hoje vamos começar com o ponto fundamental de todo processo de desenvolvimento: Lógica de programação. Afinal, todos que esperam algum dia criar um sistema precisam desenvolver seu raciocínio lógico. Mas o que é Lógica? Bem, não é fácil definir o que é lógica sem usar um jargão ou uma destas definições de livros acadêmicos, por isso, vou usar uma definição que encontrei na wikipedia: "...a lógica é o ramo da filosofia que cuida das regras do bem pensar, ou do pensar correto, sendo, portanto, um instrumento do pensar". Viram como é difícil? Mesmo a definição da wikipedia é bastante confusa, mas podemos perceber que a lógica esta diretamente relacionada ao raciocínio.
É justamente neste ponto que começa todo desenvolvimento de sistemas. Pois, um sistema nada mais é do que a união de várias pequenas soluções de problemas. E para resolver problemas precisamos raciocinar. Todo desenvolvedor de sistemas precisa antes de mais nada saber "lógica de programação", ou seja, precisa saber aplicar seu raciocínio na construção de algorítimos. Mas o que são algorítimos?
Um algoritmo é a seqüência finita de passos que levam a execução de uma determinada tarefa. Ou seja, podemos pensar em algoritmo como uma receita ou um manual que mostra a seqüência de instruções resultam na execução desta tarefa. E não importa qual for a tarefa, até mesmo as coisas mais simples da vida cotidiana podem ser traduzidas em algorítimos. Imagine que você vá tomar um banho. Como seria o algorítimo da tarefa "Tomar banho"? Talvez seja mais ou menos assim:
- Início
1) Tirar a roupa.
2) Ligar o chuveiro.
3) Entrar na água.
4) Passar sabonete.
5) Enxaguar.
6) Desligar o chuveiro.
7) Enxugar.
- Fim
Mas não podemos simplesmente dizer a um computador: "Calcule meu imposto de renda" ou "Controle o meu estoque". Por isso precisamos saber escrever estes algorítimos numa língua que ele compreenda. É neste ponto que muitas pessoas se "desesperam" e pensam: "Ai caramba! Eu tento aprender a falar inglês desde que tenho 5 anos e até hoje não consigo falar nada além de 'the sky is blue' ou 'the book is on the table'... como vou aprender mais uma língua?!". Calma! Aprender uma linguagem de programação não é um bicho de sete cabeças. Como tudo na vida exige apenas um pouco de dedicação, mas não vamos entrar neste mérito, pois já discutimos estes aspectos em nosso primeiro post. Felizmente, para facilitar as coisas vamos utilizar um "pseudocódigos" escritos em PORTUGOL, que é uma espécie de linguagem de programação baseada em verbetes de comando em Português, e portanto de fácil compreensão.
Como qualquer linguagem de programação, o PORTUGOL, que apesar de ser uma base de nosso "pseudocódigo", exige que sigamos uma série de regras na construção do nossos algorítmos. Podemos resumir rapidamente estas regras da seguinte forma:
- Usar somente um verbo por frase.
- Escrever o código mais simples possível.
- Usar frases curtas e simples.
- Ser objetivo
Então prepare-se, a partir de nosso próximo post, vamos escrever algorítimos pra valer. Um abraço a todos e bons estudos.
Olá amigos, esta é a segunda vez que tentarei realizar este curso… para tentar concluir este propósito vou contar com a ajuda de algums amigos. Um deles é o Ricardo Cruz, analista de sistemas e blogueiro aqui do 100loop. No futuro teremos outras pessoas escrevendo para a série de posts do curso.
A razão para realizar o curso, é a que tenho conversado com alguns amigos; muitos deles até acompanham assuntos de tecnologia… são capazes de alterar um “programinha pronto” em alguma linguagem de programação. Mas a grande maioria vive me perguntando como aprender a "programar de verdade" para criar algo do zero, dominando os conceitos e por consequência… aprender qualquer linguagem mais rapidamente.
Pensando nisso, imaginei criar uma série de posts para discutir conceitos básicos de desenvolvimento; começando desde lógica, sintaxe, algorítimos e afins... para que possa servir de apoio a qualquer pessoa que se interesse por programação e não sabe por onde começar.
Pensei em começar escrevendo sobre "lógica de progamação" como nosso primeiro fundamento. Mas antes gostaria de avisar a todos que forem acompanhar estes posts que nada acontece da noite para o dia... ninguém que leia este blog irá aprender a programar em poucas semanas, só porque leu alguns posts e acompanhou algumas discussões. Tudo leva tempo. Há um tempo atrás, li um artigo muito interessante do Peter Norvig (traduzido pelo Augusto Radtke) que tem o intrigante título "Aprenda a programar em 10 anos". A primeira vista pode parecer um texto desanimador para quem está querendo começar agora, ainda mais numa sociedade imediatista como a nossa... movida a "fast food", "fast shop"... "fast tudo", mas acredite, se você realmente quer aprender, tenha paciência, trace um objetivo e dedique-se de verdade.
Uma boa dica para os iniciantes é traçar uma meta. Saiba perfeitamente onde você quer chegar. Por exemplo, se você trabalha com vendas, tente programar para um dia conseguir fazer um sistema que lhe ajude a controlar seu fluxo de caixa; ou mesmo que controle suas despesas do mês. Este pode ser o objetivo que vai lhe inspirar a continuar aprendendo. Não tenha medo de pensar algo assim, mas lembre-se do primeiro ponto deste texto... tenha paciência, pode ser que você só venha a conseguir completar este programa em 2 anos... talvez em 6 meses. Só depende de você.
Outro ponto fundamental é não se enganar, conheci muitas pessoas que tem extrema dificuldade em reconhecer que não domínam determinado assunto. Não sei o quanto isso é comum em outras áreas, mas na área de tecnologia, alguns profissionais não conseguem admitir que não sabem resolver um determinado problema sozinhos e preferem não pedir ajuda. Um grande profissional da área de tecnologia exercita não apenas sua comunicação com os computadores, mas principalmente com outros profissionais. Algo parecido acontece quando, decidimos atropelar nossos estudos passando para outro assunto sem ter concluído (entenda que conclúido é "dominado") o assunto anterior. E claro, isto se encaixa perfeitamente no outro fundamento: mantenha contatos com pessoas que já programam, pois elas irão lhe ajudar a avaliar seus conhecimentos, lhe darão suporte quando você tiver dúvidas e quem sabe um dia vocês não trabalhem juntos?
Tentarei participar ativamente de tudo isso que falei para aqueles que se dispuserem a participar do grupo... escreverei, postarei dicas, responderei perguntas e estarei à disposição sempre que possível. Então nos vemos em breve para iniciarmos nossos estudos... e espero poder contar com outros grandes profissionais nesta tutoria on-line. Um grande abraço a todos.
Esta semana tirei umas horinhas para atualizar meus perfis de redes sociais, e logo após a primeira meia hora de “trabalho duro”, me peguei pensando sobre a importância de manter todos estes perfis atualizados. Na verdade, quando a gente mantêm estes dados online… com uma vasta gama de informações sobre nós, existe uma razão para isso: Queremos ser vistos! E é neste ponto que queria “trocar uma idéia” com vocês. Eu particularmente possuo: orkut, facebook, linked-in, twitter… etc. Mas afinal, qual deles realmente importa?!
É claro que todos cumprem objetivos diferentes, mas se você não tem tempo para ficar horas atualizando seus perfis online, escolha bem aquilo que você está alimentando no seu “Ego-google” (que nada mais é do que aquilo que o google diz sobre você, experimente pesquisar seu nome no google: é bem divertido). Mas voltando ao assunto, é preciso ter muito cuidado com aquilo que postamos na internet, afinal não temos muito controle daquilo que o google diz sobre nós.
Mas porque estou dizendo isso? Bom, já participei de vários processos seletivos, e acho que não é segredo para ninguém que muitos dos empregadores costumam pesquisar a vida dos candidatos no google… vasculhando orkut, facebook e o que mais puder encontrar. Nada mais natural, a gente sempre procura coisas boas… trabalhos de faculdade, projetos publicados, áreas de interesse (de preferência na área pleiteada)… mas é claro que as vezes encontramos o que não queríamos… do tipo: associações com comunidades, no melhor estilo “odeio trabalhar na segunda-feira” ou “meu chefe é um pé no saco”. Não quero de forma alguma criar uma polêmica sobre o que se faz fora da empresa, mas apenas alertar sobre os perigos de manter perfis deste tipo disponíveis e abertos para TODO MUNDO ver. Afinal, a grande maioria destas redes possuem mecanismos de controle de privacidade e DEVEM ser utilizados.
Veja meu “ego-google” como está neste momento…

E então para minha surpresa, os dois primeiros links que o google vincula ao meu nome são justamente da rede social que eu mais gosto, o Linked In. Afinal, é a rede social mais produtiva para quem usa… pois é uma maneira simples de deixar o seu currículo disponível online para quem quizer ver, o sistema permite ainda que você se associe aos grupos de empresas, profissionais ou instituições de ensino… podendo ainda fazer o famoso QI (“quem indica”)… já que você pode recomendar ou ser recomendado por colegas de trabalho. Ou seja, um prato cheio para “head hunters”… espalhados pelo país a fora. Eles podem estar procurando por você.
Mas isso é apenas uma parte do seu “ego-google”, é sempre bom manter conteúdo de relevância sobre você ou de sua autoria. No meu caso, participar do 100loop escrevendo artigos técnicos, participar como palestrante e divulgar eventos no DotNetRaptors além de ser um hobbie e trazer beneficios para a comunidade… é em contra partida, um ótimo marketing pessoal. E é aí que que todos os entusiastas da comunidade sempre batem na mesma tecla… “participe da comunidade ativamente, você vai colher frutos no futuro”. Este “futuro” pode ser muito antes do que você imagina… e este “fruto” nada mais é do que o reconhecimento merecido pelo seu trabalho, pois o MERCADO está te vendo.
Você precisa apenas tornar as coisas mais fáceis para quem te procura. Acompanhe regularmente seu “ego-google”, mantenha aquilo que diz respeito apenas para os seus amigos mais íntimos, como privados (para evitar mau-entendidos)… e principalmente valorize o seu perfil profissional: é ele que realmente importa.
Daí vão algumas dicas rápidas:
- Responda fóruns, escreva artigos e participe de um blog.
- Tenha um perfil no linked in atualizado.
- Procure manter um currículo online.
- Mantenha sua vida pessoal, “privada”.
um abraço à todos, e divirtam-se.
Uma boa dica para quem esta desenvolvendo websites em ASP.Net e pretende que seu projeto esteja bem posicionado nos mecanismos de busca é utilizar técnicas de Search Engine Optimization, ou simplesmente SEO.
Vou dar uma dica rápida de como você pode por exemplo, alterar um pouco a estrutura de navegação do seu projeto para ganhar muitas posições nos buscadores. Primeiramente precisamos criar um roteamento de requisições no servidor para eliminar URLs fracas semânticamente, como por exemplo: ~/noticias.aspx?codnoticia=12 e converter em algo como ~/noticias/muito-legal-programar-em-aspnet. Ou seja, ao inves da URL conter apenas o código da notícia nós podemos apresentar o título da matéria e ganhar mais “relevância” nos buscadores.
O meu vídeo na Copa Microsoft de Talentos foi sobre esse assunto, por isso vou deixar para vocês o link do mesmo, e não vou adentrar muito nesta etapa. ok?
UrlRouting com VS2010 - André Paulovich from André Paulovich on Vimeo.
Porém, mesmo depois que nós temos o roteamente pronto, nós ainda temos que dar um jeito de criar as URLs referentes ao conteúdo de acordo com os títulos. E é aí que entra a segunda parte da dica. Nós temos uma forma muito fácil de converter um texto cheio de caracteres especiais (que não podem ser usados em URLS), em um texto equivalente, que será compreendido tanto pelos buscadores como por nós que vamos lê-los.
Digamos que nossa notícia tenha o título: "É hoje o último dia da competição de pacman". Nós não podemos simplesmente colocar em caixa baixa o texto e eliminar os espaços, pois os acentos, cedilhas e etc continuariam avalhando as URLs. Por isso a melhor maneira é usando a tabela ASCII. São dois passos:
- Precisamos de um array com os bytes do texto original (até aqui 8bits de informação por byte):
byte[] b = Encoding.GetEncoding(1251).GetBytes(name);
- Depois, basta pegar o código ASCII de cada byte de texto:
string t = Encoding.ASCII.GetString(b);
Resumindo, quando você tem os caracteres áâàã, todos possuem o mesmo código ASCII e é essa a jogada. Falta agora apenas subistituir os espaços por um traço e nós podemos então criar uma função como esta:
static public string GenarateAlias(string name)
{
byte[] b = Encoding.GetEncoding(1251).GetBytes(name); // 8 bit characters
string t = Encoding.ASCII.GetString(b); // 7 bit characters
return t.Trim().Replace(" ", "-").ToLower();
}
Agora, para não ter que ficar chamando esta função o tempo todo, nós podemos inseri-la num evento do Paulovich.Data, onInserting e onUpdating, para que este “apelido” do título seja gerado sempre que o usuário salve uma nova notícia ou atualize uma existente. Se você ainda não conhece o ciclo de vida de uma classe Persist do Paulovich.Data veja neste link um exemplo rápido.
protected override void OnInserting(object sender, System.ComponentModel.CancelEventArgs e)
{
Alias = GenarateAlias(Title); // O Alias é uma propriedade da classe Persist
base.OnInserting(sender, e);
}
protected override void OnUpdating(object sender, System.ComponentModel.CancelEventArgs e)
{
Alias = GenarateAlias(Title);
base.OnUpdating(sender, e);
}
Pronto! Você já pode utilizar o Alias da notícia para retornar a notícia desejada.
Como todos puderam perceber, nos últimos dias estivemos publicando algumas vagas aqui no blog, afinal a gente sempre fala em todos os nosso eventos: “Os grupos como o 100loop e DotNetRaptors são pontes entre a comunidade e o mercado”. Por isso nada mais natural que as empresas nos solicitarem para publicar algumas vagas aqui, normalmente a gente repassa essas vagas diretamente para algumas pessoas selecionando o perfil dos vagas e dos profissionais. Porém, estão aparecendo muitas vagas e por isso… vamos deixar as coisas seguirem o seu fluxo. A gente publica, quem interessar, corre atrás e batalha, ok?! Só queria ressaltar que não é nossa intenção fazer do 100loop uma agência de empregos… nossa intenção é continuar sempre com bons artigos técnicos como foco principal.
Quase todo mundo que posta aqui no 100loop trabalha na webAula, por isso se você está atrás de uma boa oportunidade de trabalho e “de quebra” trabalhar próximo de profissionais diferenciados e envolvidos com a comunidade técnica, essa pode ser a sua chance. Venha trabalhar conosco. A webAula S/A é pioneira e líder no mercado de e-learning brasileiro. Com unidades em Belo Horizonte, Brasília, São Paulo e Atlanta/EUA, e no momento oferece diversas oportunidades de trabalho, em vários ramos de atuação. Em especial separei três vagas que estão de acordo com o nosso público. Segura aí…

Analista de Sistemas .Net - Belo Horizonte (1 vaga)
O analista .NET tem todas as atribuições do programador .NET e também deve ter condições de analisar e criar diagramas de classes e entidade-relacionamento, utilizando as boas práticas do projeto orientado por objeto. Também deve contribuir junto ao gerente na conceituação dos produtos emitindo opiniões e validando as informações.
Programador .Net - Belo Horizonte (1 vaga)
O programador .NET desenvolve aplicativos baseados na tecnologia .NET. Deve ser capaz de entender especificações documentadas e solicitações verbais. Deve desenvolver sistemas inteiros ou partes deles, codificar com habilidade em client side (JavaScript) e server side (C#). Deve também realizar testes básicos nas implementações com o objetivo de minimizar o retrabalho e ter boa qualidade nas produções. O programador deve também ter condições de elaborar sentenças SQL complexas que envolvam múltiplas tabelas e construir stored procedures.
Programador ASP - Belo Horizonte (1 vaga)
O analista ASP tem todas as atribuições do programador ASP e também deve ter condições de analisar e criar diagramas de classes e entidade-relacionamento, utilizando as boas práticas do projeto orientado por objeto. Também deve contribuir junto ao gerente na conceituação dos produtos emitindo opiniões e validando as informações.
Para ver a lista completa de oportunidades acesse: http://www.webaula.com.br/pt/trabalhe-conosco se você quizer se candidatar, basta mandar seu currículo para lucia.mendes@webaula.com.br.
Grande abraço a todos,
A gente se vê por aqui… (nenhuma referência ao slogan da rede globo, viu!)
Amigos, foi cadastrado hoje mais um release do Paulovich.Data, nosso último release tinha sido em setembro do ano passado, e até mesmo pelo grande espaço de tempo entre os releases, nossa lista de updates é bastante extensa. Parabéns a todos os envolvidos... em especial ao Ivan Paulovich, coordenador e desenvolvedor responsável pelo framework. Mas também precisamos agradecer a todos que testam e utilizam o framework e nos reportam melhorias e bugs.
Falando das atualizações, no codeplex agora temos uma uma solução com suporte ao Visual Studio 2010 e foi convertido ao .NET 4. Portanto, vamos todos fazer o update do Visual Studio, hein.
- Correção de bugs:
- Correção de bug na conversão de enums rodando sob Oracle.
- O evento OnGetting era chamado quando invocávamos o evento OnGot (Obrigado Ricado Cruz pela correção).
- Corrigindo exigência da conexao dbPortal no web.config.
- Corrigindo do MySQL Dialect.
- Removida validação de profundidade no carregamento de objetos filhos
- Corrigido suporte a contagem de linhas numa busca.
- Correção de bugs na criação de joins
- Permitindo que o contexto de conexão seja lockado via ThreadStatic. (Obrigado Ricado Cruz e André Paulovich)
- Melhorias
- Solução com suporte ao Visual Studio 2010
- Suporte a serialização com WCF
- Uso de regex para padronizar queries
- Criação da propriedade Size para validação do tamanho do campo.
- Suporte a paginação
- Validação dos parâmetros dos métodos
- Melhorando o tratamento de exceções
- Resources melhorado
- Persistência através de Session
- Melhorando o modelo de acesso a dados
- Novos métodos para mapeamento dos objetos
- Melhorias no tratamento de valores nulos
- Mapeamento many-to-many
Até o próximo release.
Farei uma série de posts explicando algumas das melhorias deste release nos próximos dias.
Saudações comunidade! Ontem estivemos no campus Venda Nova do Izabela Hendrix, para o primeiro dia do ciclo de palestras do Community Launch 2010.
Para este dia, estavam planejadas as palestras de Conhecendo o VS2010 e Web Deployment, apresentada por mim; e em seguida a palestra do Ivan Paulovich - Entity Framework 4.0.
É muito gratificante ver alunos tão interessados e participando bastante.
Seguem algumas fotos de ontem (09/06/2010):

Bom público. Parabéns as alunos e professores que nos prestigiaram.

Valeu pessoal, público muito bom!

Sortudo que levou o primeiro livro.

Outro sortudo! (Hoje. 10/06/2010... teremos outros sorteios, mochila e livro)
Fiquem atentos, pois o show ainda não acabou! Nosso ciclo de palestras do Communiy Launch 2010 em Belo Horizonte se encerra hoje a noite, mais uma vez no campus Venda Nova do Instituto Metodista Izabela Hendrix. Teremos mais uma rodada dupla, com o Ivan Paulovich falando sobre MVC, e o Luciano Lima mostrando todas as inovações do Dynamic Data.
Agradecemos a todos que estiveram nos acompanhando durante os últimos 60 dias... tivemos a oportunidade de falar para diferentes públicos, em diversas faculdades: Uni-BH, Infórium, PUC e Izabela Hendrix.
Dedicamos horas de nosso esforço para trazer para a Comunidade Mineira estas informações sobre os novos produtos Microsoft para desenvolvimento, em especial Visual Studio 2010 e SQLServer 2008 R2. E temos certeza que foi muito proveitoso para todos que participaram, direta ou indiretamente.
Um abraço de toda comunidade DotNetRaptors e do time de colaboradores do 100loop. Até a próxima jornada.
Uma das coisas que senti falta como comecei a desenvolver em C#, foi um recurso muito útil para criação de sobrecargas de métodos: os parâmetros opcionais. Como creio que todos sabem, no C# para fazer uma sobrecarga de métodos, criamos uma nova assinatura com a combinação de parâmtros que queremos. Mas acontece que apesar de ser mais organizado (aprendi a pensar assim com o passar do tempo), quando temos um método com 5 ou 6 parâmetros e muitas possíbilidades de execução... acabamos fazendo uma permutação das combinações de parâmetros e consequentemente criando muitos métodos de sobrecarga.
Para nossa alegria, dentre as novidades do C# 4.0... temos dois novos recursos que são: parâmetros opcionais e os parâmetros nomeados. Os parâmetros opcionais já faziam parte de VB.Net mas agora é possível fazer isso também no C # ao invés de usar métodos de sobrecarga. Economizando assim algumas linhas e muitas assinaturas desnecessárias. Já os parâmetros nomeados, creio que seja uma novidade "inédita".
private Rectangle DrawBox(int size, string color = "#FF0000", int borderSize = 1)
{
/// implementação do método
}
Exemplo da utilização do parâmetro opcional:
var defaultBox = DrawBox(10);
Neste caso, será criado um objeto Box, com o size = 10, color = "#FF0000" e o borderSize = 1. Pois como não houve nenhuma entrada de valor para o color e boderSize o valor atribuído será o mesmo que existe na assinatura do método.
Se por exemplo, quizermos criar a mesma Box, porém ao invés de criá-la na cor padrão ("#FF0000"), nós a quizesemos na cor preta, bastaria informar o segundo parâmetro apenas.
var blackBox = DrawRectangle(10, "#000000");
Já os parâmetros nomeados servem, para "extender" os parâmetros opcionais, pois nos permite utilizar as assinaturas sem nos ater à ordem os parâmetros, bastando saber o nome do mesmo. Neste exemplo, criei um objeto configurando apenas o tamanho da borda (terceiro parâmetro na assinatura) sem informar uma "color".
var doubleBorderBox = DrawRectangle(10, borderSize: 2);
O mais importante, é ir com calma na utilização destes recursos para não acabar criando funções que façam coisas muito diferentes num mesmo método, trazendo uma certa confusão para seu aplicativo.

Visto que temos vários autores no 100loop, você pode acompanhar as atualizações de alguns deles também pelo Twitter e ficar sempre um passo a frente com os últimos posts.
Vamos acompanhar e ver o que o passarinho vai nos contar daqui para frente!
abraços,
Hoje vou dar uma dica para quem usa o TFS mas nem sempre está usando a interface do Visual Studio (mais precisamente do Team Explorer). Estive trabalhando recentemente num projeto web que foi feito em .Net e Flex. Enquanto eu estava trabalhando nos serviços e regras de negócio dentro do Visual Studio eu podia facilmente dar check-out e check-in nos arquivos e manter meu projeto sincronizado com o restante da equipe. Porém, quando estava no Flex Builder (IDE do Flex) a situação era bem menos confortável. Isso por que, eu precisava ficar com o Visual Studio aberto para ver o Team Explorer e dar check-in nos arquivos que estava produzindo no Flex. É claro que num determinado momento isso me irritou profundamente, já que apesar do TFS ser um maravilhoso sistema de versionamento de arquivos, faltava uma integração direta com o meu Windows Explorer (assim como no SVN)...
Minha falha foi não ter pesquisado direito, mas com um pouco de google encontrei o Team Foundation Server Power Tools. Basicamente, o TFSPT é um pacote de “add-ons”. Vou mostrar para vocês um destes "add-ons" que resolve exatamente o problema de integração direta com o Windows Explorer, garantindo assim que você consiga versionar arquivos sem precisar do Visual Studio aberto só para fazer isso.
Primeiramente baixe o TFSPT. Download da versão 2008, mas já existe um Beta disponível para a versão 2010. Se você quizer testar, pode fazê-lo clicando aqui. Depois de baixar mande instalar, só fique atento para ver se o Windows Shell Extension será incluído na sua instalação.
Depois de instalar, você pode acessar o Windows Explorer e procurar uma pasta qualquer que esteja vinculada a um Workspace do TFS. Clicanco com o botão direito do mouse nestas pastas, você verá um menu como este:
Muito prático! No melhor estilo SVN. Esse tipo de recurso é muito útil quando estamos trabalhando por exemplo num processo de documentação, gerando vários arquivos binários do Visio, Word, Imagens, etc... arquivos que não geramos no Visual Studio.
Grande abraço a todos,
e até a próxima.