SlideShare a Scribd company logo
CSMESS TO OOCSS
Refactoring CSS With Object Oriented Design
Kate Travers // kate@flatironschool.com // @kttravers // github: ktravers
CSMess to OOCSS: Refactoring CSS with Object Oriented Design
Modular
Encapsulated
Maintainable
OBJECT ORIENTED DESIGN
└── assets
└── stylesheets
├── admissions
│ ├── index.scss
│ └── show.scss
├── lessons
│ ├── index.scss
│ └── show.scss
├── shared
│ ├── _fonts.scss
│ ├── _vars.scss
│ ├── _mixins.scss
│ ├── footer.scss
│ ├── header.scss
│ └── nav.scss
├── application.scss
├── admissions.scss
├── lessons.scss
├── shared.scss
etc...
#lesson-show {
position: fixed;
width: auto;
top: 10px;
left: 80px;
z-index: 10;
.title {
margin-top: 0;
vertical-align: middle;
}
.btn-row {
line-height: 1;
padding-left: 15px;
background-color: $light-gray;
margin-bottom: 4px;
margin-left: 8px;
}
/* etc... */
}
└── assets
└── stylesheets
├── admissions
│ ├── index.scss
│ └── show.scss
├── lessons
│ ├── index.scss
│ └── show.scss
├── shared
│ ├── _fonts.scss
│ ├── _vars.scss
│ ├── _mixins.scss
│ ├── footer.scss
│ ├── header.scss
│ └── nav.scss
├── application.scss
├── admissions.scss
├── lessons.scss
├── shared.scss
etc...
└── assets
└── stylesheets
├── admissions
│ ├── index.scss
│ └── show.scss
├── lessons
│ ├── index.scss
│ └── show.scss
├── shared
│ ├── _fonts.scss
│ ├── _vars.scss
│ ├── _mixins.scss
│ ├── footer.scss
│ ├── header.scss
│ └── nav.scss
├── application.scss
├── admissions.scss
├── lessons.scss
├── shared.scss
etc...
LEARN_V1
NATIVE
213 stylesheets
1.3 MB
VENDOR
116 stylesheets
848 KB
TOTAL
329 stylesheets
2.1 MB
MODULAR
ENCAPSULATED
MAINTAINABLE
MODULAR
ENCAPSULATED
MAINTAINABLE
MODULAR
Coupled to single view
ENCAPSULATED
MAINTAINABLE
MODULAR
Coupled to single view
Too brittle / specific to re-use
ENCAPSULATED
MAINTAINABLE
MODULAR
Coupled to single view
Too brittle / specific to re-use
ENCAPSULATED
MAINTAINABLE
MODULAR
Coupled to single view
Too brittle / specific to re-use
ENCAPSULATED
Specificity wars
MAINTAINABLE
MODULAR
Coupled to single view
Too brittle / specific to re-use
ENCAPSULATED
Specificity wars
Unpredictable behavior
MAINTAINABLE
MODULAR
Coupled to single view
Too brittle / specific to re-use
ENCAPSULATED
Specificity wars
Unpredictable behavior
MAINTAINABLE
MODULAR
Coupled to single view
Too brittle / specific to re-use
ENCAPSULATED
Specificity wars
Unpredictable behavior
MAINTAINABLE
Writing new CSS for every view
MODULAR
Coupled to single view
Too brittle / specific to re-use
ENCAPSULATED
Specificity wars
Unpredictable behavior
MAINTAINABLE
Writing new CSS for every view
Difficult to onboard new team members
SOLUTION?
CSMess to OOCSS: Refactoring CSS with Object Oriented Design
OFF-THE-SHELF ROLL YOUR OWN
OFF-THE-SHELF ROLL YOUR OWN
Heavy
OFF-THE-SHELF ROLL YOUR OWN
Heavy Lightweight
OFF-THE-SHELF ROLL YOUR OWN
Heavy Lightweight
OFF-THE-SHELF ROLL YOUR OWN
Heavy Lightweight
Override-able
OFF-THE-SHELF ROLL YOUR OWN
Heavy Lightweight
Override-able Extensible
OFF-THE-SHELF ROLL YOUR OWN
Heavy Lightweight
Override-able Extensible
OFF-THE-SHELF ROLL YOUR OWN
Heavy Lightweight
Override-able Extensible
Third-party maintainers
OFF-THE-SHELF ROLL YOUR OWN
Heavy Lightweight
Override-able Extensible
Third-party maintainers Internally maintained
OFF-THE-SHELF ROLL YOUR OWN
Heavy Lightweight
Override-able Extensible
Third-party maintainers Internally maintained
CASE STUDY:
Flatiron School’s
Learn CSS Framework
ROADMAP
1. Take visual inventory of app’s UI/UX
ROADMAP
1. Take visual inventory of app’s UI/UX
2. Build component OOCSS library
ROADMAP
1. Take visual inventory of app’s UI/UX
2. Build component OOCSS library
3. Rewrite CSS and markup
ROADMAP
1. Take visual inventory of app’s UI/UX
2. Build component OOCSS library
3. Rewrite CSS and markup
4. Onboard your team
ROADMAP
STEP 1:
Visual Inventory
CSMess to OOCSS: Refactoring CSS with Object Oriented Design
CSMess to OOCSS: Refactoring CSS with Object Oriented Design
header
section
main
section
sidebar
section
CSMess to OOCSS: Refactoring CSS with Object Oriented Design
multi-part container with borders and white background
CSMess to OOCSS: Refactoring CSS with Object Oriented Design
multi-part container with text sitting next to media
CSMess to OOCSS: Refactoring CSS with Object Oriented Design
circular object with image
STEP 2:
COMPONENT
LIBRARY
STEP 2:
Component Library
.site-header
.site-sidebar.site-main
LAYOUT COMPONENTS
.site-subheader
.site-banner
.site-header
.site-sidebar.site-main
LAYOUT >> CONTAINER COMPONENTS
.site-subheader
.site-banner
.module .media-block
.media-block
.media-block
.media-block
.site-header
.site-sidebar.site-main
LAYOUT >> CONTAINER >> OBJECT COMPONENTS
.site-subheader
.site-banner
.module .media-block
.media-block
.media-block
.media-block
.image .text-block .button
.site-header
.site-sidebar.site-main
LAYOUT >> CONTAINER >> OBJECT >> GLOBAL COMPONENTS
.site-subheader
.site-banner
.module .media-block
.media-block
.media-block
.media-block
.image .text-block .button.util--pull-right
Modular components defined through
strong naming conventions
Compartmentalized
Portable
MODULAR COMPONENTS
Compartmentalized
Limited/single responsibility
Portable
MODULAR COMPONENTS
Compartmentalized
Limited/single responsibility
Complexity through combination
Portable
MODULAR COMPONENTS
Compartmentalized
Limited/single responsibility
Complexity through combination
Portable
Interchangeable from view to view
MODULAR COMPONENTS
Compartmentalized
Limited/single responsibility
Complexity through combination
Portable
Interchangeable from view to view
Components don’t affect parent or relative styles
MODULAR COMPONENTS
STRONG NAMING CONVENTIONS
Generic class names
STRONG NAMING CONVENTIONS
Generic class names
Semantic syntax
STRONG NAMING CONVENTIONS
BEM SYNTAX
.block__element--modifier
/* Block component */
.list
/* Child element of parent block */
.list__card
/* Modifier that changes the style of the block */
.list--accordion
.list--spacing-large
└── assets
└── stylesheets
├── layout
│ ├── site-header.scss
│ ├── site-footer.scss
│ └── site-main.scss
├── containers
│ ├── list.scss
│ ├── media-block.scss
│ └── module.scss
├── objects
│ ├── button.scss
│ ├── image-frame.scss
│ └── input.scss
├── global
│ ├── special.scss
│ ├── typography.scss
│ └── vars.scss
└── application.scss
STEP 3:
Rewrite
multi-part container with text sitting next to media
.media-block--side-alt
.media-block--dual-media
.media-block--side-alt
.media-block
MEDIA BLOCK
/*
* Overall Rules
*/
.media-block { display: table; }
/*
* Local Descendants
*/
.media-block__content {
display: table-cell;
vertical-align: middle;
}
.media-block__media {
display: table-cell;
vertical-align: middle;
padding-right: $content-spacing;
}
/*
* Overall Rules
*/
.media-block { display: table; }
/*
* Local Descendants
*/
.media-block__content {
display: table-cell;
vertical-align: middle;
}
.media-block__media {
display: table-cell;
vertical-align: middle;
padding-right: $content-spacing;
}
.media-block
.media-block__content.media-block__media
/*
* Overall Rules
*/
.media-block { display: table; }
/*
* Local Descendants
*/
.media-block__content {
display: table-cell;
vertical-align: middle;
}
.media-block__media {
display: table-cell;
vertical-align: middle;
padding-right: $content-spacing;
}
<!-- Start by outlining the basic container + objects -->
<div class="media-block">
<div class="media-block__media">
<!-- circle with user’s profile picture -->
</div>
<div class="media-block__content">
<!-- text object: user name -->
<!-- text object: time ago -->
<!-- text object: action completed by user -->
</div>
</div>
/*
* Overall Rules
*/
.media-block { display: table; }
/*
* Local Descendants
*/
.media-block__content {
display: table-cell;
vertical-align: middle;
}
.media-block__media {
display: table-cell;
vertical-align: middle;
padding-right: $content-spacing;
}
<!-- Start by outlining the basic container + objects -->
<div class="media-block">
<div class="media-block__media">
<!-- circle with user’s profile picture -->
</div>
<div class="media-block__content">
<!-- text object: user name -->
<!-- text object: time ago -->
<!-- text object: action completed by user -->
</div>
</div>
/*
* Overall Rules
*/
.media-block { display: table; }
/*
* Local Descendants
*/
.media-block__content {
display: table-cell;
vertical-align: middle;
}
.media-block__media {
display: table-cell;
vertical-align: middle;
padding-right: $content-spacing;
}
<div class="media-block">
<div class="media-block__media">
<!-- image container that adds circle border radius -->
<div class="image-frame image-frame--border-radius-full">
<!-- image object -->
<img class="image-frame__image" src="img.png"/>
</div>
</div>
<div class="media-block__content">
<!-- text object: user name -->
<!-- text object: time ago -->
<!-- text object: action completed by user -->
</div>
</div>
/*
* Overall Rules
*/
.media-block { display: table; }
/*
* Local Descendants
*/
.media-block__content {
display: table-cell;
vertical-align: middle;
}
.media-block__media {
display: table-cell;
vertical-align: middle;
padding-right: $content-spacing;
}
<div class="media-block">
<div class="media-block__media">
<!-- image container that adds circle border radius -->
<div class="image-frame image-frame--border-radius-full">
<!-- image object -->
<img class="image-frame__image" src="img.png"/>
</div>
</div>
<div class="media-block__content">
<!-- text object: user name -->
<!-- text object: time ago -->
<!-- text object: action completed by user -->
</div>
</div>
/*
* Overall Rules
*/
.media-block { display: table; }
/*
* Local Descendants
*/
.media-block__content {
display: table-cell;
vertical-align: middle;
}
.media-block__media {
display: table-cell;
vertical-align: middle;
padding-right: $content-spacing;
}
<div class="media-block">
<div class="media-block__media">
<div class="image-frame image-frame--border-radius-full">
<img class="image-frame__image" src="img.png"/>
</div>
</div>
<div class="media-block__content">
<!-- .heading is an text object component -->
<!-- can be applied to text and non-text DOM elements -->
<span class="heading heading--level-5">Brent...</span>
<span class="heading heading--level-6">5 min ago</span>
<h5 class="heading heading--level-5">Built...</h5>
</div>
</div>
/*
* Overall Rules
*/
.media-block { display: table; }
/*
* Local Descendants
*/
.media-block__content {
display: table-cell;
vertical-align: middle;
}
.media-block__media {
display: table-cell;
vertical-align: middle;
padding-right: $content-spacing;
}
<!-- End product: encapsulated, reusable block of markup -->
<!-- Ready to drop into any view -->
<div class="media-block">
<div class="media-block__media">
<div class="image-frame image-frame--border-radius-full">
<img class="image-frame__image" src="img.png"/>
</div>
</div>
<div class="media-block__content">
<span class="heading heading--level-5">Brent...</span>
<span class="heading heading--level-6">5 min ago</span>
<h5 class="heading heading--level-5">Built...</h5>
</div>
</div>
But what about your
JAVASCRIPT?
BEM SYNTAX
.js--<whatever>
STEP 4:
Onboarding
PHASE 1
New stylesheets and markup shipped behind feature flag
PHASE 1
New stylesheets and markup shipped behind feature flag
Training session on BEM syntax, OOCSS basics
PHASE 1
PHASE 2
QA testing: feature turned on for select user groups
PHASE 2
QA testing: feature turned on for select user groups
Training session on rewriting existing markup
PHASE 2
QA testing: feature turned on for select user groups
Training session on rewriting existing markup
Identify & assign views for “hands-on learning” rewrites
PHASE 2
PHASE 3
Launch: feature 100% live
PHASE 3
Launch: feature 100% live
Ship style guide with full framework documentation
PHASE 3
Launch: feature 100% live
Ship style guide with full framework documentation
Pair with teammates as needed on new feature builds
PHASE 3
CHALLENGES
SCOPE CREEP
Originally prototyped for 3 user-facing views
SCOPE CREEP
Originally prototyped for 3 user-facing views
Grew to cover ALL user-facing views
SCOPE CREEP
Originally prototyped for 3 user-facing views
Grew to cover ALL user-facing views
Packaged with JS refactor
SCOPE CREEP
NEOPHOBES
Comfortable doing things the “old way”
NEOPHOBES
Comfortable doing things the “old way”
Wary of new system
NEOPHOBES
OUTLIERS
New designs introduce “one-off” elements
OUTLIERS
New designs introduce “one-off” elements
Push back on design/product
OUTLIERS
New designs introduce “one-off” elements
Push back on design/product
Justify introduction of stylistic inconsistencies
OUTLIERS
RESULTS
UX GAINS
Faster pageloads
UX GAINS
Faster pageloads
More consistent, cohesive UI
UX GAINS
DEVELOPMENT GAINS
Ship faster
DEVELOPMENT GAINS
Ship faster
Fast, accurate prototyping
DEVELOPMENT GAINS
Ship faster
Fast, accurate prototyping
Accessible, maintainable stylesheets
DEVELOPMENT GAINS
PERFORMANCE GAINS
LEARN_V1 LEARN_V2 (OOCSS)
NATIVE
213 stylesheets 31 stylesheets
1.3 MB 193 KB
VENDOR
116 stylesheets 6 stylesheets
848 KB 49 KB
TOTAL
329 stylesheets 37 stylesheets
2.1 MB 242 KB
LEARN_V1 LEARN_V2 (OOCSS)
NATIVE
213 stylesheets 31 stylesheets
1.3 MB 193 KB
VENDOR
116 stylesheets 6 stylesheets
848 KB 49 KB
TOTAL
329 stylesheets 37 stylesheets
2.1 MB 242 KB
LEARN_V1 LEARN_V2 (OOCSS)
TRACK#SHOW
262 ms 108 ms
LESSON#SHOW
98 ms 48 ms
PUBLIC_LESSON#SHOW
40 ms 21 ms
LEARN_V1 LEARN_V2 (OOCSS)
TRACK#SHOW
262 ms 108 ms
LESSON#SHOW
98 ms 48 ms
PUBLIC_LESSON#SHOW
40 ms 21 ms
Kate Travers // kate@flatironschool.com // @kttravers // github: ktravers
QUESTIONS?
Nicole Sullivan’s OOCSS
https://github.com/stubbornella/oocss/wiki
http://confreaks.tv/presenters/nicole-sullivan
BEM Syntax
https://css-tricks.com/bem-101/
https://en.bem.info/method/key-concepts/
RESOURCES

