SlideShare a Scribd company logo
1 of 37
Hunter
Our
Faces
2
1. Beseda Dmitriy
2. Vasylenko Anton
3. Ihor Sierkov (Kamianets-Podilskyi)
4. Babkin Oleksiy (Kryviy Rig)
5. Dmytrus Myroslav (Stryi)
6. Oleg Kushch (Kharkiv)
7. Taras Mychats(Boryslav)
8. Tolkushyn Viktor (Lviv)
9. Plotnikov Ilya (Donetsk)
10. Chudnovets Andriy (Zaporizhya)
11. Alex Kaduk (Vinnytsia)
3
User
Story
Overview
4
Make
HR Job
Easier
Make notes
Team work Store history
Put thoughts in
order
Application
Design
5
Database
Diagram
6
Development with Entity
Framework
Migrations
7
...
Migrations benefits:
- Simply implementation of each change
- Strong pre-order changes
- Ability to undo changes
Repository
Pattern
8
Dependencies
Graph of
Application
9 Hunter Solution
Dependency
Injection
10
Benefits of DI are:
Reduced Dependencies
Reduced Dependency Carrying
More Reusable Code
More Testable Code
More Readable Code
Design
Pattern
11 Do you use MVC design pattern?
We use MVW (Model-View-Whatever)
Single page
application,
AJAX
SPA with Angular:
▸Interactive design
▸Less traffic
▸More
responsiveness
12
Authentication
vs
Authorization
13
JSON Web Tokens
(JWT)
OData
RESTful
APIs
14
OData helps you focus on your business logic!
You don’t worry about:
- the approaches to define request and response headers,
- status codes,
- HTTP methods,
- URL conventions,
- media types,
- payload formats,
- query options etc.
Data
Transfer
Objects
(DTO)
15
return _poolRepository.Get(id).ToPoolViewModel();
NUnit
NSubstitue
16
LinkedIn
Profile
Parser
17
Html Agility Pack 1.4.9
Full Public Information
➔ Name
➔ Headline
➔ Photo
➔ Skills
➔ Experience Time
➔ Languages...
Client
Side
18
JWT
JWT
Ways to use
19
Vacancies
List page
20 Add new or edit existing
vacancies.
Fill them with candidates and
use statuses to change
vacancies’ state
Vacancies
List page
21
Vacancy
page
22
Get all info about a certain
vacancy and candidates
included in this vacancy
Mark candidates with a “star”
to make them shortlisted
23
Vacancy
page
Create a
new
candidate
24
Add a new candidate by
entering his data yourself or let
Hunter fetch information about
the candidate from his LinkedIn
profile
25
Create a
new
candidate
26
Сandidate
details
27
Assigning
statuses
Assigning statuses for candidates makes working with them easier
28
Process
stages
Create a
new
candidate
29
Use notes of certain types to
comment on candidate’s skills
Use “thumb” buttons to
highlight positive or negative
notes with color
Create and view Feedbacks & Notes history with the Feedbacks menu that is located in Candidates
Card
30
Feedbacks &
Notes
Tests
31
Upload candidate’s test work
as file or add link to external
storage
Assign a technical specialist to
check the tests
Assigned tech specialist to check the test done by a candidate
32
Tests to
check
Notifications
&
Activity
33
Stay tuned with notifications
34
Notifications
Assign and Receive notification with the information about recontacting candidate on a certain
specified date.
Receive notifications for important actions made by you or your colleagues on Activity page.
35
Activity
36
http://binary-studio.com
http://academy.binary-studio.com
37

More Related Content

Similar to BSA 2015 - Finally project Hunter (.NET group)

GSK: How Knowledge Graphs Improve Clinical Reporting Workflows
GSK: How Knowledge Graphs Improve Clinical Reporting WorkflowsGSK: How Knowledge Graphs Improve Clinical Reporting Workflows
GSK: How Knowledge Graphs Improve Clinical Reporting WorkflowsNeo4j
 
Approaches To System Development
Approaches To System DevelopmentApproaches To System Development
Approaches To System DevelopmentHenhen Lukmana
 
An introduction to systems thinking: Concepts and simple models (part 1)
An introduction to systems thinking: Concepts and simple models (part 1)An introduction to systems thinking: Concepts and simple models (part 1)
An introduction to systems thinking: Concepts and simple models (part 1)ILRI
 
Why Questioning the Product is Important by McDonald's PM
Why Questioning the Product is Important by McDonald's PMWhy Questioning the Product is Important by McDonald's PM
Why Questioning the Product is Important by McDonald's PMProduct School
 
SE2023 0101 Software Development Process.pptx
SE2023 0101 Software Development Process.pptxSE2023 0101 Software Development Process.pptx
SE2023 0101 Software Development Process.pptxBharat Chawda
 
