From 457af3facbdbf371f819fa29c6c4b6fc0ab9b137 Mon Sep 17 00:00:00 2001 From: Kamran Ahmed Date: Wed, 31 Jul 2024 23:10:11 +0100 Subject: [PATCH] Redraw Python roadmap using our editor --- .astro/settings.json | 2 +- .../100-python-basics/106-string-methods.md | 10 - .../python/content/100-python-roadmap-note.md | 3 - .../102-python-advanced-topics/index.md | 3 - .../100-basic-git-usage.md | 10 - .../103-version-control-systems/index.md | 9 - .../104-repo-hosting-services/100-github.md | 12 - .../104-repo-hosting-services/101-gitlab.md | 9 - .../102-bitbucket.md | 9 - .../104-repo-hosting-services/index.md | 9 - .../100-synchronous/index.md | 7 - .../101-asynchronous/index.md | 8 - .../content/107-python-testing/index.md | 10 - ...tp.md => aiohttp@IBVAvFtN4mnIPbIuyUvEb.md} | 0 ...-and-linked-lists@OPD4WdMO7q4gRZMcRCQh1.md | 1 + ...and-linked-lists@kIuns7FOwapwtFLKo1phQ.md} | 0 .../asynchrony@Mow7RvropbC4ZGDpcGZmw.md | 1 + ... => basic-syntax@6xRncUs3_vxVbDur567QA.md} | 0 ...nary-search-tree@7NZlydjm4432vLY1InBS7.md} | 0 ...inary-search-tree@uJIqgsqUbE62Tyo3K75Qx.md | 1 + src/data/roadmaps/python/content/black.md | 5 + ...es.md => builtin@08XifLQ20c4FKI_4AWNBQ.md} | 0 ...es.md => classes@AqwzR8dZKLQIoj_6KKZ3t.md} | 0 .../code-formatting@0F0ppU_ClIUKZ23Q6BVZp.md | 1 + .../common-packages@_94NrQ3quc4t_PPOsFSN0.md | 14 + .../concurrency@u4nRzWQ4zhDFMOrZ2I_uJ.md | 1 + ...onda.md => conda@uh67D1u-Iv5cZamRgFEJg.md} | 0 ... => conditionals@NP1kjSk0ujU0Gx-ajNHlR.md} | 0 .../context-manager@KAXF2kUAOvtBZhY8G9rkI.md | 1 + ...les.md => custom@l7k0qTYe42wYBTlT2-1cy.md} | 0 ...ures--algorithms@VJSIbYJcy2MC6MOFBrqXi.md} | 0 ...md => decorators@pIluLJkySqn_gI_GykV6G.md} | 0 .../dictionaries@bc9CL_HMT-R6nXO1eR-gP.md | 1 + ...ngo.md => django@x1V8GjdjANTnhP6YXMbgC.md} | 0 ...st.md => doctest@aVclygxoA9ePU5IxaORSH.md} | 0 .../exceptions@fNTb9y3zs1HPYclAmu_Wv.md | 1 + ...i.md => fast-api@XeQSmvAsGSTi8dd7QVHxn.md} | 0 ...lask.md => flask@HKsGyRzntjh1UbRZSWh_4.md} | 0 ...uiltin-functions@-DJgS6l2qngfwurExlmmT.md} | 0 ...ator-expressions@jnLIVRrWxcX3yq3Op91Vr.md} | 0 ...ent.md => gevent@InUJIGmTnf0X4cSoLuCEQ.md} | 0 .../content/gil@bS7WeVKm2kEElu3sBKcIC.md | 1 + ...d => hash-tables@0-m8jVuDKE8hX1QorKGTM.md} | 0 .../hash-tables@DG4fi1e5ec2BVckPLsTJS.md | 1 + ...stacks-and-queues@0NlRczh6ZEaFLlT6LORWz.md | 1 + ...tacks-and-queues@rSfg5M65LyZldhrdWOr90.md} | 0 ...d => inheritance@S0FLE70szSVUPI0CDEQK7.md} | 0 ....md => iterators@aB1LSQjDEQb_BxueOcnxU.md} | 0 ...as.md => lambdas@aWHgAk959DPUZL46CeRiI.md} | 0 ...earn-a-framework@0-ShORjGnQlAdcwjtxdEB.md} | 0 .../learn-the-basics@GISOFMKvnBys0O0IMpz2J.md | 1 + ...learn-the-basics@JDDG4KfhtIlw1rkNCzUli.md} | 0 ...t-comprehensions@4gtmtYWYRWqwLdZRL0XMg.md} | 0 ...ries.md => lists@UT_SR7G-LYtzqooWrEtF1.md} | 0 .../content/loops@Dvy7BnNzK55qbh_SgOk8m.md | 1 + ...> methods-dunder@zAS4YiEJ6VPsyABrkIG8i.md} | 0 ...ex.md => modules@274uk28wzxn6EKWQzLpHs.md} | 0 .../multiprocessing@HSY5OUc_M5S6OcFXPRtkx.md | 1 + .../content/mypy@gIcJ3bUVQXqO1Wx4gUKd5.md | 5 + ...-nose.md => nose@SSnzpijHLO5_l7DNEoMfx.md} | 0 ...nted-programming@P_Di-XPSDITmU3xKQew8G.md} | 0 ...package-managers@qeCMw-sJ2FR4UxvU9DDzv.md} | 0 ....md => paradigms@4GU5HNi3W8yFkImVY9ZpW.md} | 0 ...01-pip.md => pip@iVhQnp6hpgVZDNJ0XoVra.md} | 0 .../content/pipenv@IWq-tfkz-pSC1ztZl60vM.md | 7 + .../plotly-dash@7zcpXN3krnS3tMRWVNIVe.md | 1 + ...try.md => poetry@uXd2B01GVBEQNXQE8RATT.md} | 0 .../content/pydantic@W3VALz5evFo1qqkQbMN1R.md | 7 + .../content/pyenv@N5VaKMbgQ0V_BC5tadV65.md | 7 + ...-pypi.md => pypi@1dfOTOGsOk5XE3bnZs8Ht.md} | 0 .../pyprojecttoml@GHKAY9gOykEbxkEeR30wL.md | 10 + ...id.md => pyramid@DHtskqATeAVKgaazdhXKD.md} | 0 .../content/pyre@9mFR_ueXbIB2IrkqU2s85.md | 7 + .../content/pyright@1q9HWgu9jDTK757hTNOmE.md | 7 + ...est.md => pytest@3FDwJpesfelEyJrNWtm0V.md} | 0 ....md => recursion@94KnPMQdNTOwQkUv37tAk.md} | 0 .../recursion@kLBgy_nxxjE8SxdVi04bq.md | 1 + ...ular-expressions@7t6mJBsaFMWPi7o9fbhhq.md} | 0 .../content/ruff@6cB0pvUO1-gvCtgqozP-Q.md | 5 + ...anic.md => sanic@9RGpqsj9jHz0_-r7EvRcw.md} | 0 .../content/sets@soZFqivM3YBuljeX6PoaX.md | 1 + ...rting-algorithms@YNptpfK9qv2ovmkUXLkJT.md} | 0 ...orting-algorithms@vvTmjcWCVclOPY4f_5uB0.md | 1 + .../content/sphinx@maYNuTKYyZndxk1z29-UY.md | 5 + .../static-typing@1PXApuUpPmJjgi12cmWo4.md | 7 + .../content/testing@WQOYjuwKIWB2meea4JnsV.md | 1 + .../threading@UIx0XYaOgXXlYbbQtjiPq.md | 1 + .../topic-node@Iwr_DtqGn9kQTUBPJpplf.md | 1 + ...do.md => tornado@zey2C6BdzsHJAlb_K3qrP.md} | 0 .../content/tox@jPFOiwbqfaGshaGDBWb5x.md | 7 + .../content/tuples@i7xIGiXU-k5UIKHIhQPjE.md | 1 + ... => type-casting@R9DQNc0AyAQ2HLpP4HOk6.md} | 0 .../content/typing@o1wi39VnjnFfWIC8XcuAK.md | 5 + ...unittest--pyunit@b4he_RO17C3ScNeUd6v2b.md} | 0 .../content/uv@p3Frfs6oxpuciUzeCEsvb.md | 7 + ...s-and-data-types@dEFLBGpiH6nbSMeR7ecaT.md} | 0 .../virutalenv@_IXXTSwQOgYzYIUuKVWNE.md | 7 + .../content/yapf@tsh_vbhzKz1-H9Vh69tsK.md | 7 + .../roadmaps/python/migration-mapping.json | 48 + src/data/roadmaps/python/python.json | 8429 +++++++++-------- src/data/roadmaps/python/python.md | 3 +- src/lib/resource-progress.ts | 1 + 102 files changed, 4472 insertions(+), 4251 deletions(-) delete mode 100644 src/data/roadmaps/python/content/100-python-basics/106-string-methods.md delete mode 100644 src/data/roadmaps/python/content/100-python-roadmap-note.md delete mode 100644 src/data/roadmaps/python/content/102-python-advanced-topics/index.md delete mode 100644 src/data/roadmaps/python/content/103-version-control-systems/100-basic-git-usage.md delete mode 100644 src/data/roadmaps/python/content/103-version-control-systems/index.md delete mode 100644 src/data/roadmaps/python/content/104-repo-hosting-services/100-github.md delete mode 100644 src/data/roadmaps/python/content/104-repo-hosting-services/101-gitlab.md delete mode 100644 src/data/roadmaps/python/content/104-repo-hosting-services/102-bitbucket.md delete mode 100644 src/data/roadmaps/python/content/104-repo-hosting-services/index.md delete mode 100644 src/data/roadmaps/python/content/106-python-frameworks/100-synchronous/index.md delete mode 100644 src/data/roadmaps/python/content/106-python-frameworks/101-asynchronous/index.md delete mode 100644 src/data/roadmaps/python/content/107-python-testing/index.md rename src/data/roadmaps/python/content/{106-python-frameworks/101-asynchronous/101-aiohttp.md => aiohttp@IBVAvFtN4mnIPbIuyUvEb.md} (100%) create mode 100644 src/data/roadmaps/python/content/arrays-and-linked-lists@OPD4WdMO7q4gRZMcRCQh1.md rename src/data/roadmaps/python/content/{101-data-structures-and-algorithms/100-arrays-linked-lists.md => arrays-and-linked-lists@kIuns7FOwapwtFLKo1phQ.md} (100%) create mode 100644 src/data/roadmaps/python/content/asynchrony@Mow7RvropbC4ZGDpcGZmw.md rename src/data/roadmaps/python/content/{100-python-basics/100-basic-syntax.md => basic-syntax@6xRncUs3_vxVbDur567QA.md} (100%) rename src/data/roadmaps/python/content/{101-data-structures-and-algorithms/103-binary-search-trees.md => binary-search-tree@7NZlydjm4432vLY1InBS7.md} (100%) create mode 100644 src/data/roadmaps/python/content/binary-search-tree@uJIqgsqUbE62Tyo3K75Qx.md create mode 100644 src/data/roadmaps/python/content/black.md rename src/data/roadmaps/python/content/{102-python-advanced-topics/105-modules/100-builtin-modules.md => builtin@08XifLQ20c4FKI_4AWNBQ.md} (100%) rename src/data/roadmaps/python/content/{102-python-advanced-topics/100-oop/102-classes.md => classes@AqwzR8dZKLQIoj_6KKZ3t.md} (100%) create mode 100644 src/data/roadmaps/python/content/code-formatting@0F0ppU_ClIUKZ23Q6BVZp.md create mode 100644 src/data/roadmaps/python/content/common-packages@_94NrQ3quc4t_PPOsFSN0.md create mode 100644 src/data/roadmaps/python/content/concurrency@u4nRzWQ4zhDFMOrZ2I_uJ.md rename src/data/roadmaps/python/content/{105-python-package-managers/102-conda.md => conda@uh67D1u-Iv5cZamRgFEJg.md} (100%) rename src/data/roadmaps/python/content/{100-python-basics/102-conditionals.md => conditionals@NP1kjSk0ujU0Gx-ajNHlR.md} (100%) create mode 100644 src/data/roadmaps/python/content/context-manager@KAXF2kUAOvtBZhY8G9rkI.md rename src/data/roadmaps/python/content/{102-python-advanced-topics/105-modules/101-custom-modules.md => custom@l7k0qTYe42wYBTlT2-1cy.md} (100%) rename src/data/roadmaps/python/content/{101-data-structures-and-algorithms/index.md => data-structures--algorithms@VJSIbYJcy2MC6MOFBrqXi.md} (100%) rename src/data/roadmaps/python/content/{102-python-advanced-topics/102-decorators.md => decorators@pIluLJkySqn_gI_GykV6G.md} (100%) create mode 100644 src/data/roadmaps/python/content/dictionaries@bc9CL_HMT-R6nXO1eR-gP.md rename src/data/roadmaps/python/content/{106-python-frameworks/100-synchronous/100-django.md => django@x1V8GjdjANTnhP6YXMbgC.md} (100%) rename src/data/roadmaps/python/content/{107-python-testing/102-doctest.md => doctest@aVclygxoA9ePU5IxaORSH.md} (100%) create mode 100644 src/data/roadmaps/python/content/exceptions@fNTb9y3zs1HPYclAmu_Wv.md rename src/data/roadmaps/python/content/{106-python-frameworks/102-fastapi.md => fast-api@XeQSmvAsGSTi8dd7QVHxn.md} (100%) rename src/data/roadmaps/python/content/{106-python-frameworks/100-synchronous/101-flask.md => flask@HKsGyRzntjh1UbRZSWh_4.md} (100%) rename src/data/roadmaps/python/content/{100-python-basics/104-functions.md => functions-builtin-functions@-DJgS6l2qngfwurExlmmT.md} (100%) rename src/data/roadmaps/python/content/{102-python-advanced-topics/107-generator-expressions.md => generator-expressions@jnLIVRrWxcX3yq3Op91Vr.md} (100%) rename src/data/roadmaps/python/content/{106-python-frameworks/101-asynchronous/100-gevent.md => gevent@InUJIGmTnf0X4cSoLuCEQ.md} (100%) create mode 100644 src/data/roadmaps/python/content/gil@bS7WeVKm2kEElu3sBKcIC.md rename src/data/roadmaps/python/content/{101-data-structures-and-algorithms/102-hash-tables.md => hash-tables@0-m8jVuDKE8hX1QorKGTM.md} (100%) create mode 100644 src/data/roadmaps/python/content/hash-tables@DG4fi1e5ec2BVckPLsTJS.md create mode 100644 src/data/roadmaps/python/content/heaps-stacks-and-queues@0NlRczh6ZEaFLlT6LORWz.md rename src/data/roadmaps/python/content/{101-data-structures-and-algorithms/101-heaps-stacks-queues.md => heaps-stacks-and-queues@rSfg5M65LyZldhrdWOr90.md} (100%) rename src/data/roadmaps/python/content/{102-python-advanced-topics/100-oop/101-inheritance.md => inheritance@S0FLE70szSVUPI0CDEQK7.md} (100%) rename src/data/roadmaps/python/content/{102-python-advanced-topics/104-iterators.md => iterators@aB1LSQjDEQb_BxueOcnxU.md} (100%) rename src/data/roadmaps/python/content/{102-python-advanced-topics/103-lambdas.md => lambdas@aWHgAk959DPUZL46CeRiI.md} (100%) rename src/data/roadmaps/python/content/{106-python-frameworks/index.md => learn-a-framework@0-ShORjGnQlAdcwjtxdEB.md} (100%) create mode 100644 src/data/roadmaps/python/content/learn-the-basics@GISOFMKvnBys0O0IMpz2J.md rename src/data/roadmaps/python/content/{100-python-basics/index.md => learn-the-basics@JDDG4KfhtIlw1rkNCzUli.md} (100%) rename src/data/roadmaps/python/content/{102-python-advanced-topics/106-list-comprehensions.md => list-comprehensions@4gtmtYWYRWqwLdZRL0XMg.md} (100%) rename src/data/roadmaps/python/content/{100-python-basics/105-lists-tuples-sets-dictionaries.md => lists@UT_SR7G-LYtzqooWrEtF1.md} (100%) create mode 100644 src/data/roadmaps/python/content/loops@Dvy7BnNzK55qbh_SgOk8m.md rename src/data/roadmaps/python/content/{102-python-advanced-topics/100-oop/100-methods-dunder.md => methods-dunder@zAS4YiEJ6VPsyABrkIG8i.md} (100%) rename src/data/roadmaps/python/content/{102-python-advanced-topics/105-modules/index.md => modules@274uk28wzxn6EKWQzLpHs.md} (100%) create mode 100644 src/data/roadmaps/python/content/multiprocessing@HSY5OUc_M5S6OcFXPRtkx.md create mode 100644 src/data/roadmaps/python/content/mypy@gIcJ3bUVQXqO1Wx4gUKd5.md rename src/data/roadmaps/python/content/{107-python-testing/102-nose.md => nose@SSnzpijHLO5_l7DNEoMfx.md} (100%) rename src/data/roadmaps/python/content/{102-python-advanced-topics/100-oop/index.md => object-oriented-programming@P_Di-XPSDITmU3xKQew8G.md} (100%) rename src/data/roadmaps/python/content/{105-python-package-managers/index.md => package-managers@qeCMw-sJ2FR4UxvU9DDzv.md} (100%) rename src/data/roadmaps/python/content/{102-python-advanced-topics/108-paradigms.md => paradigms@4GU5HNi3W8yFkImVY9ZpW.md} (100%) rename src/data/roadmaps/python/content/{105-python-package-managers/101-pip.md => pip@iVhQnp6hpgVZDNJ0XoVra.md} (100%) create mode 100644 src/data/roadmaps/python/content/pipenv@IWq-tfkz-pSC1ztZl60vM.md create mode 100644 src/data/roadmaps/python/content/plotly-dash@7zcpXN3krnS3tMRWVNIVe.md rename src/data/roadmaps/python/content/{105-python-package-managers/103-poetry.md => poetry@uXd2B01GVBEQNXQE8RATT.md} (100%) create mode 100644 src/data/roadmaps/python/content/pydantic@W3VALz5evFo1qqkQbMN1R.md create mode 100644 src/data/roadmaps/python/content/pyenv@N5VaKMbgQ0V_BC5tadV65.md rename src/data/roadmaps/python/content/{105-python-package-managers/100-pypi.md => pypi@1dfOTOGsOk5XE3bnZs8Ht.md} (100%) create mode 100644 src/data/roadmaps/python/content/pyprojecttoml@GHKAY9gOykEbxkEeR30wL.md rename src/data/roadmaps/python/content/{106-python-frameworks/100-synchronous/102-pyramid.md => pyramid@DHtskqATeAVKgaazdhXKD.md} (100%) create mode 100644 src/data/roadmaps/python/content/pyre@9mFR_ueXbIB2IrkqU2s85.md create mode 100644 src/data/roadmaps/python/content/pyright@1q9HWgu9jDTK757hTNOmE.md rename src/data/roadmaps/python/content/{107-python-testing/101-pytest.md => pytest@3FDwJpesfelEyJrNWtm0V.md} (100%) rename src/data/roadmaps/python/content/{101-data-structures-and-algorithms/104-recursion.md => recursion@94KnPMQdNTOwQkUv37tAk.md} (100%) create mode 100644 src/data/roadmaps/python/content/recursion@kLBgy_nxxjE8SxdVi04bq.md rename src/data/roadmaps/python/content/{102-python-advanced-topics/101-regular-expressions.md => regular-expressions@7t6mJBsaFMWPi7o9fbhhq.md} (100%) create mode 100644 src/data/roadmaps/python/content/ruff@6cB0pvUO1-gvCtgqozP-Q.md rename src/data/roadmaps/python/content/{106-python-frameworks/101-asynchronous/103-sanic.md => sanic@9RGpqsj9jHz0_-r7EvRcw.md} (100%) create mode 100644 src/data/roadmaps/python/content/sets@soZFqivM3YBuljeX6PoaX.md rename src/data/roadmaps/python/content/{101-data-structures-and-algorithms/105-sorting-algorithms.md => sorting-algorithms@YNptpfK9qv2ovmkUXLkJT.md} (100%) create mode 100644 src/data/roadmaps/python/content/sorting-algorithms@vvTmjcWCVclOPY4f_5uB0.md create mode 100644 src/data/roadmaps/python/content/sphinx@maYNuTKYyZndxk1z29-UY.md create mode 100644 src/data/roadmaps/python/content/static-typing@1PXApuUpPmJjgi12cmWo4.md create mode 100644 src/data/roadmaps/python/content/testing@WQOYjuwKIWB2meea4JnsV.md create mode 100644 src/data/roadmaps/python/content/threading@UIx0XYaOgXXlYbbQtjiPq.md create mode 100644 src/data/roadmaps/python/content/topic-node@Iwr_DtqGn9kQTUBPJpplf.md rename src/data/roadmaps/python/content/{106-python-frameworks/101-asynchronous/102-tornado.md => tornado@zey2C6BdzsHJAlb_K3qrP.md} (100%) create mode 100644 src/data/roadmaps/python/content/tox@jPFOiwbqfaGshaGDBWb5x.md create mode 100644 src/data/roadmaps/python/content/tuples@i7xIGiXU-k5UIKHIhQPjE.md rename src/data/roadmaps/python/content/{100-python-basics/103-typecasting-exceptions.md => type-casting@R9DQNc0AyAQ2HLpP4HOk6.md} (100%) create mode 100644 src/data/roadmaps/python/content/typing@o1wi39VnjnFfWIC8XcuAK.md rename src/data/roadmaps/python/content/{107-python-testing/100-unittest-pyunit.md => unittest--pyunit@b4he_RO17C3ScNeUd6v2b.md} (100%) create mode 100644 src/data/roadmaps/python/content/uv@p3Frfs6oxpuciUzeCEsvb.md rename src/data/roadmaps/python/content/{100-python-basics/101-variables-and-datatypes.md => variables-and-data-types@dEFLBGpiH6nbSMeR7ecaT.md} (100%) create mode 100644 src/data/roadmaps/python/content/virutalenv@_IXXTSwQOgYzYIUuKVWNE.md create mode 100644 src/data/roadmaps/python/content/yapf@tsh_vbhzKz1-H9Vh69tsK.md create mode 100644 src/data/roadmaps/python/migration-mapping.json diff --git a/.astro/settings.json b/.astro/settings.json index 0b2c6e461..4e5c9dc23 100644 --- a/.astro/settings.json +++ b/.astro/settings.json @@ -3,6 +3,6 @@ "enabled": false }, "_variables": { - "lastUpdateCheck": 1721257136269 + "lastUpdateCheck": 1722461514438 } } \ No newline at end of file diff --git a/src/data/roadmaps/python/content/100-python-basics/106-string-methods.md b/src/data/roadmaps/python/content/100-python-basics/106-string-methods.md deleted file mode 100644 index 250b85ef7..000000000 --- a/src/data/roadmaps/python/content/100-python-basics/106-string-methods.md +++ /dev/null @@ -1,10 +0,0 @@ -# String Methods - -Python does not have a character data type, a single character is simply a string with a length of 1. Square bracket can be used to access elements of the string. -There are methods which can be used on a string to best utilize it's wide range of functionalities. -Below Given resources can be utilised to learn more about them. - -Visit the following resources to learn more: - -- [@video@Practical String Methods applications](https://www.youtube.com/watch?v=Ctqi5Y4X-jA&t=11s) -- [@article@Comprehensive Study of String methods](https://www.w3schools.com/python/python_ref_string.asp) diff --git a/src/data/roadmaps/python/content/100-python-roadmap-note.md b/src/data/roadmaps/python/content/100-python-roadmap-note.md deleted file mode 100644 index ea11040b8..000000000 --- a/src/data/roadmaps/python/content/100-python-roadmap-note.md +++ /dev/null @@ -1,3 +0,0 @@ -# Note - -This roadmap specifically covers **Python and the ecosystem** around it. You will notice that it is missing things like version control, databases, software design, architecture and other things that are not directly related to Python; this is intentional. Have a look at the [Backend Roadmap](/backend) for a more comprehensive overview of the backend ecosystem. diff --git a/src/data/roadmaps/python/content/102-python-advanced-topics/index.md b/src/data/roadmaps/python/content/102-python-advanced-topics/index.md deleted file mode 100644 index 2ceb7d585..000000000 --- a/src/data/roadmaps/python/content/102-python-advanced-topics/index.md +++ /dev/null @@ -1,3 +0,0 @@ -# Advanced Topics - -Now that you have covered the basics of Python, let's move on to some advanced topics. In this section, you will be learning about things like OOP, Lambdas, Decorators, Iterators, Modules, and more. diff --git a/src/data/roadmaps/python/content/103-version-control-systems/100-basic-git-usage.md b/src/data/roadmaps/python/content/103-version-control-systems/100-basic-git-usage.md deleted file mode 100644 index ce8202489..000000000 --- a/src/data/roadmaps/python/content/103-version-control-systems/100-basic-git-usage.md +++ /dev/null @@ -1,10 +0,0 @@ -# Git - -[Git](https://git-scm.com/) is a free and open source distributed version control system designed to handle everything from small to very large projects with speed and efficiency. - -Visit the following resources to learn more: - -- [@video@Git & GitHub Crash Course For Beginners](https://www.youtube.com/watch?v=SWYqp7iY_Tc) -- [@article@Learn Git with Tutorials, News and Tips - Atlassian](https://www.atlassian.com/git) -- [@article@Git Cheat Sheet](https://cs.fyi/guide/git-cheatsheet) -- [@feed@Explore top posts about Git](https://app.daily.dev/tags/git?ref=roadmapsh) diff --git a/src/data/roadmaps/python/content/103-version-control-systems/index.md b/src/data/roadmaps/python/content/103-version-control-systems/index.md deleted file mode 100644 index 12575facb..000000000 --- a/src/data/roadmaps/python/content/103-version-control-systems/index.md +++ /dev/null @@ -1,9 +0,0 @@ -# Version Control Systems - -Version control systems allow you to track changes to your codebase/files over time. They allow you to go back to some previous version of the codebase without any issues. Also, they help in collaborating with people working on the same code – if you’ve ever collaborated with other people on a project, you might already know the frustration of copying and merging the changes from someone else into your codebase; version control systems allow you to get rid of this issue. - -Visit the following resources to learn more: - -- [@video@Version Control System Introduction](https://www.youtube.com/watch?v=zbKdDsNNOhg) -- [@video@Git & GitHub Crash Course For Beginners](https://www.youtube.com/watch?v=SWYqp7iY_Tc) -- [@video@Learn Git in 20 Minutes](https://youtu.be/Y9XZQO1n_7c?t=21) diff --git a/src/data/roadmaps/python/content/104-repo-hosting-services/100-github.md b/src/data/roadmaps/python/content/104-repo-hosting-services/100-github.md deleted file mode 100644 index 572b5f4d6..000000000 --- a/src/data/roadmaps/python/content/104-repo-hosting-services/100-github.md +++ /dev/null @@ -1,12 +0,0 @@ -# GitHub - -[GitHub](https://github.com) is a provider of internet hosting for software development and version control using Git. It offers the distributed version control and source code management functionality of Git, plus its own features. - -Visit the following resources to learn more: - -- [@article@GitHub: Quickstart](https://docs.github.com/en/get-started/quickstart/hello-world) -- [@video@What is GitHub?](https://www.youtube.com/watch?v=w3jLJU7DT5E) -- [@video@Git vs. GitHub: Whats the difference?](https://www.youtube.com/watch?v=wpISo9TNjfU) -- [@video@Git and GitHub for Beginners](https://www.youtube.com/watch?v=RGOj5yH7evk) -- [@video@Git and GitHub - CS50 Beyond 2019](https://www.youtube.com/watch?v=eulnSXkhE7I) -- [@feed@Explore top posts about GitHub](https://app.daily.dev/tags/github?ref=roadmapsh) diff --git a/src/data/roadmaps/python/content/104-repo-hosting-services/101-gitlab.md b/src/data/roadmaps/python/content/104-repo-hosting-services/101-gitlab.md deleted file mode 100644 index 50529e817..000000000 --- a/src/data/roadmaps/python/content/104-repo-hosting-services/101-gitlab.md +++ /dev/null @@ -1,9 +0,0 @@ -# GitLab - -[GitLab](https://gitlab.com) is a provider of internet hosting for software development and version control using Git. It offers the distributed version control and source code management functionality of Git, plus its own features. - -Visit the following resources to learn more: - -- [@opensource@GitLab Website](https://gitlab.com/) -- [@article@GitLab Documentation](https://docs.gitlab.com/) -- [@feed@Explore top posts about GitLab](https://app.daily.dev/tags/gitlab?ref=roadmapsh) diff --git a/src/data/roadmaps/python/content/104-repo-hosting-services/102-bitbucket.md b/src/data/roadmaps/python/content/104-repo-hosting-services/102-bitbucket.md deleted file mode 100644 index dab3607b1..000000000 --- a/src/data/roadmaps/python/content/104-repo-hosting-services/102-bitbucket.md +++ /dev/null @@ -1,9 +0,0 @@ -# BitBucket - -[BitBucket](https://bitbucket.com) is a provider of internet hosting for software development and version control using Git. It offers the distributed version control and source code management functionality of Git, plus its own features. - -Visit the following resources to learn more: - -- [@official@BitBucket Website](https://bitbucket.com/) -- [@official@How to use BitBucket?](https://bitbucket.org/product/guides) -- [@feed@Explore top posts about Bitbucket](https://app.daily.dev/tags/bitbucket?ref=roadmapsh) diff --git a/src/data/roadmaps/python/content/104-repo-hosting-services/index.md b/src/data/roadmaps/python/content/104-repo-hosting-services/index.md deleted file mode 100644 index 02f178ba8..000000000 --- a/src/data/roadmaps/python/content/104-repo-hosting-services/index.md +++ /dev/null @@ -1,9 +0,0 @@ -# Repo Hosting Services - -There are different repository hosting services with the most famous one being GitHub, GitLab and BitBucket. I would recommend creating an account on GitHub because that is where most of the OpenSource work is done and most of the developers are. - -Visit the following resources to learn more: - -- [@opensource@GitHub: Where the world builds software](https://github.com) -- [@opensource@GitLab: Iterate faster, innovate together](https://gitlab.com) -- [@article@BitBucket: The Git solution for professional teams](https://bitbucket.com) diff --git a/src/data/roadmaps/python/content/106-python-frameworks/100-synchronous/index.md b/src/data/roadmaps/python/content/106-python-frameworks/100-synchronous/index.md deleted file mode 100644 index c3612beb2..000000000 --- a/src/data/roadmaps/python/content/106-python-frameworks/100-synchronous/index.md +++ /dev/null @@ -1,7 +0,0 @@ -# Synchronous Frameworks - -Synchronous frameworks in python handle the flow of data in a synchronous manner. On a s̲y̲n̲c̲h̲r̲o̲n̲o̲u̲s̲ request, you make the request and stop executing your program until you get a response from the HTTP server (or an error if the server can't be reached, or a timeout if the sever is taking way, way too long to reply) The interpreter is blocked until the request is completed (until you got a definitive answer of what happened with the request: did it go well? was there an error? a timeout?... ). - -Visit the following resources to learn more: - -- [@article@Sync vs. Async Python: What is the Difference?](https://blog.miguelgrinberg.com/post/sync-vs-async-python-what-is-the-difference) diff --git a/src/data/roadmaps/python/content/106-python-frameworks/101-asynchronous/index.md b/src/data/roadmaps/python/content/106-python-frameworks/101-asynchronous/index.md deleted file mode 100644 index 4776a0175..000000000 --- a/src/data/roadmaps/python/content/106-python-frameworks/101-asynchronous/index.md +++ /dev/null @@ -1,8 +0,0 @@ -# Asynchronous - -Asynchronous programming is a type of parallel programming in which a unit of work is allowed to run separately from the primary application thread. When the work is complete, it notifies the main thread about completion or failure of the worker thread. -This style is mostly concerned with the asynchronous execution of tasks. Python has several asynchronous frameworks that are used to implement asynchronous programming. - -Visit the following resources to learn more: - -- [@article@Top 9 Asynchronous Web Frameworks for Python](https://geekflare.com/python-asynchronous-web-frameworks/) diff --git a/src/data/roadmaps/python/content/107-python-testing/index.md b/src/data/roadmaps/python/content/107-python-testing/index.md deleted file mode 100644 index f73cb21ce..000000000 --- a/src/data/roadmaps/python/content/107-python-testing/index.md +++ /dev/null @@ -1,10 +0,0 @@ -# Testing - -A key to building software that meets requirements without defects is testing. Software testing helps developers know they are building the right software. When tests are run as part of the development process (often with continuous integration tools), they build confidence and prevent regressions in the code. - -Visit the following resources to learn more: - -- [@article@What is Software Testing?](https://www.guru99.com/software-testing-introduction-importance.html) -- [@article@Testing Pyramid](https://www.browserstack.com/guide/testing-pyramid-for-test-automation) -- [@article@Automate Quality, Security Checks for Python Library Dependencies](https://thenewstack.io/automate-quality-security-checks-for-python-library-dependencies/) -- [@feed@Explore top posts about Python](https://app.daily.dev/tags/python?ref=roadmapsh) diff --git a/src/data/roadmaps/python/content/106-python-frameworks/101-asynchronous/101-aiohttp.md b/src/data/roadmaps/python/content/aiohttp@IBVAvFtN4mnIPbIuyUvEb.md similarity index 100% rename from src/data/roadmaps/python/content/106-python-frameworks/101-asynchronous/101-aiohttp.md rename to src/data/roadmaps/python/content/aiohttp@IBVAvFtN4mnIPbIuyUvEb.md diff --git a/src/data/roadmaps/python/content/arrays-and-linked-lists@OPD4WdMO7q4gRZMcRCQh1.md b/src/data/roadmaps/python/content/arrays-and-linked-lists@OPD4WdMO7q4gRZMcRCQh1.md new file mode 100644 index 000000000..6c7be3f4f --- /dev/null +++ b/src/data/roadmaps/python/content/arrays-and-linked-lists@OPD4WdMO7q4gRZMcRCQh1.md @@ -0,0 +1 @@ +# Arrays and Linked Lists \ No newline at end of file diff --git a/src/data/roadmaps/python/content/101-data-structures-and-algorithms/100-arrays-linked-lists.md b/src/data/roadmaps/python/content/arrays-and-linked-lists@kIuns7FOwapwtFLKo1phQ.md similarity index 100% rename from src/data/roadmaps/python/content/101-data-structures-and-algorithms/100-arrays-linked-lists.md rename to src/data/roadmaps/python/content/arrays-and-linked-lists@kIuns7FOwapwtFLKo1phQ.md diff --git a/src/data/roadmaps/python/content/asynchrony@Mow7RvropbC4ZGDpcGZmw.md b/src/data/roadmaps/python/content/asynchrony@Mow7RvropbC4ZGDpcGZmw.md new file mode 100644 index 000000000..8c30eccd1 --- /dev/null +++ b/src/data/roadmaps/python/content/asynchrony@Mow7RvropbC4ZGDpcGZmw.md @@ -0,0 +1 @@ +# Asynchrony \ No newline at end of file diff --git a/src/data/roadmaps/python/content/100-python-basics/100-basic-syntax.md b/src/data/roadmaps/python/content/basic-syntax@6xRncUs3_vxVbDur567QA.md similarity index 100% rename from src/data/roadmaps/python/content/100-python-basics/100-basic-syntax.md rename to src/data/roadmaps/python/content/basic-syntax@6xRncUs3_vxVbDur567QA.md diff --git a/src/data/roadmaps/python/content/101-data-structures-and-algorithms/103-binary-search-trees.md b/src/data/roadmaps/python/content/binary-search-tree@7NZlydjm4432vLY1InBS7.md similarity index 100% rename from src/data/roadmaps/python/content/101-data-structures-and-algorithms/103-binary-search-trees.md rename to src/data/roadmaps/python/content/binary-search-tree@7NZlydjm4432vLY1InBS7.md diff --git a/src/data/roadmaps/python/content/binary-search-tree@uJIqgsqUbE62Tyo3K75Qx.md b/src/data/roadmaps/python/content/binary-search-tree@uJIqgsqUbE62Tyo3K75Qx.md new file mode 100644 index 000000000..3c6b6a02d --- /dev/null +++ b/src/data/roadmaps/python/content/binary-search-tree@uJIqgsqUbE62Tyo3K75Qx.md @@ -0,0 +1 @@ +# Binary Search Tree \ No newline at end of file diff --git a/src/data/roadmaps/python/content/black.md b/src/data/roadmaps/python/content/black.md new file mode 100644 index 000000000..718f04ed1 --- /dev/null +++ b/src/data/roadmaps/python/content/black.md @@ -0,0 +1,5 @@ +# black + +black is a code formatter for Python. It is a tool that automatically formats Python code to adhere to the PEP 8 style guide. It is a great tool to use in your Python projects to ensure that your code is formatted consistently and correctly. + +- [@official@black documentation](https://black.readthedocs.io/en/stable/) \ No newline at end of file diff --git a/src/data/roadmaps/python/content/102-python-advanced-topics/105-modules/100-builtin-modules.md b/src/data/roadmaps/python/content/builtin@08XifLQ20c4FKI_4AWNBQ.md similarity index 100% rename from src/data/roadmaps/python/content/102-python-advanced-topics/105-modules/100-builtin-modules.md rename to src/data/roadmaps/python/content/builtin@08XifLQ20c4FKI_4AWNBQ.md diff --git a/src/data/roadmaps/python/content/102-python-advanced-topics/100-oop/102-classes.md b/src/data/roadmaps/python/content/classes@AqwzR8dZKLQIoj_6KKZ3t.md similarity index 100% rename from src/data/roadmaps/python/content/102-python-advanced-topics/100-oop/102-classes.md rename to src/data/roadmaps/python/content/classes@AqwzR8dZKLQIoj_6KKZ3t.md diff --git a/src/data/roadmaps/python/content/code-formatting@0F0ppU_ClIUKZ23Q6BVZp.md b/src/data/roadmaps/python/content/code-formatting@0F0ppU_ClIUKZ23Q6BVZp.md new file mode 100644 index 000000000..075a345a4 --- /dev/null +++ b/src/data/roadmaps/python/content/code-formatting@0F0ppU_ClIUKZ23Q6BVZp.md @@ -0,0 +1 @@ +# Code Formatting \ No newline at end of file diff --git a/src/data/roadmaps/python/content/common-packages@_94NrQ3quc4t_PPOsFSN0.md b/src/data/roadmaps/python/content/common-packages@_94NrQ3quc4t_PPOsFSN0.md new file mode 100644 index 000000000..a323499d7 --- /dev/null +++ b/src/data/roadmaps/python/content/common-packages@_94NrQ3quc4t_PPOsFSN0.md @@ -0,0 +1,14 @@ +# Common Packages and Modules + +Python has a rich ecosystem of packages and modules that can be used to get the most out of the language. + +Here are some common Python packages that are widely used in various domains: + +- [requests](https://docs.python-requests.org/en/latest/) +- [pathlib](https://docs.python.org/3/library/pathlib.html) +- [asyncio](https://docs.python.org/3/library/asyncio.html) +- [dataclasses](https://docs.python.org/3/library/dataclasses.html) +- [python-dotenv](https://pypi.org/project/python-dotenv/) +- [numpy](https://numpy.org/doc/stable/) +- [pandas](https://pandas.pydata.org/docs/) +- [polars](https://github.com/pola-rs/polars) \ No newline at end of file diff --git a/src/data/roadmaps/python/content/concurrency@u4nRzWQ4zhDFMOrZ2I_uJ.md b/src/data/roadmaps/python/content/concurrency@u4nRzWQ4zhDFMOrZ2I_uJ.md new file mode 100644 index 000000000..adf6818ed --- /dev/null +++ b/src/data/roadmaps/python/content/concurrency@u4nRzWQ4zhDFMOrZ2I_uJ.md @@ -0,0 +1 @@ +# Concurrency \ No newline at end of file diff --git a/src/data/roadmaps/python/content/105-python-package-managers/102-conda.md b/src/data/roadmaps/python/content/conda@uh67D1u-Iv5cZamRgFEJg.md similarity index 100% rename from src/data/roadmaps/python/content/105-python-package-managers/102-conda.md rename to src/data/roadmaps/python/content/conda@uh67D1u-Iv5cZamRgFEJg.md diff --git a/src/data/roadmaps/python/content/100-python-basics/102-conditionals.md b/src/data/roadmaps/python/content/conditionals@NP1kjSk0ujU0Gx-ajNHlR.md similarity index 100% rename from src/data/roadmaps/python/content/100-python-basics/102-conditionals.md rename to src/data/roadmaps/python/content/conditionals@NP1kjSk0ujU0Gx-ajNHlR.md diff --git a/src/data/roadmaps/python/content/context-manager@KAXF2kUAOvtBZhY8G9rkI.md b/src/data/roadmaps/python/content/context-manager@KAXF2kUAOvtBZhY8G9rkI.md new file mode 100644 index 000000000..c07c15687 --- /dev/null +++ b/src/data/roadmaps/python/content/context-manager@KAXF2kUAOvtBZhY8G9rkI.md @@ -0,0 +1 @@ +# Context Manager \ No newline at end of file diff --git a/src/data/roadmaps/python/content/102-python-advanced-topics/105-modules/101-custom-modules.md b/src/data/roadmaps/python/content/custom@l7k0qTYe42wYBTlT2-1cy.md similarity index 100% rename from src/data/roadmaps/python/content/102-python-advanced-topics/105-modules/101-custom-modules.md rename to src/data/roadmaps/python/content/custom@l7k0qTYe42wYBTlT2-1cy.md diff --git a/src/data/roadmaps/python/content/101-data-structures-and-algorithms/index.md b/src/data/roadmaps/python/content/data-structures--algorithms@VJSIbYJcy2MC6MOFBrqXi.md similarity index 100% rename from src/data/roadmaps/python/content/101-data-structures-and-algorithms/index.md rename to src/data/roadmaps/python/content/data-structures--algorithms@VJSIbYJcy2MC6MOFBrqXi.md diff --git a/src/data/roadmaps/python/content/102-python-advanced-topics/102-decorators.md b/src/data/roadmaps/python/content/decorators@pIluLJkySqn_gI_GykV6G.md similarity index 100% rename from src/data/roadmaps/python/content/102-python-advanced-topics/102-decorators.md rename to src/data/roadmaps/python/content/decorators@pIluLJkySqn_gI_GykV6G.md diff --git a/src/data/roadmaps/python/content/dictionaries@bc9CL_HMT-R6nXO1eR-gP.md b/src/data/roadmaps/python/content/dictionaries@bc9CL_HMT-R6nXO1eR-gP.md new file mode 100644 index 000000000..649d7e345 --- /dev/null +++ b/src/data/roadmaps/python/content/dictionaries@bc9CL_HMT-R6nXO1eR-gP.md @@ -0,0 +1 @@ +# Dictionaries \ No newline at end of file diff --git a/src/data/roadmaps/python/content/106-python-frameworks/100-synchronous/100-django.md b/src/data/roadmaps/python/content/django@x1V8GjdjANTnhP6YXMbgC.md similarity index 100% rename from src/data/roadmaps/python/content/106-python-frameworks/100-synchronous/100-django.md rename to src/data/roadmaps/python/content/django@x1V8GjdjANTnhP6YXMbgC.md diff --git a/src/data/roadmaps/python/content/107-python-testing/102-doctest.md b/src/data/roadmaps/python/content/doctest@aVclygxoA9ePU5IxaORSH.md similarity index 100% rename from src/data/roadmaps/python/content/107-python-testing/102-doctest.md rename to src/data/roadmaps/python/content/doctest@aVclygxoA9ePU5IxaORSH.md diff --git a/src/data/roadmaps/python/content/exceptions@fNTb9y3zs1HPYclAmu_Wv.md b/src/data/roadmaps/python/content/exceptions@fNTb9y3zs1HPYclAmu_Wv.md new file mode 100644 index 000000000..9617c0da2 --- /dev/null +++ b/src/data/roadmaps/python/content/exceptions@fNTb9y3zs1HPYclAmu_Wv.md @@ -0,0 +1 @@ +# Exceptions \ No newline at end of file diff --git a/src/data/roadmaps/python/content/106-python-frameworks/102-fastapi.md b/src/data/roadmaps/python/content/fast-api@XeQSmvAsGSTi8dd7QVHxn.md similarity index 100% rename from src/data/roadmaps/python/content/106-python-frameworks/102-fastapi.md rename to src/data/roadmaps/python/content/fast-api@XeQSmvAsGSTi8dd7QVHxn.md diff --git a/src/data/roadmaps/python/content/106-python-frameworks/100-synchronous/101-flask.md b/src/data/roadmaps/python/content/flask@HKsGyRzntjh1UbRZSWh_4.md similarity index 100% rename from src/data/roadmaps/python/content/106-python-frameworks/100-synchronous/101-flask.md rename to src/data/roadmaps/python/content/flask@HKsGyRzntjh1UbRZSWh_4.md diff --git a/src/data/roadmaps/python/content/100-python-basics/104-functions.md b/src/data/roadmaps/python/content/functions-builtin-functions@-DJgS6l2qngfwurExlmmT.md similarity index 100% rename from src/data/roadmaps/python/content/100-python-basics/104-functions.md rename to src/data/roadmaps/python/content/functions-builtin-functions@-DJgS6l2qngfwurExlmmT.md diff --git a/src/data/roadmaps/python/content/102-python-advanced-topics/107-generator-expressions.md b/src/data/roadmaps/python/content/generator-expressions@jnLIVRrWxcX3yq3Op91Vr.md similarity index 100% rename from src/data/roadmaps/python/content/102-python-advanced-topics/107-generator-expressions.md rename to src/data/roadmaps/python/content/generator-expressions@jnLIVRrWxcX3yq3Op91Vr.md diff --git a/src/data/roadmaps/python/content/106-python-frameworks/101-asynchronous/100-gevent.md b/src/data/roadmaps/python/content/gevent@InUJIGmTnf0X4cSoLuCEQ.md similarity index 100% rename from src/data/roadmaps/python/content/106-python-frameworks/101-asynchronous/100-gevent.md rename to src/data/roadmaps/python/content/gevent@InUJIGmTnf0X4cSoLuCEQ.md diff --git a/src/data/roadmaps/python/content/gil@bS7WeVKm2kEElu3sBKcIC.md b/src/data/roadmaps/python/content/gil@bS7WeVKm2kEElu3sBKcIC.md new file mode 100644 index 000000000..0e2db9d17 --- /dev/null +++ b/src/data/roadmaps/python/content/gil@bS7WeVKm2kEElu3sBKcIC.md @@ -0,0 +1 @@ +# GIL \ No newline at end of file diff --git a/src/data/roadmaps/python/content/101-data-structures-and-algorithms/102-hash-tables.md b/src/data/roadmaps/python/content/hash-tables@0-m8jVuDKE8hX1QorKGTM.md similarity index 100% rename from src/data/roadmaps/python/content/101-data-structures-and-algorithms/102-hash-tables.md rename to src/data/roadmaps/python/content/hash-tables@0-m8jVuDKE8hX1QorKGTM.md diff --git a/src/data/roadmaps/python/content/hash-tables@DG4fi1e5ec2BVckPLsTJS.md b/src/data/roadmaps/python/content/hash-tables@DG4fi1e5ec2BVckPLsTJS.md new file mode 100644 index 000000000..1002fa4da --- /dev/null +++ b/src/data/roadmaps/python/content/hash-tables@DG4fi1e5ec2BVckPLsTJS.md @@ -0,0 +1 @@ +# Hash Tables \ No newline at end of file diff --git a/src/data/roadmaps/python/content/heaps-stacks-and-queues@0NlRczh6ZEaFLlT6LORWz.md b/src/data/roadmaps/python/content/heaps-stacks-and-queues@0NlRczh6ZEaFLlT6LORWz.md new file mode 100644 index 000000000..8b8836b65 --- /dev/null +++ b/src/data/roadmaps/python/content/heaps-stacks-and-queues@0NlRczh6ZEaFLlT6LORWz.md @@ -0,0 +1 @@ +# Heaps, Stacks and Queues \ No newline at end of file diff --git a/src/data/roadmaps/python/content/101-data-structures-and-algorithms/101-heaps-stacks-queues.md b/src/data/roadmaps/python/content/heaps-stacks-and-queues@rSfg5M65LyZldhrdWOr90.md similarity index 100% rename from src/data/roadmaps/python/content/101-data-structures-and-algorithms/101-heaps-stacks-queues.md rename to src/data/roadmaps/python/content/heaps-stacks-and-queues@rSfg5M65LyZldhrdWOr90.md diff --git a/src/data/roadmaps/python/content/102-python-advanced-topics/100-oop/101-inheritance.md b/src/data/roadmaps/python/content/inheritance@S0FLE70szSVUPI0CDEQK7.md similarity index 100% rename from src/data/roadmaps/python/content/102-python-advanced-topics/100-oop/101-inheritance.md rename to src/data/roadmaps/python/content/inheritance@S0FLE70szSVUPI0CDEQK7.md diff --git a/src/data/roadmaps/python/content/102-python-advanced-topics/104-iterators.md b/src/data/roadmaps/python/content/iterators@aB1LSQjDEQb_BxueOcnxU.md similarity index 100% rename from src/data/roadmaps/python/content/102-python-advanced-topics/104-iterators.md rename to src/data/roadmaps/python/content/iterators@aB1LSQjDEQb_BxueOcnxU.md diff --git a/src/data/roadmaps/python/content/102-python-advanced-topics/103-lambdas.md b/src/data/roadmaps/python/content/lambdas@aWHgAk959DPUZL46CeRiI.md similarity index 100% rename from src/data/roadmaps/python/content/102-python-advanced-topics/103-lambdas.md rename to src/data/roadmaps/python/content/lambdas@aWHgAk959DPUZL46CeRiI.md diff --git a/src/data/roadmaps/python/content/106-python-frameworks/index.md b/src/data/roadmaps/python/content/learn-a-framework@0-ShORjGnQlAdcwjtxdEB.md similarity index 100% rename from src/data/roadmaps/python/content/106-python-frameworks/index.md rename to src/data/roadmaps/python/content/learn-a-framework@0-ShORjGnQlAdcwjtxdEB.md diff --git a/src/data/roadmaps/python/content/learn-the-basics@GISOFMKvnBys0O0IMpz2J.md b/src/data/roadmaps/python/content/learn-the-basics@GISOFMKvnBys0O0IMpz2J.md new file mode 100644 index 000000000..d8f15c162 --- /dev/null +++ b/src/data/roadmaps/python/content/learn-the-basics@GISOFMKvnBys0O0IMpz2J.md @@ -0,0 +1 @@ +# Learn the Basics \ No newline at end of file diff --git a/src/data/roadmaps/python/content/100-python-basics/index.md b/src/data/roadmaps/python/content/learn-the-basics@JDDG4KfhtIlw1rkNCzUli.md similarity index 100% rename from src/data/roadmaps/python/content/100-python-basics/index.md rename to src/data/roadmaps/python/content/learn-the-basics@JDDG4KfhtIlw1rkNCzUli.md diff --git a/src/data/roadmaps/python/content/102-python-advanced-topics/106-list-comprehensions.md b/src/data/roadmaps/python/content/list-comprehensions@4gtmtYWYRWqwLdZRL0XMg.md similarity index 100% rename from src/data/roadmaps/python/content/102-python-advanced-topics/106-list-comprehensions.md rename to src/data/roadmaps/python/content/list-comprehensions@4gtmtYWYRWqwLdZRL0XMg.md diff --git a/src/data/roadmaps/python/content/100-python-basics/105-lists-tuples-sets-dictionaries.md b/src/data/roadmaps/python/content/lists@UT_SR7G-LYtzqooWrEtF1.md similarity index 100% rename from src/data/roadmaps/python/content/100-python-basics/105-lists-tuples-sets-dictionaries.md rename to src/data/roadmaps/python/content/lists@UT_SR7G-LYtzqooWrEtF1.md diff --git a/src/data/roadmaps/python/content/loops@Dvy7BnNzK55qbh_SgOk8m.md b/src/data/roadmaps/python/content/loops@Dvy7BnNzK55qbh_SgOk8m.md new file mode 100644 index 000000000..d31a16aa6 --- /dev/null +++ b/src/data/roadmaps/python/content/loops@Dvy7BnNzK55qbh_SgOk8m.md @@ -0,0 +1 @@ +# Loops \ No newline at end of file diff --git a/src/data/roadmaps/python/content/102-python-advanced-topics/100-oop/100-methods-dunder.md b/src/data/roadmaps/python/content/methods-dunder@zAS4YiEJ6VPsyABrkIG8i.md similarity index 100% rename from src/data/roadmaps/python/content/102-python-advanced-topics/100-oop/100-methods-dunder.md rename to src/data/roadmaps/python/content/methods-dunder@zAS4YiEJ6VPsyABrkIG8i.md diff --git a/src/data/roadmaps/python/content/102-python-advanced-topics/105-modules/index.md b/src/data/roadmaps/python/content/modules@274uk28wzxn6EKWQzLpHs.md similarity index 100% rename from src/data/roadmaps/python/content/102-python-advanced-topics/105-modules/index.md rename to src/data/roadmaps/python/content/modules@274uk28wzxn6EKWQzLpHs.md diff --git a/src/data/roadmaps/python/content/multiprocessing@HSY5OUc_M5S6OcFXPRtkx.md b/src/data/roadmaps/python/content/multiprocessing@HSY5OUc_M5S6OcFXPRtkx.md new file mode 100644 index 000000000..9ca12a3b8 --- /dev/null +++ b/src/data/roadmaps/python/content/multiprocessing@HSY5OUc_M5S6OcFXPRtkx.md @@ -0,0 +1 @@ +# Multiprocessing \ No newline at end of file diff --git a/src/data/roadmaps/python/content/mypy@gIcJ3bUVQXqO1Wx4gUKd5.md b/src/data/roadmaps/python/content/mypy@gIcJ3bUVQXqO1Wx4gUKd5.md new file mode 100644 index 000000000..f2058e88f --- /dev/null +++ b/src/data/roadmaps/python/content/mypy@gIcJ3bUVQXqO1Wx4gUKd5.md @@ -0,0 +1,5 @@ +# mypy + +mypy is an optional static type checker for Python that aims to combine the benefits of dynamic (or "duck") typing and static typing. Mypy combines the expressive power and convenience of Python with a powerful type system and compile-time type checking. Mypy type checks standard Python programs; run them using any Python VM with basically no runtime overhead. + +- [@official@mypy documentation](https://mypy-lang.org/) \ No newline at end of file diff --git a/src/data/roadmaps/python/content/107-python-testing/102-nose.md b/src/data/roadmaps/python/content/nose@SSnzpijHLO5_l7DNEoMfx.md similarity index 100% rename from src/data/roadmaps/python/content/107-python-testing/102-nose.md rename to src/data/roadmaps/python/content/nose@SSnzpijHLO5_l7DNEoMfx.md diff --git a/src/data/roadmaps/python/content/102-python-advanced-topics/100-oop/index.md b/src/data/roadmaps/python/content/object-oriented-programming@P_Di-XPSDITmU3xKQew8G.md similarity index 100% rename from src/data/roadmaps/python/content/102-python-advanced-topics/100-oop/index.md rename to src/data/roadmaps/python/content/object-oriented-programming@P_Di-XPSDITmU3xKQew8G.md diff --git a/src/data/roadmaps/python/content/105-python-package-managers/index.md b/src/data/roadmaps/python/content/package-managers@qeCMw-sJ2FR4UxvU9DDzv.md similarity index 100% rename from src/data/roadmaps/python/content/105-python-package-managers/index.md rename to src/data/roadmaps/python/content/package-managers@qeCMw-sJ2FR4UxvU9DDzv.md diff --git a/src/data/roadmaps/python/content/102-python-advanced-topics/108-paradigms.md b/src/data/roadmaps/python/content/paradigms@4GU5HNi3W8yFkImVY9ZpW.md similarity index 100% rename from src/data/roadmaps/python/content/102-python-advanced-topics/108-paradigms.md rename to src/data/roadmaps/python/content/paradigms@4GU5HNi3W8yFkImVY9ZpW.md diff --git a/src/data/roadmaps/python/content/105-python-package-managers/101-pip.md b/src/data/roadmaps/python/content/pip@iVhQnp6hpgVZDNJ0XoVra.md similarity index 100% rename from src/data/roadmaps/python/content/105-python-package-managers/101-pip.md rename to src/data/roadmaps/python/content/pip@iVhQnp6hpgVZDNJ0XoVra.md diff --git a/src/data/roadmaps/python/content/pipenv@IWq-tfkz-pSC1ztZl60vM.md b/src/data/roadmaps/python/content/pipenv@IWq-tfkz-pSC1ztZl60vM.md new file mode 100644 index 000000000..58315a7d8 --- /dev/null +++ b/src/data/roadmaps/python/content/pipenv@IWq-tfkz-pSC1ztZl60vM.md @@ -0,0 +1,7 @@ +# pipenv + +Pipeline Environment (pipenv) is a tool that aims to bring the best of all packaging worlds (bundled, requirements.txt, setup.py, setup.cfg, etc.) to the Python world. It automatically creates and manages a virtualenv for your projects, as well as adds/removes packages from your Pipfile as you install/uninstall packages. It also generates the ever-important Pipfile.lock, which is used to produce deterministic builds. + +Learn more about Pipenv by visiting the following resources: + +- [@official@Pipenv Documentation](https://pipenv.pypa.io/en/latest/) \ No newline at end of file diff --git a/src/data/roadmaps/python/content/plotly-dash@7zcpXN3krnS3tMRWVNIVe.md b/src/data/roadmaps/python/content/plotly-dash@7zcpXN3krnS3tMRWVNIVe.md new file mode 100644 index 000000000..a1589dc5f --- /dev/null +++ b/src/data/roadmaps/python/content/plotly-dash@7zcpXN3krnS3tMRWVNIVe.md @@ -0,0 +1 @@ +# Plotly Dash \ No newline at end of file diff --git a/src/data/roadmaps/python/content/105-python-package-managers/103-poetry.md b/src/data/roadmaps/python/content/poetry@uXd2B01GVBEQNXQE8RATT.md similarity index 100% rename from src/data/roadmaps/python/content/105-python-package-managers/103-poetry.md rename to src/data/roadmaps/python/content/poetry@uXd2B01GVBEQNXQE8RATT.md diff --git a/src/data/roadmaps/python/content/pydantic@W3VALz5evFo1qqkQbMN1R.md b/src/data/roadmaps/python/content/pydantic@W3VALz5evFo1qqkQbMN1R.md new file mode 100644 index 000000000..e05c2a36b --- /dev/null +++ b/src/data/roadmaps/python/content/pydantic@W3VALz5evFo1qqkQbMN1R.md @@ -0,0 +1,7 @@ +# Pydantic + +Pydantic is a python library for data validation and settings management using python type annotations. + +Learn more from the following resources: + +- [@official@Pydantic documentation](https://docs.pydantic.dev/latest/) \ No newline at end of file diff --git a/src/data/roadmaps/python/content/pyenv@N5VaKMbgQ0V_BC5tadV65.md b/src/data/roadmaps/python/content/pyenv@N5VaKMbgQ0V_BC5tadV65.md new file mode 100644 index 000000000..5001abc09 --- /dev/null +++ b/src/data/roadmaps/python/content/pyenv@N5VaKMbgQ0V_BC5tadV65.md @@ -0,0 +1,7 @@ +# pyenv + +pyenv is a tool for managing multiple versions of the Python programming language on Unix-like systems. It works by setting environment variables to point to the directory where the desired version of Python is installed. This allows you to switch between different versions of Python without having to modify your system's default Python installation. + +Learn more about pyenv by exploring the following resources: + +- [@Official@pyenv GitHub Repository](https://github.com/pyenv/pyenv) \ No newline at end of file diff --git a/src/data/roadmaps/python/content/105-python-package-managers/100-pypi.md b/src/data/roadmaps/python/content/pypi@1dfOTOGsOk5XE3bnZs8Ht.md similarity index 100% rename from src/data/roadmaps/python/content/105-python-package-managers/100-pypi.md rename to src/data/roadmaps/python/content/pypi@1dfOTOGsOk5XE3bnZs8Ht.md diff --git a/src/data/roadmaps/python/content/pyprojecttoml@GHKAY9gOykEbxkEeR30wL.md b/src/data/roadmaps/python/content/pyprojecttoml@GHKAY9gOykEbxkEeR30wL.md new file mode 100644 index 000000000..d6a59b312 --- /dev/null +++ b/src/data/roadmaps/python/content/pyprojecttoml@GHKAY9gOykEbxkEeR30wL.md @@ -0,0 +1,10 @@ +# pyproject.toml + +This file is used to define the project configuration and dependencies. It is a configuration file that +contains metadata about the project, such as its name, version, dependencies, and build settings. The +`pyproject.toml` file is used by tools like `poetry` and `flit` to manage Python projects and their +dependencies. + +Learn more about `pyproject.toml` by visiting the following resources: + +- [@official@Writing pyproject.toml files](https://packaging.python.org/en/latest/guides/writing-pyproject-toml/) \ No newline at end of file diff --git a/src/data/roadmaps/python/content/106-python-frameworks/100-synchronous/102-pyramid.md b/src/data/roadmaps/python/content/pyramid@DHtskqATeAVKgaazdhXKD.md similarity index 100% rename from src/data/roadmaps/python/content/106-python-frameworks/100-synchronous/102-pyramid.md rename to src/data/roadmaps/python/content/pyramid@DHtskqATeAVKgaazdhXKD.md diff --git a/src/data/roadmaps/python/content/pyre@9mFR_ueXbIB2IrkqU2s85.md b/src/data/roadmaps/python/content/pyre@9mFR_ueXbIB2IrkqU2s85.md new file mode 100644 index 000000000..3f8c77658 --- /dev/null +++ b/src/data/roadmaps/python/content/pyre@9mFR_ueXbIB2IrkqU2s85.md @@ -0,0 +1,7 @@ +# pyre + +pyre is a static type checker for Python. It is a tool that helps you find type errors in your Python code. Pyre is designed to be fast, scalable, and easy to use. It is used at Facebook to help developers catch type errors before they make it to production. + +Learn more about pyre from the following resources: + +- [@official@pyre documentation](https://pyre-check.org/) \ No newline at end of file diff --git a/src/data/roadmaps/python/content/pyright@1q9HWgu9jDTK757hTNOmE.md b/src/data/roadmaps/python/content/pyright@1q9HWgu9jDTK757hTNOmE.md new file mode 100644 index 000000000..93db18ede --- /dev/null +++ b/src/data/roadmaps/python/content/pyright@1q9HWgu9jDTK757hTNOmE.md @@ -0,0 +1,7 @@ +# pyright + +pyright is a static type checker for Python. It is a Microsoft product and is written in TypeScript. It is a language server that uses the Language Server Protocol (LSP) to communicate with the editor. It is a good alternative to mypy and pytype. + +Learn more about pyright from the following resources: + +- [@official@Pyright Documentation](https://microsoft.github.io/pyright/) \ No newline at end of file diff --git a/src/data/roadmaps/python/content/107-python-testing/101-pytest.md b/src/data/roadmaps/python/content/pytest@3FDwJpesfelEyJrNWtm0V.md similarity index 100% rename from src/data/roadmaps/python/content/107-python-testing/101-pytest.md rename to src/data/roadmaps/python/content/pytest@3FDwJpesfelEyJrNWtm0V.md diff --git a/src/data/roadmaps/python/content/101-data-structures-and-algorithms/104-recursion.md b/src/data/roadmaps/python/content/recursion@94KnPMQdNTOwQkUv37tAk.md similarity index 100% rename from src/data/roadmaps/python/content/101-data-structures-and-algorithms/104-recursion.md rename to src/data/roadmaps/python/content/recursion@94KnPMQdNTOwQkUv37tAk.md diff --git a/src/data/roadmaps/python/content/recursion@kLBgy_nxxjE8SxdVi04bq.md b/src/data/roadmaps/python/content/recursion@kLBgy_nxxjE8SxdVi04bq.md new file mode 100644 index 000000000..a27651655 --- /dev/null +++ b/src/data/roadmaps/python/content/recursion@kLBgy_nxxjE8SxdVi04bq.md @@ -0,0 +1 @@ +# Recursion \ No newline at end of file diff --git a/src/data/roadmaps/python/content/102-python-advanced-topics/101-regular-expressions.md b/src/data/roadmaps/python/content/regular-expressions@7t6mJBsaFMWPi7o9fbhhq.md similarity index 100% rename from src/data/roadmaps/python/content/102-python-advanced-topics/101-regular-expressions.md rename to src/data/roadmaps/python/content/regular-expressions@7t6mJBsaFMWPi7o9fbhhq.md diff --git a/src/data/roadmaps/python/content/ruff@6cB0pvUO1-gvCtgqozP-Q.md b/src/data/roadmaps/python/content/ruff@6cB0pvUO1-gvCtgqozP-Q.md new file mode 100644 index 000000000..a784c638e --- /dev/null +++ b/src/data/roadmaps/python/content/ruff@6cB0pvUO1-gvCtgqozP-Q.md @@ -0,0 +1,5 @@ +# ruff + +An extremely fast Python linter and code formatter, written in Rust. + +- [@official@ruff documentation](https://docs.astral.sh/ruff/) \ No newline at end of file diff --git a/src/data/roadmaps/python/content/106-python-frameworks/101-asynchronous/103-sanic.md b/src/data/roadmaps/python/content/sanic@9RGpqsj9jHz0_-r7EvRcw.md similarity index 100% rename from src/data/roadmaps/python/content/106-python-frameworks/101-asynchronous/103-sanic.md rename to src/data/roadmaps/python/content/sanic@9RGpqsj9jHz0_-r7EvRcw.md diff --git a/src/data/roadmaps/python/content/sets@soZFqivM3YBuljeX6PoaX.md b/src/data/roadmaps/python/content/sets@soZFqivM3YBuljeX6PoaX.md new file mode 100644 index 000000000..26fb09257 --- /dev/null +++ b/src/data/roadmaps/python/content/sets@soZFqivM3YBuljeX6PoaX.md @@ -0,0 +1 @@ +# Sets \ No newline at end of file diff --git a/src/data/roadmaps/python/content/101-data-structures-and-algorithms/105-sorting-algorithms.md b/src/data/roadmaps/python/content/sorting-algorithms@YNptpfK9qv2ovmkUXLkJT.md similarity index 100% rename from src/data/roadmaps/python/content/101-data-structures-and-algorithms/105-sorting-algorithms.md rename to src/data/roadmaps/python/content/sorting-algorithms@YNptpfK9qv2ovmkUXLkJT.md diff --git a/src/data/roadmaps/python/content/sorting-algorithms@vvTmjcWCVclOPY4f_5uB0.md b/src/data/roadmaps/python/content/sorting-algorithms@vvTmjcWCVclOPY4f_5uB0.md new file mode 100644 index 000000000..e86533244 --- /dev/null +++ b/src/data/roadmaps/python/content/sorting-algorithms@vvTmjcWCVclOPY4f_5uB0.md @@ -0,0 +1 @@ +# Sorting Algorithms \ No newline at end of file diff --git a/src/data/roadmaps/python/content/sphinx@maYNuTKYyZndxk1z29-UY.md b/src/data/roadmaps/python/content/sphinx@maYNuTKYyZndxk1z29-UY.md new file mode 100644 index 000000000..fa4acdbae --- /dev/null +++ b/src/data/roadmaps/python/content/sphinx@maYNuTKYyZndxk1z29-UY.md @@ -0,0 +1,5 @@ +# sphinx + +Sphinx is a tool that makes it easy to create intelligent and beautiful documentation, written by Georg Brandl and licensed under the BSD license. + +Learn more about Sphinx by visiting the [official website](https://www.sphinx-doc.org/en/master/). \ No newline at end of file diff --git a/src/data/roadmaps/python/content/static-typing@1PXApuUpPmJjgi12cmWo4.md b/src/data/roadmaps/python/content/static-typing@1PXApuUpPmJjgi12cmWo4.md new file mode 100644 index 000000000..073efcc59 --- /dev/null +++ b/src/data/roadmaps/python/content/static-typing@1PXApuUpPmJjgi12cmWo4.md @@ -0,0 +1,7 @@ +# Static Typing + +Static typing can be a powerful tool to help you catch bugs before they happen. It can also help you understand the code you're working with, and make it easier to maintain and refactor. + +Learn more about static typing with the following resources: + +- [@article@Static typing in Python](https://typing.readthedocs.io/en/latest/index.html) \ No newline at end of file diff --git a/src/data/roadmaps/python/content/testing@WQOYjuwKIWB2meea4JnsV.md b/src/data/roadmaps/python/content/testing@WQOYjuwKIWB2meea4JnsV.md new file mode 100644 index 000000000..94cfd7d77 --- /dev/null +++ b/src/data/roadmaps/python/content/testing@WQOYjuwKIWB2meea4JnsV.md @@ -0,0 +1 @@ +# Testing \ No newline at end of file diff --git a/src/data/roadmaps/python/content/threading@UIx0XYaOgXXlYbbQtjiPq.md b/src/data/roadmaps/python/content/threading@UIx0XYaOgXXlYbbQtjiPq.md new file mode 100644 index 000000000..f20d58d18 --- /dev/null +++ b/src/data/roadmaps/python/content/threading@UIx0XYaOgXXlYbbQtjiPq.md @@ -0,0 +1 @@ +# Threading \ No newline at end of file diff --git a/src/data/roadmaps/python/content/topic-node@Iwr_DtqGn9kQTUBPJpplf.md b/src/data/roadmaps/python/content/topic-node@Iwr_DtqGn9kQTUBPJpplf.md new file mode 100644 index 000000000..59f1a30d4 --- /dev/null +++ b/src/data/roadmaps/python/content/topic-node@Iwr_DtqGn9kQTUBPJpplf.md @@ -0,0 +1 @@ +# topic node \ No newline at end of file diff --git a/src/data/roadmaps/python/content/106-python-frameworks/101-asynchronous/102-tornado.md b/src/data/roadmaps/python/content/tornado@zey2C6BdzsHJAlb_K3qrP.md similarity index 100% rename from src/data/roadmaps/python/content/106-python-frameworks/101-asynchronous/102-tornado.md rename to src/data/roadmaps/python/content/tornado@zey2C6BdzsHJAlb_K3qrP.md diff --git a/src/data/roadmaps/python/content/tox@jPFOiwbqfaGshaGDBWb5x.md b/src/data/roadmaps/python/content/tox@jPFOiwbqfaGshaGDBWb5x.md new file mode 100644 index 000000000..4a510d2ee --- /dev/null +++ b/src/data/roadmaps/python/content/tox@jPFOiwbqfaGshaGDBWb5x.md @@ -0,0 +1,7 @@ +# tox - python testing + +tox is a tool for automating test environment management and testing against multiple interpreter configurations. It is particularly useful for Python codebases that need to support multiple versions of Python. + +Learn more about tox from the following resources: + +- [@official@tox documentation](https://tox.wiki/en/) \ No newline at end of file diff --git a/src/data/roadmaps/python/content/tuples@i7xIGiXU-k5UIKHIhQPjE.md b/src/data/roadmaps/python/content/tuples@i7xIGiXU-k5UIKHIhQPjE.md new file mode 100644 index 000000000..b6ab1501f --- /dev/null +++ b/src/data/roadmaps/python/content/tuples@i7xIGiXU-k5UIKHIhQPjE.md @@ -0,0 +1 @@ +# Tuples \ No newline at end of file diff --git a/src/data/roadmaps/python/content/100-python-basics/103-typecasting-exceptions.md b/src/data/roadmaps/python/content/type-casting@R9DQNc0AyAQ2HLpP4HOk6.md similarity index 100% rename from src/data/roadmaps/python/content/100-python-basics/103-typecasting-exceptions.md rename to src/data/roadmaps/python/content/type-casting@R9DQNc0AyAQ2HLpP4HOk6.md diff --git a/src/data/roadmaps/python/content/typing@o1wi39VnjnFfWIC8XcuAK.md b/src/data/roadmaps/python/content/typing@o1wi39VnjnFfWIC8XcuAK.md new file mode 100644 index 000000000..717983179 --- /dev/null +++ b/src/data/roadmaps/python/content/typing@o1wi39VnjnFfWIC8XcuAK.md @@ -0,0 +1,5 @@ +# typing + +typing is a module in Python that provides runtime support for type hints. The typing module defines a standard set of names that can be used to describe types in the Python language. The typing module was added to the standard library in Python 3.5. + +- [@official@typing python](https://docs.python.org/3/library/typing.html) \ No newline at end of file diff --git a/src/data/roadmaps/python/content/107-python-testing/100-unittest-pyunit.md b/src/data/roadmaps/python/content/unittest--pyunit@b4he_RO17C3ScNeUd6v2b.md similarity index 100% rename from src/data/roadmaps/python/content/107-python-testing/100-unittest-pyunit.md rename to src/data/roadmaps/python/content/unittest--pyunit@b4he_RO17C3ScNeUd6v2b.md diff --git a/src/data/roadmaps/python/content/uv@p3Frfs6oxpuciUzeCEsvb.md b/src/data/roadmaps/python/content/uv@p3Frfs6oxpuciUzeCEsvb.md new file mode 100644 index 000000000..a8cad5c8e --- /dev/null +++ b/src/data/roadmaps/python/content/uv@p3Frfs6oxpuciUzeCEsvb.md @@ -0,0 +1,7 @@ +# uv + +uv is an "extremely fast" python package installer and resolver. + +Learn more about it using the following resources: + +- [@official@uv GitHub Repository](https://github.com/astral-sh/uv) \ No newline at end of file diff --git a/src/data/roadmaps/python/content/100-python-basics/101-variables-and-datatypes.md b/src/data/roadmaps/python/content/variables-and-data-types@dEFLBGpiH6nbSMeR7ecaT.md similarity index 100% rename from src/data/roadmaps/python/content/100-python-basics/101-variables-and-datatypes.md rename to src/data/roadmaps/python/content/variables-and-data-types@dEFLBGpiH6nbSMeR7ecaT.md diff --git a/src/data/roadmaps/python/content/virutalenv@_IXXTSwQOgYzYIUuKVWNE.md b/src/data/roadmaps/python/content/virutalenv@_IXXTSwQOgYzYIUuKVWNE.md new file mode 100644 index 000000000..c87e0c8ee --- /dev/null +++ b/src/data/roadmaps/python/content/virutalenv@_IXXTSwQOgYzYIUuKVWNE.md @@ -0,0 +1,7 @@ +# virutalenv + +`virtualenv` is a tool to create isolated Python environments. It creates a folder which contains all the necessary executables to use the packages that a Python project would need. + +Learn more about `virtualenv` by visiting the following resources: + +- [@official@Virtual Environments](https://virtualenv.pypa.io/en/latest/) \ No newline at end of file diff --git a/src/data/roadmaps/python/content/yapf@tsh_vbhzKz1-H9Vh69tsK.md b/src/data/roadmaps/python/content/yapf@tsh_vbhzKz1-H9Vh69tsK.md new file mode 100644 index 000000000..d45311a99 --- /dev/null +++ b/src/data/roadmaps/python/content/yapf@tsh_vbhzKz1-H9Vh69tsK.md @@ -0,0 +1,7 @@ +# yapf + +yapf is a formatter for Python files. It is a tool that automatically formats Python code to conform to the PEP 8 style guide. It is similar to black but has more configuration options. + +Learn more about yapf and how to use it effectively in your Python projects. + +- [@official@yapf Documentation](https://github.com/google/yapf) \ No newline at end of file diff --git a/src/data/roadmaps/python/migration-mapping.json b/src/data/roadmaps/python/migration-mapping.json new file mode 100644 index 000000000..44428fb29 --- /dev/null +++ b/src/data/roadmaps/python/migration-mapping.json @@ -0,0 +1,48 @@ +{ + "python-basics": "JDDG4KfhtIlw1rkNCzUli", + "python-basics:basic-syntax": "6xRncUs3_vxVbDur567QA", + "python-basics:variables-and-datatypes": "dEFLBGpiH6nbSMeR7ecaT", + "python-basics:conditionals": "NP1kjSk0ujU0Gx-ajNHlR", + "python-basics:typecasting-exceptions": "R9DQNc0AyAQ2HLpP4HOk6", + "python-basics:functions": "-DJgS6l2qngfwurExlmmT", + "python-basics:lists-tuples-sets-dictionaries": "UT_SR7G-LYtzqooWrEtF1", + "data-structures-and-algorithms": "VJSIbYJcy2MC6MOFBrqXi", + "data-structures-and-algorithms:arrays-linked-lists": "kIuns7FOwapwtFLKo1phQ", + "data-structures-and-algorithms:heaps-stacks-queues": "rSfg5M65LyZldhrdWOr90", + "data-structures-and-algorithms:hash-tables": "0-m8jVuDKE8hX1QorKGTM", + "data-structures-and-algorithms:binary-search-trees": "7NZlydjm4432vLY1InBS7", + "data-structures-and-algorithms:recursion": "94KnPMQdNTOwQkUv37tAk", + "data-structures-and-algorithms:sorting-algorithms": "YNptpfK9qv2ovmkUXLkJT", + "python-advanced-topics:modules": "274uk28wzxn6EKWQzLpHs", + "python-advanced-topics:modules:builtin-modules": "08XifLQ20c4FKI_4AWNBQ", + "python-advanced-topics:modules:custom-modules": "l7k0qTYe42wYBTlT2-1cy", + "python-advanced-topics:oop": "P_Di-XPSDITmU3xKQew8G", + "python-advanced-topics:oop:classes": "AqwzR8dZKLQIoj_6KKZ3t", + "python-advanced-topics:oop:inheritance": "S0FLE70szSVUPI0CDEQK7", + "python-advanced-topics:oop:methods-dunder": "zAS4YiEJ6VPsyABrkIG8i", + "python-advanced-topics:regular-expressions": "7t6mJBsaFMWPi7o9fbhhq", + "python-advanced-topics:decorators": "pIluLJkySqn_gI_GykV6G", + "python-advanced-topics:lambdas": "aWHgAk959DPUZL46CeRiI", + "python-advanced-topics:iterators": "aB1LSQjDEQb_BxueOcnxU", + "python-package-managers": "qeCMw-sJ2FR4UxvU9DDzv", + "python-package-managers:pypi": "1dfOTOGsOk5XE3bnZs8Ht", + "python-package-managers:pip": "iVhQnp6hpgVZDNJ0XoVra", + "python-package-managers:conda": "uh67D1u-Iv5cZamRgFEJg", + "python-package-managers:poetry": "uXd2B01GVBEQNXQE8RATT", + "python-advanced-topics:list-comprehensions": "4gtmtYWYRWqwLdZRL0XMg", + "python-advanced-topics:generator-expressions": "jnLIVRrWxcX3yq3Op91Vr", + "python-advanced-topics:paradigms": "4GU5HNi3W8yFkImVY9ZpW", + "python-frameworks": "0-ShORjGnQlAdcwjtxdEB", + "python-frameworks:synchronous:pyramid": "DHtskqATeAVKgaazdhXKD", + "python-frameworks:fastapi": "XeQSmvAsGSTi8dd7QVHxn", + "python-frameworks:synchronous:django": "x1V8GjdjANTnhP6YXMbgC", + "python-frameworks:synchronous:flask": "HKsGyRzntjh1UbRZSWh_4", + "python-frameworks:asynchronous:gevent": "InUJIGmTnf0X4cSoLuCEQ", + "python-frameworks:asynchronous:aiohttp": "IBVAvFtN4mnIPbIuyUvEb", + "python-frameworks:asynchronous:tornado": "zey2C6BdzsHJAlb_K3qrP", + "python-frameworks:asynchronous:sanic": "9RGpqsj9jHz0_-r7EvRcw", + "python-testing:doctest": "aVclygxoA9ePU5IxaORSH", + "python-testing:nose": "SSnzpijHLO5_l7DNEoMfx", + "python-testing:pytest": "3FDwJpesfelEyJrNWtm0V", + "python-testing:unittest-pyunit": "b4he_RO17C3ScNeUd6v2b" +} \ No newline at end of file diff --git a/src/data/roadmaps/python/python.json b/src/data/roadmaps/python/python.json index 4273608ab..18ab47065 100644 --- a/src/data/roadmaps/python/python.json +++ b/src/data/roadmaps/python/python.json @@ -1,4154 +1,4283 @@ { - "mockup": { - "controls": { - "control": [ - { - "ID": "881", - "typeID": "Arrow", - "zOrder": "0", - "w": "166", - "h": "88", - "measuredW": "150", - "measuredH": "100", - "x": "992", - "y": "1160", - "properties": { - "curvature": "0", - "leftArrow": "false", - "rightArrow": "false", - "color": "10027263", - "stroke": "dotted", - "p0": { - "x": 0.047263099007864184, - "y": -0.34666666666657875 - }, - "p1": { - "x": 0.6549769871651536, - "y": 0.174281001668511 - }, - "p2": { - "x": 166.5, - "y": 88 - } - } - }, - { - "ID": "882", - "typeID": "Arrow", - "zOrder": "1", - "w": "170", - "h": "86", - "measuredW": "150", - "measuredH": "100", - "x": "998", - "y": "1058", - "properties": { - "curvature": "0", - "leftArrow": "false", - "rightArrow": "false", - "color": "10027263", - "stroke": "dotted", - "p0": { - "x": 169.5, - "y": 0 - }, - "p1": { - "x": 0.3852928374516326, - "y": 0.17075916875184752 - }, - "p2": { - "x": -0.05325918258233742, - "y": 85.87473104876676 - } - } - }, - { - "ID": "883", - "typeID": "Arrow", - "zOrder": "2", - "w": "3", - "h": "759", - "measuredW": "150", - "measuredH": "100", - "x": "877", - "y": "726", - "properties": { - "curvature": "0", - "leftArrow": "false", - "rightArrow": "false", - "color": "10027263", - "p0": { - "x": 0, - "y": -0.03469933135352221 - }, - "p1": { - "x": 0.4604452230239244, - "y": 0.0036766536054163926 - }, - "p2": { - "x": 0, - "y": 759.3807619344086 - } - } - }, - { - "ID": "884", - "typeID": "Arrow", - "zOrder": "3", - "w": "185", - "h": "119", - "measuredW": "150", - "measuredH": "100", - "x": "641", - "y": "1360", - "properties": { - "curvature": "0", - "leftArrow": "false", - "rightArrow": "false", - "color": "10027263", - "stroke": "dotted", - "p0": { - "x": -0.3653808564997689, - "y": 0.03342988349049847 - }, - "p1": { - "x": 0.469829518506724, - "y": -0.12837852167583222 - }, - "p2": { - "x": 184.49447129673388, - "y": 119.27981368077667 - } - } - }, - { - "ID": "885", - "typeID": "Arrow", - "zOrder": "4", - "w": "134", - "h": "79", - "measuredW": "150", - "measuredH": "100", - "x": "635", - "y": "1402", - "properties": { - "curvature": "0", - "leftArrow": "false", - "rightArrow": "false", - "color": "10027263", - "stroke": "dotted", - "p0": { - "x": -0.3653808564997689, - "y": 0.03342988349049847 - }, - "p1": { - "x": 0.4200622685609742, - "y": -0.07562893907101238 - }, - "p2": { - "x": 133.83651565076377, - "y": 78.99672142762438 - } - } - }, - { - "ID": "886", - "typeID": "Arrow", - "zOrder": "5", - "w": "135", - "h": "32", - "measuredW": "150", - "measuredH": "100", - "x": "636", - "y": "1452", - "properties": { - "curvature": "0", - "leftArrow": "false", - "rightArrow": "false", - "color": "10027263", - "stroke": "dotted", - "p0": { - "x": -0.3653808564997689, - "y": 0.03342988349049847 - }, - "p1": { - "x": 0.4200622685609743, - "y": -0.0756289390710124 - }, - "p2": { - "x": 134.55342339761137, - "y": 32.43053692131957 - } - } - }, - { - "ID": "887", - "typeID": "Arrow", - "zOrder": "6", - "w": "140", - "h": "3", - "measuredW": "150", - "measuredH": "100", - "x": "636", - "y": "1498", - "properties": { - "curvature": "0", - "leftArrow": "false", - "rightArrow": "false", - "color": "10027263", - "stroke": "dotted", - "p0": { - "x": -0.3653808564997689, - "y": 2.0334298834904985 - }, - "p1": { - "x": 0.4604452230239242, - "y": 0.0036766536054163973 - }, - "p2": { - "x": 140, - "y": -0.5 - } - } - }, - { - "ID": "888", - "typeID": "Arrow", - "zOrder": "7", - "w": "1", - "h": "188", - "measuredW": "150", - "measuredH": "100", - "x": "1225", - "y": "1050", - "properties": { - "curvature": "0", - "leftArrow": "false", - "rightArrow": "false", - "color": "10027263", - "stroke": "dotted", - "p0": { - "x": 0, - "y": 0 - }, - "p1": { - "x": 0.4604452230239244, - "y": 0.0036766536054163917 - }, - "p2": { - "x": 0, - "y": 188.29796919462592 - } - } - }, - { - "ID": "889", - "typeID": "Arrow", - "zOrder": "8", - "w": "1", - "h": "177", - "measuredW": "150", - "measuredH": "100", - "x": "879", - "y": "1494", - "properties": { - "curvature": "0", - "leftArrow": "false", - "rightArrow": "false", - "color": "10027263", - "p0": { - "x": 0, - "y": -0.03469933135352221 - }, - "p1": { - "x": 0.4604452230239244, - "y": 0.003676653605416393 - }, - "p2": { - "x": 0, - "y": 177.44974025524903 - } - } - }, - { - "ID": "890", - "typeID": "Arrow", - "zOrder": "9", - "w": "87", - "h": "47", - "measuredW": "150", - "measuredH": "100", - "x": "1040", - "y": "1257", - "properties": { - "curvature": "0", - "leftArrow": "false", - "rightArrow": "false", - "color": "10027263", - "stroke": "dotted", - "p0": { - "x": -0.03211016308387116, - "y": 47.543452474342075 - }, - "p1": { - "x": 0.412067352666043, - "y": 0.10477081384471411 - }, - "p2": { - "x": 87.06627144096728, - "y": 0.17415721599832068 - } - } - }, - { - "ID": "891", - "typeID": "Arrow", - "zOrder": "10", - "w": "138", - "h": "87", - "measuredW": "150", - "measuredH": "100", - "x": "1041", - "y": "1260", - "properties": { - "curvature": "0", - "leftArrow": "false", - "rightArrow": "false", - "color": "10027263", - "stroke": "dotted", - "p0": { - "x": 0.49593161944335407, - "y": 87.32862238510415 - }, - "p1": { - "x": 0.4648888466117703, - "y": 0.11370478535773203 - }, - "p2": { - "x": 138.01969204689271, - "y": 0.23024078105277113 - } - } - }, - { - "ID": "892", - "typeID": "Arrow", - "zOrder": "11", - "w": "139", - "h": "134", - "measuredW": "150", - "measuredH": "100", - "x": "1043", - "y": "1262", - "properties": { - "curvature": "0", - "leftArrow": "false", - "rightArrow": "false", - "color": "10027263", - "stroke": "dotted", - "p0": { - "x": 0.023973401970465602, - "y": 134.2259594259749 - }, - "p1": { - "x": 0.4719038339569139, - "y": 0.11801477411186584 - }, - "p2": { - "x": 139.07577561194717, - "y": -0.24171743642000365 - } - } - }, - { - "ID": "893", - "typeID": "Arrow", - "zOrder": "12", - "w": "112", - "h": "1", - "measuredW": "150", - "measuredH": "100", - "x": "1017", - "y": "1252", - "properties": { - "curvature": "0", - "leftArrow": "false", - "rightArrow": "false", - "color": "10027263", - "stroke": "dotted", - "p0": { - "x": 0.047263099007864184, - "y": 0.6533333333334213 - }, - "p1": { - "x": 0.4604452230239243, - "y": 0.0036766536054163913 - }, - "p2": { - "x": 111.59431322349451, - "y": 0.6533333333334213 - } - } - }, - { - "ID": "894", - "typeID": "Arrow", - "zOrder": "13", - "w": "112", - "h": "1", - "measuredW": "150", - "measuredH": "100", - "x": "1017", - "y": "1047", - "properties": { - "curvature": "0", - "leftArrow": "false", - "rightArrow": "false", - "color": "10027263", - "stroke": "dotted", - "p0": { - "x": 0.047263099007864184, - "y": 0.6533333333334213 - }, - "p1": { - "x": 0.4604452230239243, - "y": 0.0036766536054163913 - }, - "p2": { - "x": 111.59431322349451, - "y": 0.6533333333334213 - } - } - }, - { - "ID": "895", - "typeID": "Arrow", - "zOrder": "14", - "w": "297", - "h": "511", - "measuredW": "150", - "measuredH": "100", - "x": "522", - "y": "733", - "properties": { - "curvature": "0", - "leftArrow": "false", - "rightArrow": "false", - "color": "10027263", - "stroke": "dotted", - "p0": { - "x": 287.7775635498863, - "y": -0.48328505825475077 - }, - "p1": { - "x": 0.5876470144844372, - "y": 0.25068750623071534 - }, - "p2": { - "x": -0.38112074454181766, - "y": 510.0787577061892 - } - } - }, - { - "ID": "896", - "typeID": "Canvas", - "zOrder": "15", - "w": "131", - "h": "166", - "measuredW": "100", - "measuredH": "70", - "x": "401", - "y": "1169" - }, - { - "ID": "897", - "typeID": "Arrow", - "zOrder": "16", - "w": "278", - "h": "304", - "measuredW": "150", - "measuredH": "100", - "x": "514", - "y": "739", - "properties": { - "curvature": "0", - "leftArrow": "false", - "rightArrow": "false", - "color": "10027263", - "stroke": "dotted", - "p0": { - "x": 278.60848608141043, - "y": -0.474107944288221 - }, - "p1": { - "x": 0.5805567346688285, - "y": 0.3260932937151271 - }, - "p2": { - "x": 0.4694310921026954, - "y": 287.966393526105 - } - } - }, - { - "ID": "898", - "typeID": "Arrow", - "zOrder": "17", - "w": "1", - "h": "205", - "measuredW": "150", - "measuredH": "100", - "x": "672", - "y": "624", - "properties": { - "curvature": "0", - "leftArrow": "false", - "rightArrow": "false", - "color": "10027263", - "stroke": "dotted", - "p0": { - "x": 0, - "y": 0.34052498951359667 - }, - "p1": { - "x": 0.46044522302392416, - "y": 0.0036766536054163913 - }, - "p2": { - "x": 0, - "y": 205.5 - } - } - }, - { - "ID": "899", - "typeID": "Arrow", - "zOrder": "18", - "w": "129", - "h": "131", - "measuredW": "150", - "measuredH": "100", - "x": "527", - "y": "590", - "properties": { - "curvature": "0", - "leftArrow": "false", - "rightArrow": "false", - "color": "10027263", - "stroke": "dotted", - "p0": { - "x": 0, - "y": 0 - }, - "p1": { - "x": 0.4613181955189419, - "y": -0.10434039987944232 - }, - "p2": { - "x": 129, - "y": 130.5 - } - } - }, - { - "ID": "900", - "typeID": "Arrow", - "zOrder": "19", - "w": "128", - "h": "91", - "measuredW": "150", - "measuredH": "100", - "x": "527", - "y": "637", - "properties": { - "curvature": "0", - "leftArrow": "false", - "rightArrow": "false", - "color": "10027263", - "stroke": "dotted", - "p0": { - "x": 0, - "y": 0 - }, - "p1": { - "x": 0.461318195518942, - "y": -0.10434039987944228 - }, - "p2": { - "x": 128, - "y": 90.5 - } - } - }, - { - "ID": "901", - "typeID": "Arrow", - "zOrder": "20", - "w": "134", - "h": "50", - "measuredW": "150", - "measuredH": "100", - "x": "525", - "y": "684", - "properties": { - "curvature": "0", - "leftArrow": "false", - "rightArrow": "false", - "color": "10027263", - "stroke": "dotted", - "p0": { - "x": 0, - "y": 0 - }, - "p1": { - "x": 0.461318195518942, - "y": -0.10434039987944237 - }, - "p2": { - "x": 134, - "y": 49.5 - } - } - }, - { - "ID": "902", - "typeID": "Arrow", - "zOrder": "21", - "w": "138", - "h": "6", - "measuredW": "150", - "measuredH": "100", - "x": "516", - "y": "737", - "properties": { - "curvature": "0", - "leftArrow": "false", - "rightArrow": "false", - "color": "10027263", - "p0": { - "x": 0, - "y": -0.5 - }, - "p1": { - "x": 0.46044522302392427, - "y": 0.0036766536054163978 - }, - "p2": { - "x": 138, - "y": 5.5 - }, - "stroke": "dotted" - } - }, - { - "ID": "903", - "typeID": "Arrow", - "zOrder": "22", - "w": "113", - "h": "115", - "measuredW": "150", - "measuredH": "100", - "x": "876", - "y": "618", - "properties": { - "curvature": "0", - "leftArrow": "false", - "rightArrow": "false", - "color": "10027263", - "p0": { - "x": 112.5, - "y": -0.5 - }, - "p1": { - "x": 0.48937720509145993, - "y": -0.20691804593983584 - }, - "p2": { - "x": -0.29660178475955945, - "y": 114.83149154894579 - } - } - }, - { - "ID": "904", - "typeID": "Arrow", - "zOrder": "23", - "w": "1", - "h": "76", - "measuredW": "150", - "measuredH": "100", - "x": "1114", - "y": "611", - "properties": { - "curvature": "0", - "leftArrow": "false", - "rightArrow": "false", - "color": "10027263", - "p0": { - "x": 0, - "y": 0 - }, - "p1": { - "x": 0.4604452230239241, - "y": 0.0036766536054163913 - }, - "p2": { - "x": 0, - "y": 76 - }, - "stroke": "dotted" - } - }, - { - "ID": "905", - "typeID": "Arrow", - "zOrder": "24", - "w": "221", - "h": "117", - "measuredW": "150", - "measuredH": "100", - "x": "764", - "y": "489", - "properties": { - "curvature": "0", - "leftArrow": "false", - "rightArrow": "false", - "color": "10027263", - "p0": { - "x": 0.5, - "y": 0 - }, - "p1": { - "x": 0.3557172557172557, - "y": -0.2189189189189189 - }, - "p2": { - "x": 221.5, - "y": 117 - } - } - }, - { - "ID": "906", - "typeID": "Arrow", - "zOrder": "25", - "w": "1", - "h": "95", - "measuredW": "150", - "measuredH": "100", - "x": "764", - "y": "179", - "properties": { - "curvature": "0", - "leftArrow": "false", - "rightArrow": "false", - "color": "10027263", - "p0": { - "x": 0, - "y": -0.27685841682816204 - }, - "p1": { - "x": 0.46044522302392427, - "y": 0.003676653605416392 - }, - "p2": { - "x": 0, - "y": 94.59824914485046 - }, - "stroke": "dotted" - } - }, - { - "ID": "907", - "typeID": "Arrow", - "zOrder": "26", - "w": "1", - "h": "80", - "measuredW": "150", - "measuredH": "100", - "x": "764", - "y": "282", - "properties": { - "curvature": "0", - "leftArrow": "false", - "rightArrow": "false", - "color": "10027263", - "p0": { - "x": 0, - "y": 0 - }, - "p1": { - "x": 0.46044522302392416, - "y": 0.003676653605416392 - }, - "p2": { - "x": 0, - "y": 80.06287646587509 - } - } - }, - { - "ID": "908", - "typeID": "Arrow", - "zOrder": "27", - "w": "96", - "h": "46", - "measuredW": "150", - "measuredH": "100", - "x": "891", - "y": "436", - "properties": { - "curvature": "0", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "color": "10027263", - "p0": { - "x": 95.72077500246428, - "y": 0.33535944713611343 - }, - "p1": { - "x": 0.5365907376221624, - "y": 0.09967779237460443 - }, - "p2": { - "x": 0, - "y": 46 - } - } - }, - { - "ID": "909", - "typeID": "Arrow", - "zOrder": "28", - "w": "98", - "h": "43", - "measuredW": "150", - "measuredH": "100", - "x": "887", - "y": "495", - "properties": { - "curvature": "0", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "color": "10027263", - "p0": { - "x": 98.30225589020824, - "y": 43.46873552956811 - }, - "p1": { - "x": 0.3374725601408122, - "y": -0.11051464136788798 - }, - "p2": { - "x": 0, - "y": 0 - } - } - }, - { - "ID": "910", - "typeID": "Arrow", - "zOrder": "29", - "w": "99", - "h": "50", - "measuredW": "150", - "measuredH": "100", - "x": "575", - "y": "436", - "properties": { - "curvature": "0", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "color": "10027263", - "p0": { - "x": 98, - "y": 50 - }, - "p1": { - "x": 0.598612099644128, - "y": 0.12644128113878997 - }, - "p2": { - "x": -0.5, - "y": 0 - } - } - }, - { - "ID": "911", - "typeID": "Arrow", - "zOrder": "30", - "w": "99", - "h": "50", - "measuredW": "150", - "measuredH": "100", - "x": "576", - "y": "492", - "properties": { - "curvature": "0", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "color": "10027263", - "p0": { - "x": 98, - "y": 0 - }, - "p1": { - "x": 0.6551455674158455, - "y": -0.1193632321907845 - }, - "p2": { - "x": -0.5, - "y": 50 - } - } - }, - { - "ID": "912", - "typeID": "Arrow", - "zOrder": "31", - "w": "115", - "h": "3", - "measuredW": "150", - "measuredH": "100", - "x": "564", - "y": "487", - "properties": { - "curvature": "0", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "color": "10027263", - "p0": { - "x": 115, - "y": 1 - }, - "p1": { - "x": 0.5085059730833207, - "y": 0.02181309541811583 - }, - "p2": { - "x": 0, - "y": 0 - } - } - }, - { - "ID": "913", - "typeID": "Arrow", - "zOrder": "32", - "w": "143", - "h": "3", - "measuredW": "150", - "measuredH": "100", - "x": "867", - "y": "487", - "properties": { - "curvature": "0", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "color": "10027263", - "p0": { - "x": 143, - "y": 0 - }, - "p1": { - "x": 0.5536354056902003, - "y": 0.01338250790305583 - }, - "p2": { - "x": 0, - "y": 2 - } - } - }, - { - "ID": "914", - "typeID": "Label", - "zOrder": "33", - "measuredW": "87", - "measuredH": "36", - "x": "721", - "y": "368", - "properties": { - "text": "Python", - "size": "28" - } - }, - { - "ID": "915", - "typeID": "Arrow", - "zOrder": "34", - "w": "1", - "h": "55", - "measuredW": "150", - "measuredH": "100", - "x": "764", - "y": "420", - "properties": { - "curvature": "0", - "leftArrow": "false", - "rightArrow": "false", - "color": "10027263", - "p0": { - "x": 0, - "y": -0.24280136823927023 - }, - "p1": { - "x": 0.4604452230239243, - "y": 0.003676653605416392 - }, - "p2": { - "x": 0, - "y": 55 - } - } - }, - { - "ID": "916", - "typeID": "__group__", - "zOrder": "35", - "measuredW": "262", - "measuredH": "43", - "w": "262", - "h": "43", - "x": "644", - "y": "467", - "properties": { - "controlName": "100-python-basics" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Canvas", - "zOrder": "0", - "w": "262", - "h": "43", - "measuredW": "100", - "measuredH": "70", - "x": "0", - "y": "0", - "properties": { - "color": "16776960" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "123", - "measuredH": "24", - "x": "69", - "y": "10", - "properties": { - "size": "16", - "text": "Learn the Basics" - } - } - ] - } - } - }, - { - "ID": "917", - "typeID": "__group__", - "zOrder": "36", - "measuredW": "222", - "measuredH": "42", - "w": "222", - "h": "42", - "x": "359", - "y": "422", - "properties": { - "controlName": "100-python-basics:basic-syntax" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Canvas", - "zOrder": "0", - "w": "222", - "h": "42", - "measuredW": "100", - "measuredH": "70", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "w": "95", - "measuredW": "92", - "measuredH": "24", - "x": "64", - "y": "9", - "properties": { - "size": "16", - "text": "Basic Syntax" - } - } - ] - } - } - }, - { - "ID": "918", - "typeID": "__group__", - "zOrder": "37", - "measuredW": "222", - "measuredH": "42", - "w": "222", - "h": "42", - "x": "359", - "y": "468", - "properties": { - "controlName": "101-python-basics:variables-and-datatypes" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Canvas", - "zOrder": "0", - "w": "222", - "h": "42", - "measuredW": "100", - "measuredH": "70", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "w": "188", - "measuredW": "183", - "measuredH": "24", - "x": "16", - "y": "9", - "properties": { - "size": "16", - "text": "Variables and Data Types" - } - } - ] - } - } - }, - { - "ID": "919", - "typeID": "__group__", - "zOrder": "38", - "measuredW": "256", - "measuredH": "42", - "w": "256", - "h": "42", - "x": "978", - "y": "514", - "properties": { - "controlName": "105-python-basics:lists-tuples-sets-dictionaries" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Canvas", - "zOrder": "0", - "w": "256", - "h": "42", - "measuredW": "100", - "measuredH": "70", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "221", - "measuredH": "24", - "x": "17", - "y": "9", - "properties": { - "size": "16", - "text": "Lists, Tuples, Sets, Dictionaries" - } - } - ] - } - } - }, - { - "ID": "920", - "typeID": "__group__", - "zOrder": "39", - "measuredW": "222", - "measuredH": "42", - "w": "222", - "h": "42", - "x": "359", - "y": "514", - "properties": { - "controlName": "102-python-basics:conditionals" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Canvas", - "zOrder": "0", - "w": "222", - "h": "42", - "measuredW": "100", - "measuredH": "70", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "w": "92", - "measuredW": "90", - "measuredH": "24", - "x": "65", - "y": "9", - "properties": { - "size": "16", - "text": "Conditionals" - } - } - ] - } - } - }, - { - "ID": "921", - "typeID": "__group__", - "zOrder": "40", - "measuredW": "254", - "measuredH": "42", - "w": "254", - "h": "42", - "x": "978", - "y": "421", - "properties": { - "controlName": "103-python-basics:typecasting-exceptions" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Canvas", - "zOrder": "0", - "w": "254", - "h": "42", - "measuredW": "100", - "measuredH": "70", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "181", - "measuredH": "24", - "x": "37", - "y": "9", - "properties": { - "size": "16", - "text": "Type Casting, Exceptions" - } - } - ] - } - } - }, - { - "ID": "922", - "typeID": "__group__", - "zOrder": "41", - "measuredW": "256", - "measuredH": "42", - "w": "256", - "h": "42", - "x": "978", - "y": "468", - "properties": { - "controlName": "104-python-basics:functions" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Canvas", - "zOrder": "0", - "w": "256", - "h": "42", - "measuredW": "100", - "measuredH": "70", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "w": "200", - "measuredW": "198", - "measuredH": "24", - "x": "28", - "y": "9", - "properties": { - "text": "Functions, Builtin Functions", - "size": "16" - } - } - ] - } - } - }, - { - "ID": "923", - "typeID": "__group__", - "zOrder": "42", - "measuredW": "262", - "measuredH": "43", - "w": "262", - "h": "43", - "x": "973", - "y": "591", - "properties": { - "controlName": "101-data-structures-and-algorithms" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Canvas", - "zOrder": "0", - "w": "262", - "h": "43", - "measuredW": "100", - "measuredH": "70", - "x": "0", - "y": "0", - "properties": { - "color": "16776960" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "219", - "measuredH": "24", - "x": "21", - "y": "10", - "properties": { - "size": "16", - "text": "Datastructures and Algorithms" - } - } - ] - } - } - }, - { - "ID": "924", - "typeID": "__group__", - "zOrder": "43", - "measuredW": "222", - "measuredH": "42", - "w": "222", - "h": "42", - "x": "1014", - "y": "666", - "properties": { - "controlName": "100-data-structures-and-algorithms:arrays-linked-lists" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Canvas", - "zOrder": "0", - "w": "222", - "h": "42", - "measuredW": "100", - "measuredH": "70", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "168", - "measuredH": "24", - "x": "27", - "y": "9", - "properties": { - "size": "16", - "text": "Arrays and Linked Lists" - } - } - ] - } - } - }, - { - "ID": "925", - "typeID": "__group__", - "zOrder": "44", - "measuredW": "222", - "measuredH": "42", - "w": "222", - "h": "42", - "x": "1014", - "y": "711", - "properties": { - "controlName": "101-data-structures-and-algorithms:heaps-stacks-queues" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Canvas", - "zOrder": "0", - "w": "222", - "h": "42", - "measuredW": "100", - "measuredH": "70", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "195", - "measuredH": "24", - "x": "14", - "y": "8", - "properties": { - "size": "16", - "text": "Heaps, Stacks and Queues" - } - } - ] - } - } - }, - { - "ID": "926", - "typeID": "__group__", - "zOrder": "45", - "measuredW": "222", - "measuredH": "42", - "w": "222", - "h": "42", - "x": "1015", - "y": "757", - "properties": { - "controlName": "102-data-structures-and-algorithms:hash-tables" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Canvas", - "zOrder": "0", - "w": "222", - "h": "42", - "measuredW": "100", - "measuredH": "70", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "89", - "measuredH": "24", - "x": "66", - "y": "9", - "properties": { - "size": "16", - "text": "Hash Tables" - } - } - ] - } - } - }, - { - "ID": "927", - "typeID": "__group__", - "zOrder": "46", - "measuredW": "222", - "measuredH": "42", - "w": "222", - "h": "42", - "x": "1014", - "y": "802", - "properties": { - "controlName": "103-data-structures-and-algorithms:binary-search-trees" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Canvas", - "zOrder": "0", - "w": "222", - "h": "42", - "measuredW": "100", - "measuredH": "70", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "146", - "measuredH": "24", - "x": "38", - "y": "9", - "properties": { - "size": "16", - "text": "Binary Search Trees" - } - } - ] - } - } - }, - { - "ID": "928", - "typeID": "__group__", - "zOrder": "47", - "measuredW": "222", - "measuredH": "42", - "w": "222", - "h": "42", - "x": "1014", - "y": "848", - "properties": { - "controlName": "104-data-structures-and-algorithms:recursion" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Canvas", - "zOrder": "0", - "w": "222", - "h": "42", - "measuredW": "100", - "measuredH": "70", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "74", - "measuredH": "24", - "x": "74", - "y": "9", - "properties": { - "size": "16", - "text": "Recursion" - } - } - ] - } - } - }, - { - "ID": "929", - "typeID": "__group__", - "zOrder": "48", - "measuredW": "222", - "measuredH": "42", - "w": "222", - "h": "42", - "x": "1014", - "y": "894", - "properties": { - "controlName": "105-data-structures-and-algorithms:sorting-algorithms" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Canvas", - "zOrder": "0", - "w": "222", - "h": "42", - "measuredW": "100", - "measuredH": "70", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "132", - "measuredH": "24", - "x": "45", - "y": "9", - "properties": { - "size": "16", - "text": "Sorting Algorithms" - } - } - ] - } - } - }, - { - "ID": "930", - "typeID": "__group__", - "zOrder": "49", - "measuredW": "311", - "measuredH": "43", - "w": "311", - "h": "43", - "x": "642", - "y": "710", - "properties": { - "controlName": "102-python-advanced-topics" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Canvas", - "zOrder": "0", - "w": "311", - "h": "43", - "measuredW": "100", - "measuredH": "70", - "x": "0", - "y": "0", - "properties": { - "color": "16776960" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "122", - "measuredH": "24", - "x": "95", - "y": "10", - "properties": { - "size": "16", - "text": "Advanced Topics" - } - } - ] - } - } - }, - { - "ID": "931", - "typeID": "__group__", - "zOrder": "50", - "measuredW": "115", - "measuredH": "142", - "w": "115", - "h": "142", - "x": "600", - "y": "804", - "properties": { - "controlName": "105-python-advanced-topics:modules" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Canvas", - "zOrder": "0", - "w": "115", - "h": "142", - "measuredW": "100", - "measuredH": "70", - "x": "0", - "y": "0" - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "62", - "measuredH": "24", - "x": "27", - "y": "11", - "properties": { - "size": "16", - "text": "Modules" - } - } - ] - } - } - }, - { - "ID": "932", - "typeID": "__group__", - "zOrder": "51", - "measuredW": "90", - "measuredH": "42", - "w": "90", - "h": "42", - "x": "613", - "y": "845", - "properties": { - "controlName": "100-python-advanced-topics:modules:builtin-modules" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Canvas", - "zOrder": "0", - "w": "90", - "h": "42", - "measuredW": "100", - "measuredH": "70", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "45", - "measuredH": "24", - "x": "22", - "y": "9", - "properties": { - "size": "16", - "text": "Builtin" - } - } - ] - } - } - }, - { - "ID": "933", - "typeID": "__group__", - "zOrder": "52", - "measuredW": "91", - "measuredH": "42", - "w": "91", - "h": "42", - "x": "612", - "y": "891", - "properties": { - "controlName": "101-python-advanced-topics:modules:custom-modules" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Canvas", - "zOrder": "0", - "w": "91", - "h": "42", - "measuredW": "100", - "measuredH": "70", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "56", - "measuredH": "24", - "x": "18", - "y": "9", - "properties": { - "size": "16", - "text": "Custom" - } - } - ] - } - } - }, - { - "ID": "934", - "typeID": "__group__", - "zOrder": "53", - "measuredW": "119", - "measuredH": "42", - "w": "119", - "h": "42", - "x": "596", - "y": "603", - "properties": { - "controlName": "104-python-advanced-topics:iterators" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Canvas", - "zOrder": "0", - "w": "119", - "h": "42", - "measuredW": "100", - "measuredH": "70", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "62", - "measuredH": "24", - "x": "29", - "y": "9", - "properties": { - "size": "16", - "text": "Iterators" - } - } - ] - } - } - }, - { - "ID": "935", - "typeID": "__group__", - "zOrder": "54", - "measuredW": "232", - "measuredH": "43", - "w": "232", - "h": "43", - "x": "781", - "y": "1130", - "properties": { - "controlName": "106-python-frameworks" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Canvas", - "zOrder": "0", - "w": "232", - "h": "43", - "measuredW": "100", - "measuredH": "70", - "x": "0", - "y": "0", - "properties": { - "color": "16776960" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "140", - "measuredH": "24", - "x": "46", - "y": "10", - "properties": { - "size": "16", - "text": "Learn a Framework" - } - } - ] - } - } - }, - { - "ID": "936", - "typeID": "__group__", - "zOrder": "55", - "measuredW": "183", - "measuredH": "43", - "w": "183", - "h": "43", - "x": "752", - "y": "1467", - "properties": { - "controlName": "108-python-testing" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Canvas", - "zOrder": "0", - "w": "183", - "h": "43", - "measuredW": "100", - "measuredH": "70", - "x": "0", - "y": "0", - "properties": { - "color": "16776960" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "128", - "measuredH": "24", - "x": "28", - "y": "10", - "properties": { - "size": "16", - "text": "Testing your Apps" - } - } - ] - } - } - }, - { - "ID": "937", - "typeID": "__group__", - "zOrder": "56", - "measuredW": "350", - "measuredH": "141", - "w": "350", - "h": "141", - "x": "1048", - "y": "153", - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Canvas", - "zOrder": "0", - "w": "350", - "h": "141", - "measuredW": "100", - "measuredH": "70", - "x": "0", - "y": "0" - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "314", - "measuredH": "25", - "x": "14", - "y": "17", - "properties": { - "size": "17", - "text": "Find the detailed version of this roadmap" - } - }, - { - "ID": "2", - "typeID": "Label", - "zOrder": "2", - "measuredW": "319", - "measuredH": "25", - "x": "14", - "y": "45", - "properties": { - "size": "17", - "text": "along with resources and other roadmaps" - } - }, - { - "ID": "3", - "typeID": "__group__", - "zOrder": "3", - "measuredW": "320", - "measuredH": "45", - "w": "320", - "h": "45", - "x": "15", - "y": "81", - "properties": { - "controlName": "ext_link:roadmap.sh" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Canvas", - "zOrder": "0", - "w": "320", - "h": "45", - "measuredW": "100", - "measuredH": "70", - "x": "0", - "y": "0", - "properties": { - "borderColor": "4273622", - "color": "4273622" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "105", - "measuredH": "28", - "x": "141", - "y": "8", - "properties": { - "color": "16777215", - "size": "20", - "text": "roadmap.sh" - } - }, - { - "ID": "2", - "typeID": "Label", - "zOrder": "2", - "measuredW": "45", - "measuredH": "28", - "x": "64", - "y": "8", - "properties": { - "color": "16777215", - "size": "20", - "text": "https" - } - }, - { - "ID": "3", - "typeID": "Label", - "zOrder": "3", - "measuredW": "5", - "measuredH": "28", - "x": "113", - "y": "8", - "properties": { - "color": "16777215", - "size": "20", - "text": ":" - } - }, - { - "ID": "4", - "typeID": "Label", - "zOrder": "4", - "measuredW": "10", - "measuredH": "28", - "x": "120", - "y": "9", - "properties": { - "color": "16777215", - "size": "20", - "text": "/" - } - }, - { - "ID": "5", - "typeID": "Label", - "zOrder": "5", - "measuredW": "10", - "measuredH": "28", - "x": "128", - "y": "9", - "properties": { - "color": "16777215", - "size": "20", - "text": "/" - } - } - ] - } - } - } - ] - } - } - }, - { - "ID": "938", - "typeID": "__group__", - "zOrder": "57", - "measuredW": "374", - "measuredH": "50", - "w": "374", - "h": "50", - "x": "618", - "y": "249", - "properties": { - "controlName": "ext_link:roadmap.sh/backend" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "374", - "h": "50", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "4273622", - "borderColor": "4273622" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "320", - "measuredH": "25", - "x": "27", - "y": "12", - "properties": { - "size": "17", - "text": "Backend roadmap till Language Selection", - "color": "16777215" - } - } - ] - } - } - }, - { - "ID": "939", - "typeID": "Arrow", - "zOrder": "58", - "w": "1", - "h": "77", - "measuredW": "150", - "measuredH": "100", - "x": "444", - "y": "736", - "properties": { - "curvature": "0", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "color": "10027263", - "p0": { - "x": 0, - "y": 76.5 - }, - "p1": { - "x": 0.5494505494505496, - "y": 0 - }, - "p2": { - "x": 0, - "y": -0.5 - } - } - }, - { - "ID": "940", - "typeID": "__group__", - "zOrder": "59", - "measuredW": "131", - "measuredH": "184", - "w": "131", - "h": "184", - "x": "403", - "y": "719", - "properties": { - "controlName": "100-python-advanced-topics:oop" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Canvas", - "zOrder": "0", - "w": "131", - "h": "184", - "measuredW": "100", - "measuredH": "70", - "x": "0", - "y": "0" - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "35", - "measuredH": "24", - "x": "48", - "y": "9", - "properties": { - "text": "OOP", - "size": "16" - } - } - ] - } - } - }, - { - "ID": "941", - "typeID": "__group__", - "zOrder": "60", - "measuredW": "169", - "measuredH": "42", - "w": "169", - "h": "42", - "x": "350", - "y": "757", - "properties": { - "controlName": "102-python-advanced-topics:oop:classes" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Canvas", - "zOrder": "0", - "w": "169", - "h": "42", - "measuredW": "100", - "measuredH": "70", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "w": "60", - "measuredW": "58", - "measuredH": "24", - "x": "55", - "y": "9", - "properties": { - "size": "16", - "text": "Classes" - } - } - ] - } - } - }, - { - "ID": "942", - "typeID": "__group__", - "zOrder": "61", - "measuredW": "169", - "measuredH": "42", - "w": "169", - "h": "42", - "x": "350", - "y": "803", - "properties": { - "controlName": "101-python-advanced-topics:oop:inheritance" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Canvas", - "zOrder": "0", - "w": "169", - "h": "42", - "measuredW": "100", - "measuredH": "70", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "w": "86", - "measuredW": "83", - "measuredH": "24", - "x": "42", - "y": "9", - "properties": { - "size": "16", - "text": "Inheritance" - } - } - ] - } - } - }, - { - "ID": "943", - "typeID": "__group__", - "zOrder": "62", - "measuredW": "169", - "measuredH": "42", - "w": "169", - "h": "42", - "x": "350", - "y": "849", - "properties": { - "controlName": "100-python-advanced-topics:oop:methods-dunder" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Canvas", - "zOrder": "0", - "w": "169", - "h": "42", - "measuredW": "100", - "measuredH": "70", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "125", - "measuredH": "24", - "x": "20", - "y": "9", - "properties": { - "text": "Methods, Dunder", - "size": "16" - } - } - ] - } - } - }, - { - "ID": "944", - "typeID": "__group__", - "zOrder": "63", - "measuredW": "172", - "measuredH": "42", - "w": "172", - "h": "42", - "x": "360", - "y": "621", - "properties": { - "controlName": "102-python-advanced-topics:decorators" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Canvas", - "zOrder": "0", - "w": "172", - "h": "42", - "measuredW": "100", - "measuredH": "70", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "81", - "measuredH": "24", - "x": "45", - "y": "9", - "properties": { - "size": "16", - "text": "Decorators" - } - } - ] - } - } - }, - { - "ID": "945", - "typeID": "__group__", - "zOrder": "64", - "measuredW": "171", - "measuredH": "42", - "w": "171", - "h": "42", - "x": "361", - "y": "575", - "properties": { - "controlName": "101-python-advanced-topics:regular-expressions" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Canvas", - "zOrder": "0", - "w": "171", - "h": "42", - "measuredW": "100", - "measuredH": "70", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "49", - "measuredH": "24", - "x": "61", - "y": "9", - "properties": { - "size": "16", - "text": "RegEx" - } - } - ] - } - } - }, - { - "ID": "946", - "typeID": "__group__", - "zOrder": "65", - "measuredW": "174", - "measuredH": "42", - "w": "174", - "h": "42", - "x": "359", - "y": "667", - "properties": { - "controlName": "103-python-advanced-topics:lambdas" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Canvas", - "zOrder": "0", - "w": "174", - "h": "42", - "measuredW": "100", - "measuredH": "70", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "67", - "measuredH": "24", - "x": "53", - "y": "9", - "properties": { - "text": "Lambdas", - "size": "16" - } - } - ] - } - } - }, - { - "ID": "947", - "typeID": "__group__", - "zOrder": "66", - "measuredW": "173", - "measuredH": "241", - "w": "173", - "h": "241", - "x": "359", - "y": "919", - "properties": { - "controlName": "105-python-package-managers" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Canvas", - "zOrder": "0", - "w": "173", - "h": "241", - "measuredW": "100", - "measuredH": "70", - "x": "0", - "y": "0" - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "w": "141", - "measuredW": "141", - "measuredH": "24", - "x": "16", - "y": "16", - "properties": { - "text": "Package Managers", - "size": "16" - } - } - ] - } - } - }, - { - "ID": "948", - "typeID": "__group__", - "zOrder": "67", - "measuredW": "148", - "measuredH": "42", - "w": "148", - "h": "42", - "x": "372", - "y": "965", - "properties": { - "controlName": "100-python-package-managers:pypi" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Canvas", - "zOrder": "0", - "w": "148", - "h": "42", - "measuredW": "100", - "measuredH": "70", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "33", - "measuredH": "24", - "x": "57", - "y": "9", - "properties": { - "size": "16", - "text": "PyPI" - } - } - ] - } - } - }, - { - "ID": "949", - "typeID": "__group__", - "zOrder": "68", - "measuredW": "146", - "measuredH": "42", - "w": "146", - "h": "42", - "x": "373", - "y": "1011", - "properties": { - "controlName": "101-python-package-managers:pip" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Canvas", - "zOrder": "0", - "w": "146", - "h": "42", - "measuredW": "100", - "measuredH": "70", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "24", - "measuredH": "24", - "x": "61", - "y": "9", - "properties": { - "size": "16", - "text": "Pip" - } - } - ] - } - } - }, - { - "ID": "950", - "typeID": "__group__", - "zOrder": "69", - "measuredW": "146", - "measuredH": "42", - "w": "146", - "h": "42", - "x": "373", - "y": "1057", - "properties": { - "controlName": "102-python-package-managers:conda" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Canvas", - "zOrder": "0", - "w": "146", - "h": "42", - "measuredW": "100", - "measuredH": "70", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "48", - "measuredH": "24", - "x": "49", - "y": "9", - "properties": { - "size": "16", - "text": "Conda" - } - } - ] - } - } - }, - { - "ID": "951", - "typeID": "__group__", - "zOrder": "70", - "measuredW": "352", - "measuredH": "54", - "w": "352", - "h": "54", - "x": "1047", - "y": "322", - "properties": { - "controlName": "100-python-roadmap-note" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "352", - "h": "54", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0" - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "224", - "measuredH": "26", - "x": "50", - "y": "14", - "properties": { - "size": "18", - "text": "Important Note / Click here" - } - }, - { - "ID": "2", - "typeID": "__group__", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "18", - "y": "18", - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Icon", - "zOrder": "0", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "1", - "typeID": "Icon", - "zOrder": "1", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "icon": { - "ID": "check-circle", - "size": "small" - }, - "color": "13576743" - } - } - ] - } - } - } - ] - } - } - }, - { - "ID": "952", - "typeID": "__group__", - "zOrder": "71", - "measuredW": "328", - "measuredH": "200", - "w": "328", - "h": "200", - "x": "235", - "y": "153", - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Canvas", - "zOrder": "0", - "w": "328", - "h": "200", - "measuredW": "100", - "measuredH": "70", - "x": "0", - "y": "0" - }, - { - "ID": "1", - "typeID": "__group__", - "zOrder": "1", - "measuredW": "189", - "measuredH": "27", - "w": "189", - "h": "27", - "x": "28", - "y": "77", - "properties": { - "controlName": "ext_link:roadmap.sh/backend" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Label", - "zOrder": "0", - "measuredW": "156", - "measuredH": "26", - "x": "33", - "y": "0", - "properties": { - "size": "18", - "text": "Backend Roadmap" - } - }, - { - "ID": "1", - "typeID": "__group__", - "zOrder": "1", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "0", - "y": "3", - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Icon", - "zOrder": "0", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "1", - "typeID": "Icon", - "zOrder": "1", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "10066329", - "icon": { - "ID": "check-circle", - "size": "small" - } - } - } - ] - } - } - } - ] - } - } - }, - { - "ID": "2", - "typeID": "__group__", - "zOrder": "2", - "measuredW": "183", - "measuredH": "27", - "w": "183", - "h": "27", - "x": "28", - "y": "113", - "properties": { - "controlName": "ext_link:roadmap.sh/devops" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Label", - "zOrder": "0", - "measuredW": "150", - "measuredH": "26", - "x": "33", - "y": "0", - "properties": { - "size": "18", - "text": "DevOps Roadmap" - } - }, - { - "ID": "1", - "typeID": "__group__", - "zOrder": "1", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "0", - "y": "3", - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Icon", - "zOrder": "0", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "1", - "typeID": "Icon", - "zOrder": "1", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "10066329", - "icon": { - "ID": "check-circle", - "size": "small" - } - } - } - ] - } - } - } - ] - } - } - }, - { - "ID": "3", - "typeID": "Label", - "zOrder": "3", - "measuredW": "209", - "measuredH": "32", - "x": "28", - "y": "29", - "properties": { - "size": "24", - "text": "Related Roadmaps" - } - }, - { - "ID": "4", - "typeID": "__group__", - "zOrder": "4", - "measuredW": "251", - "measuredH": "27", - "w": "251", - "h": "27", - "x": "28", - "y": "151", - "properties": { - "controlName": "ext_link:roadmap.sh/software-design-architecture" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Label", - "zOrder": "0", - "measuredW": "218", - "measuredH": "26", - "x": "33", - "y": "0", - "properties": { - "size": "18", - "text": "Software Design Roadmap" - } - }, - { - "ID": "1", - "typeID": "__group__", - "zOrder": "1", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "0", - "y": "3", - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Icon", - "zOrder": "0", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "1", - "typeID": "Icon", - "zOrder": "1", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "10066329", - "icon": { - "ID": "check-circle", - "size": "small" - } - } - } - ] - } - } - } - ] - } - } - } - ] - } - } - }, - { - "ID": "953", - "typeID": "__group__", - "zOrder": "72", - "measuredW": "193", - "measuredH": "42", - "w": "193", - "h": "42", - "x": "322", - "y": "1186", - "properties": { - "controlName": "106-python-advanced-topics:list-comprehensions" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Canvas", - "zOrder": "0", - "w": "193", - "h": "42", - "measuredW": "100", - "measuredH": "70", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "154", - "measuredH": "24", - "x": "20", - "y": "9", - "properties": { - "size": "16", - "text": "List Comprehensions" - } - } - ] - } - } - }, - { - "ID": "954", - "typeID": "__group__", - "zOrder": "73", - "measuredW": "193", - "measuredH": "42", - "w": "193", - "h": "42", - "x": "322", - "y": "1231", - "properties": { - "controlName": "107-python-advanced-topics:generator-expressions" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Canvas", - "zOrder": "0", - "w": "193", - "h": "42", - "measuredW": "100", - "measuredH": "70", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "167", - "measuredH": "24", - "x": "13", - "y": "9", - "properties": { - "size": "16", - "text": "Generator Expressions" - } - } - ] - } - } - }, - { - "ID": "955", - "typeID": "__group__", - "zOrder": "74", - "measuredW": "193", - "measuredH": "42", - "w": "193", - "h": "42", - "x": "322", - "y": "1276", - "properties": { - "controlName": "108-python-advanced-topics:paradigms" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Canvas", - "zOrder": "0", - "w": "193", - "h": "42", - "measuredW": "100", - "measuredH": "70", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "77", - "measuredH": "24", - "x": "58", - "y": "9", - "properties": { - "size": "16", - "text": "Paradigms" - } - } - ] - } - } - }, - { - "ID": "956", - "typeID": "__group__", - "zOrder": "75", - "measuredW": "155", - "measuredH": "43", - "w": "155", - "h": "43", - "x": "1098", - "y": "1026", - "properties": { - "controlName": "100-python-frameworks:synchronous" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Canvas", - "zOrder": "0", - "w": "155", - "h": "43", - "measuredW": "100", - "measuredH": "70", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "93", - "measuredH": "24", - "x": "31", - "y": "10", - "properties": { - "size": "16", - "text": "Synchronous" - } - } - ] - } - } - }, - { - "ID": "957", - "typeID": "__group__", - "zOrder": "76", - "measuredW": "87", - "measuredH": "42", - "w": "87", - "h": "42", - "x": "1201", - "y": "1131", - "properties": { - "controlName": "100-python-frameworks:synchronous:django" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Canvas", - "zOrder": "0", - "w": "87", - "h": "42", - "measuredW": "100", - "measuredH": "70", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "52", - "measuredH": "24", - "x": "18", - "y": "9", - "properties": { - "size": "16", - "text": "Django" - } - } - ] - } - } - }, - { - "ID": "958", - "typeID": "__group__", - "zOrder": "77", - "measuredW": "88", - "measuredH": "42", - "w": "88", - "h": "42", - "x": "1201", - "y": "1177", - "properties": { - "controlName": "101-python-frameworks:synchronous:flask" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Canvas", - "zOrder": "0", - "w": "88", - "h": "42", - "measuredW": "100", - "measuredH": "70", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "38", - "measuredH": "24", - "x": "25", - "y": "9", - "properties": { - "size": "16", - "text": "Flask" - } - } - ] - } - } - }, - { - "ID": "959", - "typeID": "__group__", - "zOrder": "78", - "measuredW": "88", - "measuredH": "42", - "w": "88", - "h": "42", - "x": "950", - "y": "1027", - "properties": { - "controlName": "102-python-frameworks:synchronous:pyramid" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Canvas", - "zOrder": "0", - "w": "88", - "h": "42", - "measuredW": "100", - "measuredH": "70", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "58", - "measuredH": "24", - "x": "15", - "y": "9", - "properties": { - "size": "16", - "text": "Pyramid" - } - } - ] - } - } - }, - { - "ID": "960", - "typeID": "__group__", - "zOrder": "79", - "measuredW": "156", - "measuredH": "43", - "w": "156", - "h": "43", - "x": "1095", - "y": "1231", - "properties": { - "controlName": "101-python-frameworks:asynchronous" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Canvas", - "zOrder": "0", - "w": "156", - "h": "43", - "measuredW": "100", - "measuredH": "70", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "101", - "measuredH": "24", - "x": "27", - "y": "10", - "properties": { - "size": "16", - "text": "Asynchronous" - } - } - ] - } - } - }, - { - "ID": "961", - "typeID": "__group__", - "zOrder": "80", - "measuredW": "91", - "measuredH": "42", - "w": "91", - "h": "42", - "x": "956", - "y": "1231", - "properties": { - "controlName": "100-python-frameworks:asynchronous:gevent" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Canvas", - "zOrder": "0", - "w": "91", - "h": "42", - "measuredW": "100", - "measuredH": "70", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "50", - "measuredH": "24", - "x": "21", - "y": "9", - "properties": { - "size": "16", - "text": "gevent" - } - } - ] - } - } - }, - { - "ID": "962", - "typeID": "__group__", - "zOrder": "81", - "measuredW": "89", - "measuredH": "42", - "w": "89", - "h": "42", - "x": "957", - "y": "1277", - "properties": { - "controlName": "101-python-frameworks:asynchronous:aiohttp" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Canvas", - "zOrder": "0", - "w": "89", - "h": "42", - "measuredW": "100", - "measuredH": "70", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "50", - "measuredH": "24", - "x": "20", - "y": "9", - "properties": { - "size": "16", - "text": "aiohttp" - } - } - ] - } - } - }, - { - "ID": "963", - "typeID": "__group__", - "zOrder": "82", - "measuredW": "91", - "measuredH": "42", - "w": "91", - "h": "42", - "x": "956", - "y": "1323", - "properties": { - "controlName": "102-python-frameworks:asynchronous:tornado" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Canvas", - "zOrder": "0", - "w": "91", - "h": "42", - "measuredW": "100", - "measuredH": "70", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "60", - "measuredH": "24", - "x": "16", - "y": "9", - "properties": { - "size": "16", - "text": "Tornado" - } - } - ] - } - } - }, - { - "ID": "964", - "typeID": "__group__", - "zOrder": "83", - "measuredW": "91", - "measuredH": "42", - "w": "91", - "h": "42", - "x": "956", - "y": "1369", - "properties": { - "controlName": "103-python-frameworks:asynchronous:sanic" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Canvas", - "zOrder": "0", - "w": "91", - "h": "42", - "measuredW": "100", - "measuredH": "70", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "41", - "measuredH": "24", - "x": "25", - "y": "9", - "properties": { - "size": "16", - "text": "Sanic" - } - } - ] - } - } - }, - { - "ID": "965", - "typeID": "__group__", - "zOrder": "84", - "measuredW": "89", - "measuredH": "42", - "w": "89", - "h": "42", - "x": "1199", - "y": "1085", - "properties": { - "controlName": "102-python-frameworks:fastapi" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Canvas", - "zOrder": "0", - "w": "89", - "h": "42", - "measuredW": "100", - "measuredH": "70", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "56", - "measuredH": "24", - "x": "17", - "y": "9", - "properties": { - "size": "16", - "text": "FastAPI" - } - } - ] - } - } - }, - { - "ID": "966", - "typeID": "__group__", - "zOrder": "85", - "measuredW": "154", - "measuredH": "42", - "w": "154", - "h": "42", - "x": "493", - "y": "1479", - "properties": { - "controlName": "100-python-testing:unittest-pyunit" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Canvas", - "zOrder": "0", - "w": "154", - "h": "42", - "measuredW": "100", - "measuredH": "70", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "116", - "measuredH": "24", - "x": "19", - "y": "9", - "properties": { - "size": "16", - "text": "unittest / pyUnit" - } - } - ] - } - } - }, - { - "ID": "967", - "typeID": "__group__", - "zOrder": "86", - "measuredW": "154", - "measuredH": "42", - "w": "154", - "h": "42", - "x": "493", - "y": "1432", - "properties": { - "controlName": "101-python-testing:pytest" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Canvas", - "zOrder": "0", - "w": "154", - "h": "42", - "measuredW": "100", - "measuredH": "70", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "44", - "measuredH": "24", - "x": "55", - "y": "9", - "properties": { - "size": "16", - "text": "pytest" - } - } - ] - } - } - }, - { - "ID": "968", - "typeID": "__group__", - "zOrder": "87", - "measuredW": "154", - "measuredH": "42", - "w": "154", - "h": "42", - "x": "493", - "y": "1340", - "properties": { - "controlName": "102-python-testing:doctest" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Canvas", - "zOrder": "0", - "w": "154", - "h": "42", - "measuredW": "100", - "measuredH": "70", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "54", - "measuredH": "24", - "x": "50", - "y": "9", - "properties": { - "size": "16", - "text": "doctest" - } - } - ] - } - } - }, - { - "ID": "969", - "typeID": "__group__", - "zOrder": "88", - "measuredW": "154", - "measuredH": "42", - "w": "154", - "h": "42", - "x": "493", - "y": "1386", - "properties": { - "controlName": "102-python-testing:nose" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Canvas", - "zOrder": "0", - "w": "154", - "h": "42", - "measuredW": "100", - "measuredH": "70", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "36", - "measuredH": "24", - "x": "59", - "y": "9", - "properties": { - "size": "16", - "text": "nose" - } - } - ] - } - } - }, - { - "ID": "970", - "typeID": "Arrow", - "zOrder": "89", - "w": "1", - "h": "139", - "measuredW": "150", - "measuredH": "100", - "x": "883", - "y": "1673", - "properties": { - "color": "2848996", - "curvature": "-1", - "direction": "bottom", - "leftArrow": "false", - "rightArrow": "false", - "p0": { - "x": 0, - "y": 0 - }, - "p1": { - "x": 0.4438624012549725, - "y": -0.00008403832147459167 - }, - "p2": { - "x": 0, - "y": 139 - }, - "stroke": "dotted" - } - }, - { - "ID": "971", - "typeID": "TextArea", - "zOrder": "90", - "w": "552", - "h": "124", - "measuredW": "200", - "measuredH": "140", - "x": "595", - "y": "1604" - }, - { - "ID": "972", - "typeID": "Label", - "zOrder": "91", - "measuredW": "468", - "measuredH": "25", - "x": "624", - "y": "1624", - "properties": { - "size": "17", - "text": "For ecosystem and more, check other tracks involving Python" - } - }, - { - "ID": "973", - "typeID": "__group__", - "zOrder": "92", - "measuredW": "229", - "measuredH": "44", - "w": "229", - "h": "44", - "x": "890", - "y": "1659", - "properties": { - "controlName": "ext_link:roadmap.sh/devops" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "229", - "h": "44", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "141", - "measuredH": "25", - "x": "44", - "y": "9", - "properties": { - "size": "17", - "text": "DevOps Roadmap" - } - } - ] - } - } - }, - { - "ID": "974", - "typeID": "__group__", - "zOrder": "93", - "measuredW": "252", - "measuredH": "44", - "w": "252", - "h": "44", - "x": "624", - "y": "1659", - "properties": { - "controlName": "ext_link:roadmap.sh/backend" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "252", - "h": "44", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "147", - "measuredH": "25", - "x": "52", - "y": "9", - "properties": { - "size": "17", - "text": "Backend Roadmap" - } - } - ] - } - } - }, - { - "ID": "975", - "typeID": "__group__", - "zOrder": "94", - "measuredW": "146", - "measuredH": "42", - "w": "146", - "h": "42", - "x": "373", - "y": "1102", - "properties": { - "controlName": "103-python-package-managers:poetry" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Canvas", - "zOrder": "0", - "w": "146", - "h": "42", - "measuredW": "100", - "measuredH": "70", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "47", - "measuredH": "24", - "x": "49", - "y": "9", - "properties": { - "size": "16", - "text": "Poetry" - } - } - ] - } - } - } - ] + "nodes": [ + { + "id": "7qkVORlOiHO2gVIC0spiJ", + "type": "section", + "position": { + "x": -470.10560351401324, + "y": 1018.842978409371 }, - "attributes": { - "name": "New Wireframe 1", - "order": 1000000, - "parentID": null, - "notes": "" + "selected": false, + "data": { + "label": "", + "style": { + "width": 150, + "height": 100, + "fontSize": 17, + "backgroundColor": "#ffffff", + "borderColor": "#000000" + } }, - "branchID": "Master", - "resourceID": "5A30BFEF-684E-429E-9C5D-BAAAC1A8339A", - "mockupH": "1659", - "mockupW": "1164", - "measuredW": "1399", - "measuredH": "1812", - "version": "1.0", - "calloutsOffset": { - "x": 235, - "y": 153 - } - }, - "groupOffset": { - "x": 0, - "y": 0 - }, - "dependencies": [], - "projectID": "file:///Users/dan/Library/Application%20Support/Balsamiq%20Wireframes/UnsavedFiles/New%20Project%201.bmpr" + "zIndex": -999, + "width": 226, + "height": 157, + "style": { + "width": 226, + "height": 157 + }, + "resizing": false, + "positionAbsolute": { + "x": -470.10560351401324, + "y": 1018.842978409371 + }, + "dragging": false, + "selectable": true, + "focusable": true + }, + { + "id": "DYVswTR2tgKfRIkQ3WGDW", + "type": "section", + "position": { + "x": -615.0754215575712, + "y": 1018.842978409371 + }, + "width": 150, + "height": 157, + "style": { + "width": 150, + "height": 157 + }, + "selected": false, + "data": { + "style": { + "backgroundColor": "#ffffff", + "borderColor": "#000000" + } + }, + "positionAbsolute": { + "x": -615.0754215575712, + "y": 1018.842978409371 + }, + "dragging": false, + "selectable": true, + "focusable": true, + "resizing": false + }, + { + "id": "jKeTTySc4iyJY29xLqNNQ", + "type": "section", + "position": { + "x": 264.82694462464815, + "y": 1166.6757618831236 + }, + "width": 174, + "height": 108, + "style": { + "width": 174, + "height": 108 + }, + "selected": false, + "data": { + "style": { + "backgroundColor": "#ffffff", + "borderColor": "#000000" + } + }, + "positionAbsolute": { + "x": 264.82694462464815, + "y": 1166.6757618831236 + }, + "dragging": false, + "resizing": false, + "selectable": true, + "focusable": true + }, + { + "id": "kEXUjAWagEHfsybVfqFbj", + "type": "vertical", + "position": { + "x": 351.32694462464815, + "y": 962.1504012205187 + }, + "selected": false, + "data": { + "label": "vertical node", + "style": { + "stroke": "#2B78E4", + "strokeWidth": 3.65 + } + }, + "zIndex": 999, + "width": 20, + "height": 206, + "style": { + "width": 20, + "height": 206 + }, + "positionAbsolute": { + "x": 351.32694462464815, + "y": 962.1504012205187 + }, + "dragging": false, + "resizing": false, + "selectable": true, + "focusable": true + }, + { + "id": "RW1wSb7P-AZWXa_znXytT", + "type": "horizontal", + "position": { + "x": 230.82694462464815, + "y": 933.1504012205187 + }, + "selected": false, + "data": { + "label": "horizontal node", + "style": { + "stroke": "#2B78E4", + "strokeWidth": 3.65 + }, + "oldId": "KFFbnOBa-y5r58w2pUf15" + }, + "zIndex": 999, + "width": 66, + "height": 20, + "style": { + "width": 66, + "height": 20 + }, + "positionAbsolute": { + "x": 230.82694462464815, + "y": 933.1504012205187 + }, + "dragging": false, + "resizing": false, + "selectable": true, + "focusable": true + }, + { + "id": "I0lCQskv_MEITj9xTEetZ", + "type": "section", + "position": { + "x": 67.79817070787664, + "y": 755.1504012205187 + }, + "width": 165, + "height": 210, + "style": { + "width": 165, + "height": 210 + }, + "selected": false, + "data": { + "style": { + "backgroundColor": "#ffffff", + "borderColor": "#000000" + } + }, + "positionAbsolute": { + "x": 67.79817070787664, + "y": 755.1504012205187 + }, + "dragging": false, + "selectable": true, + "focusable": true, + "resizing": false + }, + { + "id": "-Bdnmm4sceeOS3oBa214C", + "type": "section", + "position": { + "x": -621.1730553753519, + "y": 551.0807887739926 + }, + "width": 222, + "height": 111, + "style": { + "width": 222, + "height": 111 + }, + "selected": false, + "data": {}, + "positionAbsolute": { + "x": -621.1730553753519, + "y": 551.0807887739926 + }, + "dragging": false, + "selectable": true, + "focusable": true + }, + { + "id": "n79gqI0nU2Ufufrbqn4I2", + "type": "vertical", + "position": { + "x": -578.7332744798255, + "y": 928.842978409371 + }, + "selected": false, + "data": { + "label": "vertical node", + "style": { + "strokeDasharray": "0.8 8", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2B78E4" + } + }, + "zIndex": 999, + "width": 20, + "height": 90, + "style": { + "width": 20, + "height": 90 + }, + "positionAbsolute": { + "x": -578.7332744798255, + "y": 928.842978409371 + }, + "dragging": false, + "resizing": false, + "selectable": true, + "focusable": true + }, + { + "id": "nvL0Yb5peOKtN6J3bHlRt", + "type": "section", + "position": { + "x": -615.0754215575712, + "y": 1168.2821121205188 + }, + "selected": false, + "data": { + "label": "", + "style": { + "width": 150, + "height": 100, + "fontSize": 17, + "backgroundColor": "#ffffff", + "borderColor": "#000000" + } + }, + "zIndex": -999, + "width": 371, + "height": 118, + "style": { + "width": 371, + "height": 118 + }, + "resizing": false, + "positionAbsolute": { + "x": -615.0754215575712, + "y": 1168.2821121205188 + }, + "dragging": false, + "selectable": true, + "focusable": true + }, + { + "id": "QeITF-YfZejH1ChhvL153", + "type": "vertical", + "position": { + "x": 300.8559210300732, + "y": 286.7304293708296 + }, + "selected": false, + "data": { + "label": "vertical node", + "style": { + "strokeDasharray": "0.8 8", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2B78E4" + } + }, + "zIndex": 999, + "width": 20, + "height": 94, + "style": { + "width": 20, + "height": 94 + }, + "positionAbsolute": { + "x": 300.8559210300732, + "y": 286.7304293708296 + }, + "dragging": false, + "resizing": false, + "selectable": true, + "focusable": true + }, + { + "id": "dtrq89l_tp6Z6J6hXsIov", + "type": "vertical", + "position": { + "x": 175.3559210300732, + "y": 290.7304293708296 + }, + "selected": false, + "data": { + "label": "vertical node", + "style": { + "strokeDasharray": "0.8 8", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2B78E4" + }, + "oldId": "QeITF-YfZejH1ChhvL153" + }, + "zIndex": 999, + "width": 20, + "height": 94, + "style": { + "width": 20, + "height": 94 + }, + "positionAbsolute": { + "x": 175.3559210300732, + "y": 290.7304293708296 + }, + "dragging": false, + "resizing": false, + "selectable": true, + "focusable": true + }, + { + "id": "WM8uelKHGcNtlUiJVwxZf", + "type": "vertical", + "position": { + "x": -578.7332744798255, + "y": 849.1393183285392 + }, + "selected": false, + "data": { + "label": "vertical node", + "style": { + "stroke": "#2B78E4", + "strokeWidth": 3.75 + }, + "oldId": "hVyw2aK17eHhz6Xg4Vccr" + }, + "zIndex": 999, + "width": 20, + "height": 95, + "style": { + "width": 20, + "height": 95 + }, + "positionAbsolute": { + "x": -578.7332744798255, + "y": 849.1393183285392 + }, + "dragging": false, + "selectable": true, + "focusable": true, + "resizing": false + }, + { + "id": "hVyw2aK17eHhz6Xg4Vccr", + "type": "vertical", + "position": { + "x": -578.7332744798255, + "y": 440.7304293708296 + }, + "selected": false, + "data": { + "label": "vertical node", + "style": { + "stroke": "#2B78E4", + "strokeWidth": 3.75 + } + }, + "zIndex": 999, + "width": 20, + "height": 89, + "style": { + "width": 20, + "height": 89 + }, + "positionAbsolute": { + "x": -578.7332744798255, + "y": 440.7304293708296 + }, + "dragging": false, + "selectable": true, + "focusable": true, + "resizing": false + }, + { + "id": "LgWrLnoO7qkmpqJs35kyZ", + "type": "horizontal", + "position": { + "x": -567.7332744798255, + "y": 433.2304293708296 + }, + "selected": false, + "data": { + "label": "horizontal node", + "style": { + "stroke": "#2B78E4", + "strokeWidth": 3.75 + } + }, + "zIndex": 999, + "width": 157, + "height": 20, + "style": { + "width": 157, + "height": 20 + }, + "positionAbsolute": { + "x": -567.7332744798255, + "y": 433.2304293708296 + }, + "dragging": false, + "resizing": false, + "selectable": true, + "focusable": true + }, + { + "width": 126, + "height": 68, + "id": "hIQe_B-68ENL-GFg6GmnD", + "type": "title", + "position": { + "x": -173.16916540260297, + "y": -161.7695706291704 + }, + "selected": false, + "data": { + "label": "Python", + "style": { + "fontSize": 28, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "oldId": "iogwMmOvub2ZF4zgg6WyF" + }, + "zIndex": 999, + "dragging": false, + "positionAbsolute": { + "x": -173.16916540260297, + "y": -161.7695706291704 + }, + "focusable": true, + "selectable": true + }, + { + "width": 20, + "height": 76, + "id": "LEijbLyxg4RyutKEM2Y5g", + "type": "vertical", + "position": { + "x": -120.16916540260297, + "y": -226.7695706291704 + }, + "selected": false, + "data": { + "label": "vertical node", + "style": { + "strokeDasharray": "0.8 8", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#0A33FF" + }, + "oldId": "xD07fJ1NmNeAarVCEfubU" + }, + "zIndex": 999, + "positionAbsolute": { + "x": -120.16916540260297, + "y": -226.7695706291704 + }, + "dragging": false, + "focusable": true, + "style": { + "width": 20, + "height": 76 + }, + "resizing": false, + "selectable": true + }, + { + "id": "yHmHXymPNWwu8p1vvqD3o", + "type": "paragraph", + "position": { + "x": 110.84147172248669, + "y": -233.7695706291704 + }, + "selected": false, + "data": { + "label": "Find the detailed version of this roadmap and other similar roadmaps", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "left", + "borderColor": "#000000", + "backgroundColor": "#FFFFFf" + } + }, + "zIndex": 999, + "width": 328, + "height": 138, + "positionAbsolute": { + "x": 110.84147172248669, + "y": -233.7695706291704 + }, + "dragging": false, + "selectable": true, + "focusable": true, + "style": { + "width": 328, + "height": 138 + }, + "resizing": false + }, + { + "id": "R_Fs6rdl2XtQ9aLOubMqL", + "type": "button", + "position": { + "x": 121.34147172248669, + "y": -156.7840072114252 + }, + "selected": false, + "data": { + "label": "roadmap.sh", + "href": "https://roadmap.sh", + "color": "#ffffff", + "backgroundColor": "#4136D6", + "style": { + "fontSize": 17 + }, + "oldId": "2zqZkyVgigifcRS1H7F_b" + }, + "zIndex": 999, + "width": 307, + "height": 49, + "dragging": false, + "style": { + "width": 307, + "height": 49 + }, + "resizing": false, + "positionAbsolute": { + "x": 121.34147172248669, + "y": -156.7840072114252 + }, + "selectable": true, + "focusable": true + }, + { + "id": "Y3FQ2wGWFb1VciLEVEGUf", + "type": "linksgroup", + "position": { + "x": -617.2332744798255, + "y": -231.7695706291704 + }, + "selected": false, + "data": { + "label": "Related Roadmaps", + "links": [ + { + "id": "TRPGwvkLuLL9ZZ4kDMiyI", + "label": "Backend Roadmap", + "url": "https://roadmap.sh/backend" + }, + { + "id": "D2U09O9v90i02pfmTeG52", + "label": "DevOps Roadmap", + "url": "https://roadmap.sh/devops" + }, + { + "id": "yFz6Tz37UtT8Q0NVDPl3H", + "label": "AI & Data Scientist", + "url": "https://roadmap.sh/ai-data-scientist" + } + ] + }, + "zIndex": 999, + "width": 344, + "height": 166, + "positionAbsolute": { + "x": -617.2332744798255, + "y": -231.7695706291704 + }, + "dragging": false, + "style": { + "width": 344, + "height": 166 + }, + "resizing": false, + "selectable": true, + "focusable": true + }, + { + "id": "xwpc_KxehAruFM0pCQnie", + "type": "vertical", + "position": { + "x": -397.3402957676265, + "y": 1442.7311650625577 + }, + "selected": false, + "data": { + "label": "vertical node", + "style": { + "strokeDasharray": "0.8 8", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#4136D4" + }, + "oldId": "Ju00mr0KLGN2BV6yEQGPt" + }, + "zIndex": 999, + "width": 20, + "height": 104, + "positionAbsolute": { + "x": -397.3402957676265, + "y": 1442.7311650625577 + }, + "dragging": false, + "style": { + "width": 20, + "height": 104 + }, + "resizing": false, + "focusable": true, + "selectable": true + }, + { + "width": 505, + "height": 117, + "id": "GV_zWF6rSWg5bqgiXhOEf", + "type": "paragraph", + "position": { + "x": -611.3402957676265, + "y": 1352.21519978213 + }, + "selected": false, + "data": { + "label": "Have a look at the following related roadmaps", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center", + "borderColor": "#000000", + "backgroundColor": "#ffffff" + }, + "oldId": "sVXZrBCsiSzWBBYWTm-nQ" + }, + "zIndex": 999, + "positionAbsolute": { + "x": -611.3402957676265, + "y": 1352.21519978213 + }, + "dragging": false, + "style": { + "width": 505, + "height": 117 + }, + "resizing": false, + "focusable": true, + "selectable": true + }, + { + "width": 142, + "height": 49, + "id": "OQpi63qND2KBXVvKBNMST", + "type": "button", + "position": { + "x": -599.8231176820491, + "y": 1406.9044816937815 + }, + "selected": false, + "data": { + "label": "Backend", + "href": "https://roadm.sh/backend", + "color": "#FFFFFf", + "backgroundColor": "#4136D4", + "style": { + "fontSize": 17 + }, + "borderColor": "#4136D4", + "oldId": "U0fJo2a3vnaodNJhfZ78I" + }, + "zIndex": 999, + "dragging": false, + "positionAbsolute": { + "x": -599.8231176820491, + "y": 1406.9044816937815 + }, + "style": { + "width": 142, + "height": 49 + }, + "focusable": true, + "resizing": false, + "selectable": true + }, + { + "width": 190, + "height": 49, + "id": "iuSv7V59YxUZawN38Qlli", + "type": "button", + "position": { + "x": -309.5754215575712, + "y": 1406.9044816937815 + }, + "selected": false, + "data": { + "label": "AI / Data Science", + "href": "https://roadmap.sh/ai-data-scientist", + "color": "#FFFFFf", + "backgroundColor": "#4136D4", + "style": { + "fontSize": 17 + }, + "borderColor": "#4136D4", + "oldId": "ZSrQoNGKiR484uALMWO9F" + }, + "zIndex": 999, + "dragging": false, + "positionAbsolute": { + "x": -309.5754215575712, + "y": 1406.9044816937815 + }, + "style": { + "width": 190, + "height": 49 + }, + "focusable": true, + "resizing": false, + "selectable": true + }, + { + "id": "GISOFMKvnBys0O0IMpz2J", + "type": "topic", + "position": { + "x": -243.16916540260297, + "y": 67.2304293708296 + }, + "selected": false, + "data": { + "label": "Learn the Basics", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "oldId": "JDDG4KfhtIlw1rkNCzUli" + }, + "zIndex": 999, + "width": 266, + "height": 49, + "style": { + "width": 266, + "height": 49 + }, + "positionAbsolute": { + "x": -243.16916540260297, + "y": 67.2304293708296 + }, + "selectable": true, + "focusable": true, + "dragging": false, + "resizing": false + }, + { + "id": "6xRncUs3_vxVbDur567QA", + "type": "subtopic", + "position": { + "x": -615.9741508977197, + "y": -11.214355272135947 + }, + "selected": false, + "data": { + "label": "Basic Syntax", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + } + }, + "zIndex": 999, + "width": 267, + "height": 49, + "style": { + "width": 267, + "height": 49 + }, + "positionAbsolute": { + "x": -615.9741508977197, + "y": -11.214355272135947 + }, + "dragging": false, + "selectable": true, + "focusable": true + }, + { + "id": "dEFLBGpiH6nbSMeR7ecaT", + "type": "subtopic", + "position": { + "x": -615.9741508977197, + "y": 41.78564472786405 + }, + "selected": false, + "data": { + "label": "Variables and Data Types", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + } + }, + "zIndex": 999, + "width": 267, + "height": 49, + "style": { + "width": 267, + "height": 49 + }, + "positionAbsolute": { + "x": -615.9741508977197, + "y": 41.78564472786405 + }, + "dragging": false, + "selectable": true, + "focusable": true + }, + { + "id": "NP1kjSk0ujU0Gx-ajNHlR", + "type": "subtopic", + "position": { + "x": -615.9741508977197, + "y": 94.78564472786405 + }, + "selected": false, + "data": { + "label": "Conditionals", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "oldId": "Dvy7BnNzK55qbh_SgOk8m" + }, + "zIndex": 999, + "width": 267, + "height": 49, + "style": { + "width": 267, + "height": 49 + }, + "positionAbsolute": { + "x": -615.9741508977197, + "y": 94.78564472786405 + }, + "dragging": false, + "selectable": true, + "focusable": true + }, + { + "id": "R9DQNc0AyAQ2HLpP4HOk6", + "type": "subtopic", + "position": { + "x": 131.83083459739703, + "y": -38.7695706291704 + }, + "selected": false, + "data": { + "label": "Type Casting", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + } + }, + "zIndex": 999, + "width": 310, + "height": 49, + "style": { + "width": 310, + "height": 49 + }, + "positionAbsolute": { + "x": 131.83083459739703, + "y": -38.7695706291704 + }, + "dragging": false, + "selectable": true, + "focusable": true + }, + { + "id": "fNTb9y3zs1HPYclAmu_Wv", + "type": "subtopic", + "position": { + "x": 131.83083459739703, + "y": 14.230429370829597 + }, + "selected": false, + "data": { + "label": "Exceptions", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + } + }, + "zIndex": 999, + "width": 310, + "height": 49, + "style": { + "width": 310, + "height": 49 + }, + "positionAbsolute": { + "x": 131.83083459739703, + "y": 14.230429370829597 + }, + "dragging": false, + "selectable": true, + "focusable": true + }, + { + "id": "-DJgS6l2qngfwurExlmmT", + "type": "subtopic", + "position": { + "x": 131.83083459739703, + "y": 67.2304293708296 + }, + "selected": false, + "data": { + "label": "Functions, Builtin Functions", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + } + }, + "zIndex": 999, + "width": 310, + "height": 49, + "style": { + "width": 310, + "height": 49 + }, + "positionAbsolute": { + "x": 131.83083459739703, + "y": 67.2304293708296 + }, + "dragging": false, + "selectable": true, + "focusable": true, + "resizing": false + }, + { + "id": "UT_SR7G-LYtzqooWrEtF1", + "type": "subtopic", + "position": { + "x": 132.83083459739703, + "y": 120.2304293708296 + }, + "selected": false, + "data": { + "label": "Lists", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + } + }, + "zIndex": 999, + "width": 100, + "height": 49, + "style": { + "width": 100, + "height": 49 + }, + "positionAbsolute": { + "x": 132.83083459739703, + "y": 120.2304293708296 + }, + "dragging": false, + "selectable": true, + "focusable": true, + "resizing": false + }, + { + "id": "i7xIGiXU-k5UIKHIhQPjE", + "type": "subtopic", + "position": { + "x": 236.83083459739703, + "y": 120.2304293708296 + }, + "selected": false, + "data": { + "label": "Tuples", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + } + }, + "zIndex": 999, + "width": 100, + "height": 49, + "style": { + "width": 100, + "height": 49 + }, + "positionAbsolute": { + "x": 236.83083459739703, + "y": 120.2304293708296 + }, + "dragging": false, + "selectable": true, + "focusable": true, + "resizing": false + }, + { + "id": "soZFqivM3YBuljeX6PoaX", + "type": "subtopic", + "position": { + "x": 340.83083459739703, + "y": 120.2304293708296 + }, + "selected": false, + "data": { + "label": "Sets", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + } + }, + "zIndex": 999, + "width": 100, + "height": 49, + "style": { + "width": 100, + "height": 49 + }, + "positionAbsolute": { + "x": 340.83083459739703, + "y": 120.2304293708296 + }, + "dragging": false, + "selectable": true, + "focusable": true, + "resizing": false + }, + { + "id": "bc9CL_HMT-R6nXO1eR-gP", + "type": "subtopic", + "position": { + "x": 131.83083459739703, + "y": 173.2304293708296 + }, + "selected": false, + "data": { + "label": "Dictionaries", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + } + }, + "zIndex": 999, + "width": 310, + "height": 49, + "style": { + "width": 310, + "height": 49 + }, + "positionAbsolute": { + "x": 131.83083459739703, + "y": 173.2304293708296 + }, + "dragging": false, + "selectable": true, + "focusable": true + }, + { + "id": "Dvy7BnNzK55qbh_SgOk8m", + "type": "subtopic", + "position": { + "x": -615.9741508977197, + "y": 147.78564472786405 + }, + "selected": false, + "data": { + "label": "Loops", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + } + }, + "zIndex": 999, + "width": 267, + "height": 49, + "style": { + "width": 267, + "height": 49 + }, + "positionAbsolute": { + "x": -615.9741508977197, + "y": 147.78564472786405 + }, + "dragging": false, + "selectable": true, + "focusable": true, + "resizing": false + }, + { + "id": "OPD4WdMO7q4gRZMcRCQh1", + "type": "subtopic", + "position": { + "x": -243.66916540260297, + "y": 316.7304293708296 + }, + "selected": false, + "data": { + "label": "Arrays and Linked Lists", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "oldId": "kIuns7FOwapwtFLKo1phQ" + }, + "zIndex": 999, + "width": 267, + "height": 49, + "style": { + "width": 267, + "height": 49 + }, + "positionAbsolute": { + "x": -243.66916540260297, + "y": 316.7304293708296 + }, + "selectable": true, + "focusable": true, + "dragging": false + }, + { + "id": "0NlRczh6ZEaFLlT6LORWz", + "type": "subtopic", + "position": { + "x": -243.66916540260297, + "y": 422.7304293708296 + }, + "selected": false, + "data": { + "label": "Heaps, Stacks and Queues", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "oldId": "rSfg5M65LyZldhrdWOr90" + }, + "zIndex": 999, + "width": 267, + "height": 49, + "style": { + "width": 267, + "height": 49 + }, + "positionAbsolute": { + "x": -243.66916540260297, + "y": 422.7304293708296 + }, + "selectable": true, + "focusable": true, + "dragging": false, + "resizing": false + }, + { + "id": "DG4fi1e5ec2BVckPLsTJS", + "type": "subtopic", + "position": { + "x": -243.66916540260297, + "y": 369.7304293708296 + }, + "selected": false, + "data": { + "label": "Hash Tables", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "oldId": "0-m8jVuDKE8hX1QorKGTM" + }, + "zIndex": 999, + "width": 267, + "height": 49, + "style": { + "width": 267, + "height": 49 + }, + "positionAbsolute": { + "x": -243.66916540260297, + "y": 369.7304293708296 + }, + "dragging": false, + "selectable": true, + "focusable": true + }, + { + "id": "uJIqgsqUbE62Tyo3K75Qx", + "type": "subtopic", + "position": { + "x": -243.66916540260297, + "y": 475.7304293708296 + }, + "selected": false, + "data": { + "label": "Binary Search Tree", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "oldId": "7NZlydjm4432vLY1InBS7" + }, + "zIndex": 999, + "width": 267, + "height": 49, + "style": { + "width": 267, + "height": 49 + }, + "positionAbsolute": { + "x": -243.66916540260297, + "y": 475.7304293708296 + }, + "dragging": false, + "selectable": true, + "focusable": true + }, + { + "id": "kLBgy_nxxjE8SxdVi04bq", + "type": "subtopic", + "position": { + "x": -243.66916540260297, + "y": 528.7304293708296 + }, + "selected": false, + "data": { + "label": "Recursion", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "oldId": "94KnPMQdNTOwQkUv37tAk" + }, + "zIndex": 999, + "width": 267, + "height": 49, + "style": { + "width": 267, + "height": 49 + }, + "positionAbsolute": { + "x": -243.66916540260297, + "y": 528.7304293708296 + }, + "dragging": false, + "selectable": true, + "focusable": true + }, + { + "id": "vvTmjcWCVclOPY4f_5uB0", + "type": "subtopic", + "position": { + "x": -243.66916540260297, + "y": 581.7304293708296 + }, + "selected": false, + "data": { + "label": "Sorting Algorithms", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "oldId": "YNptpfK9qv2ovmkUXLkJT" + }, + "zIndex": 999, + "width": 267, + "height": 49, + "style": { + "width": 267, + "height": 49 + }, + "positionAbsolute": { + "x": -243.66916540260297, + "y": 581.7304293708296 + }, + "dragging": false, + "selectable": true, + "focusable": true + }, + { + "id": "274uk28wzxn6EKWQzLpHs", + "type": "topic", + "position": { + "x": 130.3559210300732, + "y": 345.7304293708296 + }, + "selected": false, + "data": { + "label": "Modules", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + } + }, + "zIndex": 999, + "width": 242, + "height": 49, + "style": { + "width": 242, + "height": 49 + }, + "positionAbsolute": { + "x": 130.3559210300732, + "y": 345.7304293708296 + }, + "dragging": false, + "selectable": true, + "focusable": true, + "resizing": false + }, + { + "width": 126, + "height": 68, + "id": "iogwMmOvub2ZF4zgg6WyF", + "type": "title", + "position": { + "x": -173.16916540260297, + "y": -161.7695706291704 + }, + "selected": false, + "data": { + "label": "Python", + "style": { + "fontSize": 28, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "oldId": "9nxw2PEl-_eQPW0FHNPq2" + }, + "zIndex": 999, + "dragging": false, + "positionAbsolute": { + "x": -173.16916540260297, + "y": -161.7695706291704 + }, + "focusable": true, + "selectable": true + }, + { + "id": "JDDG4KfhtIlw1rkNCzUli", + "type": "topic", + "position": { + "x": -243.16916540260297, + "y": 67.2304293708296 + }, + "selected": false, + "data": { + "label": "Learn the Basics", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "oldId": "VJSIbYJcy2MC6MOFBrqXi" + }, + "zIndex": 999, + "width": 266, + "height": 49, + "style": { + "width": 266, + "height": 49 + }, + "positionAbsolute": { + "x": -243.16916540260297, + "y": 67.2304293708296 + }, + "selectable": true, + "focusable": true, + "dragging": false, + "resizing": false + }, + { + "id": "VJSIbYJcy2MC6MOFBrqXi", + "type": "topic", + "position": { + "x": -243.66916540260297, + "y": 216.70802158662212 + }, + "selected": false, + "data": { + "label": "Data Structures & Algorithms", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + } + }, + "zIndex": 999, + "width": 268, + "height": 49, + "style": { + "width": 268, + "height": 49 + }, + "positionAbsolute": { + "x": -243.66916540260297, + "y": 216.70802158662212 + }, + "selectable": true, + "focusable": true, + "dragging": false, + "resizing": false + }, + { + "id": "kIuns7FOwapwtFLKo1phQ", + "type": "subtopic", + "position": { + "x": -243.66916540260297, + "y": 316.7304293708296 + }, + "selected": false, + "data": { + "label": "Arrays and Linked Lists", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + } + }, + "zIndex": 999, + "width": 267, + "height": 49, + "style": { + "width": 267, + "height": 49 + }, + "positionAbsolute": { + "x": -243.66916540260297, + "y": 316.7304293708296 + }, + "selectable": true, + "focusable": true, + "dragging": false + }, + { + "id": "rSfg5M65LyZldhrdWOr90", + "type": "subtopic", + "position": { + "x": -243.66916540260297, + "y": 422.7304293708296 + }, + "selected": false, + "data": { + "label": "Heaps, Stacks and Queues", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + } + }, + "zIndex": 999, + "width": 267, + "height": 49, + "style": { + "width": 267, + "height": 49 + }, + "positionAbsolute": { + "x": -243.66916540260297, + "y": 422.7304293708296 + }, + "selectable": true, + "focusable": true, + "dragging": false, + "resizing": false + }, + { + "id": "0-m8jVuDKE8hX1QorKGTM", + "type": "subtopic", + "position": { + "x": -243.66916540260297, + "y": 369.7304293708296 + }, + "selected": false, + "data": { + "label": "Hash Tables", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + } + }, + "zIndex": 999, + "width": 267, + "height": 49, + "style": { + "width": 267, + "height": 49 + }, + "positionAbsolute": { + "x": -243.66916540260297, + "y": 369.7304293708296 + }, + "dragging": false, + "selectable": true, + "focusable": true + }, + { + "id": "7NZlydjm4432vLY1InBS7", + "type": "subtopic", + "position": { + "x": -243.66916540260297, + "y": 475.7304293708296 + }, + "selected": false, + "data": { + "label": "Binary Search Tree", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + } + }, + "zIndex": 999, + "width": 267, + "height": 49, + "style": { + "width": 267, + "height": 49 + }, + "positionAbsolute": { + "x": -243.66916540260297, + "y": 475.7304293708296 + }, + "dragging": false, + "selectable": true, + "focusable": true + }, + { + "id": "94KnPMQdNTOwQkUv37tAk", + "type": "subtopic", + "position": { + "x": -243.66916540260297, + "y": 528.7304293708296 + }, + "selected": false, + "data": { + "label": "Recursion", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + } + }, + "zIndex": 999, + "width": 267, + "height": 49, + "style": { + "width": 267, + "height": 49 + }, + "positionAbsolute": { + "x": -243.66916540260297, + "y": 528.7304293708296 + }, + "dragging": false, + "selectable": true, + "focusable": true + }, + { + "id": "YNptpfK9qv2ovmkUXLkJT", + "type": "subtopic", + "position": { + "x": -243.66916540260297, + "y": 581.7304293708296 + }, + "selected": false, + "data": { + "label": "Sorting Algorithms", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + } + }, + "zIndex": 999, + "width": 267, + "height": 49, + "style": { + "width": 267, + "height": 49 + }, + "positionAbsolute": { + "x": -243.66916540260297, + "y": 581.7304293708296 + }, + "dragging": false, + "selectable": true, + "focusable": true + }, + { + "id": "08XifLQ20c4FKI_4AWNBQ", + "type": "subtopic", + "position": { + "x": 130.3559210300732, + "y": 263.9180561596926 + }, + "selected": false, + "data": { + "label": "Builtin", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + } + }, + "zIndex": 999, + "width": 110, + "height": 49, + "style": { + "width": 110, + "height": 49 + }, + "dragging": false, + "positionAbsolute": { + "x": 130.3559210300732, + "y": 263.9180561596926 + }, + "selectable": true, + "focusable": true, + "resizing": false + }, + { + "id": "l7k0qTYe42wYBTlT2-1cy", + "type": "subtopic", + "position": { + "x": 249.3559210300732, + "y": 263.9180561596926 + }, + "selected": false, + "data": { + "label": "Custom", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + } + }, + "zIndex": 999, + "width": 123, + "height": 49, + "style": { + "width": 123, + "height": 49 + }, + "dragging": false, + "resizing": false, + "positionAbsolute": { + "x": 249.3559210300732, + "y": 263.9180561596926 + }, + "selectable": true, + "focusable": true + }, + { + "id": "aWHgAk959DPUZL46CeRiI", + "type": "topic", + "position": { + "x": 130.3559210300732, + "y": 398.7304293708296 + }, + "selected": false, + "data": { + "label": "Lambdas", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + } + }, + "zIndex": 999, + "width": 242, + "height": 49, + "style": { + "width": 242, + "height": 49 + }, + "positionAbsolute": { + "x": 130.3559210300732, + "y": 398.7304293708296 + }, + "dragging": false, + "selectable": true, + "focusable": true, + "resizing": false + }, + { + "id": "pIluLJkySqn_gI_GykV6G", + "type": "topic", + "position": { + "x": 130.3559210300732, + "y": 451.7304293708296 + }, + "selected": false, + "data": { + "label": "Decorators", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + } + }, + "zIndex": 999, + "width": 242, + "height": 49, + "style": { + "width": 242, + "height": 49 + }, + "positionAbsolute": { + "x": 130.3559210300732, + "y": 451.7304293708296 + }, + "selectable": true, + "focusable": true, + "dragging": false, + "resizing": false + }, + { + "id": "aB1LSQjDEQb_BxueOcnxU", + "type": "topic", + "position": { + "x": 130.3559210300732, + "y": 504.7304293708296 + }, + "selected": false, + "data": { + "label": "Iterators", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "oldId": "P_Di-XPSDITmU3xKQew8G" + }, + "zIndex": 999, + "width": 242, + "height": 49, + "style": { + "width": 242, + "height": 49 + }, + "positionAbsolute": { + "x": 130.3559210300732, + "y": 504.7304293708296 + }, + "selectable": true, + "focusable": true, + "dragging": false, + "resizing": false + }, + { + "id": "7t6mJBsaFMWPi7o9fbhhq", + "type": "topic", + "position": { + "x": 130.3559210300732, + "y": 557.7304293708296 + }, + "selected": false, + "data": { + "label": "Regular Expressions", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "oldId": "P_Di-XPSDITmU3xKQew8G" + }, + "zIndex": 999, + "width": 242, + "height": 49, + "style": { + "width": 242, + "height": 49 + }, + "positionAbsolute": { + "x": 130.3559210300732, + "y": 557.7304293708296 + }, + "selectable": true, + "focusable": true, + "dragging": false, + "resizing": false + }, + { + "id": "P_Di-XPSDITmU3xKQew8G", + "type": "topic", + "position": { + "x": -248.16916540260297, + "y": 657.7304293708296 + }, + "selected": false, + "data": { + "label": "Object Oriented Programming", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + } + }, + "zIndex": 999, + "width": 275, + "height": 49, + "style": {}, + "positionAbsolute": { + "x": -248.16916540260297, + "y": 657.7304293708296 + }, + "selectable": true, + "focusable": true, + "dragging": false, + "resizing": false + }, + { + "id": "AqwzR8dZKLQIoj_6KKZ3t", + "type": "subtopic", + "position": { + "x": -202.66916540260297, + "y": 734.7304293708296 + }, + "selected": false, + "data": { + "label": "Classes", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + } + }, + "zIndex": 999, + "width": 184, + "height": 49, + "style": { + "width": 184, + "height": 49 + }, + "positionAbsolute": { + "x": -202.66916540260297, + "y": 734.7304293708296 + }, + "selectable": true, + "focusable": true, + "dragging": false, + "resizing": false + }, + { + "id": "S0FLE70szSVUPI0CDEQK7", + "type": "subtopic", + "position": { + "x": -202.66916540260297, + "y": 787.7304293708296 + }, + "selected": false, + "data": { + "label": "Inheritance", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + } + }, + "zIndex": 999, + "width": 184, + "height": 49, + "style": { + "width": 184, + "height": 49 + }, + "positionAbsolute": { + "x": -202.66916540260297, + "y": 787.7304293708296 + }, + "selectable": true, + "focusable": true, + "dragging": false, + "resizing": false + }, + { + "id": "zAS4YiEJ6VPsyABrkIG8i", + "type": "subtopic", + "position": { + "x": -202.66916540260297, + "y": 840.7304293708296 + }, + "selected": false, + "data": { + "label": "Methods, Dunder", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + } + }, + "zIndex": 999, + "width": 184, + "height": 49, + "style": { + "width": 184, + "height": 49 + }, + "positionAbsolute": { + "x": -202.66916540260297, + "y": 840.7304293708296 + }, + "dragging": false, + "resizing": false, + "selectable": true, + "focusable": true + }, + { + "id": "qeCMw-sJ2FR4UxvU9DDzv", + "type": "topic", + "position": { + "x": -461.23327447982547, + "y": 418.7304293708296 + }, + "selected": false, + "data": { + "label": "Package Managers", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + } + }, + "zIndex": 999, + "width": 194, + "height": 49, + "style": { + "width": 194, + "height": 49 + }, + "positionAbsolute": { + "x": -461.23327447982547, + "y": 418.7304293708296 + }, + "dragging": false, + "selectable": true, + "focusable": true + }, + { + "id": "1dfOTOGsOk5XE3bnZs8Ht", + "type": "subtopic", + "position": { + "x": -461.23327447982547, + "y": 222.7304293708296 + }, + "selected": false, + "data": { + "label": "PyPI", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + } + }, + "zIndex": 999, + "width": 100, + "height": 49, + "style": { + "width": 100, + "height": 49 + }, + "positionAbsolute": { + "x": -461.23327447982547, + "y": 222.7304293708296 + }, + "dragging": false, + "selectable": true, + "focusable": true, + "resizing": false + }, + { + "id": "iVhQnp6hpgVZDNJ0XoVra", + "type": "subtopic", + "position": { + "x": -357.23327447982547, + "y": 222.7304293708296 + }, + "selected": false, + "data": { + "label": "Pip", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "oldId": "p3Frfs6oxpuciUzeCEsvb" + }, + "zIndex": 999, + "width": 90, + "height": 49, + "style": { + "width": 90, + "height": 49 + }, + "positionAbsolute": { + "x": -357.23327447982547, + "y": 222.7304293708296 + }, + "selectable": true, + "focusable": true, + "dragging": false, + "resizing": false + }, + { + "id": "uh67D1u-Iv5cZamRgFEJg", + "type": "subtopic", + "position": { + "x": -461.23327447982547, + "y": 275.7304293708296 + }, + "selected": false, + "data": { + "label": "Conda", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + } + }, + "zIndex": 999, + "width": 100, + "height": 49, + "style": { + "width": 100, + "height": 49 + }, + "positionAbsolute": { + "x": -461.23327447982547, + "y": 275.7304293708296 + }, + "selectable": true, + "focusable": true, + "dragging": false, + "resizing": false + }, + { + "id": "uXd2B01GVBEQNXQE8RATT", + "type": "subtopic", + "position": { + "x": -461.23327447982547, + "y": 328.7304293708296 + }, + "selected": false, + "data": { + "label": "Poetry", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + } + }, + "zIndex": 999, + "width": 194, + "height": 49, + "style": { + "width": 194, + "height": 49 + }, + "dragging": false, + "positionAbsolute": { + "x": -461.23327447982547, + "y": 328.7304293708296 + }, + "selectable": true, + "focusable": true + }, + { + "id": "4gtmtYWYRWqwLdZRL0XMg", + "type": "topic", + "position": { + "x": -621.1730553753519, + "y": 668.7304293708296 + }, + "selected": false, + "data": { + "label": "List Comprehensions", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + } + }, + "zIndex": 999, + "width": 222, + "height": 49, + "style": { + "width": 222, + "height": 49 + }, + "dragging": false, + "focusable": true, + "positionAbsolute": { + "x": -621.1730553753519, + "y": 668.7304293708296 + }, + "resizing": false, + "selectable": true + }, + { + "id": "jnLIVRrWxcX3yq3Op91Vr", + "type": "topic", + "position": { + "x": -621.1730553753519, + "y": 721.7304293708296 + }, + "selected": false, + "data": { + "label": "Generator Expressions", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + } + }, + "zIndex": 999, + "width": 222, + "height": 49, + "style": { + "width": 222 + }, + "positionAbsolute": { + "x": -621.1730553753519, + "y": 721.7304293708296 + }, + "dragging": false, + "selectable": true, + "focusable": true + }, + { + "id": "4GU5HNi3W8yFkImVY9ZpW", + "type": "topic", + "position": { + "x": -621.1730553753519, + "y": 774.7304293708296 + }, + "selected": false, + "data": { + "label": "Paradigms", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + } + }, + "zIndex": 999, + "width": 222, + "height": 49, + "style": { + "width": 222, + "height": 49 + }, + "positionAbsolute": { + "x": -621.1730553753519, + "y": 774.7304293708296 + }, + "dragging": false, + "selectable": true, + "focusable": true + }, + { + "id": "KAXF2kUAOvtBZhY8G9rkI", + "type": "topic", + "position": { + "x": -621.1730553753519, + "y": 827.7304293708296 + }, + "selected": false, + "data": { + "label": "Context Manager", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + } + }, + "zIndex": 999, + "width": 222, + "height": 49, + "style": { + "width": 222, + "height": 49 + }, + "positionAbsolute": { + "x": -621.1730553753519, + "y": 827.7304293708296 + }, + "dragging": false, + "selectable": true, + "focusable": true + }, + { + "id": "0-ShORjGnQlAdcwjtxdEB", + "type": "topic", + "position": { + "x": -617.2332744798255, + "y": 922.73046875 + }, + "selected": false, + "data": { + "label": "Learn a Framework", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + } + }, + "zIndex": 999, + "width": 252, + "height": 49, + "style": { + "width": 252, + "height": 49 + }, + "positionAbsolute": { + "x": -617.2332744798255, + "y": 922.73046875 + }, + "dragging": false, + "selectable": true, + "focusable": true, + "resizing": false + }, + { + "id": "xOUj3Uz6UZgm7j6RvIvDO", + "type": "label", + "position": { + "x": -605.0754215575712, + "y": 1136.7821121205188 + }, + "selected": false, + "data": { + "label": "Synchronous", + "href": "", + "color": "#000000", + "style": { + "fontSize": 17 + } + }, + "zIndex": 999, + "width": 130, + "height": 27, + "style": { + "width": 130, + "height": 27.41717529296875 + }, + "positionAbsolute": { + "x": -605.0754215575712, + "y": 1136.7821121205188 + }, + "selectable": true, + "focusable": true, + "dragging": false + }, + { + "id": "DHtskqATeAVKgaazdhXKD", + "type": "subtopic", + "position": { + "x": -605.0754215575712, + "y": 1081.842978409371 + }, + "selected": false, + "data": { + "label": "Pyramid", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + } + }, + "zIndex": 999, + "width": 130, + "height": 49, + "style": { + "width": 130, + "height": 49 + }, + "positionAbsolute": { + "x": -605.0754215575712, + "y": 1081.842978409371 + }, + "dragging": false, + "resizing": false, + "selectable": true, + "focusable": true + }, + { + "id": "7zcpXN3krnS3tMRWVNIVe", + "type": "subtopic", + "position": { + "x": -605.0754215575712, + "y": 1028.842978409371 + }, + "selected": false, + "data": { + "label": "Plotly Dash", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + } + }, + "zIndex": 999, + "width": 130, + "height": 49, + "style": { + "width": 130, + "height": 49 + }, + "positionAbsolute": { + "x": -605.0754215575712, + "y": 1028.842978409371 + }, + "dragging": false, + "selectable": true, + "focusable": true + }, + { + "id": "FFy2S2eFDyahPltEzucF8", + "type": "label", + "position": { + "x": -428.86083334739004, + "y": 1132.2821121205188 + }, + "selected": false, + "data": { + "label": "Asynchronous", + "href": "", + "color": "#000000", + "style": { + "fontSize": 17 + } + }, + "zIndex": 999, + "width": 123, + "height": 36, + "style": {}, + "dragging": false, + "positionAbsolute": { + "x": -428.86083334739004, + "y": 1132.2821121205188 + }, + "selectable": true, + "focusable": true + }, + { + "id": "InUJIGmTnf0X4cSoLuCEQ", + "type": "subtopic", + "position": { + "x": -457.82311768204903, + "y": 1028.7821121205188 + }, + "selected": false, + "data": { + "label": "gevent", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + } + }, + "zIndex": 999, + "width": 100, + "height": 49, + "style": { + "width": 100, + "height": 49 + }, + "positionAbsolute": { + "x": -457.82311768204903, + "y": 1028.7821121205188 + }, + "selectable": true, + "focusable": true, + "dragging": false, + "resizing": false + }, + { + "id": "IBVAvFtN4mnIPbIuyUvEb", + "type": "subtopic", + "position": { + "x": -352.4492068228141, + "y": 1028.7821121205188 + }, + "selected": false, + "data": { + "label": "aiohttp", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + } + }, + "zIndex": 999, + "width": 100, + "height": 49, + "style": { + "width": 100, + "height": 49 + }, + "positionAbsolute": { + "x": -352.4492068228141, + "y": 1028.7821121205188 + }, + "selectable": true, + "focusable": true, + "dragging": false, + "resizing": false + }, + { + "id": "zey2C6BdzsHJAlb_K3qrP", + "type": "subtopic", + "position": { + "x": -457.82311768204903, + "y": 1081.7821121205188 + }, + "selected": false, + "data": { + "label": "Tornado", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + } + }, + "zIndex": 999, + "width": 100, + "height": 49, + "style": { + "width": 100, + "height": 49 + }, + "positionAbsolute": { + "x": -457.82311768204903, + "y": 1081.7821121205188 + }, + "selectable": true, + "focusable": true, + "dragging": false, + "resizing": false + }, + { + "id": "9RGpqsj9jHz0_-r7EvRcw", + "type": "subtopic", + "position": { + "x": -352.4492068228141, + "y": 1081.7821121205188 + }, + "selected": false, + "data": { + "label": "Sanic", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + } + }, + "zIndex": 999, + "width": 100, + "height": 49, + "style": { + "width": 100, + "height": 49 + }, + "positionAbsolute": { + "x": -352.4492068228141, + "y": 1081.7821121205188 + }, + "dragging": false, + "resizing": false, + "selectable": true, + "focusable": true + }, + { + "id": "NYOaEGM47I2oqnroxyVZV", + "type": "label", + "position": { + "x": -551.5754215575712, + "y": 1183.2645121406858 + }, + "selected": false, + "data": { + "label": "Synchronous + Asynchronous", + "href": "", + "color": "#000000", + "style": { + "fontSize": 17 + } + }, + "zIndex": 999, + "width": 242, + "height": 36, + "style": {}, + "positionAbsolute": { + "x": -551.5754215575712, + "y": 1183.2645121406858 + }, + "dragging": false, + "selectable": true, + "focusable": true + }, + { + "id": "XeQSmvAsGSTi8dd7QVHxn", + "type": "subtopic", + "position": { + "x": -600.8947642441506, + "y": 1224.64342674736 + }, + "selected": false, + "data": { + "label": "Fast API", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + } + }, + "zIndex": 999, + "width": 109, + "height": 49, + "style": {}, + "positionAbsolute": { + "x": -600.8947642441506, + "y": 1224.64342674736 + }, + "selectable": true, + "focusable": true, + "dragging": false + }, + { + "id": "x1V8GjdjANTnhP6YXMbgC", + "type": "subtopic", + "position": { + "x": -488.39476424415045, + "y": 1224.64342674736 + }, + "selected": false, + "data": { + "label": "Django", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + } + }, + "zIndex": 999, + "width": 122, + "height": 49, + "style": { + "width": 122, + "height": 49 + }, + "positionAbsolute": { + "x": -488.39476424415045, + "y": 1224.64342674736 + }, + "selectable": true, + "focusable": true, + "dragging": false, + "resizing": false + }, + { + "id": "HKsGyRzntjh1UbRZSWh_4", + "type": "subtopic", + "position": { + "x": -362.89476424415045, + "y": 1224.64342674736 + }, + "selected": false, + "data": { + "label": "Flask", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + } + }, + "zIndex": 999, + "width": 102, + "height": 49, + "style": { + "width": 102, + "height": 49 + }, + "positionAbsolute": { + "x": -362.89476424415045, + "y": 1224.64342674736 + }, + "dragging": false, + "selectable": true, + "focusable": true, + "resizing": false + }, + { + "id": "u4nRzWQ4zhDFMOrZ2I_uJ", + "type": "topic", + "position": { + "x": -201.6003273267287, + "y": 922.73046875 + }, + "selected": false, + "data": { + "label": "Concurrency", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + } + }, + "zIndex": 999, + "width": 205, + "height": 49, + "style": { + "width": 205, + "height": 49 + }, + "positionAbsolute": { + "x": -201.6003273267287, + "y": 922.73046875 + }, + "dragging": false, + "resizing": false, + "selectable": true, + "focusable": true + }, + { + "id": "bS7WeVKm2kEElu3sBKcIC", + "type": "subtopic", + "position": { + "x": -201.6003273267287, + "y": 1123.7962000920706 + }, + "selected": false, + "data": { + "label": "GIL", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + } + }, + "zIndex": 999, + "width": 205, + "height": 49, + "style": { + "width": 205, + "height": 49 + }, + "positionAbsolute": { + "x": -201.6003273267287, + "y": 1123.7962000920706 + }, + "dragging": false, + "selectable": true, + "focusable": true + }, + { + "id": "UIx0XYaOgXXlYbbQtjiPq", + "type": "subtopic", + "position": { + "x": -201.6003273267287, + "y": 1176.7962000920706 + }, + "selected": false, + "data": { + "label": "Threading", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + } + }, + "zIndex": 999, + "width": 205, + "height": 49, + "style": { + "width": 205, + "height": 49 + }, + "positionAbsolute": { + "x": -201.6003273267287, + "y": 1176.7962000920706 + }, + "dragging": false, + "selectable": true, + "focusable": true + }, + { + "id": "HSY5OUc_M5S6OcFXPRtkx", + "type": "subtopic", + "position": { + "x": -201.6003273267287, + "y": 1017.7962000920706 + }, + "selected": false, + "data": { + "label": "Multiprocessing", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + } + }, + "zIndex": 999, + "width": 205, + "height": 49, + "style": { + "width": 205, + "height": 49 + }, + "positionAbsolute": { + "x": -201.6003273267287, + "y": 1017.7962000920706 + }, + "selectable": true, + "focusable": true, + "dragging": false + }, + { + "id": "Mow7RvropbC4ZGDpcGZmw", + "type": "subtopic", + "position": { + "x": -201.6003273267287, + "y": 1070.7962000920706 + }, + "selected": false, + "data": { + "label": "Asynchrony", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + } + }, + "zIndex": 999, + "width": 205, + "height": 49, + "style": { + "width": 205, + "height": 49 + }, + "positionAbsolute": { + "x": -201.6003273267287, + "y": 1070.7962000920706 + }, + "selectable": true, + "focusable": true, + "dragging": false + }, + { + "id": "p3Frfs6oxpuciUzeCEsvb", + "type": "subtopic", + "position": { + "x": -357.23327447982547, + "y": 275.7304293708296 + }, + "selected": false, + "data": { + "label": "uv", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + } + }, + "zIndex": 999, + "width": 90, + "height": 49, + "style": { + "width": 90, + "height": 49 + }, + "positionAbsolute": { + "x": -357.23327447982547, + "y": 275.7304293708296 + }, + "selectable": true, + "focusable": true, + "dragging": false, + "resizing": false + }, + { + "id": "GHKAY9gOykEbxkEeR30wL", + "type": "subtopic", + "position": { + "x": -611.7332744798255, + "y": 565.0807887739926 + }, + "selected": false, + "data": { + "label": "pyproject.toml", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + } + }, + "zIndex": 999, + "width": 203, + "height": 49, + "style": { + "width": 203, + "height": 49 + }, + "positionAbsolute": { + "x": -611.7332744798255, + "y": 565.0807887739926 + }, + "dragging": false, + "selectable": true, + "focusable": true, + "resizing": false + }, + { + "id": "yDP0K1gXlDmVSgTtGJaPY", + "type": "label", + "position": { + "x": -578.31263469232, + "y": 619.0807887739926 + }, + "selected": false, + "data": { + "label": "Configuration", + "href": "", + "color": "#000000", + "style": { + "fontSize": 17 + } + }, + "zIndex": 999, + "width": 143, + "height": 36, + "style": { + "width": 143 + }, + "positionAbsolute": { + "x": -578.31263469232, + "y": 619.0807887739926 + }, + "dragging": false, + "selectable": true, + "focusable": true + }, + { + "id": "IWq-tfkz-pSC1ztZl60vM", + "type": "subtopic", + "position": { + "x": 77.79817070787664, + "y": 763.1504012205187 + }, + "selected": false, + "data": { + "label": "Pipenv", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + } + }, + "zIndex": 999, + "width": 145, + "height": 49, + "style": { + "width": 145, + "height": 49 + }, + "positionAbsolute": { + "x": 77.79817070787664, + "y": 763.1504012205187 + }, + "selectable": true, + "focusable": true, + "dragging": false + }, + { + "id": "_IXXTSwQOgYzYIUuKVWNE", + "type": "subtopic", + "position": { + "x": 77.79817070787664, + "y": 816.1504012205187 + }, + "selected": false, + "data": { + "label": "virutalenv", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + } + }, + "zIndex": 999, + "width": 145, + "height": 49, + "style": { + "width": 145, + "height": 49 + }, + "positionAbsolute": { + "x": 77.79817070787664, + "y": 816.1504012205187 + }, + "selectable": true, + "focusable": true, + "dragging": false + }, + { + "id": "N5VaKMbgQ0V_BC5tadV65", + "type": "subtopic", + "position": { + "x": 77.79817070787664, + "y": 869.1504012205187 + }, + "selected": false, + "data": { + "label": "pyenv", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + } + }, + "zIndex": 999, + "width": 145, + "height": 46, + "style": { + "width": 145, + "height": 46 + }, + "positionAbsolute": { + "x": 77.79817070787664, + "y": 869.1504012205187 + }, + "dragging": false, + "selectable": true, + "focusable": true + }, + { + "id": "lkST4ErYyBfrCcpsuptzh", + "type": "label", + "position": { + "x": 77.79817070787664, + "y": 926.1504012205187 + }, + "selected": false, + "data": { + "label": "Environments", + "href": "", + "color": "#000000", + "style": { + "fontSize": 17 + } + }, + "zIndex": 999, + "width": 145, + "height": 34, + "style": { + "width": 145, + "height": 33.95526123046875 + }, + "positionAbsolute": { + "x": 77.79817070787664, + "y": 926.1504012205187 + }, + "dragging": false, + "selectable": true, + "focusable": true + }, + { + "id": "1PXApuUpPmJjgi12cmWo4", + "type": "topic", + "position": { + "x": 282.82694462464815, + "y": 918.6504012205187 + }, + "selected": false, + "data": { + "label": "Static Typing", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + } + }, + "zIndex": 999, + "width": 156, + "height": 49, + "style": { + "width": 156, + "height": 49 + }, + "positionAbsolute": { + "x": 282.82694462464815, + "y": 918.6504012205187 + }, + "dragging": false, + "selectable": true, + "focusable": true, + "resizing": false + }, + { + "id": "KFFbnOBa-y5r58w2pUf15", + "type": "horizontal", + "position": { + "x": 3.5088599202340447, + "y": 937.23046875 + }, + "selected": false, + "data": { + "label": "horizontal node", + "style": { + "stroke": "#2B78E4", + "strokeWidth": 3.65 + } + }, + "zIndex": 999, + "width": 67, + "height": 20, + "style": { + "width": 67, + "height": 20 + }, + "positionAbsolute": { + "x": 3.5088599202340447, + "y": 937.23046875 + }, + "dragging": false, + "resizing": false, + "selectable": true, + "focusable": true + }, + { + "id": "W3VALz5evFo1qqkQbMN1R", + "type": "subtopic", + "position": { + "x": 282.82694462464815, + "y": 842.7304293708296 + }, + "selected": false, + "data": { + "label": "Pydantic", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + } + }, + "zIndex": 999, + "width": 156, + "height": 49, + "style": { + "width": 156, + "height": 49 + }, + "positionAbsolute": { + "x": 282.82694462464815, + "y": 842.7304293708296 + }, + "selectable": true, + "focusable": true, + "dragging": false + }, + { + "id": "gIcJ3bUVQXqO1Wx4gUKd5", + "type": "subtopic", + "position": { + "x": 282.82694462464815, + "y": 683.7304293708296 + }, + "selected": false, + "data": { + "label": "mypy", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "oldId": "o1wi39VnjnFfWIC8XcuAK" + }, + "zIndex": 999, + "width": 156, + "height": 49, + "style": { + "width": 156, + "height": 49 + }, + "positionAbsolute": { + "x": 282.82694462464815, + "y": 683.7304293708296 + }, + "selectable": true, + "focusable": true, + "dragging": false + }, + { + "id": "1q9HWgu9jDTK757hTNOmE", + "type": "subtopic", + "position": { + "x": 282.82694462464815, + "y": 736.7304293708296 + }, + "selected": false, + "data": { + "label": "pyright", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + } + }, + "zIndex": 999, + "width": 156, + "height": 49, + "style": { + "width": 156, + "height": 49 + }, + "positionAbsolute": { + "x": 282.82694462464815, + "y": 736.7304293708296 + }, + "selectable": true, + "focusable": true, + "dragging": false + }, + { + "id": "9mFR_ueXbIB2IrkqU2s85", + "type": "subtopic", + "position": { + "x": 282.82694462464815, + "y": 789.7304293708296 + }, + "selected": false, + "data": { + "label": "pyre", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + } + }, + "zIndex": 999, + "width": 156, + "height": 49, + "style": { + "width": 156, + "height": 49 + }, + "positionAbsolute": { + "x": 282.82694462464815, + "y": 789.7304293708296 + }, + "dragging": false, + "selectable": true, + "focusable": true + }, + { + "id": "0F0ppU_ClIUKZ23Q6BVZp", + "type": "topic", + "position": { + "x": 259.82694462464815, + "y": 1046.9159442045684 + }, + "selected": false, + "data": { + "label": "Code Formatting", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + } + }, + "zIndex": 999, + "width": 179, + "height": 49, + "style": { + "width": 179, + "height": 49 + }, + "positionAbsolute": { + "x": 259.82694462464815, + "y": 1046.9159442045684 + }, + "dragging": false, + "selectable": true, + "focusable": true, + "resizing": false + }, + { + "id": "6cB0pvUO1-gvCtgqozP-Q", + "type": "subtopic", + "position": { + "x": 67.77353876747918, + "y": 1098.8447698764166 + }, + "selected": false, + "data": { + "label": "ruff", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + } + }, + "zIndex": 999, + "width": 107, + "height": 49, + "style": { + "width": 107 + }, + "positionAbsolute": { + "x": 67.77353876747918, + "y": 1098.8447698764166 + }, + "selectable": true, + "focusable": true, + "dragging": false + }, + { + "id": "DS6nuAUhUYcqiJDmQisKM", + "type": "subtopic", + "position": { + "x": 67.77353876747918, + "y": 1045.8447698764166 + }, + "selected": false, + "data": { + "label": "black", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + } + }, + "zIndex": 999, + "width": 107, + "height": 49, + "style": { + "width": 107 + }, + "positionAbsolute": { + "x": 67.77353876747918, + "y": 1045.8447698764166 + }, + "selectable": true, + "focusable": true, + "dragging": false + }, + { + "id": "tsh_vbhzKz1-H9Vh69tsK", + "type": "subtopic", + "position": { + "x": 67.77353876747918, + "y": 992.8447698764166 + }, + "selected": false, + "data": { + "label": "yapf", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + } + }, + "zIndex": 999, + "width": 107, + "height": 49, + "style": { + "width": 107, + "height": 49 + }, + "positionAbsolute": { + "x": 67.77353876747918, + "y": 992.8447698764166 + }, + "dragging": false, + "resizing": false, + "selectable": true, + "focusable": true + }, + { + "id": "ZFyKLneWQyUks5zSi_-kw", + "type": "label", + "position": { + "x": 280.6043153709654, + "y": 1231.6757618831236 + }, + "selected": false, + "data": { + "label": "Documentation", + "href": "", + "color": "#000000", + "style": { + "fontSize": 17 + } + }, + "zIndex": 999, + "width": 145, + "height": 36, + "style": { + "width": 145 + }, + "positionAbsolute": { + "x": 280.6043153709654, + "y": 1231.6757618831236 + }, + "dragging": false, + "selectable": true, + "focusable": true + }, + { + "id": "maYNuTKYyZndxk1z29-UY", + "type": "subtopic", + "position": { + "x": 280.6043153709654, + "y": 1176.7962000920706 + }, + "selected": false, + "data": { + "label": "Sphinx", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + } + }, + "zIndex": 999, + "width": 145, + "height": 46, + "style": { + "width": 145, + "height": 46 + }, + "positionAbsolute": { + "x": 280.6043153709654, + "y": 1176.7962000920706 + }, + "dragging": false, + "selectable": true, + "focusable": true + }, + { + "id": "_94NrQ3quc4t_PPOsFSN0", + "type": "topic", + "position": { + "x": -621.1730553753519, + "y": 498.7304293708296 + }, + "selected": false, + "data": { + "label": "Common Packages", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + } + }, + "zIndex": 999, + "width": 221, + "height": 49, + "style": { + "width": 221, + "height": 49 + }, + "positionAbsolute": { + "x": -621.1730553753519, + "y": 498.7304293708296 + }, + "dragging": false, + "resizing": false, + "selectable": true, + "focusable": true + }, + { + "id": "WQOYjuwKIWB2meea4JnsV", + "type": "topic", + "position": { + "x": 22.33083459739703, + "y": 1387.21519978213 + }, + "selected": false, + "data": { + "label": "Testing", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + } + }, + "zIndex": 999, + "width": 142, + "height": 49, + "style": { + "width": 142, + "height": 49 + }, + "positionAbsolute": { + "x": 22.33083459739703, + "y": 1387.21519978213 + }, + "dragging": false, + "resizing": false, + "selectable": true, + "focusable": true + }, + { + "id": "aVclygxoA9ePU5IxaORSH", + "type": "subtopic", + "position": { + "x": 266.57585484459395, + "y": 1408.9552389677524 + }, + "selected": false, + "data": { + "label": "doctest", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + } + }, + "zIndex": 999, + "width": 171, + "height": 49, + "style": { + "width": 171, + "height": 49 + }, + "positionAbsolute": { + "x": 266.57585484459395, + "y": 1408.9552389677524 + }, + "selectable": true, + "focusable": true, + "dragging": false + }, + { + "id": "SSnzpijHLO5_l7DNEoMfx", + "type": "subtopic", + "position": { + "x": 337.57585484459395, + "y": 1302.9552389677524 + }, + "selected": false, + "data": { + "label": "nose", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + } + }, + "zIndex": 999, + "width": 100, + "height": 49, + "style": { + "width": 100, + "height": 49 + }, + "positionAbsolute": { + "x": 337.57585484459395, + "y": 1302.9552389677524 + }, + "selectable": true, + "focusable": true, + "dragging": false, + "resizing": false + }, + { + "id": "3FDwJpesfelEyJrNWtm0V", + "type": "subtopic", + "position": { + "x": 266.57585484459395, + "y": 1461.9552389677524 + }, + "selected": false, + "data": { + "label": "pytest", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + } + }, + "zIndex": 999, + "width": 171, + "height": 49, + "style": { + "width": 171, + "height": 49 + }, + "positionAbsolute": { + "x": 266.57585484459395, + "y": 1461.9552389677524 + }, + "selectable": true, + "focusable": true, + "dragging": false + }, + { + "id": "b4he_RO17C3ScNeUd6v2b", + "type": "subtopic", + "position": { + "x": 266.57585484459395, + "y": 1355.9552389677524 + }, + "selected": false, + "data": { + "label": "unittest / pyUnit", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + } + }, + "zIndex": 999, + "width": 171, + "height": 49, + "style": { + "width": 171, + "height": 49 + }, + "positionAbsolute": { + "x": 266.57585484459395, + "y": 1355.9552389677524 + }, + "selectable": true, + "focusable": true, + "dragging": false, + "resizing": false + }, + { + "id": "o1wi39VnjnFfWIC8XcuAK", + "type": "subtopic", + "position": { + "x": 282.82694462464815, + "y": 630.7304293708296 + }, + "selected": false, + "data": { + "label": "typing", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + } + }, + "zIndex": 999, + "width": 156, + "height": 49, + "style": { + "width": 156, + "height": 49 + }, + "positionAbsolute": { + "x": 282.82694462464815, + "y": 630.7304293708296 + }, + "selectable": true, + "focusable": true, + "dragging": false + }, + { + "id": "jPFOiwbqfaGshaGDBWb5x", + "type": "subtopic", + "position": { + "x": 266.57585484459395, + "y": 1302.9552389677524 + }, + "selected": false, + "data": { + "label": "tox", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + } + }, + "zIndex": 999, + "width": 67, + "height": 49, + "style": {}, + "positionAbsolute": { + "x": 266.57585484459395, + "y": 1302.9552389677524 + }, + "dragging": false, + "selectable": true, + "focusable": true + }, + { + "width": 142, + "height": 49, + "id": "U0fJo2a3vnaodNJhfZ78I", + "type": "button", + "position": { + "x": -453.8231176820491, + "y": 1406.9044816937815 + }, + "selected": false, + "data": { + "label": "DevOps", + "href": "https://roadm.sh/devops", + "color": "#FFFFFf", + "backgroundColor": "#4136D4", + "style": { + "fontSize": 17 + }, + "borderColor": "#4136D4", + "oldId": "P5IZjP0g1_fnvHy3YTR4q" + }, + "zIndex": 999, + "dragging": false, + "positionAbsolute": { + "x": -453.8231176820491, + "y": 1406.9044816937815 + }, + "style": { + "width": 142, + "height": 49 + }, + "focusable": true, + "resizing": false, + "selectable": true + } + ], + "edges": [ + { + "style": { + "strokeDasharray": "0", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2b78e4" + }, + "sourceHandle": "x2", + "target": "GV_zWF6rSWg5bqgiXhOEf", + "targetHandle": "w1", + "data": { + "edgeStyle": "solid" + }, + "id": "M0aRyhxjzTWUOW95D1g1y", + "selected": false, + "type": "smoothstep", + "focusable": true, + "selectable": true + }, + { + "style": { + "strokeDasharray": "0", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2b78e4" + }, + "sourceHandle": "x2", + "target": "GV_zWF6rSWg5bqgiXhOEf", + "targetHandle": "w1", + "data": { + "edgeStyle": "solid" + }, + "id": "Xw4lLz2zWuTkNu8r4oheF", + "selected": false, + "selectable": true, + "focusable": true + }, + { + "style": { + "strokeDasharray": "0", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2b78e4" + }, + "sourceHandle": "x2", + "target": "GV_zWF6rSWg5bqgiXhOEf", + "targetHandle": "w1", + "data": { + "edgeStyle": "solid" + }, + "id": "mbCXMk97_HKXG3d4TxBOC", + "selected": false, + "focusable": true, + "selectable": true + }, + { + "style": { + "strokeDasharray": "0", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2b78e4" + }, + "source": "hIQe_B-68ENL-GFg6GmnD", + "sourceHandle": "x2", + "target": "GISOFMKvnBys0O0IMpz2J", + "targetHandle": "w2", + "data": { + "edgeStyle": "solid" + }, + "id": "reactflow__edge-iogwMmOvub2ZF4zgg6WyFx2-VJSIbYJcy2MC6MOFBrqXiw2", + "selected": false, + "selectable": true, + "focusable": true + }, + { + "style": { + "strokeDasharray": "0.8 8", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2b78e4" + }, + "source": "GISOFMKvnBys0O0IMpz2J", + "sourceHandle": "y2", + "target": "6xRncUs3_vxVbDur567QA", + "targetHandle": "z1", + "data": { + "edgeStyle": "dashed" + }, + "id": "reactflow__edge-VJSIbYJcy2MC6MOFBrqXiy2-6xRncUs3_vxVbDur567QAz1", + "selected": false, + "selectable": true, + "focusable": true + }, + { + "style": { + "strokeDasharray": "0.8 8", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2b78e4" + }, + "source": "GISOFMKvnBys0O0IMpz2J", + "sourceHandle": "y2", + "target": "dEFLBGpiH6nbSMeR7ecaT", + "targetHandle": "z1", + "data": { + "edgeStyle": "dashed" + }, + "id": "reactflow__edge-VJSIbYJcy2MC6MOFBrqXiy2-dEFLBGpiH6nbSMeR7ecaTz1", + "selected": false, + "selectable": true, + "focusable": true + }, + { + "style": { + "strokeDasharray": "0.8 8", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2b78e4" + }, + "source": "GISOFMKvnBys0O0IMpz2J", + "sourceHandle": "y2", + "target": "NP1kjSk0ujU0Gx-ajNHlR", + "targetHandle": "z2", + "data": { + "edgeStyle": "dashed" + }, + "id": "reactflow__edge-VJSIbYJcy2MC6MOFBrqXiy2-Dvy7BnNzK55qbh_SgOk8mz2", + "selected": false, + "selectable": true, + "focusable": true + }, + { + "style": { + "strokeDasharray": "0.8 8", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2b78e4" + }, + "source": "GISOFMKvnBys0O0IMpz2J", + "sourceHandle": "y2", + "target": "Dvy7BnNzK55qbh_SgOk8m", + "targetHandle": "z1", + "data": { + "edgeStyle": "dashed" + }, + "id": "reactflow__edge-VJSIbYJcy2MC6MOFBrqXiy2-Dvy7BnNzK55qbh_SgOk8mz1", + "selected": false, + "selectable": true, + "focusable": true + }, + { + "style": { + "strokeDasharray": "0.8 8", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2b78e4" + }, + "source": "GISOFMKvnBys0O0IMpz2J", + "sourceHandle": "z2", + "target": "R9DQNc0AyAQ2HLpP4HOk6", + "targetHandle": "y1", + "data": { + "edgeStyle": "dashed" + }, + "id": "reactflow__edge-VJSIbYJcy2MC6MOFBrqXiz2-R9DQNc0AyAQ2HLpP4HOk6y1", + "selected": false, + "selectable": true, + "focusable": true + }, + { + "style": { + "strokeDasharray": "0.8 8", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2b78e4" + }, + "source": "GISOFMKvnBys0O0IMpz2J", + "sourceHandle": "z2", + "target": "fNTb9y3zs1HPYclAmu_Wv", + "targetHandle": "y1", + "data": { + "edgeStyle": "dashed" + }, + "id": "reactflow__edge-VJSIbYJcy2MC6MOFBrqXiz2-fNTb9y3zs1HPYclAmu_Wvy1", + "selected": false, + "selectable": true, + "focusable": true + }, + { + "style": { + "strokeDasharray": "0.8 8", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2b78e4" + }, + "source": "GISOFMKvnBys0O0IMpz2J", + "sourceHandle": "z2", + "target": "-DJgS6l2qngfwurExlmmT", + "targetHandle": "y1", + "data": { + "edgeStyle": "dashed" + }, + "id": "reactflow__edge-VJSIbYJcy2MC6MOFBrqXiz2--DJgS6l2qngfwurExlmmTy1", + "selected": false, + "selectable": true, + "focusable": true + }, + { + "style": { + "strokeDasharray": "0.8 8", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2b78e4" + }, + "source": "GISOFMKvnBys0O0IMpz2J", + "sourceHandle": "z2", + "target": "UT_SR7G-LYtzqooWrEtF1", + "targetHandle": "y2", + "data": { + "edgeStyle": "dashed" + }, + "id": "reactflow__edge-VJSIbYJcy2MC6MOFBrqXiz2-UT_SR7G-LYtzqooWrEtF1y2", + "selected": false, + "selectable": true, + "focusable": true + }, + { + "style": { + "strokeDasharray": "0.8 8", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2b78e4" + }, + "source": "GISOFMKvnBys0O0IMpz2J", + "sourceHandle": "z2", + "target": "bc9CL_HMT-R6nXO1eR-gP", + "targetHandle": "y1", + "data": { + "edgeStyle": "dashed" + }, + "id": "reactflow__edge-VJSIbYJcy2MC6MOFBrqXiz2-bc9CL_HMT-R6nXO1eR-gPy1", + "selected": false, + "selectable": true, + "focusable": true + }, + { + "style": { + "strokeDasharray": "0.8 8", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2b78e4" + }, + "source": "VJSIbYJcy2MC6MOFBrqXi", + "sourceHandle": "x2", + "target": "OPD4WdMO7q4gRZMcRCQh1", + "targetHandle": "w1", + "data": { + "edgeStyle": "dashed" + }, + "id": "reactflow__edge-VJSIbYJcy2MC6MOFBrqXix2-OPD4WdMO7q4gRZMcRCQh1w1", + "selected": false, + "selectable": true, + "focusable": true + }, + { + "style": { + "strokeDasharray": "0", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2b78e4" + }, + "source": "VJSIbYJcy2MC6MOFBrqXi", + "sourceHandle": "z2", + "target": "274uk28wzxn6EKWQzLpHs", + "targetHandle": "y1", + "data": { + "edgeStyle": "solid" + }, + "id": "reactflow__edge-VJSIbYJcy2MC6MOFBrqXiz2-274uk28wzxn6EKWQzLpHsy1", + "selected": false, + "selectable": true, + "focusable": true + }, + { + "style": { + "strokeDasharray": "0", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2b78e4" + }, + "source": "P_Di-XPSDITmU3xKQew8G", + "sourceHandle": "y2", + "target": "qeCMw-sJ2FR4UxvU9DDzv", + "targetHandle": "x1", + "data": { + "edgeStyle": "solid" + }, + "id": "reactflow__edge-P_Di-XPSDITmU3xKQew8Gy2-qeCMw-sJ2FR4UxvU9DDzvx1", + "selected": false, + "type": "smoothstep", + "selectable": true, + "focusable": true + }, + { + "style": { + "strokeDasharray": "0.8 8", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2b78e4" + }, + "source": "qeCMw-sJ2FR4UxvU9DDzv", + "sourceHandle": "w2", + "target": "uXd2B01GVBEQNXQE8RATT", + "targetHandle": "x1", + "data": { + "edgeStyle": "dashed" + }, + "id": "reactflow__edge-qeCMw-sJ2FR4UxvU9DDzvw2-uXd2B01GVBEQNXQE8RATTx1", + "selected": false, + "selectable": true, + "focusable": true + }, + { + "style": { + "strokeDasharray": "0", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2b78e4" + }, + "source": "GISOFMKvnBys0O0IMpz2J", + "sourceHandle": "x2", + "target": "VJSIbYJcy2MC6MOFBrqXi", + "targetHandle": "w2", + "data": { + "edgeStyle": "solid" + }, + "selected": false, + "selectable": true, + "focusable": true, + "id": "reactflow__edge-GISOFMKvnBys0O0IMpz2Jx2-VJSIbYJcy2MC6MOFBrqXiw2" + }, + { + "style": { + "strokeDasharray": "0", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2b78e4" + }, + "source": "7t6mJBsaFMWPi7o9fbhhq", + "sourceHandle": "x2", + "target": "P_Di-XPSDITmU3xKQew8G", + "targetHandle": "z1", + "data": { + "edgeStyle": "solid" + }, + "selected": false, + "selectable": true, + "focusable": true, + "id": "reactflow__edge-7t6mJBsaFMWPi7o9fbhhqx2-P_Di-XPSDITmU3xKQew8Gz1", + "type": "smoothstep" + }, + { + "style": { + "strokeDasharray": "0", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2b78e4" + }, + "source": "0-ShORjGnQlAdcwjtxdEB", + "sourceHandle": "z2", + "target": "u4nRzWQ4zhDFMOrZ2I_uJ", + "targetHandle": "y1", + "data": { + "edgeStyle": "solid" + }, + "id": "reactflow__edge-0-ShORjGnQlAdcwjtxdEBz2-u4nRzWQ4zhDFMOrZ2I_uJy1", + "selected": false, + "selectable": true, + "focusable": true + }, + { + "style": { + "strokeDasharray": "0.8 8", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2b78e4" + }, + "source": "P_Di-XPSDITmU3xKQew8G", + "sourceHandle": "x2", + "target": "AqwzR8dZKLQIoj_6KKZ3t", + "targetHandle": "w2", + "data": { + "edgeStyle": "dashed" + }, + "id": "reactflow__edge-P_Di-XPSDITmU3xKQew8Gx2-AqwzR8dZKLQIoj_6KKZ3tw2", + "selected": false, + "selectable": true, + "focusable": true + }, + { + "style": { + "strokeDasharray": "0.8 8", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2b78e4" + }, + "source": "u4nRzWQ4zhDFMOrZ2I_uJ", + "sourceHandle": "x2", + "target": "HSY5OUc_M5S6OcFXPRtkx", + "targetHandle": "w1", + "data": { + "edgeStyle": "dashed" + }, + "id": "reactflow__edge-u4nRzWQ4zhDFMOrZ2I_uJx2-HSY5OUc_M5S6OcFXPRtkxw1", + "selected": false, + "selectable": true, + "focusable": true + }, + { + "style": { + "strokeDasharray": "0.8 8", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2b78e4" + }, + "source": "1PXApuUpPmJjgi12cmWo4", + "sourceHandle": "w2", + "target": "W3VALz5evFo1qqkQbMN1R", + "targetHandle": "x1", + "data": { + "edgeStyle": "dashed" + }, + "id": "reactflow__edge-1PXApuUpPmJjgi12cmWo4w2-W3VALz5evFo1qqkQbMN1Rx1", + "selected": false, + "selectable": true, + "focusable": true + }, + { + "style": { + "strokeDasharray": "0.8 8", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2b78e4" + }, + "source": "0F0ppU_ClIUKZ23Q6BVZp", + "sourceHandle": "y2", + "target": "tsh_vbhzKz1-H9Vh69tsK", + "targetHandle": "z1", + "data": { + "edgeStyle": "dashed" + }, + "id": "reactflow__edge-0F0ppU_ClIUKZ23Q6BVZpy2-tsh_vbhzKz1-H9Vh69tsKz1", + "selected": false, + "selectable": true, + "focusable": true + }, + { + "style": { + "strokeDasharray": "0.8 8", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2b78e4" + }, + "source": "0F0ppU_ClIUKZ23Q6BVZp", + "sourceHandle": "y2", + "target": "DS6nuAUhUYcqiJDmQisKM", + "targetHandle": "z2", + "data": { + "edgeStyle": "dashed" + }, + "id": "reactflow__edge-0F0ppU_ClIUKZ23Q6BVZpy2-DS6nuAUhUYcqiJDmQisKMz2", + "selected": false, + "selectable": true, + "focusable": true + }, + { + "style": { + "strokeDasharray": "0.8 8", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2b78e4" + }, + "source": "0F0ppU_ClIUKZ23Q6BVZp", + "sourceHandle": "y2", + "target": "6cB0pvUO1-gvCtgqozP-Q", + "targetHandle": "z1", + "data": { + "edgeStyle": "dashed" + }, + "id": "reactflow__edge-0F0ppU_ClIUKZ23Q6BVZpy2-6cB0pvUO1-gvCtgqozP-Qz1", + "selected": false, + "selectable": true, + "focusable": true + }, + { + "style": { + "strokeDasharray": "0", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2b78e4" + }, + "source": "jKeTTySc4iyJY29xLqNNQ", + "sourceHandle": "y2", + "target": "WQOYjuwKIWB2meea4JnsV", + "targetHandle": "w1", + "data": { + "edgeStyle": "solid" + }, + "id": "reactflow__edge-jKeTTySc4iyJY29xLqNNQy2-WQOYjuwKIWB2meea4JnsVw1", + "selected": false, + "type": "smoothstep", + "selectable": true, + "focusable": true + }, + { + "style": { + "strokeDasharray": "0.8 8", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2b78e4" + }, + "source": "WQOYjuwKIWB2meea4JnsV", + "sourceHandle": "z2", + "target": "jPFOiwbqfaGshaGDBWb5x", + "targetHandle": "y1", + "data": { + "edgeStyle": "dashed" + }, + "id": "reactflow__edge-WQOYjuwKIWB2meea4JnsVz2-jPFOiwbqfaGshaGDBWb5xy1", + "selected": false, + "focusable": true, + "selectable": true + }, + { + "style": { + "strokeDasharray": "0.8 8", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2b78e4" + }, + "source": "WQOYjuwKIWB2meea4JnsV", + "sourceHandle": "z2", + "target": "b4he_RO17C3ScNeUd6v2b", + "targetHandle": "y1", + "data": { + "edgeStyle": "dashed" + }, + "id": "reactflow__edge-WQOYjuwKIWB2meea4JnsVz2-b4he_RO17C3ScNeUd6v2by1", + "selected": false, + "focusable": true, + "selectable": true + }, + { + "style": { + "strokeDasharray": "0.8 8", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2b78e4" + }, + "source": "WQOYjuwKIWB2meea4JnsV", + "sourceHandle": "z2", + "target": "aVclygxoA9ePU5IxaORSH", + "targetHandle": "y1", + "data": { + "edgeStyle": "dashed" + }, + "id": "reactflow__edge-WQOYjuwKIWB2meea4JnsVz2-aVclygxoA9ePU5IxaORSHy1", + "selected": false, + "focusable": true, + "selectable": true + }, + { + "style": { + "strokeDasharray": "0.8 8", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2b78e4" + }, + "source": "WQOYjuwKIWB2meea4JnsV", + "sourceHandle": "z2", + "target": "3FDwJpesfelEyJrNWtm0V", + "targetHandle": "y2", + "data": { + "edgeStyle": "dashed" + }, + "id": "reactflow__edge-WQOYjuwKIWB2meea4JnsVz2-3FDwJpesfelEyJrNWtm0Vy2", + "selected": false, + "focusable": true, + "selectable": true + }, + { + "style": { + "strokeDasharray": "0", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2b78e4" + }, + "source": "WQOYjuwKIWB2meea4JnsV", + "sourceHandle": "y2", + "target": "GV_zWF6rSWg5bqgiXhOEf", + "targetHandle": "z1", + "data": { + "edgeStyle": "solid" + }, + "id": "reactflow__edge-WQOYjuwKIWB2meea4JnsVy2-GV_zWF6rSWg5bqgiXhOEfz1", + "selected": false, + "focusable": true, + "selectable": true + } + ] } \ No newline at end of file diff --git a/src/data/roadmaps/python/python.md b/src/data/roadmaps/python/python.md index 2534d4d97..3c9e2d939 100644 --- a/src/data/roadmaps/python/python.md +++ b/src/data/roadmaps/python/python.md @@ -2,6 +2,7 @@ jsonUrl: '/jsons/roadmaps/python.json' pdfUrl: '/pdfs/roadmaps/python.pdf' order: 7 +renderer: 'editor' briefTitle: 'Python' briefDescription: 'Step by step guide to becoming a Python Developer in 2024' title: 'Python Developer' @@ -9,7 +10,7 @@ description: 'Step by step guide to becoming a Python developer in 2024' hasTopics: true dimensions: width: 992 - height: 1259.03 + height: 1630 schema: headline: 'Python Roadmap' description: 'Learn Python with this interactive step by step guide in 2024. We also have resources and short descriptions attached to the roadmap items so you can get everything you want to learn in one place.' diff --git a/src/lib/resource-progress.ts b/src/lib/resource-progress.ts index 5a452f2d1..69ffef777 100644 --- a/src/lib/resource-progress.ts +++ b/src/lib/resource-progress.ts @@ -110,6 +110,7 @@ export function clearMigratedRoadmapProgress( 'angular', 'nodejs', 'typescript', + 'python', ]; if (!migratedRoadmaps.includes(resourceId)) {