More Related Content

Similar to CSMess to OOCSS: Refactoring CSS with Object Oriented Design (20)

CSS - OOCSS, SMACSS and more
CSS - OOCSS, SMACSS and moreCSS - OOCSS, SMACSS and more
CSS - OOCSS, SMACSS and more
Russ Weakley
 
OOCSS for Javascript pirates at jQueryPgh meetup
OOCSS for Javascript pirates at jQueryPgh meetupOOCSS for Javascript pirates at jQueryPgh meetup
OOCSS for Javascript pirates at jQueryPgh meetup
Brian Cavalier
 
Accelerated Stylesheets
Accelerated StylesheetsAccelerated Stylesheets
Accelerated Stylesheets
Wynn Netherland
 
Object Oriented CSS
Object Oriented CSSObject Oriented CSS
Object Oriented CSS
Derek Bender
 
OOCSS
OOCSSOOCSS
OOCSS
YoniWeb
 
Cascading Style Sheets CSS
Cascading Style Sheets CSS Cascading Style Sheets CSS
Cascading Style Sheets CSS
Asif Shahzad
 
css.pdf
css.pdfcss.pdf
css.pdf
AbdulRafayawan
 
What is Object Oriented CSS?
What is Object Oriented CSS?What is Object Oriented CSS?
What is Object Oriented CSS?
Nicole Sullivan
 
