quarta-feira, 24 de fevereiro de 2010

Manual Ruby - Tipos de Dados e Objetos em Ruby

Toda linguagem de programação utiliza dados como sua principal matéria prima. Saber manipulá-los é básico para qualquer programador. A seguir os tipos e formas de manipulação de dados e objetos em Ruby.

Números

Tipos de Dados Numéricos Primitivos


Integer == Inteiro == int
  • Sequencias simples de números
  • 0
  • 123
  • 12345678900987654

Float == Flutuante == float
  • Um sinal (a famosa vírgula, por exemplo) seguido de um ou mais dígitos
  • 0.0
  • 3,14
  • -3.14
  • 6.02e23
  • 1_000_000.01
  • ERRADO -> .1
  • CORRETO -> 0.1

Double == Complexo == double
  • Um Float evoluído, mais poderoso e robusto
  1. Decimal == Decimal == decimal
  2. Rational == Racional == Rational

Tipos de Dados Numéricos Secundários

  1. Fixnum (valores de até 31 bits, 0000000000000000000000000000000 ... por exemplo)
  2. Bignum (32 ou mais bits)

Cada um desses tipos de dados são objetos em ruby. Aliás, tudo em ruby é um objeto. Isso siginifca que podemos invocar métodos para todos os componentes de um programa. por exemplo, ao declararmos ...

int i = 1

... podemos fazer coisas do tipo ...

1.class
1.parent

e assim por diante.

terça-feira, 23 de fevereiro de 2010

Manual Ruby - Introdução

