From e06efeab0f75d9af5a4a89ea3e621596ef4e03c5 Mon Sep 17 00:00:00 2001 From: "Travis A. Dula" Date: Tue, 16 Mar 2021 16:42:02 -0500 Subject: [PATCH 01/17] basic Flask application --- challenges/backend/backend.py | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 challenges/backend/backend.py diff --git a/challenges/backend/backend.py b/challenges/backend/backend.py new file mode 100644 index 000000000..07b952c4d --- /dev/null +++ b/challenges/backend/backend.py @@ -0,0 +1,9 @@ +from flask import Flask +app = Flask(__name__) + +@app.route('/') +def hello_world(): + return 'Hello World!' + +if __name__ == '__main__': + app.run(debug=True) From e0caff404ab5002d752104edf66812778b93f406 Mon Sep 17 00:00:00 2001 From: "Travis A. Dula" Date: Tue, 16 Mar 2021 17:27:30 -0500 Subject: [PATCH 02/17] GET and POST working --- challenges/backend/backend.py | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/challenges/backend/backend.py b/challenges/backend/backend.py index 07b952c4d..f0025c842 100644 --- a/challenges/backend/backend.py +++ b/challenges/backend/backend.py @@ -1,9 +1,23 @@ -from flask import Flask +from flask import Flask, jsonify, request +import json app = Flask(__name__) -@app.route('/') -def hello_world(): - return 'Hello World!' +data_list = [] + +@app.route('/data', methods=['GET', 'POST', 'PATCH']) +def data_api(): + global data_list + if request.method == 'GET': + return jsonify(data_list) + elif request.method == 'POST': + in_json = request.get_json() + if len(in_json) == 500 and all(map(lambda x: type(x) == int, in_json)): + data_list = list(sorted(in_json)) + return jsonify(data_list) + else: + return 'Bad request', 400 + elif request.method == 'PATCH': + pass if __name__ == '__main__': app.run(debug=True) From dbeff71f4e98a36bb1211a30337df72b9104da5c Mon Sep 17 00:00:00 2001 From: "Travis A. Dula" Date: Tue, 16 Mar 2021 17:46:59 -0500 Subject: [PATCH 03/17] PATCH working --- challenges/backend/backend.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/challenges/backend/backend.py b/challenges/backend/backend.py index f0025c842..933046e58 100644 --- a/challenges/backend/backend.py +++ b/challenges/backend/backend.py @@ -4,6 +4,7 @@ data_list = [] +# TODO: better (more verbose) errors @app.route('/data', methods=['GET', 'POST', 'PATCH']) def data_api(): global data_list @@ -17,7 +18,12 @@ def data_api(): else: return 'Bad request', 400 elif request.method == 'PATCH': - pass + try: + data_list = list(sorted([int(request.data)] + data_list)) + return jsonify(data_list) + except BaseException as e: + print(e) + return 'Bad request', 400 if __name__ == '__main__': app.run(debug=True) From 0863e2ad83d336521e31d4819b7c5374ce029cb8 Mon Sep 17 00:00:00 2001 From: "Travis A. Dula" Date: Tue, 30 Mar 2021 23:47:59 -0500 Subject: [PATCH 04/17] added boilerplate from my personal website --- challenges/frontend/index.html | 49 ++++++++++++++++++++++++++ challenges/frontend/main.css | 5 +++ challenges/frontend/tailwind.config.js | 49 ++++++++++++++++++++++++++ 3 files changed, 103 insertions(+) create mode 100644 challenges/frontend/index.html create mode 100644 challenges/frontend/main.css create mode 100644 challenges/frontend/tailwind.config.js diff --git a/challenges/frontend/index.html b/challenges/frontend/index.html new file mode 100644 index 000000000..6bc3e998a --- /dev/null +++ b/challenges/frontend/index.html @@ -0,0 +1,49 @@ + + + + + + + + + + + + +
+
+ Travis A. Dula +
+
+

+ Education +
+ UT Dallas + 2020-2023 +
+

+

+ Project +
+ RTSC ERCOT Tracker + Python +
+

+

+ Extracurriculars +
+ Research Participant + ACM +
+
+ AV Operator + Community Bible +
+