Css methods architecture
Css methods architectureCss methods architecture
Css methods architecture
Lasha Sumbadze
 
The New UI - Staying Strong with Flexbox, SASS, and {{Mustache.js}}
The New UI - Staying Strong with Flexbox, SASS, and {{Mustache.js}}The New UI - Staying Strong with Flexbox, SASS, and {{Mustache.js}}
The New UI - Staying Strong with Flexbox, SASS, and {{Mustache.js}}
Eric Carlisle
 
OOCSS for JavaScript Pirates jQcon Boston
OOCSS for JavaScript Pirates jQcon BostonOOCSS for JavaScript Pirates jQcon Boston
OOCSS for JavaScript Pirates jQcon Boston
John Hann
 
Structuring your CSS for maintainability: rules and guile lines to write CSS
Structuring your CSS for maintainability: rules and guile lines to write CSSStructuring your CSS for maintainability: rules and guile lines to write CSS
Structuring your CSS for maintainability: rules and guile lines to write CSS
Sanjoy Kr. Paul
 
How to develop a CSS Framework
How to develop a CSS FrameworkHow to develop a CSS Framework
How to develop a CSS Framework
Olivier Besson
 
Css framework
Css frameworkCss framework
Css framework
Olivier Besson
 
Css framework
Css frameworkCss framework
Css framework
Olivier Besson
 
