SlideShare a Scribd company logo
React Patterns in
Product Hunt
Radoslav Stankov 08/07/2018
Radoslav Stankov
@rstankov

blog.rstankov.com

github.com/rstankov

twitter.com/rstankov
early 2014 jQuery spaghetti
October 2014 Backbone
February 2015 React & Rails
May 2015 custom Flux
early 2014 jQuery spaghetti
October 2014 Backbone
February 2015 React & Rails
May 2015 custom Flux
December 2015 Redux
early 2014 jQuery spaghetti
October 2014 Backbone
February 2015 React & Rails
May 2015 custom Flux
December 2015 Redux
January 2016 React-Router
early 2014 jQuery spaghetti
October 2014 Backbone
February 2015 React & Rails
May 2015 custom Flux
December 2015 Redux
January 2016 React-Router
April 2016 Redux Ducks
early 2014 jQuery spaghetti
October 2014 Backbone
February 2015 React & Rails
May 2015 custom Flux
December 2015 Redux
January 2016 React-Router
April 2016 Redux Ducks
Febuary 2017 GraphQL
October 2014 Backbone
February 2015 React & Rails
May 2015 custom Flux
December 2015 Redux
January 2016 React-Router
April 2016 Redux Ducks
Febuary 2017 GraphQL
February 2015 React & Rails
May 2015 custom Flux
December 2015 Redux
January 2016 React-Router
April 2016 Redux Ducks
Febuary 2017 GraphQL
December 2015 Redux
January 2016 React-Router
April 2016 Redux Ducks
Febuary 2017 GraphQL
early 2014 jQuery spaghetti
October 2014 Backbone
February 2015 React & Rails
May 2015 custom Flux
December 2015 Redux
January 2016 React-Router
April 2016 Redux Ducks
Febuary 2017 GraphQL
components/
graphql/

layouts/
lib/
modules/
pages/
styles/
types/
utils/

config.js
entry.js
paths.js
reducers.js
routes.js
components/
graphql/

layouts/
lib/
modules/
pages/
styles/
types/
utils/

config.js
entry.js
paths.js
reducers.js
routes.js


https://speakerdeck.com/rstankov/react-at-product-hunt-wad

components/
graphql/

layouts/
lib/
modules/
pages/
styles/
types/
utils/

config.js
entry.js
paths.js
reducers.js
routes.js


https://speakerdeck.com/rstankov/graphql-at-product-hunt

components/
graphql/

layouts/
lib/
modules/
pages/
styles/
types/
utils/

config.js
entry.js
paths.js
reducers.js
routes.js
! Generic
" Utility
# Domain
$ Pages


Component types

! Generic
" Utility
# Domain


Component types

! Generic
" Utility
# Domain


Component types

Generic components
components/
Font/

index.js
styles.css




Component as folder

components/
Component/

SubComponent/
Fragment.graphql
Mutation.graphql
icon.svg
index.js
styles.css
utils.js


Component as folder

components/
Font/

index.js
styles.css




Component as folder

import * as React from "react";
import Font from "components/Font";
<Font.Text>{text}</Font.Text>
components/Font/index.js
import * as React from "react";
import styles from "./styles.css";
export function Text({ children }) {
return (
<span className={styles.text}>
{children}
</span>
);
}


Functional components

components/
Font/

index.js
styles.css




CSS Modules

CSS
// style.css
.text {
font-size: 14px;
}
CSS
// component.js

import styles from './styles.css';
<span className={styles.text}>
</span>
CSS
// style.css
.text {
font-size: 14px;
}
CSS
// component.js

import styles from './styles.css';
<span className={styles.text}>
</span>
CSS
// style.css
.text {
font-size: 14px;
}
CSS
// component.js

import styles from './styles.css';
<span className={styles.text}>
</span>
CSS
// style.css
.text_3mRwv {
font-size: 14px;
}
CSS
// result.js
<span class="text_3mRwv">
</span>

import * as React from "react";
import Font from "components/Font";
<Font.Text>text</Font.Text>
// -> <span class="text">text</span>
import * as React from "react";
import Font from "components/Font";
<Font.Text>text</Font.Text>
// -> <span class="text">text</span>
<Font.Text component="p">text</Font.Text>
// -> <p class="text">text</p>
import * as React from "react";
import Font from "components/Font";
<Font.Text>text</Font.Text>
// -> <span class="text">text</span>
<Font.Text component="p">text</Font.Text>
// -> <p class="text">text</p>
<Font.Text component={Link} to="/page">text</Font.Text>
// -> <a class="text" href="/page">text</a>
import * as React from "react";
import Font from "components/Font";
<Font.Text>text</Font.Text>
// -> <span class="text">text</span>
<Font.Text component="p">text</Font.Text>
// -> <p class="text">text</p>
<Font.Text component={Link} to="/page">text</Font.Text>
// -> <a class="text" href="/page">text</a>


Pass custom component as prop



Pass custom component as prop

import * as React from "react";
import styles from "./styles.css";
export function Text({ component, children, ...props }) {
Component = component || "span";

return (
<Component className={styles.text} {...props}>
{children}
</Component>
);
}
components/Font/index.js


Pass custom component as prop

import * as React from "react";
import styles from "./styles.css";
export function Text({ component, children, ...props }) {
Component = component || "span";

return (
<Component className={styles.text} {...props}>
{children}
</Component>
);
}
components/Font/index.js
%
import * as React from "react";
import styles from "./styles.css";
export function Text({ component, ...props }) {
Component = component || "span";
return <Component className={styles.text} {...props} />;
}


Pass custom component as prop

&
components/Font/index.js
import * as React from "react";
import Font from "components/Font";
<Font.Text>text</Font.Text>
// -> <span class="text">Text</span>
import * as React from "react";
import Font from "components/Font";
import styles from "./styles.css";
<Font.Text className={styles.custom}>text</Font.Text>
// -> <span class="text custom">text</span>


Pass extra class name

