diff options
| -rw-r--r-- | .gitignore | 2 | ||||
| -rw-r--r-- | app/Main.hs | 17 | ||||
| -rw-r--r-- | data/papers.bib | 328 | ||||
| -rw-r--r-- | data/people.yaml | 2 | ||||
| -rw-r--r-- | flake.lock | 56 | ||||
| -rw-r--r-- | flake.nix | 119 | ||||
| -rw-r--r-- | package.yaml | 2 | ||||
| -rw-r--r-- | src/Data/Abbr.hs | 2 | ||||
| -rw-r--r-- | src/Data/Alias.hs | 4 | ||||
| -rw-r--r-- | src/Data/Linked.hs | 2 | ||||
| -rw-r--r-- | src/Data/Name.hs | 2 | ||||
| -rw-r--r-- | src/Data/Paper.hs | 24 | ||||
| -rw-r--r-- | src/Data/Person.hs | 2 | ||||
| -rw-r--r-- | src/Hakyll/Alias.hs | 8 | ||||
| -rw-r--r-- | src/Hakyll/Paper.hs | 47 | ||||
| -rw-r--r-- | src/Hakyll/TeX/BibTeX.hs | 3 | ||||
| -rw-r--r-- | src/Prolog.hs | 8 | ||||
| -rw-r--r-- | templates/default.html | 14 | ||||
| -rw-r--r-- | www-main.cabal | 9 | ||||
| -rw-r--r-- | www/code/index.html | 30 | ||||
| -rw-r--r-- | www/credits/index.html | 40 | ||||
| -rw-r--r-- | www/credits/index.md | 19 | ||||
| -rw-r--r-- | www/index.html | 20 | ||||
| -rw-r--r-- | www/research/index.html | 57 | ||||
| -rw-r--r-- | www/research/invturan/index.md | 5 | ||||
| -rw-r--r-- | www/research/poramsey/index.md | 4 | ||||
| -rw-r--r-- | www/teaching/index.md | 78 |
27 files changed, 771 insertions, 133 deletions
@@ -2,3 +2,5 @@ dist-newstyle/* result .direnv .cache/* +tags +output/ diff --git a/app/Main.hs b/app/Main.hs index 6e00f0a..9c375a1 100644 --- a/app/Main.hs +++ b/app/Main.hs @@ -2,17 +2,20 @@ module Main where import Prolog import Hakyll +import Data.List qualified as L import Hakyll.Alias import Hakyll.Util import Data.Alias (AliasMap) -import Data.Name (Name_) +import Data.Name (Name (..), Name_) import Data.Person (Person_) import Data.Journal (Journal_) import Data.License (License_) +import Data.Paper (Paper (..)) import Hakyll.Aeson (yamlCompiler) +import Hakyll.Paper (papersCompiler, mkPaperContext, FieldContext (..)) import Hakyll.TeX.BibTeX (bibtexCompiler) -import WWW.Base (baseHakyll, domain) +import WWW.Base (baseHakyll, domain, myHakyllWriterOptions, myHakyllReaderOptions) import WWW.Templates (myContext, defaultTemplate) @@ -43,18 +46,22 @@ main = baseHakyll domain $ do route $ dropParentRoute 1 compile $ do papers <- loadBody @[Paper String] "data/papers.bib" - let fixedPapers = sort $ papers <&> \p -> p + let fixedPapers = L.reverse $ L.sort $ papers <&> \p -> p { authors = (`filter` authors p) $ flip notElem [ Name "Cox" "Christopher" Nothing , Name "Wells" "Chris" Nothing ] -- Remove me from the author list } - undefined >>= applyTemplate defaultTemplate baseCtxt >>= applyAsTemplate (mkPaperContext fixedPapers) + getResourceBody >>= applyAsTemplate (mkPaperContext (FieldContext (personCtxt "data/people.yaml") (journalCtxt "data/journals.yaml")) fixedPapers) >>= applyTemplate defaultTemplate baseCtxt match "www/teaching/index.md" $ do route $ dropParentRoute 1 `composeRoutes` setExtension ".html" - compile $ myPandocCompiler >>= applyTemplate defaultTemplate baseCtxt + -- compile $ myPandocCompiler >>= applyAsTemplate baseCtxt >>= applyTemplate defaultTemplate baseCtxt + compile $ getResourceBody >>= applyAsTemplate baseCtxt >>= myRenderPandoc >>= applyTemplate defaultTemplate baseCtxt pure () myPandocCompiler :: Compiler (Item String) myPandocCompiler = pandocCompilerWith myHakyllReaderOptions myHakyllWriterOptions + +myRenderPandoc :: Item String -> Compiler (Item String) +myRenderPandoc = renderPandocWith myHakyllReaderOptions myHakyllWriterOptions diff --git a/data/papers.bib b/data/papers.bib index e69de29..fa1037a 100644 --- a/data/papers.bib +++ b/data/papers.bib @@ -0,0 +1,328 @@ +@unpublished{briggs_frogs, + title = {Frogs, hats and common subsequences}, + author = {Briggs, Joseph and Parker, Alex and Schwieder, Coy}, + month = {apr}, + year = {2024}, + eprint = {2404.07285}, + eprinttype = {arXiv}, + eprintclass = {math.CO}, + keywords = {submitted}, +} + +@unpublished{briggs_phases, + author = {Briggs, Joseph}, + title = {Phase transitions in isoperimetric problems on the integers}, + year = {2024}, + month = {feb}, + eprint = {2402.14087}, + eprintclass = {math.CO}, + eprinttype = {arxiv}, + keywords = {accepted}, + journal = {Discrete Mathematics} +} + +@article{briggs_vietoris, + author = {Briggs, Joseph and Feng, Ziqin}, + doi = {10.1080/10586458.2025.2474034}, + journal = {Experimental Mathematics}, + month = {mar}, + pages = {1--9}, + publisher = {Informa UK Limited}, + title = {Facets in the {V}ietoris\textendash{}{R}ips Complexes of Hypercubes}, + year = {2025}, + keywords = {published}, + eprint = {2408.01288}, + eprinttype = {arXiv}, + eprintclass = {math.AT}, +} + +@article{heath_oddcycles, + author = {Heath, Emily and Martin, Ryan R.}, + doi = {10.1002/jgt.23197}, + journal = {Journal of Graph Theory}, + month = {apr}, + pages = {745--780}, + publisher = {Wiley}, + title = {The maximum number of odd cycles in a planar graph}, + volume = {108}, + year = {2025}, + keywords = {published}, + eprint = {2307.00116}, + eprintclass = {math.CO}, + eprinttype = {arxiv}, + % issue = {4}, +} + +@article{sipp, + author = {Brennan, Zach and Curtis, Bryan and Gomez-Leos, Enrique and Hadaway, Kimberly and Hogben, Leslie and Thompson, Conor}, + title = {Orthogonal realizations of random sign patterns and other applications of the SIPP}, + journal = {Electronic Journal of Linear Algebra}, + volume = {39}, + pages = {434--459}, + year = {2023}, + month = {aug}, + doi = {10.13001/ela.2023.7579}, + eprint = {2212.05207}, + eprintclass = {math.CO}, + eprinttype = {arxiv}, + keywords = {published}, + author+an = {1=earlygrad; 3=earlygrad; 4=earlygrad; 6=earlygrad}, + abstract = {A sign pattern is an array with entries in $\{+,-,0\}$. A matrix $Q$ is row orthogonal if $QQ^T = I$. The Strong Inner Product Property (SIPP), introduced in [B.A.~Curtis and B.L.~Shader, Sign patterns of orthogonal matrices and the strong inner product property, Linear Algebra Appl. 592: 228--259, 2020], is an important tool when determining whether a sign pattern allows row orthogonality because it guarantees there is a nearby matrix with the same property, allowing zero entries to be perturbed to nonzero entries, while preserving the sign of every nonzero entry. This paper uses the SIPP to initiate the study of conditions under which random sign patterns allow row orthogonality with high probability. Building on prior work, $5\times n$ nowhere zero sign patterns that minimally allow orthogonality are determined. Conditions on zero entries in a sign pattern are established that guarantee any row orthogonal matrix with such a sign pattern has the SIPP.} +} + +@article{cox_planarcycles, + author = {Martin, Ryan R.}, + title = {The maximum number of 10- and 12-cycles in a planar graph}, + year = {2023}, + month = {feb}, + eprint = {2106.02966}, + eprinttype = {arxiv}, + eprintclass = {math.CO}, + journal = {Discrete Mathematics}, + volume = {346}, + number = {2}, + pages = {113245}, + doi = {10.1016/j.disc.2022.113245}, + keywords = {published}, +} + +@article{cox_planarpaths, + author = {Martin, Ryan R.}, + title = {Counting paths, cycles and blow-ups in planar graphs}, + journal = {Journal of Graph Theory}, + volume = {101}, + number = {3}, + pages = {521-558}, + year = {2022}, + month = {apr}, + doi = {10.1002/jgt.22838}, + eprint = {2101.05911}, + eprinttype = {arxiv}, + eprintclass = {math.CO}, + keywords = {published}, +} + +@article{lcsfrogs, + author = {Bukh, Boris}, + title = {Periodic words, common subsequences and frogs}, + year = {2022}, + month = {apr}, + journal = {Annals of Applied Probability}, + volume = {32}, + number = {2}, + pages = {1295--1332}, + doi = {10.1214/21-AAP1709}, + eprint = {1912.03510}, + eprintclass = {math.PR}, + eprinttype = {arxiv}, + extra = {Code}, + keywords = {published}, +} + +@article{cox_editdistance, + author = {Martin, Ryan R. and McGinnis, Daniel}, + title = {Accumulation points of the edit distance function}, + year = {2022}, + month = {jul}, + journal = {Discrete Mathematics}, + volume = {345}, + number = {7}, + pages = {112857}, + eprint = {2107.06706}, + eprinttype = {arxiv}, + eprintclass = {math.CO}, + doi = {10.1016/j.disc.2022.112857}, + keywords = {published}, + author+an = {2=earlygrad}, +} + + +@article{onlineramsey, + author = {Briggs, Joseph}, + title = {Restricted online Ramsey numbers of matchings and trees}, + journal = {Electronic Journal of Combinatorics}, + year = {2020}, + month = {sep}, + eprint = {1904.00246}, + eprintclass = {math.CO}, + eprinttype = {arxiv}, + doi = {10.37236/8649}, + keywords = {published}, + abstract = {Consider a two-player game between players Builder and Painter. Painter begins the game by picking a coloring of the edges of $K_n$, which is hidden from Builder. + In each round, Builder points to an edge and Painter reveals its color. + Builder's goal is to locate a particular monochromatic structure in Painter's coloring by revealing the color of as few edges as possible. + The fewest number of turns required for Builder to win this game is known as the restricted online Ramsey number. + In this paper, we consider the situation where this ``particular monochromatic structure'' is a large matching or a large tree. + We show that in any $t$-coloring of $E(K_n)$, Builder can locate a monochromatic matching on at least ${n-t+1\over t+1}$ edges by revealing at most $O(n\log t)$ edges. + We show also that in any $3$-coloring of $E(K_n)$, Builder can locate a monochromatic tree on at least $n/2$ vertices by revealing at most $5n$ edges. + } +} + +@article{nearorth, + author = {Bukh, Boris}, + title = {Nearly orthogonal vectors and small antipodal spherical codes}, + journal = {Israel Journal of Mathematics}, + volume = {238}, + year = {2020}, + MONTH = {jul}, + number = {1}, + pages = {359--388}, + doi = {10.1007/s11856-020-2027-7}, + eprint = {1803.02949}, + eprinttype = {arxiv}, + eprintclass = {math.CO}, + keywords = {published}, +} + +@article{invturan, + author = {Briggs, Joseph}, + title = {Inverting the Tur{\'a}n problem}, + journal = {Discrete Mathematics}, + publisher = {Elsevier BV}, + year = {2019}, + month = {jul}, + number = {7}, + volume = {342}, + pages = {1865--1884}, + doi = {10.1016/j.disc.2019.03.005}, + eprint = {1711.02082}, + eprinttype = {arxiv}, + eprintclass = {math.CO}, + keywords = {published}, +} + +@article{frachaemers, + author = {Bukh, Boris}, + title = {On a fractional version of Haemers' bound}, + journal = {IEEE Transactions on Information Theory}, + publisher = {Institute of Electrical and Electronics Engineers (IEEE)}, + year = {2019}, + month = {jun}, + number = {6}, + volume = {65}, + pages = {3340--3348}, + doi = {10.1109/tit.2018.2889108}, + eprint = {1802.00476}, + eprinttype = {arxiv}, + eprintclass = {cs.IT}, + keywords = {published}, +} + + +@article{poramsey, + author = {Stolee, Derrick}, + title = {Ramsey numbers for partially-ordered sets}, + journal = {Order}, + publisher = {Springer Nature}, + year = {2018}, + month = {jan}, + number = {3}, + volume = {35}, + pages = {557--579}, + doi = {10.1007/s11083-017-9449-9}, + eprint = {1512.05261}, + eprinttype = {arxiv}, + eprintclass = {math.CO}, + keywords = {published}, +} + + +@article{42choose, + author = {Berikkyzy, Zhanar and Dairyko, Michael and Hogenson, Kirsten and Kumbhat, Mohit and Lidick{\'y}, Bernard and Messerschmidt, Kacy and Moss, Kevin and Nowak, Kathleen and Palmowski, Kevin and Stolee, Derrick}, + title = {(4,2)-choosability of planar graphs with forbidden structures}, + journal = {Graphs and Combinatorics}, + publisher = {Springer Nature}, + year = {2017}, + month = {jun}, + number = {4}, + volume = {33}, + pages = {751--787}, + doi = {10.1007/s00373-017-1812-5}, + eprint = {1512.03787}, + eprinttype = {arxiv}, + eprintclass = {math.CO}, + keywords = {published}, + abstract = {All planar graphs are $4$-colorable and $5$-choosable, while some planar graphs are not $4$-choosable. + Determining which properties guarantee that a planar graph can be colored using lists of size four has received significant attention. + In terms of constraining the structure of the graph, for any $\ell\in\{3,4,5,6,7\}$, a planar graph is $4$-choosable if it is $\ell$-cycle-free. + In terms of constraining the list assignment, one refinement of $k$-choosability is choosability with separation. + A graph is $(k, s)$-choosable if the graph is colorable from lists of size $k$ where adjacent vertices have at most $s$ common colors in their lists. + Every planar graph is $(4, 1)$-choosable, but there exist planar graphs that are not $(4, 3)$-choosable. + It is an open question whether planar graphs are always $(4, 2)$-choosable. + A chorded $\ell$-cycle is an $\ell$-cycle with one additional edge. + We demonstrate for each $\ell\in\{5,6,7\}$ that a planar graph is $(4, 2)$-choosable if it does not contain chorded $\ell$-cycles. + } +} + + +@article{eulerrooks, + author = {Banaian, Esther and Butler, Steve and Davis, Jeffrey and Landgraf, Jacob and Ponce, Scarlitte}, + title = {A generalization of Eulerian numbers via rook placements}, + journal = {Involve, a Journal of Mathematics}, + publisher = {Mathematical Sciences Publishers}, + year = {2017}, + month = {mar}, + number = {4}, + volume = {10}, + pages = {691--705}, + doi = {10.2140/involve.2017.10.691}, + eprint = {1508.03673}, + eprinttype = {arxiv}, + eprintclass = {math.CO}, + keywords = {published}, + author+an = {1=undergrad; 3=undergrad; 4=undergrad; 5=undergrad}, +} + +@article{primejuggle, + author = {Banaian, Esther and Butler, Steve and Davis, Jeffrey and Landgraf, Jacob and Ponce, Scarlitte}, + title = {Counting prime juggling patterns}, + journal = {Graphs and Combinatorics}, + publisher = {Springer Science and Business Media LLC}, + year = {2016}, + month = {may}, + number = {5}, + volume = {32}, + pages = {1675--1688}, + doi = {10.1007/s00373-016-1711-1}, + eprint = {1508.05296}, + eprinttype = {arxiv}, + eprintclass = {math.CO}, + keywords = {published}, + author+an = {1=undergrad; 3=undergrad; 4=undergrad; 5=undergrad}, +} + +@article{loosepath, + author = {Stolee, Derrick}, + title = {Ordered Ramsey numbers of loose paths and matchings}, + journal = {Discrete Mathematics}, + publisher = {Elsevier BV}, + year = {2016}, + month = {feb}, + number = {2}, + volume = {339}, + pages = {499--505}, + doi = {10.1016/j.disc.2015.09.026}, + eprint = {1411.4058}, + eprinttype = {arxiv}, + eprintclass = {math.CO}, + keywords = {published}, + abstract = {For a $k$-uniform hypergraph $G$ with vertex set $\{1,\dots,n\}$, the ordered Ramsey number $\operatorname{OR}_t(G)$ is the least integer $N$ such that every $t$-coloring of the edges of the complete $k$-uniform graph on vertex set $\{1,\dots,N\}$ contains a monochromatic copy of $G$ whose vertices follow the prescribed order. + Due to this added order restriction, the ordered Ramsey numbers can be much larger than the usual graph Ramsey numbers. + We determine that the ordered Ramsey numbers of loose paths under a monotone order grows as a tower of height two less than the maximum degree in terms of the number of edges. + We also extend theorems of Conlon et al. (2015) on the ordered Ramsey numbers of $2$-uniform matchings to provide upper bounds on the ordered Ramsey number of $k$-uniform matchings under certain orderings. + } +} + +@article{hanabi, + author = {De Silva, Jessica and DeOrsey, Philip and Kenter, Franklin and Retter, Troy and Tobin, Josh}, + title = {How to make the perfect fireworks display: Two strategies for \emph{Hanabi}}, + journal = {Mathematics Magazine}, + publisher = {Informa UK Limited}, + year = {2015}, + month = {dec}, + number = {5}, + volume = {88}, + pages = {323--336}, + doi = {10.4169/math.mag.88.5.323}, + keywords = {published}, +} diff --git a/data/people.yaml b/data/people.yaml index aa5d93a..1ac2c18 100644 --- a/data/people.yaml +++ b/data/people.yaml @@ -5,7 +5,7 @@ aliases: - Zachary Brennan -- name: Joe Briggs +- name: Briggs, Joe webpage: "https://josephguybriggs.wordpress.com/" aliases: - Joseph Briggs @@ -1,35 +1,35 @@ { "nodes": { - "flake-utils": { + "flake-parts": { "inputs": { - "systems": "systems" + "nixpkgs-lib": "nixpkgs-lib" }, "locked": { - "lastModified": 1731533236, - "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=", - "owner": "numtide", - "repo": "flake-utils", - "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b", + "lastModified": 1765835352, + "narHash": "sha256-XswHlK/Qtjasvhd1nOa1e8MgZ8GS//jBoTqWtrS1Giw=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "a34fae9c08a15ad73f295041fec82323541400a9", "type": "github" }, "original": { - "owner": "numtide", - "repo": "flake-utils", + "owner": "hercules-ci", + "repo": "flake-parts", "type": "github" } }, - "nix-filter": { + "haskell-flake": { "locked": { - "lastModified": 1731533336, - "narHash": "sha256-oRam5PS1vcrr5UPgALW0eo1m/5/pls27Z/pabHNy2Ms=", - "owner": "numtide", - "repo": "nix-filter", - "rev": "f7653272fd234696ae94229839a99b73c9ab7de0", + "lastModified": 1767025773, + "narHash": "sha256-yiJDBXfcTQJGhENquQLD+U3IAXiplv7M5myXz7oBF6k=", + "owner": "srid", + "repo": "haskell-flake", + "rev": "396eb65d91bf5eed4a61da8bd0b025059591445e", "type": "github" }, "original": { - "owner": "numtide", - "repo": "nix-filter", + "owner": "srid", + "repo": "haskell-flake", "type": "github" } }, @@ -48,11 +48,27 @@ "type": "github" } }, + "nixpkgs-lib": { + "locked": { + "lastModified": 1765674936, + "narHash": "sha256-k00uTP4JNfmejrCLJOwdObYC9jHRrr/5M/a/8L2EIdo=", + "owner": "nix-community", + "repo": "nixpkgs.lib", + "rev": "2075416fcb47225d9b68ac469a5c4801a9c4dd85", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "nixpkgs.lib", + "type": "github" + } + }, "root": { "inputs": { - "flake-utils": "flake-utils", - "nix-filter": "nix-filter", - "nixpkgs": "nixpkgs" + "flake-parts": "flake-parts", + "haskell-flake": "haskell-flake", + "nixpkgs": "nixpkgs", + "systems": "systems" } }, "systems": { @@ -2,35 +2,110 @@ description = "Main library for my webpage"; inputs = { nixpkgs.url = "github:nixos/nixpkgs"; - flake-utils.url = "github:numtide/flake-utils"; - nix-filter.url = "github:numtide/nix-filter"; + flake-parts.url = "github:hercules-ci/flake-parts"; + systems.url = "github:nix-systems/default"; + haskell-flake.url = "github:srid/haskell-flake"; + # flake-utils.url = "github:numtide/flake-utils"; + # nix-filter.url = "github:numtide/nix-filter"; }; - outputs = { self, nixpkgs, flake-utils, nix-filter, ... }: { + outputs = inputs@{self, flake-parts, nixpkgs, ... }: flake-parts.lib.mkFlake { inherit self inputs; } { + systems = import inputs.systems; - overlays.default = import ./nix/overlay.nix { inherit nix-filter; }; + imports = [ + inputs.haskell-flake.flakeModule + ]; - } // flake-utils.lib.eachDefaultSystem (system: let - pkgs = import nixpkgs { + flake.lib = { + rubberWith = { pkgs, texPath }: pkgs.symlinkJoin rec { + name = "rubber"; + nativeBuildInputs = [ + pkgs.makeWrapper + ]; + paths = [ + pkgs.rubber + ]; + postBuild = '' + for x in $out/bin/*; do + wrapProgram "$x" --prefix PATH : ${pkgs.lib.makeBinPath paths} + done + ''; + }; + + hakyllWith = { pkgs, site, paths ? [], texPath ? null }: pkgs.symlinkJoin { + inherit (site) name; + nativeBuildInputs = [ + pkgs.makeWrapper + ]; + paths = [ + (pkgs.haskell.lib.compose.justStaticExecutables site) + pkgs.rsync + ] ++ paths ++ pkgs.lib.optional (texPath != null) (self.lib.rubberWith { inherit pkgs texPath; }); + postBuild = '' + for x in $out/bin/*; do + wrapProgram "$x" --prefix PATH : ${pkgs.lib.makeBinPath paths} + done + ''; + }; + }; + + flake.overlays.default = final: prev: { + haskellPackages = prev.haskellPackages.extend (hfinal: _hprev: { + www-main = hfinal.callCabal2nix "www-main" ./. {}; + }); + }; + + perSystem = { self', config, pkgs, system, ... }: { + _module.args.pkgs = import nixpkgs { inherit system; overlays = [ self.overlays.default ]; }; - in { - packages = { - inherit (pkgs) www-main; - default = pkgs.www-main; - }; + # haskellProjects.default = { + # projectRoot = ./.; + # }; - devShells.default = pkgs.haskellPackages.shellFor { - packages = _: []; - # packages = p: [ p.www-main ]; - withHoogle = true; - buildInputs = with pkgs.haskellPackages; [ - cabal-install - hpack - pkgs.zlib - pkgs.icu - ]; + packages = rec { + default = www-main-exe; + www-main-exe = self.lib.hakyllWith { + inherit pkgs; + # site = config.packages.www-main; + site = pkgs.haskellPackages.www-main; + texPath = [ + pkgs.texlive.combined.scheme-full + ]; + }; }; - }); + }; + }; + + # outputs = { self, nixpkgs, flake-utils, nix-filter, ... }: { + # + # overlays.default = import ./nix/overlay.nix { inherit nix-filter; }; + # + # } // flake-utils.lib.eachDefaultSystem (system: let + # pkgs = import nixpkgs { + # inherit system; + # overlays = [ self.overlays.default ]; + # }; + # in { + # packages = { + # inherit (pkgs) www-main; + # default = pkgs.www-main; + # }; + # + # devShells.default = pkgs.haskellPackages.shellFor { + # packages = _: []; + # # packages = p: [ p.www-main ]; + # withHoogle = true; + # buildInputs = with pkgs.haskellPackages; [ + # cabal-install + # hpack + # hlint + # fast-tags + # pkgs.haskell-language-server + # pkgs.zlib + # pkgs.icu + # ]; + # }; + # }); } diff --git a/package.yaml b/package.yaml index 595b307..7ff937b 100644 --- a/package.yaml +++ b/package.yaml @@ -25,6 +25,7 @@ default-extensions: - DeriveGeneric - DeriveLift - DerivingStrategies + - DerivingVia - DefaultSignatures - FunctionalDependencies - GADTs @@ -32,6 +33,7 @@ default-extensions: - MultiWayIf - OverloadedStrings - PatternSynonyms + - RecordWildCards - TypeFamilies - UndecidableInstances - ViewPatterns diff --git a/src/Data/Abbr.hs b/src/Data/Abbr.hs index f42134f..8ee4bc0 100644 --- a/src/Data/Abbr.hs +++ b/src/Data/Abbr.hs @@ -27,7 +27,7 @@ type Abbr_ = Abbr StrictText abbrHtml :: ToMarkup a => Abbr a -> Html abbrHtml (Abbr n sn l) = linkedHtml $ Linked (fromMaybe n sn) l (n <$ sn) -instance Ord a => ToAliases (Abbr a) where +instance Ord a => ToAliases (Abbr a) a where toAliases (Abbr t st _) = S.fromList $ t : toList st instance FromAlias a (Abbr a) where diff --git a/src/Data/Alias.hs b/src/Data/Alias.hs index 357f901..9082c14 100644 --- a/src/Data/Alias.hs +++ b/src/Data/Alias.hs @@ -23,6 +23,7 @@ import Data.Aeson.KeyMap qualified as KM import Data.Map.Strict qualified as M import Data.Set qualified as S import Data.Typeable +import Hakyll qualified as H data WithAliases a x = WithAliases (Set a) x @@ -103,6 +104,9 @@ newtype AliasMap a x = AliasMap (Map a x) deriving newtype (Binary, Foldable, Functor, Semigroup, Monoid) deriving stock (Show, Traversable) +instance H.Writable (AliasMap a x) where + write _ _ = pure () + buildAliasMap :: (Foldable t, ToAliases x a) => t x -> AliasMap a x buildAliasMap = fmap AliasMap $ foldMap $ (<$) <*> toMap . toAliases {-# INLINE buildAliasMap #-} diff --git a/src/Data/Linked.hs b/src/Data/Linked.hs index 8e78f86..de1dc77 100644 --- a/src/Data/Linked.hs +++ b/src/Data/Linked.hs @@ -38,7 +38,7 @@ instance ToMaybe Maybe where toMaybe = liftMaybe instance ToMaybe Identity where - toMaybe (Identity a) = pure a + toMaybe (Identity x) = pure x instance ToMaybe Proxy where toMaybe _ = empty diff --git a/src/Data/Name.hs b/src/Data/Name.hs index 647c285..faf8d8c 100644 --- a/src/Data/Name.hs +++ b/src/Data/Name.hs @@ -84,7 +84,7 @@ readNameFML t = T.map (\c -> if c == '~' then ' ' else c) <<$>> [] -> empty (f:xs) -> case unsnoc xs of Nothing -> empty - Just (m, l) -> pure $ Name f l $ case m of + Just (m, l) -> pure $ Name l f $ case m of [] -> Nothing _ -> Just $ T.unwords m diff --git a/src/Data/Paper.hs b/src/Data/Paper.hs index 25b6d98..0dedc46 100644 --- a/src/Data/Paper.hs +++ b/src/Data/Paper.hs @@ -1,11 +1,16 @@ {-# LANGUAGE QuasiQuotes #-} +{-# LANGUAGE RecordWildCards #-} module Data.Paper ( Paper (..) , Status (..) , ArXiv (..) + , ArXivType (..) , DOI (..) , Eprint (..) , mkPaper + -- * helpers + , doiLink + , arXivLink ) where import Prolog @@ -15,9 +20,10 @@ import Data.Name import Data.Time import Network.URI import Network.URI.Static +import Hakyll qualified as H import Text.BibTeX.Entry qualified as B -import Text.BibTeX.Parse qualified as B +import Text.BibTeX.Parse qualified as BP data Paper a = Paper @@ -32,6 +38,12 @@ data Paper a = Paper instance Binary a => Binary (Paper a) +instance H.Writable (Paper a) where + write _ _ = pure () + +instance H.Writable (t (Paper a)) where + write _ _ = pure () + -- instance (Binary a, Binary (Status f a), Binary (f (Person a))) => Binary (Paper f a) data Status a @@ -101,13 +113,13 @@ mkPaper bib = do abstract = M.lookup "abstract" fields -- extraLink = M.lookup "extralink" fields title <- find' "title" - authors <- find' "authors" >>= traverse (ffmap toSL . parseName . toSL) . B.splitAuthorList + authors <- find' "author" >>= traverse (ffmap toSL . parseName . toSL) . BP.splitAuthorList status <- do date <- getDate traverse puri (M.lookup "doi" fields) >>= \case Just u -> do let doi = DOI u - journal <- findit "journal" + journal <- findit "journal" fields pure $ Published {..} Nothing -> pure $ case M.lookup "journal" fields of Just journal -> Accepted {..} @@ -124,7 +136,7 @@ mkPaper bib = do -- date <- getDate -- pure $ Published {..} extraLink <- traverse puri $ M.lookup "extralink" fields - eprint <- case toLower <<$>> M.lookup "eprinttype" fields of + eprints <- case toLower <<$>> M.lookup "eprinttype" fields of Just "arxiv" -> do _identifier <- find' "eprint" >>= puri _class <- find' "eprintclass" @@ -138,10 +150,10 @@ mkPaper bib = do where fields = M.fromList $ B.fields bib find' k = findit k fields - getDate = mapM findit [ "month", "year" ] >>= parseTimeM True defaultTimeLocale "%b %Y" . unwords + getDate = mapM (`findit` fields) [ "month", "year" ] >>= parseTimeM True defaultTimeLocale "%b %Y" . unwords puri :: MonadFail m => String -> m URI -puri u = maybe (fail $ show u <> " cannot be understood as a uri") pure $ parseURI u +puri u = maybe (fail $ show u <> " cannot be understood as a uri") pure $ parseRelativeReference u findit :: (Show a, Ord a, MonadFail m) => a -> M.Map a x -> m x findit k = maybe (fail $ "Field " <> show k <> " does not exist") pure . M.lookup k diff --git a/src/Data/Person.hs b/src/Data/Person.hs index 853408e..389d1ed 100644 --- a/src/Data/Person.hs +++ b/src/Data/Person.hs @@ -28,7 +28,7 @@ instance Binary a => Binary (Person a) type Person_ = Person StrictText personHtml :: (ToMarkup a) => Person a -> Html -personHtml (Person n w) = linkedHtml $ Linked (renderNameFML $ toMarkup <$> n) w Nothing +personHtml (Person n w) = linkedHtml $ Linked (contents $ renderNameFML $ contents . toMarkup <$> n) w Nothing personFromName :: Name a -> Person a personFromName n = Person n Nothing diff --git a/src/Hakyll/Alias.hs b/src/Hakyll/Alias.hs index 33ed5c1..73beb86 100644 --- a/src/Hakyll/Alias.hs +++ b/src/Hakyll/Alias.hs @@ -20,7 +20,7 @@ import Hakyll.Web.Template.Util (functionField1) aliasCtxt :: (Ord a, FromAlias a x) => String -> (String -> Compiler a) -> (x -> Compiler String) -> AliasMap a x -> Context c aliasCtxt name toa fromx amap = functionField1 name $ toa >=> flip resolveAlias amap >=> fromx -aliasCtxtFrom :: (Ord a, FromAlias a x) => String -> (String -> Compiler a) -> (x -> Compiler String) -> Identifier -> Context c +aliasCtxtFrom :: forall a x c . (Binary a, Binary x, Typeable a, Typeable x, Ord a, FromAlias a x) => String -> (String -> Compiler a) -> (x -> Compiler String) -> Identifier -> Context c aliasCtxtFrom name toa fromx ident = functionField1 name $ \s -> do amap <- loadBody ident toa s >>= flip resolveAlias amap >>= fromx @@ -28,15 +28,15 @@ aliasCtxtFrom name toa fromx ident = functionField1 name $ \s -> do -- personCtxt :: (StringConv StrictText s, Ord (Name s), ToMarkup s) => AliasMap (Name s) (Person s) -> Context a personCtxt :: Identifier -> Context a -personCtxt = aliasCtxtFrom @StrictText "personA" (ffmap toSL . parseName . toSL) (pure . toSL . personHtml) +personCtxt = aliasCtxtFrom @Name_ @Person_ "personA" (parseName . toSL) (pure . toSL . personHtml) -- personCtxtFrom :: Identifier -> Context a -- personCtxtFrom = functionField1 -- licenseCtxt :: (StringConv String s, Ord s, ToMarkup s) => AliasMap s (License s) -> Context a licenseCtxt :: Identifier -> Context a -licenseCtxt = aliasCtxtFrom @StrictText "licenseA" (pure . toSL) (pure . toSL . licenseHtml) +licenseCtxt = aliasCtxtFrom @StrictText @License_ "licenseA" (pure . toSL) (pure . toSL . licenseHtml) -- journalCtxt :: (StringConv String s, Ord s, ToMarkup s) => AliasMap s (Journal s) -> Context a journalCtxt :: Identifier -> Context a -journalCtxt = aliasCtxtFrom @StrictText "journalA" (pure . toSL) (pure . toSL . journalHtml) +journalCtxt = aliasCtxtFrom @StrictText @Journal_ "journalA" (pure . toSL) (pure . toSL . journalHtml) diff --git a/src/Hakyll/Paper.hs b/src/Hakyll/Paper.hs index 0c997eb..609f74d 100644 --- a/src/Hakyll/Paper.hs +++ b/src/Hakyll/Paper.hs @@ -8,25 +8,36 @@ import Data.Time.Format import Hakyll.Util (transformContext_) import Hakyll.Core.Identifier.Pattorn import System.FilePath +import Witherable +import Network.URI (parseRelativeReference) +import Data.String.Slugger (toSlug) +import Hakyll.TeX.BibTeX (compileBibtex) +data FieldContext a = FieldContext + { _authorCtxt :: Context (Name a) + , _journalCtxt :: Context (Status a) + } + + authorCtxt :: StringConv a String => Context (Name a) authorCtxt = fold $ - [ field "name" $ pure . renderNameFML . fmap toSL . getItemBody + [ field "name" $ pure . renderNameFML . fmap toSL . itemBody ] -paperCtxt :: StringConv a String => Context (Paper a) -paperCtxt = fold $ - [ listFieldWith "authors" authorCtxt $ pure . authors . itemBody +paperCtxt :: StringConv a String => FieldContext a -> Context (Paper a) +paperCtxt fctxt = fold $ + [ listFieldWith "authors" (_authorCtxt fctxt <> authorCtxt) $ pure . traverse authors + -- fmap pure . authors . itemBody , field "abstract" $ liftMaybe . fmap toSL . abstract . itemBody , field "title" $ pure . toSL . title . itemBody , field "key" $ pure . sluggedKey . itemBody - , status >$< statusCtxt - , listFieldWith "eprints" eprintCtxt $ pure . eprints . itemBody + , status >$< (statusCtxt <> _journalCtxt fctxt) + , listFieldWith "eprints" eprintCtxt $ pure . traverse eprints -- , eprint >$< maybeContext eprintCtxt - , field "extra" $ \i -> case extraLink $ getItemBody i of + , field "extra" $ \i -> case extraLink $ itemBody i of Just l -> pure $ show l Nothing -> do let k = sluggedKey $ itemBody i @@ -36,19 +47,19 @@ paperCtxt = fold $ _ -> fail $ "No extra for " <> k ] -mkPaperContext :: StringConv a String => [Paper a] -> Context b -mkPaperContext papers = listField "papers" paperCtxt $ do +mkPaperContext :: (StringConv a String, StringConv String a) => FieldContext a -> [Paper a] -> Context b +mkPaperContext fctxt papers = listField "papers" (paperCtxt fctxt) $ do fp <- getResourceFilePath forM papers $ \p -> do let itm = Item (fromFilePath $ replaceFileName fp (sluggedKey p)) p e <- findLocal itm - pure $ (\x -> x { eprint = eprint x <> e }) <$> itm + pure $ (\x -> x { eprints = eprints x <> e }) <$> itm statusCtxt :: StringConv a String => Context (Status a) statusCtxt = fold $ - [ field "date" $ formatTime defaultTimeLocale "%b %Y" . date . itemBody + [ field "date" $ pure . formatTime defaultTimeLocale "%b %Y" . date . itemBody , field "journal" $ \i -> case itemBody i of Published _ j _ -> pure $ toSL j Accepted _ j -> pure $ toSL j @@ -57,7 +68,7 @@ statusCtxt = fold $ Published _ _ d -> pure $ show (doiLink d) _ -> fail "No DOI" , boolField "published" $ \case - Item _ (Published {..}) -> True + Item _ (Published {}) -> True _ -> False -- \i -> case itemBody i of -- Published _ _ _ -> True @@ -76,13 +87,13 @@ statusCtxt = fold $ eprintCtxt :: StringConv a String => Context (Eprint a) eprintCtxt = fold $ [ field "eprint" $ \i -> pure $ case itemBody i of - ArXivEprint a _ -> show $ arXivLink ArXivAbs a - OtherEprint _ l -> show $ l + ArXivEprint a -> show $ arXivLink ArXivAbs a + OtherEprint _ l -> show l , field "eprintName" $ \i -> pure $ case itemBody i of - ArXivEprint _ c -> "arXiv[" <> toSL c <> "]" - OtherEprint n _ -> show n + ArXivEprint (ArXiv _ c) -> "arXiv[" <> toSL c <> "]" + OtherEprint n _ -> toSL n , field "arXivClass" $ \i -> case itemBody i of - ArXivEprint _ c -> pure $ toSL c + ArXivEprint (ArXiv _ c) -> pure $ toSL c _ -> fail "No arXiv" , functionField "arXivLink" $ \args i -> case itemBody i of ArXivEprint a -> @@ -91,7 +102,7 @@ eprintCtxt = fold $ ["pdf"] -> pure $ show $ arXivLink ArXivPdf a ["src"] -> pure $ show $ arXivLink ArXivSrc a xs -> fail $ "Invalid argument to arXivLink: " <> show xs - _ -> fail "No ArXiv" + _ -> fail "No ArXiv" ] findLocal :: (StringConv a String, StringConv String a) => Item (Paper a) -> Compiler [Eprint a] diff --git a/src/Hakyll/TeX/BibTeX.hs b/src/Hakyll/TeX/BibTeX.hs index eb87c4e..a78f254 100644 --- a/src/Hakyll/TeX/BibTeX.hs +++ b/src/Hakyll/TeX/BibTeX.hs @@ -33,7 +33,8 @@ instance Writable [B.T] where compileBibtex :: (StringConv s String) => Item s -> Compiler (Item BibTeX) compileBibtex = fmap (B.lowerCaseFieldNames <<$>>) . compileParsec_ p . fmap toSL where - p = B.skippingLeadingSpace $ B.file <* P.space <* P.eof + p = B.skippingSpace B.file + -- p = B.skippingLeadingSpace $ B.file <* P.space <* P.eof bibtexCompiler :: Compiler (Item BibTeX) bibtexCompiler = getResourceBody >>= compileBibtex diff --git a/src/Prolog.hs b/src/Prolog.hs index 94a6eb6..f7e72eb 100644 --- a/src/Prolog.hs +++ b/src/Prolog.hs @@ -23,6 +23,7 @@ module Prolog , Binary , Generic , Generic1 + , Typeable , Generically (..) , MonadThrow (..) , Exception (..) @@ -89,6 +90,8 @@ import Data.String import Data.String.Conv import Data.Text qualified as T import Data.Text.Lazy qualified as TL +import Data.Time qualified as Time +import Data.Typeable (Typeable) import GHC.Generics import Network.URI @@ -186,7 +189,7 @@ rebaseWith :: (Applicative m, Comonad w) => (a -> b) -> w a -> m b rebaseWith f = rebaseWithM $ pure . f {-# INLINE rebaseWith #-} -rebaseWithM :: (Applicative m, Comonad w) => (a -> m b) -> w a -> m b +rebaseWithM :: (Comonad w) => (a -> m b) -> w a -> m b rebaseWithM f = f . extract {-# INLINE rebaseWithM #-} @@ -311,3 +314,6 @@ instance MonadThrow H.Compiler where -- | Huh, I guess I need a version bump for this guy? instance A.FromJSON URI where parseJSON = A.withText "URI" $ maybe (fail "Invalid URI") pure . parseURI . toSL + +deriving instance Generic Time.Day +deriving newtype instance Binary Time.Day diff --git a/templates/default.html b/templates/default.html index dcb7da6..fde5f34 100644 --- a/templates/default.html +++ b/templates/default.html @@ -23,12 +23,12 @@ <!-- favicons --> <link rel="shortcut icon" href="/favicon.ico"> <link rel="icon" sizes="16x16 32x32 64x64" href="/favicon.ico"> - <link rel="icon" type="image/png" sizes="196x196" href="/img/favicon/favicon-192.png"> - <link rel="icon" type="image/png" sizes="160x160" href="/img/favicon/favicon-160.png"> - <link rel="icon" type="image/png" sizes="96x96" href="/img/favicon/favicon-96.png"> - <link rel="icon" type="image/png" sizes="64x64" href="/img/favicon/favicon-64.png"> - <link rel="icon" type="image/png" sizes="32x32" href="/img/favicon/favicon-32.png"> - <link rel="icon" type="image/png" sizes="16x16" href="/img/favicon/favicon-16.png"> + <link rel="icon" type="image/png" sizes="196x196" href="/favicon/favicon-192.png"> + <link rel="icon" type="image/png" sizes="160x160" href="/favicon/favicon-160.png"> + <link rel="icon" type="image/png" sizes="96x96" href="/favicon/favicon-96.png"> + <link rel="icon" type="image/png" sizes="64x64" href="/favicon/favicon-64.png"> + <link rel="icon" type="image/png" sizes="32x32" href="/favicon/favicon-32.png"> + <link rel="icon" type="image/png" sizes="16x16" href="/favicon/favicon-16.png"> </head> <body> @@ -38,6 +38,8 @@ <span class="pull-right"> <a href="/research"><i class="fa fa-book"></i> Research</a> <a href="/teaching"><i class="fa fa-chalkboard-teacher"></i> Teaching</a> + <a href="/links"><i class="fa fa-link"></i> Links</a> + <a href="/code"><i class="fa fa-code"></i> Code</a> <a href="/contact.html"><i class="fa fa-address-book"></i> Contact</a> <a href="/doc/cv.pdf"><i class="fa fa-file-alt"></i> CV</a> </span> diff --git a/www-main.cabal b/www-main.cabal index 9de4d60..6014569 100644 --- a/www-main.cabal +++ b/www-main.cabal @@ -1,6 +1,6 @@ cabal-version: 1.12 --- This file has been generated from package.yaml by hpack version 0.36.1. +-- This file has been generated from package.yaml by hpack version 0.38.2. -- -- see: https://github.com/sol/hpack @@ -14,6 +14,7 @@ build-type: Simple library exposed-modules: + Data.Abbr Data.Alias Data.Journal Data.License @@ -25,6 +26,7 @@ library Hakyll.Alias Hakyll.Core.Identifier.Pattorn Hakyll.Error + Hakyll.Paper Hakyll.Parsec Hakyll.TeX.BibTeX Hakyll.TeX.HaTeX @@ -45,6 +47,7 @@ library DeriveGeneric DeriveLift DerivingStrategies + DerivingVia DefaultSignatures FunctionalDependencies GADTs @@ -52,6 +55,7 @@ library MultiWayIf OverloadedStrings PatternSynonyms + RecordWildCards TypeFamilies UndecidableInstances ViewPatterns @@ -82,6 +86,7 @@ library , text , time , uri-encode + , witherable , yaml default-language: GHC2021 @@ -96,6 +101,7 @@ executable www-main DeriveGeneric DeriveLift DerivingStrategies + DerivingVia DefaultSignatures FunctionalDependencies GADTs @@ -103,6 +109,7 @@ executable www-main MultiWayIf OverloadedStrings PatternSynonyms + RecordWildCards TypeFamilies UndecidableInstances ViewPatterns diff --git a/www/code/index.html b/www/code/index.html new file mode 100644 index 0000000..2ebfdc0 --- /dev/null +++ b/www/code/index.html @@ -0,0 +1,30 @@ +--- +title: Code +short_title: Code +--- + +<p> + Below are links to various pieces of code that I've written. + I am far from a coder, so I don't claim to have anything much of interest here. +</p> + +<div class="bare"> + <table> + <tr> + <td><i class="fa-brands fa-git"></i></td> + <td><a href="https://git.mathematicaster.org/">Personal repos</a> (thanks to <a href="https://git.zx2c4.com/cgit/">cgit</a>)</td> + </tr> + <tr> + <td><i class="fa-brands fa-github"></i></td> + <td><a href="https://github.com/the-mathematicaster">GitHub</a></td> + </tr> + <tr> + <td><i class="fa-brands fa-gitlab"></i></td> + <td><a href="https://gitlab.com/mathematicaster">GitLab</a></td> + </tr> + <tr> + <td><i class="fa-brands fa-git-alt"></i></td> + <td><a href="https://codeberg.org/mathematicaster">CodeBerg</a></td> + </tr> + </table> +</div> diff --git a/www/credits/index.html b/www/credits/index.html new file mode 100644 index 0000000..6e013d7 --- /dev/null +++ b/www/credits/index.html @@ -0,0 +1,40 @@ +--- +title: Credits +title_short: Credits +math: True +--- + +<h1>Credits</h1> + +<p> +This website is possible thanks to some lovely projects: +</p> + +<div class="bare"> + <table> + <tr> + <td>Static site generator</td> + <td><a href="https://hackage.haskell.org/package/hakyll">hakyll</a></td> + </tr> + <tr> + <td>$$\LaTeX$$ typesetting</td> + <td><a href="https://katex.org/">$$\KaTeX$$</a></td> + </tr> + <tr> + <td>Color scheme</td> + <td><a href="https://github.com/morhetz/gruvbox">gruvbox</a></td> + </tr> + <tr> + <td>Fonts</td> + <td><a href="https://github.com/mozilla/Fira">FiraSans</a> and <a href="https://github.com/tonsky/FiraCode">FiraCode</a></td> + </tr> + <tr> + <td>Icons</td> + <td><a href="https://fontawesome.com/">Font Awesome</a></td> + </tr> + </table> +</div> + +<p> +I'm happy to share the code used to generate this webpage with anyone who's interested — simply send me an email. +</p> diff --git a/www/credits/index.md b/www/credits/index.md deleted file mode 100644 index 6c7fb44..0000000 --- a/www/credits/index.md +++ /dev/null @@ -1,19 +0,0 @@ ---- -title: Credits -title_short: Credits -math: True ---- - -# Credits - -This website is possible thanks to some lovely projects: - -<ul> - <li>Static site generator: <a href="https://hackage.haskell.org/package/hakyll">hakyll</a></li> - <li>$$\LaTeX$$ typesetting: <a href="https://katex.org/">$$\KaTeX$$</a></li> - <li>Color scheme: <a href="https://github.com/morhetz/gruvbox">gruvbox</a></li> - <li>Fonts: <a href="https://github.com/mozilla/Fira">FiraSans</a> and <a href="https://github.com/tonsky/FiraCode">FiraCode</a></li> - <li>Icons: <a href="https://fontawesome.com/">Font Awesome</a></li> -</ul> - -I'm happy to share the code used to generate this webpage with anyone who's interested — simply send me an email. diff --git a/www/index.html b/www/index.html new file mode 100644 index 0000000..9e1a223 --- /dev/null +++ b/www/index.html @@ -0,0 +1,20 @@ +--- +title: Chris Wells +short_title: Chris Wells +--- + +<h1>Chris Wells</h1> + +<p>(The mathematician formerly known as Chris Cox)</p> + +<p> + I'm currently a postdoc working with the discrete math group at <a href="https://math.auburn.edu">Auburn University</a>. + Previously, I completed an RTG postdoc at <a href="https://math.iastate.edu">Iowa State University</a>. + I obtained a PhD in Algorithms, Combinatorics and Optimization (ACO) from <a href="https://math.cmu.edu">Carnegie Mellon University</a> under the guidance of $personA("Boris Bukh")$. + My research focuses on the interplay between probabilistic, algebraic and geometric tools in extremal combinatorics, but I find all areas of math to be beautiful. + To anyone who wants to know more about what I do, I recommend watching <a href="https://www.youtube.com/watch?v=w0i_ZFlGTVY">this video</a>. +</p> + +<p> + <b>mathematicaster (n):</b> A minor or incompetent mathematician. +</p> diff --git a/www/research/index.html b/www/research/index.html index e52ab4b..1fcf99f 100644 --- a/www/research/index.html +++ b/www/research/index.html @@ -1,5 +1,60 @@ +--- +title: Publications +short_title: Publications +--- <h1>Publications</h1> $for(papers)$ -$partial("templates/paper.html")$ +<div class="paper"> + <div class="paper-title"> + $if(doi)$ + <a href="$doi$">$title$</a> + $else$ + $title$ + $endif$ + </div> + <div class="paper-authors"> + <ul> + $for(authors)$ + <li>$personA(name)$</li> + $endfor$ + </ul> + </div> + $if(abstract)$ + <div class="paper-abstract"> + <div id="$key$-abstract" style="display:none;"> + $abstract$ + </div> + </div> + $endif$ + <div class="paper-foot"> + <ul> + $for(eprints)$ + <li><a href="$eprint$">$eprintName$</a></li> + $endfor$ + $if(doi)$ + <li><a href="$doi$">doi</a></li> + $endif$ + $if(extra)$ + <li><a href="$extra$">extra</a></li> + $endif$ + $if(journal)$ + <li>$journalA(journal)$</li> + $endif$ + $if(accepted)$ + <li>Accepted</li> + $endif$ + $if(submitted)$ + <li>Submitted</li> + $endif$ + $if(unpublished)$ + <li>Unpublished</li> + $endif$ + <li>$date$</li> + $if(abstract)$ + <button class="abstract-button" style="float:right" onclick="toggle('$key$-abstract');">Abstract</button> + $endif$ + </ul> + </div> +</div> $endfor$ diff --git a/www/research/invturan/index.md b/www/research/invturan/index.md index 7a42e33..0d1a685 100644 --- a/www/research/invturan/index.md +++ b/www/research/invturan/index.md @@ -1,6 +1,9 @@ +--- math: True +title: Inverting the Turán problem +short_title: Inverse Turán --- -# Inverting the Turan problem +# Inverting the Turán problem [inverse-turan_omitted.pdf](./inverse-turn_omitted.pdf) contains the details of the classification of the extremal graphs for $\mathcal{E}_{P_3}(k)$ and $\mathcal{E}_{\{P_3,K_3\}}(k)$. diff --git a/www/research/poramsey/index.md b/www/research/poramsey/index.md index 5de48ab..5f851f7 100644 --- a/www/research/poramsey/index.md +++ b/www/research/poramsey/index.md @@ -1,3 +1,7 @@ +--- +title: Ramsey numbers for partially-ordered sets +short_title: Poset Ramsey +--- # Ramsey numbers for partially-ordered sets [bramsey-smt2.sws](./bramsey-smt2.sws) is a $link(sage)$ worksheet that generates SMT2 files for the satisfiability problem concerning 2-color Boolean Ramsey numbers diff --git a/www/teaching/index.md b/www/teaching/index.md index 872b2fd..029d503 100644 --- a/www/teaching/index.md +++ b/www/teaching/index.md @@ -1,72 +1,104 @@ +--- +title: Teaching +short_title: Teaching +--- If a course listed here doesn't have a link, then the course was administered through Canvas. ## Auburn University (2023--Present) +Spring 2026 + +- **MATH 1120-130: Precalculus** + +Fall 2025 + +- **MATH 2660-110: Topics in Linear Algebra** + Spring 2025 -* **[MATH 7750-120: Advanced Topics in Graph Theory (Probabilistic Methods)](/teaching/advgraphs2025)** + +- **[MATH 7750-120: Advanced Topics in Graph Theory (Probabilistic Methods)](/teaching/advgraphs2025)** Fall 2024 -* **MATH 1150-080: Precalculus, Algebra and Trigonometry** + +- **MATH 1150-080: Precalculus, Algebra and Trigonometry** Fall 2023 -* **MATH 1120-120: Precalculus** + +- **MATH 1120-120: Precalculus** ## Iowa State University (2020--2023) Spring 2023 -* **Math 165: Calculus I** + +- **Math 165: Calculus I** Fall 2022 -* **[Math 595: Longest Common Subsequences (graduate research seminar)](/teaching/lcs22)** -* **Math 165: Calculus I** + +- **[Math 595: Longest Common Subsequences (graduate research seminar)](/teaching/lcs22)** +- **Math 165: Calculus I** Spring 2022 -* **[Math 595: Algebraic Methods in Combinatorics](/teaching/algmethods22)** -* **[Math 314: Graph Theory](/teaching/graphs2022)** + +- **[Math 595: Algebraic Methods in Combinatorics](/teaching/algmethods22)** +- **[Math 314: Graph Theory](/teaching/graphs2022)** Fall 2021 -* **Math 267: Elementary Differential Equations and Laplace Transforms** (TA for $personA("Steve Butler")$) + +- **Math 267: Elementary Differential Equations and Laplace Transforms** (TA for $personA("Steve Butler")$) Spring 2021 -* **[Math 165: Calculus I](/teaching/calcI21)** + +- **[Math 165: Calculus I](/teaching/calcI21)** Fall 2020 -* **Math 595: Edit Distance in Graphs (early graduate research seminar)** -* **Math 267: Elementary Differential Equations and Laplace Transforms** (TA for $personA("Steve Butler")$) + +- **Math 595: Edit Distance in Graphs (early graduate research seminar)** +- **Math 267: Elementary Differential Equations and Laplace Transforms** (TA for $personA("Steve Butler")$) ## Carnegie Mellon University (2015--2020) Spring 2020 -* **[21-228: Discrete Mathematics](/teaching/discrete20)** (TA for Tom Bohman) + +- **[21-228: Discrete Mathematics](/teaching/discrete20)** (TA for Tom Bohman) Summer 2019 -* **[21-241: Matrices and Linear Transformations](/teaching/matrices2019)** + +- **[21-241: Matrices and Linear Transformations](/teaching/matrices2019)** Fall 2018 -* **[21-237: Mathematical Studies Algebra I](http://www.borisbukh.org/MathStudiesAlgebra1819)** (TA for $personA("Boris Bukh")$) + +- **[21-237: Mathematical Studies Algebra I](http://www.borisbukh.org/MathStudiesAlgebra1819)** (TA for $personA("Boris Bukh")$) Fall 2017 -* **21-242: Matrix Theory** (TA for $personA("Agoston Pisztora")$) + +- **21-242: Matrix Theory** (TA for $personA("Agoston Pisztora")$) Summer 2017 -* **[21-127: Concepts of Mathematics](/teaching/concepts2017)** + +- **[21-127: Concepts of Mathematics](/teaching/concepts2017)** Spring 2017 -* **[21-268: Multidimensional Calculus](http://www.math.cmu.edu/~ldietric/21-268)** (TA for $personA("Laurent Dietric")$) + +- **[21-268: Multidimensional Calculus](http://www.math.cmu.edu/~ldietric/21-268)** (TA for $personA("Laurent Dietric")$) Summer 2016 -* **21-115: Calculus I** for [SAMS](https://www.cmu.edu/pre-college/academic-programs/sams.html) + +- **21-115: Calculus I** for [SAMS](https://www.cmu.edu/pre-college/academic-programs/sams.html) Spring 2016 -* **[21-228: Discrete Mathematics](/teaching/discrete2016**) (TA for $personA("Tom Bohman")$) + +- **[21-228: Discrete Mathematics](/teaching/discrete2016**) (TA for $personA("Tom Bohman")$) Fall 2015 -* **21-127: Concepts of Mathematics** (TA for $personA("Irina Gheorghiciuc")$) + +- **21-127: Concepts of Mathematics** (TA for $personA("Irina Gheorghiciuc")$) ## Iowa State University (2014--2015) Spring 2015 -* **Math 267: Elementary Differential Equations and Laplace Transforms** (TA for $personA("Miriam Castillo-Gil")$) + +- **Math 267: Elementary Differential Equations and Laplace Transforms** (TA for $personA("Miriam Castillo-Gil")$) Fall 2014 -* **Math 165: Calculus I** (TA for $personA("Heather Bolles")$) + +- **Math 165: Calculus I** (TA for $personA("Heather Bolles")$) |
