SlideShare a Scribd company logo
PROGRAMMERS SLANG
Frequent acronyms
BOB CRIBBS
Python I Ruby I iOS
f

bocribbz

t

bocribbz

in

bocribbz

GitHub

bocribbz

slide
share

bocribbz

http

bocribbz.com
FLOS
/flôs/
FLOS
Free Libre and Open Source

This is not something that you will hear too often, but its a
good concept to follow.
!

The programmers community is huge and a lot of them have
tons of things to share, so why not join them?
API
/ə pē ī/
API
Application Programming Interface

Defines the way software applications can interact with each other.
CRUD
/krəd/
CRUD
Create Read Update and Delete

These are the basic operations for persistent storage.
!

It’s implementations are found in database systems and in
API actions.
ORM
/ō är em/
ORM
Object-Relational Mapping

A technique for converting data between incompatible type
systems in OOP languages.
!

Some web frameworks implement their own ORMs for
mapping to different database systems using the same
structure.
MVC
/em vē sē/
MVC
Model View Controller

It refers to a pattern for storing and interacting with
information.
MVC
Model: refers to storing the information, usually the
database layer.
!

View: how the user sees the information (eg HTML).
!

Controller: performs various operations to produce the
expected output or modify the information.
MVP
/em vē pē/
MVP
Minimum Viable Product

Represents a strategy used to release a new product with
the least needed functionality in order to produce feedback
from clients and enhance it later.
SaaS
/sas/
SaaS
Software as a service / Service Oriented Architecture

Represents a software architecture where all components
are designed to be services.
!

Which means, the web is a client/server architecture.
SaaS
It has 3 demands on the infrastructure:
!

Communication: allow customers to interact with service
!

Scalability: new services can be created rapidly to handle
load spikes
!

Dependability: service and communication continuously
available 24x7
TDD
/tē dē dē/
TDD
Test-Driven Development

Is a programming strategy that consists of short cycles,
where tests are written first and the actual implementation
comes second.
!

It’s especially useful to ensure code quality.
!

A frequent strategy used with TDD is Red-Green-Refactor.
TDD
def test_my_profile(self):!
response = client.get(‘/myprofile/’)!
assert response.code == 302!
!

def my_profile(request):!
return redirect('/login/')!

def test_my_profile(self):!
response = client.get(‘/myprofile/’)!
assert response.code == 302!

def my_profile(request):!
if not request.user.is_auth:!
return redirect('/login/')!
return 'OK'!

!
!

!

!
!
!

user = UserFactory(’foo’, ’pass’)!
client.login(‘foo’, ‘bar’})!
response = client.get(‘/myprofile/’)!
assert response.code == 200!

def test_my_profile(self):!
user = UserFactory(’foo’, ’pass’)!
client.login(‘foo’, ‘bar’})!
response = client.get(‘/myprofile/’)!
assert 'Hello foo' in response

!
!
!
!

!
!
!
!
!
!
!

def my_profile(request):!
if not request.user.is_auth:!
return redirect('/login/')!
return 'Hello %s' % request.user
BDD
/bē dē dē/
BDD
Behavior-Driven Development

Is a technique introduced to ensure that the software is
doing what the client expects, while at the same time
maintaining code quality.
!

Behaviors had to be defined first and implementation had to
follow them, by providing test first and only then writing the
actual code.
BDD
As a registered user
I can visit my
profile page.!

def test_my_profile(self):!
response = client.get(‘/myprofile/’)!
assert response.code == 302!

!

user = UserFactory(’foo’, ’pass’)!
client.login(‘foo’, ‘bar’})!
response = client.get(‘/myprofile/’)!
assert 'Hello foo' in response
FIRST
/fərst/
FIRST
Fast Independent Repeatable Self-checking Timely

These are properties that a good test has to meet in order
to be useful and effective.
FIRST
Fast: it has to run quick
!

Independent: a test has to be able to be executed isolated
and not rely on other tests.
!

Repeatable: a test can be executed anytime and the outcome
will still be the same.
!

Self-checking: it must automatically detect if it passed
!