Sass Essentials at Mobile Camp LA
Sass Essentials at Mobile Camp LASass Essentials at Mobile Camp LA
Sass Essentials at Mobile Camp LA
Jake Johnson
 
OOScss Architecture For Rails Apps
OOScss Architecture For Rails AppsOOScss Architecture For Rails Apps
OOScss Architecture For Rails Apps
Netguru
 
Building Better Responsive Websites
Building Better Responsive WebsitesBuilding Better Responsive Websites
Building Better Responsive Websites
Holger Bartel
 
X-TREME THEMES
X-TREME THEMESX-TREME THEMES
X-TREME THEMES
FITC
 
Class15
Class15Class15
Class15
Jiyeon Lee
 
CSS - OOCSS, SMACSS and more
CSS - OOCSS, SMACSS and moreCSS - OOCSS, SMACSS and more
CSS - OOCSS, SMACSS and more
Russ Weakley
 
OOCSS for Javascript pirates at jQueryPgh meetup
OOCSS for Javascript pirates at jQueryPgh meetupOOCSS for Javascript pirates at jQueryPgh meetup
OOCSS for Javascript pirates at jQueryPgh meetup
Brian Cavalier
 
Object Oriented CSS
Object Oriented CSSObject Oriented CSS
Object Oriented CSS
Derek Bender
 
