SlideShare a Scribd company logo
1 of 85
Download to read offline
Remote internship
for Ruby Developers
Ivan Nemytchenko, @inem
Developer Advocate at GitLab
http://inem.at
Software developer since 2002
2008
→ SOLID principles
→ Design partterns
→ Refactoring techniques
→ Architecture types
→ Code smells identification
"From Rails way to
modular
architecture"
"Stop being Rails
Developer"
RailsHurts.com
Don't be the best
student in class
What intern gets:
→ project in portfolio
→ development from idea to production
→ teamwork experience
→ remote work experience
Technologies
→ Twitter Bootstrap
→ Haml, Sass, jQuery
→ Rails, Sinatra or Lotus(Hanami)
Requirements
→ basic ruby/rails knowledge
→ 20 hours/week min
Need a test to
choose the best!
Test → Aptitude test
Part 1 requirements
→ registration
→ list of products
→ create product
→ show product
Part 2
Part 2
Part 2
→ 3 different types of users
→ different registration forms
→ different types of products
→ different permissions
Part 3
Part 3
→ Ability to "purchase a product"
→ Work with external API
→ Complicated "purchase" logic
Final result:
validates :avatar, presence: true, if: "role == Role.with_name(:shop) || role == Role.with_name(:administrator)"
validates :password, length: { minimum: 10 },if: "role == Role.with_name(:administrator)"
validates :name, :last_name, :passport_photo, :birth_date, presence: true, if: "role == Role.with_name(:administrator)"
validates :shop_title, presence: true, if: "role == Role.with_name(:shop)"
validates :password, length: { minimum: 8 }, if: "role == Role.with_name(:shop)"
validates :password, length: { minimum: 6 }, if: "role == Role.with_name(:user)"
def buy
@product = Product.find params[:id]
if @product.pro or
not @product.user.is_a? Shop or
current_user.email.split('.')[-1] == 'com'
flash[:alert] = "You can't buy this product"
else
photos = RestClient.get 'http://jsonplaceholder.typicode.com/photos/'
photo = JSON.parse(photos).sample
thumbnail = photo['thumbnailUrl']
url = photo['url']
thumbnail_color = thumbnail.split('/')[-1].to_i 16
url_color = url.split('/')[-1].to_i 16
if thumbnail_color > url_color
flash[:alert] = 'An error happened'
BuyMailer.admins_buy_fail(current_user).deliver_now!
else
flash[:notice] = 'Success'
BuyMailer.user_buy_success(current_user, url).deliver_now!
todos = RestClient.post 'http://jsonplaceholder.typicode.com/todos', {}
todo_id = JSON.parse(todos)['id']
BuyMailer.admins_buy_success(todo_id).deliver_now!
end
end
redirect_to :back
end
def buy
@product = Product.find(params[:id])
if current_user.can_buy?
if @product.sell_able?
photo_url = get_photo
if photo_url.nil?
flash[:alert] = "Sorry, _you_ can't buy this product. Try again later"
AdministratorMailer.buy_error(current_user.email).deliver_later
redirect_to :back
else
post = HTTParty.post("http://jsonplaceholder.typicode.com/todos")
post_id = post['id']
AdministratorMailer.successfull_buy(post_id).deliver_later
UserMailer.successfull_buy(current_user, photo_url).deliver_later
redirect_to(:back)
end
else
flash[:alert] = "Sorry, we can't sell _this_ product"
redirect_to :back
end
else
flash[:alert] = "Sorry, _you_ cant buy _anything_"
redirect_to(:back)
end
end
Common mistakes:
1. Ignoring levels of abstraction
2. Gemification
3. Nowbody knows about service objects
4. Put business logic in random places
5. Bad naming
Next steps:
1. Group hangout codereview
2. Lecture about patterns
3. Refactoring
4. Cross code review
Project work
Project work:
Results
railshurts.com/quiz
Internship automatization
github.com/lenshq
Problems
Problems
→ collective irresponsibility
→ inability to communicate
→ lack of motivation
→ a lack of mentors
BURNOUT
Mistakes
→ Making it free?
→ Too big teams (2 is enough)
→ Allowing everyone to participate in
projects
Worked out not so well:
→ Project work
Worked out well:
→ Aptitude test
Today
Junior needs
→ real tasks to work on
→ some achievment to put
into portfolio
→ whole development
cycle experience
→ team work experience
Seniors
→ routine tasks
→ research tasks
→ nice to have features
→ low priority features
→ missing features in their
favorite open source
project
→ side project ideas
If I do it again:
→ more "tests"
→ call for mentors
→ turn mentor's experience into their
"tests"
→ reject newbies
inem.at
inem@bk.ru
@inem

More Related Content

Viewers also liked

FokusPersonalFinance_April2016
FokusPersonalFinance_April2016FokusPersonalFinance_April2016
FokusPersonalFinance_April2016Yannick Depr
 
First Draft of Thesis (preliminary design)
First Draft of Thesis (preliminary design)First Draft of Thesis (preliminary design)
First Draft of Thesis (preliminary design)JShep79
 
