SlideShare a Scribd company logo
1 of 115
Download to read offline
CSS3 and GWT
in perfect harmony
GWT.create 2015
JULIEN DRAMAIX
Julien Dramaix
Software Engineer
at Arcbees
+JulienDramaix
@jDramaix
What is this about?
New syntax for
CssResource based on GSS
What is this about ?
Why?
DRY principle
is missing with CSS.
Why ?
Missing
CSS3 support.
Why ?
What is Closure-
stylesheets?
What is Closure-stylesheets?
It’s an extension
to CSS
What is Closure-stylesheets?
Write gss
and compile
to CSS
It’s an extension
to CSS
Support variables,
conditionals, mixing...
What is Closure-stylesheets?
Support minification,
linting, RTL flipping,
renaming
What is Closure-stylesheets?
Full CSS3
support!
What is Closure-stylesheets?
Open Source project
written and maintained
by Google!
What is Closure-stylesheets?
Example:
@def BG_COLOR rgb(235, 239, 249);
@defmixin size(WIDTH, HEIGHT) {
width: WIDTH;
height: HEIGHT;
}
body {
background-color: BG_COLOR;
}
.logo {
@mixin size(150px, 55px);
background-image: url('http://www.google.com/images/logo_sm.gif');
}
Compile to:
body {
background-color: #ebeff9;
}
.logo {
width: 150px;
height: 55px;
background-image: url('http://www.google.
com/images/logo_sm.gif');
}
How to use it?
1. Create
a GSS file.
How to use it ?
myFirstGss.gss:
@def BG_COLOR rgb(235, 239, 249);
@defmixin size(WIDTH, HEIGHT) {
width: WIDTH;
height: HEIGHT;
}
body {
background-color: BG_COLOR;
}
.logo {
@mixin size(150px, 55px);
background-image: url('http://www.google.com/images/logo_sm.gif');
}
2. Create your CssResource
interface as usual.
How to use it ?
public interface MyFirstGss extends CssResource {
String foo();
}
public interface Resources extends ClientBundle {
MyFirstGss myFirstGss();
}
public interface MyFirstGss extends CssResource {
String foo();
}
public interface Resources extends ClientBundle {
@Source("myFirstGss.gss")
MyFirstGss css();
}
3. Enable GSS
in your GWT module file.
How to use it ?
<set-configuration-property name="CssResource.enableGss" value="true"
/>
4. For UiBinder,
use the attribute GSS
in your inline style.
How to use it ?
<ui:style gss="true">
/* Constants*/
@def PADDING_RIGHT 50px;
@def PADDING_LEFT 50px;
/*mixin */
@defmixin size(WIDTH, HEIGHT) {
width: WIDTH;
height: HEIGHT;
}
/* … */
</ui:style>
GSS will be the default
syntax in GWT 2.8.
How to use it ?
Features and syntax.
Constants.
Features and syntax
@def BG_COLOR rgb(235, 239, 249);
@def PADDING_RIGHT 15px;
@def CONTAINER_COLOR BG_COLOR;
@def BG_COLOR rgb(235, 239, 249);
@def PADDING_RIGHT 15px;
@def CONTAINER_COLOR BG_COLOR;
Constant name
in UPPERCASE !
Runtime evaluation.
Features and syntax
@def BLUE eval("com.foo.bar.client.resource.Colors.BLUE");
.red {
color: eval("com.foo.bar.client.resource.Colors.RED");
}
@def BLUE eval("com.foo.bar.client.resource.Colors.BLUE");
.red {
color: eval("com.foo.bar.client.resource.Colors.RED");
}
Any valid Java expression
Functions.
Features and syntax
.content {
position: absolute;
margin-left: add(LEFT_PADDING, /* padding left */
LEFT_HAND_NAV_WIDTH,
RIGHT_PADDING); /* padding right */
}
➔ add()
➔ sub()
➔ mult()
➔ divide()
➔ min()
➔ max()
FUNCTIONS
Built-in
arithmetic
functions
➔ blendColorsHsb(startColor, endColor)
➔ blendColorsRgb(startColor, endColor)
➔ makeMutedColor(backgroundColor,
foregroundColor [, saturationLoss])
➔ addHsbToCssColor(baseColor, hueToAdd,
saturationToAdd, brightnessToAdd)
➔ makeContrastingColor(color,
similarityIndex)
➔ adjustBrightness(color, brightness)
FUNCTIONS
Built-in color
manipulation
function
FUNCTIONS
You can define
your own
function...
FUNCTIONS
… or not.
FUNCTIONS
… or not.
Should be available in GWT 2.8
Stay tuned!
Mixins.
Features and syntax
@defmixin size(WIDTH, HEIGHT) {
width: WIDTH;
height: HEIGHT;
}
.container {
@mixin size(550px, 500px);
}
Compile to:
.container {
width: 550px;
height: 500px;
}
@defmixin borderradius(TOP_RIGHT, BOTTOM_RIGHT, BOTTOM_LEFT, TOP_LEFT) {
-webkit-border-top-right-radius: TOP_RIGHT;
-webkit-border-bottom-right-radius: BOTTOM_RIGHT;
-webkit-border-bottom-left-radius: BOTTOM_LEFT;
-webkit-border-top-left-radius: TOP_LEFT;
-moz-border-radius-topright: TOP_RIGHT;
-moz-border-radius-bottomright: BOTTOM_RIGHT;
-moz-border-radius-bottomleft: BOTTOM_LEFT;
-moz-border-radius-topleft: TOP_LEFT;
border-top-right-radius: TOP_RIGHT;
border-bottom-right-radius: BOTTOM_RIGHT;
border-bottom-left-radius: BOTTOM_LEFT;
border-top-left-radius: TOP_LEFT;
}
.foo {
@mixin borderradius(5px, 0, 5px, 0)
}
http://dev.arcbees.com/gsss/mixins/
Css animations done with GSSS:
visit http://www.arcbees.com
Conditional CSS.
Features and syntax
CONDITIONAL CSS
Compile time conditional
versus
Runtime conditional.
CONDITIONAL CSS
Conditional
evaluated at
compile time.
CONDITIONAL CSS
Conditional
evaluated at
compile time.
Based on permutations
or properties you define
in your module file.
@if (is("ie8") || is("ie9") && !is("locale", "en")) {
.foo{ /* … */ }
}
@elseif (is("safari")) {
.foo{ /* … */ }
}
@elseif is("customProperty", "customValue") {
.foo{ /* … */ }
}
@else {
.foo{ /* … */ }
}
CONDITIONAL CSS
Special case: single boolean
value configuration property
defined in uppercase.
<define-configuration-property name="USE_EXTERNAL" is-multi-valued="false"/>
<set-configuration-property name="USE_EXTERNAL" value="false" />
@if (USE_EXTERNAL) {
@external '*';
}
CONDITIONAL CSS
Conditional evaluated
at runtime.
@if (eval("com.foo.Bar.FOO")) {
/* ... */
}
@elseif (eval('com.foo.Bar.foo("foo")')) {
/* ... */
}
@if (eval("com.foo.Bar.FOO")) {
/* ... */
}
@elseif (eval('com.foo.Bar.foo("foo")')) {
/* ... */
}
Any valid Java expression
returning a boolean.
CONDITIONAL CSS
Differences between
runtime and compile-time
conditionals.
This is valid
@if (is("ie8") || is("ie9")) {
@def PADDING 15px;
}
@else {
@def PADDING 0;
}
This is not
@if (eval("com.foo.Bar.useLargePadding()")) {
@def PADDING 15px;
}
@else {
@def PADDING 0;
}
This is valid
@if (USE_EXTERNAL) {
@external '*';
}
This is not
@if (eval("com.foo.Bar.useExternal()")) {
@external '*';'
}
CONDITIONAL CSS
Runtime conditionals
can only contain
CSS rules.
Resources Url
Features and syntax
public interface Resources extends ClientBundle {
ImageResource iconPrintWhite();
ImageResource logout();
DataResource iconsEot();
// ...
}
@def ICONS_EOT resourceUrl("iconsEot");
@def ICON_PRINT_WHITE resourceUrl("iconPrintWhite");
@font-face {
font-family: 'icons';
src: ICONS_EOT;
/* ... */
}
.print {
background-image: ICON_PRINT_WHITE;
}
.logout {
background-image: resourceUrl("logout");
}
/*@altenate*/
Features and syntax
.logo {
width: 150px;
height: 55px;
border-color: #DCDCDC;
border-color: rgba(0, 0, 0, 0.1);
}
.logo {
width: 150px;
height: 55px;
border-color: #DCDCDC;
border-color: rgba(0, 0, 0, 0.1);
}
.logo {
width: 150px;
height: 55px;
border-color: #DCDCDC;
/* @alternate */ border-color: rgba(0, 0, 0, 0.1);
}
Disable
RTL Flipping.
Features and syntax
RTL:
.logo {
margin-right: 10px;
border-left: 2px solid #ccc;
padding: 0 4px 0 2px;
}
LTR:
.logo {
margin-left: 10px;
border-right: 2px solid #ccc;
padding: 0 2px 0 4px;
}
.logo {
/* @noflip */ margin-right: 10px;
border-left: 2px solid #ccc;
padding: 0 4px 0 2px;
}
Sprite
support.
Features and syntax
.logout {
gwt-sprite: "iconLogin";
display: block;
cursor: pointer;
}
External
classes
Features and syntax
@external myLegacyClass 'gwt-*'
➔ Don’t use ‘.’ in front of your classes
➔ Use quotes if you use the star suffix
@external myLegacyClass 'gwt-*'
How to migrate
The converter:
Css2Gss.java
How to migrate
Usage :
java com.google.gwt.resources.converter.Css2Gss [Options] [file or directory]
Options:
➔ -r > Recursively convert all css files on the given
directory(leaves .css files in place)
➔ -condition list_of_condition > Specify a comma-separated
list of variables that are used in conditionals and that will be mapped
to configuration properties. The converter will not use the is() function
when it will convert these conditions
➔ -scope list_of_files > Specify a comma-separated list of css files
to be used in this conversion to determine all defined variables
THE CONVERTER
Single file
conversion.
$ CONVERTER_CLASS_PATH="/path/to/gwt-user.jar:/path/to/gwt-
dev.jar"
$ java -cp $CONVERTER_CLASS_PATH com.google.gwt.resources.
converter.Css2Gss /path/to/cssFileToconvert.css
THE CONVERTER
Batch
conversion.
$ CONVERTER_CLASS_PATH="/path/to/gwt-user.jar:/path/to/gwt-dev.
jar"
$ java -cp $CONVERTER_CLASS_PATH 
com.google.gwt.resources.converter.Css2Gss -r /path/to/project
THE CONVERTER
Converter Web
Application:
http://css2gss.appspot.com
Support of legacy?
How to migrate
<set-configuration-property name="CssResource.conversionMode"
value="strict"/>
SUPPORT OF LEGACY
Two conversion modes:
strict
or lenient
SUPPORT OF LEGACY
Two conversion
mode: strict or lenient
=> Use strict only
Migration path.
How to migrate
MIGRATION PATH
➔ Enable GSS and the auto-conversion
in strict mode.
➔ Fix issues.
➔ Use the converter
and convert all your css files
➔ Set back auto-conversion to off.
Configuration
CssResource.obfuscationPrefix
CONFIGURATION
<define-configuration-property name="CssResource.obfuscationPrefix"
is-multi-valued="false" />
<set-configuration-property name="CssResource.obfuscationPrefix"
value="default" />
CssResource.obfuscationPrefix
Disable the obfuscation prefix
if your page contains
only one GWT application.
<set-configuration-property name="CssResource.
obfuscationPrefix" value="empty" />
CssResource.allowedAtRules
CONFIGURATION
<!-- A multi-valued configuration property that defines the list of allowed non standard -->
<!-- at-rules in the css files -->
<define-configuration-property name="CssResource.allowedAtRules"
is-multi-valued="true" />
<!-- A multi-valued configuration property that defines the list of allowed non standard -->
<!-- at-rules in the css files →
<define-configuration-property name="CssResource.allowedAtRules" is-multi-valued="true" />
<extend-configuration-property name="CssResource.allowedAtRules"
value="-moz-document" />
<extend-configuration-property name="CssResource.allowedAtRules"
value="supports" />
CssResource.allowedFunctions
CONFIGURATION
<!-- A multi-valued configuration property that defines the list of allowed non standard -->
<!-- functions in the css files →
<define-configuration-property name="CssResource.allowedFunctions"
is-multi-valued="true" />
<extend-configuration-property name="CssResource.allowedFunctions"
value="-webkit-sin" />
<extend-configuration-property name="CssResource.allowedFunctions"
value="-webkit-cos" />
Roadmap
GWT 2.7: GSS flagged as
experimental and disabled
by default
ROADMAP
GWT 2.8: Enable
by default.
Old syntax deprecated.
ROADMAP
GWT 3.0: Remove the
support for the old syntax
and the auto converter.
ROADMAP
Don't wait!
It's time to migrate
to GSS!!
ROADMAP
Most of the Google GWT
application have migrated
to GSS with success!
ROADMAP
THANK YOU
THANK YOU
please rate this presentation at
gwtcreate.com/agenda
Julien Dramaix
Software Engineer
at Arcbees
+JulienDramaix
@jDramaix
QUESTIONS ?

More Related Content

Similar to Css3 and gwt in perfect harmony

Advanced Technology for Web Application Design
Advanced Technology for Web Application DesignAdvanced Technology for Web Application Design
Advanced Technology for Web Application DesignBryce Kerley
 
LESS : The dynamic stylesheet language
LESS : The dynamic stylesheet languageLESS : The dynamic stylesheet language
LESS : The dynamic stylesheet languageKatsunori Tanaka
 
CSS Less framework overview, Pros and Cons
CSS Less framework overview, Pros and ConsCSS Less framework overview, Pros and Cons
CSS Less framework overview, Pros and ConsSanjoy Kr. Paul
 
CSS 開發加速指南-Sass & Compass
CSS 開發加速指南-Sass & CompassCSS 開發加速指南-Sass & Compass
CSS 開發加速指南-Sass & CompassLucien Lee
 
Implementing Awesome: An HTML5/CSS3 Workshop
Implementing Awesome: An HTML5/CSS3 WorkshopImplementing Awesome: An HTML5/CSS3 Workshop
Implementing Awesome: An HTML5/CSS3 WorkshopShoshi Roberts
 
The Future State of Layout
The Future State of LayoutThe Future State of Layout
The Future State of LayoutStephen Hay
 
Styling components with JavaScript
Styling components with JavaScriptStyling components with JavaScript
Styling components with JavaScriptbensmithett
 
Rapid Prototyping
Rapid PrototypingRapid Prototyping
Rapid PrototypingEven Wu
 
Girl Develop It Cincinnati: Intro to HTML/CSS Class 4
Girl Develop It Cincinnati: Intro to HTML/CSS Class 4Girl Develop It Cincinnati: Intro to HTML/CSS Class 4
Girl Develop It Cincinnati: Intro to HTML/CSS Class 4Erin M. Kidwell
 
Wordless, stop writing WordPress themes like it's 1998
Wordless, stop writing WordPress themes like it's 1998Wordless, stop writing WordPress themes like it's 1998
Wordless, stop writing WordPress themes like it's 1998Filippo Dino
 
Sass and Compass - Getting Started
Sass and Compass - Getting StartedSass and Compass - Getting Started
Sass and Compass - Getting Startededgincvg
 
Preprocessor presentation
Preprocessor presentationPreprocessor presentation
Preprocessor presentationMario Noble
 
Doing More With Less
Doing More With LessDoing More With Less
Doing More With LessDavid Engel
 
I Can't Believe It's Not Flash
I Can't Believe It's Not FlashI Can't Believe It's Not Flash
I Can't Believe It's Not FlashThomas Fuchs
 
Implementing CSS support for React Native
Implementing CSS support for React NativeImplementing CSS support for React Native
Implementing CSS support for React NativeKristerKari
 
Getting Started with Sass & Compass
Getting Started with Sass & CompassGetting Started with Sass & Compass
Getting Started with Sass & CompassRob Davarnia
 

Similar to Css3 and gwt in perfect harmony (20)

CSS and CSS3
CSS and CSS3CSS and CSS3
CSS and CSS3
 
Advanced Technology for Web Application Design
Advanced Technology for Web Application DesignAdvanced Technology for Web Application Design
Advanced Technology for Web Application Design
 
LESS : The dynamic stylesheet language
LESS : The dynamic stylesheet languageLESS : The dynamic stylesheet language
LESS : The dynamic stylesheet language
 
CSS Less framework overview, Pros and Cons
CSS Less framework overview, Pros and ConsCSS Less framework overview, Pros and Cons
CSS Less framework overview, Pros and Cons
 
Accelerated Stylesheets
Accelerated StylesheetsAccelerated Stylesheets
Accelerated Stylesheets
 
CSS 開發加速指南-Sass & Compass
CSS 開發加速指南-Sass & CompassCSS 開發加速指南-Sass & Compass
CSS 開發加速指南-Sass & Compass
 
Implementing Awesome: An HTML5/CSS3 Workshop
Implementing Awesome: An HTML5/CSS3 WorkshopImplementing Awesome: An HTML5/CSS3 Workshop
Implementing Awesome: An HTML5/CSS3 Workshop
 
The Future State of Layout
The Future State of LayoutThe Future State of Layout
The Future State of Layout
 
Styling components with JavaScript
Styling components with JavaScriptStyling components with JavaScript
Styling components with JavaScript
 
Rapid Prototyping
Rapid PrototypingRapid Prototyping
Rapid Prototyping
 
Girl Develop It Cincinnati: Intro to HTML/CSS Class 4
Girl Develop It Cincinnati: Intro to HTML/CSS Class 4Girl Develop It Cincinnati: Intro to HTML/CSS Class 4
Girl Develop It Cincinnati: Intro to HTML/CSS Class 4
 
Wordless, stop writing WordPress themes like it's 1998
Wordless, stop writing WordPress themes like it's 1998Wordless, stop writing WordPress themes like it's 1998
Wordless, stop writing WordPress themes like it's 1998
 
HTML CSS & Javascript
HTML CSS & JavascriptHTML CSS & Javascript
HTML CSS & Javascript
 
Sass and Compass - Getting Started
Sass and Compass - Getting StartedSass and Compass - Getting Started
Sass and Compass - Getting Started
 
Preprocessor presentation
Preprocessor presentationPreprocessor presentation
Preprocessor presentation
 
Doing More With Less
Doing More With LessDoing More With Less
Doing More With Less
 
I Can't Believe It's Not Flash
I Can't Believe It's Not FlashI Can't Believe It's Not Flash
I Can't Believe It's Not Flash
 
Pfnp slides
Pfnp slidesPfnp slides
Pfnp slides
 
Implementing CSS support for React Native
Implementing CSS support for React NativeImplementing CSS support for React Native
Implementing CSS support for React Native
 
Getting Started with Sass & Compass
Getting Started with Sass & CompassGetting Started with Sass & Compass
Getting Started with Sass & Compass
 

More from Arcbees

La Marque est Morte, Vive l'intelligence artificielle.
La Marque est Morte, Vive l'intelligence artificielle.La Marque est Morte, Vive l'intelligence artificielle.
La Marque est Morte, Vive l'intelligence artificielle.Arcbees
 
GWTcon 2015 - brad, Brand and Brands
GWTcon 2015 - brad, Brand and BrandsGWTcon 2015 - brad, Brand and Brands
GWTcon 2015 - brad, Brand and BrandsArcbees
 
GWTcon 2015 - Best development practices for GWT web applications
GWTcon 2015 - Best development practices for GWT web applications GWTcon 2015 - Best development practices for GWT web applications
GWTcon 2015 - Best development practices for GWT web applications Arcbees
 
Designer chez les geeks - nov 2015
Designer chez les geeks - nov 2015Designer chez les geeks - nov 2015
Designer chez les geeks - nov 2015Arcbees
 
mark, Marque et Marques
mark, Marque et Marquesmark, Marque et Marques
mark, Marque et MarquesArcbees
 
Uni.sherbrooke 2015 créez la meilleur application grâce à gwt, gwtp et j...
Uni.sherbrooke 2015   créez la meilleur application grâce à gwt, gwtp et j...Uni.sherbrooke 2015   créez la meilleur application grâce à gwt, gwtp et j...
Uni.sherbrooke 2015 créez la meilleur application grâce à gwt, gwtp et j...Arcbees
 
Introduction à GWT
Introduction à GWTIntroduction à GWT
Introduction à GWTArcbees
 
mark, Marque et Marques
mark, Marque et Marquesmark, Marque et Marques
mark, Marque et MarquesArcbees
 
GWT Brand Guidelines 1.1
GWT Brand Guidelines 1.1GWT Brand Guidelines 1.1
GWT Brand Guidelines 1.1Arcbees
 

More from Arcbees (9)

La Marque est Morte, Vive l'intelligence artificielle.
La Marque est Morte, Vive l'intelligence artificielle.La Marque est Morte, Vive l'intelligence artificielle.
La Marque est Morte, Vive l'intelligence artificielle.
 
GWTcon 2015 - brad, Brand and Brands
GWTcon 2015 - brad, Brand and BrandsGWTcon 2015 - brad, Brand and Brands
GWTcon 2015 - brad, Brand and Brands
 
GWTcon 2015 - Best development practices for GWT web applications
GWTcon 2015 - Best development practices for GWT web applications GWTcon 2015 - Best development practices for GWT web applications
GWTcon 2015 - Best development practices for GWT web applications
 
Designer chez les geeks - nov 2015
Designer chez les geeks - nov 2015Designer chez les geeks - nov 2015
Designer chez les geeks - nov 2015
 
mark, Marque et Marques
mark, Marque et Marquesmark, Marque et Marques
mark, Marque et Marques
 
Uni.sherbrooke 2015 créez la meilleur application grâce à gwt, gwtp et j...
Uni.sherbrooke 2015   créez la meilleur application grâce à gwt, gwtp et j...Uni.sherbrooke 2015   créez la meilleur application grâce à gwt, gwtp et j...
Uni.sherbrooke 2015 créez la meilleur application grâce à gwt, gwtp et j...
 
Introduction à GWT
Introduction à GWTIntroduction à GWT
Introduction à GWT
 
mark, Marque et Marques
mark, Marque et Marquesmark, Marque et Marques
mark, Marque et Marques
 
GWT Brand Guidelines 1.1
GWT Brand Guidelines 1.1GWT Brand Guidelines 1.1
GWT Brand Guidelines 1.1
 

Recently uploaded

🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘RTylerCroy
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...Neo4j
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slidespraypatel2
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Miguel Araújo
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesSinan KOZAK
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsMaria Levchenko
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking MenDelhi Call girls
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slidevu2urc
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024Rafal Los
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreternaman860154
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking MenDelhi Call girls
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxMalak Abu Hammad
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024The Digital Insurer
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024The Digital Insurer
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Drew Madelung
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processorsdebabhi2
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking MenDelhi Call girls
 

Recently uploaded (20)

🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slides
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen Frames
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptx
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 

Css3 and gwt in perfect harmony