VMworld 2013: Building A Plan For EUC Transformation
VMworld 2013: Building A Plan For EUC Transformation VMworld 2013: Building A Plan For EUC Transformation
VMworld 2013: Building A Plan For EUC Transformation VMworld
 
Cqrs journey guide
Cqrs journey guideCqrs journey guide
Cqrs journey guideSteve Xu
 
Pi's
Pi'sPi's
Pi'sHCS
 
BSA 2016. Final Demo JS group
BSA 2016. Final Demo JS groupBSA 2016. Final Demo JS group
BSA 2016. Final Demo JS groupBinary Studio
 
Training Webinar: From a bad to an awesome user experience - Training Webinar
Training Webinar: From a bad to an awesome user experience - Training WebinarTraining Webinar: From a bad to an awesome user experience - Training Webinar
Training Webinar: From a bad to an awesome user experience - Training WebinarOutSystems
 
User Experience: A Lean UX Process
User Experience: A Lean UX ProcessUser Experience: A Lean UX Process
User Experience: A Lean UX ProcessRicardo Luiz
 
Aggregates, Entities and Value objects - Devnology 2010 community day
Aggregates, Entities and Value objects - Devnology 2010 community dayAggregates, Entities and Value objects - Devnology 2010 community day
Aggregates, Entities and Value objects - Devnology 2010 community dayRick van der Arend
 
Painting the Future of Big Data with Apache Spark and MongoDB
Painting the Future of Big Data with Apache Spark and MongoDBPainting the Future of Big Data with Apache Spark and MongoDB
Painting the Future of Big Data with Apache Spark and MongoDBMongoDB
 
Starting from Scratch with the MEAN Stack
Starting from Scratch with the MEAN StackStarting from Scratch with the MEAN Stack
Starting from Scratch with the MEAN StackMongoDB
 
Agile in MedTech: Essential Best Practices, and How to Support Them
Agile in MedTech: Essential Best Practices, and How to Support ThemAgile in MedTech: Essential Best Practices, and How to Support Them
Agile in MedTech: Essential Best Practices, and How to Support ThemIntland Software GmbH
 
PeopleSoft 9.2 HCM Features and Functions Including Fluid Mobile
PeopleSoft 9.2 HCM Features and Functions Including Fluid MobilePeopleSoft 9.2 HCM Features and Functions Including Fluid Mobile
PeopleSoft 9.2 HCM Features and Functions Including Fluid MobileNERUG
 
Smart Hydroponic Plant Growing System using IoT
Smart Hydroponic Plant Growing System using IoTSmart Hydroponic Plant Growing System using IoT
Smart Hydroponic Plant Growing System using IoTGustavo Sanchez Collado
 
Dynamics ax 2012 development overview
Dynamics ax 2012 development overviewDynamics ax 2012 development overview
Dynamics ax 2012 development overviewAli Raza Zaidi
 

Similar to BSA 2015 - Finally project Hunter (.NET group) (20)

GSK: How Knowledge Graphs Improve Clinical Reporting Workflows
GSK: How Knowledge Graphs Improve Clinical Reporting WorkflowsGSK: How Knowledge Graphs Improve Clinical Reporting Workflows
GSK: How Knowledge Graphs Improve Clinical Reporting Workflows
 
Satellid - Pitch Deck
Satellid - Pitch DeckSatellid - Pitch Deck
Satellid - Pitch Deck
 
Approaches To System Development
Approaches To System DevelopmentApproaches To System Development
Approaches To System Development
 
An introduction to systems thinking: Concepts and simple models (part 1)
An introduction to systems thinking: Concepts and simple models (part 1)An introduction to systems thinking: Concepts and simple models (part 1)
An introduction to systems thinking: Concepts and simple models (part 1)
 
Why Questioning the Product is Important by McDonald's PM
Why Questioning the Product is Important by McDonald's PMWhy Questioning the Product is Important by McDonald's PM
Why Questioning the Product is Important by McDonald's PM
 
SE2023 0101 Software Development Process.pptx
SE2023 0101 Software Development Process.pptxSE2023 0101 Software Development Process.pptx
SE2023 0101 Software Development Process.pptx
 
VMworld 2013: Building A Plan For EUC Transformation
VMworld 2013: Building A Plan For EUC Transformation VMworld 2013: Building A Plan For EUC Transformation
VMworld 2013: Building A Plan For EUC Transformation
 
Cqrs journey guide
Cqrs journey guideCqrs journey guide
Cqrs journey guide
 
Pi's
Pi'sPi's
Pi's
 
BSA 2016. Final Demo JS group
BSA 2016. Final Demo JS groupBSA 2016. Final Demo JS group
BSA 2016. Final Demo JS group
 
Training Webinar: From a bad to an awesome user experience - Training Webinar
Training Webinar: From a bad to an awesome user experience - Training WebinarTraining Webinar: From a bad to an awesome user experience - Training Webinar
Training Webinar: From a bad to an awesome user experience - Training Webinar
 
