From 719faa673492784a7cb799edd105d959e0aefbd0 Mon Sep 17 00:00:00 2001 From: HaudinFlorence Date: Thu, 13 Jun 2024 15:57:08 +0200 Subject: [PATCH] Use the script yml-to-json.ts in /src/components/blog to produce a .json from the _config.yml including necessary modifications on the blog posts informations in particular on image widths. --- .docusaurus/client-manifest.json | 748 ++++++++--- .../p/quantstack-github-io-blog-6c4.json | 1 + ...quantstack-github-io-blog-archive-38a.json | 1 + .../default/site-blog-conda-forge-md-f7e.json | 14 + .../site-blog-conda-forge-mdx-b00.json | 14 + package-lock.json | 6 +- src/components/blog/BlogpostCard.tsx | 49 +- src/components/blog/_config.yml | 7 + src/components/blog/blogpostsDetails.json | 1162 +++++++++++++++++ src/components/blog/blogpostsDetails.ts | 282 ---- src/components/blog/index.tsx | 16 +- src/components/blog/styles.module.css | 5 + src/components/blog/yml-to-json.ts | 53 + src/components/home/News/index.tsx | 18 +- src/pages/blog.tsx | 3 +- src/pages/blogs/Fanny.tsx | 3 +- tsconfig.json | 5 +- 17 files changed, 1889 insertions(+), 498 deletions(-) create mode 100644 .docusaurus/docusaurus-plugin-content-blog/default/p/quantstack-github-io-blog-6c4.json create mode 100644 .docusaurus/docusaurus-plugin-content-blog/default/p/quantstack-github-io-blog-archive-38a.json create mode 100644 .docusaurus/docusaurus-plugin-content-blog/default/site-blog-conda-forge-md-f7e.json create mode 100644 .docusaurus/docusaurus-plugin-content-blog/default/site-blog-conda-forge-mdx-b00.json create mode 100644 src/components/blog/blogpostsDetails.json delete mode 100644 src/components/blog/blogpostsDetails.ts create mode 100644 src/components/blog/yml-to-json.ts diff --git a/.docusaurus/client-manifest.json b/.docusaurus/client-manifest.json index 81b22eba3..c49e0bcac 100644 --- a/.docusaurus/client-manifest.json +++ b/.docusaurus/client-manifest.json @@ -3,403 +3,753 @@ "main" ], "origins": { - "237": [ - 237 + "2237": [ + 2237 ], - "356": [ - 327, - 869, - 356 + "3652": [ + 1869, + 4583, + 5928, + 3652 ], - "652": [ - 583, - 869, - 928, - 652 + "8356": [ + 1869, + 7327, + 8356 ], "17896441": [ - 869, - 401 + 1869, + 8401 + ], + "27480011": [ + 1869, + 1200 + ], + "29076868": [ + 1869, + 3795 ], "61809400": [ - 356, - 869, - 327 + 1869, + 8356, + 7327 ], "main": [ - 354, - 869, - 792 + 1869, + 5354, + 8792 ], "runtime~main": [ - 792, - 869, - 354 + 1869, + 8792, + 5354 + ], + "0e141341": [ + 1869, + 5336 ], "0e384e19": [ - 976 + 3976 ], "12709bdf": [ - 828 + 1828 ], "151add9d": [ - 652, - 869, - 928 + 1869, + 3652, + 5928 ], "1771d067": [ - 869, - 750 + 1869, + 4750 ], "1b02ca2e": [ - 869, - 687 + 1869, + 1687 + ], + "1b2674fc": [ + 1869, + 1646 ], "1df93b7f": [ - 652, - 869, - 583 + 1869, + 3652, + 4583 + ], + "264daa71": [ + 1869, + 8189 + ], + "2970f0ad": [ + 1869, + 5528 + ], + "356f1bd2": [ + 1869, + 1664 + ], + "36ba1237": [ + 1869, + 6616 ], "3e30bf86": [ - 869, - 300 + 1869, + 9300 ], "4e15f844": [ - 869, - 30 + 1869, + 2030 + ], + "55196a89": [ + 1869, + 9333 + ], + "5c3b1a75": [ + 1869, + 5842 ], "5e95c892": [ - 647 + 9647 + ], + "6246d94b": [ + 1869, + 9722 ], "65d0b86c": [ - 869, - 431 + 1869, + 6431 + ], + "6887af55": [ + 1869, + 1093 ], "8a46d643": [ - 869, - 569 + 1869, + 5569 ], "8b3a140c": [ - 869, - 101 + 1869, + 6101 + ], + "9062125b": [ + 1869, + 8212 + ], + "926aebc8": [ + 1869, + 2573 + ], + "9574930b": [ + 1869, + 4114 ], "9ba2902f": [ - 869, - 536 + 1869, + 6536 + ], + "a220fabc": [ + 1869, + 6250 + ], + "a60d50e7": [ + 1869, + 7577 ], "a7456010": [ - 235 + 1235 ], "a7bd4aaa": [ - 98 + 7098 ], "a8f03678": [ - 869, - 64 + 1869, + 9064 ], "a94703ab": [ - 869, - 48 + 1869, + 9048 ], "aba21aa0": [ - 742 + 5742 + ], + "b1937acd": [ + 1869, + 2061 + ], + "b324f945": [ + 1869, + 8630 + ], + "b4de01b5": [ + 1869, + 1270 + ], + "bd8f304f": [ + 1869, + 848 ], "cd1c0009": [ - 869, - 59 + 1869, + 4059 + ], + "cde21fe1": [ + 1869, + 3712 + ], + "d352b0bc": [ + 1869, + 2574 ], "e45f3345": [ - 869, - 70 + 1869, + 3070 ], "f18f98c8": [ - 869, - 0 + 1869, + 2000 + ], + "f676ddc6": [ + 1869, + 9079 + ], + "f71871fc": [ + 1869, + 3496 ], "styles": [ - 0, - 30, - 48, - 59, - 64, - 70, - 101, - 300, - 327, - 354, - 356, - 401, - 431, - 536, - 569, - 583, - 652, - 687, - 750, - 792, - 928, - 869 + 848, + 1093, + 1200, + 1270, + 1646, + 1664, + 1687, + 2000, + 2030, + 2061, + 2573, + 2574, + 3070, + 3496, + 3652, + 3712, + 3795, + 4059, + 4114, + 4583, + 4750, + 5336, + 5354, + 5528, + 5569, + 5842, + 5928, + 6101, + 6250, + 6431, + 6536, + 6616, + 7327, + 7577, + 8189, + 8212, + 8356, + 8401, + 8630, + 8792, + 9048, + 9064, + 9079, + 9300, + 9333, + 9722, + 1869 ] }, "assets": { - "0": { + "848": { "js": [ { - "file": "assets/js/f18f98c8.77967994.js", - "hash": "2b14f1508b1bea7d", - "publicPath": "/quantstack.github.io/assets/js/f18f98c8.77967994.js" + "file": "assets/js/bd8f304f.1fc37f65.js", + "hash": "28c04e680b4f5672", + "publicPath": "/quantstack.github.io/assets/js/bd8f304f.1fc37f65.js" } ] }, - "30": { + "1093": { "js": [ { - "file": "assets/js/4e15f844.35d8837e.js", - "hash": "dc9a476bbae6ecaf", - "publicPath": "/quantstack.github.io/assets/js/4e15f844.35d8837e.js" + "file": "assets/js/6887af55.5a9df0a3.js", + "hash": "f435eaa688c42691", + "publicPath": "/quantstack.github.io/assets/js/6887af55.5a9df0a3.js" } ] }, - "48": { + "1200": { "js": [ { - "file": "assets/js/a94703ab.e1d1bc11.js", - "hash": "3e71d23b5badcc3e", - "publicPath": "/quantstack.github.io/assets/js/a94703ab.e1d1bc11.js" + "file": "assets/js/27480011.f1f175fd.js", + "hash": "637b84959585e095", + "publicPath": "/quantstack.github.io/assets/js/27480011.f1f175fd.js" } ] }, - "59": { + "1235": { "js": [ { - "file": "assets/js/cd1c0009.29b7af9d.js", - "hash": "51a234e158e3cfd1", - "publicPath": "/quantstack.github.io/assets/js/cd1c0009.29b7af9d.js" + "file": "assets/js/a7456010.5c3adceb.js", + "hash": "c737fbbc00e6aade", + "publicPath": "/quantstack.github.io/assets/js/a7456010.5c3adceb.js" } ] }, - "64": { + "1270": { "js": [ { - "file": "assets/js/a8f03678.ffd92672.js", - "hash": "4950efcd92d3692e", - "publicPath": "/quantstack.github.io/assets/js/a8f03678.ffd92672.js" + "file": "assets/js/b4de01b5.8a6272ba.js", + "hash": "b62176b53a218839", + "publicPath": "/quantstack.github.io/assets/js/b4de01b5.8a6272ba.js" } ] }, - "70": { + "1646": { "js": [ { - "file": "assets/js/e45f3345.13915495.js", - "hash": "e563c78a5aa2f307", - "publicPath": "/quantstack.github.io/assets/js/e45f3345.13915495.js" + "file": "assets/js/1b2674fc.f35cca8e.js", + "hash": "a5a10478d5447ae6", + "publicPath": "/quantstack.github.io/assets/js/1b2674fc.f35cca8e.js" } ] }, - "98": { + "1664": { "js": [ { - "file": "assets/js/a7bd4aaa.1ea160fc.js", - "hash": "4b91a54a93eb8881", - "publicPath": "/quantstack.github.io/assets/js/a7bd4aaa.1ea160fc.js" + "file": "assets/js/356f1bd2.882dbab4.js", + "hash": "c6dd38ff2de7c6a7", + "publicPath": "/quantstack.github.io/assets/js/356f1bd2.882dbab4.js" } ] }, - "101": { + "1687": { "js": [ { - "file": "assets/js/8b3a140c.1ca30b73.js", - "hash": "9a22d009fd15b10d", - "publicPath": "/quantstack.github.io/assets/js/8b3a140c.1ca30b73.js" + "file": "assets/js/1b02ca2e.7b0631bb.js", + "hash": "f5420a12101864dc", + "publicPath": "/quantstack.github.io/assets/js/1b02ca2e.7b0631bb.js" } ] }, - "235": { + "1828": { "js": [ { - "file": "assets/js/a7456010.acd8a1d6.js", - "hash": "dd39214fbd1d36c4", - "publicPath": "/quantstack.github.io/assets/js/a7456010.acd8a1d6.js" + "file": "assets/js/12709bdf.1b7dc827.js", + "hash": "cc6a32ab07dd8b60", + "publicPath": "/quantstack.github.io/assets/js/12709bdf.1b7dc827.js" } ] }, - "237": { + "1869": { + "css": [ + { + "file": "assets/css/styles.93a1f9d7.css", + "hash": "d522830beb12bd33", + "publicPath": "/quantstack.github.io/assets/css/styles.93a1f9d7.css" + } + ] + }, + "2000": { "js": [ { - "file": "assets/js/237.8178a483.js", - "hash": "e75acf29e172a08c", - "publicPath": "/quantstack.github.io/assets/js/237.8178a483.js" + "file": "assets/js/f18f98c8.2bbe5517.js", + "hash": "1b96ea7cb4e99a69", + "publicPath": "/quantstack.github.io/assets/js/f18f98c8.2bbe5517.js" } ] }, - "300": { + "2030": { "js": [ { - "file": "assets/js/3e30bf86.78492b0f.js", - "hash": "bfcbfd680899f6b5", - "publicPath": "/quantstack.github.io/assets/js/3e30bf86.78492b0f.js" + "file": "assets/js/4e15f844.54aec263.js", + "hash": "3a19f03f5285b78a", + "publicPath": "/quantstack.github.io/assets/js/4e15f844.54aec263.js" } ] }, - "327": { + "2061": { "js": [ { - "file": "assets/js/61809400.7600d35d.js", - "hash": "3159cfa186d0e782", - "publicPath": "/quantstack.github.io/assets/js/61809400.7600d35d.js" + "file": "assets/js/b1937acd.ff5383f2.js", + "hash": "98beefcd2f39c4b5", + "publicPath": "/quantstack.github.io/assets/js/b1937acd.ff5383f2.js" } ] }, - "354": { + "2237": { "js": [ { - "file": "assets/js/runtime~main.cf19c418.js", - "hash": "2b5b28fd8a7fab9f", - "publicPath": "/quantstack.github.io/assets/js/runtime~main.cf19c418.js" + "file": "assets/js/2237.88f35e6d.js", + "hash": "2df698518d61285c", + "publicPath": "/quantstack.github.io/assets/js/2237.88f35e6d.js" } ] }, - "356": { + "2573": { "js": [ { - "file": "assets/js/356.491af5cb.js", - "hash": "0b7032830b60d624", - "publicPath": "/quantstack.github.io/assets/js/356.491af5cb.js" + "file": "assets/js/926aebc8.2532af2d.js", + "hash": "d4f257e49402f534", + "publicPath": "/quantstack.github.io/assets/js/926aebc8.2532af2d.js" } ] }, - "401": { + "2574": { "js": [ { - "file": "assets/js/17896441.6d0723ba.js", - "hash": "7d760cf4098a5e32", - "publicPath": "/quantstack.github.io/assets/js/17896441.6d0723ba.js" + "file": "assets/js/d352b0bc.0f6a7c64.js", + "hash": "977f6e2b63ca3093", + "publicPath": "/quantstack.github.io/assets/js/d352b0bc.0f6a7c64.js" } ] }, - "431": { + "3070": { "js": [ { - "file": "assets/js/65d0b86c.bdcaec2d.js", - "hash": "efe6b06a75b63548", - "publicPath": "/quantstack.github.io/assets/js/65d0b86c.bdcaec2d.js" + "file": "assets/js/e45f3345.e7a917eb.js", + "hash": "3972a6f3e0b30c56", + "publicPath": "/quantstack.github.io/assets/js/e45f3345.e7a917eb.js" } ] }, - "536": { + "3496": { "js": [ { - "file": "assets/js/9ba2902f.edd8ce6c.js", - "hash": "819a824a3ec2d5af", - "publicPath": "/quantstack.github.io/assets/js/9ba2902f.edd8ce6c.js" + "file": "assets/js/f71871fc.4190e066.js", + "hash": "06a4cd0022f31f49", + "publicPath": "/quantstack.github.io/assets/js/f71871fc.4190e066.js" } ] }, - "569": { + "3652": { "js": [ { - "file": "assets/js/8a46d643.89abee3c.js", - "hash": "43f2f735629793cd", - "publicPath": "/quantstack.github.io/assets/js/8a46d643.89abee3c.js" + "file": "assets/js/3652.b9891703.js", + "hash": "a4b341417b3e0bac", + "publicPath": "/quantstack.github.io/assets/js/3652.b9891703.js" } ] }, - "583": { + "3712": { "js": [ { - "file": "assets/js/1df93b7f.2490b578.js", - "hash": "424ff4345c6fa446", - "publicPath": "/quantstack.github.io/assets/js/1df93b7f.2490b578.js" + "file": "assets/js/cde21fe1.5206c1b9.js", + "hash": "8c1b9da7ae54dcc3", + "publicPath": "/quantstack.github.io/assets/js/cde21fe1.5206c1b9.js" } ] }, - "647": { + "3795": { "js": [ { - "file": "assets/js/5e95c892.adeff0fe.js", - "hash": "188b59aae5fd2674", - "publicPath": "/quantstack.github.io/assets/js/5e95c892.adeff0fe.js" + "file": "assets/js/29076868.33246616.js", + "hash": "96a7a233a065e24a", + "publicPath": "/quantstack.github.io/assets/js/29076868.33246616.js" } ] }, - "652": { + "3976": { "js": [ { - "file": "assets/js/652.696837d7.js", - "hash": "8f8286556fc21135", - "publicPath": "/quantstack.github.io/assets/js/652.696837d7.js" + "file": "assets/js/0e384e19.a186f6a6.js", + "hash": "58e267537a23f60d", + "publicPath": "/quantstack.github.io/assets/js/0e384e19.a186f6a6.js" } ] }, - "687": { + "4059": { "js": [ { - "file": "assets/js/1b02ca2e.b66b095a.js", - "hash": "61322ca6bffd5cfd", - "publicPath": "/quantstack.github.io/assets/js/1b02ca2e.b66b095a.js" + "file": "assets/js/cd1c0009.eeaf71ae.js", + "hash": "806fa3f64537ccfe", + "publicPath": "/quantstack.github.io/assets/js/cd1c0009.eeaf71ae.js" } ] }, - "742": { + "4114": { "js": [ { - "file": "assets/js/aba21aa0.94eb63b7.js", - "hash": "30160337aea59bc5", - "publicPath": "/quantstack.github.io/assets/js/aba21aa0.94eb63b7.js" + "file": "assets/js/9574930b.534ec9a0.js", + "hash": "1de0f6f2df1fd612", + "publicPath": "/quantstack.github.io/assets/js/9574930b.534ec9a0.js" } ] }, - "750": { + "4583": { "js": [ { - "file": "assets/js/1771d067.9cd519e0.js", - "hash": "b75474dac169653d", - "publicPath": "/quantstack.github.io/assets/js/1771d067.9cd519e0.js" + "file": "assets/js/1df93b7f.658dc19e.js", + "hash": "92d21d0e36b2ff2c", + "publicPath": "/quantstack.github.io/assets/js/1df93b7f.658dc19e.js" } ] }, - "792": { + "4750": { "js": [ { - "file": "assets/js/main.fdb87036.js", - "hash": "7e5795a9dd5b1a94", - "publicPath": "/quantstack.github.io/assets/js/main.fdb87036.js" + "file": "assets/js/1771d067.84ffedbb.js", + "hash": "e6be1d64c825a1af", + "publicPath": "/quantstack.github.io/assets/js/1771d067.84ffedbb.js" } ] }, - "828": { + "5336": { "js": [ { - "file": "assets/js/12709bdf.cda2979d.js", - "hash": "7317a307346d8fbb", - "publicPath": "/quantstack.github.io/assets/js/12709bdf.cda2979d.js" + "file": "assets/js/0e141341.9700ea62.js", + "hash": "fee8c807794e64fe", + "publicPath": "/quantstack.github.io/assets/js/0e141341.9700ea62.js" } ] }, - "869": { - "css": [ + "5354": { + "js": [ + { + "file": "assets/js/runtime~main.1566cc93.js", + "hash": "35a60865b3fa23f2", + "publicPath": "/quantstack.github.io/assets/js/runtime~main.1566cc93.js" + } + ] + }, + "5528": { + "js": [ + { + "file": "assets/js/2970f0ad.7740b72b.js", + "hash": "e8f17c03fa4598ec", + "publicPath": "/quantstack.github.io/assets/js/2970f0ad.7740b72b.js" + } + ] + }, + "5569": { + "js": [ + { + "file": "assets/js/8a46d643.9c32646f.js", + "hash": "a4b4c3891cb82857", + "publicPath": "/quantstack.github.io/assets/js/8a46d643.9c32646f.js" + } + ] + }, + "5742": { + "js": [ + { + "file": "assets/js/aba21aa0.48778d7f.js", + "hash": "b211fd4b0cf20136", + "publicPath": "/quantstack.github.io/assets/js/aba21aa0.48778d7f.js" + } + ] + }, + "5842": { + "js": [ + { + "file": "assets/js/5c3b1a75.729a5b03.js", + "hash": "f054a5ff0b4eb0ae", + "publicPath": "/quantstack.github.io/assets/js/5c3b1a75.729a5b03.js" + } + ] + }, + "5928": { + "js": [ + { + "file": "assets/js/151add9d.b810e428.js", + "hash": "80f36a86b731e24f", + "publicPath": "/quantstack.github.io/assets/js/151add9d.b810e428.js" + } + ] + }, + "6101": { + "js": [ + { + "file": "assets/js/8b3a140c.5265ffa3.js", + "hash": "127b6c1b6fcdaea9", + "publicPath": "/quantstack.github.io/assets/js/8b3a140c.5265ffa3.js" + } + ] + }, + "6250": { + "js": [ + { + "file": "assets/js/a220fabc.1494d69b.js", + "hash": "b3b8240e503d2cee", + "publicPath": "/quantstack.github.io/assets/js/a220fabc.1494d69b.js" + } + ] + }, + "6431": { + "js": [ + { + "file": "assets/js/65d0b86c.b1db7c49.js", + "hash": "22324a57a2ba346a", + "publicPath": "/quantstack.github.io/assets/js/65d0b86c.b1db7c49.js" + } + ] + }, + "6536": { + "js": [ + { + "file": "assets/js/9ba2902f.430b9a58.js", + "hash": "0482bf91d2350421", + "publicPath": "/quantstack.github.io/assets/js/9ba2902f.430b9a58.js" + } + ] + }, + "6616": { + "js": [ + { + "file": "assets/js/36ba1237.fcb4c282.js", + "hash": "b90b8f7280ef7a64", + "publicPath": "/quantstack.github.io/assets/js/36ba1237.fcb4c282.js" + } + ] + }, + "7098": { + "js": [ + { + "file": "assets/js/a7bd4aaa.cbcfc3dd.js", + "hash": "1495287d6d79f363", + "publicPath": "/quantstack.github.io/assets/js/a7bd4aaa.cbcfc3dd.js" + } + ] + }, + "7327": { + "js": [ + { + "file": "assets/js/61809400.d255adfa.js", + "hash": "67c01383a8969981", + "publicPath": "/quantstack.github.io/assets/js/61809400.d255adfa.js" + } + ] + }, + "7577": { + "js": [ + { + "file": "assets/js/a60d50e7.a6f0819c.js", + "hash": "8f75ccf0932a4ba6", + "publicPath": "/quantstack.github.io/assets/js/a60d50e7.a6f0819c.js" + } + ] + }, + "8189": { + "js": [ + { + "file": "assets/js/264daa71.ea6e3c5b.js", + "hash": "9155803875fe92b1", + "publicPath": "/quantstack.github.io/assets/js/264daa71.ea6e3c5b.js" + } + ] + }, + "8212": { + "js": [ + { + "file": "assets/js/9062125b.2a51d134.js", + "hash": "6494d0c625d166b4", + "publicPath": "/quantstack.github.io/assets/js/9062125b.2a51d134.js" + } + ] + }, + "8356": { + "js": [ + { + "file": "assets/js/8356.dbe55b91.js", + "hash": "5ad940555f702f18", + "publicPath": "/quantstack.github.io/assets/js/8356.dbe55b91.js" + } + ] + }, + "8401": { + "js": [ + { + "file": "assets/js/17896441.faf2b26d.js", + "hash": "ec317233b3286edb", + "publicPath": "/quantstack.github.io/assets/js/17896441.faf2b26d.js" + } + ] + }, + "8630": { + "js": [ + { + "file": "assets/js/b324f945.2870f152.js", + "hash": "df04d53f35243dc0", + "publicPath": "/quantstack.github.io/assets/js/b324f945.2870f152.js" + } + ] + }, + "8792": { + "js": [ + { + "file": "assets/js/main.c5e7ecda.js", + "hash": "c039cd4d70d41689", + "publicPath": "/quantstack.github.io/assets/js/main.c5e7ecda.js" + } + ] + }, + "9048": { + "js": [ + { + "file": "assets/js/a94703ab.bf9a3d12.js", + "hash": "e7e191868bbc2328", + "publicPath": "/quantstack.github.io/assets/js/a94703ab.bf9a3d12.js" + } + ] + }, + "9064": { + "js": [ + { + "file": "assets/js/a8f03678.869f1cff.js", + "hash": "b7f4af567308cadf", + "publicPath": "/quantstack.github.io/assets/js/a8f03678.869f1cff.js" + } + ] + }, + "9079": { + "js": [ + { + "file": "assets/js/f676ddc6.36631184.js", + "hash": "8607d82caa9b8b54", + "publicPath": "/quantstack.github.io/assets/js/f676ddc6.36631184.js" + } + ] + }, + "9300": { + "js": [ + { + "file": "assets/js/3e30bf86.5c7afcda.js", + "hash": "df79e103842c94c4", + "publicPath": "/quantstack.github.io/assets/js/3e30bf86.5c7afcda.js" + } + ] + }, + "9333": { + "js": [ { - "file": "assets/css/styles.dfb8e033.css", - "hash": "1f9c208b1c139e8c", - "publicPath": "/quantstack.github.io/assets/css/styles.dfb8e033.css" + "file": "assets/js/55196a89.bb5f2bc3.js", + "hash": "f7d218a1bc4592fa", + "publicPath": "/quantstack.github.io/assets/js/55196a89.bb5f2bc3.js" } ] }, - "928": { + "9647": { "js": [ { - "file": "assets/js/151add9d.60a1b74a.js", - "hash": "f91b10f822c65b2d", - "publicPath": "/quantstack.github.io/assets/js/151add9d.60a1b74a.js" + "file": "assets/js/5e95c892.e46c579f.js", + "hash": "5c45f5a780caa74f", + "publicPath": "/quantstack.github.io/assets/js/5e95c892.e46c579f.js" } ] }, - "976": { + "9722": { "js": [ { - "file": "assets/js/0e384e19.841c41eb.js", - "hash": "465724bc73945c2e", - "publicPath": "/quantstack.github.io/assets/js/0e384e19.841c41eb.js" + "file": "assets/js/6246d94b.38060b7a.js", + "hash": "6a019c58dfb274c6", + "publicPath": "/quantstack.github.io/assets/js/6246d94b.38060b7a.js" } ] } diff --git a/.docusaurus/docusaurus-plugin-content-blog/default/p/quantstack-github-io-blog-6c4.json b/.docusaurus/docusaurus-plugin-content-blog/default/p/quantstack-github-io-blog-6c4.json new file mode 100644 index 000000000..f8216eb9e --- /dev/null +++ b/.docusaurus/docusaurus-plugin-content-blog/default/p/quantstack-github-io-blog-6c4.json @@ -0,0 +1 @@ +{"metadata":{"permalink":"/quantstack.github.io/blog","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}} \ No newline at end of file diff --git a/.docusaurus/docusaurus-plugin-content-blog/default/p/quantstack-github-io-blog-archive-38a.json b/.docusaurus/docusaurus-plugin-content-blog/default/p/quantstack-github-io-blog-archive-38a.json new file mode 100644 index 000000000..c7abce69d --- /dev/null +++ b/.docusaurus/docusaurus-plugin-content-blog/default/p/quantstack-github-io-blog-archive-38a.json @@ -0,0 +1 @@ +{"archive":{"blogPosts":[{"id":"/CondaForge","metadata":{"permalink":"/quantstack.github.io/blog/CondaForge","editUrl":"https://github.com/facebook/docusaurus/tree/main/packages/create-docusaurus/templates/shared/blog/CondaForge.mdx","source":"@site/blog/CondaForge.mdx","title":"CondaForge","description":"QuantStack is one of the key organizations supporting the","date":"2024-06-13T09:41:00.645Z","tags":[],"readingTime":0.435,"hasTruncateMarker":false,"authors":[],"frontMatter":{},"unlisted":false},"content":"QuantStack is one of the key organizations supporting the\nconda-forge project, a community-led collection of recipes, build\ninfrastructure and distributions for the conda/mamba package\nmanager.\n\nAdopted at the global scale, conda-forge has become the reference\nsource of build artifacts for the scientific computing ecosystem,\naccounting for over 150 million package downloads monthly.\n\nQuantStack developed key components of the conda-forge\ninfrastructure, including the mamba package manager and the\nmamba-build utility, which underlie the build system of conda-forge.\nQuantStack team members also maintain a large number of conda-forge\npackages."}]}} \ No newline at end of file diff --git a/.docusaurus/docusaurus-plugin-content-blog/default/site-blog-conda-forge-md-f7e.json b/.docusaurus/docusaurus-plugin-content-blog/default/site-blog-conda-forge-md-f7e.json new file mode 100644 index 000000000..ddc9d01bb --- /dev/null +++ b/.docusaurus/docusaurus-plugin-content-blog/default/site-blog-conda-forge-md-f7e.json @@ -0,0 +1,14 @@ +{ + "permalink": "/quantstack.github.io/blog/CondaForge", + "editUrl": "https://github.com/facebook/docusaurus/tree/main/packages/create-docusaurus/templates/shared/blog/CondaForge.md", + "source": "@site/blog/CondaForge.md", + "title": "CondaForge", + "description": "QuantStack is one of the key organizations supporting the", + "date": "2024-06-13T09:41:00.645Z", + "tags": [], + "readingTime": 0.435, + "hasTruncateMarker": false, + "authors": [], + "frontMatter": {}, + "unlisted": false +} \ No newline at end of file diff --git a/.docusaurus/docusaurus-plugin-content-blog/default/site-blog-conda-forge-mdx-b00.json b/.docusaurus/docusaurus-plugin-content-blog/default/site-blog-conda-forge-mdx-b00.json new file mode 100644 index 000000000..cd2635a28 --- /dev/null +++ b/.docusaurus/docusaurus-plugin-content-blog/default/site-blog-conda-forge-mdx-b00.json @@ -0,0 +1,14 @@ +{ + "permalink": "/quantstack.github.io/blog/CondaForge", + "editUrl": "https://github.com/facebook/docusaurus/tree/main/packages/create-docusaurus/templates/shared/blog/CondaForge.mdx", + "source": "@site/blog/CondaForge.mdx", + "title": "CondaForge", + "description": "QuantStack is one of the key organizations supporting the", + "date": "2024-06-13T09:41:00.645Z", + "tags": [], + "readingTime": 0.435, + "hasTruncateMarker": false, + "authors": [], + "frontMatter": {}, + "unlisted": false +} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index feefee372..90324db4b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -6556,7 +6556,8 @@ }, "node_modules/fs": { "version": "0.0.1-security", - "license": "ISC" + "resolved": "https://registry.npmjs.org/fs/-/fs-0.0.1-security.tgz", + "integrity": "sha512-3XY9e1pP0CVEUCdj5BmfIZxRBTSDycnbqhIOGec9QYtmVH2fbLpj86CFWkrNOkt/Fvty4KZG5lTglL9j/gJ87w==" }, "node_modules/fs-extra": { "version": "11.2.0", @@ -7871,7 +7872,8 @@ }, "node_modules/js-yaml": { "version": "4.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dependencies": { "argparse": "^2.0.1" }, diff --git a/src/components/blog/BlogpostCard.tsx b/src/components/blog/BlogpostCard.tsx index 8faef8dec..9c1c1ec96 100644 --- a/src/components/blog/BlogpostCard.tsx +++ b/src/components/blog/BlogpostCard.tsx @@ -3,6 +3,7 @@ import React from "react"; import styles from "./styles.module.css"; import Link from "@docusaurus/Link"; +import useBaseUrl from '@docusaurus/useBaseUrl'; export function BlogpostPicture({ blogpost }) { return ( @@ -12,20 +13,63 @@ export function BlogpostPicture({ blogpost }) { ); } -export default function BlogpostCard({ blogpost }) { +export default function BlogpostCard({ blogpost, timeIndex }) { + if (blogpost.image.includes("https://")){ return (
+
{timeIndex}
+ +
+
+ +
+
+ +
{blogpost.title}
+ +
+ {blogpost.summary.length < 200 + ? blogpost.summary + : blogpost.summary.substring(0, 200) + "..."} +
+ +
+
+
{blogpost.date}
+
{blogpost.authors}
+
+
+
+ +
+ ); +} else if(blogpost.image.includes('/img/')) +{ + return ( +
+
{timeIndex}
+ +
+
+
- +
+
{blogpost.title}
@@ -48,3 +92,4 @@ export default function BlogpostCard({ blogpost }) {
); } +} diff --git a/src/components/blog/_config.yml b/src/components/blog/_config.yml index 4afbc3cdb..d5f14c181 100644 --- a/src/components/blog/_config.yml +++ b/src/components/blog/_config.yml @@ -5,6 +5,13 @@ copyright: blog: + - url: https://blog.jupyter.org/jupytergis-d63b7adf9d0c + title: "JupyterGIS" + image: https://miro.medium.com/v2/resize:fit:1400/format:webp/1*IkYCf2cbk3SaxaROQ0eUsA.png + summary: "We are thrilled to announce that the European Space Agency (ESA) is funding our proposal “Real-time collaboration and collaborative editing for GIS workflows with Jupyter and QGIS.”" + date: June 12, 2024 + authors: Sylvain Corlay, Anne Fouilloux, Monika Weissschnur + - url: https://medium.com/@SylvainCorlay/commit-cdf57415b94b title: "Commit!" image: https://miro.medium.com/v2/0*3gKzwBOWprSRs35k diff --git a/src/components/blog/blogpostsDetails.json b/src/components/blog/blogpostsDetails.json new file mode 100644 index 000000000..a633107a3 --- /dev/null +++ b/src/components/blog/blogpostsDetails.json @@ -0,0 +1,1162 @@ +[ + { + "url": "https://blog.jupyter.org/jupytergis-d63b7adf9d0c", + "title": "JupyterGIS", + "image": "https://miro.medium.com/v2/resize:fit:1400/format:webp/1*IkYCf2cbk3SaxaROQ0eUsA.png", + "summary": "We are thrilled to announce that the European Space Agency (ESA) is funding our proposal “Real-time collaboration and collaborative editing for GIS workflows with Jupyter and QGIS.”", + "date": "June 12, 2024", + "authors": "Sylvain Corlay, Anne Fouilloux, Monika Weissschnur", + "imageID": "blogpost-image-116", + "imageWidth": "270px" + }, + { + "url": "https://medium.com/@SylvainCorlay/commit-cdf57415b94b", + "title": "Commit!", + "image": "https://miro.medium.com/v2/0*3gKzwBOWprSRs35k", + "summary": "Open-source projects are not just about the latest exciting updates and features, but also the principles and people that drive these projects to success. In this blog post, I reflect on the dynamics…", + "date": "May 29, 2024", + "authors": "Sylvain Corlay", + "imageID": "blogpost-image-115", + "imageWidth": "270px" + }, + { + "url": "/blogs/Fanny", + "title": "In memoriam: Fanny Loustau-Chartez", + "image": "/img/avatars/Fanny.png", + "summary": "It is with great sadness that we announce the passing of our colleague and friend, Fanny Loustau Chartez, who served as the Chief Financial Officer of QuantStack since 2021.", + "date": "May 16, 2024", + "authors": "Sylvain Corlay", + "imageID": "blogpost-image-114", + "imageWidth": "180px" + }, + { + "url": "https://medium.com/@PyDataParis/announcing-pydata-paris-2024-700220accc72", + "title": "Announcing PyData Paris 2024", + "image": "https://miro.medium.com/v2/resize:fit:1100/format:webp/0*jYrq6Du7WpJDOTUf", + "summary": "We are thrilled to announce the upcoming PyData Paris 2024, the gathering of the open-source data science and AI/ML community in France. PyData Paris will take place at the Cité des Sciences from September 25 to September 26, 2024.", + "date": "March 11, 2024", + "authors": "Sylvain Corlay", + "imageID": "blogpost-image-113", + "imageWidth": "270px" + }, + { + "url": "https://blog.jupyter.org/meet-xeus-r-a-future-proof-jupyter-kernel-for-r-1adc5fdd09ab", + "title": "Meet Xeus-R: a future-proof Jupyter kernel for R", + "image": "https://miro.medium.com/v2/resize:fit:1400/format:webp/1*cFmKZKFycjvG1v_Xub4snQ.png", + "summary": "Today, we, a collaborative team led by Romain François and supported by QuantStack, are thrilled to announce the initial release of Xeus-R, a future-proof Jupyter kernel for R.", + "date": "January 22nd, 2024", + "authors": "Romain François", + "imageID": "blogpost-image-112", + "imageWidth": "300px" + }, + { + "url": "https://medium.com/@QuantStack/quantstack-2023-in-review-94fea0a35520", + "title": "QuantStack: 2023 in review", + "image": "https://miro.medium.com/v2/resize:fit:2000/format:webp/0*rwQcR7xvAIr_7pzY", + "summary": "Since QuantStack was founded in 2016, we have remained committed to releasing our work under permissive open-source licenses. Here are some highlights of the 2023 achievements. Buckle up!", + "date": "January 3rd, 2023", + "authors": "Sylvain Corlay", + "imageID": "blogpost-image-111", + "imageWidth": "270px" + }, + { + "url": "https://blog.jupyter.org/recent-keyboard-navigation-improvements-in-jupyter-4df32f97628d", + "title": "Recent keyboard navigation improvements in Jupyter", + "image": "https://upload.wikimedia.org/wikipedia/commons/thumb/5/5e/W3C_icon.svg/320px-W3C_icon.svg.png", + "summary": "Upcoming versions of JupyterLab (4.1.0) and Notebook (7.1.0) will include major keyboard accessibility fixes.", + "date": "December 16th, 2023", + "authors": "Nicolas Brichet, Gabriel Fouasnon", + "imageID": "blogpost-image-110", + "imageWidth": "180px" + }, + { + "url": "https://blog.jupyter.org/and-voici-e02367197ba2", + "title": "And Voici!", + "image": "https://miro.medium.com/v2/resize:fit:1400/format:webp/1*Tjh9IaZrdJhTQzxyIOgI8Q.png", + "summary": "Voici (meaning “here is” in French) is a novel project reshaping Jupyter-based interactive dashboards by combining Voilà and JupyterLite features. It facilitates the creation of dynamic, in-browser environments for data visualization and exploration.", + "date": "December 6th, 2023", + "authors": "Trung Duc Le, Martin Renou", + "imageID": "blogpost-image-109", + "imageWidth": "270px" + }, + { + "url": "https://blog.jupyter.org/plug-your-application-into-the-jupyter-world-805e48918801", + "title": "Plug your application into the Jupyter world", + "image": "https://miro.medium.com/v2/resize:fit:1400/format:webp/1*ENzq7i52UtqxESs4UTKBYw.png", + "summary": "Kernels are a simple but powerful abstraction in the Jupyter architecture. They encapsulate language interpreters and make them accessible through a standardized interface. This is the key to…", + "date": "October 23rd, 2023", + "authors": "David Brochart", + "imageID": "blogpost-image-108", + "imageWidth": "270px" + }, + { + "url": "https://blog.jupyter.org/voil%C3%A0-0-5-0-homecoming-66f2465aa86f", + "title": "Voilà 0.5 - Homecoming", + "image": "https://miro.medium.com/v2/resize:fit:4800/format:webp/1*W1dHdjWC0CYoLjCWXXxU2w.png", + "summary": "Following the launch of Jupyter Notebook 7, it is now Voilà’s turn to join the JupyterLab family. In Version 0.5.0, the front-end of Voilà has been rebuilt from scratch using JupyterLab 4.0 components, just like in the case of Notebook 7.", + "date": "September 25th, 2023", + "authors": "Jeremy Tuloup, Martin Renou, Trung Duc Le", + "imageID": "blogpost-image-107", + "imageWidth": "200px" + }, + { + "url": "https://blog.jupyter.org/announcing-jupyter-notebook-7-8d6d66126dcf", + "title": "Announcing Jupyter Notebook 7", + "image": "https://miro.medium.com/v2/resize:fit:1400/format:webp/0*1RXUtbuPrEJC95ut.jpg", + "summary": "Jupyter Notebook 7 is the most significant release of the Jupyter Notebook in years. Some highlights of this release include real-time collaboration, interactive debugging, table of contents, theming and dark mode, internationalization, improved accessibility, compact view on mobile devices.", + "date": "July 26th, 2023", + "authors": "Jeremy Tuloup", + "imageID": "blogpost-image-106", + "imageWidth": "270px" + }, + { + "url": "https://blog.jupyter.org/jupytercon-2023-recordings-now-live-on-youtube-17564b75a2a", + "title": "🎉 JupyterCon 2023 recordings now live on YouTube! 🎉", + "image": "https://miro.medium.com/v2/resize:fit:1400/format:webp/1*j0Cai6fnoYoJ-axQzIvpaA.png", + "summary": "Get ready to relive the magic of JupyterCon 2023, because the long-awaited moment is finally here! The JupyterCon YouTube channel has just dropped a treasure trove of content — all the talk and keynote recordings from the most epic conference of the year.", + "date": "July 22nd, 2023", + "authors": "Gayle Ollington, Sylvain Corlay", + "imageID": "blogpost-image-105", + "imageWidth": "270px" + }, + { + "url": "https://blog.jupyter.org/a-theme-editor-for-jupyterlab-8f08ab62894d", + "title": "A theme editor for JupyterLab", + "image": "https://miro.medium.com/v2/resize:fit:4800/format:webp/0*5OLBiA8tmTbD1Nan.png", + "summary": "To lower the bar for customizing JupyterLab we created a new tool providing a simple interface for tuning the JupyterLab appearance interactively.", + "date": "June 19th, 2023", + "authors": "Florence Haudin", + "imageID": "blogpost-image-104", + "imageWidth": "200px" + }, + { + "url": "https://blog.jupyter.org/collaborative-cad-in-jupyterlab-8eb9e8f81f0", + "title": "Collaborative CAD in JupyterLab", + "image": "https://miro.medium.com/v2/resize:fit:1400/format:webp/1*9r3Xz-v5wyuz8aAKY2WV-A.png", + "summary": "Introducing JupyterCAD, a tool that integrates Computer-Aided Design (CAD) capabilities into JupyterLab.", + "date": "June 2nd, 2023", + "authors": "Duc Trung Le, Martin Renou", + "imageID": "blogpost-image-103", + "imageWidth": "270px" + }, + { + "url": "https://blog.jupyter.org/congratulations-distinguished-contributors-7a7b215b8bd0", + "title": "Congratulations, Distinguished Contributors!", + "image": "https://miro.medium.com/v2/resize:fit:720/format:webp/1*awcttRVT1kQ1dWqJig7DWQ.jpeg", + "summary": "We are proud to announce the recipients of the Jupyter Distinguished Contributor (JDC) award for the 2022 cohort of contributors.", + "date": "June 2nd, 2023", + "authors": "Johan Mabille", + "imageID": "blogpost-image-102", + "imageWidth": "270px" + }, + { + "url": "https://blog.jupyter.org/embed-interactive-itkwidgets-3d-renderings-into-jupyterlite-deployments-10eb9ea30980", + "title": "Embed interactive itkwidgets 3D renderings into JupyterLite deployments", + "image": "https://miro.medium.com/v2/resize:fit:1100/0*_zowwA1kefuHdpEX.gif", + "summary": "A tutorial that demonstrates a zero-server, interactive 3D rendering notebook and walks through the quick and easy configuration that can be customized to your needs.", + "date": "March 15th, 2023", + "authors": "Matt McCormick, Brianna Major, Jeremy Tuloup, Wei Ouyang, Stephen Aylward", + "imageID": "blogpost-image-101", + "imageWidth": "180px" + }, + { + "url": "https://blog.jupyter.org/improving-the-accessibility-of-jupyter-6c695db518d3", + "title": "Improving the accessibility of Jupyter", + "image": "https://miro.medium.com/v2/resize:fit:4800/0*7imwXY7uST5QSNfi", + "summary": "This article presents some of the recent accessibility improvements in the Jupyter Notebook codebase.", + "date": "February 24th, 2023", + "authors": "Nicolas Brichet, Johan Mabille, Jeremy Tuloup, Frédéric Collonval, Sylvain Corlay", + "imageID": "blogpost-image-100", + "imageWidth": "270px" + }, + { + "url": "https://blog.jupyter.org/a-jupyter-kernel-for-gnu-octave-b6d29e56341f", + "title": "A Jupyter kernel for GNU Octave", + "image": "https://miro.medium.com/max/4800/0*_HZJpXD-awr4mPDG", + "summary": "We are happy to announce the xeus-octave project, a Jupyter kernel for GNU Octave. Xeus-octave was created by Giulio Girardi, recently joined by Antoine Prouvost - and has been incorporated into the Project Jupyter governance.", + "date": "January 11th, 2023", + "authors": "Giulio Girardi, Antoine Prouvost", + "imageID": "blogpost-image-99", + "imageWidth": "270px" + }, + { + "url": "https://medium.com/@QuantStack/quantstack-2022-in-review-7d4704b1db42", + "title": "QuantStack: 2022 in review", + "image": "https://miro.medium.com/max/1400/1*QnDNfCXtgb2vLbmmag9ngQ.webp", + "summary": "2022 was an amazing year of innovation for the open-source developers at QuantStack. Developments range from major improvements to the Jupyter project to the packaging ecosystem and high-performance computing.", + "date": "December 26th, 2022", + "authors": "Sylvain Corlay", + "imageID": "blogpost-image-98", + "imageWidth": "270px" + }, + { + "url": "https://medium.com/@AntoineProuvost/managing-conflicts-with-mamba-6a5fa10ed6a", + "title": "Managing conflicts with Mamba", + "image": "https://miro.medium.com/max/4800/1*4FgY6y9QfGLMO3qtim-zSw.png", + "summary": "A key aspect of package management is finding a set of compatible versions of the required packages. Indeed, even in the case when few packages are explicitly required, second-order dependencies may…", + "date": "November 29th, 2022", + "authors": "Antoine Prouvost", + "imageID": "blogpost-image-97", + "imageWidth": "270px" + }, + { + "url": "https://blog.jupyter.org/jupytercon-is-back-in-2023-90e5c25eeec9", + "title": "JupyterCon is back in 2023", + "image": "https://miro.medium.com/max/1400/1*Mn75xGD3GWU0tpI7Rx9utQ.png", + "summary": "JupyterCon 2023 will be held May 10–12 (Thursday to Friday) in the city of light, Paris, France at the largest science museum in Europe, the Cité des Sciences et de l’Industrie.", + "date": "October 17th, 2022", + "authors": "Gayle Ollington", + "imageID": "blogpost-image-96", + "imageWidth": "270px" + }, + { + "url": "https://blog.jupyter.org/accelerating-jupyterlab-68942bb8d602", + "title": "Accelerating JupyterLab", + "image": "https://miro.medium.com/max/1400/1*EZX55-XLmck_LfFfV3KeaA.png", + "summary": "The next major release of JupyterLab will be significantly faster than previous versions. This was achieved both through systematic tracking of performance bugs and through significant upgrades to the Jupyter communication protocol and rendering mechanism for documents.", + "date": "September 15th, 2022", + "authors": "Frédéric Collonval, Johan Mabille, David Brochart, Afshin Darian", + "imageID": "blogpost-image-95", + "imageWidth": "270px" + }, + { + "url": "https://blog.jupyter.org/upgrading-nbgrader-99c56ae56c47", + "title": "Upgrading nbgrader", + "image": "https://miro.medium.com/max/922/1*C1fPJUhN8pk86GIXCQq5AA.png", + "summary": "Project Jupyter provides a broad collection of open-source tools for interactive computing that has become ubiquitous in data science and scientific computing, and is very popular in educational…", + "date": "September 15th, 2022", + "authors": "Nicolas Brichet", + "imageID": "blogpost-image-94", + "imageWidth": "270px" + }, + { + "url": "https://blog.jupyter.org/visual-programming-in-jupyterlab-with-blockly-7731ec3e113c", + "title": "Visual programming in JupyterLab with Blockly", + "image": "https://miro.medium.com/max/1400/0*yEQ8djozBKDLcCxZ", + "summary": "When moving from block-based programming to a more classical language like Python, students often have to switch to a completely new environment. In order to provide a smooth ramp of complexity for learners, we designed a JupyterLab extension for Blockly so that Jupyter can be used from the very first steps of their learning journey.", + "date": "July 29th, 2022", + "authors": "Denisa Checiu, Carlos Herrero", + "imageID": "blogpost-image-93", + "imageWidth": "270px" + }, + { + "url": "https://blog.jupyter.org/mamba-meets-jupyterlite-88ef49ac4dc8", + "title": "Mamba meets JupyterLite", + "image": "https://miro.medium.com/max/1400/1*JCiZIwwkFen5kwEA2rK4SA.png", + "summary": "JupyterLite is a Jupyter distribution that runs entirely in the web browser without any server components. To achieve this, all language kernels must also run in the browser. A significant benefit of…", + "date": "July 14th, 2022", + "authors": "Thorsten Beier, Martin Renou", + "imageID": "blogpost-image-92", + "imageWidth": "270px" + }, + { + "url": "https://blog.jupyter.org/inspector-jupyterlab-404cce3e1df6", + "title": "Inspector JupyterLab", + "image": "https://miro.medium.com/max/1215/1*pRzjLlwQIIMhJmx2G_3-Mw.png", + "summary": "JupyterLab provides multiple ways to improve your coding workflow: code highlighting, code completion, theming, debugger with rich variable rendering and more.", + "date": "April 11th, 2022", + "authors": "Martin Renou", + "imageID": "blogpost-image-91", + "imageWidth": "270px" + }, + { + "url": "https://blog.pyodide.org/posts/canvas-renderer-matplotlib-in-pyodide/", + "title": "HTML5 <canvas> based renderer for Matplotlib in Pyodide", + "image": "https://blog.pyodide.org/posts/canvas-renderer-matplotlib-in-pyodide/featured.png", + "summary": "In this post, we present a new backend for Matplotlib enabling the rendering of figures in the browser by leveraging the <canvas> element. This showcases how JavaScript and Python can interact with each other, thanks to Pyodide.", + "date": "April 1st, 2022", + "authors": "Madhur Tandon", + "imageID": "blogpost-image-90", + "imageWidth": "270px" + }, + { + "url": "https://wolfv.medium.com/the-future-of-mamba-fdf6d628b3df", + "title": "The future of mamba", + "image": "https://miro.medium.com/max/1400/1*uF6b_NEqPQqQafnOnrdVXg.png", + "summary": "The recent adoption of libmamba by the conda project was a great validation of our work. Several other game-changing innovations are in the works by the mamba team. Stay tuned!", + "date": "March 31st, 2022", + "authors": "Wolf Vollprecht", + "imageID": "blogpost-image-89", + "imageWidth": "270px" + }, + { + "url": "https://blog.jupyter.org/congratulations-distinguished-contributors-bc349fa60d68", + "title": "Congratulations, Distinguished Contributors!", + "image": "https://miro.medium.com/max/1400/1*Cw8VcAfJKv42NLtAN6v-rw.png", + "summary": "We are proud to announce the recipients of the Jupyter Distinguished Contributor (JDC) award for the 2021 cohort of contributors.", + "date": "March 16th, 2022", + "authors": "Johan Mabille", + "imageID": "blogpost-image-88", + "imageWidth": "270px" + }, + { + "url": "https://blog.jupyter.org/jupyter-everywhere-f8151c2cc6e8", + "title": "Jupyter Everywhere", + "image": "https://miro.medium.com/max/1342/0*TK59W6sOJHNg-Sgi.jpg", + "summary": "Easily embed a console, a notebook, or a fully-fledged IDE on any web page.", + "date": "March 15th, 2022", + "authors": "Martin Renou, Jeremy Tuloup", + "imageID": "blogpost-image-87", + "imageWidth": "270px" + }, + { + "url": "https://medium.com/@kmathewos92/ros2-support-for-zethus-e6ecfcdb1c4c", + "title": "ROS2 support for Zethus", + "image": "https://miro.medium.com/max/1400/1*PjL5c71-hE2rO4EyqrVu9Q.png", + "summary": "Zethus is an Open Source library for Robot visualization in the browser. Initially developed by Rapyuta Robotics, it provides a web-based…", + "date": "February 17th, 2022", + "authors": "Kedus Mathewos", + "imageID": "blogpost-image-86", + "imageWidth": "270px" + }, + { + "url": "https://medium.com/@QuantStack/quantstack-2021-in-review-fe5eac2e0f6d", + "title": "QuantStack: 2021 in review", + "image": "https://miro.medium.com/max/5000/1*sTrv_3hnvCHQdh_6SOYVIg.png", + "summary": "This was a crazy year of innovation for the open-source team at QuantStack. From JupyterLab to the packaging ecosystem and high-performance computing, we made some major strides in all areas, while almost doubling the size of the team.", + "date": "December 18th, 2021", + "authors": "Sylvain Corlay", + "imageID": "blogpost-image-85", + "imageWidth": "270px" + }, + { + "url": "https://blog.jupyter.org/jupyter-games-cda20dc15a21", + "title": "Jupyter Games", + "image": "https://miro.medium.com/max/4854/1*gXbeqCDvKyaRySdAX6SnKg.png", + "summary": "Making their own tiny video games can be a great way for kids to learn programming in a playful matter. While Jupyter is widely used as a scientific and educational tool, Jupyter is seldom used as a…", + "date": "December 14th, 2021", + "authors": "Thorsten Beier", + "imageID": "blogpost-image-84", + "imageWidth": "270px" + }, + { + "url": "https://blog.jupyter.org/need-for-speed-voil%C3%A0-edition-a9e1300ab3b2", + "title": "Need for speed: Voilà edition", + "image": "https://miro.medium.com/max/2000/1*gSWxQGu60SG5DdH8MIzCjw.png", + "summary": "Voilà turns Jupyter notebooks into standalone applications without requiring any modification to the content. You want to share your content with non-technical readers? Just call Voilà with the…", + "date": "December 10th, 2021", + "authors": "Duc Trung Le", + "imageID": "blogpost-image-83", + "imageWidth": "270px" + }, + { + "url": "https://adelsalle.medium.com/towards-a-more-secure-conda-ecosystem-5ce65a27d7d5", + "title": "Towards a more secure conda ecosystem", + "image": "https://miro.medium.com/max/2000/1*-dT0h3rEi07pzgl_wnkj_g.png", + "summary": "Supply chain security is crucial to the overall security of package managers, which are a major attack vector of information systems. Today, we are pleased to announce that mamba has gained the…", + "date": "November 16th, 2021", + "authors": "Adrien Delsalle", + "imageID": "blogpost-image-82", + "imageWidth": "270px" + }, + { + "url": "https://johan-mabille.medium.com/toward-a-faster-and-thinner-xsimd-9e4eef41bc17", + "title": "Toward a faster and thinner xsimd", + "image": "https://miro.medium.com/max/1094/1*5jX4Eemb2CsUkRo3V2FGow.png", + "summary": "xsimd, the SIMD library by QuantStack, got more and more adoption in recent years. While it helped improve the library, adoption also brought new requirements. Among them was the abitility to...", + "date": "October 29th, 2021", + "authors": "Serge Guelton, Johan Mabille", + "imageID": "blogpost-image-81", + "imageWidth": "270px" + }, + { + "url": "https://blog.jupyter.org/xeus-lite-379e96bb199d", + "title": "Xeus-Lite", + "image": "https://miro.medium.com/max/4020/1*PUlJi6czJovO90t-Dsgt5g.png", + "summary": "JupyterLite is a JupyterLab distribution that runs entirely in the web browser, backed by in-browser language kernels. Xeus is C++ library for writing Jupyter kernels. In this blogpost we show how…", + "date": "October 25th, 2021", + "authors": "Thorsten Beier", + "imageID": "blogpost-image-80", + "imageWidth": "200px" + }, + { + "url": "https://wolfv.medium.com/the-mamba-project-and-the-czi-grant-ec88fb27c25", + "title": "The mamba project and the CZI grant", + "image": "https://miro.medium.com/max/2000/1*6hKli3Nr3p6eX3TN5hRaSQ.png", + "summary": "For those who don't know yet: mamba is a fast, cross-platform & non-language-specific package manager widely used in the scientific space. Mamba works with conda -packages and works great in tandem…", + "date": "October 19th, 2021", + "authors": "Wolf Vollprecht", + "imageID": "blogpost-image-79", + "imageWidth": "270px" + }, + { + "url": "https://blog.jupyter.org/looking-at-notebooks-from-a-new-perspective-bfd06797f188", + "title": "Looking at notebooks from a new perspective", + "image": "https://miro.medium.com/max/3000/1*g3OWLubcUFgVIGBfPYztJQ.png", + "summary": "Jupyter notebooks are a great tool for practitioners of scientific computing from the research phase of their work to the communication of their results. The interleaving of code and rich text makes…", + "date": "October 5th, 2021", + "authors": "Mariana Meireles", + "imageID": "blogpost-image-78", + "imageWidth": "270px" + }, + { + "url": "https://blog.jupyter.org/xeus-2-0-cb460d4daed4", + "title": "Xeus 2.0", + "image": "https://miro.medium.com/max/4800/1*kGCA9WV-Gf5tiNqqy9vTMQ.png", + "summary": "We have just released Xeus 2.0. This is a major release of the library. While it includes backward-incompatible changes, they are very limited and upgrading your kernels should be relatively easy…", + "date": "September 28th, 2021", + "authors": "Johan Mabille, Sylvain Corlay", + "imageID": "blogpost-image-77", + "imageWidth": "270px" + }, + { + "url": "https://blog.jupyter.org/from-jupyter-to-the-moon-2e432df402c8", + "title": "From Jupyter to the Moon", + "image": "https://miro.medium.com/max/2750/1*Or2bu8twFwywgACqLOE9AA.png", + "summary": "A key principle in Jupyter’s design is language agnosticism, and one of the main extension points of the Jupyter ecosystem is the kernel, the part of the architecture responsible for executing the…", + "date": "September 24th, 2021", + "authors": "Thorsten Beier", + "imageID": "blogpost-image-76", + "imageWidth": "270px" + }, + { + "url": "https://blog.jupyter.org/jupyterlite-jupyter-%EF%B8%8F-webassembly-%EF%B8%8F-python-f6e2e41ab3fa", + "title": "Jupyter ️❤️ WebAssembly ❤️ Python", + "image": "https://miro.medium.com/max/1024/1*CMvcTaLSAD5A-WHCtnIFwA.png", + "summary": "JupyterLite is a JupyterLab distribution that runs entirely in the web browser, backed by in-browser language kernels. JupyterLite is a reboot of several attempts at making a full static Jupyter…", + "date": "July 13th, 2021", + "authors": "Jeremy Tuloup", + "imageID": "blogpost-image-75", + "imageWidth": "180px" + }, + { + "url": "https://wolfv.medium.com/mamba-0-15-0-475d1dca0418", + "title": "Mamba 0.15.0", + "image": "https://miro.medium.com/max/2000/1*neAjO4lTmq4TIZTmMGkKNg.png", + "summary": "We’ve just dropped one of the biggest releases of mamba (the fast conda package manager)— along with some nice improvements in libsolv! This is a quick update on some new and improved features in…", + "date": "July 9th, 2021", + "authors": "Wolf Vollprecht, Adrien Delsalle", + "imageID": "blogpost-image-74", + "imageWidth": "270px" + }, + { + "url": "https://www.polytechnique.edu/fondation/content/le-calcul-haute-performance-au-service-de-l%E2%80%99innovation", + "title": "Le calcul haute performance au service de l'innovation (in French)", + "image": "/img/logos/EcolePolytechnique.png", + "summary": "Led by Professor Marc Massot (Center for Applied Mathematics), the HPC@Maths initiative aims at developing a strong expertise in high-performance computing at École Polytechnique. This project is supported by the X Foundation, and by QuantStack.", + "date": "June 18th, 2021", + "authors": "Fondation École Polytechnique", + "imageID": "blogpost-image-73", + "imageWidth": "180px" + }, + { + "url": "https://blog.jupyter.org/how-we-made-jupyter-notebooks-collaborative-with-yjs-b8dff6a9d8af", + "title": "How we made Jupyter notebooks collaborative with Yjs", + "image": "https://miro.medium.com/max/1600/0*HvwrxmA_sBtU0SaO", + "summary": "Collaborative editing — à la Google Docs — is a feature that you still rarely find in applications. One of the few good things that came out of this pandemic is that more people seem to care about…", + "date": "June 12th, 2021", + "authors": "Kevin Jahns", + "imageID": "blogpost-image-72", + "imageWidth": "270px" + }, + { + "url": "https://blog.jupyter.org/retrolab-a-jupyterlab-distribution-with-a-retro-look-and-feel-8096b8b223d0", + "title": "RetroLab — A JupyterLab distribution with a retro look and feel", + "image": "https://miro.medium.com/max/3840/1*n9MydI9CDW9vlav1gMlo0Q.png", + "summary": "RetroLab is an alternative JupyterLab distribution, built from the ground-up, providing a notebook interface with a retro look and feel. Currently at version 3.0, JupyterLab provides an advanced…", + "date": "May 27th, 2021", + "authors": "Jeremy Tuloup", + "imageID": "blogpost-image-71", + "imageWidth": "270px" + }, + { + "url": "https://adelsalle.medium.com/rhumba-the-fast-r-distribution-is-available-on-windows-fa975b2aefa2", + "title": "Rhumba, the fast R distribution is available on Windows", + "image": "https://miro.medium.com/max/700/1*23wOYejHZA5dLluhyLUYhA.gif", + "summary": "A few months ago, Mariana Meireles created Rhumba, a fast R package manager and distribution leveraging the conda-forge initiative and the mamba library. Today, we’re happy to announce a new major…", + "date": "May 18th, 2021", + "authors": "Adrien Delsalle", + "imageID": "blogpost-image-70", + "imageWidth": "270px" + }, + { + "url": "https://blog.jupyter.org/enabling-the-jupyterlab-debugger-with-ipykernel-8d7248f522b0", + "title": "Enabling the JupyterLab Debugger with ipykernel", + "image": "https://miro.medium.com/max/4214/1*jSQWLvCYoV-L-kp_lTkRKg.gif", + "summary": "JupyterLab 3.0 includes a visual debugger that allows to interactively set breakpoints, step into functions, and inspect variables with any Jupyter kernel that implements the Jupyter debugger…", + "date": "May 13th, 2021", + "authors": "Sylvain Corlay, Johan Mabille", + "imageID": "blogpost-image-69", + "imageWidth": "270px" + }, + { + "url": "https://medium.com/@mari_meir/jupyter-%EF%B8%8F-%EF%B8%8F-cytoscape-e2e77be8e0f9", + "title": "Jupyter ️❤️ Cytoscape", + "image": "https://miro.medium.com/max/250/1*fib_QqwBNksN4YiJiAneQg.png", + "summary": "Cytoscape is an open source software platform for visualizing complex networks and integrating these with any type of attribute data. While the project was started in the life sciences community, it…", + "date": "May 11th, 2021", + "authors": "Mariana Meireles", + "imageID": "blogpost-image-68", + "imageWidth": "180px" + }, + { + "url": "https://johan-mabille.medium.com/zarray-a-dynamic-expression-system-based-on-xtensor-ded69f37ff5e", + "title": "zarray: a dynamic expression system based on xtensor", + "image": "https://miro.medium.com/max/782/0*MH-GD9T19Fjn32ur.png", + "summary": "In this article we demonstrate how we pushed xtensor one step further, implementing a dynamic expression system on top of it. xtensor is a comprehensive C++framework for multi-dimensional array…", + "date": "Apr 29th, 2021", + "authors": "Johan Mabille", + "imageID": "blogpost-image-67", + "imageWidth": "180px" + }, + { + "url": "https://blog.jupyter.org/nbterm-jupyter-notebooks-in-the-terminal-6a2b55d08b70", + "title": "nbterm: Jupyter Notebooks in the terminal", + "image": "https://miro.medium.com/max/1120/1*jZFC3kPJqxMSUeCGd7PHxw.jpeg", + "summary": "Jupyter notebooks are mostly known for their web-based user interface, such as JupyterLab or the Classic Notebook. They offer a great user experience, allow for rich output rendering, provide…", + "date": "Apr 26th, 2021", + "authors": "David Brochart", + "imageID": "blogpost-image-66", + "imageWidth": "300px" + }, + { + "url": "https://blog.jupyter.org/abracadabra-bringing-the-magics-to-xeus-python-9d17bcfacb4", + "title": "Abracadabra! Bringing the Magics to Xeus-Python", + "image": "https://miro.medium.com/max/1120/1*PTiGVyDsazc_ziz6Bk4EnA.gif", + "summary": "Last year, we set ourselves to implement a visual debugger for JupyterLab. This endeavor required major developments in the JupyterLab…", + "date": "Feb 18th, 2021", + "authors": "Martin Renou", + "imageID": "blogpost-image-65", + "imageWidth": "270px" + }, + { + "url": "https://medium.com/robostack/cross-platform-conda-packages-for-ros-fa1974fd1de3", + "title": "Cross-platform Conda Packages for ROS", + "image": "https://miro.medium.com/max/2000/0*CWMpP2kGWulIQeHf.jpg", + "summary": "2020 has been a busy year for the RoboStack project. We collaboratively published ros-noetic on four platforms (Windows, macOS, Linux x64 and ARM64) and revamped how ROS packages can be released on…", + "date": "February 16th, 2021", + "authors": "Wolf Vollprecht, Tobias Fischer", + "imageID": "blogpost-image-64", + "imageWidth": "270px" + }, + { + "url": "https://blog.jupyter.org/genomic-data-representation-in-jupyter-c57a5bb518d6", + "title": "Genomic Data representation in Jupyter", + "image": "https://miro.medium.com/max/1120/1*681fIddZAaQc8w72MmmIiw.gif", + "summary": "If there is one thing that recent events tell us, it is that genomics is a large source of data, and that its manipulation and understanding allow for the quick development of new drugs and…", + "date": "February 8th, 2021", + "authors": "Jean-David Harrouet", + "imageID": "blogpost-image-63", + "imageWidth": "270px" + }, + { + "url": "https://blog.jupyter.org/an-sql-solution-for-jupyter-ef4a00a0d925?postPublishedType=initial", + "title": "An SQL Solution for Jupyter", + "image": "https://miro.medium.com/max/992/1*tbfa_AWoqb-yB1Tk6Uq3ng.png", + "summary": "A few months ago we released xeus-sqlite, a Jupyter kernel that allows users to make SQLite queries directly from the notebook. With the needs of the Jupyter data science community in mind we decided…", + "date": "February 3rd, 2021", + "authors": "Mariana Meireles", + "imageID": "blogpost-image-62", + "imageWidth": "200px" + }, + { + "url": "https://blog.jupyter.org/a-curiously-recurring-widget-library-261a65bd56fe", + "title": "A Curiously Recurring Widget Library", + "image": "https://miro.medium.com/max/1120/1*i1D4_PqaKhej-XRSKkoyBw.png", + "summary": "Diving into the implementation of xwidgets…", + "date": "January 27th, 2021", + "authors": "Sylvain Corlay", + "imageID": "blogpost-image-61", + "imageWidth": "200px" + }, + { + "url": "https://blog.jupyter.org/robotic-process-automation-with-jupyterlab-713b5630e457", + "title": "Robotic Process Automation with JupyterLab", + "image": "https://miro.medium.com/max/1120/1*3HNfLnwDpXNZ6n6HPD2lXQ.png", + "summary": "Robotic Process Automation (RPA) differs from classical automation tools in that the actions to automate can be developed by observing a user perform a task in a graphical user interface, across…", + "date": "January 18th, 2021", + "authors": "Martin Renou, Johan Mabille", + "imageID": "blogpost-image-60", + "imageWidth": "270px" + }, + { + "url": "https://blog.jupyter.org/dashboarding-with-jupyterlab-3-789fcb1a5857", + "title": "Dashboarding with JupyterLab 3.0", + "image": "https://miro.medium.com/max/2000/1*t4EW3oCIrt5FaMXUyjYPFw.gif", + "summary": "Project Jupyter offers a complete suite of open-source tools for the scientific computing community, reaching from the exploratory phase of a project to the presentation of the results. In this last…", + "date": "January 8th, 2021", + "authors": "Carlos Herrero, Jeremy Tuloup", + "imageID": "blogpost-image-59", + "imageWidth": "270px" + }, + { + "url": "https://blog.jupyter.org/jupyterlab-3-0-is-out-4f58385e25bb", + "title": "JupyterLab 3.0 is Released!", + "image": "https://miro.medium.com/max/1400/1*iZTmCAefbExeTZNJKWy4cQ.png", + "summary": "The 3.0 release of JupyterLab brings many new features to users and substantial improvements to the extension distribution system.", + "date": "January 5th, 2021", + "authors": "Jeremy Tuloup", + "imageID": "blogpost-image-58", + "imageWidth": "270px" + }, + { + "url": "https://blog.llvm.org/posts/2020-12-21-interactive-cpp-for-data-science/", + "title": "Interactive C++ for Data Science", + "image": "https://blog.llvm.org/img/cling-2020-12-21-figure3.png", + "summary": "This post will discuss some applications of Cling developed to support data science researchers. In particular, interactively probing data and interfaces makes complex libraries and complex data more accessible users.", + "date": "Dec 23, 2020", + "authors": "Vassil Vassilev, David Lange, Simeon Ehrig, Sylvain Corlay", + "imageID": "blogpost-image-57", + "imageWidth": "270px" + }, + { + "url": "https://david-brochart.medium.com/xtensor-%EF%B8%8F-zarr-4f5cf25c65e5", + "title": "Xtensor ❤️ Zarr", + "image": "https://miro.medium.com/max/2160/1*N1w2lJOA9n0HKw0Hlf0ruQ.png", + "summary": "A C++ implementation of the Zarr specification…", + "date": "Dec 15, 2020", + "authors": "David Brochart", + "imageID": "blogpost-image-56", + "imageWidth": "300px" + }, + { + "url": "https://blog.jupyter.org/a-c-backend-for-vega-lite-bd2524b247c2", + "title": "A C++ API for Vega-Lite", + "image": "https://miro.medium.com/max/700/1*UkIPGquufhYT7-S62MTECg.png", + "summary": "In this post, we present the first public release of XVega, a C++ library for producing Vega-Lite charts. Data science workflows differ from traditional software development in that engineers make…", + "date": "Dec 2, 2020", + "authors": "Madhur Tandon", + "imageID": "blogpost-image-55", + "imageWidth": "270px" + }, + { + "url": "https://blog.jupyter.org/ipygany-jupyter-into-the-third-dimension-29a97597fc33", + "title": "Ipygany, Jupyter into the Third Dimension", + "image": "https://miro.medium.com/max/1000/1*IB4Bf4aEC5RXJJ1gY1zGFw.png", + "summary": "From Paraview to Mayavi, there are multiple solutions for data analysis on 3D meshes on the desktop. Most of these tools provide high-level APIs that can be driven with a scripting language like…", + "date": "Oct 14, 2020", + "authors": "Martin Renou", + "imageID": "blogpost-image-54", + "imageWidth": "270px" + }, + { + "url": "https://medium.com/@mari_meir/rhumba-a-faster-r-distribution-d619fb93043a", + "title": "Rhumba, a Faster R Distribution", + "image": "https://miro.medium.com/max/1260/1*qNdIl4oTgd0F6JAExK7CNg.gif", + "summary": "CRAN is the official package manager for the R ecosystem. Unfortunately, simple operations such as creating new environments or installing packages with it can be very time-consuming due to the fact…", + "date": "Oct 13, 2020", + "authors": "Mariana Meireles", + "imageID": "blogpost-image-53", + "imageWidth": "200px" + }, + { + "url": "https://blog.jupyter.org/the-templating-system-of-nbconvert-6-47ea781eacd2", + "title": "The Templating System of Nbconvert 6", + "image": "https://miro.medium.com/max/1200/1*nrUKm5eexRd9ReMergNnEw.png", + "summary": "One of the main changes in nbconvert 6 is the refactor of the template system, which should be easier to extend and build upon. In this article, we dive into the template system, and provide a…", + "date": "Sep 26, 2020", + "authors": "Sylvain Corlay", + "imageID": "blogpost-image-52", + "imageWidth": "270px" + }, + { + "url": "https://medium.com/@mari_meir/memestra-a21c0c1f362", + "title": "Memestra!", + "image": "https://miro.medium.com/max/1200/1*usMYAuVljfxl9LnSPnseVg.png", + "summary": "Modern IDE features such as interactive debugging, linting, code formatting, and refactoring tools are now available in JupyterLab, thanks to the JupyterLab-LSP extension and the recent release of…", + "date": "Sep 21, 2020", + "authors": "Mariana Meireles", + "imageID": "blogpost-image-51", + "imageWidth": "270px" + }, + { + "url": "https://medium.com/@martinRenou/real-time-rendering-of-water-caustics-59cda1d74aa", + "title": "Real-time Rendering of Water Caustics", + "image": "https://miro.medium.com/max/875/1*lbqTcvsdT_5D2LT1h5bO2g.png", + "summary": "In this article, I present an attempt for generalizing caustics computation in real-time using WebGL and ThreeJS. The fact that it is an attempt is important, finding a solution that works well in…", + "date": "Aug 27, 2020", + "authors": "Martin Renou", + "imageID": "blogpost-image-50", + "imageWidth": "270px" + }, + { + "url": "https://blog.jupyter.org/jupyterlab-ros-3dc9dab7f421", + "title": "JupyterLab, the Cloud Robotics Command Station", + "image": "https://miro.medium.com/max/3200/1*zfaBPxiCzlnoNoKrVpcrIA.png", + "summary": "Building the next generation of robotics cloud computing using ROS and JupyterLab", + "date": "Aug 11, 2020", + "authors": "Carlos Herrero, Wolf Vollprecht", + "imageID": "blogpost-image-49", + "imageWidth": "270px" + }, + { + "url": "https://blog.jupyter.org/slicerjupyter-a-3d-slicer-kernel-for-interactive-publications-6f2ad829f635", + "title": "SlicerJupyter, a 3-D Slicer Kernel for Interactive Publications", + "image": "https://miro.medium.com/max/341/1*ePhHKkjqV-AW0mvDkaeurw.png", + "summary": "Use Jupyter and 3D Slicer kernel to implement biomedical data processing workflows in a notebook.", + "date": "Jul 8, 2020", + "authors": "Sylvain Corlay, Jean-Christophe Fillion-Robin, Mike Grauer, Andras Lasso, Matt MacCormick, Isaiah Norton, Steve Pieper, Martin Renou, Mike Sarahan", + "imageID": "blogpost-image-48", + "imageWidth": "180px" + }, + { + "url": "https://medium.com/@QuantStack/open-software-packaging-for-science-61cecee7fc23", + "title": "Open Software Packaging for Science", + "image": "https://raw.githubusercontent.com/TheSnakePit/design/83d7450620172e41f54e65c76f1374b52dfab8a1/mamba.svg", + "summary": "Modern scientific applications typically depend on a very large number of libraries written in various programming languages, ranging from Fortran to TypeScript, C, C++, Python, etc. So, we need to…", + "date": "Jun 19, 2020", + "authors": "Wolf Vollprecht, Mario Buikhuizen, Marianne Corvellec, Johan Mabille, David Brochart", + "imageID": "blogpost-image-47", + "imageWidth": "270px" + }, + { + "url": "https://blog.jupyter.org/a-jupyter-kernel-for-sqlite-9549c5dcf551", + "title": "A Jupyter Kernel for SQLite", + "image": "https://miro.medium.com/max/604/1*pzPTGCJVgIO10N7OwOGWKw.png", + "summary": "While it is well known in the Python scientific computing community, Jupyter is in fact a language-agnostic development environment. High-quality language kernels exist for the main languages of data…", + "date": "Jun 11, 2020", + "authors": "Mariana Meireles", + "imageID": "blogpost-image-46", + "imageWidth": "270px" + }, + { + "url": "https://blog.jupyter.org/plasma-a-learning-platform-powered-by-jupyter-1b850fcd8624", + "title": "PLASMA, a Learning Platform Powered by Jupyter", + "image": "https://miro.medium.com/max/933/0*wWdglu7KBVC08Lcc.png", + "summary": "Jupyter has been a great choice for education for many years. The Jupyter Notebook has become one of the most popular tools to conduct workshops, tutorials, and teach online classes. Recently we have…", + "date": "May 11, 2020", + "authors": "Jeremy Tuloup", + "imageID": "blogpost-image-45", + "imageWidth": "270px" + }, + { + "url": "https://blog.jupyter.org/interactive-graph-visualization-in-jupyter-with-ipycytoscape-a8828a54ab63", + "title": "Interactive Graph Visualization in Jupyter with IPycytoscape", + "image": "https://miro.medium.com/max/933/1*d9UZBB4OB3LXVm7fTHBHaw.png", + "summary": "The Jupyter widgets ecosystem offers a broad variety of data visualization tools for exploratory analysis in the notebook. However, we…", + "date": "Apr 30, 2020", + "authors": "Mariana Meireles", + "imageID": "blogpost-image-44", + "imageWidth": "180px" + }, + { + "url": "https://blog.jupyter.org/a-visual-debugger-for-jupyter-914e61716559", + "title": "A Visual Debuger for Jupyter", + "image": "https://miro.medium.com/max/933/0*9pVDg58cTz5Yezw8.gif", + "summary": "Most of the progress made in software projects comes from incrementalism. The ability to quickly see the outcome of an execution and iterate has been one of the main reasons for the success of…", + "date": "Mar 25, 2020", + "authors": "Jeremy Tuloup, Borys Palka, Johan Mabille, Martin Renou, Afshin Darian, Sylvain Corlay", + "imageID": "blogpost-image-43", + "imageWidth": "270px" + }, + { + "url": "https://blog.jupyter.org/report-on-the-jupyter-community-workshop-on-dashboarding-14f8ad9f3c0", + "title": "Field Report on the Jupyter Community Workshop on Dashboarding", + "image": "https://miro.medium.com/max/933/1*e8gJ4j2hCn4XMPagp6etOA.jpeg", + "summary": "From June 3rd to June 6th 2019, thirty-five developers from the Jupyter community met in Paris for a four-day workshop on dashboarding with Project Jupyter. For four days, attendees worked full time…", + "date": "Feb 14, 2020", + "authors": "Sylvain Corlay", + "imageID": "blogpost-image-42", + "imageWidth": "200px" + }, + { + "url": "https://medium.com/@wolfv/introducing-scikit-geometry-ae1dccaad5fd", + "title": "Introducing Scikit-Geometry", + "image": "https://miro.medium.com/max/1260/1*Ns12n2k0T3m0Hoe-5gg4kQ.png", + "summary": "As a robotics researcher (but also in many other fields) computations on geometric primitives are used very frequently— but it’s harder than anticipated to find the right abstractions in a nice…", + "date": "Jan 24, 2020", + "authors": "Wolf Vollprecht", + "imageID": "blogpost-image-41", + "imageWidth": "270px" + }, + { + "url": "https://medium.com/@johan.mabille/how-we-wrote-xtensor-8-n-iterators-7df77e3223f7", + "title": "How we Wrote Xtensor (Episode 8) - Iterators", + "image": "https://miro.medium.com/max/1260/0*mdtjNgTehPo6xzRO.png", + "summary": "In the previous article, we implemented the broadcasting rules so that we can compute the shape of arbitrary complex trees that involve arrays with different but compatible shapes. This is the first…", + "date": "Jan 7, 2020", + "authors": "Johan Mabille", + "imageID": "blogpost-image-40", + "imageWidth": "270px" + }, + { + "url": "https://medium.com/@wolfv/2019-in-review-d7d03fb0d17d", + "title": "2019 in Review", + "image": "https://miro.medium.com/max/3600/1*64DQjEYUaRMtHA2Ou3It8w.png", + "summary": "This year has seen major changes in xeus and xeus-python, driven by the requirements for developing a visual debugger. We have implemented a prototype that supports the Debug Adapter Protocol from…", + "date": "Jan 2, 2020", + "authors": "Wolf Vollprecht", + "imageID": "blogpost-image-39", + "imageWidth": "270px" + }, + { + "url": "https://medium.com/@wolfv/robot-development-with-jupyter-ddae16d4e688", + "title": "Robot Development with Jupyter", + "image": "https://miro.medium.com/max/1260/1*rqyB9qBQUlonff3PR9YuvA.png", + "summary": "Jupyter and Voilà are two popular packages in the data science ecosystem. But the Jupyter plugins jupyter-ros and jupyter-amphion make them more interesting than ever for robotics applications. This…", + "date": "Dec 31, 2019", + "authors": "Wolf Vollprecht", + "imageID": "blogpost-image-38", + "imageWidth": "270px" + }, + { + "url": "https://medium.com/@johan.mabille/how-we-wrote-xtensor-7-n-broadcasting-cf37a974d029", + "title": "How we Wrote Xtensor (Episode 7) - Broadcasting", + "image": "https://miro.medium.com/max/1260/0*mdtjNgTehPo6xzRO.png", + "summary": "In the previous article, we implemented operator and mathematical function overloads so that we can build arbitrary complex expression trees and access their elements. Before we can assign an…", + "date": "Nov 24, 2019", + "authors": "Johan Mabille", + "imageID": "blogpost-image-37", + "imageWidth": "270px" + }, + { + "url": "https://blog.jupyter.org/voila-gridstack-template-8a431c2b353e", + "title": "Configure your Dashboards with the Voilà Gridstack Template", + "image": "https://miro.medium.com/max/933/1*Pl6z5oPeFixFjxMEYzEpIA.gif", + "summary": "Voilà is a new dashboarding solution from Jupyter ecosystem. It provides an easy-to-use tool to convert your Jupyter notebooks into standalone web applications. If you have not used it before, you…", + "date": "Nov 11, 2019", + "authors": "Bartosz Telenczuk", + "imageID": "blogpost-image-36", + "imageWidth": "270px" + }, + { + "url": "https://blog.jupyter.org/a-slideshow-template-for-voil%C3%A0-apps-435f67d10b4f", + "title": "A Slideshow template for Voilà", + "image": "https://miro.medium.com/max/512/1*JLepfTuigc_h1Gfy768BWg.png", + "summary": "Last June, QuantStack announced the first release of Voilà, a solution to turn Jupyter notebooks into standalone web applications. Voilà enforces security (preventing arbitrary code execution) while…", + "date": "Oct 29, 2019", + "authors": "Marianne Corvellec", + "imageID": "blogpost-image-35", + "imageWidth": "270px" + }, + { + "url": "https://medium.com/@wolfv/ros-on-conda-forge-dca6827ac4b6", + "title": "ROS on Conda-forge", + "image": "https://miro.medium.com/max/1260/1*Vs520qK74Y0O3O5BtlgB7g.png", + "summary": "ROS is a fantastic and very large suite of software tools for Robotics. It’s used in many applications and with great success, ranging from the hobbyist market to industrial use cases. Most people…", + "date": "Oct 28, 2019", + "authors": "Wolf Vollprecht", + "imageID": "blogpost-image-34", + "imageWidth": "270px" + }, + { + "url": "https://blog.jupyter.org/ipycanvas-a-python-canvas-for-jupyter-bbb51e4777f7", + "title": "IPycanvas, a Python Canvas for Jupyter", + "image": "https://miro.medium.com/max/933/1*LHrtcPJMCWVMgsvNR6tR6w.png", + "summary": "As you may already know, the Jupyter Notebook and JupyterLab are Browser-based applications. Browsers are incredibly powerful, they allow you to swap rich and interactive graphical interfaces…", + "date": "Oct 25, 2019", + "authors": "Martin Renou", + "imageID": "blogpost-image-33", + "imageWidth": "270px" + }, + { + "url": "https://blog.jupyter.org/field-report-on-the-kernel-community-workshop-a4ad73a1a718", + "title": "Field Report on the Kernel Community Workshop", + "image": "https://miro.medium.com/max/933/1*AKYqXS6qtE0k6EcTKl3BEQ.jpeg", + "summary": "From May 27th to May 29th, thirty developers from the Jupyter community met in Paris for a three-days workshop on the Jupyter kernel…", + "date": "Oct 7, 2019", + "authors": "Sylvain Corlay", + "imageID": "blogpost-image-32", + "imageWidth": "270px" + }, + { + "url": "https://medium.com/@johan.mabille/how-we-wrote-xtensor-6-n-operator-overloading-984c2e5b4171", + "title": "How we Wrote Xtensor (Episode 6) - Operator Overloading", + "image": "https://miro.medium.com/max/1260/0*lB4lCWmmeVGAfBUq.png", + "summary": "In the previous article, we introduced expression templates and developed the skeleton of the xfunction class, meant to represent a node of the abstract syntax tree of a tensor expression. We left…", + "date": "Sep 25, 2019", + "authors": "Johan Mabille", + "imageID": "blogpost-image-31", + "imageWidth": "270px" + }, + { + "url": "https://blog.jupyter.org/interactive-gis-in-jupyter-with-ipyleaflet-52f9657fa7a", + "title": "Interactive GIS in Jupyter with IPyleaflet", + "image": "https://miro.medium.com/max/667/1*YA26aVkLDM1KXjNtGu5-Hw.gif", + "summary": "As Jupyter grew in popularity, a broad ecosystem of visualization packages based on Jupyter widgets has been developed, bringing even more interactivity to the Jupyter world. In this article, we dive…", + "date": "Sep 25, 2019", + "authors": "Sylvain Corlay, Martin Renou", + "imageID": "blogpost-image-30", + "imageWidth": "180px" + }, + { + "url": "https://medium.com/@johan.mabille/how-we-wrote-xtensor-5-n-expression-templates-d07332e73d1d", + "title": "How we Wrote Xtensor (Episode 5) - Expression Templates", + "image": "https://miro.medium.com/max/506/1*s4m7A7i78pzy-swZZwHkAA.png", + "summary": "In the previous articles, we started to implement an N-D container, xarray, which has value semantics and provides all the methods required to access its data. The next step is to give it computation…", + "date": "Sep 5, 2019", + "authors": "Johan Mabille", + "imageID": "blogpost-image-29", + "imageWidth": "270px" + }, + { + "url": "https://blog.jupyter.org/building-a-calculator-jupyter-kernel-4aed5764a295", + "title": "Building a Calculator Jupyter Kernel", + "image": "https://miro.medium.com/max/933/0*h6rfGRuTgOkwonN9", + "summary": "In order to provide a language-agnostic scientific development environment, the Jupyter project is built upon a well-specified protocol to communicate with the Kernel, the part of the infrastructure…", + "date": "Jul 16, 2019", + "authors": "Vasavan Thiru, Thibault Lacharme", + "imageID": "blogpost-image-28", + "imageWidth": "270px" + }, + { + "url": "https://medium.com/@johan.mabille/how-we-wrote-xtensor-4-n-value-semantics-6baa6856d313", + "title": "How we Wrote Xtensor (Episode 4) - Value Semantics", + "image": "https://miro.medium.com/proxy/1*HsU43Jzp1vJZpX2g8XPJsg.png", + "summary": "xtensor is a comprehensive framework for N-D arrays processing, including an extensible expression system, lazy evaluation, and many other…", + "date": "Jul 16, 2019", + "authors": "Johan Mabille", + "imageID": "blogpost-image-27", + "imageWidth": "270px" + }, + { + "url": "https://blog.jupyter.org/introducing-templates-for-jupyter-widget-layouts-f72bcb35a662", + "title": "Introducing Templates for Jupyter Widget Layouts", + "image": "https://miro.medium.com/max/933/1*YQrJiSx2g6GfhkIqK24RUw.png", + "summary": "Notebooks come alive with Jupyter widgets, which allow users to produce interactive GUIs inline in the Jupyter notebook or JupyterLab. You can either use them to add a few interactive controls and…", + "date": "Jul 4, 2019", + "authors": "Bartosz Telenczuk", + "imageID": "blogpost-image-26", + "imageWidth": "180px" + }, + { + "url": "https://medium.com/@johan.mabille/how-we-wrote-xtensor-3-n-the-constructors-65a177260638", + "title": "How we Wrote Xtensor (Episode 3) - The Constructors", + "image": "https://miro.medium.com/proxy/1*HsU43Jzp1vJZpX2g8XPJsg.png", + "summary": "In the previous article, we detailed the implementation of a generic access operator for our N-D container. Two more things to implement before the xarray class can be used in practice are…", + "date": "Jun 24, 2019", + "authors": "Johan Mabille", + "imageID": "blogpost-image-25", + "imageWidth": "270px" + }, + { + "url": "https://medium.com/@johan.mabille/how-we-wrote-xtensor-2-n-access-operators-57e8e3852263", + "title": "How we Wrote Xtensor (Episode 2) - Access Operators", + "image": "https://miro.medium.com/proxy/1*HsU43Jzp1vJZpX2g8XPJsg.png", + "summary": "In the previous article, we started to design an N-dimensional container. We detailed the implementation of methods related to shape, strides, and memory layout. Let us now get to the access…", + "date": "Jun 20, 2019", + "authors": "Johan Mabille", + "imageID": "blogpost-image-24", + "imageWidth": "270px" + }, + { + "url": "https://medium.com/@johan.mabille/how-we-wrote-xtensor-1-n-n-dimensional-containers-f79f9f4966a7", + "title": "How we Wrote Xtensor (Episode 1) - N-Dimensional Containers", + "image": "https://miro.medium.com/max/900/1*HsU43Jzp1vJZpX2g8XPJsg.png", + "summary": "xtensor is a C++ library meant for numerical analysis with multi-dimensional array expressions. It exposes an API similar to that of NumPy…", + "date": "Jun 17, 2019", + "authors": "Johan Mabille", + "imageID": "blogpost-image-23", + "imageWidth": "270px" + }, + { + "url": "https://blog.jupyter.org/and-voil%C3%A0-f6a2c08a4a93", + "title": "And Voilà!", + "image": "https://miro.medium.com/max/933/1*F0IS2B1XS6NCxp0Eh7linQ.png", + "summary": "The goal of Project Jupyter is to improve the workflows of researchers, educators, scientists, and other practitioners of scientific computing, from the exploratory phase of their work to the…", + "date": "Jun 11, 2019", + "authors": "Sylvain Corlay, Maarten Breddels", + "imageID": "blogpost-image-22", + "imageWidth": "270px" + }, + { + "url": "https://medium.com/@wolfv/mamba-development-news-29e32aaa8d6c", + "title": "Mamba Development News", + "image": "https://miro.medium.com/max/1800/1*g1iLyOfddtgWnkq3irRVmA.png", + "summary": "Mamba is a drop-in replacement for conda, the awesome cross-platform package manager. In our opinion, conda has one tiny problem: it’s too slow when many packages are installed, or when installing…", + "date": "Jun 10, 2019", + "authors": "Wolf Vollprecht", + "imageID": "blogpost-image-21", + "imageWidth": "270px" + }, + { + "url": "https://medium.com/@wolfv/building-an-open-source-continuous-benchmark-system-717839093962", + "title": "Building an Open-Source Continuous Benchmark System", + "image": "https://miro.medium.com/max/3686/1*Oopw8DH88w_5ryddn-TIcw.png", + "summary": "Concourse is a continuous integration software, and we use it for two purposes: multi-project continuous integration, and continuous benchmarking. It’s easy to setup on a low cost server, using…", + "date": "May 29, 2019", + "authors": "Wolf Vollprecht", + "imageID": "blogpost-image-20", + "imageWidth": "270px" + }, + { + "url": "https://blog.jupyter.org/ros-jupyter-b7e82b5e1202", + "title": "ROS @ Jupyter", + "image": "https://miro.medium.com/max/933/1*35w3erSL2xz0mp9le6YNyg.png", + "summary": "Historically, the ROS (Robot Operating System) community has relied on Qt for building complex user interfaces. Nowadays, the Jupyter notebook and the ipywidgets framework offer a compelling…", + "date": "Apr 7, 2019", + "authors": "Wolf Vollprecht", + "imageID": "blogpost-image-19", + "imageWidth": "270px" + }, + { + "url": "https://medium.com/@wolfv/making-conda-fast-again-4da4debfb3b7", + "title": "Making Conda Fast Again", + "image": "https://miro.medium.com/max/1260/1*5gXPul2JQUjm6oe8Gt6WgQ.png", + "summary": "You might have seen the announcement on Twitter: at QuantStack we’ve been working on making a prototype of a conda-compatible package manager called mamba. Conda is a great tool to distribute data…", + "date": "Mar 28, 2019", + "authors": "Wolf Vollprecht", + "imageID": "blogpost-image-18", + "imageWidth": "270px" + }, + { + "url": "https://towardsdatascience.com/interactive-spreadsheets-in-jupyter-32ab6ec0f4ff", + "title": "Interactive spreadsheets in Jupyter", + "image": "https://miro.medium.com/max/3322/1*sKQkf8JV8xTIq9pxVBHGow.png", + "summary": "ipysheet is a new interactive widgets library that aims at implementing the core features of a good spreadsheet application and more…", + "date": "Mar 8, 2019", + "authors": "Martin Renou", + "imageID": "blogpost-image-17", + "imageWidth": "270px" + }, + { + "url": "https://blog.jupyter.org/a-new-python-kernel-for-jupyter-fcdf211e30a8", + "title": "A New Python Kernel for Jupyter", + "image": "https://miro.medium.com/max/604/1*YIXmS4xfX9MxQ6dHZLU8-g.png", + "summary": "Project Jupyter aims at providing a consistent set of tools for interactive computing workflows across multiple programming languages. Jupyter projects are popular at all stages of a research project…", + "date": "Jan 9, 2019", + "authors": "Martin Renou", + "imageID": "blogpost-image-16", + "imageWidth": "270px" + }, + { + "url": "https://medium.com/@johan.mabille/xframe-towards-a-c-dataframe-26e1ccde211b", + "title": "Xframe: Towards a C++ Dataframe", + "image": "https://miro.medium.com/max/1260/1*oIyi7fqvyjIwEw49XkMFig.png", + "summary": "For a very long time, the C++ programming language lacked a high-level toolset for scientific computing. Data structures such as N-dimensional arrays, data frames, are the bread and butter of the R…", + "date": "Jan 4, 2019", + "authors": "Johan Mabille", + "imageID": "blogpost-image-15", + "imageWidth": "270px" + }, + { + "url": "https://medium.com/@johan.mabille/designing-language-bindings-with-xtensor-f32aa0f20db", + "title": "Designing Language Bindings with Xtensor", + "image": "https://raw.githubusercontent.com/xtensor-stack/xtensor/master/docs/source/xtensor.svg", + "summary": "xtensor and its satellite projects make it easy to implement a feature once in C++ and expose it to the main languages of data science, such as Python, Julia and R with little extra work. Although…", + "date": "Nov 30, 2018", + "authors": "Johan Mabille", + "imageID": "blogpost-image-14", + "imageWidth": "270px" + }, + { + "url": "https://towardsdatascience.com/video-streaming-in-the-jupyter-notebook-635bc5809e85", + "title": "Video Streaming in the Jupyter Notebook", + "image": "https://miro.medium.com/max/1400/1*HTd5uPpq8hsVhxv0MeVfAg.gif", + "summary": "ipywidgets plays an essential part in the Jupyter ecosystem; it brings interactivity between user and data. Widgets are eventful Python objects that often have a visual representation in the Jupyter…", + "date": "Nov 19, 2018", + "authors": "Martin Renou", + "imageID": "blogpost-image-13", + "imageWidth": "270px" + }, + { + "url": "https://towardsdatascience.com/the-xtensor-vision-552dd978e9ad", + "title": "The Xtensor Vision", + "image": "https://miro.medium.com/max/3200/0*VgDZuseWa2S05e6A", + "summary": "Here we’re laying out a vision for the xtensor project, the n-dimensional array in the C++ language — that makes it easy to write high-performance code and bind it to the languages of data science…", + "date": "Nov 10, 2018", + "authors": "Wolf Vollprecht", + "imageID": "blogpost-image-12", + "imageWidth": "270px" + }, + { + "url": "https://serge-sans-paille.github.io/pythran-stories/bye-bye-boostsimd-welcome-xsimd.html", + "title": "Bye bye Boost.SIMD, Welcome XSimd", + "image": "https://raw.githubusercontent.com/xtensor-stack/xsimd/master/docs/source/xsimd.svg", + "summary": "Boost.simd provides a C++ abstraction of vector type, allowing for efficient vectorization of array computations. It has been (optionally) used as part of the expression template engine of Pythran for a long time, a great collaboration that led to several patches in boost.simd, and great performance for Pythran.", + "date": "Oct 31, 2019", + "authors": "Serge Guelton", + "imageID": "blogpost-image-11", + "imageWidth": "270px" + }, + { + "url": "https://medium.com/@QuantStack/xtensor-c-and-the-julia-challenge-643d4b119761", + "title": "Xtensor, C++, and the Julia Challenge", + "image": "https://miro.medium.com/max/1260/1*FU8d3qA5_wXxxd7Q_ZUEUQ.png", + "summary": "Last month, Simon Danisch launched the Julia Language Challenge, a programming challenge from a member of the Julia community to other programming languages. with high performances. This can be…", + "date": "Oct 24, 2018", + "authors": "Sylvain Corlay, Johan Mabille, Wolf Vollprecht", + "imageID": "blogpost-image-10", + "imageWidth": "270px" + }, + { + "url": "https://medium.com/@wolfv/the-julia-challenge-in-c-21272d36c002", + "title": "The Julia Challenge in C++", + "image": "https://raw.githubusercontent.com/JuliaLang/julia-logo-graphics/master/images/julia-logo-color.png", + "summary": "Recently, some folks of the Julia community were boasting about the expressiveness of the Julia programming language, compared to older languages. That’s how they started the Julia Challenge. The…", + "date": "Oct 12, 2018", + "authors": "Wolf Vollprecht", + "imageID": "blogpost-image-9", + "imageWidth": "180px" + }, + { + "url": "https://blog.jupyter.org/interpreted-c-for-gis-with-jupyter-ae191bc6fb8e", + "title": "Interpreter C++ for GIS with Jupyter", + "image": "https://miro.medium.com/max/933/1*FzUw4j635uJgWHZzc8_QiQ.png", + "summary": "The recent release of the Jupyter kernel for C++, based on the Cling interpreter enabled a number of new workflows for the users of the C++ programming language. More than a limited set of base…", + "date": "Apr 24, 2018", + "authors": "Martin Renou", + "imageID": "blogpost-image-8", + "imageWidth": "270px" + }, + { + "url": "https://blog.jupyter.org/authoring-custom-jupyter-widgets-2884a462e724", + "title": "Authoring Custom Jupyter Widgets", + "image": "https://miro.medium.com/max/933/1*FnkBH8yA-PfCNCxXA2PNIw.gif", + "summary": "Jupyter interactive widgets enhance the notebook experience by allowing users to create graphical user interfaces. They enable richer interaction with the data and computing resources. While the base…", + "date": "Mar 5, 2018", + "authors": "Olivier Borderies, Olivier Coudray, Pierre Marion", + "imageID": "blogpost-image-7", + "imageWidth": "270px" + }, + { + "url": "https://blog.jupyter.org/jupyter-receives-the-acm-software-system-award-d433b0dfe3a2", + "title": "Jupyter Receives the ACM Software System Award", + "image": "https://miro.medium.com/max/1333/1*4gB92wu3PVYsKabkNCkgjg.png", + "summary": "It is our pleasure to announce that Project Jupyter has been awarded the 2017 ACM Software System Award, a significant honor for the project. We are humbled to join an illustrious list of projects…", + "date": "Mar 2, 2018", + "authors": "Project Jupyter", + "imageID": "blogpost-image-6", + "imageWidth": "300px" + }, + { + "url": "https://blog.jupyter.org/a-diagram-editor-for-jupyterlab-a254121ff919", + "title": "A Diagram Editor for JupyterLab", + "image": "https://raw.githubusercontent.com/QuantStack/jupyterlab-drawio/master/drawio.gif", + "summary": "The new JupyterLab interface is much more than a replacement for the classic notebook. It aims to bring together all the pieces required for a complete scientific workflow. The extension-based…", + "date": "Feb 26, 2018", + "authors": "Wolf Vollprecht", + "imageID": "blogpost-image-5", + "imageWidth": "270px" + }, + { + "url": "https://medium.com/@wolfv/fast-reductions-in-xtensor-with-simd-212a8543960a", + "title": "Fast Reductions in Xtensor with Xsimd", + "image": "https://miro.medium.com/max/1260/1*lKyNuvdkZlJwhwdatalQmw.png", + "summary": "xtensor has a wealth of mathematical functions available already: we support a lot of the NumPy API right there in C++. One of the areas where we were a bit slower than NumPy in the past were…", + "date": "Feb 20, 2018", + "authors": "Wolf Vollprecht", + "imageID": "blogpost-image-4", + "imageWidth": "270px" + }, + { + "url": "https://medium.com/@wolfv/faster-xtensor-87fcbe7f5293", + "title": "Faster Xtensor", + "image": "https://miro.medium.com/max/1260/1*NXfksdUzAtHjlw3y8wwqDg.jpeg", + "summary": "Knowing the size of the memory that is to be allocated at compile time can improve the runtime performance a lot — the compiler can already reserve the required space on the stack (instead of having…", + "date": "Feb 18, 2018", + "authors": "Wolf Vollprecht", + "imageID": "blogpost-image-3", + "imageWidth": "200px" + }, + { + "url": "https://blog.jupyter.org/interactive-workflows-for-c-with-jupyter-fe9b54227d92", + "title": "Interactive Workflows for C++ with Jupyter", + "image": "https://miro.medium.com/max/933/1*t_9qAXtdkSXr-0tO9VvOzQ.png", + "summary": "Scientists, educators and engineers not only use programming languages to build software systems, but also in interactive workflows, using the tools available to explore a problem and reason about…", + "date": "Nov 29, 2017", + "authors": "Sylvain Corlay, Loic Gouarin, Johan Mabille, Wolf Vollprecht", + "imageID": "blogpost-image-2", + "imageWidth": "270px" + }, + { + "url": "https://medium.com/@SylvainCorlay/scientific-computing-in-a-polyglot-world-with-xtensor-d81ff3865d6", + "title": "Scientific Computing in a Polyglot World with Xtensor", + "image": "https://miro.medium.com/max/540/1*mtoK6AtRa0pNGGm576Yj0w.jpeg", + "summary": "The One Language to Rule Them All probably does not exist yet. In the world of interactive scientific computing, countless articles and blog posts argue on the merits of R, Python, Julia and other…", + "date": "May 5, 2017", + "authors": "Sylvain Corlay", + "imageID": "blogpost-image-1", + "imageWidth": "180px" + } +] \ No newline at end of file diff --git a/src/components/blog/blogpostsDetails.ts b/src/components/blog/blogpostsDetails.ts deleted file mode 100644 index 130ec659a..000000000 --- a/src/components/blog/blogpostsDetails.ts +++ /dev/null @@ -1,282 +0,0 @@ -import FannyAvatarUrl from "@site/static/img/avatars/Fanny.png"; -export const blogpostsDetails = [ - { - url: "https://medium.com/@SylvainCorlay/commit-cdf57415b94b", - title: "Commit!", - image: "https://miro.medium.com/v2/0*3gKzwBOWprSRs35k", - imageWidth: "270px", - summary: - "Open-source projects are not just about the latest exciting updates and features, but also the principles and people that drive these projects to success. In this blog post, I reflect on the dynamics…", - date: "May 29, 2024", - authors: "Sylvain Corlay", - }, - { - url: "/blogs/Fanny", - title: "In memoriam: Fanny Loustau-Chartez", - image: FannyAvatarUrl, - imageWidth: "180px", - summary: - "It is with great sadness that we announce the passing of our colleague and friend, Fanny Loustau Chartez, who served as the Chief Financial Officer of QuantStack since 2021.", - date: "May 16, 2024", - authors: "Sylvain Corlay", - }, - { - url: "https://medium.com/@PyDataParis/announcing-pydata-paris-2024-700220accc72", - title: "Announcing PyData Paris 2024", - image: - "https://miro.medium.com/v2/resize:fit:1100/format:webp/0*jYrq6Du7WpJDOTUf", - imageWidth: "270px", - summary: - "We are thrilled to announce the upcoming PyData Paris 2024, the gathering of the open-source data science and AI/ML community in France. PyData Paris will take place at the Cité des Sciences from September 25 to September 26, 2024.", - date: "March 11, 2024", - authors: "Sylvain Corlay", - }, - { - url: "https://blog.jupyter.org/meet-xeus-r-a-future-proof-jupyter-kernel-for-r-1adc5fdd09ab", - title: "Meet Xeus-R: a future-proof Jupyter kernel for R", - image: - "https://miro.medium.com/v2/resize:fit:1400/format:webp/1*cFmKZKFycjvG1v_Xub4snQ.png", - imageWidth: "270px", - summary: - "Today, we, a collaborative team led by Romain François and supported by QuantStack, are thrilled to announce the initial release of Xeus-R, a future-proof Jupyter kernel for R.", - date: "January 22nd, 2024", - authors: "Romain François", - }, - - { - url: "https://medium.com/@QuantStack/quantstack-2023-in-review-94fea0a35520", - title: "QuantStack: 2023 in review", - image: - "https://miro.medium.com/v2/resize:fit:2000/format:webp/0*rwQcR7xvAIr_7pzY", - imageWidth: "270px", - summary: - "Since QuantStack was founded in 2016, we have remained committed to releasing our work under permissive open-source licenses. Here are some highlights of the 2023 achievements. Buckle up!", - date: "January 3rd, 2023", - authors: "Sylvain Corlay", - }, - { - url: "https://blog.jupyter.org/recent-keyboard-navigation-improvements-in-jupyter-4df32f97628d", - title: "Recent keyboard navigation improvements in Jupyter", - image: - "https://upload.wikimedia.org/wikipedia/commons/thumb/5/5e/W3C_icon.svg/320px-W3C_icon.svg.png", - imageWidth: "240px", - summary: - "Upcoming versions of JupyterLab (4.1.0) and Notebook (7.1.0) will include major keyboard accessibility fixes.", - date: "December 16th, 2023", - authors: "Nicolas Brichet, Gabriel Fouasnon", - }, - - { - url: "https://blog.jupyter.org/and-voici-e02367197ba2", - title: "And Voici!", - image: - "https://miro.medium.com/v2/resize:fit:1400/format:webp/1*Tjh9IaZrdJhTQzxyIOgI8Q.png", - imageWidth: "270px", - summary: - "Voici (meaning “here is” in French) is a novel project reshaping Jupyter-based interactive dashboards by combining Voilà and JupyterLite features. It facilitates the creation of dynamic, in-browser environments for data visualization and exploration.", - date: "December 6th, 2023", - authors: "Trung Duc Le, Martin Renou", - }, - { - url: "https://blog.jupyter.org/plug-your-application-into-the-jupyter-world-805e48918801", - title: "Plug your application into the Jupyter world", - image: - "https://miro.medium.com/v2/resize:fit:1400/format:webp/1*ENzq7i52UtqxESs4UTKBYw.png", - imageWidth: "270px", - summary: - "Kernels are a simple but powerful abstraction in the Jupyter architecture. They encapsulate language interpreters and make them accessible through a standardized interface. This is the key to…", - date: "October 23rd, 2023", - authors: "David Brochart", - }, - - { - url: "https://blog.jupyter.org/voil%C3%A0-0-5-0-homecoming-66f2465aa86f", - title: " Voilà 0.5 - Homecoming", - image: - "https://miro.medium.com/v2/resize:fit:4800/format:webp/1*W1dHdjWC0CYoLjCWXXxU2w.png", - imageWidth: "270px", - summary: - "Following the launch of Jupyter Notebook 7, it is now Voilà’s turn to join the JupyterLab family. In Version 0.5.0, the front-end of Voilà has been rebuilt from scratch using JupyterLab 4.0 components, just like in the case of Notebook 7.", - date: "September 25th, 2023", - authors: "Jeremy Tuloup, Martin Renou, Trung Duc Le", - }, - { - url: "https://blog.jupyter.org/announcing-jupyter-notebook-7-8d6d66126dcf", - title: "Announcing Jupyter Notebook 7", - image: - "https://miro.medium.com/v2/resize:fit:1400/format:webp/0*1RXUtbuPrEJC95ut.jpg", - imageWidth: "270px", - summary: - "Jupyter Notebook 7 is the most significant release of the Jupyter Notebook in years. Some highlights of this release include real-time collaboration, interactive debugging, table of contents, theming and dark mode, internationalization, improved accessibility, compact view on mobile devices.", - date: "July 26th, 2023", - authors: "Jeremy Tuloup", - }, - { - url: "https://blog.jupyter.org/jupytercon-2023-recordings-now-live-on-youtube-17564b75a2a", - title: "🎉 JupyterCon 2023 recordings now live on YouTube! 🎉", - image: - "https://miro.medium.com/v2/resize:fit:1400/format:webp/1*j0Cai6fnoYoJ-axQzIvpaA.png", - imageWidth: "270px", - summary: - "Get ready to relive the magic of JupyterCon 2023, because the long-awaited moment is finally here! The JupyterCon YouTube channel has just dropped a treasure trove of content — all the talk and keynote recordings from the most epic conference of the year.", - date: "July 22nd, 2023", - authors: "Gayle Ollington, Sylvain Corlay", - }, - { - url: "https://blog.jupyter.org/a-theme-editor-for-jupyterlab-8f08ab62894d", - title: "A theme editor for JupyterLab", - image: - "https://miro.medium.com/v2/resize:fit:4800/format:webp/0*5OLBiA8tmTbD1Nan.png", - imageWidth: "270px", - summary: - "To lower the bar for customizing JupyterLab we created a new tool providing a simple interface for tuning the JupyterLab appearance interactively.", - date: "June 19th, 2023", - authors: "Florence Haudin", - }, - { - url: "https://blog.jupyter.org/collaborative-cad-in-jupyterlab-8eb9e8f81f0", - title: "Collaborative CAD in JupyterLab", - image: - "https://miro.medium.com/v2/resize:fit:1400/format:webp/1*9r3Xz-v5wyuz8aAKY2WV-A.png", - imageWidth: "270px", - summary: - "Introducing JupyterCAD, a tool that integrates Computer-Aided Design (CAD) capabilities into JupyterLab.", - date: "June 2nd, 2023", - authors: "Duc Trung Le, Martin Renou", - }, - { - url: "https://blog.jupyter.org/congratulations-distinguished-contributors-7a7b215b8bd0", - title: "Congratulations, Distinguished Contributors!", - image: - "https://miro.medium.com/v2/resize:fit:720/format:webp/1*awcttRVT1kQ1dWqJig7DWQ.jpeg", - imageWidth: "270px", - summary: - "We are proud to announce the recipients of the Jupyter Distinguished Contributor (JDC) award for the 2022 cohort of contributors.", - date: "June 2nd, 2023", - authors: "Johan Mabille", - }, - { - url: "https://blog.jupyter.org/embed-interactive-itkwidgets-3d-renderings-into-jupyterlite-deployments-10eb9ea30980", - title: - "Embed interactive itkwidgets 3D renderings into JupyterLite deployments", - image: "https://miro.medium.com/v2/resize:fit:1100/0*_zowwA1kefuHdpEX.gif", - imageWidth: "160px", - summary: - "A tutorial that demonstrates a zero-server, interactive 3D rendering notebook and walks through the quick and easy configuration that can be customized to your needs.", - date: "March 15th, 2023", - authors: - "Matt McCormick, Brianna Major, Jeremy Tuloup, Wei Ouyang, Stephen Aylward", - }, - { - url: "https://blog.jupyter.org/improving-the-accessibility-of-jupyter-6c695db518d3", - title: "Improving the accessibility of Jupyter", - image: "https://miro.medium.com/v2/resize:fit:4800/0*7imwXY7uST5QSNfi", - imageWidth: "270px", - summary: - "This article presents some of the recent accessibility improvements in the Jupyter Notebook codebase.", - date: "February 24th, 2023", - authors: - "Nicolas Brichet, Johan Mabille, Jeremy Tuloup, Frédéric Collonval, Sylvain Corlay", - }, - { - url: "https://blog.jupyter.org/a-jupyter-kernel-for-gnu-octave-b6d29e56341f", - title: "A Jupyter kernel for GNU Octave", - image: "https://miro.medium.com/max/4800/0*_HZJpXD-awr4mPDG", - imageWidth: "270px", - summary: - "We are happy to announce the xeus-octave project, a Jupyter kernel for GNU Octave. Xeus-octave was created by Giulio Girardi, recently joined by Antoine Prouvost - and has been incorporated into the Project Jupyter governance.", - date: "January 11th, 2023", - authors: "Giulio Girardi, Antoine Prouvost", - }, - { - url: "https://medium.com/@QuantStack/quantstack-2022-in-review-7d4704b1db42", - title: "QuantStack: 2022 in review", - image: "https://miro.medium.com/max/1400/1*QnDNfCXtgb2vLbmmag9ngQ.webp", - imageWidth: "270px", - summary: - "2022 was an amazing year of innovation for the open-source developers at QuantStack. Developments range from major improvements to the Jupyter project to the packaging ecosystem and high-performance computing.", - date: "December 26th, 2022", - authors: "Sylvain Corlay", - }, - { - url: "https://medium.com/@AntoineProuvost/managing-conflicts-with-mamba-6a5fa10ed6a", - title: "Managing conflicts with Mamba", - image: "https://miro.medium.com/max/4800/1*4FgY6y9QfGLMO3qtim-zSw.png", - imageWidth: "270px", - summary: - "A key aspect of package management is finding a set of compatible versions of the required packages. Indeed, even in the case when few packages are explicitly required, second-order dependencies may…", - date: "November 29th, 2022", - authors: "Antoine Prouvost", - }, - { - url: "https://blog.jupyter.org/jupytercon-is-back-in-2023-90e5c25eeec9", - title: "JupyterCon is back in 2023", - image: "https://miro.medium.com/max/1400/1*Mn75xGD3GWU0tpI7Rx9utQ.png", - imageWidth: "270px", - summary: - "JupyterCon 2023 will be held May 10–12 (Thursday to Friday) in the city of light, Paris, France at the largest science museum in Europe, the Cité des Sciences et de l’Industrie.", - date: "October 17th, 2022", - authors: "Gayle Ollington", - }, - { - url: "https://blog.jupyter.org/accelerating-jupyterlab-68942bb8d602", - title: "Accelerating JupyterLab", - image: "https://miro.medium.com/max/1400/1*EZX55-XLmck_LfFfV3KeaA.png", - imageWidth: "270px", - summary: - "The next major release of JupyterLab will be significantly faster than previous versions. This was achieved both through systematic tracking of performance bugs and through significant upgrades to the Jupyter communication protocol and rendering mechanism for documents.", - date: "September 15th, 2022", - authors: "Frédéric Collonval, Johan Mabille, David Brochart, Afshin Darian", - }, - { - url: "https://blog.jupyter.org/upgrading-nbgrader-99c56ae56c47", - title: "Upgrading nbgrader", - image: "https://miro.medium.com/max/922/1*C1fPJUhN8pk86GIXCQq5AA.png", - imageWidth: "270px", - summary: - "Project Jupyter provides a broad collection of open-source tools for interactive computing that has become ubiquitous in data science and scientific computing, and is very popular in educational…", - date: "September 15th, 2022", - authors: "Nicolas Brichet", - }, - { - url: "https://blog.jupyter.org/visual-programming-in-jupyterlab-with-blockly-7731ec3e113c", - title: " Visual programming in JupyterLab with Blockly", - image: "https://miro.medium.com/max/1400/0*yEQ8djozBKDLcCxZ", - imageWidth: "270px", - summary: - "When moving from block-based programming to a more classical language like Python, students often have to switch to a completely new environment. In order to provide a smooth ramp of complexity for learners, we designed a JupyterLab extension for Blockly so that Jupyter can be used from the very first steps of their learning journey.", - date: "July 29th, 2022", - authors: "Denisa Checiu, Carlos Herrero", - }, - { - url: "https://blog.jupyter.org/mamba-meets-jupyterlite-88ef49ac4dc8", - title: "Mamba meets JupyterLite", - image: "https://miro.medium.com/max/1400/1*JCiZIwwkFen5kwEA2rK4SA.png", - imageWidth: "270px", - summary: - "JupyterLite is a Jupyter distribution that runs entirely in the web browser without any server components. To achieve this, all language kernels must also run in the browser. A significant benefit of…", - date: "July 14th, 2022", - authors: "Thorsten Beier, Martin Renou", - }, - { - url: "https://blog.jupyter.org/inspector-jupyterlab-404cce3e1df6", - title: "Inspector JupyterLab", - image: "https://miro.medium.com/max/1215/1*pRzjLlwQIIMhJmx2G_3-Mw.png", - imageWidth: "270px", - summary: - "JupyterLab provides multiple ways to improve your coding workflow: code highlighting, code completion, theming, debugger with rich variable rendering and more.", - date: "April 11th, 2022", - authors: "Martin Renou", - }, - { - url: "https://blog.pyodide.org/posts/canvas-renderer-matplotlib-in-pyodide/", - title: "HTML5 based renderer for Matplotlib in Pyodide", - image: - "https://blog.pyodide.org/posts/canvas-renderer-matplotlib-in-pyodide/featured.png", - imageWidth: "270px", - summary: - "In this post, we present a new backend for Matplotlib enabling the rendering of figures in the browser by leveraging the <canvas> element. This showcases how JavaScript and Python can interact with each other, thanks to Pyodide.", - date: "April 1st, 2022", - authors: "Madhur Tandon", - }, -]; diff --git a/src/components/blog/index.tsx b/src/components/blog/index.tsx index 588d0ae4a..8563da78f 100644 --- a/src/components/blog/index.tsx +++ b/src/components/blog/index.tsx @@ -1,16 +1,18 @@ import styles from "./styles.module.css"; -import { blogpostsDetails } from "./blogpostsDetails"; import React, { useState } from "react"; import BlogpostCard from "./BlogpostCard"; -export default function BlogsComponent() { + +export default function BlogsComponent({ blogpostsDetails }) { + const numberOfBlogs = blogpostsDetails.length const [searchField, setSearchField] = useState(""); const filteredBlogPosts = blogpostsDetails.filter((blogpost) => { + return ( blogpost.title.toLowerCase().includes(searchField.toLowerCase()) || blogpost.authors.toLowerCase().includes(searchField.toLowerCase()) || - blogpost.date.toLowerCase().includes(searchField.toLowerCase())|| + blogpost.date.toLowerCase().includes(searchField.toLowerCase()) || blogpost.summary.toLowerCase().includes(searchField.toLowerCase()) ); }); @@ -45,13 +47,15 @@ export default function BlogsComponent() {
diff --git a/src/components/blog/styles.module.css b/src/components/blog/styles.module.css index 01f6b11b1..063da4286 100644 --- a/src/components/blog/styles.module.css +++ b/src/components/blog/styles.module.css @@ -10,6 +10,11 @@ padding: var(--ifm-spacing-xl); } +.blog_time_index { + font-size: 10px; + font-family: var(--ifm-font-family-roboto); +} + .blogpost_image_container { display: flex; align-items: center; diff --git a/src/components/blog/yml-to-json.ts b/src/components/blog/yml-to-json.ts new file mode 100644 index 000000000..2a243003a --- /dev/null +++ b/src/components/blog/yml-to-json.ts @@ -0,0 +1,53 @@ + + + +const DEFAULT_IMAGE_WIDTH = "270px"; +const yaml = require("js-yaml"); +const fs = require("fs"); +let yamlFile = fs.readFileSync("_config.yml", "utf8"); +let obj = yaml.load(yamlFile); +const blogpostsDetails = obj["blog"]; +const NUMBER_OF_BLOGS = blogpostsDetails.length; +const imagesToBeReduced = [1, 9, 26, 30, 44, 48, 67, 68, 75, 101, 110]; +const imagesToBeSlightlyReduced = [3, 42, 53, 61, 62, 80, 104, 107]; +const imagesToBeExpanded = [6, 56, 66, 112]; + +const containerWidth= 305; +const containerHeight=180; + +blogpostsDetails.map((blogpost, index) => { + const timeIndex = NUMBER_OF_BLOGS - index; /* starting at 1*/ + blogpost.imageID = "blogpost-image-"+timeIndex + if (timeIndex === 114) { + blogpost.url = "/blogs/Fanny"; + blogpost.title = "In memoriam: Fanny Loustau-Chartez"; + blogpost.image="/img/avatars/Fanny.png"; + blogpost.imageWidth = "180px"; + (blogpost.summary = + "It is with great sadness that we announce the passing of our colleague and friend, Fanny Loustau Chartez, who served as the Chief Financial Officer of QuantStack since 2021."), + (blogpost.date = "May 16, 2024"); + blogpost.authors = "Sylvain Corlay"; + } + else if(timeIndex===73){ + blogpost.image= "/img/logos/EcolePolytechnique.png"; + blogpost.imageWidth = "180px"; + } + else if (imagesToBeReduced.includes(timeIndex)) { + blogpost.imageWidth = "180px"; + } else if (imagesToBeSlightlyReduced.includes(timeIndex)) { + blogpost.imageWidth = "200px"; + } else if (imagesToBeExpanded.includes(timeIndex)) { + console.log("time index:", timeIndex); + blogpost.imageWidth = "300px"; + } else { + blogpost.imageWidth = DEFAULT_IMAGE_WIDTH; + } +}); + +const JSONToFile = (blogpostsDetails, filename) => + fs.writeFileSync( + `${filename}.json`, + JSON.stringify(blogpostsDetails, null, 2) + ); + +JSONToFile(blogpostsDetails, "blogpostsDetails"); diff --git a/src/components/home/News/index.tsx b/src/components/home/News/index.tsx index 52cefa0d0..1c6eb88bb 100644 --- a/src/components/home/News/index.tsx +++ b/src/components/home/News/index.tsx @@ -1,9 +1,10 @@ import BlogpostCard from "../../blog/BlogpostCard"; -import { blogpostsDetails } from "../../blog/blogpostsDetails"; +import blogpostsDetails from "@site/src/components/blog/blogpostsDetails.json"; import Link from "@docusaurus/Link"; import styles from "./styles.module.css"; export default function News() { + const numberOfBlogs = blogpostsDetails.length; return (
@@ -14,17 +15,26 @@ export default function News() {
  • - +
  • - +
  • - +
diff --git a/src/pages/blog.tsx b/src/pages/blog.tsx index 256bb8d1c..8073ed3a7 100644 --- a/src/pages/blog.tsx +++ b/src/pages/blog.tsx @@ -1,13 +1,14 @@ import useDocusaurusContext from "@docusaurus/useDocusaurusContext"; import Layout from "@theme/Layout"; import BlogsComponent from "../components/blog"; +import blogpostDetails from "@site/src/components/blog/blogpostsDetails.json"; export default function BlogPage(): JSX.Element { const { siteConfig } = useDocusaurusContext(); return ( - + ); } diff --git a/src/pages/blogs/Fanny.tsx b/src/pages/blogs/Fanny.tsx index da8b4f23e..5e9b721b6 100644 --- a/src/pages/blogs/Fanny.tsx +++ b/src/pages/blogs/Fanny.tsx @@ -1,5 +1,6 @@ import Fanny from "@site/src/components/about/Team/Fanny.md"; import styles from "@site/src/components/about/styles.module.css"; +import FannyAvatarUrl from "@site/static/img/avatars/Fanny.png"; export default function FannyComponent() { return ( @@ -9,7 +10,7 @@ export default function FannyComponent() {
- +
diff --git a/tsconfig.json b/tsconfig.json index 76e5d6156..113ca0143 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -2,7 +2,10 @@ // This file is not used in compilation. It is here just for a nice editor experience. "extends": "@docusaurus/tsconfig", "compilerOptions": { - "baseUrl": "." + "baseUrl": ".", + "resolveJsonModule": true, + "esModuleInterop": true, + }, "typeRoots": [ "node_modules/@types","./global.d.ts"