Diego Santos

Vocês anseiam pelo dia em que homens serão homens e escreverão seus próprios devices drivers?

10 Livros para entender computação julho 30, 2008

Filed under: Miscellaneous — diegosantos @ 5:06 pm
Tags:

Estava dando uma olhada no Planet Python e achei um post do Marcos Daniel sobre “como aprender computação”, ele cita 10 livros que o ajudou nesse processo. Particularmente achei todos ótimos livros.

1 – Gödel, Escher, Bach (Hofstadter): Eu começaria com o GEB, por dois motivos. O primeiro é que ele é um ótimo reality check: se você não gostar do GEB, então mude de área, porque computação não é a sua praia 🙂 O segundo motivo é que esse livro tem uma excelente introdução à lógica (proposicionalde predicados), que é a ferramenta básica onde você constrói a ciência da computação.

2 – Concrete Mathematics (Knuth): Você não precisa saber matemática para programar, mas se você quiser ser um bom programador, então matemática é essencial. O Concrete tem todo o básico que você precisa pra fazer análises de complexidade computacional, e tudo escrito de maneira extremamente bem-humorada.

3 – Algorithms in C++ (Sedgewick): Se você já sabe lógica e matemática, então agora pode partir pro estudo de algoritmos. O Sedgewick tem todos os algoritmos básicos, e é uma leitura bem leve: se você está começando com algoritmos agora, esse precisa ser o seu primeiro livro. Ele não vai muito fundo em nenhum tópico, mas isso é compensado pela extrema didática nos tópicos. O livro ainda tem código exemplo pra todos os algoritmos, e várias edições, uma pra cada linguagem (eu sei que tem, pelo menos, C, C++, Java e Pascal).

4 – Introduction to Algorithms (Cormen): Os algoritmos que você aprendeu no Sedgewick, você vai estudar em detalhes no Cormen. Esse livro é extremamente formal, e talvez por isso é o livro-texto usado nos cursos de computaçao do MIT. Ele também cobre algoritmos mais avançados, que o Sedgewick apenas cita (por exemplo, Fibonacci Heap)


5 – The Art of Computer Programming (Knuth): O tAoCP está para o Cormen assim como o Cormen está pro Segdewick, aqui você vai dissecar os algoritmos até o último bit deles. Além de ser uma coleção excelente, a encadernação é muito bonita (mas não se engane, ele fica ótimo na prateleira, mas melhor ainda na sua cabeça).


6 – Effective C++ (Meyers): Agora que você sabe os algoritmos, precisa de uma linguagem para programá-los. Pra falar a verdade, a escolha de linguagem nem importa tanto assim, mas se você escolher uma, aprenda-a tão bem quanto possível. Eu escolhi C++, e esse livro do Meyers é o que diferencia as crianças dos adultos (especialmente para aquelas horas quando você cria uma classe sem destrutor virtual e não sabe por que a memória está vazando).

7 – Effective STL (Meyers): Já teve uma época em que eu não gostava de C++, mas isso é porque eu sou velho o suficiente pra ter mexido em C++ antes que os compiladores tivessem templates. Com templates a linguagem fica muito mais atraente, e esse é o livro que vai te ensinar a dominar a STL.

8 – The Practice of Programming (Kernighan, Pike): Se você leu tudo até agora, então você já é um programador muito bom na teoria. Na prática, entretanto, tem um monte de skills que ainda faltam. Nesse livro você aprende sobre as coisas que usualmente não se aprende na escola: debugging, otimização, unit testing, documentação.

9 – Programming Pearls (Bentley): Com os livros lidos até agora, você já deve ser um excelente programador. O passo final é passar de programador para um true hacker, e esse é um passo que não requer só conhecimento, você também precisa de manha, criatividade e insight. Eu não sei se dá pra ensinar essas coisas, mas esse livro certamente é o que chega mais próximo disso.