User Experience: A Lean UX Process
User Experience: A Lean UX ProcessUser Experience: A Lean UX Process
User Experience: A Lean UX Process
 
Aggregates, Entities and Value objects - Devnology 2010 community day
Aggregates, Entities and Value objects - Devnology 2010 community dayAggregates, Entities and Value objects - Devnology 2010 community day
Aggregates, Entities and Value objects - Devnology 2010 community day
 
Painting the Future of Big Data with Apache Spark and MongoDB
Painting the Future of Big Data with Apache Spark and MongoDBPainting the Future of Big Data with Apache Spark and MongoDB
Painting the Future of Big Data with Apache Spark and MongoDB
 
Starting from Scratch with the MEAN Stack
Starting from Scratch with the MEAN StackStarting from Scratch with the MEAN Stack
Starting from Scratch with the MEAN Stack
 
Agile in MedTech: Essential Best Practices, and How to Support Them
Agile in MedTech: Essential Best Practices, and How to Support ThemAgile in MedTech: Essential Best Practices, and How to Support Them
Agile in MedTech: Essential Best Practices, and How to Support Them
 
PeopleSoft 9.2 HCM Features and Functions Including Fluid Mobile
PeopleSoft 9.2 HCM Features and Functions Including Fluid MobilePeopleSoft 9.2 HCM Features and Functions Including Fluid Mobile
PeopleSoft 9.2 HCM Features and Functions Including Fluid Mobile
 
Smart Hydroponic Plant Growing System using IoT
Smart Hydroponic Plant Growing System using IoTSmart Hydroponic Plant Growing System using IoT
Smart Hydroponic Plant Growing System using IoT
 
Dynamics ax 2012 development overview
Dynamics ax 2012 development overviewDynamics ax 2012 development overview
Dynamics ax 2012 development overview
 
Data Science
Data ScienceData Science
Data Science
 

More from Binary Studio

Academy PRO: D3, part 3
Academy PRO: D3, part 3Academy PRO: D3, part 3
Academy PRO: D3, part 3Binary Studio
 
Academy PRO: D3, part 1
Academy PRO: D3, part 1Academy PRO: D3, part 1
Academy PRO: D3, part 1Binary Studio
 
Academy PRO: Cryptography 3
Academy PRO: Cryptography 3Academy PRO: Cryptography 3
Academy PRO: Cryptography 3Binary Studio
 
Academy PRO: Cryptography 1
Academy PRO: Cryptography 1Academy PRO: Cryptography 1
Academy PRO: Cryptography 1Binary Studio
 
Academy PRO: Advanced React Ecosystem. MobX
Academy PRO: Advanced React Ecosystem. MobXAcademy PRO: Advanced React Ecosystem. MobX
Academy PRO: Advanced React Ecosystem. MobXBinary Studio
 
Academy PRO: Docker. Part 4
Academy PRO: Docker. Part 4Academy PRO: Docker. Part 4
Academy PRO: Docker. Part 4Binary Studio
 
Academy PRO: Docker. Part 2
Academy PRO: Docker. Part 2Academy PRO: Docker. Part 2
Academy PRO: Docker. Part 2Binary Studio
 
Academy PRO: Docker. Part 1
Academy PRO: Docker. Part 1Academy PRO: Docker. Part 1
Academy PRO: Docker. Part 1Binary Studio
 
Binary Studio Academy 2017: JS team project - Orderly
Binary Studio Academy 2017: JS team project - OrderlyBinary Studio Academy 2017: JS team project - Orderly
Binary Studio Academy 2017: JS team project - OrderlyBinary Studio
 
Binary Studio Academy 2017: .NET team project - Unicorn
Binary Studio Academy 2017: .NET team project - UnicornBinary Studio Academy 2017: .NET team project - Unicorn
Binary Studio Academy 2017: .NET team project - UnicornBinary Studio
 
Academy PRO: React native - miscellaneous
Academy PRO: React native - miscellaneousAcademy PRO: React native - miscellaneous
Academy PRO: React native - miscellaneousBinary Studio
 
Academy PRO: React native - publish
Academy PRO: React native - publishAcademy PRO: React native - publish
Academy PRO: React native - publishBinary Studio
 
Academy PRO: React native - navigation
Academy PRO: React native - navigationAcademy PRO: React native - navigation
Academy PRO: React native - navigationBinary Studio
 
Academy PRO: React native - building first scenes
Academy PRO: React native - building first scenesAcademy PRO: React native - building first scenes
Academy PRO: React native - building first scenesBinary Studio
 
Academy PRO: React Native - introduction
Academy PRO: React Native - introductionAcademy PRO: React Native - introduction
Academy PRO: React Native - introductionBinary Studio
 
Academy PRO: Push notifications. Denis Beketsky
Academy PRO: Push notifications. Denis BeketskyAcademy PRO: Push notifications. Denis Beketsky
Academy PRO: Push notifications. Denis BeketskyBinary Studio
 
