├── .gitignore ├── README.md ├── coding-dojo ├── 18032017 │ ├── dojo.py │ └── test_dojo.py ├── 19112016 │ └── spec │ │ ├── fizzbuzz_spec.rb │ │ └── spec_helper.rb ├── 20052017 │ ├── source.py │ └── source_test.py └── .rspec └── images └── alda_rocha.png /.gitignore: -------------------------------------------------------------------------------- 1 | # Byte-compiled / optimized / DLL files 2 | __pycache__/ 3 | *.py[cod] 4 | *$py.class 5 | 6 | # C extensions 7 | *.so 8 | 9 | # Distribution / packaging 10 | .Python 11 | env/ 12 | build/ 13 | develop-eggs/ 14 | dist/ 15 | downloads/ 16 | eggs/ 17 | .eggs/ 18 | lib/ 19 | lib64/ 20 | parts/ 21 | sdist/ 22 | var/ 23 | *.egg-info/ 24 | .installed.cfg 25 | *.egg 26 | 27 | # PyInstaller 28 | # Usually these files are written by a python script from a template 29 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 30 | *.manifest 31 | *.spec 32 | 33 | # Installer logs 34 | pip-log.txt 35 | pip-delete-this-directory.txt 36 | 37 | # Unit test / coverage reports 38 | htmlcov/ 39 | .tox/ 40 | .coverage 41 | .coverage.* 42 | .cache 43 | nosetests.xml 44 | coverage.xml 45 | *,cover 46 | .hypothesis/ 47 | 48 | # Translations 49 | *.mo 50 | *.pot 51 | 52 | # Django stuff: 53 | *.log 54 | local_settings.py 55 | 56 | # Flask stuff: 57 | instance/ 58 | .webassets-cache 59 | 60 | # Scrapy stuff: 61 | .scrapy 62 | 63 | # Sphinx documentation 64 | docs/_build/ 65 | 66 | # PyBuilder 67 | target/ 68 | 69 | # IPython Notebook 70 | .ipynb_checkpoints 71 | 72 | # pyenv 73 | .python-version 74 | 75 | # celery beat schedule file 76 | celerybeat-schedule 77 | 78 | # dotenv 79 | .env 80 | 81 | # virtualenv 82 | venv/ 83 | ENV/ 84 | 85 | # Spyder project settings 86 | .spyderproject 87 | 88 | # Rope project settings 89 | .ropeproject 90 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Meetup 2 | :loudspeaker: Apresentações e códigos apresentados e disponibilizados pelos palestrantes. 3 | 4 |
5 | 24 º Meetup Python BH - 23/07/2016 6 | 7 | Local: Guaja casa 8 | 9 | **Palestras:** 10 | 11 | [Não escale servidores, escale código!](http://slides.com/ervilis/nao-escale-servidores-escale-codigo#/) 12 | 13 | [Introdução ao Python](https://speakerdeck.com/cassiobotaro/introducao-ao-python) 14 | 15 | **Lightning talks** 16 | 17 | [Python Sudeste](http://pythonsudeste.org/) 18 | 19 | [Vim-Bootstrap](http://vim-bootstrap.com/) 20 | 21 | [Vimbook](https://github.com/cassiobotaro/vimbook) 22 | 23 | [exporters](https://github.com/scrapinghub/exporters) 24 | 25 | **Outros** 26 | 27 | [uvloop](https://github.com/MagicStack/uvloop) 28 | 29 |
30 | 31 |
32 | 25º Meetup Python BH & 10º Meetup Rails MG 21/08/2016 33 | 34 | Local: Outbound Market 35 | 36 | **Palestras:** 37 | 38 | [Relato das minhas experiências com Mapa mental](https://www.dropbox.com/s/41fzakqlxqvo728/MapaMental.exe?dl=0) 39 | 40 | [Introdução ao Phoenix framework](http://slides.com/arthurbragaalfredo/introducao-ao-phoenix-framework#/) 41 | 42 | [Usando GIT LFS (Large File Storage)](http://slides.com/jeanoliveirarodrigues/git-lfs#/) 43 | 44 | [React.js para pensar além do Ruby](http://www.slideshare.net/adimircolen/react-para-pensar-alm-do-ruby) 45 | 46 | **Lightning talks** 47 | 48 | [Python Sudeste](http://pythonsudeste.org/) 49 | 50 | [Vim-Bootstrap](http://vim-bootstrap.com/) 51 | 52 | [Vimbook](https://github.com/cassiobotaro/vimbook) 53 | 54 | Oportunidade para freelancer django - lucararruda @ gmail 55 | 56 | ![Alda Rocha](https://github.com/pythonmg/meetup/blob/master/images/alda_rocha.png "Alda Rocha") 57 | 58 | [SPED Auditor](http://spedauditor.com.br) 59 | 60 | [Python Challenge](https://cassiobotaro.github.io/armadilha-de-nomes-em-variaveis-de-funcoes.html#armadilha-de-nomes-em-variaveis-de-funcoes) 61 | 62 | Tem startup em BH? - pedalmeilda @ gmail 63 | 64 |
65 | 66 |
67 | 26º Meetup Python BH & 11º Meetup Rails MG - 22/10/2016 68 | 69 | Local: Sede App Prova 70 | 71 | **Palestras:** 72 | 73 | [Dicas de Carreira para Desenvolvedores de Software](http://slides.com/andrealmar/dicas-carreira#/) 74 | 75 | [Programando Robôs de Negociação para Forex](https://www.dropbox.com/s/rhj3c8b3za3yr7j/Desenvolvendo%20Bots%20para%20Forex.ppsx?dl=0) 76 | 77 | [Tutorial Phoenix](https://speakerdeck.com/arthurbragaa/tutorial-phoenix-framework-v2) 78 | 79 | **Lightning talks** 80 | 81 | [Vim-Bootstrap](http://vim-bootstrap.com/) 82 | 83 | [APP Prova](http://appprova.com.br/) 84 | 85 | [Trailblazer](https://github.com/trailblazer/trailblazer) 86 | 87 | [XSloc](http://www.xsloc.com/) 88 | 89 | [Dojo Minas](https://slides.com/andrealmar/dojominas) 90 | 91 | [Python Brasil 2016](http://slides.com/ervilis/deck-3) 92 | 93 | 94 |
95 | 96 |
97 | 27 º Meetup Python BH & 12º Meetup Rails MG - 19/11/2016 98 | 99 | Local: Puc Minas 100 | 101 | **Palestras:** 102 | 103 | [Machine Learning com Anaconda](https://github.com/MarcusWiilo/Machine-Learning/tree/master/Machine%20Learning%20com%20Anaconda) 104 | 105 | [Um Python 3 para a todos governar](https://speakerdeck.com/cassiobotaro/27o-meetup-python-mg-and-12o-meetup-rails-mg) 106 | 107 | **Coding Dojo** 108 | 109 | [FizzBuzz Ruby](coding-dojo/19112016) 110 | 111 |
112 | 113 |
114 | 28 º Meetup Python BH & 13º Meetup Rails MG - 21/01/2017 115 | 116 | Local: BuscarID 117 | 118 | **Palestras:** 119 | 120 | [pytest](https://docs.google.com/presentation/d/1JA-qoXM4iNJ1b9O7Z-53SvdaODmDOE1QfpR3ygo2yVU) 121 | 122 | Minha Jornada do C ao Python 123 | 124 | **Coding Dojo** 125 | 126 | [TDD Ruby: Ano Bissexto](http://dojopuzzles.com/problemas/exibe/ano-bissexto/) 127 | 128 |
129 |
130 | 29º Meetup Python BH & 14º Meetup Rails MG - 11/02/2017 131 | 132 | Local: Thoughtworks 133 | 134 | **Palestras:** 135 | 136 | **Lightning talks** 137 | 138 |
139 |
140 | 30º Meetup Python BH & 15º Meetup Rails MG - 18/03/2017 141 | 142 | Local: AppProva 143 | 144 | **Palestras:** 145 | 146 | [from python import gopher](https://goo.gl/7aWV9f) 147 | 148 | [apartament 101]() 149 | 150 | **Lightning talks** 151 | 152 | [FAZ makerspace](http://fazmakerspace.com.br/) 153 | 154 | [Instagram Faz](https://www.instagram.com/fazmakerspace/) 155 | 156 | [vim-bootstrap slides](https://speakerdeck.com/cassiobotaro/vim-bootstrap) 157 | 158 | [vim-bootstrap site](http://vim-bootstrap.com/) 159 | 160 | [Same content. Diferent words.](https://speakerdeck.com/tmylk/same-content-different-words) 161 | 162 | [Linode](https://www.linode.com/) 163 | 164 | [AWS](https://aws.amazon.com/pt/) 165 | 166 | [Embratel cloud](http://portal.embratel.com.br/cloud/index.php) 167 | 168 | [Cloud at cost](http://cloudatcost.com/) 169 | 170 | [Digital Ocean](https://www.digitalocean.com/) 171 | 172 | **Coding Dojo** 173 | 174 | [FizzBuzz Python](coding-dojo/18032017) 175 | 176 |
177 |
178 | 31º Meetup Python BH & 16º Meetup Rails MG - 20/05/2017 179 | 180 | Local: AppProva 181 | 182 | **Palestras:** 183 | 184 | [Não é apenas Futebol](https://github.com/cassiobotaro/sentibol/blob/master/nao_apenas_futebol.pdf) 185 | 186 | [Ruby vs Python](https://speakerdeck.com/lucasarruda/ruby-ou-python) 187 | 188 | **Lightning talks** 189 | 190 | [Python Brasil 2017](http://2017.pythonbrasil.org.br/) 191 | 192 | [Dojo Minas](http://dojominas.org/) 193 | 194 | [Open source](https://github.com/) 195 | 196 | [AppProva](http://appprova.com.br/) 197 | 198 | [click](http://click.pocoo.org/5/) 199 | 200 | [dotenv](https://github.com/theskumar/python-dotenv) 201 | 202 | [honcho](https://github.com/nickstenning/honcho) 203 | 204 | **Coding Dojo** 205 | 206 | [pizza](coding-dojo/20052017) 207 | 208 |
209 | 210 |
211 | 32º Meetup Python BH - 17/06/2017 212 | 213 | Local: Tivit 214 | 215 | **Palestras:** 216 | 217 | [Git Workflow - Uma modelagem de sucesso](http://nvie.com/posts/a-successful-git-branching-model/) 218 | 219 | [Startups, do Insight ao "unicórnio", como uma startup funciona]() 220 | 221 | **Lightning talks** 222 | 223 | [Python Brasil 13](http://2017.pythonbrasil.org.br/) 224 | 225 | [Tivit](https://tivit.com/) 226 | 227 | [Não seja esse cara](https://github.com/avelino/awesome-go/pull/950) 228 | 229 | [libcloud](https://libcloud.apache.org/) 230 | 231 | [One Cloud](https://onecloudportal.com.br/) 232 | 233 | [Lean Startup](https://www.amazon.com.br/dp/0989200507/ref=asc_df_09892005075028114?smid=A1ZZFT5FULY4LN&tag=goog0ef-20&linkCode=asn&creative=380341&creativeASIN=0989200507) 234 | [Zenhub](https://www.zenhub.com/) 235 | 236 | [Aurelia](http://aurelia.io/) 237 | 238 | [AppRunner](http://apprunner.cloud/) 239 | 240 | [Steem](https://steem.io/) 241 | 242 | [Glassdoor](https://www.glassdoor.com/index.htm) 243 | 244 | [Asciinema](https://asciinema.org/) 245 | 246 | [Quorum](https://www.jpmorgan.com/country/BR/pt/Quorum) 247 | 248 | [IPFS](https://ipfs.io/) 249 | 250 | [Sia Tech](http://sia.tech/) 251 | 252 | [Storj](https://storj.io/) 253 | 254 |
255 | -------------------------------------------------------------------------------- /coding-dojo/.rspec: -------------------------------------------------------------------------------- 1 | --color 2 | --require spec_helper 3 | -------------------------------------------------------------------------------- /coding-dojo/18032017/dojo.py: -------------------------------------------------------------------------------- 1 | def FizzBuzz(numero): 2 | initial = "" 3 | 4 | if numero % 3 == 0: 5 | initial += "Fizz" 6 | 7 | if numero % 5 == 0: 8 | initial += "Buzz" 9 | 10 | return initial or str(numero) 11 | 12 | def FizzBuzzList(n): 13 | return [FizzBuzz(i) for i in range(1, n + 1)] 14 | -------------------------------------------------------------------------------- /coding-dojo/18032017/test_dojo.py: -------------------------------------------------------------------------------- 1 | """ 2 | 3 | Neste problema, você deverá exibir uma lista de 1 a 100, um em cada linha, com as seguintes exceções: 4 | Números divisíveis por 3 deve aparecer como 'Fizz' ao invés do número; 5 | Números divisíveis por 5 devem aparecer como 'Buzz' ao invés do número; 6 | Números divisíveis por 3 e 5 devem aparecer como 'FizzBuzz' ao invés do número'. 7 | """ 8 | from dojo import FizzBuzz, FizzBuzzList 9 | 10 | def test_number_3(): 11 | assert FizzBuzz(3) == "Fizz" 12 | 13 | def test_number_5(): 14 | assert FizzBuzz(5) == "Buzz" 15 | 16 | def test_number_15(): 17 | assert FizzBuzz(15) == "FizzBuzz" 18 | 19 | def test_number_6(): 20 | assert FizzBuzz(6) == "Fizz" 21 | 22 | def test_number_10(): 23 | assert FizzBuzz(10) == "Buzz" 24 | 25 | def test_number_30(): 26 | assert FizzBuzz(30) == "FizzBuzz" 27 | 28 | def test_number_59(): 29 | assert FizzBuzz(59) == "59" 30 | 31 | def test_list_at_5(): 32 | assert FizzBuzzList(5) == ["1", "2", "Fizz", "4", "Buzz"] 33 | 34 | def test_list_at_15(): 35 | assert FizzBuzzList(15) == ["1", "2", "Fizz", "4", "Buzz", "Fizz", "7", "8", "Fizz", "Buzz", "11", "Fizz", "13", "14", "FizzBuzz"] -------------------------------------------------------------------------------- /coding-dojo/19112016/spec/fizzbuzz_spec.rb: -------------------------------------------------------------------------------- 1 | require 'spec_helper' 2 | require 'fizzbuzz' 3 | 4 | RSpec.describe 'FizzBuzz' do 5 | it "Se a classe FizzBuzz existe" do 6 | fizzBuzz = FizzBuzz.new 7 | expect(fizzBuzz.class == FizzBuzz).to eq true 8 | end 9 | 10 | it "FizzBuzz de 1 retorna 1" do 11 | fizzBuzz = FizzBuzz.new 12 | expect(fizzBuzz.fizz_buzz(1)).to eq [1] 13 | end 14 | 15 | it "FizzBuzz de 3 retorna 1 2 fizz" do 16 | fizzBuzz = FizzBuzz.new 17 | expect(fizzBuzz.fizz_buzz(3)).to eq [1,2,"fizz"] 18 | end 19 | it "FizzBuzz de 5 retorna 1 2 fizz 4 buzz" do 20 | fizzBuzz = FizzBuzz.new 21 | expect(fizzBuzz.fizz_buzz(5)).to eq [1,2,"fizz",4,"buzz"] 22 | end 23 | it "FizzBuzz de 15 retorna array com fizz buzz e fizzbuzz" do 24 | fizzBuzz = FizzBuzz.new 25 | arr = fizzBuzz.fizz_buzz(15) 26 | p arr 27 | expect(arr.include?("fizzbuzz")) 28 | end 29 | 30 | end 31 | -------------------------------------------------------------------------------- /coding-dojo/19112016/spec/spec_helper.rb: -------------------------------------------------------------------------------- 1 | # This file was generated by the `rspec --init` command. Conventionally, all 2 | # specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`. 3 | # The generated `.rspec` file contains `--require spec_helper` which will cause 4 | # this file to always be loaded, without a need to explicitly require it in any 5 | # files. 6 | # 7 | # Given that it is always loaded, you are encouraged to keep this file as 8 | # light-weight as possible. Requiring heavyweight dependencies from this file 9 | # will add to the boot time of your test suite on EVERY test run, even for an 10 | # individual file that may not need all of that loaded. Instead, consider making 11 | # a separate helper file that requires the additional dependencies and performs 12 | # the additional setup, and require it from the spec files that actually need 13 | # it. 14 | # 15 | # The `.rspec` file also contains a few flags that are not defaults but that 16 | # users commonly want. 17 | # 18 | # See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration 19 | RSpec.configure do |config| 20 | # rspec-expectations config goes here. You can use an alternate 21 | # assertion/expectation library such as wrong or the stdlib/minitest 22 | # assertions if you prefer. 23 | config.expect_with :rspec do |expectations| 24 | # This option will default to `true` in RSpec 4. It makes the `description` 25 | # and `failure_message` of custom matchers include text for helper methods 26 | # defined using `chain`, e.g.: 27 | # be_bigger_than(2).and_smaller_than(4).description 28 | # # => "be bigger than 2 and smaller than 4" 29 | # ...rather than: 30 | # # => "be bigger than 2" 31 | expectations.include_chain_clauses_in_custom_matcher_descriptions = true 32 | end 33 | 34 | # rspec-mocks config goes here. You can use an alternate test double 35 | # library (such as bogus or mocha) by changing the `mock_with` option here. 36 | config.mock_with :rspec do |mocks| 37 | # Prevents you from mocking or stubbing a method that does not exist on 38 | # a real object. This is generally recommended, and will default to 39 | # `true` in RSpec 4. 40 | mocks.verify_partial_doubles = true 41 | end 42 | 43 | # This option will default to `:apply_to_host_groups` in RSpec 4 (and will 44 | # have no way to turn it off -- the option exists only for backwards 45 | # compatibility in RSpec 3). It causes shared context metadata to be 46 | # inherited by the metadata hash of host groups and examples, rather than 47 | # triggering implicit auto-inclusion in groups with matching metadata. 48 | config.shared_context_metadata_behavior = :apply_to_host_groups 49 | 50 | # The settings below are suggested to provide a good initial experience 51 | # with RSpec, but feel free to customize to your heart's content. 52 | =begin 53 | # This allows you to limit a spec run to individual examples or groups 54 | # you care about by tagging them with `:focus` metadata. When nothing 55 | # is tagged with `:focus`, all examples get run. RSpec also provides 56 | # aliases for `it`, `describe`, and `context` that include `:focus` 57 | # metadata: `fit`, `fdescribe` and `fcontext`, respectively. 58 | config.filter_run_when_matching :focus 59 | 60 | # Allows RSpec to persist some state between runs in order to support 61 | # the `--only-failures` and `--next-failure` CLI options. We recommend 62 | # you configure your source control system to ignore this file. 63 | config.example_status_persistence_file_path = "spec/examples.txt" 64 | 65 | # Limits the available syntax to the non-monkey patched syntax that is 66 | # recommended. For more details, see: 67 | # - http://rspec.info/blog/2012/06/rspecs-new-expectation-syntax/ 68 | # - http://www.teaisaweso.me/blog/2013/05/27/rspecs-new-message-expectation-syntax/ 69 | # - http://rspec.info/blog/2014/05/notable-changes-in-rspec-3/#zero-monkey-patching-mode 70 | config.disable_monkey_patching! 71 | 72 | # This setting enables warnings. It's recommended, but in some cases may 73 | # be too noisy due to issues in dependencies. 74 | config.warnings = true 75 | 76 | # Many RSpec users commonly either run the entire suite or an individual 77 | # file, and it's useful to allow more verbose output when running an 78 | # individual spec file. 79 | if config.files_to_run.one? 80 | # Use the documentation formatter for detailed output, 81 | # unless a formatter has already been configured 82 | # (e.g. via a command-line flag). 83 | config.default_formatter = 'doc' 84 | end 85 | 86 | # Print the 10 slowest examples and example groups at the 87 | # end of the spec run, to help surface which specs are running 88 | # particularly slow. 89 | config.profile_examples = 10 90 | 91 | # Run specs in random order to surface order dependencies. If you find an 92 | # order dependency and want to debug it, you can fix the order by providing 93 | # the seed, which is printed after each run. 94 | # --seed 1234 95 | config.order = :random 96 | 97 | # Seed global randomization in this process using the `--seed` CLI option. 98 | # Setting this allows you to use `--seed` to deterministically reproduce 99 | # test failures related to randomization by passing the same `--seed` value 100 | # as the one that triggered the failure. 101 | Kernel.srand config.seed 102 | =end 103 | end 104 | -------------------------------------------------------------------------------- /coding-dojo/20052017/source.py: -------------------------------------------------------------------------------- 1 | # Para cada sabor de pizza disponível, 2 | # cada um deve indicar uma nota para ele 3 | # (nota 1, se a pessoa detesta o sabor e nota 5 se a 4 | # pessoa adora o sabor). 5 | # Depois de processar esses dados, 6 | # cada pessoa vai saber quais as pessoas que 7 | # tem o gosto mais parecido que o seu 8 | # (e que provavelmente irá dividir uma pizza com você). 9 | # Marguerita - Quatro queijos - Escarola 10 | # Portuguesa - Frango+Catupiry - Napolitana 11 | 12 | # FUNCIONARIOS = { 13 | # CLAUDIO : {Marguerita: 1, Quatro_Queijos: 3} 14 | # CÁSSIO : {Marguerita: 5, Quatro_Queijos: 2} 15 | # ANDRE : {Marguerita: 4, Quatro_Queijos: 1} 16 | 17 | # } 18 | 19 | # ANFITRIAO : {Marguerita: 4, Quatro_Queijos: 2} 20 | # RETORNO =NOME DE UM DOS FUNCIONARIOS 21 | def verifica_perfil(anfitriao, funcionarios): 22 | valor = anfitriao["Marguerita"] 23 | menor_diferenca = 6 24 | func = null 25 | for key,val in funcionarios.items(): 26 | if key == "Marguerita" #val < menor_diferenca: 27 | #funcmenor_diferenca = val 28 | #func = primeiro 29 | 30 | # =) 31 | 32 | # - pessoas novas++ 33 | # - testes+ 34 | # - boas praticas 35 | # - brainstorming 36 | # - trabalho em equipe+ 37 | # - pytest++ 38 | # - python 39 | # - participação+ 40 | 41 | # =( 42 | 43 | # - não resolveu o problema 44 | # - mais tempo pro dojo++ 45 | # - juiz pra controlar o tempo 46 | # - problema++ 47 | # - mais tempo pra discutir o problema 48 | -------------------------------------------------------------------------------- /coding-dojo/20052017/source_test.py: -------------------------------------------------------------------------------- 1 | # Para cada sabor de pizza disponível, 2 | # cada um deve indicar uma nota para ele 3 | # (nota 1, se a pessoa detesta o sabor e nota 5 se a 4 | # pessoa adora o sabor). 5 | # Depois de processar esses dados, 6 | # cada pessoa vai saber quais as pessoas que 7 | # tem o gosto mais parecido que o seu 8 | # (e que provavelmente irá dividir uma pizza com você). 9 | # Marguerita - Quatro queijos - Escarola 10 | # Portuguesa - Frango+Catupiry - Napolitana 11 | 12 | # FUNCIONARIOS = { 13 | # CLAUDIO : {Marguerita: 1, Quatro_Queijos: 3} 14 | # CÁSSIO : {Marguerita: 5, Quatro_Queijos: 2} 15 | # ANDRE : {Marguerita: 4, Quatro_Queijos: 1} 16 | # } 17 | 18 | # ANFITRIAO : {Marguerita: 4, Quatro_Queijos: 2} 19 | # RETORNO =NOME DE UM DOS FUNCIONARIOS 20 | from source import verifica_perfil 21 | 22 | 23 | 24 | 25 | 26 | def test_verificar_perfil_marguerita(): 27 | ANFITRIAO = {"Marguerita": 4} 28 | FUNCIONARIOS = { 29 | "CLAUDIO" : {"Marguerita": 1}, 30 | "CÁSSIO" : {"Marguerita": 5}, 31 | # "ANDRE" : {"Marguerita": 4, "Quatro_Queijos": 1} 32 | } 33 | assert verifica_perfil(ANFITRIAO, FUNCIONARIOS) == "CÁSSIO" 34 | 35 | -------------------------------------------------------------------------------- /images/alda_rocha.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pythonmg/meetup/fc4105f88a21ff67e6e94ad89ec0d33dc38f340d/images/alda_rocha.png --------------------------------------------------------------------------------