10 – The Mythical Man-Month (Brooks): Depois de ler todos os livros acima você estará próximo do nirvana, mas pra atingir o zen da programação de verdade, é preciso lembrar que projetos não precisam só de computadores, precisam de pessoas também. O Mythical Man-Month é um livro de gerência de projetos de software escrito em 1975, mas é surpreendente como ele continua atual. A tecnologia avança, mas as pessoas continuam as mesmas 🙂

É claro que pra manter uma lista com só dez itens, muita coisa boa fica de fora. Mas a lista acima tem um mérito: foi com esses livros que eu aprendi computação de verdade (vale lembrar que eu sou autodidata, minha graduação foi em engenharia elétrica, e eu quase não tive computação em aulas). Se funcionou pra mim, pode ser que funcione pra você também 🙂 .”

Anúncios
 

iotop

Filed under: Fedora — diegosantos @ 12:57 pm
Tags:

Para quem já usou o Windows uma vez na vida e se lembram do crtl+alt+del, o famoso gerenciador de tarefas, deve sentir um pouco sua falta no Fedora, não pelo travamento, mas sim por as vezes não saber como visualizar quais tarefas estão sendo executada por cada usuário.

Para contornar isso irei ensinar como instalar e utilizar um programa chamado iotop:

“Este pequeño utilitario es para la tarea de determinar que procesos y usuarios están haciendo IO, muy al estilo del tradicional top para los procesos del sistema.” ( Proyecto Fedora)

instalação :

# yum install iotop

Ao se executar o programa :

# iotop

Temos as seguintes opções :

– o – Mostra somente os processos de I/O ao invés de todos os processos ou threads. Pode ser ativado ou desativadado pressionando o .

– b – Permite modo não interativo. Útil para registrar I/O atual. p-PID – pid = PID lista dos processos de acompanhar (por padrão todos). USUÁRIO

– u USUÁRIO —user=USUÁRIO lista de usuários para controlar (todos por default).

Um sreenshot.

Existe também o top presente na maioria das distros linx.

 

Um overview sobre o desenvolvimento para iphone julho 29, 2008

Filed under: Mobilidade — diegosantos @ 9:29 pm
Tags: ,

Esse texto, a alguns outros que virão, é a tradução do centro de desenvolvimento para iphone do qual faço parte.

extraído de : http://developer.apple.com/iphone/gettingstarted/docs/iphoneosoverview.action

O iPhone OS inclui sistema operacional e tecnologias que você pode usar para executar aplicativos nativamente em iPhone e iPod touch . Ainda que compartilhe uma herança comum a muitas tecnologias com o Mac OS X, O iPhone OS foi concebido para satisfazer as necessidades de um ambiente móvel, onde as necessidades do usuário são um pouco diferentes. Os desenvolvedores do Mac OS X irão encontrar muitas tecnologias familiar, mas eles podem também encontrar tecnologias que estão disponíveis apenas no sistema operacional do iPhone sistema operacional, tais como a interface Multi-Touch e o acelerómetro.

O Kit de desenvolvimento para iPhone (iPhone SDK) contém o código, a informação, e as ferramentas que você precisa para desenvolver, testar, executar, depurar e aplicações para sincronizar com o iPhone OS. O ferramentas do Xcode foram atualizados para apoiar o desenvolvimento do iPhone OS. Para além de constituir a base de edição, compilação, depuração e de ambiente para o seu código, Xcode prevê também o ponto de lançamento para testar seus aplicativos em um iPod ou iPhone touch. Xcode também lhe permite executar aplicativos em um simulador de iPhone , uma plataforma que imita a base do iPhone OS em ambiente local no seu computador Macintosh.

Este artigo fornece uma visão geral de alto nível das características básicas encontradas no iPhone OS, para ajudar a orientá-lo na plataforma. Você encontrará outros artigos do iPhone Dev Center para ajudar a chegar até a velocidade mais rápida e para ajudá-lo a entender o processo básico para a criação de aplicativos para iPhone. Você deve usar esses artigos para ajudar a guiar o seu caminho para a aprendizagem da plataforma do iPhone OS.

