SlideShare uma empresa Scribd logo
1 de 110
Write your
- by
Bhavin Javia
@bhavinjavia
in
Style
www.mavenhive.in
Who this talk is
NOT for ?
I am the only one !
Who this talk
IS for ?
Dad ! Who’s ‘Ruby’ ?
Teams
Open Source
Contributors
Style Matters
Why bother ?
Story
Rubo
• Fascinated by computers
• Learnt programming in school/college
• Knew a few languages - C, C++, Java
• Loved Ruby
• Joined a Startup as an Intern
• Full of Ruby veterans
• Felt right at home
Story of Rubo
Ruby Rocks !
But,
As soon as he
committed some
code ...
WTF ?
OMG !
#$%@ Caveman !
Oh, Where did I
go wrong ?!
What was wrong ?
He lacked Style
Masters of Ruby
Style
http://www.flickr.com/photos/jakescruggs/4687409786/
http://vimeo.com/steveklabnik
https://si0.twimg.com/profile_images/2931712744/95043c0f42f0700bdbd713635e942ac0.jpeg
http://peepcode.com/blog/2011/my-avatar/circle1.jpg
• Java - Code Conventions for Java (by Oracle)
• Python - Style Guide for Python Code (PEP 8)
• PHP - Basic Coding Standard (PSR-1)
Many languages have
Coding Standards
http://www.oracle.com/technetwork/java/codeconv-138413.html
http://www.python.org/dev/peps/pep-0008/
http://www.php-fig.org/psr/1/
Why Ruby doesn’t ?
Many ways
to do things ...
And all of them work !
Ruby Sucks !
We need a Style Guide
What is a Style Guide ?
What’s a Style Guide ?
• Better way to write code
• Better way to lay-out code
• Right idioms to use and when
• Simplicity and Elegance
Helps you decide ...
http://flic.kr/p/5n8Rrd
what your code should look like ?
this ...
http://flic.kr/p/voGgz
or this ?
I’ve got my own Style
Why Style Guide ?
Why Style Guide ?
• Functional correctness not enough
• Visual consistency matters
• Reduce cognitive friction
• Avoid religious wars
• Increase team productivity
• Long term maintainability
Let the team own it
When
no one
owns the code,
everyone
owns the code !
http://flic.kr/p/6mHZfT
code which lasts 1000s of years
Examples
Code Layout
“ Nearly everybody is convinced that every style but their
own is ugly and unreadable. Leave out the "but their
own" and they're probably right...
- Jerry Coffin (on indentation)
# encoding: utf-8
https://help.github.com/articles/dealing-with-line-endings
$ git config --global core.autocrlf input # Mac/Linux
$ git config --global core.autocrlf true # Windows
Use UTF-8 as the source file encoding
Use Unix-style line endings
# bad - four spaces
def some_method
do_something
end
# good
def some_method
do_something
end
* No tabs please
Two spaces per indent
# bad
def too_much; something; something_else; end
# okish
def no_braces_method; body; end
# okish
def some_method() body end
# good
def some_method
body
end
* Not applicable to empty methods e.g.
# good
def no_op; end
Avoid single-line methods
# around operators, after commas, colons and semicolons,
around `{` and before `}`
sum = 1 + 2
a, b = 1, 2
1 > 2 ? true : false; puts 'Hi'
[1, 2, 3].each { |e| puts e }
* Not with exponent operator
# bad
e = M * c ** 2
# good
e = M * c**2
Use spaces
Indent when as deep as case
case
when song.name == 'Misty'
puts 'Not again!'
when song.duration > 120
puts 'Too long!'
when Time.now.hour > 21
puts "It's too late"
else
song.play
end
kind = case year
when 1850..1889 then 'Blues'
when 1890..1909 then 'Ragtime'
when 1910..1929 then 'New Orleans Jazz'
when 1930..1939 then 'Swing'
when 1940..1950 then 'Bebop'
else 'Jazz'
end
Avoid line continuation
# bad
result = 1 - 
2
# bad
result = 1 
- 2
# bad
one.two.three.
four
# good
one.two.three
.four
Chain methods with .
Align multi-line params
# starting point (line is too long)
def send_mail(source)
Mailer.deliver(to: 'bob@example.com', from:
'us@example.com', subject:
'Important message', body: source.
text)
end
# bad (normal indent)
def send_mail(source)
Mailer.deliver(
to: 'bob@example.com',
from: 'us@example.com',
subject: 'Important message',
body: source.text)
end
Align multi-line params
# bad (double indent)
def send_mail(source)
Mailer.deliver(
to: 'bob@example.com',
from: 'us@example.com',
subject: 'Important message',
body: source.text)
end
# good
def send_mail(source)
Mailer.deliver(to: 'bob@example.com',
from: 'us@example.com',
subject: 'Important message',
body: source.text)
end
num = 1000000
num = 1_000_000
Which one is correct ?
num = 1000000
num = 1_000_000
Both !
Which one is better ?
Add underscores to large
numeric literals
# bad - how many 0s are there?
num = 1000000
# good - much easier to parse
num = 1_000_000
class Array
# Calls <tt>to_param</tt> on all its elements and joins the result with
# slashes. This is used by <tt>url_for</tt> in Action Pack.
def to_param
collect { |e| e.to_param }.join '/'
end
end
Use RDoc and its conventions
for API docs
Syntax
Use Iterators
arr = [1, 2, 3]
# bad
for elem in arr do
puts elem
end
# good
arr.each { |elem| puts elem }
# bad
result = if some_condition then something else something_else end
# good
result = some_condition ? something : something_else
* for one line constructs
Favor the ternary operator (?:)
over if/then/else/end
# bad
some_condition ? (nested_condition ? nested_something :
nested_something_else) : something_else
# good
if some_condition
nested_condition ? nested_something : nested_something_else
else
something_else
end
Use one expression per branch
in a ternary operator
# bad
if
some_condition
do_something
do_something_else
end
# good
if some_condition
do_something
do_something_else
end
Always put the condition on
the same line
Favor unless over if for
negative conditions
# bad
do_something if !some_condition
# bad
do_something if not some_condition
# good
do_something unless some_condition
# another good option
some_condition || do_something
class Person
attr_reader :name, :age
# omitted
end
temperance = Person.new('Temperance', 30)
temperance.name
puts temperance.age
x = Math.sin(y)
array.delete(e)
bowling.score.should == 0
Omit parentheses around parameters
for methods that are part of internal
DSL, keyword status, accessors
names = ['Bozhidar', 'Steve', 'Sarah']
# bad
names.each do |name|
puts name
end
# good
names.each { |name| puts name }
* Avoid using {...} for multi-line blocks
Prefer {...} over do...end for
single-line blocks
# bad
def some_method(some_arr)
return some_arr.size
end
# good
def some_method(some_arr)
some_arr.size
end
Avoid return where not
required for flow of control
# bad
def ready?
if self.last_reviewed_at > self.last_updated_at
self.worker.update(self.content, self.options)
self.status = :in_progress
end
self.status == :verified
end
# good
def ready?
if last_reviewed_at > last_updated_at
worker.update(content, options)
self.status = :in_progress
end
status == :verified
end
* only required when calling a self write accessor
Avoid self where not required
Naming
“The only real difficulties in programming are cache
invalidation and naming things.
- Phil Karlton
Name identifiers in English
# bad - variable name written in Bulgarian with
latin characters
zaplata = 1_000
# good
salary = 1_000
Use CamelCase for
classes and modules
# bad
class Someclass
...
end
class Some_Class
...
end
class SomeXml
...
end
# good
class SomeClass
...
end
class SomeXML
...
end
* Keep acronyms like
HTTP, RFC, XML
uppercase
Use snake_case for symbols,
methods and variables
# bad
:'some symbol'
:SomeSymbol
:someSymbol
someVar = 5
def someMethod
...
end
def SomeMethod
...
end
# good
:some_symbol
some_var = 5
def some_method
...
end
Use SCREAMING_SNAKE_CASE
for other constants.
# bad
SomeConst = 5
# good
SOME_CONST = 5
Predicate methods shouldshould
end in a question mark ‘?’
# bad
def available
appointments.empty?
end
# good
def available?
appointments.empty?
end
* e.g. Array#empty?
Comments
“ Good code is its own best documentation ...
- Steve McConnell
“ Good code is like a good joke - it needs no explanation.
- Russ Olsen
Avoid superfluous comments
# bad
counter += 1 # increments counter by one
Avoid writing
comments to explain
bad code
An outdated comment
is worse than
no comment at all !
DON’T do it !
Use Comment
Annotations
• Use TODO to note missing features
• Use FIXME to note broken code
• Use HACK to note code smells
• Use OPTIMIZE to note inefficient code
One you’ve added
annotations
DO do the TODO !
Classes & Modules
Use a consistent structure in
your class definitions
class Person
# extend and include
extend SomeModule
include AnotherModule
# constants
SOME_CONSTANT = 20
# attribute macros
attr_reader :name
# other macros (if any)
validates :name
# public class methods are next in line
def self.some_method
end
# followed by public instance methods
def some_method
end
# protected/private methods
end
Implement to_s on
domain classes
class Person
attr_reader :first_name, :last_name
def initialize(first_name, last_name)
@first_name = first_name
@last_name = last_name
end
def to_s
"#{@first_name} #{@last_name}"
end
end
Use the attr family of functions
to define trivial accessors
# bad
class Person
def initialize(first_name, last_name)
@first_name = first_name
@last_name = last_name
end
def first_name
@first_name
end
def last_name
@last_name
end
end
# good
class Person
attr_reader :first_name, :last_name
def initialize(first_name, last_name)
@first_name = first_name
@last_name = last_name
end
end
What if I don’t like these
‘rules’ ?
Rules are meant
to be broken !
http://flic.kr/p/dKyXLP
http://flic.kr/p/7MdXLX
These are just
guidelines
Follow Style Guide
consistently
But,
“ A Foolish Consistency is the Hobgoblin of Little Minds
- Essays: First Series by RalphWaldo Emerson
Consistency at what level ?
• consistency with style guide - important
• consistency with project - more important
• consistency with module - most important
• readability matters
https://twitter.com/AgileBorat/status/307791971991289856
When to break the rule ?
• Applying the rule makes it less readable
• To be consistent with surrounding code
• Opportunity to clean up the mess
How to enforce
these rules ?
• Make it a standard team practice
• Select/Draft a style guide for project
• Make it a must read for everyone
• Use IDE support e.g. RubyMine inspections
How to enforce these rules ?
• Use Style Checker tools
• Integrate with CI
• Use a live style guide - fork it, send PRs
• Commit your IDE settings
• Point out violations in context
• Use Github inline commit notes
How to enforce these rules ?
https://github.com/blog/622-inline-commit-notes
Tools
Rubocop
https://github.com/bbatsov/rubocop
Demo
Like a Boss !
References
• https://github.com/bbatsov/ruby-style-guide
• https://github.com/styleguide/ruby
• https://github.com/bbatsov/rails-style-guide
Style Guides
References
• https://github.com/bbatsov/rubocop
• https://github.com/martinjandrews/roodi
• https://github.com/troessner/reek
Tools
Give it a shot
YMMV
Contribute your Style
to the community
ThankYou
Questions ?
@bhavinjavia
bhavin@mavenhive.in
www.mavenhive.in
@mavenhive

