(38 revisões intermediárias por 3 usuários não estão sendo mostradas)
Linha 1: Linha 1:
* Nome do Projeto: Kodificando
* Nome do Projeto: Kodificando
= Componentes =
<br>
* Guilherme
<br>
= 5W2H =
<br>


== What ==
== What ==
Linha 14: Linha 23:
# Quais os conhecimentos básicos que devemos ter para se implementar este projeto?
# Quais os conhecimentos básicos que devemos ter para se implementar este projeto?
## Conhecimento sobre o assunto a ser tratado (Conceitos e termos Básicos de Computação).
## Conhecimento sobre o assunto a ser tratado (Conceitos e termos Básicos de Computação).
## Conhecimento nas linguagens PHP, Javascript e Python.
## Conhecimentos de Javascript e PHP/Python/Ruby
## Noções de HTML e CSS
## Noções de HTML e CSS.
<br>
<br>
# Quais soluções similares existem no mercado (Benchmarking)?
# Quais soluções similares existem no mercado (Benchmarking)?
Linha 22: Linha 31:
** Code.org: http://code.org/
** Code.org: http://code.org/
** Codeacademy: http://www.codecademy.com
** Codeacademy: http://www.codecademy.com
** Um similar brasileiro: http://codeclubbrasil.org/
** Páginas que podem vir a interessar:
** Páginas que podem vir a interessar:
** http://tryruby.org/levels/1/challenges/1 (Ruby Básico)
** http://tryruby.org/levels/1/challenges/1 (Ruby Básico)
** https://www.khanacademy.org/cs
** https://www.khanacademy.org/cs (Fundamentos de Programação)
** http://codehs.com/
** http://codehs.com/ (Abordagem mais simples)
** http://scratch.mit.edu/
** http://scratch.mit.edu/ (Abordagem mais simples)
** https://www.coursera.org/
** https://www.coursera.org/ (Site com cursos de várias universidades renomadas)
** Uma "alternativa" Brasileira: http://www.aprenderprogramar.com.br/
** Uma "alternativa" Brasileira: http://www.aprenderprogramar.com.br/
** Sobre hacking e segurança: https://www.hackthissite.org/
** Sobre hacking e segurança: https://www.hackthissite.org/
Linha 36: Linha 46:
== Why ==
== Why ==


# Porque é interessante desenvolver este projeto?
## É interessante porque, acima de tudo, esses conhecimentos não são tão difundidos, e atualmente, para os obter é necessário um estudo mais especializado sobre o assunto. Enquanto isso, a necessidade cresce cada vez mais, e o número de profissionais é cada vez menor comparando com a demanda.
##Algumas citações:
### "Todos nesse país deviam aprender como programar um computador porque isso te ensina a pensar" - Steve Jobs
### "Aprender a escrever programas faz sua mente crescer e te ajuda a pensar melhor, cria uma maneira de pensar que eu acredito que ajude em todas as áreas" - Bill Gates


# Porque é interessante desenvolver este projeto?
# Porque deve usar a tecnologia escolhida?
# Porque deve usar a tecnologia escolhida?
## Deve-se utilizar HTML e CSS para poder marcar melhor os componentes na página e uma linguagem de programação para que o aplicativo interaja de fato com o usuário, as principais opções são: Python Django, uma plataforma muito utilizada para aplicativos WEB que utiliza uma linguagem que vem crescendo cada vez mais - Ruby on Rails, outra plataforma também amplamente utilizada, inclusive por grandes aplicativos (Exemplo: Twitter), feita em uma linguagem um pouco mais antiga e um pouco mais consolidada no mercado. As duas plataformas são fundadas em conceitos e paradigmas que são importantes e consolidados, como:
### "Active Record Pattern" - que consiste em armazenar os dados em bancos de dados
### CVC ("Convention over configuration" - Convenção sobre configuração) - que visa ganhar simplicidade sem perder flexibilidade
### DRY ("Don't repeat yourself" - não se repita) - visa a não repetição das linhas de código
### MVC ("Model-View-Controller" - modelo-visão-controlador) - tem o intuito de separar a informação da interface com a qual o usuário interage
<br>
<br>


Linha 44: Linha 64:


# Quem pode se beneficiar deste projeto?  
# Quem pode se beneficiar deste projeto?  
* Todos que tiverem interesse sobre o assunto e em aprender.
<br>
# Quem poderá operar o sistema?
# Quem poderá operar o sistema?
* Qualquer pessoa com um dispositivo com acesso à internet
<br>
# Quem deverá participar do desenvolvimento do sistema?
# Quem deverá participar do desenvolvimento do sistema?
* Pessoas que compartilham da ideia inicial do projeto e com capacidade e disposição para construir tal ambiente
<br>
<br>


== Where ==
== Where ==


# Onde os dados serão inseridos? [[Complexas interfaces]]
# Onde os dados serão inseridos?
* Por ser um website, os dados serão inseridos no servidor através de um navegador.
<br>
# Onde os dados serão externalizados, publicados?
# Onde os dados serão externalizados, publicados?
* Os dados serão publicados e mostrados em um navegador
<br>
# Onde esta aplicação poderá ser usada?
# Onde esta aplicação poderá ser usada?
# Onde os dados serão armazenadas? [[Banco de Dados]]
* Esta aplicação poderá ser acessada em qualquer dispositivo com uma conexão à internet.
# Onde o software deverá ser hospedado? [[Cloud Computing]]
<br>
# Onde os dados serão armazenadas?
* Os dados serão armazenados em um Banco de Dados SQL.
<br>
# Onde o software deverá ser hospedado?
* Em uma máquina dedicada e alugada, possivelmente também fazendo uso de Computação em Nuvem para alguns recursos.
<br>
<br>


Linha 60: Linha 94:


# Em quanto tempo pretende desenvolver o sistema?
# Em quanto tempo pretende desenvolver o sistema?
## Em cerca de 3 meses acredita-se que seja possivel obter um protótipo simples, mas o desenvolvimento do sistema seria continuado em quanto ele funcionasse
# Quais serão as fases e em quanto tempo cada uma?
# Quais serão as fases e em quanto tempo cada uma?
## Primeiro deve-se estudar e escolher os temas a ser tratados e utilizados (Consideramos 2 meses)
## Em seguida pode-se fazer o protótipo (Cerca de 1 mês)
<br>
<br>


Linha 66: Linha 103:


# Como será dividido o desenvolvimento do sistema?
# Como será dividido o desenvolvimento do sistema?
** O Sistema será desenvolvido utilizando conceitos básicos de HTML e CSS, utilizando jQuery (Javascript) e fazendo o uso de no mínimo uma das seguintes frameworks: CakePHP (PHP), Django (Python) e Ruby on Rails (Ruby)
# Como será feita a entrada de dados?
# Como será feita a entrada de dados?
** A entrada de dados no sistema será feita através de um navegador de internet
# Como será feita a saída de dados?
# Como será feita a saída de dados?
** A saída de dados no sistema será feita através de um navegador de internet
# Descreva a 1a. funcionalidade?
# Descreva a 1a. funcionalidade?
** Sistema de Cadastro/Login
# Descreva a 2a. funcionalidade?
# Descreva a 2a. funcionalidade?
# ............
** Fórum de Discussões (criar novo tópico, responder, etc...)
# Descreva a enésima funcionalidade?
# Descreva a 3a. funcionalidade?
** Acesso ao banco de artigos, notícias, aulas, perguntas/respostas, etc...
# Descreva a 4a funcionalidade?
** Salvar junto à pagina do usuário tudo que já foi comprido pelo mesmo
# Descreva a 5a funcionalidade?
** Acesso à ambiente dinâmico de programação (junto com alguns tutoriais)
<br>
<br>


Linha 77: Linha 123:


# Quanto deverá custar o sistema?
# Quanto deverá custar o sistema?
## O Custo inicial não deve ser uma quantia muito alta, seria o custo de uma máquina dedicada e de um domínio e hospedagem de internet.
# Quantas pessoas deverão ser usadas?
# Quantas pessoas deverão ser usadas?
## De início não são necessárias muitas pessoas, mas como o projeto pode vir a tratar sobre vários assuntos específicos, seria interessante futuramente terceirizar essas áreas para seus respectivos profissionais. De maneira geral: Em torno de 2 programadores Front-End e 2 Back-End, sendo 1 para tratamento do Banco de Dados e 2 "Idealizadores" (responsaveis pelos conteúdos e moderação/gestão do aplicativo)
# Qual deverá ser o preço de aquisição do seu software para o usuário final?
# Qual deverá ser o preço de aquisição do seu software para o usuário final?
## Inicialmente, deverá ser gratuito para o usuário, será possivel talvez cobrar uma pequena taxa para serviços mais especializados
<br>
<br>
= Diagrama de Fluxo de Dados =
[[Arquivo:kodificando.png]]
= Criticas =
* Definir com mais clareza quais as abrangencias da aplicação
EX: esta aplicação ao final será composta de um forum de discussão, ambiente de programação e 'banco de códigos', etc....
Professor:
* A aplicação será composta dos seguintes módulos:
** Cadastro de usuário: Opções de cadastrar, acessar e recuperar senha. O cadastro deverá manter os dados da pessoa e também alguns itens adicionais como Área de Estudo, Formação, Escola, Cidade, Curso, Preferências, Horário de estudo.
** Forum de Discussão: O Forum deverá ser aberto com as últimas postagens. Além disso, deverá ter ainda as opções de Pesquisar conteúdo, Postar mensagem, Acessar Twitter, Linkedin e Facebook
** Ambiente de programação: Na página inicial mostrará as últimas informações para os desenvolvedores. Opções: Pesquisar tutorial, Baixar tutorial, Acessar ambiente de programação, Mostrar códigos (arquivos em cpp, por exemplo) e Apagar arquivos.
** Chat: Disponibilizar ambiente de interação com outros estudantes (online e offline). Opções: Escolher destinatário (um, grupo ou todos), Iniciar conversa, Finalizar conversa, Upload de arquivos, Download de Arquivos.
<br>
* Qual das "partes" da aplicação será desenvolvida primeiro?
Professor:
* Cronograma:
** 1a. parte: Cadastro de usuário
** 2a. parte: Forum de Discussão
** 3a. parte: Chat
** 4a. parte: Ambiente de programação
<br>
* Quais os especialistas necessários?
Ex: um para banco de dados, 2 para design, um para engenharia de software..
Professor:
* Especialistas:
** Arquiteto de software: 1
** Desenvolvedores: 2
** DBA: 1
** Designer: 1
** Tester: 1
** Especialista em Educação: 1
** Especialista em Marketing: 1
** Advogado: 1
= Diagrama de Classes =
[[Arquivo:diagramaclasses.png]]
= Diagrama de Casos de Uso =
== Diagrama ==
<br>[[Arquivo:k_casodeuso.png]]<br>
[[Arquivo:k_casodeuso.pdf]]<br>
== Detalhamento ==
<br>'''PDF:''' [[Arquivo:k_detalhamento.pdf]]<br>
'''Requisitos Não-Funcionais do Aplicativo''':
* Resposta em, no máximo, 30 segundos em 90% dos casos.
* Segurança na troca de informações e senhas.
* Acessível de todas as plataformas.
* Atendendo todas as leis de Direitos Autorais.
* Aplicativo faz comunicação com base de dados SQLite.
* Implementado em Python.<br><br>
'''Nome do Caso de Uso:''' Fazer Cadastro.<br>
'''Ator:''' Usuário.<br>
'''Pré-Condição:''' Desejo ou necessidade de ter acesso à todo conteudo da página.<br>
'''Pós-Condição:''' Conta Criada.<br>
'''Sequência de Eventos:'''
* Usuário clica para se cadastrar
* Sistema Requisita as informações necessárias.
* Usuário preenche as informações e as envia para o servidor
* Sistema Confere e pede uma verificação por e-mail.
* Usuário faz validação por e-mail e tem sua conta criada.
'''Sequências Alternativas:'''
* Usuário já existe.
* E-Mail já cadastrado.
* Confirmação de senha não corresponde.
* Erro de comunicação com o servidor.
<br><br>
'''Nome do Caso de Uso:''' Fazer login.<br>
'''Ator:''' Usuário.<br>
'''Pré-Condição:''' Usuário ter uma conta criada.<br>
'''Pós-Condição:''' Login efetuado.<br>
'''Sequência de Eventos:'''
* Usuário clica para fazer login.
* Sistema requisita email e senha.
* Usuário preenche e envia.
* Sistema confere.
* Usuário logado.
'''Sequências Alternativas:'''
* Usuário ou senha incorreta.
* Falha na resposta do sistema (Superlotação)
<br><br>
'''Nome do Caso de Uso''' Postar uma Mensagem<br>
'''Atores:''' Usuário ou Administrador<br>
'''Pré-Condição:''' Estar logado<br>
'''Pós-Condição:''' Mensagem Postada, atualização da página.<br>
'''Sequência de Eventos:'''
* Usuário clica para postar uma mensagem
* Sistema exibe uma caixa de texto para o usuário digitar.
* Usuário digita o que for pretendido e envia.
* Sistema recebe, adiciona a mensagem e atualiza a página.
'''Sequências Alternativas:'''
* Mensagem excede tamanho máximo
* Usuário postou muitas mensagens em pouco espaço de tempo (sistema anti-Flooding)
* Erro de comunicação com o sistema.
<br><br>
'''Nome do Caso de Uso:''' Ambiente de Programação<br>
'''Atores:''' Usuário ou Administrador<br>
'''Pré-Condição:''' Estar Logado.<br>
'''Pós-Condição:''' Acesso.
<br>
'''Sequência de Eventos:'''
* Usuário clica para acessar o ambiente de programação.
* Sistema exibe uma caixa de texto para digitar o código e uma tela com os resultados.
'''Sequências Alternativas:'''
* Erro de Comunicação com o sistema