Camadas de tecnologia do iPhone OS

No iPhone OS, o sistema de arquitetura e muitas das tecnologias são semelhantes aos encontrados no Mac OS X. O kernel do sistema operacional do iPhone é baseado em uma variante da mesma base Mach kernel que se encontra no Mac OS X. No topo desta kernel estão as camadas de serviços que são usados para executar aplicações na plataforma. A Figura mostra uma visão geral de alto nível dessas camadas.

Isto dá-lhe opções camadas quando se trata de implementar seu código. Por exemplo, as camadas núcleo do sistema operacional (Core OS) e o o Núcles dos Serviços (Core Services)  contém as interfaces fundamentais para iPhone OS, incluindo os utilizados para acessar aos arquivos, tipos de dados de baixo nível, serviços Bonjour, soquetes de rede e assim por diante. Essas interfaces são na sua maioria à base do C e incluem tecnologias como a Core Fundation, CFNetwork, SQLite, e acesso a POSIX threads e sockets UNIX entre outros.

Nas camadas superiores, você encontrará as mais avançadas tecnologias que utilizam uma mistura de interfaces baseadas em C e Objective-C. Por exemplo, a camada dos Meios de Comunicação Social (Media) contém as tecnologias fundamentais utilizados para apoiar desenho 2D e 3D, áudio e vídeo. Esta camada inclui as tecnologias baseadas em C o OpenGL ES, Quartz, e Core Audio. Contém também Core Animation, que é um avançado engine de animação baseado em Objetivo-C.

Na camada Cocoa Touch, a maior parte das tecnologias utiliza Objetivo-C. O framework dessa camada fornecer as infra-estruturas fundamentais utilizadas pela sua aplicação. Por exemplo, o frame provê suporte a orientação a objetos colecções, gerenciamento de arquivos, operações de rede, e mais. O framework UIKit prevê a infra-estrutura visual para sua aplicação, incluindo classes de janelas, pontos de vista, controles  e os controladores que gerenciam esses objetos. Outros frameworks deste nível permitem o acesso do usuário à informação e de contato e foto para o acelerômetros e outras características de hardware do dispositivo.

O ponto de partida para qualquer novo projecto é a camada Cocoa Touch , e o framework UIKit , em particular. Ao decidir quais tecnologias adicionais  utilizar, é recomendado que você comece com framework das camadas de nível superior e se apoiar nos framework das camadas mais baixas, conforme necessário. Os framework de nível superior torna mais fácil o suporte aos comportamenntos do sistema com menos esforço da sua parte. A única vez em que você deve descer para os framework de nível mais baixo é quando você deseja implementar um comportamento personalizado que não seja fornecida a um nível superior.

Para maiores detalhes das tecnologias do iPhone OS veja iPhone OS Programming Guide.

Escrevendo Código para iPhone OS

O iPhone SDK suporta a criação de orientada-gráficamente para os aplicativos que correm nativamente em iPhone OS. As aplicações que você criar pode residir no ecrã inicial do usuário, junto com os outros aplicativos de sistema, tais como fotos, previsão do tempo, e Relógio. Depois de serem lançados, com exceção do kernel e alguns daemons de baixo nível ,a sua aplicação é a única aplicação em execução no sistema. Embora executando, a sua aplicação ocupa todo o ecrã e é o foco de atenção do usuário. E quando o usuário apertar o botão Home, a sua aplicação sai do sistema exibe a tela Home novamente. Tendo o sistema é vantajoso para você mesmo, porque dá-lhe acesso total ao sistema de recursos subjacentes. Você pode tirar vantagem do espaço construído, em hardware, tais como os acelerómetros, câmera, gráficos e de hardware para executar apenas o seu código.