Cascading Style Sheets CSS
Cascading Style Sheets CSS Cascading Style Sheets CSS
Cascading Style Sheets CSS
Asif Shahzad
 
What is Object Oriented CSS?
What is Object Oriented CSS?What is Object Oriented CSS?
What is Object Oriented CSS?
Nicole Sullivan
 
Css methods architecture
Css methods architectureCss methods architecture
Css methods architecture
Lasha Sumbadze
 
The New UI - Staying Strong with Flexbox, SASS, and {{Mustache.js}}
The New UI - Staying Strong with Flexbox, SASS, and {{Mustache.js}}The New UI - Staying Strong with Flexbox, SASS, and {{Mustache.js}}
The New UI - Staying Strong with Flexbox, SASS, and {{Mustache.js}}
Eric Carlisle
 
OOCSS for JavaScript Pirates jQcon Boston
OOCSS for JavaScript Pirates jQcon BostonOOCSS for JavaScript Pirates jQcon Boston
OOCSS for JavaScript Pirates jQcon Boston
John Hann
 
Structuring your CSS for maintainability: rules and guile lines to write CSS
Structuring your CSS for maintainability: rules and guile lines to write CSSStructuring your CSS for maintainability: rules and guile lines to write CSS
Structuring your CSS for maintainability: rules and guile lines to write CSS
Sanjoy Kr. Paul
 