Mais conteúdo relacionado

Mais procurados

Part 2 in depth guide on word-press coding standards for css &amp; js big
Part 2  in depth guide on word-press coding standards for css &amp; js bigPart 2  in depth guide on word-press coding standards for css &amp; js big
Part 2 in depth guide on word-press coding standards for css &amp; js bigeSparkBiz
 
Documenting with xcode
Documenting with xcodeDocumenting with xcode
Documenting with xcodeGoran Blazic
 
STC 2016 Programming Language Storytime
STC 2016 Programming Language StorytimeSTC 2016 Programming Language Storytime
STC 2016 Programming Language StorytimeSarah Kiniry
 
P H P Part I, By Kian
P H P  Part  I,  By  KianP H P  Part  I,  By  Kian
P H P Part I, By Kianphelios
 
Red Flags in Programming
Red Flags in ProgrammingRed Flags in Programming
Red Flags in ProgrammingxSawyer
 
The Perl API for the Mortally Terrified (beta)
The Perl API for the Mortally Terrified (beta)The Perl API for the Mortally Terrified (beta)
The Perl API for the Mortally Terrified (beta)Mike Friedman
 

Mais procurados (6)

Part 2 in depth guide on word-press coding standards for css &amp; js big
Part 2  in depth guide on word-press coding standards for css &amp; js bigPart 2  in depth guide on word-press coding standards for css &amp; js big
Part 2 in depth guide on word-press coding standards for css &amp; js big
 