Edição atual tal como às 20h47min de 6 de fevereiro de 2014

  • Nome do Projeto: Kodificando

Componentes


  • Guilherme


5W2H


What


  1. Qual o objetivo deste projeto?
    1. O principal objetivo deste projeto é fornecer um ambiente (como um website) para que os usuários possam ler sobre, aprender e discutir sobre assuntos relacionados à computação, levando em consideração que esses tipos de conhecimento por muitas vezes não é levado às salas de aula de Ensino Fundamental e Médio


  1. Quais os maiores desafios, na sua opinião, para se realizar este trabalho?
    1. Seleção e planejamento dos conteúdos disponibilizados.
    2. Moderação do fórum de discussões.
    3. Disponibilização de um ambiente dinâmico onde se possa aprender programação


  1. Quais os conhecimentos básicos que devemos ter para se implementar este projeto?
    1. Conhecimento sobre o assunto a ser tratado (Conceitos e termos Básicos de Computação).
    2. Conhecimentos de Javascript e PHP/Python/Ruby
    3. Noções de HTML e CSS.


  1. Quais soluções similares existem no mercado (Benchmarking)?


Why

  1. Porque é interessante desenvolver este projeto?
    1. É interessante porque, acima de tudo, esses conhecimentos não são tão difundidos, e atualmente, para os obter é necessário um estudo mais especializado sobre o assunto. Enquanto isso, a necessidade cresce cada vez mais, e o número de profissionais é cada vez menor comparando com a demanda.
    1. Algumas citações:
      1. "Todos nesse país deviam aprender como programar um computador porque isso te ensina a pensar" - Steve Jobs
      2. "Aprender a escrever programas faz sua mente crescer e te ajuda a pensar melhor, cria uma maneira de pensar que eu acredito que ajude em todas as áreas" - Bill Gates
  1. Porque deve usar a tecnologia escolhida?
    1. Deve-se utilizar HTML e CSS para poder marcar melhor os componentes na página e uma linguagem de programação para que o aplicativo interaja de fato com o usuário, as principais opções são: Python Django, uma plataforma muito utilizada para aplicativos WEB que utiliza uma linguagem que vem crescendo cada vez mais - Ruby on Rails, outra plataforma também amplamente utilizada, inclusive por grandes aplicativos (Exemplo: Twitter), feita em uma linguagem um pouco mais antiga e um pouco mais consolidada no mercado. As duas plataformas são fundadas em conceitos e paradigmas que são importantes e consolidados, como:
      1. "Active Record Pattern" - que consiste em armazenar os dados em bancos de dados
      2. CVC ("Convention over configuration" - Convenção sobre configuração) - que visa ganhar simplicidade sem perder flexibilidade
      3. DRY ("Don't repeat yourself" - não se repita) - visa a não repetição das linhas de código
      4. MVC ("Model-View-Controller" - modelo-visão-controlador) - tem o intuito de separar a informação da interface com a qual o usuário interage


