From 9c629ae50c5dd09644c94d722233ec663f66c2a7 Mon Sep 17 00:00:00 2001 From: Harry Hogg Date: Thu, 28 Jul 2022 12:08:29 +0100 Subject: [PATCH] Added publications --- src/components/Landing/Landing.tsx | 27 ++++------ src/components/Publication/Publication.tsx | 52 +++++++++++++++++++ src/components/Root.tsx | 5 +- src/data.ts | 59 +++++++++++++--------- src/types.ts | 37 +++++++++++--- 5 files changed, 128 insertions(+), 52 deletions(-) create mode 100644 src/components/Publication/Publication.tsx diff --git a/src/components/Landing/Landing.tsx b/src/components/Landing/Landing.tsx index 5af03ea8..59b64073 100644 --- a/src/components/Landing/Landing.tsx +++ b/src/components/Landing/Landing.tsx @@ -1,10 +1,15 @@ import { motion } from 'framer'; import { Box, Grid, Link, Text, Icons, useMatchMedia } from 'preshape'; import React from 'react'; -import data, { experienceSorted, listedWritingsSorted } from '../../data'; +import data, { + experienceSorted, + listedWritingsSorted, + publicationsSorted, +} from '../../data'; import Experience from '../Experience/Experience'; import Header from '../Header/Header'; import Project from '../Project/Project'; +import Publication from '../Publication/Publication'; import Writing from '../Writing/Writing'; export default function Landing() { @@ -67,9 +72,6 @@ export default function Landing() { Personal Projects - - Some of my favourite and finished personal side projects. - @@ -90,9 +92,6 @@ export default function Landing() { Experience - - A timeline of where and what I've worked on over the years. - {experienceSorted.map((exp, index) => ( @@ -106,11 +105,6 @@ export default function Landing() { Writings - - Usually when doing one of my side projects, I find something - to write about and then add them to this list. It's like an - infrequent blog with no consistent theme. - {listedWritingsSorted.map((writing) => ( @@ -123,12 +117,11 @@ export default function Landing() { Publications - - Usually when doing one of my side projects, I find something - to write about and then add them to this list. It's like an - infrequent blog with no consistent theme. - + + {publicationsSorted.map((publication) => ( + + ))} diff --git a/src/components/Publication/Publication.tsx b/src/components/Publication/Publication.tsx new file mode 100644 index 00000000..661531fb --- /dev/null +++ b/src/components/Publication/Publication.tsx @@ -0,0 +1,52 @@ +import { Link, Text } from 'preshape'; +import React from 'react'; +import { Publication } from '../../types'; +import { fromISO } from '../../utils/date'; + +interface Props extends Publication {} + +const PublicationComponent = (props: Props) => { + const { authors, date, description, journal, title, href } = props; + + return ( + + + + {title} + + + + {journal} + + + + {description} + + + by{' '} + {authors.map((author, index) => ( + + {author}{' '} + + [{index + 1}] + + {index === authors.length - 1 ? ' ' : ', '} + + ))} + + + + {fromISO(date)} + + + ); +}; + +export default PublicationComponent; diff --git a/src/components/Root.tsx b/src/components/Root.tsx index bff853a8..04f6793a 100644 --- a/src/components/Root.tsx +++ b/src/components/Root.tsx @@ -16,7 +16,6 @@ import Snake from './Projects/Snake/Snake'; import Spirals from './Projects/Spirals/Spirals'; import CircleGraphs from './Writings/CircleGraphs/CircleGraphs'; import CircleIntersections from './Writings/CircleIntersections/CircleIntersections'; -import GeneratingTessellations from './Writings/GeneratingTessellations/GeneratingTessellations'; import SnakeSolution from './Writings/SnakeSolution/SnakeSolution'; export const RootContext = createContext<{ @@ -71,10 +70,10 @@ const Site = () => { element={} path={data.writings.CircleGraphs.to} /> - } path={data.writings.GeneratingTessellations.to} - /> + /> */} } path={data.writings.SnakeSolution.to} diff --git a/src/data.ts b/src/data.ts index ad884d3f..358b300c 100644 --- a/src/data.ts +++ b/src/data.ts @@ -1,13 +1,6 @@ import { Data } from './types'; -const data: Data< - 'Pure360' | 'Reedsy' | 'Brandwatch' | 'Bitrise' | 'Spotify', - 'CircleGraph' | 'CircleArt' | 'Antwerp' | 'Preshape' | 'Snake' | 'Spirals', - | 'CircleGraphs' - | 'CircleIntersections' - | 'GeneratingTessellations' - | 'SnakeSolution' -> = { +const data: Data = { experience: { Pure360: { company: 'Pure360', @@ -45,6 +38,7 @@ const data: Data< company: 'Spotify', date: '2021-08-30', role: 'Senior Engineer', + tags: ['typescript', 'nodejs', 'java', 'react', 'gcp'], }, }, @@ -138,23 +132,23 @@ const data: Data< to: '/writings/circle-intersections', unlisted: true, }, - GeneratingTessellations: { - id: 'GeneratingTessellations', - date: '2020-01-31', - description: - 'An explanation of the GomJau-Hogg’s notation for generating all of the regular, semiregular (uniform) and demigular (k-uniform, up to at least k=3) in a consistent, unique and unequivocal manner.', - imageOG: require('./assets/antwerp.png'), - tags: [ - 'svg', - 'visualisation', - 'geometry', - 'tessellations', - 'nomenclature', - ], - title: - 'GomJau-Hogg’s notation for automatic generation of k-uniform tessellations', - to: '/writings/generating-tessellations', - }, + // GeneratingTessellations: { + // id: 'GeneratingTessellations', + // date: '2020-01-31', + // description: + // 'An explanation of the GomJau-Hogg’s notation for generating all of the regular, semiregular (uniform) and demigular (k-uniform, up to at least k=3) in a consistent, unique and unequivocal manner.', + // imageOG: require('./assets/antwerp.png'), + // tags: [ + // 'svg', + // 'visualisation', + // 'geometry', + // 'tessellations', + // 'nomenclature', + // ], + // title: + // 'GomJau-Hogg’s notation for automatic generation of k-uniform tessellations', + // to: '/writings/generating-tessellations', + // }, SnakeSolution: { id: 'SnakeSolution', date: '2020-04-13', @@ -174,6 +168,17 @@ const data: Data< to: '/writings/snake-solution', }, }, + + publications: { + Tilings: { + title: 'GomJau-Hogg’s Notation for Automatic Generation of k-Uniform Tessellations with ANTWERP v3.0', + date: '2021-12-09', + authors: ['Valentin Gomez-Jauregui', 'Harrison Hogg', 'Cristina Manchado', 'Cesar Otero'], + journal: 'MDPI Symmetry', + description: 'Euclidean tilings are constantly applied to many fields of engineering (mechanical, civil, chemical, etc.). These tessellations are usually named after Cundy & Rollett’s notation. However, this notation has two main problems related to ambiguous conformation and uniqueness. This communication explains the GomJau-Hogg’s notation for generating all the regular, semi-regular (uniform) and demi-regular (k-uniform, up to at least k = 3) in a consistent, unique and unequivocal manner. Moreover, it presents Antwerp v3.0, a free online application, which is publicly shared to prove that all the basic tilings can be obtained directly from the GomJau-Hogg’s notation.', + href: 'https://www.mdpi.com/2073-8994/13/12/2376', + } + }, }; export const listedWritingsSorted = Object.values(data.writings) @@ -184,4 +189,8 @@ export const experienceSorted = Object.values(data.experience).sort( (a, b) => new Date(b.date).getTime() - new Date(a.date).getTime() ); +export const publicationsSorted = Object.values(data.publications).sort( + (a, b) => new Date(b.date).getTime() - new Date(a.date).getTime() +); + export default data; diff --git a/src/types.ts b/src/types.ts index 052e7b5c..de2d8140 100644 --- a/src/types.ts +++ b/src/types.ts @@ -1,4 +1,17 @@ -export interface Experience { + +type ExperienceList = +| 'Pure360' | 'Reedsy' | 'Brandwatch' | 'Bitrise' | 'Spotify'; + +type ProjectsList = +| 'Antwerp' | 'CircleGraph' | 'CircleArt' | 'Preshape' | 'Snake' | 'Spirals'; + +type WritingsList = +| 'CircleGraphs' | 'CircleIntersections' | 'SnakeSolution' + +type PublicationsList = +| 'Tilings'; + +export type Experience = { company: string; date: string; description?: string; @@ -6,7 +19,7 @@ export interface Experience { role: string; } -export interface Project { +export type Project = { description: string; href?: string; image: string; @@ -16,7 +29,7 @@ export interface Project { to?: string; } -export interface Writing { +export type Writing = { id: string; date: string; description: string; @@ -27,8 +40,18 @@ export interface Writing { unlisted?: boolean; } -export interface Data { - experience: Record; - projects: Record; - writings: Record; +export type Publication = { + title: string; + date: string; + journal: string; + authors: string[]; + href: string; + description: string; +}; + +export interface Data { + experience: Record; + projects: Record; + writings: Record; + publications: Record, }