Derribando barreras
Derribando barrerasDerribando barreras
Derribando barrerasSebasAngel
 
Resultados para sus Afiliados de las AFP y Cías de Seguros 1982-2008
Resultados para sus Afiliados  de las AFP y Cías de  Seguros  1982-2008 Resultados para sus Afiliados  de las AFP y Cías de  Seguros  1982-2008
Resultados para sus Afiliados de las AFP y Cías de Seguros 1982-2008 Recuperación del cobre chileno
 
Fundraising Today and Tomorrow and the Next Generation of Canadian Giving
Fundraising Today and Tomorrow and the Next Generation of Canadian GivingFundraising Today and Tomorrow and the Next Generation of Canadian Giving
Fundraising Today and Tomorrow and the Next Generation of Canadian Givinghjc
 
20110705 guardiola trofeo_powerade
20110705 guardiola trofeo_powerade20110705 guardiola trofeo_powerade
20110705 guardiola trofeo_poweradeSpain Sports Network
 
Seminario papel cero Agenda y conferencistas
Seminario papel cero Agenda y conferencistas Seminario papel cero Agenda y conferencistas
Seminario papel cero Agenda y conferencistas Saginfo & Co
 
Fundación Deporte para todos XII
Fundación Deporte para todos XIIFundación Deporte para todos XII
Fundación Deporte para todos XIICarlos Petit
 
Second Screen Marketing in Deutschland 2013
Second Screen Marketing in Deutschland 2013Second Screen Marketing in Deutschland 2013
Second Screen Marketing in Deutschland 2013pilot Screentime GmbH
 
Managing Water on Your Farm - Presented by Mark Shepard
Managing Water on Your Farm - Presented by Mark ShepardManaging Water on Your Farm - Presented by Mark Shepard
Managing Water on Your Farm - Presented by Mark ShepardDiegoFooter
 
Aplicación de métodos simplificados de evaluación riesgo quimico
Aplicación de métodos simplificados de evaluación riesgo quimicoAplicación de métodos simplificados de evaluación riesgo quimico
Aplicación de métodos simplificados de evaluación riesgo quimicoCosmo Palasio
 
Can content marketing build exports?
Can content marketing build exports?Can content marketing build exports?
Can content marketing build exports?Axonn Media
 
Hi-Force Presentation
Hi-Force PresentationHi-Force Presentation
Hi-Force Presentationguestb97bb19
 

Viewers also liked (20)

FokusPersonalFinance_April2016
FokusPersonalFinance_April2016FokusPersonalFinance_April2016
FokusPersonalFinance_April2016
 
First Draft of Thesis (preliminary design)
First Draft of Thesis (preliminary design)First Draft of Thesis (preliminary design)
First Draft of Thesis (preliminary design)
 
Derribando barreras
Derribando barrerasDerribando barreras
Derribando barreras
 
Resultados para sus Afiliados de las AFP y Cías de Seguros 1982-2008
Resultados para sus Afiliados  de las AFP y Cías de  Seguros  1982-2008 Resultados para sus Afiliados  de las AFP y Cías de  Seguros  1982-2008
Resultados para sus Afiliados de las AFP y Cías de Seguros 1982-2008
 
Krar by ns
Krar by nsKrar by ns
Krar by ns
 
Riyaz Golandoss
Riyaz GolandossRiyaz Golandoss
Riyaz Golandoss
 
Fundraising Today and Tomorrow and the Next Generation of Canadian Giving
Fundraising Today and Tomorrow and the Next Generation of Canadian GivingFundraising Today and Tomorrow and the Next Generation of Canadian Giving
Fundraising Today and Tomorrow and the Next Generation of Canadian Giving
 
Portafolio dharmashala
Portafolio dharmashalaPortafolio dharmashala
Portafolio dharmashala
 
20110705 guardiola trofeo_powerade
20110705 guardiola trofeo_powerade20110705 guardiola trofeo_powerade
20110705 guardiola trofeo_powerade
 
Seminario papel cero Agenda y conferencistas
Seminario papel cero Agenda y conferencistas Seminario papel cero Agenda y conferencistas
Seminario papel cero Agenda y conferencistas
 
REXONA MEN LATAM
REXONA MEN LATAMREXONA MEN LATAM
REXONA MEN LATAM
 
Fundación Deporte para todos XII
Fundación Deporte para todos XIIFundación Deporte para todos XII
Fundación Deporte para todos XII
 
Second Screen Marketing in Deutschland 2013
Second Screen Marketing in Deutschland 2013Second Screen Marketing in Deutschland 2013
Second Screen Marketing in Deutschland 2013
 
Managing Water on Your Farm - Presented by Mark Shepard
Managing Water on Your Farm - Presented by Mark ShepardManaging Water on Your Farm - Presented by Mark Shepard
Managing Water on Your Farm - Presented by Mark Shepard
 
01 termoquímica
01 termoquímica01 termoquímica
01 termoquímica
 