+
+
+
+
+ + + diff --git a/challenges/frontend/main.css b/challenges/frontend/main.css new file mode 100644 index 000000000..7f393742a --- /dev/null +++ b/challenges/frontend/main.css @@ -0,0 +1,5 @@ +@tailwind base; + +@tailwind components; + +@tailwind utilities; diff --git a/challenges/frontend/tailwind.config.js b/challenges/frontend/tailwind.config.js new file mode 100644 index 000000000..99cbcaf3d --- /dev/null +++ b/challenges/frontend/tailwind.config.js @@ -0,0 +1,49 @@ +module.exports = { + purge: { + mode: 'all', + preserveHtmlElements: false, + enabled: true, + content: ['./*.html'], + }, + //purge: [],ZZ + darkMode: 'media', // or 'media' or 'class' + theme: { + colors: { + gray: { + 100: '#eceff4', + 200: '#e5e9f0', + 300: '#d8dee9', + 400: '#4c566a', + 500: '#434c5e', + 600: '#3b4252', + 700: '#2e3440', + }, + blue: { + 100: '#8fbcbb', + 200: '#88c0d0', + 300: '#81a1c1', + 400: '#5e81ac', + }, + red: '#bf616a', + orange: '#d08770', + yellow: '#ebcb8b', + green: '#a3be8c', + purple: '#b48ead', + }, + + fontFamily: { + sans: ['JetBrains Mono', 'Font Awesome'], + }, + extend: {}, + }, + variants: { + extend: {}, + }, + plugins: [ + //require('tailwindcss-theming')({ + // preset: 'nord', // Change your preset here. + //}), + require('tailwindcss'), + require('autoprefixer'), + ], +} From 8e6f2dee840d4461674ea53d572fd252e4d75a17 Mon Sep 17 00:00:00 2001 From: "Travis A. Dula" Date: Tue, 30 Mar 2021 23:57:58 -0500 Subject: [PATCH 05/17] removing my website stuff --- challenges/frontend/index.html | 32 ++++++++++++++++++++------------ 1 file changed, 20 insertions(+), 12 deletions(-) diff --git a/challenges/frontend/index.html b/challenges/frontend/index.html index 6bc3e998a..eddbf7e5b 100644 --- a/challenges/frontend/index.html +++ b/challenges/frontend/index.html @@ -7,37 +7,45 @@ + + + +
- Travis A. Dula + Big Thonk Inc.

- Education + TODO
- UT Dallas - 2020-2023 + TODO + TODO

- Project + TODO
- RTSC ERCOT Tracker - Python + TODO + TODO

- Extracurriculars + TOOD
- Research Participant - ACM + TODO + TODO
- AV Operator - Community Bible + TODO + TODO

From 461c2b56883bbcedcf36d53bc5a2a06bf828033f Mon Sep 17 00:00:00 2001 From: "Travis A. Dula" Date: Tue, 30 Mar 2021 23:58:11 -0500 Subject: [PATCH 06/17] added support for floats --- challenges/backend/backend.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/challenges/backend/backend.py b/challenges/backend/backend.py index 933046e58..f182596d1 100644 --- a/challenges/backend/backend.py +++ b/challenges/backend/backend.py @@ -12,7 +12,8 @@ def data_api(): return jsonify(data_list) elif request.method == 'POST': in_json = request.get_json() - if len(in_json) == 500 and all(map(lambda x: type(x) == int, in_json)): + is_num = lambda x: type(x) (int, float), in_json + if len(in_json) == 500 and all(map(is_num)): data_list = list(sorted(in_json)) return jsonify(data_list) else: From 06b177060c5285384c94f2537772deba41cc25ec Mon Sep 17 00:00:00 2001 From: "Travis A. Dula" Date: Wed, 31 Mar 2021 00:59:25 -0500 Subject: [PATCH 07/17] boxes looking nice --- challenges/frontend/favicon-32x32.ico | Bin 0 -> 4286 bytes challenges/frontend/index.html | 43 +- challenges/frontend/output.css | 566 ++++++++++++++++++++++++++ 3 files changed, 587 insertions(+), 22 deletions(-) create mode 100644 challenges/frontend/favicon-32x32.ico create mode 100644 challenges/frontend/output.css diff --git a/challenges/frontend/favicon-32x32.ico b/challenges/frontend/favicon-32x32.ico new file mode 100644 index 0000000000000000000000000000000000000000..a534bcfb90cab23fe8a6519a9c06a2057b26f906 GIT binary patch literal 4286 zcmcJTT})g>6vu~X+N2>V@xe5JEU?t_p*39yv=9r@1(t=FH2UC2Z4?!YNn;zTu~vmp zTdQJ#4Q)h`5Nso*v84#8&{n8G=x)*ne8C5GHI*vyV<{iq)`jE$-0j?6ZtrEcG%oow zbI;5@zcXjf%(e&-fuHzz!M{a&lo0m{A(A1OL>|QU<$f%6KBuK_s@GCK^*7{4e;jIq zUWQVa>o?SU@pZntE%m}aX#7(Kts!%>}XB=xgWX9FnGfrHkQV$XM z0cZ@Wg)(l3rJsv+Cu05AwH&j4YRe4R3rY+ehZJHMf;Q`Yhw}{n>t;M7yJL7>7CDPeX`a4h#4@wl2Ld5ufZv~x zlh`HM9$JNY7t=egn%2BNhNQz+$Ta`j9B_?#=py`^o)e6_c;5=n&r?E!`MJ}^UYnOa(vrhR{-@I<)v%aA08Ru-n=W~jjh*9fD+h-OtWen)QrXAPz9V7E9pVwuS zSI7BT%Bbz3`ySm%kDUC`l&kg2OqK7UKJA#c&+Cx60>oZl9va^9wcORj(&mW{% z=MIV~dXds9o2Ymwcpqzh81~)Nr{PZ;&O!cppCzB`&)z#hDX%mtF(f|y7OmS+OSS_i zX-oH|u+}X(*n>&tBM*`2o4(6+#Qfw>riu4LzJI4JxO^W(;$Dmn<*R6D-mvaMy%%a6 zF+_vECe*zDYaIMF;IBZd-aB{7;`5n*`WGtxE_hd%`C}%u;zkX4&E`pa$!LIbJI2W| za7C#B=486g(E2x8$^O;vYF(u5X;RKY{Nt}u(K(-LmwsdmwwKxbLBB)Vjap{$dE+w{ zw{c^lXjdH`ZB!yXH44LLKlu7y}Ob&pYvh zG9I^e7eyDoK#5Q8qx;L>$K6<=*mGLkYA%>{lN{_J9zF{`$<()w!5P|kWRNoJ`zUqS zVcOI*O!l4$;=FU4+0aihj&ibYuR=ZSql72+g8v?Ec;|~ncO%$7X6gC-jInY(SO5I* z(J`_-RvFAOYK-el%DTN;iAVpA_8IJQBet|*yiLyMJx#0pNU7ue&YzXDS9tax+I;ML zN_uWTt*iKuvKqgooKM~OUbr0cj>P)fB*&~(?jsL%a|~QhYs(I(>yzu`mcMH^H4UkI zDq}Wlu`c$h+&5-yY3F&E-y(e#d^1U0KUuD`N)6;5A1CL?^|0AkQwy(4`VY574BH^n z?`9dFX^VH+N4Pwrd5Aj-s=?lc9S6q@)!@B*jC?M~27kOKrH~8a|JzMK{u|={2*hJN zC+u9)exe0I6c8(+2uM`cN5aKSWYWzuIDam= + + + + + + + @@ -29,7 +34,7 @@ big thonk inc.
-
+ contact us.
@@ -50,8 +55,8 @@
From 1a8087a96b6cd07f496a8dd4f4bafa74c4e0ed03 Mon Sep 17 00:00:00 2001 From: "Travis A. Dula" Date: Wed, 31 Mar 2021 17:16:35 -0500 Subject: [PATCH 12/17] file added --- challenges/database/jsontosql.py | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 challenges/database/jsontosql.py diff --git a/challenges/database/jsontosql.py b/challenges/database/jsontosql.py new file mode 100644 index 000000000..3de697fc3 --- /dev/null +++ b/challenges/database/jsontosql.py @@ -0,0 +1,7 @@ +import json + +def main(): + pass + +if __name__ == '__main__': + main() From e2f2721a3b299bfabaaf8bbe58d2621827bc5b65 Mon Sep 17 00:00:00 2001 From: "Travis A. Dula" Date: Thu, 1 Apr 2021 15:40:40 -0500 Subject: [PATCH 13/17] frontend README --- challenges/frontend/README.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 challenges/frontend/README.md diff --git a/challenges/frontend/README.md b/challenges/frontend/README.md new file mode 100644 index 000000000..1b73305db --- /dev/null +++ b/challenges/frontend/README.md @@ -0,0 +1,5 @@ +# How to run +```sh +yarn run http-server +``` + From 67037c8139fc645c7359543104e23fc10fad4c82 Mon Sep 17 00:00:00 2001 From: "Travis A. Dula" Date: Fri, 2 Apr 2021 01:52:00 -0500 Subject: [PATCH 14/17] database visualization --- challenges/database/README.md | 3 +++ challenges/database/relational_db.png | Bin 0 -> 48982 bytes 2 files changed, 3 insertions(+) create mode 100644 challenges/database/README.md create mode 100644 challenges/database/relational_db.png diff --git a/challenges/database/README.md b/challenges/database/README.md new file mode 100644 index 000000000..f7ee99cbd --- /dev/null +++ b/challenges/database/README.md @@ -0,0 +1,3 @@ +# Why? +I have very little prior database knowledge, so this is my best estimate after a short time of learning. +Thinking of it in terms of objects, the only two "objects" I could think of were `Customer` and `Order`, so I split the database into tables for each. diff --git a/challenges/database/relational_db.png b/challenges/database/relational_db.png new file mode 100644 index 0000000000000000000000000000000000000000..d010c2bf83482cb39f19b3c18343bf24a6551757 GIT binary patch literal 48982 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¥S-UfRGg`aiLjMbA!GE|!IQXFFUl0P>7 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 Date: Fri, 2 Apr 2021 02:38:05 -0500 Subject: [PATCH 15/17] input and generator --- challenges/database/generate_input.py | 14 ++++++++++++++ challenges/database/in.json | 12 ++++++++++++ 2 files changed, 26 insertions(+) create mode 100644 challenges/database/generate_input.py create mode 100644 challenges/database/in.json diff --git a/challenges/database/generate_input.py b/challenges/database/generate_input.py new file mode 100644 index 000000000..fe6f43a01 --- /dev/null +++ b/challenges/database/generate_input.py @@ -0,0 +1,14 @@ +import json +with open('in.json', 'w') as f: + f.write(json.dumps({ + 1234: { + 'name': 'Joe Smith', + 'cellPhone': '405.867.5309', + 'workPhone': '123.123.1234', + 'email': 'joe_s@gmail.com', + 'address': '123 Vic Way, Dallas TX 75001', + 'basicWidgetOrder': 37, + 'advancedWidgetOrder': 12, + 'protectionPlan': True + } + })) diff --git a/challenges/database/in.json b/challenges/database/in.json new file mode 100644 index 000000000..5f6caf1d9 --- /dev/null +++ b/challenges/database/in.json @@ -0,0 +1,12 @@ +{ + "1234": { + "name": "Joe Smith", + "cellPhone": "405.867.5309", + "workPhone": "123.123.1234", + "email": "joe_s@gmail.com", + "address": "123 Vic Way, Dallas TX 75001", + "basicWidgetOrder": 37, + "advancedWidgetOrder": 12, + "protectionPlan": true + } +} From 2232cda148e52b08759699d42f21110ed77b18d5 Mon Sep 17 00:00:00 2001 From: "Travis A. Dula" Date: Fri, 2 Apr 2021 02:38:20 -0500 Subject: [PATCH 16/17] actual db command maker --- challenges/database/jsontosql.py | 33 +++++++++++++++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) diff --git a/challenges/database/jsontosql.py b/challenges/database/jsontosql.py index 3de697fc3..94196bc28 100644 --- a/challenges/database/jsontosql.py +++ b/challenges/database/jsontosql.py @@ -1,7 +1,38 @@ import json +#import sqlite3 def main(): - pass + # potential improvements include using command line arguments + # (or another method) to pick the input file + input_file = 'in.json' + with open(input_file, 'r') as f: + old_database = json.loads(f.read()) + #new_database = sqlite3.connect('output.db') + create='''CREATE TABLE Customer ( + customerID int, + name varchar(255), + cellPhone varchar(255), + workPhone varchar(255), + email varchar(255), + address varchar(255) +);''' + #new_database.execute(create) + print(create) + create2='''CREATE TABLE Order ( + customerID int, + basicWidgetOrder int, + advancedWidgetOrder int, + protectionPlan int, +);''' + print(create2) + for obj, values in old_database.items(): + print(f"\ +INSERT INTO Customer VALUES({obj}, \'{values['name']}\',\ +\'{values['cellPhone']}\', \'{values['workPhone']}\',\ +\'{values['email']}\', \'{values['address']}\');") + print(f"\ +INSERT INTO Order VALUES({obj}, {values['basicWidgetOrder']}, \ +{values['advancedWidgetOrder']}, {values['protectionPlan']});") if __name__ == '__main__': main() From e070fa6b9bcba462a0b5857733e04d71426482f2 Mon Sep 17 00:00:00 2001 From: "Travis A. Dula" Date: Tue, 6 Apr 2021 15:58:06 -0500 Subject: [PATCH 17/17] fixed typo --- challenges/backend/backend.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/challenges/backend/backend.py b/challenges/backend/backend.py index f182596d1..c3ebb8a4b 100644 --- a/challenges/backend/backend.py +++ b/challenges/backend/backend.py @@ -12,8 +12,8 @@ def data_api(): return jsonify(data_list) elif request.method == 'POST': in_json = request.get_json() - is_num = lambda x: type(x) (int, float), in_json - if len(in_json) == 500 and all(map(is_num)): + is_num = lambda x: type(x) (int, float) + if len(in_json) == 500 and all(map(is_num, in_json)): data_list = list(sorted(in_json)) return jsonify(data_list) else: