Giter Club home page Giter Club logo

cocoaheadsapp's Introduction

CocoaHeads Brasil 🇧🇷

waffle board Build Status

Quem Somos

CocoaHeads é um grupo formado por desenvolvedores (profissionais e iniciantes), que se organizam para reunir pessoas com a mesma paixão: Programação para os iDevices da Apple (OSX e iOS). Nossos encontros são informais e servem para juntar pessoas que gostam do mesmo assunto que você [programação! :) ]. Promovemos Talks e Palestras dadas por membros do grupo local ou de convidados especiais. Estamos também presentes no Slack, http://iosdevbr.herokuapp.com, onde temos diversas iniciativas como a criação do aplicativo da comunidade, área de #code-help, uma sessão para divulgação de empregos no canal #jobs, falamos também sobre #design e #ux de aplicações além de ter o podcast da comunidade!

Setup inicial

Instalação das Dependências

./setup.sh

Guidelines de desenvolvimento

UI

Usamos um storyboard Main.storyboard para definir o fluxo do app, porém o desenvolvimento da tela não é feito diretamente no storyboard. Para desenvolver uma tela você deve:

  1. Criar um viewController para esta tela
  2. Criar uma view que extenda de NibDesignable
  3. Criar um Xib com o mesmo nome da View.
  4. Definir a classe do File's Owner para a classe da view que você criou
  5. Adicionar uma nova scene no storyboard.
  6. Definir a classe do ViewController para o controller criado no passo 1
  7. Arrastar uma nova View para dentro dele, e definir a classe dessa view para a view criada no passo 2

Com isso, a view será renderizada corretamente no storyboard, mas sua edição será no arquivo Xib criado.

Interação com a View

Devemos seguir alguns conceitos e princípios para separar a lógica de nossa funcionalidade:

  1. O ViewController deve apenas interagir com a view quando esta tiver que mudar de tamanho, ou apresentar outros ViewControllers
  2. Crie uma classe que extenda de ViewModel.
  3. Adicione uma propriedade viewModel para a classe View.
  4. A classe ViewModel deve conter informações sobre o estado da view, e lógicas que alterem esses estados.
  5. A classe View deve monitorar estes estados para alterar visualmente sua aparência.

Quem pode contribuir

Todos desenvolvedores iOS estão aptos a colaborar com essa iniciativa, basta seguir o workflow de contribuição.

Guideline de contribuição

Neste projeto, estamos usando o Github Flow integrado com o Forking Wokflow.

Preparação

  • Faça o fork do projeto.
  • Clone o seu projeto
$ git clone [email protected]:<github_user>/CocoaHeadsApp.git
  • Sincronize o branch master
$ git pull origin master
  • Adicione o projeto original como upstream remote
$ git remote add upstream [email protected]:CocoaHeadsBrasil/CocoaHeadsApp.git
  • Atualize a tabela do seu repositório
$ git fetch --all
  • Sincronize o branch master do projeto original
$ git checkout -b cocoaheads/master upstream/master

Desenvolvimento

  • Mude para o master do seu fork e crie um novo branch com a sua feature
$ git checkout master; git checkout -b feature_name
  • Faça todas as alterações necessárias

Publicação

  • Quando a feature estiver pronta para publicação, atualize a tabela do seu repositório
$ git fetch --all
  • Atualize o branch master do projeto original
$ git checkout cocoaheads/master; git pull upstream master
  • Rebase seu branch master
$ git checkout master; git rebase cocoaheads/master
  • Push seu branch master para seu fork
$ git push origin master