Aplicación de métodos simplificados de evaluación riesgo quimico
Aplicación de métodos simplificados de evaluación riesgo quimicoAplicación de métodos simplificados de evaluación riesgo quimico
Aplicación de métodos simplificados de evaluación riesgo quimico
 
Can content marketing build exports?
Can content marketing build exports?Can content marketing build exports?
Can content marketing build exports?
 
Hi-Force Presentation
Hi-Force PresentationHi-Force Presentation
Hi-Force Presentation
 
E28 dia
E28 diaE28 dia
E28 dia
 
Alluc: The New VSES
Alluc: The New VSESAlluc: The New VSES
Alluc: The New VSES
 

Similar to What I Have Learned from Organizing Remote Internship for Ruby developers

Building Multi-Tenant and SaaS products in PHP - CloudConf 2015
Building Multi-Tenant and SaaS products in PHP - CloudConf 2015Building Multi-Tenant and SaaS products in PHP - CloudConf 2015
Building Multi-Tenant and SaaS products in PHP - CloudConf 2015Innomatic Platform
 
#NewMeetup Performance
#NewMeetup Performance#NewMeetup Performance
#NewMeetup PerformanceJustin Cataldo
 
Introduction to Django
Introduction to DjangoIntroduction to Django
Introduction to DjangoJoaquim Rocha
 
Mobile, web and cloud - the triple crown of modern applications
Mobile, web and cloud -  the triple crown of modern applicationsMobile, web and cloud -  the triple crown of modern applications
Mobile, web and cloud - the triple crown of modern applicationsIdo Green
 
Selendroid - Selenium for Android
Selendroid - Selenium for AndroidSelendroid - Selenium for Android
Selendroid - Selenium for AndroidDominik Dary
 
The Web Components interoperability challenge - Horacio Gonzalez - Codemotion...
The Web Components interoperability challenge - Horacio Gonzalez - Codemotion...The Web Components interoperability challenge - Horacio Gonzalez - Codemotion...
The Web Components interoperability challenge - Horacio Gonzalez - Codemotion...Codemotion
 
Reactive Type-safe WebComponents
Reactive Type-safe WebComponentsReactive Type-safe WebComponents
Reactive Type-safe WebComponentsMartin Hochel
 
SharePoint Cincy 2012 - jQuery essentials
SharePoint Cincy 2012 - jQuery essentialsSharePoint Cincy 2012 - jQuery essentials
SharePoint Cincy 2012 - jQuery essentialsMark Rackley
 
Moving away from legacy code with BDD
Moving away from legacy code with BDDMoving away from legacy code with BDD
Moving away from legacy code with BDDKonstantin Kudryashov
 
Os piores códigos Ruby já vistos - TDC Florianópolis 2016
Os piores códigos Ruby já vistos - TDC Florianópolis 2016Os piores códigos Ruby já vistos - TDC Florianópolis 2016
Os piores códigos Ruby já vistos - TDC Florianópolis 2016Fernando Hamasaki de Amorim
 
Crash Course in AngularJS + Ionic (Deep dive)
Crash Course in AngularJS + Ionic (Deep dive)Crash Course in AngularJS + Ionic (Deep dive)
Crash Course in AngularJS + Ionic (Deep dive)ColdFusionConference
 
A Story about AngularJS modularization development
A Story about AngularJS modularization developmentA Story about AngularJS modularization development
A Story about AngularJS modularization developmentJohannes Weber
 
Rails antipattern-public
Rails antipattern-publicRails antipattern-public
Rails antipattern-publicChul Ju Hong
 
Design strategies for AngularJS
Design strategies for AngularJSDesign strategies for AngularJS
Design strategies for AngularJSSmartOrg
 
Google App Engine in 40 minutes (the absolute essentials)
Google App Engine in 40 minutes (the absolute essentials)Google App Engine in 40 minutes (the absolute essentials)
Google App Engine in 40 minutes (the absolute essentials)Python Ireland
 
Rails antipatterns
Rails antipatternsRails antipatterns
Rails antipatternsChul Ju Hong
 
Desenvolvendo uma aplicação híbrida para Android e IOs utilizando Ionic, aces...
Desenvolvendo uma aplicação híbrida para Android e IOs utilizando Ionic, aces...Desenvolvendo uma aplicação híbrida para Android e IOs utilizando Ionic, aces...
Desenvolvendo uma aplicação híbrida para Android e IOs utilizando Ionic, aces...Juliano Martins
 
Pengenalan AngularJS
Pengenalan AngularJSPengenalan AngularJS
Pengenalan AngularJSEdi Santoso
 

Similar to What I Have Learned from Organizing Remote Internship for Ruby developers (20)

Building Multi-Tenant and SaaS products in PHP - CloudConf 2015
Building Multi-Tenant and SaaS products in PHP - CloudConf 2015Building Multi-Tenant and SaaS products in PHP - CloudConf 2015
Building Multi-Tenant and SaaS products in PHP - CloudConf 2015
 
#NewMeetup Performance
#NewMeetup Performance#NewMeetup Performance
#NewMeetup Performance
 
Introduction to Django
Introduction to DjangoIntroduction to Django
Introduction to Django
 