Documenting with xcode
Documenting with xcodeDocumenting with xcode
Documenting with xcode
 
STC 2016 Programming Language Storytime
STC 2016 Programming Language StorytimeSTC 2016 Programming Language Storytime
STC 2016 Programming Language Storytime
 
P H P Part I, By Kian
P H P  Part  I,  By  KianP H P  Part  I,  By  Kian
P H P Part I, By Kian
 
Red Flags in Programming
Red Flags in ProgrammingRed Flags in Programming
Red Flags in Programming
 
The Perl API for the Mortally Terrified (beta)
The Perl API for the Mortally Terrified (beta)The Perl API for the Mortally Terrified (beta)
The Perl API for the Mortally Terrified (beta)
 

Destaque

Síndrome de down
Síndrome de downSíndrome de down
Síndrome de down32dan
 
Центр поддержки семьи по бул. Хмельницкого, 24а
Центр поддержки семьи по бул. Хмельницкого, 24аЦентр поддержки семьи по бул. Хмельницкого, 24а
Центр поддержки семьи по бул. Хмельницкого, 24аАнтон Янченко
 
Rimborsi: nel PD molti dicono "Leggittimo, ma io non lo farei"
Rimborsi: nel PD molti dicono "Leggittimo, ma io non lo farei"Rimborsi: nel PD molti dicono "Leggittimo, ma io non lo farei"
Rimborsi: nel PD molti dicono "Leggittimo, ma io non lo farei"Francesco Errani
 