*Caso necessário (uma vez que o histório do git é remodelo no `rebase`), você pode forçar a atualização*
``` $ git push -f origin master ``` - `Rebase` o branch da sua feature
``` $ git checkout feature_name; git rebase master ``` - `Push` o branch da sua feature para seu fork
``` $ git push origin feature_name ```
*Caso necessário (uma vez que o histório do git é remodelo no `rebase`), você pode forçar a atualização*
``` $ git push -f origin feature_name ``` - Crie um novo [`Pull Request`](https://github.com/CocoaHeadsBrasil/CocoaHeadsApp/pull/new/master)

Features do projeto

Todo o desenvolvimento do app está concentrado no github. Portanto, para gerenciá-lo, usamos issues, labels e milestones.

Issues

Workflow

  1. Quando uma nova issue é criada, ela entra in review. Assim, os participantes do projeto podem conversar a respeito e colaborar com a proposta.
  2. Uma prosposta pode ser negada (Declined) ou transformada em item do backlog do projeto (Onboard).
  3. As issues em onboard podem começar a serem desenvolvidas (In progress).
  4. Quando o desenvolvimento da feature é completado, o desenvolvedor por criar um pull request e associar à issue (Waiting PR review).
  5. Os demais participantes do projeto podem revisar os pull requests (In PR review).
  6. Quando for feito o merge, aquela issue é encerrada (Delivered).

Labels

Progresso

  • In review: Propostas que estão abertas para discussão se será implementado ou não
  • Declined: Dado as conversas na issue, a funcionalidade/refatoração foi negada (e a issue é fechada).
  • Onboard: Proposta que foi "aceita" e pode entrar em uma das milestones do projeto. Nesse ponto, a conversação na issue é bloqueada
  • In progess: Issue que está em desenvolvimento por 1 ou mais pessoas (que devem ser associadas à issue)
  • Waiting PR review: Uma indicação de que o issue foi finalizada e precisa passar por review de PR.
  • In PR review: O PR está sendo avaliado por 1 ou mais pessoas
  • Delivered: PR foi aceito (e a issue é fechada)

Informativo

  • Code base enhancement: Propostas que visam uma melhor implementação ou estrutura de código
  • Product enhancement: Propostas de novas funcionalidades para o produto
  • bug: Informar bugs no código
  • ci: Propostas de novas funções ou melhorias no sistema de C.I.
  • docs: Adição ou melhoria na documentação
  • question: Questões sobre o projeo
  • easy: Proposta considerada de fácil implementação
  • medium: Proposta com dificuldade média
  • hard: Proposta de implementação complexa

Milestone

O projeto, hoje, possui os seguintes milestones:

  • Integrar API: Integrar a API rails
  • Versão de teste: Uma primeira versão do aplicativo, algo que pode ser disponibilizado para beta testers (não precisa ter 100% das funcionalidades)
  • 1.0: Coisas que queremos que sejam válidas para uma versão 1.0
  • Distribuição: Issues relacionadas à distribuição do app (caso seje relevante)

Motivação da criação do App

O crescimento do número de chapters em inúmeras cidades se fez a necessidade de ter um local onde pudessemos ver e organizar tantos eventos. Assim surgiu a ideia de fazermos o aplicativo do CocoaHeads Brasil com a presença de todos os eventos. A visualização destes além das informações mais detalhadas, além de apresentar a lista de participantes por evento, sorteios e muito mais.

Licença

The MIT License

cocoaheadsapp's People

Contributors

barbosa avatar barrault01 avatar basthomas avatar bguidolim avatar brunogb avatar brunokoga avatar brunomazzo avatar cs-lucas-cardinali avatar gfpoliva avatar igorcferreira avatar raphkoebraam avatar talesp avatar viniciuscarvalho avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

cocoaheadsapp's Issues

Exportar evento para calendário

Acho útil que o usuário possa exportar um evento para o calendário. Assim, ele pode criar alertas, rotas usando o sistema.

Abstração da API

Qual lib ou vamos utilizar NSURLSession para fazer o tratamento dos JSONs da nossa API?

  • Moya;
  • Alamofire;
  • ObjectMapper;
  • NSURLSession;
  • Outra?

Adicionar ferramenta de tracking de usuários e crashes

Eu acho relevante a utilização de uma ferramenta como Fabric ou Hockey. Eu tenho mais familiaridade com o Fabric e eu acho que o acompanhamento de crash free sessions e detalhamento de erros muito bons. Possível, até, enviar soft errors para o servidor e manter tracking disso.

Tela localização do evento

  • Mostrar localização aproximada de onde ocorrerá o evento;

Não sei se seria bom desmembrar isso em uma área do segmented control.

localizacao-appch

Funções administrativas (sugestão)

Para os organizadores do evento:

  • "Lista de presença". (Pra nao precisar de uma lista fisica, assinar e etc)
  • Emissão de certificado? (Em SP o pessoal fornece).
  • Sorteio - Agilizar os sorteios que tem as vezes.

Fluxo inicial aplicação

  • Definição das primeiras telas do aplicativos;
  • Implementação de funcionalidades;
  • Mockup das telas
    fluxo-inicial-app

Indagação sobre a seção "Quem Somos"

Estava lendo essa frase:

Promovemos Talks e Palestras de até 20 minutos dadas por membros do grupo local ou de convidados especiais e é lógico, comidas, bebidas e snacks ao final.

... e pensando se atualmente condiz com a nossa realidade. Não sei se é verdade que em todas as cidades que nossos talks acontecem, eles são de até 20 minutos (acredito que muitos não são). Além disso, acho que colocar comidas, bebidas e snacks pode passar uma propaganda enganosa, dado que nem todo evento conseguimos alguém ajudando com o coffee.

Usar iBeacon para monitorar presença

A lista de presença pode ser implementada utilizando iBeacon. Uma vez que o aparelho do palestrante age como um beacon e cria uma range, todos que estão participando do evento entram nessa região. A partir disso da pra fazer featurings interessantes e que podem servir para levantar dados e tomar decisões, como:

  • Evasão dos eventos
  • Porcentagem de presença
  • Engajamento do usuário

Além disso, utilizar iBeacons trás a possibilidade de implementar recursos de IoT, aumentando a interatividade entre os usuários.

Preencher campo "data" na tabela Events

Do jeito que foi criado o esquema de sincronismo, os campos estão sendo copiados com seus "raw values". Para o campo de data, por exemplo, isso não está funcionando. Talvez precise criar um new Date() antes de deserializar o que vem do Cupertino e aí então preenchê-lo.

README em inglês

Acredito que com o projeto bem estruturado haverá interesse da comunidade mundial em utilizar ou contribuir.

Adicionar VTAcknowledgementsViewController pod ao projeto

Seria muito interessante mostrar no App quais tecnologias openSource estamos usando.
E na verdade é bem simples fazer isso.

Basta configurar o final do Podfile com:

pod 'VTAcknowledgementsViewController'
#copy the acknowledgements file when installing news pods
post_install do | installer |
    require 'fileutils'
    FileUtils.cp_r('Pods/Target Support Files/Pods/Pods-acknowledgements.plist', 'Pods-acknowledgements.plist', :remove_destination => true)
end

E depois importar esse arquivo gerado no projeto. Dai basta exibir o VTAcknowledgementsViewController como quisermos.

Fonte da idéia: trySwift! Podfile

Substituir o Dynamics por RxSwift

Acredito que o Dynamics possa ser substituído pela implementação do RxSwift. Utilizar o conceito de reactive and observables, além do gerenciamento deKVO, dessa biblioteca pode ajudar.

Criar README.md

Precisamos criar o nosso README. Ele deve conter, no mínimo:

  • Motivo do App existir;
  • Quem somos nós;
  • Quem pode colaborar;
  • Estruturação do repositório (branches, tags, etc);
  • Estruturação do código (folders, groups, etc);
  • Explicação sobre decisões técnicas (gerenciar dependências, certificados, tecnologias utilizadas, etc);
  • Workflow de colaboração;
  • Copyrights;
  • Agradecimentos;
  • Links e formas de contato.

Remover Parse do projeto

  • Observar onde o Parse está no projeto e trocar por dados mockado;
  • Remover instruções do Parse no Readme;

Adicionar ferramenta de tracking de usuários e crashes

Eu acho relevante a utilização de uma ferramenta como Fabric ou Hockey. Eu tenho mais familiaridade com o Fabric e eu acho que o acompanhamento de crash free sessions e detalhamento de erros muito bons. Possível, até, enviar soft errors para o servidor e manter tracking disso.

Tela detalhes do evento

  • Mostrar descrição do evento;
  • Palestrantes com descrição dos assuntos;
  • Área para inscrição ( RSVP );

detalhes-appch

Lista de Funcionalidades

Issue aberta para discussão de funcionalidades.

Funcionalidades:

  • Cadastro ? (usar login com github? facebook?)
  • Calendario Geral (filtro por estados, datas)
  • Track dos seus eventos. (existe alguma API do Meetup?)
  • Palestras anteriores (Slideshare, speakerdeck)
  • Podcast (enviar push quando tive novo)
  • Mapa de arredores dos eventos (estacionamento, bar, estacoes, pontos de onibus)
  • Periscopes (ou streamings) de eventos rolando.
  • Vagas de empregos / freelas (?)
  • Sorteio de brindes nos eventos

Tela inicial

  • Criar segmented control direcionando para todos de sua cidade e chapters de diferentes cidades;
  • Listar todos os eventos;

home-appch

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.