Mobile, web and cloud - the triple crown of modern applications
Mobile, web and cloud -  the triple crown of modern applicationsMobile, web and cloud -  the triple crown of modern applications
Mobile, web and cloud - the triple crown of modern applications
 
Selendroid - Selenium for Android
Selendroid - Selenium for AndroidSelendroid - Selenium for Android
Selendroid - Selenium for Android
 
The Web Components interoperability challenge - Horacio Gonzalez - Codemotion...
The Web Components interoperability challenge - Horacio Gonzalez - Codemotion...The Web Components interoperability challenge - Horacio Gonzalez - Codemotion...
The Web Components interoperability challenge - Horacio Gonzalez - Codemotion...
 
Reactive Type-safe WebComponents
Reactive Type-safe WebComponentsReactive Type-safe WebComponents
Reactive Type-safe WebComponents
 
SharePoint Cincy 2012 - jQuery essentials
SharePoint Cincy 2012 - jQuery essentialsSharePoint Cincy 2012 - jQuery essentials
SharePoint Cincy 2012 - jQuery essentials
 
Moving away from legacy code with BDD
Moving away from legacy code with BDDMoving away from legacy code with BDD
Moving away from legacy code with BDD
 
Os piores códigos Ruby já vistos - TDC Florianópolis 2016
Os piores códigos Ruby já vistos - TDC Florianópolis 2016Os piores códigos Ruby já vistos - TDC Florianópolis 2016
Os piores códigos Ruby já vistos - TDC Florianópolis 2016
 
Crash Course in AngularJS + Ionic (Deep dive)
Crash Course in AngularJS + Ionic (Deep dive)Crash Course in AngularJS + Ionic (Deep dive)
Crash Course in AngularJS + Ionic (Deep dive)
 
A Story about AngularJS modularization development
A Story about AngularJS modularization developmentA Story about AngularJS modularization development
A Story about AngularJS modularization development
 
End-to-end testing with geb
End-to-end testing with gebEnd-to-end testing with geb
End-to-end testing with geb
 
Rails antipattern-public
Rails antipattern-publicRails antipattern-public
Rails antipattern-public
 
Design strategies for AngularJS
Design strategies for AngularJSDesign strategies for AngularJS
Design strategies for AngularJS
 
Google App Engine in 40 minutes (the absolute essentials)
Google App Engine in 40 minutes (the absolute essentials)Google App Engine in 40 minutes (the absolute essentials)
Google App Engine in 40 minutes (the absolute essentials)
 
DEEPAK RAWAT
DEEPAK RAWATDEEPAK RAWAT
DEEPAK RAWAT
 
Rails antipatterns
Rails antipatternsRails antipatterns
Rails antipatterns
 
Desenvolvendo uma aplicação híbrida para Android e IOs utilizando Ionic, aces...
Desenvolvendo uma aplicação híbrida para Android e IOs utilizando Ionic, aces...Desenvolvendo uma aplicação híbrida para Android e IOs utilizando Ionic, aces...
Desenvolvendo uma aplicação híbrida para Android e IOs utilizando Ionic, aces...
 
Pengenalan AngularJS
Pengenalan AngularJSPengenalan AngularJS
Pengenalan AngularJS
 

More from Ivan Nemytchenko

Breaking Bad Habits with GitLab CI
Breaking Bad Habits with GitLab CIBreaking Bad Habits with GitLab CI
Breaking Bad Habits with GitLab CIIvan Nemytchenko
 
How to stop being Rails Developer
How to stop being Rails DeveloperHow to stop being Rails Developer
How to stop being Rails DeveloperIvan Nemytchenko
 
Breaking bad habits with GitLab CI
Breaking bad habits with GitLab CIBreaking bad habits with GitLab CI
Breaking bad habits with GitLab CIIvan Nemytchenko
 
Lean Poker in Lviv announce
Lean Poker in Lviv announceLean Poker in Lviv announce
Lean Poker in Lviv announceIvan Nemytchenko
 
How to use any static site generator with GitLab Pages.
How to use any static site generator with GitLab Pages. How to use any static site generator with GitLab Pages.
How to use any static site generator with GitLab Pages. Ivan Nemytchenko
 
Опыт организации удаленной стажировки для рубистов
Опыт организации удаленной стажировки для рубистовОпыт организации удаленной стажировки для рубистов
Опыт организации удаленной стажировки для рубистовIvan Nemytchenko
 
Principles. Misunderstood. Applied
Principles. Misunderstood. AppliedPrinciples. Misunderstood. Applied
Principles. Misunderstood. AppliedIvan Nemytchenko
 
From Rails-way to modular architecture
From Rails-way to modular architectureFrom Rails-way to modular architecture
From Rails-way to modular architectureIvan Nemytchenko
 
Рассказ про RedDotRubyConf 2014
Рассказ про RedDotRubyConf 2014Рассказ про RedDotRubyConf 2014
Рассказ про RedDotRubyConf 2014Ivan Nemytchenko
 