How to develop a CSS Framework
How to develop a CSS FrameworkHow to develop a CSS Framework
How to develop a CSS Framework
Olivier Besson
 
Sass Essentials at Mobile Camp LA
Sass Essentials at Mobile Camp LASass Essentials at Mobile Camp LA
Sass Essentials at Mobile Camp LA
Jake Johnson
 
OOScss Architecture For Rails Apps
OOScss Architecture For Rails AppsOOScss Architecture For Rails Apps
OOScss Architecture For Rails Apps
Netguru
 
Building Better Responsive Websites
Building Better Responsive WebsitesBuilding Better Responsive Websites
Building Better Responsive Websites
Holger Bartel
 
X-TREME THEMES
X-TREME THEMESX-TREME THEMES
X-TREME THEMES
FITC
 

Recently uploaded (20)

Interactive SQL: SQL, Features of SQL, DDL & DML
Interactive SQL: SQL, Features of SQL,  DDL & DMLInteractive SQL: SQL, Features of SQL,  DDL & DML
Interactive SQL: SQL, Features of SQL, DDL & DML
IsakkiDeviP
 
A simple Introduction to Algorithmic Fairness
A simple Introduction to Algorithmic FairnessA simple Introduction to Algorithmic Fairness
A simple Introduction to Algorithmic Fairness
Paolo Missier
 
"AI in the browser: predicting user actions in real time with TensorflowJS", ...
"AI in the browser: predicting user actions in real time with TensorflowJS", ..."AI in the browser: predicting user actions in real time with TensorflowJS", ...
"AI in the browser: predicting user actions in real time with TensorflowJS", ...
Fwdays
 
GraphSummit Singapore Master Deck - May 20, 2025
GraphSummit Singapore Master Deck - May 20, 2025GraphSummit Singapore Master Deck - May 20, 2025
GraphSummit Singapore Master Deck - May 20, 2025
Neo4j
 
NVIDIA’s Enterprise AI Factory and Blueprints_ Paving the Way for Smart, Scal...
NVIDIA’s Enterprise AI Factory and Blueprints_ Paving the Way for Smart, Scal...NVIDIA’s Enterprise AI Factory and Blueprints_ Paving the Way for Smart, Scal...
NVIDIA’s Enterprise AI Factory and Blueprints_ Paving the Way for Smart, Scal...
derrickjswork
 
Is Your QA Team Still Working in Silos? Here's What to Do.
Is Your QA Team Still Working in Silos? Here's What to Do.Is Your QA Team Still Working in Silos? Here's What to Do.
Is Your QA Team Still Working in Silos? Here's What to Do.
marketing943205
 
STKI Annual Israel IT Market Study 2025 .
STKI Annual Israel IT Market Study 2025 .STKI Annual Israel IT Market Study 2025 .
STKI Annual Israel IT Market Study 2025 .
Dr. Jimmy Schwarzkopf
 
Four Principles for Physically Interpretable World Models
Four Principles for Physically Interpretable World ModelsFour Principles for Physically Interpretable World Models
Four Principles for Physically Interpretable World Models
Ivan Ruchkin
 
Optimize IBM i with Consulting Services Help
Optimize IBM i with Consulting Services HelpOptimize IBM i with Consulting Services Help
Optimize IBM i with Consulting Services Help
Alice Gray
 
Wondershare Filmora 14.3.2 Crack + License Key Free for Windows PC
Wondershare Filmora 14.3.2 Crack + License Key Free for Windows PCWondershare Filmora 14.3.2 Crack + License Key Free for Windows PC
Wondershare Filmora 14.3.2 Crack + License Key Free for Windows PC
Mudasir
 
