Upload
osvaldo-santana
View
2.143
Download
3
Embed Size (px)
DESCRIPTION
Um guia para o empreendedorismo digital
Citation preview
Osvaldo Santana Neto• https://osantana.me
• Python e Django
• Empreendedor em "modo de espera”
• Side Projects
• Bootstrapping
• Titans Solutions
• Empresa de SP
• Trabalho Remoto
Você precisará de...
• Uma idéia válida para executar
• Algum dinheiro (~R$100)
• E tempo para trabalhar no projeto
Ideias• Quando esbarrar em um problema
anote em um papel
• Revisite o problema proponha soluções (ideias)
• Faça uma planilha para classificar as ideias
• Escolha uma e valide (Business Model Canvas e entrevistas)
• Ideias simples são mais poderosas
• Não se distraia com ideias novas. Anote-as.
Ideia & Execução• Ideias são um multiplicador de
valor da execução
• A execução é que tem valor
• Ideia boa e bem executada é o melhor cenário
• http://sivers.org/multiply
• Validação de ideias
• Conheça o mercado
• Tenha "paixão"
Palavras Chaves• Bootstrapping
• Side-Project
• Passive Income
• Cuidado com picaretagem!
• Minimum Viable Product
• Cuidado com:
• Eventos de startup, busca por investimento/financiamento, …
Execução Passo a Passo• Aprenda Python & Django 😄
• Escolha um nome
• Registre um domínio (~R$30)
• Escolha uma hospedagem (grátis~$9/mês)
• Quickstartup (grátis~$49)
• Tráfego (grátis~infinito)
• Feedback
Python & Django• https://osantana.me/pydjango
• Python - Linguagem
• Guido van Rossum
• Lançada em 1989
• Monty Python
• Django - Framework Web
• Jacob K. Moss & Adrian Holovaty
• Lançado em 2003
• Django Reinhardt
Python• Linguagem de uso geral
• Web, Mobile, Desktop, …
• Multiplataforma
• Unix, Linux, OS X, e até a porcaria do Windows
• OOP
• Suporte a código procedural e funcional
• Interpretada (com compilação transparente de bytecode)
• Linguagem aberta / Open Source
#!/usr/bin/env python3# coding: utf-8# programa1.py - Primeiro programa
"""Importa o módulo random e sorteiaum número inteiro entre 1 e 100"""
import random
numero = random.randint(1, 100)escolha = 0tentativas = 0
print("Acerte o número que sorteei com o menor número de tentativas.")
while escolha != numero: escolha = int(input("Digite um número inteiro entre 1 e 100: ")) tentativas += 1
if escolha < numero: print("O número %s é menor que o sorteado." % (escolha,)) elif escolha > numero: print("O número %s é maior que o sorteado." % (escolha,))
print("Parabéns! Você acertou o número com %s tentativas." % (tentativas,))
#!/usr/bin/env python3# coding: utf-8
class No(object): def __init__(self, questao=None, sim=None, nao=None): self._sim = sim self._nao = nao self._questao = questao
def start(self): if self.ask("Esse animal {}".format(self._questao), sn=True): self._sim = self._sim.start() else: self._nao = self._nao.start() return self
def ask(self, questao, sn=False): resposta = "" while resposta == "": resposta = input("{}? {}".format(questao, "(s/n) " if sn else "")) return resposta if not sn else (resposta[0].lower() == "s")
class Animal(No): def __init__(self, nome): super(Animal, self).__init__(nome) self._nome = nome
def start(self): if not self.ask("É um(a) {}".format(self._nome), sn=True): animal = self.ask("Qual é o animal") questao = self.ask("O que um {} faz que {} não faz".format(animal, self._nome)) return No(questao, Animal(animal), self)
print("Acertei!") return self
def main(): raiz = No("vive na água", Animal("baleia"), Animal("macaco"))
while True: raiz.start() if not raiz.ask("Jogar novamente", sn=True): break
if __name__ == '__main__': main()
$ python3 animais.pyEsse animal vive na água? (s/n) nÉ um(a) macaco? (s/n) nQual é o animal? cachorroO que um cachorro faz que macaco não faz? é domesticadoJogar novamente? (s/n) sEsse animal vive na água? (s/n) nEsse animal é domesticado? (s/n) sÉ um(a) cachorro? (s/n) sAcertei!
Django• Framework Web Ágil
• DRY - Don’t Repeat Yourself
• MVC ou MTV (Model/View/Controller, Model/Template/View)
• ORM ➡️ Banco de Dados Relacional
• Postgres, MySQL, Oracle, …
• Instagram, Pinterest, Disqus, …
# coding: utf-8
from django.db import modelsfrom django.core.urlresolvers import reversefrom django.utils.translation import ugettext_lazy as _
CONTACT_STATUS = ( ("N", _("New")), ("O", _("Ongoing")), ("R", _("Resolved")), ("C", _("Closed")), ("I", _("Invalid")),)
class Contact(models.Model): status = models.CharField(_("status"), max_length=1, choices=CONTACT_STATUS, default="N") created_at = models.DateTimeField(_("created at"), auto_now_add=True) updated_at = models.DateTimeField(_("updated at"), auto_now=True) name = models.CharField(_("name"), max_length=255) email = models.EmailField(_("email"), max_length=255) phone = models.CharField(_("phone"), max_length=100, blank=True) message = models.TextField(_("message"))
@property def admin_url(self): return reverse("admin:contacts_contact_change", args=(self.pk,))
# coding: utf-8
from django.contrib import admin
from .models import Contact
class ContactAdmin(admin.ModelAdmin): list_display = ('updated_at', 'name', 'email', 'phone', 'status') list_display_links = ('updated_at', 'name', 'email', 'phone') list_editable = ("status",) list_filter = ('status',) search_fields = ('name', 'email') ordering = ("-updated_at",)
admin.site.register(Contact, ContactAdmin)
Ação!• Escolha um nome (domínio livre)
• Registre um domínio
• http://registro.br/ ouhttps://gandi.net
• Escolha uma hospedagem
• Amazon AWS (grátis 1 ano)
• Heroku (plano básico grátis)
• DigitalOcean ($5/mês)
• http://j.mp/vpsdigi
• Outras alternativas mais baratas!
Marketing• Launch
• Feedback
• Analytics
• Interação
• Iterate & Pivot
• Growth Hacking
• Sales Pipeline (B2B)