Academy PRO: Docker. Lecture 4
Academy PRO: Docker. Lecture 4Academy PRO: Docker. Lecture 4
Academy PRO: Docker. Lecture 4Binary Studio
 
Academy PRO: Docker. Lecture 3
Academy PRO: Docker. Lecture 3Academy PRO: Docker. Lecture 3
Academy PRO: Docker. Lecture 3Binary Studio
 
Academy PRO: Docker. Lecture 2
Academy PRO: Docker. Lecture 2Academy PRO: Docker. Lecture 2
Academy PRO: Docker. Lecture 2Binary Studio
 
Academy PRO: Docker. Lecture 1
Academy PRO: Docker. Lecture 1Academy PRO: Docker. Lecture 1
Academy PRO: Docker. Lecture 1Binary Studio
 

More from Binary Studio (20)

Academy PRO: D3, part 3
Academy PRO: D3, part 3Academy PRO: D3, part 3
Academy PRO: D3, part 3
 
Academy PRO: D3, part 1
Academy PRO: D3, part 1Academy PRO: D3, part 1
Academy PRO: D3, part 1
 
Academy PRO: Cryptography 3
Academy PRO: Cryptography 3Academy PRO: Cryptography 3
Academy PRO: Cryptography 3
 
Academy PRO: Cryptography 1
Academy PRO: Cryptography 1Academy PRO: Cryptography 1
Academy PRO: Cryptography 1
 
Academy PRO: Advanced React Ecosystem. MobX
Academy PRO: Advanced React Ecosystem. MobXAcademy PRO: Advanced React Ecosystem. MobX
Academy PRO: Advanced React Ecosystem. MobX
 
Academy PRO: Docker. Part 4
Academy PRO: Docker. Part 4Academy PRO: Docker. Part 4
Academy PRO: Docker. Part 4
 
Academy PRO: Docker. Part 2
Academy PRO: Docker. Part 2Academy PRO: Docker. Part 2
Academy PRO: Docker. Part 2
 
Academy PRO: Docker. Part 1
Academy PRO: Docker. Part 1Academy PRO: Docker. Part 1
Academy PRO: Docker. Part 1
 
Binary Studio Academy 2017: JS team project - Orderly
Binary Studio Academy 2017: JS team project - OrderlyBinary Studio Academy 2017: JS team project - Orderly
Binary Studio Academy 2017: JS team project - Orderly
 
Binary Studio Academy 2017: .NET team project - Unicorn
Binary Studio Academy 2017: .NET team project - UnicornBinary Studio Academy 2017: .NET team project - Unicorn
Binary Studio Academy 2017: .NET team project - Unicorn
 
Academy PRO: React native - miscellaneous
Academy PRO: React native - miscellaneousAcademy PRO: React native - miscellaneous
Academy PRO: React native - miscellaneous
 
Academy PRO: React native - publish
Academy PRO: React native - publishAcademy PRO: React native - publish
Academy PRO: React native - publish
 
Academy PRO: React native - navigation
Academy PRO: React native - navigationAcademy PRO: React native - navigation
Academy PRO: React native - navigation
 
Academy PRO: React native - building first scenes
Academy PRO: React native - building first scenesAcademy PRO: React native - building first scenes
Academy PRO: React native - building first scenes
 
Academy PRO: React Native - introduction
Academy PRO: React Native - introductionAcademy PRO: React Native - introduction
Academy PRO: React Native - introduction
 
Academy PRO: Push notifications. Denis Beketsky
Academy PRO: Push notifications. Denis BeketskyAcademy PRO: Push notifications. Denis Beketsky
Academy PRO: Push notifications. Denis Beketsky
 
Academy PRO: Docker. Lecture 4
Academy PRO: Docker. Lecture 4Academy PRO: Docker. Lecture 4
Academy PRO: Docker. Lecture 4
 
Academy PRO: Docker. Lecture 3
Academy PRO: Docker. Lecture 3Academy PRO: Docker. Lecture 3
Academy PRO: Docker. Lecture 3
 
Academy PRO: Docker. Lecture 2
Academy PRO: Docker. Lecture 2Academy PRO: Docker. Lecture 2
Academy PRO: Docker. Lecture 2
 
Academy PRO: Docker. Lecture 1
Academy PRO: Docker. Lecture 1Academy PRO: Docker. Lecture 1
Academy PRO: Docker. Lecture 1
 

Recently uploaded

%in Midrand+277-882-255-28 abortion pills for sale in midrand
%in Midrand+277-882-255-28 abortion pills for sale in midrand%in Midrand+277-882-255-28 abortion pills for sale in midrand
%in Midrand+277-882-255-28 abortion pills for sale in midrandmasabamasaba
 
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...panagenda
 