Pushing the Limits: CloudStack at 25K Hosts
Pushing the Limits: CloudStack at 25K HostsPushing the Limits: CloudStack at 25K Hosts
Pushing the Limits: CloudStack at 25K Hosts
ShapeBlue
 
RDM Training: Publish research data with the Research Data Repository
RDM Training: Publish research data with the Research Data RepositoryRDM Training: Publish research data with the Research Data Repository
RDM Training: Publish research data with the Research Data Repository
CSUC - Consorci de Serveis Universitaris de Catalunya
 
Eating Our Own Dog Food: How to be taken seriously when it comes to adding va...
Eating Our Own Dog Food: How to be taken seriously when it comes to adding va...Eating Our Own Dog Food: How to be taken seriously when it comes to adding va...
Eating Our Own Dog Food: How to be taken seriously when it comes to adding va...
UXPA Boston
 
Building Agents with LangGraph & Gemini
Building Agents with LangGraph &  GeminiBuilding Agents with LangGraph &  Gemini
Building Agents with LangGraph & Gemini
HusseinMalikMammadli
 
Managing Geospatial Open Data Serverlessly [AWS Community Day CH 2025]
Managing Geospatial Open Data Serverlessly [AWS Community Day CH 2025]Managing Geospatial Open Data Serverlessly [AWS Community Day CH 2025]
Managing Geospatial Open Data Serverlessly [AWS Community Day CH 2025]
Chris Bingham
 
Build your own NES Emulator... with Kotlin
Build your own NES Emulator... with KotlinBuild your own NES Emulator... with Kotlin
Build your own NES Emulator... with Kotlin
Artur Skowroński
 
Building Connected Agents: An Overview of Google's ADK and A2A Protocol
Building Connected Agents:  An Overview of Google's ADK and A2A ProtocolBuilding Connected Agents:  An Overview of Google's ADK and A2A Protocol
Building Connected Agents: An Overview of Google's ADK and A2A Protocol
Suresh Peiris
 
Fully Open-Source Private Clouds: Freedom, Security, and Control
Fully Open-Source Private Clouds: Freedom, Security, and ControlFully Open-Source Private Clouds: Freedom, Security, and Control
Fully Open-Source Private Clouds: Freedom, Security, and Control
ShapeBlue
 
CloudStack + KVM: Your Local Cloud Lab
CloudStack + KVM:   Your Local Cloud LabCloudStack + KVM:   Your Local Cloud Lab
CloudStack + KVM: Your Local Cloud Lab
ShapeBlue
 
TAFs on WebDriver API - By - Pallavi Sharma.pdf
TAFs on WebDriver API - By - Pallavi Sharma.pdfTAFs on WebDriver API - By - Pallavi Sharma.pdf
TAFs on WebDriver API - By - Pallavi Sharma.pdf
Pallavi Sharma
 
Interactive SQL: SQL, Features of SQL, DDL & DML
Interactive SQL: SQL, Features of SQL,  DDL & DMLInteractive SQL: SQL, Features of SQL,  DDL & DML
Interactive SQL: SQL, Features of SQL, DDL & DML
IsakkiDeviP
 
A simple Introduction to Algorithmic Fairness
A simple Introduction to Algorithmic FairnessA simple Introduction to Algorithmic Fairness
A simple Introduction to Algorithmic Fairness
Paolo Missier
 
"AI in the browser: predicting user actions in real time with TensorflowJS", ...
"AI in the browser: predicting user actions in real time with TensorflowJS", ..."AI in the browser: predicting user actions in real time with TensorflowJS", ...
"AI in the browser: predicting user actions in real time with TensorflowJS", ...
Fwdays
 
GraphSummit Singapore Master Deck - May 20, 2025
GraphSummit Singapore Master Deck - May 20, 2025GraphSummit Singapore Master Deck - May 20, 2025
GraphSummit Singapore Master Deck - May 20, 2025
Neo4j
 