Рефакторинг rails-приложения. С чего начать?
Рефакторинг rails-приложения. С чего начать?Рефакторинг rails-приложения. С чего начать?
Рефакторинг rails-приложения. С чего начать?Ivan Nemytchenko
 
Different approaches to ruby web applications architecture
Different approaches to ruby web applications architectureDifferent approaches to ruby web applications architecture
Different approaches to ruby web applications architectureIvan Nemytchenko
 
От Rails-way к модульной архитектуре
От Rails-way к модульной архитектуреОт Rails-way к модульной архитектуре
От Rails-way к модульной архитектуреIvan Nemytchenko
 
Coffescript - счастье для javascript-разработчика
Coffescript - счастье для javascript-разработчикаCoffescript - счастье для javascript-разработчика
Coffescript - счастье для javascript-разработчикаIvan Nemytchenko
 
Tequila - язык для продвинутой генерации JSON
Tequila - язык для продвинутой генерации JSONTequila - язык для продвинутой генерации JSON
Tequila - язык для продвинутой генерации JSONIvan Nemytchenko
 

More from Ivan Nemytchenko (15)

Breaking Bad Habits with GitLab CI
Breaking Bad Habits with GitLab CIBreaking Bad Habits with GitLab CI
Breaking Bad Habits with GitLab CI
 
How to stop being Rails Developer
How to stop being Rails DeveloperHow to stop being Rails Developer
How to stop being Rails Developer
 
Breaking bad habits with GitLab CI
Breaking bad habits with GitLab CIBreaking bad habits with GitLab CI
Breaking bad habits with GitLab CI
 
Lean Poker in Lviv announce
Lean Poker in Lviv announceLean Poker in Lviv announce
Lean Poker in Lviv announce
 
How to use any static site generator with GitLab Pages.
How to use any static site generator with GitLab Pages. How to use any static site generator with GitLab Pages.
How to use any static site generator with GitLab Pages.
 
Опыт организации удаленной стажировки для рубистов
Опыт организации удаленной стажировки для рубистовОпыт организации удаленной стажировки для рубистов
Опыт организации удаленной стажировки для рубистов
 
Principles. Misunderstood. Applied
Principles. Misunderstood. AppliedPrinciples. Misunderstood. Applied
Principles. Misunderstood. Applied
 
From Rails-way to modular architecture
From Rails-way to modular architectureFrom Rails-way to modular architecture
From Rails-way to modular architecture
 
Рассказ про RedDotRubyConf 2014
Рассказ про RedDotRubyConf 2014Рассказ про RedDotRubyConf 2014
Рассказ про RedDotRubyConf 2014
 
Рефакторинг rails-приложения. С чего начать?
Рефакторинг rails-приложения. С чего начать?Рефакторинг rails-приложения. С чего начать?
Рефакторинг rails-приложения. С чего начать?
 
Different approaches to ruby web applications architecture
Different approaches to ruby web applications architectureDifferent approaches to ruby web applications architecture
Different approaches to ruby web applications architecture
 
От Rails-way к модульной архитектуре
От Rails-way к модульной архитектуреОт Rails-way к модульной архитектуре
От Rails-way к модульной архитектуре
 
ActiveRecord vs Mongoid
ActiveRecord vs MongoidActiveRecord vs Mongoid
ActiveRecord vs Mongoid
 
Coffescript - счастье для javascript-разработчика
Coffescript - счастье для javascript-разработчикаCoffescript - счастье для javascript-разработчика
Coffescript - счастье для javascript-разработчика
 
Tequila - язык для продвинутой генерации JSON
Tequila - язык для продвинутой генерации JSONTequila - язык для продвинутой генерации JSON
Tequila - язык для продвинутой генерации JSON
 

Recently uploaded

data_management_and _data_science_cheat_sheet.pdf
data_management_and _data_science_cheat_sheet.pdfdata_management_and _data_science_cheat_sheet.pdf
data_management_and _data_science_cheat_sheet.pdfJiananWang21
 
University management System project report..pdf
University management System project report..pdfUniversity management System project report..pdf
University management System project report..pdfKamal Acharya
 
UNIT-II FMM-Flow Through Circular Conduits
UNIT-II FMM-Flow Through Circular ConduitsUNIT-II FMM-Flow Through Circular Conduits
UNIT-II FMM-Flow Through Circular Conduitsrknatarajan
 
Top Rated Pune Call Girls Budhwar Peth ⟟ 6297143586 ⟟ Call Me For Genuine Se...
Top Rated  Pune Call Girls Budhwar Peth ⟟ 6297143586 ⟟ Call Me For Genuine Se...Top Rated  Pune Call Girls Budhwar Peth ⟟ 6297143586 ⟟ Call Me For Genuine Se...
Top Rated Pune Call Girls Budhwar Peth ⟟ 6297143586 ⟟ Call Me For Genuine Se...Call Girls in Nagpur High Profile
 