LEVEL 5 - SESSION 1 2023 (1).pptx - PDF 123456
LEVEL 5   - SESSION 1 2023 (1).pptx - PDF 123456LEVEL 5   - SESSION 1 2023 (1).pptx - PDF 123456
LEVEL 5 - SESSION 1 2023 (1).pptx - PDF 123456KiaraTiradoMicha
 
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...Shane Coughlan
 
ManageIQ - Sprint 236 Review - Slide Deck
ManageIQ - Sprint 236 Review - Slide DeckManageIQ - Sprint 236 Review - Slide Deck
ManageIQ - Sprint 236 Review - Slide DeckManageIQ
 
The Guide to Integrating Generative AI into Unified Continuous Testing Platfo...
The Guide to Integrating Generative AI into Unified Continuous Testing Platfo...The Guide to Integrating Generative AI into Unified Continuous Testing Platfo...
The Guide to Integrating Generative AI into Unified Continuous Testing Platfo...kalichargn70th171
 
Optimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVOptimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVshikhaohhpro
 
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...Jittipong Loespradit
 
Software Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsSoftware Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsArshad QA
 
Define the academic and professional writing..pdf
Define the academic and professional writing..pdfDefine the academic and professional writing..pdf
Define the academic and professional writing..pdfPearlKirahMaeRagusta1
 
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfLearn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfkalichargn70th171
 
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...Steffen Staab
 
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM TechniquesAI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM TechniquesVictorSzoltysek
 
%in kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park %in kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park masabamasaba
 
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...SelfMade bd
 
Azure_Native_Qumulo_High_Performance_Compute_Benchmarks.pdf
Azure_Native_Qumulo_High_Performance_Compute_Benchmarks.pdfAzure_Native_Qumulo_High_Performance_Compute_Benchmarks.pdf
Azure_Native_Qumulo_High_Performance_Compute_Benchmarks.pdfryanfarris8
 
Unlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language ModelsUnlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language Modelsaagamshah0812
 
Chinsurah Escorts ☎️8617697112 Starting From 5K to 15K High Profile Escorts ...
Chinsurah Escorts ☎️8617697112  Starting From 5K to 15K High Profile Escorts ...Chinsurah Escorts ☎️8617697112  Starting From 5K to 15K High Profile Escorts ...
Chinsurah Escorts ☎️8617697112 Starting From 5K to 15K High Profile Escorts ...Nitya salvi
 
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected WorkerHow To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected WorkerThousandEyes
 
The Top App Development Trends Shaping the Industry in 2024-25 .pdf
The Top App Development Trends Shaping the Industry in 2024-25 .pdfThe Top App Development Trends Shaping the Industry in 2024-25 .pdf
The Top App Development Trends Shaping the Industry in 2024-25 .pdfayushiqss
 

Recently uploaded (20)

%in Midrand+277-882-255-28 abortion pills for sale in midrand
%in Midrand+277-882-255-28 abortion pills for sale in midrand%in Midrand+277-882-255-28 abortion pills for sale in midrand
%in Midrand+277-882-255-28 abortion pills for sale in midrand
 
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
 
LEVEL 5 - SESSION 1 2023 (1).pptx - PDF 123456
LEVEL 5   - SESSION 1 2023 (1).pptx - PDF 123456LEVEL 5   - SESSION 1 2023 (1).pptx - PDF 123456
LEVEL 5 - SESSION 1 2023 (1).pptx - PDF 123456
 
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
 
ManageIQ - Sprint 236 Review - Slide Deck
ManageIQ - Sprint 236 Review - Slide DeckManageIQ - Sprint 236 Review - Slide Deck
ManageIQ - Sprint 236 Review - Slide Deck
 
The Guide to Integrating Generative AI into Unified Continuous Testing Platfo...
The Guide to Integrating Generative AI into Unified Continuous Testing Platfo...The Guide to Integrating Generative AI into Unified Continuous Testing Platfo...
The Guide to Integrating Generative AI into Unified Continuous Testing Platfo...
 
Optimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVOptimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTV
 
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...
 
Software Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsSoftware Quality Assurance Interview Questions
Software Quality Assurance Interview Questions
 
Define the academic and professional writing..pdf
Define the academic and professional writing..pdfDefine the academic and professional writing..pdf
Define the academic and professional writing..pdf
 
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfLearn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
 
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
 
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM TechniquesAI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
 
%in kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park %in kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park
 
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
 
Azure_Native_Qumulo_High_Performance_Compute_Benchmarks.pdf
Azure_Native_Qumulo_High_Performance_Compute_Benchmarks.pdfAzure_Native_Qumulo_High_Performance_Compute_Benchmarks.pdf
Azure_Native_Qumulo_High_Performance_Compute_Benchmarks.pdf
 
Unlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language ModelsUnlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language Models
 