Timely: refers to test being written before code (TDD)
FIRST - FAST
Fast means fast...
FIRST - INDEPENDENT
def test_my_profile(self):!
self.client.post(‘register’, !
{‘user’: ‘foo’, ‘pwd’: ‘bar’})!

client.login(‘foo’, ‘bar’})!
response = client.get(‘/myprofile/’)!
assert 'Hello foo' in response

def test_create_user(self):!
self.client.post(‘register’, !
{‘user’: ‘foo’, ‘pwd’: ‘bar’})!
[...]!

!

def test_logged_in(self):!
client.login(‘foo’, ‘bar’})!
response = client.get(‘/myprofile/’)!
assert 'Hello foo' in response!

!
FIRST - REPEATABLE
def test_last_login(self):!
tdelta = datetime.timedelta(days=1)!
today = datetime.today()!

!

user = UserFactory(’foo’, ’pass’)!
user.last_login = today - tdelta!
!
tdelta = datetime.timedelta(days=30)!
since = today - tdelta!
assert user in User.objects.filter(!
last_login > since)!

def test_last_login(self):!

!

tdelta = datetime.timedelta(days=1)!
today = datetime.today()!
user = UserFactory(’foo’, ’pass’)!

!
!

user.last_login = ‘2013-09-01’!
!
since = today - tdelta!
assert user in User.objects.filter(!
last_login > since)!
FIRST - SELF CHECKING
def test_last_login(self):!
tdelta = datetime.timedelta(days=1)!
today = datetime.today()!

!

!

def test_last_login(self):!
tdelta = datetime.timedelta(days=1)!
today = datetime.today()!

!

user = UserFactory(’foo’, ’pass’)!
user.last_login = today - tdelta!
!
tdelta = datetime.timedelta(days=30)!
since = today - tdelta!
assert user in User.objects.filter(!
last_login > since)!

!
!

user = UserFactory(’foo’, ’pass’)!
user.last_login = today - tdelta!
!
tdelta = datetime.timedelta(days=30)!
since = today - tdelta!
users = User.objects.filter(!
last_login > since)!
if user not in users:!
print ‘We have a problem’!
FIRST - TIMELY (TDD)
def test_my_profile(self):!
response = client.get(‘/myprofile/’)!
assert response.code == 302!
!

def my_profile(request):!
return redirect('/login/')!

def test_my_profile(self):!
response = client.get(‘/myprofile/’)!
assert response.code == 302!

def my_profile(request):!
if not request.user.is_auth:!
return redirect('/login/')!
return 'OK'!

!
!

!

!
!
!

user = UserFactory(’foo’, ’pass’)!
client.login(‘foo’, ‘bar’})!
response = client.get(‘/myprofile/’)!
assert response.code == 200!

def test_my_profile(self):!
user = UserFactory(’foo’, ’pass’)!
client.login(‘foo’, ‘bar’})!
response = client.get(‘/myprofile/’)!
assert 'Hello foo' in response

!
!
!
!

!
!
!
!
!
!
!

def my_profile(request):!
if not request.user.is_auth:!
return redirect('/login/')!
return 'Hello %s' % request.user
CI
/sē ī/
CI
Continuous Integration

Is a practice of running tests and creating a build
automatically.
CI
Principles you have to follow for CI:
!

Maintain a code repo
Automate the build/deploy
Make the build self-testable
Keep the build fast
Everyone can see the results of the build
Automate deployment (Continuous Deployment)
DRY vs WET
/drī/ vs /wet/
DRY vs WET
Don’t Repeat Yourself vs Write Everything Twice

Is a principle that refers to reducing repeated blocks of
common functionality to a separate sequence that can be
called independently.
!

It will help you achieve more reusability and automation.
DRY vs WET
def login_required():!
if not user.is_authenticated():!
return redirect(‘/login’)!

!

def get(request):!
login_required()!
[ … ]!

!

def post(request):!
login_required()!
[ … ]!

!

def get(request):!
if not user.is_authenticated():!
return redirect(‘/login’)!
[ … ]!

!

def post(request):!
if not user.is_authenticated():!
return redirect(‘/login’)!
[ … ]!

!
KISS
/kis/
KISS
Keep it simple, stupid