Booking open Available Pune Call Girls Koregaon Park 6297143586 Call Hot Ind...
Booking open Available Pune Call Girls Koregaon Park  6297143586 Call Hot Ind...Booking open Available Pune Call Girls Koregaon Park  6297143586 Call Hot Ind...
Booking open Available Pune Call Girls Koregaon Park 6297143586 Call Hot Ind...Call Girls in Nagpur High Profile
 
BSides Seattle 2024 - Stopping Ethan Hunt From Taking Your Data.pptx
BSides Seattle 2024 - Stopping Ethan Hunt From Taking Your Data.pptxBSides Seattle 2024 - Stopping Ethan Hunt From Taking Your Data.pptx
BSides Seattle 2024 - Stopping Ethan Hunt From Taking Your Data.pptxfenichawla
 
chapter 5.pptx: drainage and irrigation engineering
chapter 5.pptx: drainage and irrigation engineeringchapter 5.pptx: drainage and irrigation engineering
chapter 5.pptx: drainage and irrigation engineeringmulugeta48
 
The Most Attractive Pune Call Girls Manchar 8250192130 Will You Miss This Cha...
The Most Attractive Pune Call Girls Manchar 8250192130 Will You Miss This Cha...The Most Attractive Pune Call Girls Manchar 8250192130 Will You Miss This Cha...
The Most Attractive Pune Call Girls Manchar 8250192130 Will You Miss This Cha...ranjana rawat
 
ONLINE FOOD ORDER SYSTEM PROJECT REPORT.pdf
ONLINE FOOD ORDER SYSTEM PROJECT REPORT.pdfONLINE FOOD ORDER SYSTEM PROJECT REPORT.pdf
ONLINE FOOD ORDER SYSTEM PROJECT REPORT.pdfKamal Acharya
 
UNIT-V FMM.HYDRAULIC TURBINE - Construction and working
UNIT-V FMM.HYDRAULIC TURBINE - Construction and workingUNIT-V FMM.HYDRAULIC TURBINE - Construction and working
UNIT-V FMM.HYDRAULIC TURBINE - Construction and workingrknatarajan
 
UNIT-III FMM. DIMENSIONAL ANALYSIS
UNIT-III FMM.        DIMENSIONAL ANALYSISUNIT-III FMM.        DIMENSIONAL ANALYSIS
UNIT-III FMM. DIMENSIONAL ANALYSISrknatarajan
 
Call for Papers - International Journal of Intelligent Systems and Applicatio...
Call for Papers - International Journal of Intelligent Systems and Applicatio...Call for Papers - International Journal of Intelligent Systems and Applicatio...
Call for Papers - International Journal of Intelligent Systems and Applicatio...Christo Ananth
 
The Most Attractive Pune Call Girls Budhwar Peth 8250192130 Will You Miss Thi...
The Most Attractive Pune Call Girls Budhwar Peth 8250192130 Will You Miss Thi...The Most Attractive Pune Call Girls Budhwar Peth 8250192130 Will You Miss Thi...
The Most Attractive Pune Call Girls Budhwar Peth 8250192130 Will You Miss Thi...ranjana rawat
 
Thermal Engineering Unit - I & II . ppt
Thermal Engineering  Unit - I & II . pptThermal Engineering  Unit - I & II . ppt
Thermal Engineering Unit - I & II . pptDineshKumar4165
 
Call Girls Walvekar Nagar Call Me 7737669865 Budget Friendly No Advance Booking
Call Girls Walvekar Nagar Call Me 7737669865 Budget Friendly No Advance BookingCall Girls Walvekar Nagar Call Me 7737669865 Budget Friendly No Advance Booking
Call Girls Walvekar Nagar Call Me 7737669865 Budget Friendly No Advance Bookingroncy bisnoi
 
UNIT-IFLUID PROPERTIES & FLOW CHARACTERISTICS
UNIT-IFLUID PROPERTIES & FLOW CHARACTERISTICSUNIT-IFLUID PROPERTIES & FLOW CHARACTERISTICS
UNIT-IFLUID PROPERTIES & FLOW CHARACTERISTICSrknatarajan
 
Thermal Engineering -unit - III & IV.ppt
Thermal Engineering -unit - III & IV.pptThermal Engineering -unit - III & IV.ppt
Thermal Engineering -unit - III & IV.pptDineshKumar4165
 
UNIT - IV - Air Compressors and its Performance
UNIT - IV - Air Compressors and its PerformanceUNIT - IV - Air Compressors and its Performance
UNIT - IV - Air Compressors and its Performancesivaprakash250
 

Recently uploaded (20)

data_management_and _data_science_cheat_sheet.pdf
data_management_and _data_science_cheat_sheet.pdfdata_management_and _data_science_cheat_sheet.pdf
data_management_and _data_science_cheat_sheet.pdf
 
University management System project report..pdf
University management System project report..pdfUniversity management System project report..pdf
University management System project report..pdf
 
UNIT-II FMM-Flow Through Circular Conduits
UNIT-II FMM-Flow Through Circular ConduitsUNIT-II FMM-Flow Through Circular Conduits
UNIT-II FMM-Flow Through Circular Conduits
 