Devido à forma como os usuários interagem com o iPod e iPhone touch é fundamentalmente diferente da forma como os usuários interagem com o Mac OS X, a maneira de conceber as suas aplicações também devem ser diferentes. Em uma aplicação do iPhone, não há nenhuma noção de documento separado por janelas para exibir o conteúdo. Em vez disso, todos os dados da aplicação é exibida em uma única janela. Esta situação levou à criação de novos pontos de vista e controles que permitem que você possa apresentar os dados de sua aplicação de modo organizado. Além disso, muitos dos pontos de vista e controles padrão pode se comportar de forma ligeiramente diferente do que os seus homólogos do Mac OS X. A maior parte destas alterações devem ser transparentes, mas alguns podem exigir-lhe repensar a forma de organizar e apresentar os seus dados.

O modelo de tratamento de evento do iPhone SO representa também um importante ruptura em relação as aplicações desktop tradicionais. Em vez de se basear nos tradicionais eventos de mouse e teclado,  o iPhone OS introduz a idéia de “eventos de toque”. Um evento de toque pode ocorrer em qualquer altura e em combinação com um toque adicional ou mais eventos. Toques podem ser usado para detectar simples interações com o conteúdo, tais como a seleção ou arrastar os itens, ou eles podem ser usados para detectar gestos e interações complexas, tais como toque leve ou gestos para abrir ou fechar(utilizado, por exemplo, a zoom in e out nas aplicações de imagens).

Considerando a estrutura básica do seu aplicativo, você precisa pensar sobre o modo como os usuários vão realmente usá-lo. As aplicações do iPhone ser limpas, e focar no que o usuário precisa no momento. Lembre-se que os usuários que estão on-the-go querem obter a informação rapidamente e não gastar muito tempo procurando através de várias camadas de telas. Proporcionar um esquema simples que destaca as principais informações que o usuário precisa é importante. Para jogos divertidos e outros aplicativos, você também deve considerar a forma como os usuários podem querer interagir com o seu pedido e tirar partido das tecnologias, como os acelerômetros e câmera se for esse o caso.

À medida que você começar o desenvolvimento, os framework que pretende utilizar inicialmente estão nos framework UIKit e Foundation . Estes frameworks fornecem os principais serviços utilizados por todos as aplicações do iPhone. Para refinar sua aplicação, você deve investigar os outros frameworks do sistema para ver quais os serviços que oferecem. A documentação conceitual para cada um dos frameworks inclui links para materiais relevantes para ajudá-lo a aprender mais sobre como usar esse framework.

Para obter informações sobre os framework foundation e UIKit , veja Foundation Framework ReferenceUIKit Framework.
e

Onde começar

Criar simples aplicações que são executadas no iPhone OS é relativamente fácil com o projeto de construção de modelos fornecidos pela Xcode, mas criar aplicativos que fazem alguma coisa útil e agradável exige que você gaste algum tempo com leitura através da documentação disponível. No mínimo, você deve ter o tempo para ler as orientações dos artigos do iPhone Dev Center, que explorará as ferramentas e processos para a criação de aplicações.

Se você é completamente novo ao que diz respeito a iPhone OS e Mac OS X, ter tempo para compreender a concepção básica e padrões e das convenções iPhone OS é crítico para escrever código para a plataforma. Aplicações em iPhone OS funcionam melhor quando se tirar partido do poder fornecidos pelos frameworks . Se você passar algum tempo tentando trabalhar em torno do framework de comportamento básico, você poderá criar a sua aplicação muito mais difícil do que simplesmente a aprendizagem da utilização de padrões de projeto básico. As informações básicas que todos os desenvolvedores de iPhone está  Cocoa Fundamentals Guide. Este documento apresenta os princípios básicos da linguagem Objective-C e das convenções de programaçã e padrões utilizados por UIKit design e muitos outros frameworks do sistema.