Is a principle that the implementation has to follow the
simplest logic instead of a complex one.
!

It's probably the most difficult strategy in programming.
Most user-friendly interfaces and interactions, are probably
also the most over engineered.
KISS
Do not overcomplicate design or code, consider different
approach and trade-off and finally choose the simplest one,
based on system constraints and business rules.
!

It will improve testability, usability and your code would
probably be self-documented and much easier to refactor in
the future, if required.
KISS
def add_user(uname, pwd):!
epwd = md5(pwd)!
user = User(uname, epwd)!
user.save()!
return user!

def add_user(uname, pwd):!
epwd = md5(pwd)!
user = User(uname, epwd)!
user.save()!

!
!
!

send_email(user, ‘Hello World!’)!
send_email(admin, ‘New User!’)!
stats = Stats.filter('country')!
stats += 1!
stats.save()!
login(uname, pwd)!
redirect(‘/myprofile/’)
XP
/eks pē/
XP
Extreme programming

Is a software development methodology which is intended to
improve software quality and responsiveness to changing
customer requirements.
!
XP
Practices:
!

Pair programming
TDD
CI
Small releases
KISS
Thank you!
What are the acronyms you encountered?	

What are the principles you follow to deliver better code?	

!

Questions?

More Related Content

Similar to Programmers slang

Tdd is not about testing
Tdd is not about testingTdd is not about testing
Tdd is not about testing
Gianluca Padovani
 
Code Quality Practice and Tools
Code Quality Practice and ToolsCode Quality Practice and Tools
Code Quality Practice and Tools
Bob Paulin
 
The unintended benefits of Chef
The unintended benefits of ChefThe unintended benefits of Chef
The unintended benefits of Chef
Chef Software, Inc.
 
Testdrive AngularJS with Spring 4
Testdrive AngularJS with Spring 4Testdrive AngularJS with Spring 4
Testdrive AngularJS with Spring 4
Oliver Wahlen
 
Twig for Drupal 8 and PHP | Presented at OC Drupal
Twig for Drupal 8 and PHP | Presented at OC DrupalTwig for Drupal 8 and PHP | Presented at OC Drupal
Twig for Drupal 8 and PHP | Presented at OC Drupal
webbywe
 
Prersentation
PrersentationPrersentation
Prersentation
Ashwin Deora
 
Future of PHP
Future of PHPFuture of PHP
Future of PHP
Richard McIntyre
 
soa
soasoa
Drupal 8 - Core and API Changes
Drupal 8 - Core and API ChangesDrupal 8 - Core and API Changes
Drupal 8 - Core and API Changes
Shabir Ahmad
 
BP-6 Repository Customization Best Practices
BP-6 Repository Customization Best PracticesBP-6 Repository Customization Best Practices
BP-6 Repository Customization Best Practices
Alfresco Software
 
Intro To JavaScript Unit Testing - Ran Mizrahi
Intro To JavaScript Unit Testing - Ran MizrahiIntro To JavaScript Unit Testing - Ran Mizrahi
Intro To JavaScript Unit Testing - Ran Mizrahi
Ran Mizrahi
 
Beyond MVC: from Model to Domain
Beyond MVC: from Model to DomainBeyond MVC: from Model to Domain
Beyond MVC: from Model to Domain
Jeremy Cook
 
Living With Legacy Code
Living With Legacy CodeLiving With Legacy Code
Living With Legacy Code
Rowan Merewood
 
Writing clean code in C# and .NET
Writing clean code in C# and .NETWriting clean code in C# and .NET
Writing clean code in C# and .NET
Dror Helper
 
Codeception Testing Framework -- English #phpkansai
Codeception Testing Framework -- English #phpkansaiCodeception Testing Framework -- English #phpkansai
Codeception Testing Framework -- English #phpkansai
Florent Batard
 
Building Large Scale PHP Web Applications with Laravel 4
Building Large Scale PHP Web Applications with Laravel 4Building Large Scale PHP Web Applications with Laravel 4
Building Large Scale PHP Web Applications with Laravel 4
Darwin Biler
 