Who

  1. Quem pode se beneficiar deste projeto?
  • Todos que tiverem interesse sobre o assunto e em aprender.


  1. Quem poderá operar o sistema?
  • Qualquer pessoa com um dispositivo com acesso à internet


  1. Quem deverá participar do desenvolvimento do sistema?
  • Pessoas que compartilham da ideia inicial do projeto e com capacidade e disposição para construir tal ambiente


Where

  1. Onde os dados serão inseridos?
  • Por ser um website, os dados serão inseridos no servidor através de um navegador.


  1. Onde os dados serão externalizados, publicados?
  • Os dados serão publicados e mostrados em um navegador


  1. Onde esta aplicação poderá ser usada?
  • Esta aplicação poderá ser acessada em qualquer dispositivo com uma conexão à internet.


  1. Onde os dados serão armazenadas?
  • Os dados serão armazenados em um Banco de Dados SQL.


  1. Onde o software deverá ser hospedado?
  • Em uma máquina dedicada e alugada, possivelmente também fazendo uso de Computação em Nuvem para alguns recursos.


When

  1. Em quanto tempo pretende desenvolver o sistema?
    1. Em cerca de 3 meses acredita-se que seja possivel obter um protótipo simples, mas o desenvolvimento do sistema seria continuado em quanto ele funcionasse
  2. Quais serão as fases e em quanto tempo cada uma?
    1. Primeiro deve-se estudar e escolher os temas a ser tratados e utilizados (Consideramos 2 meses)
    2. Em seguida pode-se fazer o protótipo (Cerca de 1 mês)


How

  1. Como será dividido o desenvolvimento do sistema?
    • O Sistema será desenvolvido utilizando conceitos básicos de HTML e CSS, utilizando jQuery (Javascript) e fazendo o uso de no mínimo uma das seguintes frameworks: CakePHP (PHP), Django (Python) e Ruby on Rails (Ruby)
  1. Como será feita a entrada de dados?
    • A entrada de dados no sistema será feita através de um navegador de internet
  1. Como será feita a saída de dados?
    • A saída de dados no sistema será feita através de um navegador de internet
  1. Descreva a 1a. funcionalidade?
    • Sistema de Cadastro/Login
  1. Descreva a 2a. funcionalidade?
    • Fórum de Discussões (criar novo tópico, responder, etc...)
  1. Descreva a 3a. funcionalidade?
    • Acesso ao banco de artigos, notícias, aulas, perguntas/respostas, etc...
  1. Descreva a 4a funcionalidade?
    • Salvar junto à pagina do usuário tudo que já foi comprido pelo mesmo
  1. Descreva a 5a funcionalidade?
    • Acesso à ambiente dinâmico de programação (junto com alguns tutoriais)


How much

  1. Quanto deverá custar o sistema?
    1. O Custo inicial não deve ser uma quantia muito alta, seria o custo de uma máquina dedicada e de um domínio e hospedagem de internet.
  2. Quantas pessoas deverão ser usadas?
    1. De início não são necessárias muitas pessoas, mas como o projeto pode vir a tratar sobre vários assuntos específicos, seria interessante futuramente terceirizar essas áreas para seus respectivos profissionais. De maneira geral: Em torno de 2 programadores Front-End e 2 Back-End, sendo 1 para tratamento do Banco de Dados e 2 "Idealizadores" (responsaveis pelos conteúdos e moderação/gestão do aplicativo)
  3. Qual deverá ser o preço de aquisição do seu software para o usuário final?
    1. Inicialmente, deverá ser gratuito para o usuário, será possivel talvez cobrar uma pequena taxa para serviços mais especializados


Diagrama de Fluxo de Dados

Criticas

  • Definir com mais clareza quais as abrangencias da aplicação
EX: esta aplicação ao final será composta de um forum de discussão, ambiente de programação e 'banco de códigos', etc....

