{"id":1468,"date":"2021-01-29T19:44:45","date_gmt":"2021-01-29T19:44:45","guid":{"rendered":"https:\/\/cupl.co.uk\/?page_id=1468"},"modified":"2022-06-16T11:44:30","modified_gmt":"2022-06-16T11:44:30","slug":"credits","status":"publish","type":"page","link":"https:\/\/cupl.co.uk\/index.php\/credits\/","title":{"rendered":"Credits"},"content":{"rendered":"\n<p>cupl owes its existence to friends, family and the open source community. Here is a non-exhaustive list.<\/p>\n\n\n\n<h5>Facilities<\/h5>\n\n\n\n<p><a href=\"https:\/\/oxhack.org\/\" data-type=\"URL\" data-id=\"https:\/\/oxhack.org\/\">Oxford Hackspace<\/a> at the start. <\/p>\n\n\n\n<h5>Firmware and Codec<\/h5>\n\n\n\n<ul><li><a href=\"https:\/\/openwall.info\/wiki\/people\/solar\/software\/public-domain-source-code\/md5\" data-type=\"URL\" data-id=\"https:\/\/openwall.info\/wiki\/people\/solar\/software\/public-domain-source-code\/md5\">MD5 by Martin Peslyak<\/a><\/li><li>Base64 by Apple<\/li><li><a href=\"https:\/\/cffi.readthedocs.io\/en\/latest\/\">CFFI<\/a><\/li><li><a href=\"https:\/\/pypi.org\/project\/ndeflib\/\">Ndeflib<\/a><\/li><\/ul>\n\n\n\n<h5>Hardware<\/h5>\n\n\n\n<ul><li><a href=\"https:\/\/kicad.org\/\" data-type=\"URL\" data-id=\"https:\/\/kicad.org\/\">KiCAD<\/a><\/li><li><a href=\"https:\/\/nanorfe.com\/nanovna-v2.html\">NanoVNA<\/a><\/li><\/ul>\n\n\n\n<h5>Backend<\/h5>\n\n\n\n<p>Started with a <a href=\"http:\/\/mattupstate.com\/blog\/how-i-structure-my-flask-applications\/\" data-type=\"URL\" data-id=\"http:\/\/mattupstate.com\/blog\/how-i-structure-my-flask-applications\/\">tutorial<\/a> by Matt Wright. The overall structure mimics that of his <a href=\"https:\/\/github.com\/mattupstate\/overholt\" data-type=\"URL\" data-id=\"https:\/\/github.com\/mattupstate\/overholt\">Overholt<\/a> example application.<\/p>\n\n\n\n<ul><li><a href=\"https:\/\/flask.palletsprojects.com\/en\/1.1.x\/\" data-type=\"URL\" data-id=\"https:\/\/flask.palletsprojects.com\/en\/1.1.x\/\">Flask<\/a><\/li><li><a href=\"https:\/\/www.sqlalchemy.org\/\">SQLAlchemy<\/a><\/li><li><a href=\"https:\/\/flask-sqlalchemy.palletsprojects.com\/en\/2.x\/\" data-type=\"URL\" data-id=\"https:\/\/flask-sqlalchemy.palletsprojects.com\/en\/2.x\/\">Flask-SQLAlchemy<\/a><\/li><li><a href=\"https:\/\/marshmallow.readthedocs.io\/en\/stable\/\" data-type=\"URL\" data-id=\"https:\/\/marshmallow.readthedocs.io\/en\/stable\/\">Marshmallow<\/a><\/li><li><a href=\"https:\/\/marshmallow-sqlalchemy.readthedocs.io\/en\/latest\/\" data-type=\"URL\" data-id=\"https:\/\/marshmallow-sqlalchemy.readthedocs.io\/en\/latest\/\">Marshmallow-sqlalchemy<\/a><\/li><li><a href=\"https:\/\/requests.readthedocs.io\/en\/master\/\" data-type=\"URL\" data-id=\"https:\/\/requests.readthedocs.io\/en\/master\/\">Requests<\/a><\/li><li><a href=\"https:\/\/flask-restful.readthedocs.io\/en\/latest\/\" data-type=\"URL\" data-id=\"https:\/\/flask-restful.readthedocs.io\/en\/latest\/\">Flask-RESTful<\/a><\/li><li><a href=\"https:\/\/www.postgresql.org\/\" data-type=\"URL\" data-id=\"https:\/\/www.postgresql.org\/\">Postgres<\/a><\/li><li><a href=\"https:\/\/pyjwt.readthedocs.io\/en\/stable\/\" data-type=\"URL\" data-id=\"https:\/\/pyjwt.readthedocs.io\/en\/stable\/\">PyJWT<\/a><\/li><li><a href=\"https:\/\/hashids.org\/\" data-type=\"URL\" data-id=\"https:\/\/hashids.org\/\">hashids<\/a><\/li><li><a href=\"https:\/\/flask-limiter.readthedocs.io\/en\/stable\/\" data-type=\"URL\" data-id=\"https:\/\/flask-limiter.readthedocs.io\/en\/stable\/\">Flask-Limiter<\/a><\/li><li><a href=\"https:\/\/flask-cors.readthedocs.io\/en\/latest\/\" data-type=\"URL\" data-id=\"https:\/\/flask-cors.readthedocs.io\/en\/latest\/\">Flask-CORS<\/a><\/li><\/ul>\n\n\n\n<h5>Testing<\/h5>\n\n\n\n<ul><li><a href=\"https:\/\/docs.pytest.org\/en\/stable\/\" data-type=\"URL\" data-id=\"https:\/\/docs.pytest.org\/en\/stable\/\">PyTest<\/a> <\/li><li><a href=\"https:\/\/tavern.readthedocs.io\/en\/latest\/index.html#\" data-type=\"URL\" data-id=\"https:\/\/tavern.readthedocs.io\/en\/latest\/index.html#\">Tavern<\/a><\/li><\/ul>\n\n\n\n<h5>Frontend<\/h5>\n\n\n\n<ul><li><a href=\"https:\/\/reactjs.org\/\" data-type=\"URL\" data-id=\"https:\/\/reactjs.org\/\">ReactJS<\/a><\/li><li><a href=\"https:\/\/www.chartjs.org\/\" data-type=\"URL\" data-id=\"https:\/\/www.chartjs.org\/\">chart.js<\/a><\/li><li><a href=\"https:\/\/moment.github.io\/luxon\/\" data-type=\"URL\" data-id=\"https:\/\/moment.github.io\/luxon\/\">luxon<\/a><\/li><li><a href=\"https:\/\/create-react-app.dev\/\">Create-React-App<\/a><\/li><\/ul>\n\n\n\n<h5>Documentation<\/h5>\n\n\n\n<ul><li><a href=\"https:\/\/www.sphinx-doc.org\/en\/master\/\">Sphinx<\/a><\/li><li><a href=\"https:\/\/github.com\/Redocly\/redoc\">Redoc<\/a><\/li><li><a href=\"https:\/\/readthedocs.org\/\" data-type=\"URL\" data-id=\"https:\/\/readthedocs.org\/\">Read the Docs<\/a><\/li><li><a href=\"https:\/\/www.doxygen.nl\/index.html\" data-type=\"URL\" data-id=\"https:\/\/www.doxygen.nl\/index.html\">Doxygen<\/a><\/li><li><a href=\"https:\/\/breathe.readthedocs.io\/en\/latest\/\" data-type=\"URL\" data-id=\"https:\/\/breathe.readthedocs.io\/en\/latest\/\">Breathe<\/a><\/li><\/ul>\n\n\n\n<h5>Other Tools<\/h5>\n\n\n\n<ul><li><a href=\"https:\/\/www.python.org\/\">Python<\/a><\/li><li><a href=\"https:\/\/www.docker.com\/\" data-type=\"URL\" data-id=\"https:\/\/www.docker.com\/\">Docker<\/a><\/li><li><a href=\"https:\/\/www.nginx.com\/\" data-type=\"URL\" data-id=\"https:\/\/www.nginx.com\/\">Nginx<\/a><\/li><li><a href=\"https:\/\/git-scm.com\/\" data-type=\"URL\" data-id=\"https:\/\/git-scm.com\/\">Git<\/a><\/li><li><a href=\"https:\/\/www.debian.org\/\" data-type=\"URL\" data-id=\"https:\/\/www.debian.org\/\">Debian<\/a><\/li><li><a href=\"https:\/\/www.npmjs.com\/\">NPM<\/a><\/li><li><a href=\"https:\/\/letsencrypt.org\/\" data-type=\"URL\" data-id=\"https:\/\/letsencrypt.org\/\">LetsEncrypt<\/a><\/li><\/ul>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>cupl owes its existence to friends, family and the open source community. Here is a non-exhaustive list. Facilities Oxford Hackspace at the start. Firmware and Codec MD5 by Martin Peslyak Base64 by Apple CFFI Ndeflib Hardware KiCAD NanoVNA Backend Started with a tutorial by Matt Wright. The overall structure mimics that of his Overholt example&hellip;<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"inline_featured_image":false,"spay_email":""},"featured_image_urls":{"full":"","thumbnail":"","medium":"","medium_large":"","large":"","1536x1536":"","2048x2048":""},"post_excerpt_stackable":"<p>cupl owes its existence to friends, family and the open source community. Here is a non-exhaustive list. Facilities Oxford Hackspace at the start. Firmware and Codec MD5 by Martin PeslyakBase64 by AppleCFFINdeflib Hardware KiCADNanoVNA Backend Started with a tutorial by Matt Wright. The overall structure mimics that of his Overholt example application. FlaskSQLAlchemyFlask-SQLAlchemyMarshmallowMarshmallow-sqlalchemyRequestsFlask-RESTfulPostgresPyJWThashidsFlask-LimiterFlask-CORS Testing PyTest Tavern Frontend ReactJSchart.jsluxonCreate-React-App Documentation SphinxRedocRead the DocsDoxygenBreathe Other Tools PythonDockerNginxGitDebianNPMLetsEncrypt<\/p>\n","category_list":"","author_info":{"name":"malcolmmackay","url":"https:\/\/cupl.co.uk\/index.php\/author\/malcolmmackay\/"},"comments_num":"0 comments","featured_image_urls_v2":{"full":"","thumbnail":"","medium":"","medium_large":"","large":"","1536x1536":"","2048x2048":""},"post_excerpt_stackable_v2":"<p>cupl owes its existence to friends, family and the open source community. Here is a non-exhaustive list. Facilities Oxford Hackspace at the start. Firmware and Codec MD5 by Martin PeslyakBase64 by AppleCFFINdeflib Hardware KiCADNanoVNA Backend Started with a tutorial by Matt Wright. The overall structure mimics that of his Overholt example application. FlaskSQLAlchemyFlask-SQLAlchemyMarshmallowMarshmallow-sqlalchemyRequestsFlask-RESTfulPostgresPyJWThashidsFlask-LimiterFlask-CORS Testing PyTest Tavern Frontend ReactJSchart.jsluxonCreate-React-App Documentation SphinxRedocRead the DocsDoxygenBreathe Other Tools PythonDockerNginxGitDebianNPMLetsEncrypt<\/p>\n","category_list_v2":"","author_info_v2":{"name":"malcolmmackay","url":"https:\/\/cupl.co.uk\/index.php\/author\/malcolmmackay\/"},"comments_num_v2":"0 comments","_links":{"self":[{"href":"https:\/\/cupl.co.uk\/index.php\/wp-json\/wp\/v2\/pages\/1468"}],"collection":[{"href":"https:\/\/cupl.co.uk\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/cupl.co.uk\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/cupl.co.uk\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/cupl.co.uk\/index.php\/wp-json\/wp\/v2\/comments?post=1468"}],"version-history":[{"count":11,"href":"https:\/\/cupl.co.uk\/index.php\/wp-json\/wp\/v2\/pages\/1468\/revisions"}],"predecessor-version":[{"id":1921,"href":"https:\/\/cupl.co.uk\/index.php\/wp-json\/wp\/v2\/pages\/1468\/revisions\/1921"}],"wp:attachment":[{"href":"https:\/\/cupl.co.uk\/index.php\/wp-json\/wp\/v2\/media?parent=1468"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}