Develop High Performance Windows 8 Application with HTML5 and JavaScriptHigh ...
Develop High Performance Windows 8 Application with HTML5 and JavaScriptHigh ...Develop High Performance Windows 8 Application with HTML5 and JavaScriptHigh ...
Develop High Performance Windows 8 Application with HTML5 and JavaScriptHigh ...
Doris Chen
 
Dependency injectionpreso
Dependency injectionpresoDependency injectionpreso
Dependency injectionpreso
ColdFusionConference
 
Writing Testable Code
Writing Testable CodeWriting Testable Code
Writing Testable Code
jameshalsall
 
Refactoring
RefactoringRefactoring
Refactoring
Artem Tabalin
 

Similar to Programmers slang (20)

Tdd is not about testing
Tdd is not about testingTdd is not about testing
Tdd is not about testing
 
Code Quality Practice and Tools
Code Quality Practice and ToolsCode Quality Practice and Tools
Code Quality Practice and Tools
 
The unintended benefits of Chef
The unintended benefits of ChefThe unintended benefits of Chef
The unintended benefits of Chef
 
Testdrive AngularJS with Spring 4
Testdrive AngularJS with Spring 4Testdrive AngularJS with Spring 4
Testdrive AngularJS with Spring 4
 
Twig for Drupal 8 and PHP | Presented at OC Drupal
Twig for Drupal 8 and PHP | Presented at OC DrupalTwig for Drupal 8 and PHP | Presented at OC Drupal
Twig for Drupal 8 and PHP | Presented at OC Drupal
 
Prersentation
PrersentationPrersentation
Prersentation
 
Future of PHP
Future of PHPFuture of PHP
Future of PHP
 
soa
soasoa
soa
 
Drupal 8 - Core and API Changes
Drupal 8 - Core and API ChangesDrupal 8 - Core and API Changes
Drupal 8 - Core and API Changes
 
BP-6 Repository Customization Best Practices
BP-6 Repository Customization Best PracticesBP-6 Repository Customization Best Practices
BP-6 Repository Customization Best Practices
 
Intro To JavaScript Unit Testing - Ran Mizrahi
Intro To JavaScript Unit Testing - Ran MizrahiIntro To JavaScript Unit Testing - Ran Mizrahi
Intro To JavaScript Unit Testing - Ran Mizrahi
 
Beyond MVC: from Model to Domain
Beyond MVC: from Model to DomainBeyond MVC: from Model to Domain
Beyond MVC: from Model to Domain
 
Living With Legacy Code
Living With Legacy CodeLiving With Legacy Code
Living With Legacy Code
 
Writing clean code in C# and .NET
Writing clean code in C# and .NETWriting clean code in C# and .NET
Writing clean code in C# and .NET
 
Codeception Testing Framework -- English #phpkansai
Codeception Testing Framework -- English #phpkansaiCodeception Testing Framework -- English #phpkansai
Codeception Testing Framework -- English #phpkansai
 
Building Large Scale PHP Web Applications with Laravel 4
Building Large Scale PHP Web Applications with Laravel 4Building Large Scale PHP Web Applications with Laravel 4
Building Large Scale PHP Web Applications with Laravel 4
 
Develop High Performance Windows 8 Application with HTML5 and JavaScriptHigh ...
Develop High Performance Windows 8 Application with HTML5 and JavaScriptHigh ...Develop High Performance Windows 8 Application with HTML5 and JavaScriptHigh ...
Develop High Performance Windows 8 Application with HTML5 and JavaScriptHigh ...
 
Dependency injectionpreso
Dependency injectionpresoDependency injectionpreso
Dependency injectionpreso
 
Writing Testable Code
Writing Testable CodeWriting Testable Code
Writing Testable Code
 
Refactoring
RefactoringRefactoring
Refactoring
 

Recently uploaded

National Security Agency - NSA mobile device best practices
National Security Agency - NSA mobile device best practicesNational Security Agency - NSA mobile device best practices
National Security Agency - NSA mobile device best practices
Quotidiano Piemontese
 