Professor:

  • A aplicação será composta dos seguintes módulos:
    • Cadastro de usuário: Opções de cadastrar, acessar e recuperar senha. O cadastro deverá manter os dados da pessoa e também alguns itens adicionais como Área de Estudo, Formação, Escola, Cidade, Curso, Preferências, Horário de estudo.
    • Forum de Discussão: O Forum deverá ser aberto com as últimas postagens. Além disso, deverá ter ainda as opções de Pesquisar conteúdo, Postar mensagem, Acessar Twitter, Linkedin e Facebook
    • Ambiente de programação: Na página inicial mostrará as últimas informações para os desenvolvedores. Opções: Pesquisar tutorial, Baixar tutorial, Acessar ambiente de programação, Mostrar códigos (arquivos em cpp, por exemplo) e Apagar arquivos.
    • Chat: Disponibilizar ambiente de interação com outros estudantes (online e offline). Opções: Escolher destinatário (um, grupo ou todos), Iniciar conversa, Finalizar conversa, Upload de arquivos, Download de Arquivos.


  • Qual das "partes" da aplicação será desenvolvida primeiro?

Professor:

  • Cronograma:
    • 1a. parte: Cadastro de usuário
    • 2a. parte: Forum de Discussão
    • 3a. parte: Chat
    • 4a. parte: Ambiente de programação


  • Quais os especialistas necessários?
Ex: um para banco de dados, 2 para design, um para engenharia de software..

Professor:

  • Especialistas:
    • Arquiteto de software: 1
    • Desenvolvedores: 2
    • DBA: 1
    • Designer: 1
    • Tester: 1
    • Especialista em Educação: 1
    • Especialista em Marketing: 1
    • Advogado: 1

Diagrama de Classes

Diagrama de Casos de Uso

Diagrama



Arquivo:K casodeuso.pdf

Detalhamento


PDF: Arquivo:K detalhamento.pdf

Requisitos Não-Funcionais do Aplicativo:

  • Resposta em, no máximo, 30 segundos em 90% dos casos.
  • Segurança na troca de informações e senhas.
  • Acessível de todas as plataformas.
  • Atendendo todas as leis de Direitos Autorais.
  • Aplicativo faz comunicação com base de dados SQLite.
  • Implementado em Python.

Nome do Caso de Uso: Fazer Cadastro.
Ator: Usuário.
Pré-Condição: Desejo ou necessidade de ter acesso à todo conteudo da página.
Pós-Condição: Conta Criada.
Sequência de Eventos:

  • Usuário clica para se cadastrar
  • Sistema Requisita as informações necessárias.
  • Usuário preenche as informações e as envia para o servidor
  • Sistema Confere e pede uma verificação por e-mail.
  • Usuário faz validação por e-mail e tem sua conta criada.

Sequências Alternativas:

  • Usuário já existe.
  • E-Mail já cadastrado.
  • Confirmação de senha não corresponde.
  • Erro de comunicação com o servidor.



Nome do Caso de Uso: Fazer login.
Ator: Usuário.
Pré-Condição: Usuário ter uma conta criada.
Pós-Condição: Login efetuado.

Sequência de Eventos:

  • Usuário clica para fazer login.
  • Sistema requisita email e senha.
  • Usuário preenche e envia.
  • Sistema confere.
  • Usuário logado.

Sequências Alternativas:

  • Usuário ou senha incorreta.
  • Falha na resposta do sistema (Superlotação)



Nome do Caso de Uso Postar uma Mensagem
Atores: Usuário ou Administrador
Pré-Condição: Estar logado
Pós-Condição: Mensagem Postada, atualização da página.
Sequência de Eventos:

  • Usuário clica para postar uma mensagem
  • Sistema exibe uma caixa de texto para o usuário digitar.
  • Usuário digita o que for pretendido e envia.
  • Sistema recebe, adiciona a mensagem e atualiza a página.

Sequências Alternativas:

  • Mensagem excede tamanho máximo
  • Usuário postou muitas mensagens em pouco espaço de tempo (sistema anti-Flooding)
  • Erro de comunicação com o sistema.



Nome do Caso de Uso: Ambiente de Programação
Atores: Usuário ou Administrador
Pré-Condição: Estar Logado.
Pós-Condição: Acesso.
Sequência de Eventos:

  • Usuário clica para acessar o ambiente de programação.
  • Sistema exibe uma caixa de texto para digitar o código e uma tela com os resultados.

Sequências Alternativas:

  • Erro de Comunicação com o sistema