Depois de compreender a base de convenções você usará para criar aplicações para o iPhone, pode  o  iPhone OS Programming Guide para detalhes específicos sobre o processo de desenvolvimento. Este livro oferece tarefa-chave de base conceitual e informações sobre como escrever aplicações para o iPhone, incluindo exemplos de como exibir uma interface de usuário, manipular eventos e tirar partido das características-chave do iPhone OS. Ele também descreve o processo global de desenvolvimento e explica como você usa o Xcode para construir e executar seus aplicativos.

Além de iPhone OS Programming Guide, você deve olhar também códigos de amostra disponíveis. Você também pode olhar os códigos disponíveis de aplicações iPhone OS que lhe mostram como usar as tecnologias disponíveis para criar aplicações para o mundo real. Você pode utilizar essas amostras como ponto de partida para as suas próprias aplicações ou você pode olhar para eles para saber mais sobre como usar recursos específicos.

O iPhone promete mudar todos os patamares do que é uma mobile, aliás ele já tem feito, muito ainda existe para ser feito e vale a pena aos techmaníacos ficarem atentos.

 

Fedora 10 Cambridge

Filed under: Fedora — diegosantos @ 12:59 pm
Tags:

O nome da versão do Fedora 10 foi divulgado na noite do dia 28/7 por Josh Boyer. A votação, que iniciou-se em 22/7, teve 1900 usuários elegíveis de voto e 390 cédulas válidas.

O nome da próxima versão do Fedora será Cambridge e foi escolhido dentre as opções abaixo e suas respectivas votações:

1. Cambridge 1547
2. Nile 1503
3. Farnsworth 1435
4. Water 1408
5. Nitrate 1295
6. Whiskey Run 1281
7. Mississippi 1145
8. Saltpetre 1076
9. Terror 953

Sendo assim, que venha o Fedora 10 Cambridge.

 

Linus Torvalds usa Fedora 9 julho 28, 2008

Filed under: Fedora — diegosantos @ 12:28 pm
Tags:

Olá, hoje pela manhã ao fazer a minha visita padrão ao site do Fedora Project, me deparo com uma notícia .

“Linus Torvalds usa Fedora 9”

Reproduzo aqui o post do Gomex no site :

“O pai do kernel Linux” em entrevista[1] para a simple talk respondeu algumas perguntas sobre o futuro o kernel, sua pequena desavença com Tanenbaum e a pergunta feita a todos entrevistados:
“Que distribuição Linux você usa?”

Linus responde :

Fedora 9

Por que? Ele mesmo responde:

“…tem mais a ver com o fato do Fedora ter tido um ótimo suporte para o PowerPC na época que eu usava,

então me acostumei com ele. Mas eu não ligo muito para a distribuição, contanto que torne fácil de instalar e manter o sistema atualizado.”

Ele ainda comenta que nunca utiilizou debian e outros, pois sempre achou um tanto complicado a sua instalação, mas relatou também que o sistema hoje provavelmente está mais simples, mas por comodidade continua a utilizar o Fedora.

É um enorme prazer saber que o Linus utiliza Fedora e ainda colabora em relatos de bugs. Isso é realmente gratificante.

Para todos aqueles usuários de Ubuntu, Debian, Mandriva, Slackware que não acreditam olhem o site do Simple Talk. Gente! Sem brigas, o mundo do software livre deve-se unir, mas que é bom saber que Linus usa Fedora isso é.

http://www.simple-talk.com/opinion/geek-of-the-week/linus-torvalds,-geek-of-the-week/

 

Trabalhando com Mysql em Python julho 27, 2008

Filed under: Python — diegosantos @ 11:37 pm
Tags: ,

Após alguns artigos falando sobre o básico da linguagem python, irei agora mostrar algo um pouco mais complexo e que será útil todas as vezes que precisarmos guardar os dados processados em nosso aplicativo em um banco de dados, nesse caso o Mysql.

Iremos precisar instalar um módulo “mysql-python, tente :

# yum -y install MySQL-python