Uni Systems Copilot event_05062024_C.Vlachos.pdf
Uni Systems Copilot event_05062024_C.Vlachos.pdfUni Systems Copilot event_05062024_C.Vlachos.pdf
Uni Systems Copilot event_05062024_C.Vlachos.pdf
Uni Systems S.M.S.A.
 
Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...
Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...
Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...
SOFTTECHHUB
 
GenAI Pilot Implementation in the organizations
GenAI Pilot Implementation in the organizationsGenAI Pilot Implementation in the organizations
GenAI Pilot Implementation in the organizations
kumardaparthi1024
 
Best 20 SEO Techniques To Improve Website Visibility In SERP
Best 20 SEO Techniques To Improve Website Visibility In SERPBest 20 SEO Techniques To Improve Website Visibility In SERP
Best 20 SEO Techniques To Improve Website Visibility In SERP
Pixlogix Infotech
 
How to Get CNIC Information System with Paksim Ga.pptx
How to Get CNIC Information System with Paksim Ga.pptxHow to Get CNIC Information System with Paksim Ga.pptx
How to Get CNIC Information System with Paksim Ga.pptx
danishmna97
 
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdfObservability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
Paige Cruz
 
Building Production Ready Search Pipelines with Spark and Milvus
Building Production Ready Search Pipelines with Spark and MilvusBuilding Production Ready Search Pipelines with Spark and Milvus
Building Production Ready Search Pipelines with Spark and Milvus
Zilliz
 
RESUME BUILDER APPLICATION Project for students
RESUME BUILDER APPLICATION Project for studentsRESUME BUILDER APPLICATION Project for students
RESUME BUILDER APPLICATION Project for students
KAMESHS29
 
みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...
みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...
みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...
名前 です男
 
Removing Uninteresting Bytes in Software Fuzzing
Removing Uninteresting Bytes in Software FuzzingRemoving Uninteresting Bytes in Software Fuzzing
Removing Uninteresting Bytes in Software Fuzzing
Aftab Hussain
 
TrustArc Webinar - 2024 Global Privacy Survey
TrustArc Webinar - 2024 Global Privacy SurveyTrustArc Webinar - 2024 Global Privacy Survey
TrustArc Webinar - 2024 Global Privacy Survey
TrustArc
 
Mariano G Tinti - Decoding SpaceX
Mariano G Tinti - Decoding SpaceXMariano G Tinti - Decoding SpaceX
Mariano G Tinti - Decoding SpaceX
Mariano Tinti
 
“Building and Scaling AI Applications with the Nx AI Manager,” a Presentation...
“Building and Scaling AI Applications with the Nx AI Manager,” a Presentation...“Building and Scaling AI Applications with the Nx AI Manager,” a Presentation...
“Building and Scaling AI Applications with the Nx AI Manager,” a Presentation...
Edge AI and Vision Alliance
 
Microsoft - Power Platform_G.Aspiotis.pdf
Microsoft - Power Platform_G.Aspiotis.pdfMicrosoft - Power Platform_G.Aspiotis.pdf
Microsoft - Power Platform_G.Aspiotis.pdf
Uni Systems S.M.S.A.
 
Video Streaming: Then, Now, and in the Future
Video Streaming: Then, Now, and in the FutureVideo Streaming: Then, Now, and in the Future
Video Streaming: Then, Now, and in the Future
Alpen-Adria-Universität
 
Driving Business Innovation: Latest Generative AI Advancements & Success Story
Driving Business Innovation: Latest Generative AI Advancements & Success StoryDriving Business Innovation: Latest Generative AI Advancements & Success Story
Driving Business Innovation: Latest Generative AI Advancements & Success Story
Safe Software
 
Essentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FMEEssentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FME
Safe Software
 
Unlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdf
Unlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdfUnlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdf
Unlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdf
Malak Abu Hammad
 
UiPath Test Automation using UiPath Test Suite series, part 6
UiPath Test Automation using UiPath Test Suite series, part 6UiPath Test Automation using UiPath Test Suite series, part 6
UiPath Test Automation using UiPath Test Suite series, part 6
DianaGray10
 

Recently uploaded (20)

National Security Agency - NSA mobile device best practices
National Security Agency - NSA mobile device best practicesNational Security Agency - NSA mobile device best practices
National Security Agency - NSA mobile device best practices
 