NFPA 5000 2024 standard .
NFPA 5000 2024 standard                                  .NFPA 5000 2024 standard                                  .
NFPA 5000 2024 standard .
 
Top Rated Pune Call Girls Budhwar Peth ⟟ 6297143586 ⟟ Call Me For Genuine Se...
Top Rated  Pune Call Girls Budhwar Peth ⟟ 6297143586 ⟟ Call Me For Genuine Se...Top Rated  Pune Call Girls Budhwar Peth ⟟ 6297143586 ⟟ Call Me For Genuine Se...
Top Rated Pune Call Girls Budhwar Peth ⟟ 6297143586 ⟟ Call Me For Genuine Se...
 
Booking open Available Pune Call Girls Koregaon Park 6297143586 Call Hot Ind...
Booking open Available Pune Call Girls Koregaon Park  6297143586 Call Hot Ind...Booking open Available Pune Call Girls Koregaon Park  6297143586 Call Hot Ind...
Booking open Available Pune Call Girls Koregaon Park 6297143586 Call Hot Ind...
 
BSides Seattle 2024 - Stopping Ethan Hunt From Taking Your Data.pptx
BSides Seattle 2024 - Stopping Ethan Hunt From Taking Your Data.pptxBSides Seattle 2024 - Stopping Ethan Hunt From Taking Your Data.pptx
BSides Seattle 2024 - Stopping Ethan Hunt From Taking Your Data.pptx
 
chapter 5.pptx: drainage and irrigation engineering
chapter 5.pptx: drainage and irrigation engineeringchapter 5.pptx: drainage and irrigation engineering
chapter 5.pptx: drainage and irrigation engineering
 
The Most Attractive Pune Call Girls Manchar 8250192130 Will You Miss This Cha...
The Most Attractive Pune Call Girls Manchar 8250192130 Will You Miss This Cha...The Most Attractive Pune Call Girls Manchar 8250192130 Will You Miss This Cha...
The Most Attractive Pune Call Girls Manchar 8250192130 Will You Miss This Cha...
 
ONLINE FOOD ORDER SYSTEM PROJECT REPORT.pdf
ONLINE FOOD ORDER SYSTEM PROJECT REPORT.pdfONLINE FOOD ORDER SYSTEM PROJECT REPORT.pdf
ONLINE FOOD ORDER SYSTEM PROJECT REPORT.pdf
 
UNIT-V FMM.HYDRAULIC TURBINE - Construction and working
UNIT-V FMM.HYDRAULIC TURBINE - Construction and workingUNIT-V FMM.HYDRAULIC TURBINE - Construction and working
UNIT-V FMM.HYDRAULIC TURBINE - Construction and working
 
UNIT-III FMM. DIMENSIONAL ANALYSIS
UNIT-III FMM.        DIMENSIONAL ANALYSISUNIT-III FMM.        DIMENSIONAL ANALYSIS
UNIT-III FMM. DIMENSIONAL ANALYSIS
 
(INDIRA) Call Girl Bhosari Call Now 8617697112 Bhosari Escorts 24x7
(INDIRA) Call Girl Bhosari Call Now 8617697112 Bhosari Escorts 24x7(INDIRA) Call Girl Bhosari Call Now 8617697112 Bhosari Escorts 24x7
(INDIRA) Call Girl Bhosari Call Now 8617697112 Bhosari Escorts 24x7
 
Call for Papers - International Journal of Intelligent Systems and Applicatio...
Call for Papers - International Journal of Intelligent Systems and Applicatio...Call for Papers - International Journal of Intelligent Systems and Applicatio...
Call for Papers - International Journal of Intelligent Systems and Applicatio...
 
The Most Attractive Pune Call Girls Budhwar Peth 8250192130 Will You Miss Thi...
The Most Attractive Pune Call Girls Budhwar Peth 8250192130 Will You Miss Thi...The Most Attractive Pune Call Girls Budhwar Peth 8250192130 Will You Miss Thi...
The Most Attractive Pune Call Girls Budhwar Peth 8250192130 Will You Miss Thi...
 
Thermal Engineering Unit - I & II . ppt
Thermal Engineering  Unit - I & II . pptThermal Engineering  Unit - I & II . ppt
Thermal Engineering Unit - I & II . ppt
 
Call Girls Walvekar Nagar Call Me 7737669865 Budget Friendly No Advance Booking
Call Girls Walvekar Nagar Call Me 7737669865 Budget Friendly No Advance BookingCall Girls Walvekar Nagar Call Me 7737669865 Budget Friendly No Advance Booking
Call Girls Walvekar Nagar Call Me 7737669865 Budget Friendly No Advance Booking
 
UNIT-IFLUID PROPERTIES & FLOW CHARACTERISTICS
UNIT-IFLUID PROPERTIES & FLOW CHARACTERISTICSUNIT-IFLUID PROPERTIES & FLOW CHARACTERISTICS
UNIT-IFLUID PROPERTIES & FLOW CHARACTERISTICS
 
Thermal Engineering -unit - III & IV.ppt
Thermal Engineering -unit - III & IV.pptThermal Engineering -unit - III & IV.ppt
Thermal Engineering -unit - III & IV.ppt
 