Programar computadores é uma atividade comum no mundo das startups tecnológicas, sejam elas americanas, européias ou brasileiras. Para este fim, utilizamos linguagens de programação. Aqui na NextMind, ao tratar de programação de computadores, utilizaremos Ruby como base por um bom motivo. Ruby é uma linguagem de programação interpretada de origem japonesa criada por Yukihiro Matsumoto (a.k.a Matz). O sonho de Matz ao criar Ruby era tornar a programação de computadores divertida e principalmente, humana. Escrever códigos para pessoas e não apenas para máquinas é o seu lema. Por ser uma linguagem simples, porém, poderosa, utilizo-a em todos os meus projetos (http://www.setor9.com.br/). Por ser fluente em inglês não tenho grandes problemas para encontrar conteúdo, mas isso não é verdade para quem fala apenas português. Por isso estarei criando o Manual Ruby. Este manual abrigará os conceitos da linguagem e servirá como uma referência para programadores novatos e experientes. Baseado no livro A Linguagem De Programação Ruby. Mãos a obra !


Conteúdo do Manual
 
  • Tipos de Dados e Objetos
  • Expressões e Operadores
  • Declarações e Estruturas de Controle
  • Métodos, Procs, Lambdas e Closures
  • Classes e Módulos
  • Reflexão e Metaprogramação
  • Plataforma Ruby
  • O Ambiente do Ruby

domingo, 24 de janeiro de 2010

Dicas Para Startups E Pequenos Negócios

Muitas vezes procuramos dicas sobre como obter sucesso na difícil caminhada de criar uma startup. Sinceramente, não acredito em fórmulas mágicas e em receitas de bolo para fazer um negócio funcionar, pois cada negócio é único. Além disso, existem muitas formas de fazer as coisas, muitos caminhos para se seguir.

Mas apesar de serem únicos, os negócios possuem coisas em comum. Todos precisam vender, lucrar, gerar fluxo de caixa, conseguir mais clientes ... enfim. As dicas a seguir não devem ser tomadas ao pé da letra para todas as situações e negócios mas, sem dúvida, alguns itens poderão ser extremamente úteis em determinadas situações. As dicas podem servir tanto para startups quanto para pequenos negócios. A tradução livre para o português foi feita por mim. O texto original pode ser encontrado aqui.



Conselhos Para Startups Em Exatas TRÊS PALAVRAS:

Obs. Embora fosse possível fazer uma tradução aproximada com três palavras como no inglês, achei mais claro e legível traduzir utilizando mais palavras para deixar o texto mais completo para os não fluentes no idioma.

1. Watch Your Cash (Cuide De Seu dinheiro).
Parece óbvio mas não é. Muitos são excelentes programadores, criativos designers ou verdadeiros vendedores natos, mas na hora de controlar as finanças, não sabem como diferenciar um ativo de um passivo, lucro de fluxo de caixa, etc. Aqui na NextMind vamos bater muito nesta tecla. Não é atoa que ela encabeça a lista das cinquenta e tantas dicas.


2. Pick Founders Carefully (Escolha Sócios Com Cuidado).
Escolher bons sócios implica em escolher pessoas que você respeita, confia e admira. Além disso, ele(ou ela) precisa ser capaz de agregar valores diferentes dos seus ao negócio. Se você não tem habilidade para lidar com pessoas, é melhor que ele tenha. Se você não sabe como lidar com dinheiro, é melhor que ele saiba. E finalmente, lembre-se do conselho do Guy (Kawasaki): ao escolher um companheiro de trabalho, faça o teste do encontro no shopping. Imagine-se andando no shopping em um domingo ensolarado e de repente avista a pessoa (seu candidato a sócio) do outro lado do salão. Mas ele não vê você e começa a se afastar. O que você faz:

a. Vai atrás dele para trocar idéia.
b. Deixa ele ir embora, mas lamenta.
c. Agradece a Deus por ele ter ido embora sem te ver.

Se conseguir escolher a alternativa A para o sócio em questão, então é um bom começo. Mas se escolher a B ou C, é melhor ser realista e evitar o relacionamento. Afinal de contas, você não se casaria com uma mulher que ao virar as costas, não te desperta vontade de ir atrás. Quanto mais pegar para sócio ! (Lembre-se, você passará mais tempo com seu sócio do que com sua mulher!).


3. Hire Generalists Early(Contrate Generalistas No Começo).
Sem dúvida, uma das melhores dicas. Em um pequeno negócio, é praticamente impossível contratar muitos funcionários (aliás, é exatamente por isso que ele é pequeno!). Então você não vai querer contratar um cara que é extremamente foda no Design, mas não pode nem ir ao banco pagar uma conta (ou porque acha que é um trabalho inferior ou porque não sabe como fazer mesmo). O que você quer no começo são guerreiros prontos para encarar qualquer desafio.


4. Hire Specialists Later(Contrate Especialistas Depois).
Completanto a dica anterior, depois que tiver um negócio nas mãos (com fluxo de caixa de verdade, vendas de verdade e clientes de verdade), você começa a contratar os especialistas.


5. Invest In Culture(Invista Em Cultura).
Brilhante. Para seus clientes, qual a diferença de sua empresa para as outras? Resposta fácil! Os produtos e o serviço de atendimento maravilhoso! Mas e para seus funcionários e parceiros? A cultura é um conjunto de práticas e ações que expressam uma filosofia e é ela quem vai lhe ajudar a fazer melhores contratações. Não é oferecer cafezinho ou video-game apenas por oferecer, mas porque sua empresa acredita que seus funcionários merecem estar felizes enquanto trabalham. Assunto para muitos posts futuros.


6. Avoid Tempting Distractions(Evite As Atraentes Distrações)
Você está desenvolvendo um software de controle financeiro para pequenas empresas e de repente aparece alguem na porta pedindo que vocês façam um programa de controle de estoque via web. A proposta parece atraente mas vai tirar o foco do negócio ... esqueça!


7.Support Customers Maniacally(Ofereça Suporte A Seus Clientes Como Um Maníaco).


8.Avoid Business Plans (Evite Planos De Negócio).
Levei anos para aprender esta lição e estarei sem dúvida falando mais sobre o assunto em posts futuros. Basciamente ... comece fazendo e não falando(ou escrevendo).


9.Write A Blog(Tenha Um Blog).
A finalidade do Blog é oferecer a seus clientes e parceiros MAIS INFORMAÇÕES sobre o negócio. Falar sobre como determinado produto foi desenvolvido, tecnologias utilizadas, enfim, criar uma relação mais informal com seus clientes e não-clientes.


10.Never Fudge Numbers(Nunca Falsifique Os Números).
Em poucas palavras: Não Se Iluda e Não Iluda Os Outros.


Continua ...

sábado, 23 de janeiro de 2010

Idéias Para Startups



Todo empreendedor está constantemente em busca de novas idéias, especialmente aqueles que trabalham com tecnologia. Durante meses procurei por idéias lucrativas que pudessem dar origem a um novo negócio. A partir disto surgiu a Setor 9 (minha atual startup). Mas para chegar a idéia por trás da Setor 9, não bastou conhecer o mercado e os problemas, precisei fazer um verdadeiro exercício de auto conhecimento. A seguir compartilho com vocês meu caminho para encontrar boas idéias para Startups.

Vamos começar definindo o que é uma idéia de negócio. Ou melhor, vamos definir o que é uma má idéia e o que é uma boa idéia de negócio. Existem duas formas de se medir o sucesso de uma startup: pelo número de usuários e pela quantidade de dinheiro gerada para os fundadores. Então, uma boa idéia seria aquela capaz de prover bilhões de dólares ou encantar milhões de usuários, correto ? Mais ou menos.

Existe uma grande diferença entre aquilo que somos capazes de IMAGINAR e aquilo que somos capazes de REALIZAR. O problema é que uma startup é 99% sobre fazer e apenas 1% sobre pensar. Não que não seja necessário pensar para se obter sucesso. Mas o tempo e a energia que gastamos executando é muito maior do que a energia gasta na poltrona da sala ou na mesa da cozinha imaginando como seria ótimo ser o dono do próximo Twitter. Da próxima vez que for procurar uma idéia de negócio, utilize esta regra: para cada 1% que você imaginar, lembre-se que existirão outros 99% a serem realizados.

Então ... para se ter uma boa idéia, não se pode pensar apenas em como seria algo depois de pronto. É preciso pensar neste algo antes, durante e depois de pronto. Só porque você percebeu depois de muito refletir que uma empresa capaz de vender e entregar pela internet mais rápido que o MercadoLivre e o Submarino faria muito sucesso, não significa que tenha encontrado uma boa idéia ... PARA VOCÊ.

Uma boa idéia implica em, primeiramente, conhecer a sí mesmo. Você precisa saber o que é capaz e também o que NÃO é capaz de realizar. Se você é programador, então idéias que envolvam implementação de código talvez sejam mais realistas para você. Mas se você não é um bom designer, talvez não seja uma boa idéia tentar concorrer com a Apple. Claro que você pode contratar mão de obra especializada ou encontrar sócios que cubram suas deficiências. Mas para isso, você terá que conhecer seus limites. A verdade é que não existem idéias boas ou ruins, o que existem são PESSOAS boas o bastante para fazer acontecer e PESSOAS inadequadas para o desafio. Não comece procurando no Google por "idéias de negócio" (fiz muito isso). Comece escrevendo em um caderno suas vitórias, fracassos e principalmente, aquilo que você é capaz de realizar HOJE. Após conhecer um pouco a sí mesmo, você estará mais apto a encontrar uma boa idéia para VOCÊ.


A seguir uma série de idéias que encontrei na internet ao longo dos últimos meses que acredito serem interessantes para qualquer mercado, inclusive o brasileiro. Nenhuma idéia é 100% original e muitas já possuem startups e investidores fazendo acontecer, mas com certeza ainda existe espaço em todas elas para novas e diferentes iniciativas, especialmente no Brasil:

1 - Busca Local de Informações: Atualmente a busca por informações é generalizada e filtrada por categorias básicas. De forma simples, quando você procura algo no Google, não especifica a cidade ou região que deseja, muito menos a rua. Então os termos de busca são limitados a possibilidades globais (que obviamente não são poucas). Mas pense como seria interessante buscar por concessionárias de locação de veículos na cidade de Aparecida do Norte, por exemplo. Melhor ainda seria se fosse possível veicular anúncios por região, cidade e até bairros e ruas. O retorno seria muito maior para os anúnciantes e provavelmente seria mais interessante ao usuário receber ofertas de restaurantes na sua cidade.

Exemplo de Startup do Ramo: YELP
Principais Habilidades Necessárias: Web Savvy, Programação Web, Marketing No Mundo Real, Banco de Dados


2 - Software Empresarial 2.0: Embora a Web 2.0 exista há muitos anos para nós usuários através de aplicações como Facebook, Twitter, Skype e outros, empresas do mundo inteiro ainda vivem de tecnologias baseadas na Web de texto, sem colaboração e compartilhamento. Existe uma necessidade urgente de levar os conceitos e soluções da Web 2.0 para as empresas de todo porte, especialmente as pequenas. Soluções neste sentido ja existem, mas ainda há muito a ser feito, principalmente em termos de softwares de administração empresarial e banco de dados.

Exemplo de Startups do Ramo: Google Docs
Principais Habilidades Necessárias: Experiência Empresarial, Conhecimento De Negócios, Programação Web, Banco de Dados, Vendas Diretas, Contatos Comerciais


3 - Sistemas de Atendimento On-Line para Empresas: No mundo todo, o atendimento a clientes deixa mais e mais a desejar. É verdade que existe muita incompetência das empresas em atender milhões de usuário com um mínimo de respeito (vide Telefônica), mas a tecnologia também não anda fazendo sua parte. Ainda não existem ferramentas confiáveis baseadas na web para atendimento ao cliente. Chats e VOIP não são uma opção viável, uma vez que funcionários continuam sendo necessários para o atendimento. Ao invés de colocar secretárias auomáticas e bots para atendendimento por telefone fixo, por que não desenvolver sofisticadas ferramentas de atendimento via web que utilizem dados para auxiliar o usuário ?

Exemplo de Startups do Ramo: Desconheço
Principais Habilidades Necessárias: Programação Web, Inteligência Artificial, Banco De Dados, Contatos Comerciais, Marketing


4 -  Comércio pela Web: Empresas como MercadoLivre e Submarino fazem um bom trabalho em termos de comércio eletrônico, mas ainda há muito a ser feito. Os sistemas de comércio eletrônico dessas empresas, acreditem, são baseados em uma web antiga (a maioria dos ecommerces de hoje foi fundada há mais de 10 anos!). É preciso inovar e oferecer ao usuário mais informações para a tomada de decisão, integrar compradores e criar comunidades online capazes de dar voz para o consumidor, coisa que nunca foi possível no mundo real.

Exemplo de de Startups do Ramo: Desconheço
Principais Habilidades Necessárias: Experiência com Ecommerce, Conhecimentos Profundos de Web 2.0, Web Savvy e Programação Web.


5 - WebApps para Escritórios: Os softwares mais vendidos do mundo são aqueles que compõem o pacote Microsoft Office, entre eles Word e Excel. Bilhões de Dólares são feitos todos os anos com esses aplicativos. Isso mostra que soluções de qualidade para este mercado são muito bem premiadas, pois é um mercado disposto a pagar (coisa rara na web nos dias de hoje). Mas eu não recomendaria tentar construir réplicas do Word e Excel na web. Esses aplicativos possuem anos, ou melhor, décadas de experiência e são reis em seus domínios. Ao invés disto, seria interessante construir soluções com recursos possíveis apenas pela web, como compartilhamento em tempo real, integração com redes sociais e armazenamento on-line.

Exemplo de Startups do Ramo: Zoho
Principais Habilidades Necessárias: Programação Web, Design e WebSavvy


6 - Publicidade Online de Qualidade: O formato da propaganda online de hoje (leia-se ads) é sem dúvida algo extremamente primitivo e desagradável. O que temos hoje é um tipo de propaganda muito próxima daquelas exibidas em TVs e jornais, invasivas, não solicitadas e chatas. Precisamos de soluções melhores ... muito melhores. Soluções que sejam mais a cara do cliente e menos a cara da empresa. Empresas como Google dizem ter encontrado o Santo Graal com ferramentas de propaganda como Google Ads, mas a verdade é que tudo isso é apenas a ponta do iceberg. Precisamos de ferramentas que nos ajudem a encontrar aquilo que queremos, da forma que desejamos e na hora que precisamos. Não precisamos de anúncios que não nos interessam. Uma possível ferramenta seria um tipo de "babá das compras".  Você diz a ela que produtos deseja adquirir no momento, na semana, no mês ou no ano. Além disso poderia dizer se não gostaria de adquirir nada também. Assim a medida que navegasse, receberia ads e propagandas relacionadas apenas a ofertas de produtos de seu interesse e dentro do espaço de tempo escolhido por você. O poder da propaganda precisa estar nas mão da audiência e não nas mãos do anunciante.

Exemplo de Startups do Ramo: Desconheço (afinal, todos temem o grande GOOGLE)
Principais Habilidades Necessárias: Um par de bagos (guts), Programação Web, Marketing, WebSavvy


7 - Sistemas Online De Ensino: Qual era a principal forma de obtenção de conhecimento do Século Vinte? A reposta certa, sem dúvida, seria a Escola. Mas e no século 21 ? No mínimo um sonoro "Não Sei!". Com o advento da internet e a facilidade de se encontrar informações, a forma de se aprender evoluiu. Hoje um aluno experto ao ver um tema em sala de aula, rapidamente procura se inteirar mais através de recursos disponíveis na Web. Muitos não compram mais livros, utilizam apenas ebooks e textos disponíveis na internet para estudar. Este é um campo vasto. Muitas idéias podem surgir daqui. Por exemplo, se fosse possível filmar as aulas de uma faculdade descente, como USP e retransmitir em tempo real via internet, quantos milhões de Brasileiros poderiam estudar sem necessariamente terem que ingressar fisicamente na universidade ? Para o professor pouca coisa mudaria, tudo que ele teria que fazer é responder às perguntas que desejasse via mensagens de texto ou qualquer outra forma. Todo um ecosistema de ensino remoto poderia ser criado, com materiais de ensino a altura e professores treinados para lecionar via Web. As universidades poderiam lucrar HORRORES cobrando uma pequena taxa mensal do aluno, ao mesmo tempo que criariam um país muito melhor.

Outras possibilidades seriam oferecer aulas de reforço para crianças pela internet e simulados online em tempo real para vestibulandos, com dicas de professores e correções completas.

Exemplo de Startups do Ramo: Desconheço (nem o Google está nessa!)
Principais Habilidades Necessárias: Fortes Contatos no Meio Acadêmico, Programação Web, Banco de Dados


8 - Softwares de Controle Financeiro Para Pessoas e Pequenas Empresas: Educação financeira é um tema árido, mal tratado e muitas vezes desvalorizado em países subdesenvolvidos. Uma iniciativa bem vinda seria desenvolver softwares com base na web capazes de ajudar pessoas e pequenos empresários a organizarem suas finanças de forma simples e clara. Além de organizar, permitir transações como pagamento de contas e transferências bancárias. Controles Contábeis seriam uma atualização bem vinda para pequenas empresas.

Exemplo de Startups do Ramo: Mint
Principais Habilidades Necessárias: Educação Financeira, Conhecimentos Contábeis, Contatos No Mundo Bancário, WebSavvy, Programação e Design para Web.


9 - Soluções de Hardware Integradas Com Software: Uma área completamente desconhecida para a maioria dos profissionais, que geralmente se posicionam de um lado ou de outro. Mas as poucas empresas que ousaram unir os dois mundos (Ipod + Itunes) foram recompensadas. Precisamos de novas soluções em nossas salas de star e cozinhas, aparelhos capazes de se integrar com nossos PCs, MP3 e Celulares afim de oferecer mais opções. Por que a TV não possui um software de navegação na web ? Por que aparelhos de som não são capazes de baixar suas próprias músicas ? Por que o fogão da cozinha não mostra o nível do gás e faz um pedido automaticamente quando os níveis do botijão atual estão baixos ? Essa área onde o hardware se integra ao software (e a web) é extremamente vasta e mal explorada, basta parar para pensar o que poderia ser feito se tivessemos mais startups integrando a web com nossos utensílios do dia a dia para tornarmos a mais louca ficção científica em realidade.

Exemplo de Startups do Ramo: Desconheço (a Apple não é uma Startup)
Principais Habilidades Necessárias: Conhecimentos de Produção, Design e Desenvolvimento Industrial, Programação Comum, Programação Web, Hardware


10 - Soluções Contra o Spam: Se o bem do século foi a internet, podemos dizer que o mal foi o spam (não diria nem mais spam, mas FLOOD). 80% de todos os emails enviados em 2009 foram ... spam ! Nossas caixas de email estão cheias de mensagens não solicitadas. Precisamos de novas formas de comunicação com as mesmas vantagens do email (segurança e privacidade) porém que sejam capazes de proteger o usuário da quantidade absurda de mensagens indevidas que recebemos. Uma possível solução seria um sistema de email onde apenas pessoas convidadas poderiam lhe enviar mensagens.

Exemplo de Startups do Ramo: Google Wave (dizem, mas não parece).
Principais Habilidades Necessárias: Programação Web, Servidores, Banco de Dados, WebSavvy

A lista de idéias continua na Parte 2. Mas vou voltar e bater na tecla de que não adianta escolher uma idéia bonitinha sem antes estar preparado para executá-la. Em cada idéia coloquei as habilidades que acredito serem indispensáveis para alguém que deseje empreender no ramo. Mas certamente muito mais preparo será necessário. Lembre-se que para começar não é necessário mais do que boa vontade, mas você precisa saber onde está, para ser realista e focar os pontos certos e não esperar as coisas erradas na hora errada.

O conselho final que dou é siga o coração. Procure implementar idéias que lhe parecem atraentes. Por exemplo, a idéia de busca local me atrai mais do que a idéia de criar um sistema de ensino online. Então ... vou me preparar para a idéia que me atrai mais, mesmo que ela pareça mais difícil hoje.

Suas idéias serão tão boas quanto a sua capacidade de executá-las. Foque no processo e não no fim. Faça o que tem que ser feito e as coisas acontecerão com o tempo.

domingo, 10 de janeiro de 2010

Startups Vs Pequenos Negócios


Google 1999




Google 2009


Nos EUA e na Europa, a cultura de startups é extremamente rica, porém em países subdesenvolvidos como Brasil, falar em startups é como falar grego. Como este blog trata de Startups e Pequenos Negócios, é importante ressaltar a diferença entre um e outro de forma clara para leigos. Dito de forma simples, uma startup é uma iniciativa de um grupo de empreendedores com o objetivo de criar um negócio de sucesso. Um pequeno negócio é apenas isto ... um pequeno negócio. Alguns exemplos.

  • A padaria da esquina de sua casa ... é um pequeno negócio, e provavelmente vai continuar assim para sempre.

  • Em 2004, o Twitter era uma startup. Veja o Twitter hoje.

  • Em 1999 o Google era uma startup. Veja o Google hoje.

  • Muitos supermercados em 1999 eram pequenos. Quantos deles ainda continuam pequenos ?



Pequeno Negócio

A realidade de uma startup é muito diferente da realidade de um pequeno negócio. Uma não é necessariamente melhor nem pior do que outra, mas definitivamente são diferentes.

A principal preocupação em um pequeno negócio é com o fluxo de caixa e os lucros. É muito importante para uma pequena empresa ter controles completos de custos, folha de pagamento, registros precisos de despesas e etc, afinal é preciso saber quanto se gasta e quanto é preciso faturar para continuar existindo. O sucesso seria bem vindo, mas não é o grande foco.

Em uma Startup os custos são mínimos e as vezes inexistentes. Muitas vezes não existem receitas no início, mas Capital de Investidores. A principal preocupação em uma startup é com escalabilidade (capacidade de expandir a estrutura atual de acordo com a necessidade) e o número de usuários. Por ter custos extremamente reduzidos, uma startup que obter um grande número de usuários e conseguir atendê-los bem, conseguirá ter sucesso, diferente de um pequeno negócio, que muitas vezes não está preparado para atender uma demanda radicalmente grande.



Sistema Com Baixa Capacidade de Escalabilidade


Mas se tivesse que definir em apenas uma palavra a principal diferença entre Startups e Pequenos Negócios, eu diria: "Mentalidade". Definitivamente a mentalidade de alguém que toca um pequeno negócio com o objetivo de ter lucros e alguém que funda uma startup para obter sucesso, é oposta. De forma geral, Pequenos Negócios são para pessoas que gostariam de enrriquecer, mas isto não é uma prioridade para elas. Já Startups são para pessoas que focam em enrriquecer muito ... e muito rápido. Os riscos são outro divisor de águas aqui. Pequenos negócios, embora alardeado por especialistas e órgãos do governo, não são tão arriscados quanto parecem. Muitos duram alguns anos, mesmo quando não dão lucro. Startups por outro lado são extremamente arriscadas. Poucas duram mais que seis meses e muitas jamais conseguirão faturar (quem dirá lucrar) um tostão.

Essas seriam as diferenças mais óbvias e gerais. Mas existem muitas outras. Neste blog, iremos fornecer conteúdo sobre ambos os mundos: o mundo das Startups e o mundo dos Pequenos Negócios, pois é de extrema importância para empreendedores de startups terem os conhecimentos e habilidades necessárias para se tocar um pequeno negócio.