Uni Systems Copilot event_05062024_C.Vlachos.pdf
Uni Systems Copilot event_05062024_C.Vlachos.pdfUni Systems Copilot event_05062024_C.Vlachos.pdf
Uni Systems Copilot event_05062024_C.Vlachos.pdf
 
Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...
Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...
Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...
 
GenAI Pilot Implementation in the organizations
GenAI Pilot Implementation in the organizationsGenAI Pilot Implementation in the organizations
GenAI Pilot Implementation in the organizations
 
Best 20 SEO Techniques To Improve Website Visibility In SERP
Best 20 SEO Techniques To Improve Website Visibility In SERPBest 20 SEO Techniques To Improve Website Visibility In SERP
Best 20 SEO Techniques To Improve Website Visibility In SERP
 
How to Get CNIC Information System with Paksim Ga.pptx
How to Get CNIC Information System with Paksim Ga.pptxHow to Get CNIC Information System with Paksim Ga.pptx
How to Get CNIC Information System with Paksim Ga.pptx
 
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdfObservability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
 
Building Production Ready Search Pipelines with Spark and Milvus
Building Production Ready Search Pipelines with Spark and MilvusBuilding Production Ready Search Pipelines with Spark and Milvus
Building Production Ready Search Pipelines with Spark and Milvus
 
RESUME BUILDER APPLICATION Project for students
RESUME BUILDER APPLICATION Project for studentsRESUME BUILDER APPLICATION Project for students
RESUME BUILDER APPLICATION Project for students
 
みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...
みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...
みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...
 
Removing Uninteresting Bytes in Software Fuzzing
Removing Uninteresting Bytes in Software FuzzingRemoving Uninteresting Bytes in Software Fuzzing
Removing Uninteresting Bytes in Software Fuzzing
 
TrustArc Webinar - 2024 Global Privacy Survey
TrustArc Webinar - 2024 Global Privacy SurveyTrustArc Webinar - 2024 Global Privacy Survey
TrustArc Webinar - 2024 Global Privacy Survey
 
Mariano G Tinti - Decoding SpaceX
Mariano G Tinti - Decoding SpaceXMariano G Tinti - Decoding SpaceX
Mariano G Tinti - Decoding SpaceX
 
“Building and Scaling AI Applications with the Nx AI Manager,” a Presentation...
“Building and Scaling AI Applications with the Nx AI Manager,” a Presentation...“Building and Scaling AI Applications with the Nx AI Manager,” a Presentation...
“Building and Scaling AI Applications with the Nx AI Manager,” a Presentation...
 
Microsoft - Power Platform_G.Aspiotis.pdf
Microsoft - Power Platform_G.Aspiotis.pdfMicrosoft - Power Platform_G.Aspiotis.pdf
Microsoft - Power Platform_G.Aspiotis.pdf
 
Video Streaming: Then, Now, and in the Future
Video Streaming: Then, Now, and in the FutureVideo Streaming: Then, Now, and in the Future
Video Streaming: Then, Now, and in the Future
 
Driving Business Innovation: Latest Generative AI Advancements & Success Story
Driving Business Innovation: Latest Generative AI Advancements & Success StoryDriving Business Innovation: Latest Generative AI Advancements & Success Story
Driving Business Innovation: Latest Generative AI Advancements & Success Story
 
Essentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FMEEssentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FME
 
Unlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdf
Unlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdfUnlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdf
Unlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdf
 
UiPath Test Automation using UiPath Test Suite series, part 6
UiPath Test Automation using UiPath Test Suite series, part 6UiPath Test Automation using UiPath Test Suite series, part 6
UiPath Test Automation using UiPath Test Suite series, part 6
 