UNIT - IV - Air Compressors and its Performance
UNIT - IV - Air Compressors and its PerformanceUNIT - IV - Air Compressors and its Performance
UNIT - IV - Air Compressors and its Performance
 

What I Have Learned from Organizing Remote Internship for Ruby developers

  • 1. Remote internship for Ruby Developers Ivan Nemytchenko, @inem Developer Advocate at GitLab http://inem.at
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15. → SOLID principles → Design partterns → Refactoring techniques → Architecture types → Code smells identification
  • 16. "From Rails way to modular architecture" "Stop being Rails Developer"
  • 18. Don't be the best student in class
  • 19.
  • 20.
  • 21.
  • 22. What intern gets: → project in portfolio → development from idea to production → teamwork experience → remote work experience
  • 23. Technologies → Twitter Bootstrap → Haml, Sass, jQuery → Rails, Sinatra or Lotus(Hanami)
  • 24. Requirements → basic ruby/rails knowledge → 20 hours/week min
  • 25.
  • 26.
  • 27. Need a test to choose the best!
  • 28.
  • 29.
  • 31. Part 1 requirements → registration → list of products → create product → show product
  • 34. Part 2 → 3 different types of users → different registration forms → different types of products → different permissions
  • 36. Part 3 → Ability to "purchase a product" → Work with external API → Complicated "purchase" logic
  • 38. validates :avatar, presence: true, if: "role == Role.with_name(:shop) || role == Role.with_name(:administrator)" validates :password, length: { minimum: 10 },if: "role == Role.with_name(:administrator)" validates :name, :last_name, :passport_photo, :birth_date, presence: true, if: "role == Role.with_name(:administrator)" validates :shop_title, presence: true, if: "role == Role.with_name(:shop)" validates :password, length: { minimum: 8 }, if: "role == Role.with_name(:shop)" validates :password, length: { minimum: 6 }, if: "role == Role.with_name(:user)"
  • 39. def buy @product = Product.find params[:id] if @product.pro or not @product.user.is_a? Shop or current_user.email.split('.')[-1] == 'com' flash[:alert] = "You can't buy this product" else photos = RestClient.get 'http://jsonplaceholder.typicode.com/photos/' photo = JSON.parse(photos).sample thumbnail = photo['thumbnailUrl'] url = photo['url'] thumbnail_color = thumbnail.split('/')[-1].to_i 16 url_color = url.split('/')[-1].to_i 16 if thumbnail_color > url_color flash[:alert] = 'An error happened' BuyMailer.admins_buy_fail(current_user).deliver_now! else flash[:notice] = 'Success' BuyMailer.user_buy_success(current_user, url).deliver_now! todos = RestClient.post 'http://jsonplaceholder.typicode.com/todos', {} todo_id = JSON.parse(todos)['id'] BuyMailer.admins_buy_success(todo_id).deliver_now! end end redirect_to :back end
  • 40. def buy @product = Product.find(params[:id]) if current_user.can_buy? if @product.sell_able? photo_url = get_photo if photo_url.nil? flash[:alert] = "Sorry, _you_ can't buy this product. Try again later" AdministratorMailer.buy_error(current_user.email).deliver_later redirect_to :back else post = HTTParty.post("http://jsonplaceholder.typicode.com/todos") post_id = post['id'] AdministratorMailer.successfull_buy(post_id).deliver_later UserMailer.successfull_buy(current_user, photo_url).deliver_later redirect_to(:back) end else flash[:alert] = "Sorry, we can't sell _this_ product" redirect_to :back end else flash[:alert] = "Sorry, _you_ cant buy _anything_" redirect_to(:back) end end
  • 41. Common mistakes: 1. Ignoring levels of abstraction 2. Gemification 3. Nowbody knows about service objects 4. Put business logic in random places 5. Bad naming
  • 42. Next steps: 1. Group hangout codereview 2. Lecture about patterns 3. Refactoring 4. Cross code review
  • 49.
  • 50.
  • 51. Problems → collective irresponsibility → inability to communicate → lack of motivation → a lack of mentors
  • 52.
  • 54. Mistakes → Making it free? → Too big teams (2 is enough) → Allowing everyone to participate in projects
  • 55. Worked out not so well: → Project work Worked out well: → Aptitude test
  • 56. Today
  • 57. Junior needs → real tasks to work on → some achievment to put into portfolio → whole development cycle experience → team work experience
  • 58.
  • 59.
  • 60.
  • 61.
  • 62.
  • 63.
  • 64.
  • 65.
  • 66.
  • 67.
  • 68.
  • 70. → routine tasks → research tasks → nice to have features → low priority features → missing features in their favorite open source project → side project ideas
  • 71.
  • 72.
  • 73.
  • 74.
  • 75.
  • 76.
  • 77.
  • 78.
  • 79.
  • 80.
  • 81.
  • 82.
  • 83.
  • 84. If I do it again: → more "tests" → call for mentors → turn mentor's experience into their "tests" → reject newbies