Caso algo errado aconteça, tente utilizar o packageKit, se seu fedora for o Sulphur, digitando mysql-python.

Para Debian e derivados :

# apt-get install python-mysqldb

A interface python para mysql conhecida como MySQLdb é um módulo muito conhecido para a interação com banco de dados mysql em python. Após sua instalação vamos conhecer algumas funcões básicas para seu uso.

+ Conectar ao Servidor

pyCon = MySQLdb.connect(‘servidor’,’usuario’,’senha’)

+ Selecionando o Banco de Dados

pyCon.select_db(‘Banco de Dados’)

Para trabalharmos com o mysql em python precisamos criar um handle, uma espécie de cursor :

+ Criar ponteiro, cursor

pyCursor = pyCon.cursor()

+ Executar query SQL

pyCursor.execute(‘sql’);

Depois de termos executado uma query, podemos pegar seu valor de trê maneiras mais comuns e práticas :

+ Retorna uma linha apenas

pyResultOne = pyCursor.fetchone()

+ Retorna todas as linhas

pyResultAll = pyCursor.fetchall()

Podemos ainda retornar todas as linhas como um dicionario, tendo os nomes dos campos como indice :

pyResultDic = pyCursor.dicfetcall()

Agora uma classe em python para tratar o mysql :

arquivo : connect.py

#! /usr/bin/python

class connect:

def __init__(self, pyServer, pyUser, pyPass):

self.pyServer = pyServer

self.pyUser    = pyUser

self.pyPass    = pyPass

self.pyCon     =  MySQLdb(pyServer, pyUser, pyPass)

selft.Cursor    = selft.pyCon.cursor()

def execSql(self, sql):

self.pySql = self.pyCursor.execute(sql)

return self.pySql

def returnOne(self):

self.pyResultOne  = self.pyCursor.fetchone()

return self.pyResultOne

def returnAll(self):

self.pyReturnAll = self.pyCursor.fetchall()

return self.pyReturnAll

 

Desenvolvendo aplicações para Symbian OS S60

Filed under: Mobilidade — diegosantos @ 6:26 pm
Tags: ,

O Symbian OS é um sistema muito versátil permitindo desenvolver aplicações em diversas linguagens diferentes como Symbian C++, JavaME, C entre outras.

O C++ como linguagem nativa do sistema possibilita que aplicações escritas nesta linguagem obtenham acesso maior as APIs (Application Programming Interface) do sistema e desempenho superior se comparado a outras linguagens como Java.
Possibilidades.JPG
Fonte: Symbian Resources

Possibilidades

  • Symbian C++
  • Java ME
  • Python
  • Perl
  • Ruby
  • FlashLite

Symbian C++

Prós:

  • Acesso completo ao sistema de arquivos.
  • Inicialização rápida.
  • Aplicações funcionam em todos os dispositivos sem necessidades de porta-los.
  • Aplicações funcionam em background, foreground, invisíveis.
  • Conta com controles já definidos e padronizados(Grids, Listbox, Forms, etc).
  • IDE gratuíta.

Contras:

  • Requer um conhecimento aprofundado em C++.
  • Maior tempo de produção comparada com outras linguagens.

Java ME

Prós:

  • Grande potencial de mercado.
  • Funcionam em qualquer dispositivos com suporte a Java (apesar da necessidade de portabilidade).
  • Facilidade na elaboração do código.
  • IDE gratuíta.

Contras:

  • Aplicações não podem rodar em background.
  • Demora na inicialização.
  • Fragmentação.
  • Acesso limitado ao recursos do sistema.

Python

Prós:

  • Extensibilidade.
  • Open Source.
  • Fácil programação.
  • Pode ser programado *on-device*.

Contras:

  • Sem pré-instalação

FlashLite

Prós:

  • Grande potencial de marketing
  • Boa IDE para desenvolvimento
  • Fácil de programar

Contras:

  • IDE de alto custo ($700)
  • Limitações do Flash Lite 1.1