NVIDIA’s Enterprise AI Factory and Blueprints_ Paving the Way for Smart, Scal...
NVIDIA’s Enterprise AI Factory and Blueprints_ Paving the Way for Smart, Scal...NVIDIA’s Enterprise AI Factory and Blueprints_ Paving the Way for Smart, Scal...
NVIDIA’s Enterprise AI Factory and Blueprints_ Paving the Way for Smart, Scal...
derrickjswork
 
Is Your QA Team Still Working in Silos? Here's What to Do.
Is Your QA Team Still Working in Silos? Here's What to Do.Is Your QA Team Still Working in Silos? Here's What to Do.
Is Your QA Team Still Working in Silos? Here's What to Do.
marketing943205
 
STKI Annual Israel IT Market Study 2025 .
STKI Annual Israel IT Market Study 2025 .STKI Annual Israel IT Market Study 2025 .
STKI Annual Israel IT Market Study 2025 .
Dr. Jimmy Schwarzkopf
 
Four Principles for Physically Interpretable World Models
Four Principles for Physically Interpretable World ModelsFour Principles for Physically Interpretable World Models
Four Principles for Physically Interpretable World Models
Ivan Ruchkin
 
Optimize IBM i with Consulting Services Help
Optimize IBM i with Consulting Services HelpOptimize IBM i with Consulting Services Help
Optimize IBM i with Consulting Services Help
Alice Gray
 
Wondershare Filmora 14.3.2 Crack + License Key Free for Windows PC
Wondershare Filmora 14.3.2 Crack + License Key Free for Windows PCWondershare Filmora 14.3.2 Crack + License Key Free for Windows PC
Wondershare Filmora 14.3.2 Crack + License Key Free for Windows PC
Mudasir
 
Pushing the Limits: CloudStack at 25K Hosts
Pushing the Limits: CloudStack at 25K HostsPushing the Limits: CloudStack at 25K Hosts
Pushing the Limits: CloudStack at 25K Hosts
ShapeBlue
 
Eating Our Own Dog Food: How to be taken seriously when it comes to adding va...
Eating Our Own Dog Food: How to be taken seriously when it comes to adding va...Eating Our Own Dog Food: How to be taken seriously when it comes to adding va...
Eating Our Own Dog Food: How to be taken seriously when it comes to adding va...
UXPA Boston
 
Building Agents with LangGraph & Gemini
Building Agents with LangGraph &  GeminiBuilding Agents with LangGraph &  Gemini
Building Agents with LangGraph & Gemini
HusseinMalikMammadli
 
Managing Geospatial Open Data Serverlessly [AWS Community Day CH 2025]
Managing Geospatial Open Data Serverlessly [AWS Community Day CH 2025]Managing Geospatial Open Data Serverlessly [AWS Community Day CH 2025]
Managing Geospatial Open Data Serverlessly [AWS Community Day CH 2025]
Chris Bingham
 
Build your own NES Emulator... with Kotlin
Build your own NES Emulator... with KotlinBuild your own NES Emulator... with Kotlin
Build your own NES Emulator... with Kotlin
Artur Skowroński
 
Building Connected Agents: An Overview of Google's ADK and A2A Protocol
Building Connected Agents:  An Overview of Google's ADK and A2A ProtocolBuilding Connected Agents:  An Overview of Google's ADK and A2A Protocol
Building Connected Agents: An Overview of Google's ADK and A2A Protocol
Suresh Peiris
 
Fully Open-Source Private Clouds: Freedom, Security, and Control
Fully Open-Source Private Clouds: Freedom, Security, and ControlFully Open-Source Private Clouds: Freedom, Security, and Control
Fully Open-Source Private Clouds: Freedom, Security, and Control
ShapeBlue
 
CloudStack + KVM: Your Local Cloud Lab
CloudStack + KVM:   Your Local Cloud LabCloudStack + KVM:   Your Local Cloud Lab
CloudStack + KVM: Your Local Cloud Lab
ShapeBlue
 
TAFs on WebDriver API - By - Pallavi Sharma.pdf
TAFs on WebDriver API - By - Pallavi Sharma.pdfTAFs on WebDriver API - By - Pallavi Sharma.pdf
TAFs on WebDriver API - By - Pallavi Sharma.pdf
Pallavi Sharma
 

CSMess to OOCSS: Refactoring CSS with Object Oriented Design