Chinsurah Escorts ☎️8617697112 Starting From 5K to 15K High Profile Escorts ...
Chinsurah Escorts ☎️8617697112  Starting From 5K to 15K High Profile Escorts ...Chinsurah Escorts ☎️8617697112  Starting From 5K to 15K High Profile Escorts ...
Chinsurah Escorts ☎️8617697112 Starting From 5K to 15K High Profile Escorts ...
 
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected WorkerHow To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
 
The Top App Development Trends Shaping the Industry in 2024-25 .pdf
The Top App Development Trends Shaping the Industry in 2024-25 .pdfThe Top App Development Trends Shaping the Industry in 2024-25 .pdf
The Top App Development Trends Shaping the Industry in 2024-25 .pdf
 

BSA 2015 - Finally project Hunter (.NET group)

Editor's Notes

  1. Період навчання - більше 3х місяців Почали працювати над проектом 21 липня 2015 Презентація проекту - 4 вересня 2015 року Працювали по скрам підходу з щоденними мітінгами всього біля 40 днів ))) Project tracking з допомогою Trello. Всього більше 200 issues. БД біля 20 таблиць. Всього більше 6500 стрічок коду. Для спільної розробки використовували GitHub - де зробили більше 900 комітів )
  2. Кілька слів про user story.
  3. User story overview Групи користувачів зі своїми правами Керування вакансіями, їх швидкий пошук Керування кандидатами, їх швидкий пошук Повязування/керування кандидата і вакансії - історія змін, коментарі, нотифікції, етапи роботи і тд Після отримання і аналізу User story почали роботу у таких основних напрямах: 1. макети (робота велись у цьому напрямі докінця проекту з метою покращення usability) 2. проектування БД (далі поговоримо про підходи, які використовували) 3. і сама архітектура прикладення - яка розгорнулася у написання коду прикладення як на стороні сервера, так і клієнта
  4. Дизайн Як середовище використовували ресурс ninjamock.com Всього створено було біля 20 моків ), що накривали основні сторінки прикладення.
  5. Як СУБД використовували SQL Server. Визанчено основні сутності, їх атрибути. З використанням SQL було створено таблиці з необхідними полями, визначено типи звязків і класи належності антибутів сутностей. Для доступу до даних з прикладення використовується технологія Entity Framework. Як відомо є 3 шаблони для роботи з даними в Entity Framework: Database First, Model First, Code First. Ми використали шаблон Code First.
  6. Для поетапного розширення бази данних використовувалися міграції. Міграції добавлялися через NuGet Package Manager Console. Переваги: Однотипність виконання кожної зміни Строгий порядок внесення змін (!!!) Можливість відкотити зміни Головні переваги використання міграцій - це версіонність бази данних. Це дає можливість при кожній зміні структури моделей данних автоматично переносити зміни на саму базу данних, та при необхідності відкочуватись до потрібної версії. http://www.entityframeworktutorial.net/code-first/code-based-migration-in-code-first.aspx
  7. Організація роботи з данними була реалізована через паттерн Repository. Головна перевага репозиторіїв - це абстрактний механізм зберігання колекцій сутностей данних. Інтерфейс IRepository дає можливість не залежати від технології зберігання данних. Таким чином, прикладення “знає” тільки абстрактне поняття MemberRepository та його використання може бути відокремлено від фактичної реалізації. Всі запити через EntityFramework повертають тільки IQueryable для отримання з БД тільки цільових данних. Інтерфейс IQueryable дозволяє виконувати відкладені запити до БД без отримання додаткових пов’язаних з сутностями данних, що зменшує кількість виконаних SQL запитів.
  8. Солушин прикладення містить 8 проектів Hunter.Rest - основний startup project, що містить контролери, що слухають запити користувачів, і вюхи Hunter.Tests - юніт-тести Hunter.Services - вся логіка проекту Hunter.Tools.LinkedIn - окремий проект під додаткові тулзи, зокрема, парсер для лінкдін профілю по посиланню (використовується при додаванні нового користувача) Hunter.Common - використано для логування через пакет log4net Для роботою з БД Hunter.DataAccess.Entities - моделі і міграції Hunter.DataAccess.Db - реалізація патерну репозиторій Hunter.DataAccess.Interface - інтерфейси патерна репозиторій
  9. При побудові компонентів проекту було використано ін’єкцію залежностей (dependency injection). Це дало змогу: - зручніше розширювати та змінювати проект, - розірвати класи від їх залежностей для гнускості - проводити юніт-тести з використання стабів і моків. Ін’єкція залежностей була реалізована через конструктор. Було використано IoC контейер - бібліотека Ninject. --------------------------------- Використання Ninject відбувається за допомогою классу StandardKernel, що сворюється за паттерном singleton і пов’язує задані інтерфейси із класами. Він відповідає за життєвий цикл екземплярів цих класів. Dependency injection - шаблон проектування, що реалізує інверсію контролю (IoC Inversion Of Control). Створення StandartKernerl відбувається через статичний метод : public static StandardKernel CreateKernel() { var kernel = new StandardKernel(); kernel.Bind<IHttpModule>().To<HttpApplicationInitializationHttpModule>(); kernel.Load(Assembly.GetExecutingAssembly()); kernel.Bind<IUserStore<User, int>>().To<HunterUserStore>(); kernel.Bind<IDatabaseFactory>().To<DatabaseFactory>().InRequestScope(); kernel.Bind<IUnitOfWork>().To<UnitOfWork>().InRequestScope(); … return kernel; } Тут пов’язуються усі інтерфейси з необхідними класами. Впровадження StandartKernel у додаток для його використання при ін’єкціях залежностей відбувається при конфігурації додатку : public void ConfigureAuth(IAppBuilder app) { ... app.CreatePerOwinContext(CreateKernel); app.UseNinjectMiddleware(CreateKernel); … } Після цього можна використовувати ін’єкцію залежностей через конструктор. Приклад : private readonly IPoolRepository _poolRepository; private readonly IUnitOfWork _unitOfWork; private readonly ILogger _logger; private readonly IActivityHelperService _activityHelperService; public PoolService(IPoolRepository poolRepository, IUnitOfWork unitOfWork, ILogger logger, IActivityHelperService activityHelperService) { _poolRepository = poolRepository; _unitOfWork = unitOfWork; _logger = logger; _activityHelperService = activityHelperService; }
  10. Далі поговоримо про найбільш цікаві частини проекту і рішення, які були використані для вирішення завдань. На сьогоднішній день треба не тільки реагувати на користувацькі дії, але й створювати власні контроли, що зможуть самостійно це обробляти. Таким чином, класична модель mvc відходить на другий план, та поступається місцем MVW (model view whatever). В нашому проекті ми використовували Ангуляр. Однією з найбільших переваг ангуляру є як раз створення директив, що по суті є новими контролами, що вміють відловлювати різноманітні івенти, відображати необхідну інформацію, виконувати обробку та як відображати дані у view, так і змінювати модель без візуальних змін. Це дуже корисно із погляду перевикористання програмних можудів, оскільки ми маємо змогу створити новий тег, та просто вставити його у необхідних місцях. До того ж це економить час у суперечках (особливо у суперечках чи це mvc чи ні :)). “що це таке”. Називайте це як хочете або MVW. Таким чином ми можемо: міняти модель без зміни view та навпаки спрощуємо unit-testing спрощене перевикористання коду коду менше, що призводить до меншої кількості багів.
  11. Фронт-енд проекту реалізовано як single-page application. Використовується єдиний header, а необхідний html-файл визначається за допомогою angular routing і підгружається директивою ng-view. Було використано асинхронний підхід до запитів - AJAX. Результат запиту до серверної сторони приймається на клієнті як angular promise і використовується лише після отримання відповіді від серверу. Таким чином відображення змін на сторінці після отримання відповіді на запит відбувається без оновлення сторінки, що зменшує кількість трафіку і пришвидшує роботу програми.
  12. Authentication is the process of ascertaining that somebody really is who he claims to be. Authorization refers to rules that determine who is allowed to do what. E.g. Adam may be authorized to create and delete databases, while Usama is only authorised to read. Наш сервер при кожному запиту перевіряє токен, перевіряє валідність, на основі інфи в токені визначає права доступу. Token base авторизація, де з кожним запитом з клієнта відправляється Token. Реалізовано це з допомогою бібліотеки jwt, яка визначає формат токена. На сервері бібліотека Identity відповідає за перевірку токена. Для генерації токена – сервер генерації, що реалізовувала інша команда.
  13. Для реалізації RESTfull API, зокрема, було використано протокол OData, а саме для отримання переліку вакансій і кандидатів, реалізації фільтрації та пагінації! На клієнті треба сформувати url-запит відповідно до стандарту OData. На сервері приймається запит контролером і перетворює його за допомогою інтерфейсу IQuarable у відповідних sql-запит для отримання лише потрібних даних з БД. 1. Open Data Protocol (OData) — это открытый RESTfull протокол для запроса и обновления данных. Протокол позволяет выполнять операции с ресурсами, используя в качестве запросов HTTP-команды, и получать ответы в форматах XML или JSON.
  14. Оскільки структура прикладення Hunter була поділена на кілька незалежних шарів роботи з данними, то для зменшення залежності бібліотек, що входять до проекту, було прийнято рішення використовувати Data Transfer Objects (DTO) для обміну данними між частинами прикладення. Зокрема, для роботи з базою. Конвертація об’єктів бази данних у DTO об’єкти та навпаки була реалізована шляхом написання Extension методів для цільових классів. Таким чином, конвертація сутностей БД в DTO об’єкти та навпаки виконувалась лище викликом одного extension метода: return _poolRepository.Get(id).ToPoolViewModel(); Наведемо приклад для сутності БД Pool Класс для роботи з БД public class Pool : IEntity { public Pool() { Vacancy = new HashSet<Vacancy>(); Candidate = new HashSet<Candidate>(); } public int Id { get; set; } public string Name { get; set; } public string Color { get; set; } public virtual ICollection<Vacancy> Vacancy { get; set; } public virtual ICollection<Candidate> Candidate { get; set; } } DTO модель public class PoolViewModel { public int Id { get; set; } public string Name { get; set; } public string Color { get; set; } public ICollection<PoolBackground> PoolBackground { get; set; } } Extension public static class PoolExtension { public static PoolViewModel ToPoolViewModel(this Pool pool) { return new PoolViewModel() { Id = pool.Id, Name = pool.Name, Color = pool.Color, PoolBackground = PoolBackground.BgColors }; } public static IEnumerable<PoolViewModel> ToPoolViewModel(this IEnumerable<Pool> pools) { return pools.Select(p => new PoolViewModel() { Id = p.Id, Name = p.Name, Color = p.Color, PoolBackground = PoolBackground.BgColors }).ToList(); } public static Pool ToPoolModel(this PoolViewModel poolView) { return new Pool { Id = poolView.Id, Name = poolView.Name, Color = poolView.Color, Vacancy = new List<Vacancy>(), Candidate = new List<Candidate>() }; } }
  15. Юніт-тексти використовуються для створення ситуацій використання класів при певних умовах і перевірки правильності їх роботи, при цьому умови створюються лише необхідні для тесту умови за допомогою стабів. В нашому проекті для проведення юніт-тестів було використано фреймворк NUnit і для створення стабів і моків було використано бібліотеку NSubstitue. ------------------------ Основним об’єктом для юніт-тестів був класс PublicPageParser, що відповідав за парсинг інформації зі сторінки профіля LinkedIn. Приклад використання бібліотеки NSubstitute для створення стабів: public void TestSetup() { var cardsList = new List<Card> {new Card {Id = 1, VacancyId = 1}, new Card {Id = 2, VacancyId = 1}}; _cardRepository.Query().Returns(cardsList.AsQueryable()); } Приклад юніт-тесту з використання NUnit : [Test] public void Should_give_correct_skills_When_set_url() { // Arrange var info = _parser.GetPageInfo("https://ua.linkedin.com/pub/myroslav-dmytrus/b7/a02/436"); // Act var skills = info.Skills; var checkSkill = new List<string>() {"C#",".NET","ASP.NET MVC","SQL","JavaScript","HTML","Microsoft Office"}; // Assert Assert.AreEqual(checkSkill, skills); } Тут метод Assert фреймворку NUnit порівняє очікуваний результат з дійсним результатом і якщо вони рівні тест буде пройдено.
  16. Отримати дані про особу з сервісу LinkedIn Стандартним підходом вирішення даного питання є використання API. Але оскільки LinkedIn заборонив безкоштовний доступ до даних (є можливіть отримання інформації тільки про користувача якщо є логін та пароль). Альтернативний спосіб отримання інформації є зчитування її напряму з HTML сторінки, який і був використаний. Htmlagilitypack - зручний інструмент - Це HTML парсер, який дозволяє читання запис DOM і підтримує XPATH або XSLT. Це .NET бібліотека, яка дозволяє розбирати "з Web" HTML файли. Об'єктна модель дуже схожа на те, що пропонує System.Xml, але для HTML документів (або потоків). Оскільки розмітка користувачів є однаковою це дає змогу написати стандартний підхід для всіх. Для отримання інформації зчитується весь HTML файл і для вибору необхідного використовується XPATH. //отримання інформації про всі навички var web = new HtmlWeb(); HtmlDocument Document = web.Load(Url); var skills = Document.DocumentNode.SelectNodes("//span[@class='skill-pill']"); З допомогою даного підходу вдалося отримати всю публічну інформацію яка є доступна, а також посилання на фото. Недоліком є те що при зміні назв елементів буде втрачена можливість доступу до інформації.
  17. На стороні користувача загалом все стандартно. Як згадувалося, фреймворк Ангуляр використовується для реалізації СПА з боку клієнта. Для розмітки сторінки - HTML5, CSS (оскільки дизайн сайту планується доробляти, тому для спрощення роботи було використано стилі Bootstrap). Стильові ікон Font Awesome
  18. Get all info on a certain vacancy and candidates included to this vacancy
  19. Create new candidates, entering data by yourself or importing it from LinkedIn profile using public link
  20. Create new candidates, entering data by yourself or importing it from LinkedIn profile using public link
  21. Assigning statuses for candidates making work on them easier
  22. Manage candidates progress through the hiring process stages, creating Long Lists, distinguishing most appropriate candidates after passing interviews and completing test tasks. Best candidates can also be selected to a special list for future applications using bookmarks mechanism.
  23. Assign and Receive notification on “Not now” status candidates, with the information about recontacting candidate on a certain specified date.
  24. Receive notifications for important actions made by you or your colleagues on Activity page.