Programmers slang

  • 2. BOB CRIBBS Python I Ruby I iOS f bocribbz t bocribbz in bocribbz GitHub bocribbz slide share bocribbz http bocribbz.com
  • 4. FLOS Free Libre and Open Source This is not something that you will hear too often, but its a good concept to follow. ! The programmers community is huge and a lot of them have tons of things to share, so why not join them?
  • 6. API Application Programming Interface Defines the way software applications can interact with each other.
  • 8. CRUD Create Read Update and Delete These are the basic operations for persistent storage. ! It’s implementations are found in database systems and in API actions.
  • 10. ORM Object-Relational Mapping A technique for converting data between incompatible type systems in OOP languages. ! Some web frameworks implement their own ORMs for mapping to different database systems using the same structure.
  • 12. MVC Model View Controller It refers to a pattern for storing and interacting with information.
  • 13. MVC Model: refers to storing the information, usually the database layer. ! View: how the user sees the information (eg HTML). ! Controller: performs various operations to produce the expected output or modify the information.
  • 15. MVP Minimum Viable Product Represents a strategy used to release a new product with the least needed functionality in order to produce feedback from clients and enhance it later.
  • 17. SaaS Software as a service / Service Oriented Architecture Represents a software architecture where all components are designed to be services. ! Which means, the web is a client/server architecture.
  • 18. SaaS It has 3 demands on the infrastructure: ! Communication: allow customers to interact with service ! Scalability: new services can be created rapidly to handle load spikes ! Dependability: service and communication continuously available 24x7
  • 20. TDD Test-Driven Development Is a programming strategy that consists of short cycles, where tests are written first and the actual implementation comes second. ! It’s especially useful to ensure code quality. ! A frequent strategy used with TDD is Red-Green-Refactor.
  • 21. TDD def test_my_profile(self):! response = client.get(‘/myprofile/’)! assert response.code == 302! ! def my_profile(request):! return redirect('/login/')! def test_my_profile(self):! response = client.get(‘/myprofile/’)! assert response.code == 302! def my_profile(request):! if not request.user.is_auth:! return redirect('/login/')! return 'OK'! ! ! ! ! ! ! user = UserFactory(’foo’, ’pass’)! client.login(‘foo’, ‘bar’})! response = client.get(‘/myprofile/’)! assert response.code == 200! def test_my_profile(self):! user = UserFactory(’foo’, ’pass’)! client.login(‘foo’, ‘bar’})! response = client.get(‘/myprofile/’)! assert 'Hello foo' in response ! ! ! ! ! ! ! ! ! ! ! def my_profile(request):! if not request.user.is_auth:! return redirect('/login/')! return 'Hello %s' % request.user
  • 23. BDD Behavior-Driven Development Is a technique introduced to ensure that the software is doing what the client expects, while at the same time maintaining code quality. ! Behaviors had to be defined first and implementation had to follow them, by providing test first and only then writing the actual code.
  • 24. BDD As a registered user I can visit my profile page.! def test_my_profile(self):! response = client.get(‘/myprofile/’)! assert response.code == 302! ! user = UserFactory(’foo’, ’pass’)! client.login(‘foo’, ‘bar’})! response = client.get(‘/myprofile/’)! assert 'Hello foo' in response
  • 26. FIRST Fast Independent Repeatable Self-checking Timely These are properties that a good test has to meet in order to be useful and effective.
  • 27. FIRST Fast: it has to run quick ! Independent: a test has to be able to be executed isolated and not rely on other tests. ! Repeatable: a test can be executed anytime and the outcome will still be the same. ! Self-checking: it must automatically detect if it passed ! Timely: refers to test being written before code (TDD)
  • 28. FIRST - FAST Fast means fast...
  • 29. FIRST - INDEPENDENT def test_my_profile(self):! self.client.post(‘register’, ! {‘user’: ‘foo’, ‘pwd’: ‘bar’})! client.login(‘foo’, ‘bar’})! response = client.get(‘/myprofile/’)! assert 'Hello foo' in response def test_create_user(self):! self.client.post(‘register’, ! {‘user’: ‘foo’, ‘pwd’: ‘bar’})! [...]! ! def test_logged_in(self):! client.login(‘foo’, ‘bar’})! response = client.get(‘/myprofile/’)! assert 'Hello foo' in response! !
  • 30. FIRST - REPEATABLE def test_last_login(self):! tdelta = datetime.timedelta(days=1)! today = datetime.today()! ! user = UserFactory(’foo’, ’pass’)! user.last_login = today - tdelta! ! tdelta = datetime.timedelta(days=30)! since = today - tdelta! assert user in User.objects.filter(! last_login > since)! def test_last_login(self):! ! tdelta = datetime.timedelta(days=1)! today = datetime.today()! user = UserFactory(’foo’, ’pass’)! ! ! user.last_login = ‘2013-09-01’! ! since = today - tdelta! assert user in User.objects.filter(! last_login > since)!
  • 31. FIRST - SELF CHECKING def test_last_login(self):! tdelta = datetime.timedelta(days=1)! today = datetime.today()! ! ! def test_last_login(self):! tdelta = datetime.timedelta(days=1)! today = datetime.today()! ! user = UserFactory(’foo’, ’pass’)! user.last_login = today - tdelta! ! tdelta = datetime.timedelta(days=30)! since = today - tdelta! assert user in User.objects.filter(! last_login > since)! ! ! user = UserFactory(’foo’, ’pass’)! user.last_login = today - tdelta! ! tdelta = datetime.timedelta(days=30)! since = today - tdelta! users = User.objects.filter(! last_login > since)! if user not in users:! print ‘We have a problem’!
  • 32. FIRST - TIMELY (TDD) def test_my_profile(self):! response = client.get(‘/myprofile/’)! assert response.code == 302! ! def my_profile(request):! return redirect('/login/')! def test_my_profile(self):! response = client.get(‘/myprofile/’)! assert response.code == 302! def my_profile(request):! if not request.user.is_auth:! return redirect('/login/')! return 'OK'! ! ! ! ! ! ! user = UserFactory(’foo’, ’pass’)! client.login(‘foo’, ‘bar’})! response = client.get(‘/myprofile/’)! assert response.code == 200! def test_my_profile(self):! user = UserFactory(’foo’, ’pass’)! client.login(‘foo’, ‘bar’})! response = client.get(‘/myprofile/’)! assert 'Hello foo' in response ! ! ! ! ! ! ! ! ! ! ! def my_profile(request):! if not request.user.is_auth:! return redirect('/login/')! return 'Hello %s' % request.user
  • 34. CI Continuous Integration Is a practice of running tests and creating a build automatically.
  • 35. CI Principles you have to follow for CI: ! Maintain a code repo Automate the build/deploy Make the build self-testable Keep the build fast Everyone can see the results of the build Automate deployment (Continuous Deployment)
  • 36. DRY vs WET /drī/ vs /wet/
  • 37. DRY vs WET Don’t Repeat Yourself vs Write Everything Twice Is a principle that refers to reducing repeated blocks of common functionality to a separate sequence that can be called independently. ! It will help you achieve more reusability and automation.
  • 38. DRY vs WET def login_required():! if not user.is_authenticated():! return redirect(‘/login’)! ! def get(request):! login_required()! [ … ]! ! def post(request):! login_required()! [ … ]! ! def get(request):! if not user.is_authenticated():! return redirect(‘/login’)! [ … ]! ! def post(request):! if not user.is_authenticated():! return redirect(‘/login’)! [ … ]! !
  • 40. KISS Keep it simple, stupid Is a principle that the implementation has to follow the simplest logic instead of a complex one. ! It's probably the most difficult strategy in programming. Most user-friendly interfaces and interactions, are probably also the most over engineered.
  • 41. KISS Do not overcomplicate design or code, consider different approach and trade-off and finally choose the simplest one, based on system constraints and business rules. ! It will improve testability, usability and your code would probably be self-documented and much easier to refactor in the future, if required.
  • 42. KISS def add_user(uname, pwd):! epwd = md5(pwd)! user = User(uname, epwd)! user.save()! return user! def add_user(uname, pwd):! epwd = md5(pwd)! user = User(uname, epwd)! user.save()! ! ! ! send_email(user, ‘Hello World!’)! send_email(admin, ‘New User!’)! stats = Stats.filter('country')! stats += 1! stats.save()! login(uname, pwd)! redirect(‘/myprofile/’)
  • 44. XP Extreme programming Is a software development methodology which is intended to improve software quality and responsiveness to changing customer requirements. !
  • 46. Thank you! What are the acronyms you encountered? What are the principles you follow to deliver better code? ! Questions?