import * as React from "react";
import styles from "./styles.css";
import classNames from "classnames";
export function Text({ component, className, ...props }) {
Component = component || "span";

return <Component className={className(styles.text, className)} {...pro
}


Pass extra class name

components/Font/index.js
yarn install "classnames"
import * as React from "react";
import styles from "./styles.css";
import classNames from "classnames";
export function Text({ component, className, ...props }) {
Component = component || "span";
return <Component className={className(styles.text, className)} />;
}
components/Font/index.js
https://github.com/facebook/flow
export type Topic = {
id: number,
image_uuid?: ?string,
name: string,
description?: string,
followers_count: number,
posts_count: number,
slug: string,
};
function isFollowing(user: User, topic: Topic): boolean {
return user.followedTopicsIds.indexOf(topic.id) !== -1;
}




function isFollowing(user: User, topic: Topic): boolean {
return user.followedTopicsIds.indexOf(topic.id) !== -1;
}
isFollowing(null, topic);
isFollowing(user, null);
isFollowing(user, somethingElse);




function isFollowing(user: User, topic: Topic): boolean {
return user.followedTopicsIds.indexOf(topic.id) !== -1;
}
isFollowing(null, topic);
isFollowing(user, null);
isFollowing(user, somethingElse);




function isFollowing(user: User, topic: Topic): boolean {
return user.followedTopicsIds.indexOf(topic.id) !== -1;
}
isFollowing(null, topic);
isFollowing(user, null);
isFollowing(user, somethingElse);
const variable: number = isFollowing(user, topic);



function isFollowing(user: User, topic: Topic): boolean {
return user.followedTopicsIds.indexOf(topic.id) !== -1;
}
isFollowing(null, topic);
isFollowing(user, null);
isFollowing(user, somethingElse);
const variable: number = isFollowing(user, topic);



function isFollowing(user: User, topic: Topic): boolean {
return user.followedTopicsIds.indexOf(topic.id) !== -1;
}
isFollowing(null, topic);
isFollowing(user, null);
isFollowing(user, somethingElse);
const variable: number = isFollowing(user, topic);



const variable: boolean = isFollowing(user, topic);
function isFollowing(user: User, topic: Topic): boolean {
return user.followedTopicsIds.indexOf(topic.id) !== -1;
}
isFollowing(null, topic);
isFollowing(user, null);
isFollowing(user, somethingElse);
const variable: number = isFollowing(user, topic);



const variable: boolean = isFollowing(user, topic);
' (
<UserImage user={user} width={50} height={30} />
<UserImage user={user} variant="small" />
<UserImage user={user} width={50} height={30} />
<UserImage user={user} variant="small" />
<UserImage user={user} width={50} variant="small" />
<UserImage user={user} width={50} height={30} variant="small" />
<UserImage user={user} width={50} height={30} />
<UserImage user={user} variant="small" />
<UserImage user={user} width={50} variant="small" />
<UserImage user={user} width={50} height={30} variant="small" />
class UserImage extends React.Component {
props:
| {| user: User, width: number, height: number |}
| {| user: User, variant: "big" | "medium" | "small" |};
render() {
/* ... */
}
}
<UserImage user={user} width={50} height={30} />
<UserImage user={user} variant="small" />
<UserImage user={user} width={50} variant="small" />
<UserImage user={user} width={50} height={30} variant="small" />
class UserImage extends React.Component {
props:
| {| user: User, width: number, height: number |}
| {| user: User, variant: "big" | "medium" | "small" |};
render() {
/* ... */
}
}
/* @flow */


import * as React from "react";
import styles from "./styles.css";
import classNames from "classnames";
type Props = {
component: any,
className?: string
};
export function Text({ component, className, ...props }: Props) {
Component = component || "span";
return (
<Component className={className(styles.text, className)} {...props} /
);
}


Type safety

components/Font/index.js
/* @flow */
import * as React from "react";
import classNames from "classnames";
import styles from "./styles.css";
type Props = {
className?: ?string,
color?: "black" | "grey" | "orange" | "silver" | "white" | "error",
component?: any,
size?: "xSmall" | "small" | "medium" | "large" | "xLarge",
uppercase?: boolean,
weight?: "light" | "normal" | "semiBold" | "bold"
};
export default function Font({
className,
color,
component,
size,
uppercase,


Component packages

components/Font/index.js
weight?: "light" | "normal" | "semiBold" | "bold"
};
export default function Font({
className,
color,
component,
size,
uppercase,
weight,
...props
}: Props) {
const Component = component || "span";
const classes = classNames(
styles.font,
styles[color],
styles[size],
styles[weight],
uppercase && styles.uppercase,
className
);
return <Component className={classes} {...props} />;
}
Font.Text = (props: Props) => (


Component packages

components/Font/index.js
return <Component className={classes} {...props} />;
}
Font.Text = (props: Props) => (
<Font size="small" weight="normal" {...props} />
);
Font.SecondaryText = (props: Props) => (
<Font size="xSmall" uppercase={true} weight="normal" {...props} />
);
Font.Title = (props: Props) => (
<Font size="medium" weight="normal" {...props} />
);
Font.Featured = (props: Props) => (
<Font size="large" weight="light" {...props} />
);
Font.Headline = (props: Props) => (
<Font size="xLarge" weight="bold" {...props} />
);


Component packages

components/Font/index.js
import Font from "components/Font";

<Font.Text>text</Font.Text>
<Font.SecondaryText>text</Font.SecondaryText>
<Font.Title>text</Font.Title>
<Font.Featured>text</Font.Featured>
<Font.Headline>text</Font.Headline>


Component packages

import Form from "components/Form";
<Form data={settings} submit={submit} onSubmit={onSubmit}>
<Form.Field name="name" />
<Form.Field name="headline" />
<Form.Field name="email" />
<Form.Field name="newsletter" type="select" options={OPTIONS} />
<Form.Field name="header" type={HeaderUploadInput} />
<Form.Buttons submitText="Update" />
</Form>


Component packages

! Generic
" Utility
# Domain


Component types

✅ Generic
" Utility
# Domain


Component types

✅ Generic
" Utility
# Domain


Component types

Utility components
<WindowResize onResize={handleResize} />
/* @flow */
import * as React from 'react';
import { throttle } from 'lodash';
type Props = {
onResize: ({| height: number, width: number |}) => void,
};
export default class WindowResize extends React.Component<Props> {
componentDidMount() {
this.handleResize();
window.addEventListener('resize', this.handleResize);
}
componentWillUnmount() {
window.removeEventListener('resize', this.handleResize);
}
shouldComponentUpdate() {


Renderless components

components/WindowResize/index.js
window.addEventListener('resize', this.handleResize);
}
componentWillUnmount() {
window.removeEventListener('resize', this.handleResize);
}
shouldComponentUpdate() {
return false;
}
render() {
return null;
}
handleResize = throttle(() => {
this.props.onResize({
height: window.innerHeight,
width: window.innerWidth,
});
}, 500);
}


Renderless components

components/WindowResize/index.js
<WindowResize onResize={handleResize} />

<ScrollObserver onScroll={handleScroll} />
<KeyHandler keyEventName="press" keyValue="s" onKeyHandle={onPress} />
<AddBodyClassName className={className} />


Function as props

<Form.ErrorMessage name="name">

{error => <Font.Text color="error">{error}</Font.Text>}
</Form.ErrorMessage>
/* @flow */
import classNames from "classnames";
import * as React from "react";
import styles from "./styles.css";
import { formContextTypes, getErrorMessage } from "./utils";
import type { FormContextType } from "./types";
type Props = {
name: string,
children?: Function
};
export default function ErrorMessage(
{ name, children }: Props,
{ form }: FormContextType
) {
const message = getErrorMessage(form, name);
if (!message) {
return null;


Function as props

components/Form/ErrorMessage/index.js
children?: Function
};
export default function ErrorMessage(
{ name, children }: Props,
{ form }: FormContextType
) {
const message = getErrorMessage(form, name);
if (!message) {
return null;
}
if (typeof children === "function") {
return children(message) || null;
}
return <Font.Text color="error">{message}</Font.Text>;
}
ErrorMessage.defaultProps = { name: "base"};
ErrorMessage.contextTypes = formContextTypes;


Function as props

components/Form/ErrorMessage/index.js
<Clock>

{currentTime => (
<Time time={currentTime} format="hh:mm:ss" />
)}
</Clock>


Function as props

/* @flow */
import * as React from "react";
import moment from "moment";
import type { Moment } from "types/Moment";
type Props = {
children: (time: Moment) => any
};
type State = {
time: Moment
};
export default class Clock extends React.Component<Props, State> {
state = { time: moment() };
intervalId = null;
componentDidMount() {
this.updateTime();


Function as props

components/Clock/index.js
time: Moment
};
export default class Clock extends React.Component<Props, State> {
state = { time: moment() };
intervalId = null;
componentDidMount() {
this.updateTime();
if (!this.intervalId) {
this.intervalId = setInterval(this.updateTime, 1000);
}
}
componentWillUnmount() {
if (this.intervalId) {
clearInterval(this.intervalId);
this.intervalId = null;
}
}
updateTime = () => {


Function as props

components/Clock/index.js
this.updateTime();
if (!this.intervalId) {
this.intervalId = setInterval(this.updateTime, 1000);
}
}
componentWillUnmount() {
if (this.intervalId) {
clearInterval(this.intervalId);
this.intervalId = null;
}
}
updateTime = () => {
this.setTime({ time: moment() });
};
render() {
return this.children(this.state.time);
}
}


Function as props

components/Clock/index.js
<Visible if="isLoggedIn">
<LogoutButton />
</Visible>

<Visible if="isLoggedIn">
<LogoutButton />
</Visible>

<Visible unless="isLoggedIn">
<LoginButton />
</Visible>
<Visible if="isLoggedIn">
{isLoggedIn => (isLoggedIn ? <LogoutButton /> : <LoginButton />)}
</Visible>
<Visible unless="screenSize" args="mobile">
<SideBar />
</Visible>
<Visible if="screenSize" args="mobile">
{isMobile => (isMobile ? <TabBar /> : <Sidebar />)}
</Visible>
<Visible if="featureEnabled" args="secretFeature">
<Component />
</Visible>
✅ Generic
" Utility
# Domain


Component Types

✅ Generic
✅ Utility
# Domain


Component Types

✅ Generic
✅ Utility
# Domain


Component Types

Domain components
<TopicItem>
<TopicImage />
<Font.Title />
<Font.SilentText />
<TopicFollowButton />
</TopicItem>
<TopicItem>
<TopicImage />
<Font.Title />
<Font.SilentText />
<TopicFollowButton />
</TopicItem>
<TopicItem>
<TopicImage />
<Font.Title />
<Font.SilentText />
<TopicFollowButton />
</TopicItem>
<TopicItem>
<TopicImage />
<Font.Title />
<Font.SilentText />
<TopicFollowButton />
</TopicItem>
<TopicItem>
<TopicImage />
<Font.Title />
<Font.SilentText />
<TopicFollowButton />
</TopicItem>
<TopicItem>
<TopicImage />
<Font.Title />
<Font.SilentText />
<TopicFollowButton />
</TopicItem>
/* @flow */
import * as React from "react";
import Font from "components/Font";
import Link from "components/Link";
import TopicFollowButton from "components/TopicFollowButton";
import TopicImage from "components/TopicImage";
import classNames from "classNames";
import paths from "paths";
import styles from "./styles.css";
import type { TopicItemFragament as Topic } from "graphql/schema.js";
type Props = {
topic: Topic,
className?: string
};
export default function TopicItem({ topic, className }: Props) {
return (
<div className={className(styles.item, className)}>
<Link to={paths.topics.show(topic)} className={styles.image}>components/TopicItem/index.js


Domain component

type Props = {
topic: Topic,
className?: string
};
export default function TopicItem({ topic, className }: Props) {
return (
<div className={className(styles.item, className)}>
<Link to={paths.topics.show(topic)} className={styles.image}>
<TopicImage topic={topic} size={50} />
</Link>
<Link to={paths.topics.show(topic)} className={styles.info}>
<Font.Title>{topic.name}</Font.Title>
<Font.SilentText>{topic.description}</Font.SilentText>
</Link>
<TopicFollowButton topic={topic} />
</div>
);
}
components/TopicItem/index.js


Domain component

components/
TopicItem/

Fragment.graphql
index.js
styles.css


Component as folder

#import "components/TopicFollowButton/Fragment.graphql"
#import "components/TopicImage/Fragment.graphql"
fragment TopicItem on Topic {
id
name
slug
description
...TopicFollowButton
...TopicImage
}
components/TopicItem/Fragment.graphql


GraphQL fragment

TopicItem
TopicImage
TopicFollowButton
components/
TopicFollowButton/

Fragment.graphql
Mutation.graphql
index.js
styles.css


Component as folder

fragment TopicFollowButton on Topic {
id
name
isFollowed
}


GraphQL fragment

components/TopicFollowButton/Fragment.graphql
mutation TopicFollowToggle($input: TopicFollowToggleInput!) {
topicFollowToggle(input: $input) {
node {

id
isFollowed

}
}
}
components/TopicItem/Mutation.graphql


GraphQL mutation

/* @flow */
import * as React from "react";
import Button from "ph/components/Button";
import MUTATION from "./Mutation.graphql";
import openLogin from "ph/utils/openLogin";
import type { TopicButtonFragament as Topic } from "ph/graphql/
schema.js";
import { createContainer } from "ph/lib/container";
import { graphql } from "react-apollo";
type Props = {
className?: string,
isLogged: boolean,
topic: Topic,
toggleFollow: Function
};
export class TopicFollowButton extends React.Component<Props, {}> {
render() {
const isFollowed = this.props.topic.isFollowed;


Action button

components/TopicItem/index.graphql
topic: Topic,
toggleFollow: Function
};
export class TopicFollowButton extends React.Component<Props, {}> {
render() {
const isFollowed = this.props.topic.isFollowed;
return (
<LoadButton
active={isFollowed}
className={this.props.className}
onClick={this.handleClick}
data-test="topic-toggle-follow-button"
>
{isFollowed ? "Following" : "Follow"}
</LoadButton>
);
}
handleClick: Function = async () => {
if (this.props.isLogged) {
this.props.toggleFollow(!this.props.topic.isFollowed);
} else {
openLogin({ reason: `Follow ${this.props.topic.name}` });


Action button

components/TopicItem/index.graphql
);
}
handleClick: Function = async () => {
if (this.props.isLogged) {
this.props.toggleFollow(!this.props.topic.isFollowed);
} else {
openLogin({ reason: `Follow ${this.props.topic.name}` });
}
};
}
export default createContainer({
renderComponent: TopicFollowButton,
decorators: [
graphql(MUTATION, {
props: ({ ownProps, mutate }) => ({
toggleFollow(follow) {
return mutate({
variables: {
input: { id: ownProps.topic.id, follow: follow }
}
});
}


Action button

components/TopicItem/index.graphql
export default createContainer({
renderComponent: TopicFollowButton,
decorators: [
graphql(MUTATION, {
props: ({ ownProps, mutate }) => ({
toggleFollow(follow) {
return mutate({
variables: {
input: { id: ownProps.topic.id, follow: follow }
}
});
}
})
})
],
mapStateToProps({ currentUser }) {
return {
isLogged: currentUser.id
};
}
});


Action button

components/TopicItem/index.graphql
<Box actions={<SearchField />}>
<InfiniteScroll loading={<TopicPlaceHolder />}>
<TopicsList>
<TopicItem>
<TopicImage />
<Font.Title />
<Font.SilentText />
<TopicFollowButton />
</TopicItem>
</TopicsList>
</InfiniteScroll>
</Box>
TopicPage TopicItem
TopicImage
TopicFollowButton
✅ Generic
✅ Utility
# Domain


Component Types

✅ Generic
✅ Utility
✅ Domain


Component Types

✅ Generic
✅ Utility
✅ Domain


Component Types

Thanks '


https://github.com/rstankov/talks-code


More Related Content

What's hot

How to Implement Basic Angular Routing and Nested Routing With Params in Angu...
How to Implement Basic Angular Routing and Nested Routing With Params in Angu...How to Implement Basic Angular Routing and Nested Routing With Params in Angu...
How to Implement Basic Angular Routing and Nested Routing With Params in Angu...
Katy Slemon
 
jQuery for Sharepoint Dev
jQuery for Sharepoint DevjQuery for Sharepoint Dev
jQuery for Sharepoint Dev
Zeddy Iskandar
 
Be nice to your designers
Be nice to your designersBe nice to your designers
Be nice to your designers
Pai-Cheng Tao
 
WordPress plugin #2
WordPress plugin #2WordPress plugin #2
WordPress plugin #2
giwoolee
 
Angular js 2
Angular js 2Angular js 2
Angular js 2
Ran Wahle
 
Page Objects Done Right - selenium conference 2014
Page Objects Done Right - selenium conference 2014Page Objects Done Right - selenium conference 2014
Page Objects Done Right - selenium conference 2014
Oren Rubin
 

What's hot (6)

How to Implement Basic Angular Routing and Nested Routing With Params in Angu...
How to Implement Basic Angular Routing and Nested Routing With Params in Angu...How to Implement Basic Angular Routing and Nested Routing With Params in Angu...
How to Implement Basic Angular Routing and Nested Routing With Params in Angu...
 
jQuery for Sharepoint Dev
jQuery for Sharepoint DevjQuery for Sharepoint Dev
jQuery for Sharepoint Dev
 
Be nice to your designers
Be nice to your designersBe nice to your designers
Be nice to your designers
 
WordPress plugin #2
WordPress plugin #2WordPress plugin #2
WordPress plugin #2
 
Angular js 2
Angular js 2Angular js 2
Angular js 2
 
Page Objects Done Right - selenium conference 2014
Page Objects Done Right - selenium conference 2014Page Objects Done Right - selenium conference 2014
Page Objects Done Right - selenium conference 2014
 

Similar to Radoslav Stankov - React Refactoring Patterns

WordPress as the Backbone(.js)
WordPress as the Backbone(.js)WordPress as the Backbone(.js)
WordPress as the Backbone(.js)
Beau Lebens
 
React.js or why DOM finally makes sense
React.js or why DOM finally makes senseReact.js or why DOM finally makes sense
React.js or why DOM finally makes sense
Eldar Djafarov
 
Паразитируем на React-экосистеме (Angular 4+) / Алексей Охрименко (IPONWEB)
Паразитируем на React-экосистеме (Angular 4+) / Алексей Охрименко (IPONWEB)Паразитируем на React-экосистеме (Angular 4+) / Алексей Охрименко (IPONWEB)
Паразитируем на React-экосистеме (Angular 4+) / Алексей Охрименко (IPONWEB)
Ontico
 
Django
DjangoDjango
Django
Ivan Widodo
 
Angular 2 Essential Training
Angular 2 Essential Training Angular 2 Essential Training
Angular 2 Essential Training
Patrick Schroeder
 
GDI Seattle - Intro to JavaScript Class 4
GDI Seattle - Intro to JavaScript Class 4GDI Seattle - Intro to JavaScript Class 4
GDI Seattle - Intro to JavaScript Class 4
Heather Rock
 
WordPress Theme Design and Development Workshop - Day 3
WordPress Theme Design and Development Workshop - Day 3WordPress Theme Design and Development Workshop - Day 3
WordPress Theme Design and Development Workshop - Day 3
Mizanur Rahaman Mizan
 
2 years of angular: lessons learned
2 years of angular: lessons learned2 years of angular: lessons learned
2 years of angular: lessons learned
Dirk Luijk
 
Gutenberg sous le capot, modules réutilisables
Gutenberg sous le capot, modules réutilisablesGutenberg sous le capot, modules réutilisables
Gutenberg sous le capot, modules réutilisables
Riad Benguella
 
Django for Beginners
Django for BeginnersDjango for Beginners
Django for Beginners
Jason Davies
 
JS-05-Handlebars.ppt
JS-05-Handlebars.pptJS-05-Handlebars.ppt
JS-05-Handlebars.ppt
fakeaccount225095
 
Sara Soueidan: Styling and Animating Scalable Vector Graphics with CSS [CSSCo...
Sara Soueidan: Styling and Animating Scalable Vector Graphics with CSS [CSSCo...Sara Soueidan: Styling and Animating Scalable Vector Graphics with CSS [CSSCo...
Sara Soueidan: Styling and Animating Scalable Vector Graphics with CSS [CSSCo...
Guillaume Kossi
 
React.js: You deserve to know about it
React.js: You deserve to know about itReact.js: You deserve to know about it
React.js: You deserve to know about it
Anderson Aguiar
 
Django crush course
Django crush course Django crush course
Django crush course
Mohammed El Rafie Tarabay
 
Spring Web MVC
Spring Web MVCSpring Web MVC
Spring Web MVC
zeeshanhanif
 
Aplicacoes dinamicas Rails com Backbone
Aplicacoes dinamicas Rails com BackboneAplicacoes dinamicas Rails com Backbone
Aplicacoes dinamicas Rails com Backbone
Rafael Felix da Silva
 
준비하세요 Angular js 2.0
준비하세요 Angular js 2.0준비하세요 Angular js 2.0
준비하세요 Angular js 2.0
Jeado Ko
 
J query b_dotnet_ug_meet_12_may_2012
J query b_dotnet_ug_meet_12_may_2012J query b_dotnet_ug_meet_12_may_2012
J query b_dotnet_ug_meet_12_may_2012
ghnash
 
Beginner’s tutorial (part 2) how to integrate redux-saga in react native app
Beginner’s tutorial (part 2) how to integrate redux-saga in react native appBeginner’s tutorial (part 2) how to integrate redux-saga in react native app
Beginner’s tutorial (part 2) how to integrate redux-saga in react native app
Katy Slemon
 
Webpack Encore Symfony Live 2017 San Francisco
Webpack Encore Symfony Live 2017 San FranciscoWebpack Encore Symfony Live 2017 San Francisco
Webpack Encore Symfony Live 2017 San Francisco
Ryan Weaver
 

Similar to Radoslav Stankov - React Refactoring Patterns (20)

WordPress as the Backbone(.js)
WordPress as the Backbone(.js)WordPress as the Backbone(.js)
WordPress as the Backbone(.js)
 
React.js or why DOM finally makes sense
React.js or why DOM finally makes senseReact.js or why DOM finally makes sense
React.js or why DOM finally makes sense
 
Паразитируем на React-экосистеме (Angular 4+) / Алексей Охрименко (IPONWEB)
Паразитируем на React-экосистеме (Angular 4+) / Алексей Охрименко (IPONWEB)Паразитируем на React-экосистеме (Angular 4+) / Алексей Охрименко (IPONWEB)
Паразитируем на React-экосистеме (Angular 4+) / Алексей Охрименко (IPONWEB)
 
Django
DjangoDjango
Django
 
Angular 2 Essential Training
Angular 2 Essential Training Angular 2 Essential Training
Angular 2 Essential Training
 
GDI Seattle - Intro to JavaScript Class 4
GDI Seattle - Intro to JavaScript Class 4GDI Seattle - Intro to JavaScript Class 4
GDI Seattle - Intro to JavaScript Class 4
 
WordPress Theme Design and Development Workshop - Day 3
WordPress Theme Design and Development Workshop - Day 3WordPress Theme Design and Development Workshop - Day 3
WordPress Theme Design and Development Workshop - Day 3
 
2 years of angular: lessons learned
2 years of angular: lessons learned2 years of angular: lessons learned
2 years of angular: lessons learned
 
Gutenberg sous le capot, modules réutilisables
Gutenberg sous le capot, modules réutilisablesGutenberg sous le capot, modules réutilisables
Gutenberg sous le capot, modules réutilisables
 
Django for Beginners
Django for BeginnersDjango for Beginners
Django for Beginners
 
JS-05-Handlebars.ppt
JS-05-Handlebars.pptJS-05-Handlebars.ppt
JS-05-Handlebars.ppt
 
Sara Soueidan: Styling and Animating Scalable Vector Graphics with CSS [CSSCo...
Sara Soueidan: Styling and Animating Scalable Vector Graphics with CSS [CSSCo...Sara Soueidan: Styling and Animating Scalable Vector Graphics with CSS [CSSCo...
Sara Soueidan: Styling and Animating Scalable Vector Graphics with CSS [CSSCo...
 
React.js: You deserve to know about it
React.js: You deserve to know about itReact.js: You deserve to know about it
React.js: You deserve to know about it
 
Django crush course
Django crush course Django crush course
Django crush course
 
Spring Web MVC
Spring Web MVCSpring Web MVC
Spring Web MVC
 
Aplicacoes dinamicas Rails com Backbone
Aplicacoes dinamicas Rails com BackboneAplicacoes dinamicas Rails com Backbone
Aplicacoes dinamicas Rails com Backbone
 
준비하세요 Angular js 2.0
준비하세요 Angular js 2.0준비하세요 Angular js 2.0
준비하세요 Angular js 2.0
 
J query b_dotnet_ug_meet_12_may_2012
J query b_dotnet_ug_meet_12_may_2012J query b_dotnet_ug_meet_12_may_2012
J query b_dotnet_ug_meet_12_may_2012
 
Beginner’s tutorial (part 2) how to integrate redux-saga in react native app
Beginner’s tutorial (part 2) how to integrate redux-saga in react native appBeginner’s tutorial (part 2) how to integrate redux-saga in react native app
Beginner’s tutorial (part 2) how to integrate redux-saga in react native app
 
Webpack Encore Symfony Live 2017 San Francisco
Webpack Encore Symfony Live 2017 San FranciscoWebpack Encore Symfony Live 2017 San Francisco
Webpack Encore Symfony Live 2017 San Francisco
 

More from OdessaJS Conf

'GraphQL Schema Design' by Borys Mohyla. OdessaJS'2021
'GraphQL Schema Design' by Borys Mohyla. OdessaJS'2021'GraphQL Schema Design' by Borys Mohyla. OdessaJS'2021
'GraphQL Schema Design' by Borys Mohyla. OdessaJS'2021
OdessaJS Conf
 
'How i came up with my talk' by Yurii Artiukh. OdessaJS'2021
'How i came up with my talk' by Yurii Artiukh. OdessaJS'2021'How i came up with my talk' by Yurii Artiukh. OdessaJS'2021
'How i came up with my talk' by Yurii Artiukh. OdessaJS'2021
OdessaJS Conf
 
"Is there life in react without redux" by Babich Sergiy. OdessaJS'2021
"Is there life in react without redux" by Babich Sergiy. OdessaJS'2021"Is there life in react without redux" by Babich Sergiy. OdessaJS'2021
"Is there life in react without redux" by Babich Sergiy. OdessaJS'2021
OdessaJS Conf
 
Олексій Павленко. CONTRACT PROTECTION ON THE FRONTEND SIDE: HOW TO ORGANIZE R...
Олексій Павленко. CONTRACT PROTECTION ON THE FRONTEND SIDE: HOW TO ORGANIZE R...Олексій Павленко. CONTRACT PROTECTION ON THE FRONTEND SIDE: HOW TO ORGANIZE R...
Олексій Павленко. CONTRACT PROTECTION ON THE FRONTEND SIDE: HOW TO ORGANIZE R...
OdessaJS Conf
 
Андрій Троян. Розробка мікросервісів з NestJS. OdessaJS'2021
Андрій Троян. Розробка мікросервісів з NestJS. OdessaJS'2021Андрій Троян. Розробка мікросервісів з NestJS. OdessaJS'2021
Андрій Троян. Розробка мікросервісів з NestJS. OdessaJS'2021
OdessaJS Conf
 
Олексій Гончар "Використання Electron в розробці корпоративної відео-мессeндж...
Олексій Гончар "Використання Electron в розробці корпоративної відео-мессeндж...Олексій Гончар "Використання Electron в розробці корпоративної відео-мессeндж...
Олексій Гончар "Використання Electron в розробці корпоративної відео-мессeндж...
OdessaJS Conf
 
Максим Климишин "Що такого особливого у пропозиції вартості шаблону Micro Fro...
Максим Климишин "Що такого особливого у пропозиції вартості шаблону Micro Fro...Максим Климишин "Що такого особливого у пропозиції вартості шаблону Micro Fro...
Максим Климишин "Що такого особливого у пропозиції вартості шаблону Micro Fro...
OdessaJS Conf
 
Павло Галушко. GOOD CODE MYTHS. OdessaJS'2021
Павло Галушко. GOOD CODE MYTHS. OdessaJS'2021Павло Галушко. GOOD CODE MYTHS. OdessaJS'2021
Павло Галушко. GOOD CODE MYTHS. OdessaJS'2021
OdessaJS Conf
 
"NODEJS & GRAPHQL COOKBOOK. LET’S TALK ABOUT MICRO-SERVICES" by Антон Чередні...
"NODEJS & GRAPHQL COOKBOOK. LET’S TALK ABOUT MICRO-SERVICES" by Антон Чередні..."NODEJS & GRAPHQL COOKBOOK. LET’S TALK ABOUT MICRO-SERVICES" by Антон Чередні...
"NODEJS & GRAPHQL COOKBOOK. LET’S TALK ABOUT MICRO-SERVICES" by Антон Чередні...
OdessaJS Conf
 
'BUILDING ANGULAR APPS WITH NX' by Anastasia Necheporenko
'BUILDING ANGULAR APPS WITH NX' by Anastasia Necheporenko'BUILDING ANGULAR APPS WITH NX' by Anastasia Necheporenko
'BUILDING ANGULAR APPS WITH NX' by Anastasia Necheporenko
OdessaJS Conf
 
'IS THERE JAVASCRIPT ON SWAGGER PLUGINS?' by Dmytro Gusev
'IS THERE JAVASCRIPT ON SWAGGER PLUGINS?' by  Dmytro Gusev'IS THERE JAVASCRIPT ON SWAGGER PLUGINS?' by  Dmytro Gusev
'IS THERE JAVASCRIPT ON SWAGGER PLUGINS?' by Dmytro Gusev
OdessaJS Conf
 
'ETHEREUM SMART CONTRACTS ON JS' by Yaroslav Dvorovenko
'ETHEREUM SMART CONTRACTS ON JS' by Yaroslav Dvorovenko'ETHEREUM SMART CONTRACTS ON JS' by Yaroslav Dvorovenko
'ETHEREUM SMART CONTRACTS ON JS' by Yaroslav Dvorovenko
OdessaJS Conf
 
'GOLANG USAGE IN DEVELOPMENT OF NODE.JS APPLICATIONS (NODE.JS: IN GO WE TRUST...
'GOLANG USAGE IN DEVELOPMENT OF NODE.JS APPLICATIONS (NODE.JS: IN GO WE TRUST...'GOLANG USAGE IN DEVELOPMENT OF NODE.JS APPLICATIONS (NODE.JS: IN GO WE TRUST...
'GOLANG USAGE IN DEVELOPMENT OF NODE.JS APPLICATIONS (NODE.JS: IN GO WE TRUST...
OdessaJS Conf
 
'MICROFRONTENDS WITH REACT' by Liliia Karpenko
 'MICROFRONTENDS WITH REACT' by Liliia Karpenko 'MICROFRONTENDS WITH REACT' by Liliia Karpenko
'MICROFRONTENDS WITH REACT' by Liliia Karpenko
OdessaJS Conf
 
'Web performance metrics' BY ROMAN SAVITSKYI at OdessaJS'2020
'Web performance metrics' BY ROMAN SAVITSKYI at OdessaJS'2020'Web performance metrics' BY ROMAN SAVITSKYI at OdessaJS'2020
'Web performance metrics' BY ROMAN SAVITSKYI at OdessaJS'2020
OdessaJS Conf
 
'STORY OF ANOTHER ANIMATION' by YURII ARTYUKH at OdessaJS'2020
'STORY OF ANOTHER ANIMATION' by  YURII ARTYUKH at OdessaJS'2020'STORY OF ANOTHER ANIMATION' by  YURII ARTYUKH at OdessaJS'2020
'STORY OF ANOTHER ANIMATION' by YURII ARTYUKH at OdessaJS'2020
OdessaJS Conf
 
'JavaScript was invented in Odessa' by DMITRIY GUSEV at OdessaJS'2020
'JavaScript was invented in Odessa' by DMITRIY GUSEV at OdessaJS'2020'JavaScript was invented in Odessa' by DMITRIY GUSEV at OdessaJS'2020
'JavaScript was invented in Odessa' by DMITRIY GUSEV at OdessaJS'2020
OdessaJS Conf
 
'Why svelte' by BORYS MOHYLA at OdessaJS'2020
'Why svelte' by BORYS MOHYLA at OdessaJS'2020'Why svelte' by BORYS MOHYLA at OdessaJS'2020
'Why svelte' by BORYS MOHYLA at OdessaJS'2020
OdessaJS Conf
 
'Effective node.js development' by Viktor Turskyi at OdessaJS'2020
'Effective node.js development' by Viktor Turskyi at OdessaJS'2020'Effective node.js development' by Viktor Turskyi at OdessaJS'2020
'Effective node.js development' by Viktor Turskyi at OdessaJS'2020
OdessaJS Conf
 
'Tensorflow.js in real life' by Pavlo Galushko at OdessaJS'2020
'Tensorflow.js in real life' by Pavlo Galushko at OdessaJS'2020'Tensorflow.js in real life' by Pavlo Galushko at OdessaJS'2020
'Tensorflow.js in real life' by Pavlo Galushko at OdessaJS'2020
OdessaJS Conf
 

More from OdessaJS Conf (20)

'GraphQL Schema Design' by Borys Mohyla. OdessaJS'2021
'GraphQL Schema Design' by Borys Mohyla. OdessaJS'2021'GraphQL Schema Design' by Borys Mohyla. OdessaJS'2021
'GraphQL Schema Design' by Borys Mohyla. OdessaJS'2021
 
'How i came up with my talk' by Yurii Artiukh. OdessaJS'2021
'How i came up with my talk' by Yurii Artiukh. OdessaJS'2021'How i came up with my talk' by Yurii Artiukh. OdessaJS'2021
'How i came up with my talk' by Yurii Artiukh. OdessaJS'2021
 
"Is there life in react without redux" by Babich Sergiy. OdessaJS'2021
"Is there life in react without redux" by Babich Sergiy. OdessaJS'2021"Is there life in react without redux" by Babich Sergiy. OdessaJS'2021
"Is there life in react without redux" by Babich Sergiy. OdessaJS'2021
 
Олексій Павленко. CONTRACT PROTECTION ON THE FRONTEND SIDE: HOW TO ORGANIZE R...
Олексій Павленко. CONTRACT PROTECTION ON THE FRONTEND SIDE: HOW TO ORGANIZE R...Олексій Павленко. CONTRACT PROTECTION ON THE FRONTEND SIDE: HOW TO ORGANIZE R...
Олексій Павленко. CONTRACT PROTECTION ON THE FRONTEND SIDE: HOW TO ORGANIZE R...
 
Андрій Троян. Розробка мікросервісів з NestJS. OdessaJS'2021
Андрій Троян. Розробка мікросервісів з NestJS. OdessaJS'2021Андрій Троян. Розробка мікросервісів з NestJS. OdessaJS'2021
Андрій Троян. Розробка мікросервісів з NestJS. OdessaJS'2021
 
Олексій Гончар "Використання Electron в розробці корпоративної відео-мессeндж...
Олексій Гончар "Використання Electron в розробці корпоративної відео-мессeндж...Олексій Гончар "Використання Electron в розробці корпоративної відео-мессeндж...
Олексій Гончар "Використання Electron в розробці корпоративної відео-мессeндж...
 
Максим Климишин "Що такого особливого у пропозиції вартості шаблону Micro Fro...
Максим Климишин "Що такого особливого у пропозиції вартості шаблону Micro Fro...Максим Климишин "Що такого особливого у пропозиції вартості шаблону Micro Fro...
Максим Климишин "Що такого особливого у пропозиції вартості шаблону Micro Fro...
 
Павло Галушко. GOOD CODE MYTHS. OdessaJS'2021
Павло Галушко. GOOD CODE MYTHS. OdessaJS'2021Павло Галушко. GOOD CODE MYTHS. OdessaJS'2021
Павло Галушко. GOOD CODE MYTHS. OdessaJS'2021
 
"NODEJS & GRAPHQL COOKBOOK. LET’S TALK ABOUT MICRO-SERVICES" by Антон Чередні...
"NODEJS & GRAPHQL COOKBOOK. LET’S TALK ABOUT MICRO-SERVICES" by Антон Чередні..."NODEJS & GRAPHQL COOKBOOK. LET’S TALK ABOUT MICRO-SERVICES" by Антон Чередні...
"NODEJS & GRAPHQL COOKBOOK. LET’S TALK ABOUT MICRO-SERVICES" by Антон Чередні...
 
'BUILDING ANGULAR APPS WITH NX' by Anastasia Necheporenko
'BUILDING ANGULAR APPS WITH NX' by Anastasia Necheporenko'BUILDING ANGULAR APPS WITH NX' by Anastasia Necheporenko
'BUILDING ANGULAR APPS WITH NX' by Anastasia Necheporenko
 
'IS THERE JAVASCRIPT ON SWAGGER PLUGINS?' by Dmytro Gusev
'IS THERE JAVASCRIPT ON SWAGGER PLUGINS?' by  Dmytro Gusev'IS THERE JAVASCRIPT ON SWAGGER PLUGINS?' by  Dmytro Gusev
'IS THERE JAVASCRIPT ON SWAGGER PLUGINS?' by Dmytro Gusev
 
'ETHEREUM SMART CONTRACTS ON JS' by Yaroslav Dvorovenko
'ETHEREUM SMART CONTRACTS ON JS' by Yaroslav Dvorovenko'ETHEREUM SMART CONTRACTS ON JS' by Yaroslav Dvorovenko
'ETHEREUM SMART CONTRACTS ON JS' by Yaroslav Dvorovenko
 
'GOLANG USAGE IN DEVELOPMENT OF NODE.JS APPLICATIONS (NODE.JS: IN GO WE TRUST...
'GOLANG USAGE IN DEVELOPMENT OF NODE.JS APPLICATIONS (NODE.JS: IN GO WE TRUST...'GOLANG USAGE IN DEVELOPMENT OF NODE.JS APPLICATIONS (NODE.JS: IN GO WE TRUST...
'GOLANG USAGE IN DEVELOPMENT OF NODE.JS APPLICATIONS (NODE.JS: IN GO WE TRUST...
 
'MICROFRONTENDS WITH REACT' by Liliia Karpenko
 'MICROFRONTENDS WITH REACT' by Liliia Karpenko 'MICROFRONTENDS WITH REACT' by Liliia Karpenko
'MICROFRONTENDS WITH REACT' by Liliia Karpenko
 
'Web performance metrics' BY ROMAN SAVITSKYI at OdessaJS'2020
'Web performance metrics' BY ROMAN SAVITSKYI at OdessaJS'2020'Web performance metrics' BY ROMAN SAVITSKYI at OdessaJS'2020
'Web performance metrics' BY ROMAN SAVITSKYI at OdessaJS'2020
 
'STORY OF ANOTHER ANIMATION' by YURII ARTYUKH at OdessaJS'2020
'STORY OF ANOTHER ANIMATION' by  YURII ARTYUKH at OdessaJS'2020'STORY OF ANOTHER ANIMATION' by  YURII ARTYUKH at OdessaJS'2020
'STORY OF ANOTHER ANIMATION' by YURII ARTYUKH at OdessaJS'2020
 
'JavaScript was invented in Odessa' by DMITRIY GUSEV at OdessaJS'2020
'JavaScript was invented in Odessa' by DMITRIY GUSEV at OdessaJS'2020'JavaScript was invented in Odessa' by DMITRIY GUSEV at OdessaJS'2020
'JavaScript was invented in Odessa' by DMITRIY GUSEV at OdessaJS'2020
 
'Why svelte' by BORYS MOHYLA at OdessaJS'2020
'Why svelte' by BORYS MOHYLA at OdessaJS'2020'Why svelte' by BORYS MOHYLA at OdessaJS'2020
'Why svelte' by BORYS MOHYLA at OdessaJS'2020
 
'Effective node.js development' by Viktor Turskyi at OdessaJS'2020
'Effective node.js development' by Viktor Turskyi at OdessaJS'2020'Effective node.js development' by Viktor Turskyi at OdessaJS'2020
'Effective node.js development' by Viktor Turskyi at OdessaJS'2020
 
'Tensorflow.js in real life' by Pavlo Galushko at OdessaJS'2020
'Tensorflow.js in real life' by Pavlo Galushko at OdessaJS'2020'Tensorflow.js in real life' by Pavlo Galushko at OdessaJS'2020
'Tensorflow.js in real life' by Pavlo Galushko at OdessaJS'2020
 

Recently uploaded

Digital Banking in the Cloud: How Citizens Bank Unlocked Their Mainframe
Digital Banking in the Cloud: How Citizens Bank Unlocked Their MainframeDigital Banking in the Cloud: How Citizens Bank Unlocked Their Mainframe
Digital Banking in the Cloud: How Citizens Bank Unlocked Their Mainframe
Precisely
 
How to Interpret Trends in the Kalyan Rajdhani Mix Chart.pdf
How to Interpret Trends in the Kalyan Rajdhani Mix Chart.pdfHow to Interpret Trends in the Kalyan Rajdhani Mix Chart.pdf
How to Interpret Trends in the Kalyan Rajdhani Mix Chart.pdf
Chart Kalyan
 
"Frontline Battles with DDoS: Best practices and Lessons Learned", Igor Ivaniuk
"Frontline Battles with DDoS: Best practices and Lessons Learned",  Igor Ivaniuk"Frontline Battles with DDoS: Best practices and Lessons Learned",  Igor Ivaniuk
"Frontline Battles with DDoS: Best practices and Lessons Learned", Igor Ivaniuk
Fwdays
 
AppSec PNW: Android and iOS Application Security with MobSF
AppSec PNW: Android and iOS Application Security with MobSFAppSec PNW: Android and iOS Application Security with MobSF
AppSec PNW: Android and iOS Application Security with MobSF
Ajin Abraham
 
“How Axelera AI Uses Digital Compute-in-memory to Deliver Fast and Energy-eff...
“How Axelera AI Uses Digital Compute-in-memory to Deliver Fast and Energy-eff...“How Axelera AI Uses Digital Compute-in-memory to Deliver Fast and Energy-eff...
“How Axelera AI Uses Digital Compute-in-memory to Deliver Fast and Energy-eff...
Edge AI and Vision Alliance
 
Nordic Marketo Engage User Group_June 13_ 2024.pptx
Nordic Marketo Engage User Group_June 13_ 2024.pptxNordic Marketo Engage User Group_June 13_ 2024.pptx
Nordic Marketo Engage User Group_June 13_ 2024.pptx
MichaelKnudsen27
 
Fueling AI with Great Data with Airbyte Webinar
Fueling AI with Great Data with Airbyte WebinarFueling AI with Great Data with Airbyte Webinar
Fueling AI with Great Data with Airbyte Webinar
Zilliz
 
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
 
Crafting Excellence: A Comprehensive Guide to iOS Mobile App Development Serv...
Crafting Excellence: A Comprehensive Guide to iOS Mobile App Development Serv...Crafting Excellence: A Comprehensive Guide to iOS Mobile App Development Serv...
Crafting Excellence: A Comprehensive Guide to iOS Mobile App Development Serv...
Pitangent Analytics & Technology Solutions Pvt. Ltd
 
Introduction of Cybersecurity with OSS at Code Europe 2024
Introduction of Cybersecurity with OSS  at Code Europe 2024Introduction of Cybersecurity with OSS  at Code Europe 2024
Introduction of Cybersecurity with OSS at Code Europe 2024
Hiroshi SHIBATA
 
[OReilly Superstream] Occupy the Space: A grassroots guide to engineering (an...
[OReilly Superstream] Occupy the Space: A grassroots guide to engineering (an...[OReilly Superstream] Occupy the Space: A grassroots guide to engineering (an...
[OReilly Superstream] Occupy the Space: A grassroots guide to engineering (an...
Jason Yip
 
Leveraging the Graph for Clinical Trials and Standards
Leveraging the Graph for Clinical Trials and StandardsLeveraging the Graph for Clinical Trials and Standards
Leveraging the Graph for Clinical Trials and Standards
Neo4j
 
Northern Engraving | Nameplate Manufacturing Process - 2024
Northern Engraving | Nameplate Manufacturing Process - 2024Northern Engraving | Nameplate Manufacturing Process - 2024
Northern Engraving | Nameplate Manufacturing Process - 2024
Northern Engraving
 
GraphRAG for LifeSciences Hands-On with the Clinical Knowledge Graph
GraphRAG for LifeSciences Hands-On with the Clinical Knowledge GraphGraphRAG for LifeSciences Hands-On with the Clinical Knowledge Graph
GraphRAG for LifeSciences Hands-On with the Clinical Knowledge Graph
Neo4j
 
zkStudyClub - LatticeFold: A Lattice-based Folding Scheme and its Application...
zkStudyClub - LatticeFold: A Lattice-based Folding Scheme and its Application...zkStudyClub - LatticeFold: A Lattice-based Folding Scheme and its Application...
zkStudyClub - LatticeFold: A Lattice-based Folding Scheme and its Application...
Alex Pruden
 
Programming Foundation Models with DSPy - Meetup Slides
Programming Foundation Models with DSPy - Meetup SlidesProgramming Foundation Models with DSPy - Meetup Slides
Programming Foundation Models with DSPy - Meetup Slides
Zilliz
 
HCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAU
HCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAUHCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAU
HCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAU
panagenda
 
Essentials of Automations: Exploring Attributes & Automation Parameters
Essentials of Automations: Exploring Attributes & Automation ParametersEssentials of Automations: Exploring Attributes & Automation Parameters
Essentials of Automations: Exploring Attributes & Automation Parameters
Safe Software
 
June Patch Tuesday
June Patch TuesdayJune Patch Tuesday
June Patch Tuesday
Ivanti
 

Recently uploaded (20)

Digital Banking in the Cloud: How Citizens Bank Unlocked Their Mainframe
Digital Banking in the Cloud: How Citizens Bank Unlocked Their MainframeDigital Banking in the Cloud: How Citizens Bank Unlocked Their Mainframe
Digital Banking in the Cloud: How Citizens Bank Unlocked Their Mainframe
 
How to Interpret Trends in the Kalyan Rajdhani Mix Chart.pdf
How to Interpret Trends in the Kalyan Rajdhani Mix Chart.pdfHow to Interpret Trends in the Kalyan Rajdhani Mix Chart.pdf
How to Interpret Trends in the Kalyan Rajdhani Mix Chart.pdf
 
"Frontline Battles with DDoS: Best practices and Lessons Learned", Igor Ivaniuk
"Frontline Battles with DDoS: Best practices and Lessons Learned",  Igor Ivaniuk"Frontline Battles with DDoS: Best practices and Lessons Learned",  Igor Ivaniuk
"Frontline Battles with DDoS: Best practices and Lessons Learned", Igor Ivaniuk
 
AppSec PNW: Android and iOS Application Security with MobSF
AppSec PNW: Android and iOS Application Security with MobSFAppSec PNW: Android and iOS Application Security with MobSF
AppSec PNW: Android and iOS Application Security with MobSF
 
“How Axelera AI Uses Digital Compute-in-memory to Deliver Fast and Energy-eff...
“How Axelera AI Uses Digital Compute-in-memory to Deliver Fast and Energy-eff...“How Axelera AI Uses Digital Compute-in-memory to Deliver Fast and Energy-eff...
“How Axelera AI Uses Digital Compute-in-memory to Deliver Fast and Energy-eff...
 
Nordic Marketo Engage User Group_June 13_ 2024.pptx
Nordic Marketo Engage User Group_June 13_ 2024.pptxNordic Marketo Engage User Group_June 13_ 2024.pptx
Nordic Marketo Engage User Group_June 13_ 2024.pptx
 
Fueling AI with Great Data with Airbyte Webinar
Fueling AI with Great Data with Airbyte WebinarFueling AI with Great Data with Airbyte Webinar
Fueling AI with Great Data with Airbyte Webinar
 
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
 
Crafting Excellence: A Comprehensive Guide to iOS Mobile App Development Serv...
Crafting Excellence: A Comprehensive Guide to iOS Mobile App Development Serv...Crafting Excellence: A Comprehensive Guide to iOS Mobile App Development Serv...
Crafting Excellence: A Comprehensive Guide to iOS Mobile App Development Serv...
 
Artificial Intelligence and Electronic Warfare
Artificial Intelligence and Electronic WarfareArtificial Intelligence and Electronic Warfare
Artificial Intelligence and Electronic Warfare
 
Introduction of Cybersecurity with OSS at Code Europe 2024
Introduction of Cybersecurity with OSS  at Code Europe 2024Introduction of Cybersecurity with OSS  at Code Europe 2024
Introduction of Cybersecurity with OSS at Code Europe 2024
 
[OReilly Superstream] Occupy the Space: A grassroots guide to engineering (an...
[OReilly Superstream] Occupy the Space: A grassroots guide to engineering (an...[OReilly Superstream] Occupy the Space: A grassroots guide to engineering (an...
[OReilly Superstream] Occupy the Space: A grassroots guide to engineering (an...
 
Leveraging the Graph for Clinical Trials and Standards
Leveraging the Graph for Clinical Trials and StandardsLeveraging the Graph for Clinical Trials and Standards
Leveraging the Graph for Clinical Trials and Standards
 
Northern Engraving | Nameplate Manufacturing Process - 2024
Northern Engraving | Nameplate Manufacturing Process - 2024Northern Engraving | Nameplate Manufacturing Process - 2024
Northern Engraving | Nameplate Manufacturing Process - 2024
 
GraphRAG for LifeSciences Hands-On with the Clinical Knowledge Graph
GraphRAG for LifeSciences Hands-On with the Clinical Knowledge GraphGraphRAG for LifeSciences Hands-On with the Clinical Knowledge Graph
GraphRAG for LifeSciences Hands-On with the Clinical Knowledge Graph
 
zkStudyClub - LatticeFold: A Lattice-based Folding Scheme and its Application...
zkStudyClub - LatticeFold: A Lattice-based Folding Scheme and its Application...zkStudyClub - LatticeFold: A Lattice-based Folding Scheme and its Application...
zkStudyClub - LatticeFold: A Lattice-based Folding Scheme and its Application...
 
Programming Foundation Models with DSPy - Meetup Slides
Programming Foundation Models with DSPy - Meetup SlidesProgramming Foundation Models with DSPy - Meetup Slides
Programming Foundation Models with DSPy - Meetup Slides
 
HCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAU
HCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAUHCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAU
HCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAU
 
Essentials of Automations: Exploring Attributes & Automation Parameters
Essentials of Automations: Exploring Attributes & Automation ParametersEssentials of Automations: Exploring Attributes & Automation Parameters
Essentials of Automations: Exploring Attributes & Automation Parameters
 
June Patch Tuesday
June Patch TuesdayJune Patch Tuesday
June Patch Tuesday
 

Radoslav Stankov - React Refactoring Patterns