Certificación de Tegnología
Certificación de TegnologíaCertificación de Tegnología
Certificación de Tegnologíarizvanjamal
 
Current State of Cloud Computing (Jan 2016)
Current State of Cloud Computing (Jan 2016)Current State of Cloud Computing (Jan 2016)
Current State of Cloud Computing (Jan 2016)Joe Kinsella
 
Ceibal y más allá de la formación
Ceibal y más allá de la formaciónCeibal y más allá de la formación
Ceibal y más allá de la formaciónJorge Donato
 
Get on "The Cloud" with AWS
Get on "The Cloud" with AWSGet on "The Cloud" with AWS
Get on "The Cloud" with AWSBhavin Javia
 
Презентация Центра социально-психологической поддержки
Презентация Центра социально-психологической поддержкиПрезентация Центра социально-психологической поддержки
Презентация Центра социально-психологической поддержкиАнтон Янченко
 
Contexto de la Gestión del Conocimiento
Contexto de la Gestión del Conocimiento Contexto de la Gestión del Conocimiento
Contexto de la Gestión del Conocimiento Germania Rodriguez
 
Los valores humanos
Los valores humanosLos valores humanos
Los valores humanostomasmni
 
Google Cloud Platform and Kubernetes
Google Cloud Platform and KubernetesGoogle Cloud Platform and Kubernetes
Google Cloud Platform and KubernetesKasper Nissen
 
2016 1018 CIWEM SW seminar
2016 1018 CIWEM SW seminar2016 1018 CIWEM SW seminar
2016 1018 CIWEM SW seminarAlbert Chen
 
Infografia para docentes
Infografia para docentesInfografia para docentes
Infografia para docentesIgnasi Alcalde
 

Destaque (16)

Síndrome de down
Síndrome de downSíndrome de down
Síndrome de down
 
Центр поддержки семьи по бул. Хмельницкого, 24а
Центр поддержки семьи по бул. Хмельницкого, 24аЦентр поддержки семьи по бул. Хмельницкого, 24а
Центр поддержки семьи по бул. Хмельницкого, 24а
 
Part1.PDF
Part1.PDFPart1.PDF
Part1.PDF
 
Catalunya al rànquing THE
Catalunya al rànquing THECatalunya al rànquing THE
Catalunya al rànquing THE
 
Rimborsi: nel PD molti dicono "Leggittimo, ma io non lo farei"
Rimborsi: nel PD molti dicono "Leggittimo, ma io non lo farei"Rimborsi: nel PD molti dicono "Leggittimo, ma io non lo farei"
Rimborsi: nel PD molti dicono "Leggittimo, ma io non lo farei"
 
Certificación de Tegnología
Certificación de TegnologíaCertificación de Tegnología
Certificación de Tegnología
 
Current State of Cloud Computing (Jan 2016)
Current State of Cloud Computing (Jan 2016)Current State of Cloud Computing (Jan 2016)
Current State of Cloud Computing (Jan 2016)
 
Ceibal y más allá de la formación
Ceibal y más allá de la formaciónCeibal y más allá de la formación
Ceibal y más allá de la formación
 
Get on "The Cloud" with AWS
Get on "The Cloud" with AWSGet on "The Cloud" with AWS
Get on "The Cloud" with AWS
 
Презентация Центра социально-психологической поддержки
Презентация Центра социально-психологической поддержкиПрезентация Центра социально-психологической поддержки
Презентация Центра социально-психологической поддержки
 
Laporan hasil observasi
Laporan hasil observasiLaporan hasil observasi
Laporan hasil observasi
 
Contexto de la Gestión del Conocimiento
Contexto de la Gestión del Conocimiento Contexto de la Gestión del Conocimiento
Contexto de la Gestión del Conocimiento
 
Los valores humanos
Los valores humanosLos valores humanos
Los valores humanos
 
Google Cloud Platform and Kubernetes
Google Cloud Platform and KubernetesGoogle Cloud Platform and Kubernetes
Google Cloud Platform and Kubernetes
 
2016 1018 CIWEM SW seminar
2016 1018 CIWEM SW seminar2016 1018 CIWEM SW seminar
2016 1018 CIWEM SW seminar
 
Infografia para docentes
Infografia para docentesInfografia para docentes
Infografia para docentes
 

Semelhante a Write your Ruby in Style

Refactoring Workshop (Rails Pacific 2014)
Refactoring Workshop (Rails Pacific 2014)Refactoring Workshop (Rails Pacific 2014)
Refactoring Workshop (Rails Pacific 2014)Bruce Li
 
Writing Readable Code
Writing Readable CodeWriting Readable Code
Writing Readable Codeeddiehaber
 
Ruby for C# Developers
Ruby for C# DevelopersRuby for C# Developers
Ruby for C# DevelopersCory Foy
 
Ruby for .NET developers
Ruby for .NET developersRuby for .NET developers
Ruby for .NET developersMax Titov
 
Intro to Ruby - Twin Cities Code Camp 7
Intro to Ruby - Twin Cities Code Camp 7Intro to Ruby - Twin Cities Code Camp 7
Intro to Ruby - Twin Cities Code Camp 7Brian Hogan
 
name name2 n
name name2 nname name2 n
name name2 ncallroom
 
name name2 n2
name name2 n2name name2 n2
name name2 n2callroom
 
name name2 n
name name2 nname name2 n
name name2 ncallroom
 
name name2 n
name name2 nname name2 n
name name2 ncallroom
 
name name2 n2.ppt
name name2 n2.pptname name2 n2.ppt
name name2 n2.pptcallroom
 

Semelhante a Write your Ruby in Style (20)

Refactoring Workshop (Rails Pacific 2014)
Refactoring Workshop (Rails Pacific 2014)Refactoring Workshop (Rails Pacific 2014)
Refactoring Workshop (Rails Pacific 2014)
 
Writing Readable Code
Writing Readable CodeWriting Readable Code
Writing Readable Code
 
Ruby for C# Developers
Ruby for C# DevelopersRuby for C# Developers
Ruby for C# Developers
 
Language supports it
Language supports itLanguage supports it
Language supports it
 
Clean code
Clean codeClean code
Clean code
 
Ruby for .NET developers
Ruby for .NET developersRuby for .NET developers
Ruby for .NET developers
 
Intro to Ruby - Twin Cities Code Camp 7
Intro to Ruby - Twin Cities Code Camp 7Intro to Ruby - Twin Cities Code Camp 7
Intro to Ruby - Twin Cities Code Camp 7
 
Designing Ruby APIs
Designing Ruby APIsDesigning Ruby APIs
Designing Ruby APIs
 
Ruby Hell Yeah
Ruby Hell YeahRuby Hell Yeah
Ruby Hell Yeah
 
ppt7
ppt7ppt7
ppt7
 
ppt2
ppt2ppt2
ppt2
 
name name2 n
name name2 nname name2 n
name name2 n
 
name name2 n2
name name2 n2name name2 n2
name name2 n2
 
test ppt
test ppttest ppt
test ppt
 
name name2 n
name name2 nname name2 n
name name2 n
 
ppt21
ppt21ppt21
ppt21
 
name name2 n
name name2 nname name2 n
name name2 n
 
ppt17
ppt17ppt17
ppt17
 
ppt30
ppt30ppt30
ppt30
 
name name2 n2.ppt
name name2 n2.pptname name2 n2.ppt
name name2 n2.ppt
 

Mais de Bhavin Javia

Make ruby talk to your users - literally
Make ruby talk to your users - literallyMake ruby talk to your users - literally
Make ruby talk to your users - literallyBhavin Javia
 
12 Steps to DevOps Nirvana
12 Steps to DevOps Nirvana12 Steps to DevOps Nirvana
12 Steps to DevOps NirvanaBhavin Javia
 
Agile for Startups
Agile for StartupsAgile for Startups
Agile for StartupsBhavin Javia
 
Software Quality and Test Strategies for Ruby and Rails Applications
Software Quality and Test Strategies for Ruby and Rails ApplicationsSoftware Quality and Test Strategies for Ruby and Rails Applications
Software Quality and Test Strategies for Ruby and Rails ApplicationsBhavin Javia
 
Agile Team Dynamics
Agile Team DynamicsAgile Team Dynamics
Agile Team DynamicsBhavin Javia
 
Continuous Integration and Builds
Continuous Integration and BuildsContinuous Integration and Builds
Continuous Integration and BuildsBhavin Javia
 
Productive Programmer - Using IDE effectively and various small practices to ...
Productive Programmer - Using IDE effectively and various small practices to ...Productive Programmer - Using IDE effectively and various small practices to ...
Productive Programmer - Using IDE effectively and various small practices to ...Bhavin Javia
 

Mais de Bhavin Javia (7)

Make ruby talk to your users - literally
Make ruby talk to your users - literallyMake ruby talk to your users - literally
Make ruby talk to your users - literally
 
12 Steps to DevOps Nirvana
12 Steps to DevOps Nirvana12 Steps to DevOps Nirvana
12 Steps to DevOps Nirvana
 
Agile for Startups
Agile for StartupsAgile for Startups
Agile for Startups
 
Software Quality and Test Strategies for Ruby and Rails Applications
Software Quality and Test Strategies for Ruby and Rails ApplicationsSoftware Quality and Test Strategies for Ruby and Rails Applications
Software Quality and Test Strategies for Ruby and Rails Applications
 
Agile Team Dynamics
Agile Team DynamicsAgile Team Dynamics
Agile Team Dynamics
 
Continuous Integration and Builds
Continuous Integration and BuildsContinuous Integration and Builds
Continuous Integration and Builds
 
Productive Programmer - Using IDE effectively and various small practices to ...
Productive Programmer - Using IDE effectively and various small practices to ...Productive Programmer - Using IDE effectively and various small practices to ...
Productive Programmer - Using IDE effectively and various small practices to ...
 

Último

presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century educationjfdjdjcjdnsjd
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAndrey Devyatkin
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoffsammart93
 
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWEREMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWERMadyBayot
 
CNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In PakistanCNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In Pakistandanishmna97
 
Six Myths about Ontologies: The Basics of Formal Ontology
Six Myths about Ontologies: The Basics of Formal OntologySix Myths about Ontologies: The Basics of Formal Ontology
Six Myths about Ontologies: The Basics of Formal Ontologyjohnbeverley2021
 
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...apidays
 
WSO2's API Vision: Unifying Control, Empowering Developers
WSO2's API Vision: Unifying Control, Empowering DevelopersWSO2's API Vision: Unifying Control, Empowering Developers
WSO2's API Vision: Unifying Control, Empowering DevelopersWSO2
 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodJuan lago vázquez
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...apidays
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyKhushali Kathiriya
 
DBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDropbox
 
[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdfSandro Moreira
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfsudhanshuwaghmare1
 
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Victor Rentea
 
MS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsMS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsNanddeep Nachan
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingEdi Saputra
 
Elevate Developer Efficiency & build GenAI Application with Amazon Q​
Elevate Developer Efficiency & build GenAI Application with Amazon Q​Elevate Developer Efficiency & build GenAI Application with Amazon Q​
Elevate Developer Efficiency & build GenAI Application with Amazon Q​Bhuvaneswari Subramani
 
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...Angeliki Cooney
 

Último (20)

presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWEREMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
 
CNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In PakistanCNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In Pakistan
 
Six Myths about Ontologies: The Basics of Formal Ontology
Six Myths about Ontologies: The Basics of Formal OntologySix Myths about Ontologies: The Basics of Formal Ontology
Six Myths about Ontologies: The Basics of Formal Ontology
 
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
 
WSO2's API Vision: Unifying Control, Empowering Developers
WSO2's API Vision: Unifying Control, Empowering DevelopersWSO2's API Vision: Unifying Control, Empowering Developers
WSO2's API Vision: Unifying Control, Empowering Developers
 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : Uncertainty
 
DBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor Presentation
 
[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
 
MS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsMS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectors
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
 
Elevate Developer Efficiency & build GenAI Application with Amazon Q​
Elevate Developer Efficiency & build GenAI Application with Amazon Q​Elevate Developer Efficiency & build GenAI Application with Amazon Q​
Elevate Developer Efficiency & build GenAI Application with Amazon Q​
 
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
 

Write your Ruby in Style