@turnipxenon/pineapple 2.4.25 → 2.4.27

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (53) hide show
  1. package/.idea/workspace.xml +53 -47
  2. package/.svelte-kit/__package__/components/overrideable_meta/OverridableMeta.svelte +51 -0
  3. package/.svelte-kit/__package__/components/overrideable_meta/OverridableMeta.svelte.d.ts +20 -0
  4. package/.svelte-kit/__package__/components/overrideable_meta/OverridableMetaProps.d.ts +7 -0
  5. package/.svelte-kit/__package__/components/overrideable_meta/OverridableMetaProps.js +1 -0
  6. package/.svelte-kit/__package__/components/overrideable_meta/index.d.ts +2 -0
  7. package/.svelte-kit/__package__/components/overrideable_meta/index.js +3 -0
  8. package/.svelte-kit/__package__/index.d.ts +1 -2
  9. package/.svelte-kit/__package__/index.js +2 -2
  10. package/.svelte-kit/__package__/template/Seaweed/GameSection.svelte +184 -184
  11. package/.svelte-kit/__package__/template/Seaweed/ProjectSection.svelte +268 -268
  12. package/.svelte-kit/__package__/template/Seaweed/SeaweedTemplate.svelte +33 -32
  13. package/.svelte-kit/__package__/template/Seaweed/seaweed.postcss +133 -133
  14. package/.svelte-kit/ambient.d.ts +0 -2
  15. package/.svelte-kit/generated/client/nodes/5.js +2 -0
  16. package/.svelte-kit/generated/client/nodes/6.js +2 -0
  17. package/.svelte-kit/generated/client/nodes/7.js +2 -0
  18. package/.svelte-kit/generated/client/nodes/8.js +1 -1
  19. package/.svelte-kit/generated/server/internal.js +1 -1
  20. package/.svelte-kit/types/route_meta_data.json +7 -2
  21. package/.svelte-kit/types/src/routes/(pineapple)/pineapple/$types.d.ts +3 -1
  22. package/.svelte-kit/types/src/routes/(seaweed)/portfolio/$types.d.ts +4 -2
  23. package/.svelte-kit/types/src/routes/(seaweed)/portfolio/actual/$types.d.ts +3 -1
  24. package/dist/components/overrideable_meta/OverridableMeta.svelte +51 -0
  25. package/dist/components/overrideable_meta/OverridableMeta.svelte.d.ts +20 -0
  26. package/dist/components/overrideable_meta/OverridableMetaProps.d.ts +7 -0
  27. package/dist/components/overrideable_meta/OverridableMetaProps.js +1 -0
  28. package/dist/components/overrideable_meta/index.d.ts +2 -0
  29. package/dist/components/overrideable_meta/index.js +3 -0
  30. package/dist/index.d.ts +1 -2
  31. package/dist/index.js +2 -2
  32. package/dist/template/Seaweed/GameSection.svelte +184 -184
  33. package/dist/template/Seaweed/ProjectSection.svelte +268 -268
  34. package/dist/template/Seaweed/SeaweedTemplate.svelte +33 -32
  35. package/dist/template/Seaweed/seaweed.postcss +133 -133
  36. package/package.json +1 -1
  37. package/src/lib/components/overrideable_meta/OverridableMeta.svelte +56 -0
  38. package/src/lib/components/overrideable_meta/OverridableMetaProps.ts +7 -0
  39. package/src/lib/components/overrideable_meta/index.ts +4 -0
  40. package/src/lib/index.ts +3 -2
  41. package/src/lib/template/Seaweed/GameSection.svelte +213 -213
  42. package/src/lib/template/Seaweed/ProjectSection.svelte +298 -298
  43. package/src/lib/template/Seaweed/SeaweedTemplate.svelte +36 -35
  44. package/src/lib/template/Seaweed/seaweed.postcss +133 -133
  45. package/src/lib/util/util.ts +38 -38
  46. package/src/routes/(pineapple)/+layout.svelte +0 -15
  47. package/src/routes/(pineapple)/+page.svelte +0 -12
  48. package/src/routes/(pineapple)/pineapple/+page.svelte +0 -10
  49. package/src/routes/(pineapple)/pineapple/+page.ts +8 -0
  50. package/src/routes/(seaweed)/portfolio/+page.svelte +0 -11
  51. package/src/routes/(seaweed)/portfolio/+page.ts +8 -0
  52. package/src/routes/(seaweed)/portfolio/actual/+page.ts +8 -0
  53. package/src/routes/+layout.svelte +5 -2
@@ -1,298 +1,298 @@
1
- <script lang="ts">
2
-
3
- export let email = "turnipxenon@gmail.com";
4
-
5
- import "./seaweed.postcss";
6
- import { getModalStore } from "@skeletonlabs/skeleton";
7
- import LinkIcon from "$pkg/assets/icons/link-icon.svg";
8
- import GithubIcon from "$pkg/assets/icons/github-mark.svg";
9
- import WeaverFootage from "$pkg/assets/others/weaver-footage.gif";
10
- import WindowSetGraph from "$pkg/assets/others/window-set.png";
11
- import ThisWebsiteFootage from "$pkg/assets/others/seaweed-showcase.mp4";
12
- import Card from "$pkg/components/Card.svelte";
13
- import Chip from "$pkg/components/Chip.svelte";
14
- import type { ModalSettings } from "@skeletonlabs/skeleton";
15
-
16
- const modalStore = getModalStore();
17
- const cmput401Info: ModalSettings = {
18
- type: "confirm",
19
- title: "Information",
20
- body: "As a full disclosure, this link will lead you to <a href='https://cmput401.ca/projects/e5b13586-09c7-4ddd-baf6-fdb078d23398' target='_blank'>" +
21
- "https://cmput401.ca/projects/e5b13586-09c7-4ddd-baf6-fdb078d23398</a>. " +
22
- "We currently don't have any tests yet ensuring that the link is correct. " +
23
- `Click confirm to go to the site. Please report any bugs at <a href='mailto:${email}' target='_blank'>` +
24
- `${email}</a>.`,
25
- response: (r: boolean) => {
26
- if (r) {
27
- window.open("https://cmput401.ca/projects/e5b13586-09c7-4ddd-baf6-fdb078d23398");
28
- }
29
- }
30
- };
31
- </script>
32
-
33
- <Card>
34
- <section class="section-card title-card" slot="content">
35
- <h1 class="text-center">Projects</h1>
36
- </section>
37
- </Card>
38
-
39
- <section class="projects-section">
40
- <Card>
41
- <section class="project-card" slot="content">
42
- <iframe id="migrante-alberta"
43
- width="560" height="315" src="https://www.youtube.com/embed/ZemWwf8jh8E?si=RZwSfYHI-0Ael-RE"
44
- title="YouTube video player" style="border: none"
45
- allowfullscreen></iframe>
46
- <div class="project-card-body">
47
- <!-- todo: add regression to see if page is gone: https://cmput401.ca/api/projects/e5b13586-09c7-4ddd-baf6-fdb078d23398 -->
48
-
49
- <h2>Migrante Alberta</h2>
50
- <p>We developed a mobile-first cross-platform application to be used by the Canadian-based
51
- Filipino non-profit advocacy group, Migrante Alberta, to help new immigrants navigate
52
- through local services and events
53
- </p>
54
- <p>
55
- <Chip>Flutter</Chip>
56
- <Chip>Dart</Chip>
57
- <Chip>Python</Chip>
58
- <Chip>Django</Chip>
59
- <Chip>Heroku</Chip>
60
- <Chip>Android</Chip>
61
- <Chip>Postgresql</Chip>
62
- </p>
63
- <!-- todo: add a way to ask what did i do via chat? -->
64
- <!-- <p>-->
65
- <!-- I helped make reusable Flutter components for the application’s frontend, Dart utility files to-->
66
- <!-- help ease writing and debugging calls to the backend, and a troubleshooting documentation-->
67
- <!-- for handling common issues-->
68
- <!-- </p>-->
69
- <!-- <p>-->
70
- <!-- Added Python unit tests to the backend endpoints, refactored the backend’s authentication-->
71
- <!-- system from plain text to using Django’s authentication system, and wrote a script to ease-->
72
- <!-- deployment to Heroku-->
73
- <!-- </p>-->
74
-
75
- <!-- todo: add tags with Dart, Flutter, Python, Django, Heroku, Android -->
76
-
77
- <section class="game-link-section">
78
- <button type="button" class="btn variant-filled-primary turnip-button"
79
- title="https://selk.io/birb-project/trunk/"
80
- on:click={() => modalStore.trigger(cmput401Info)}>
81
- <img src={LinkIcon} class="long-btn-image" alt="itch icon">
82
- <span>cmput401.ca</span>
83
- </button>
84
- </section>
85
-
86
- </div>
87
- </section>
88
- </Card>
89
-
90
- <Card>
91
- <section class="project-card" slot="content">
92
- <div class="project-card-body">
93
-
94
- <h2>Decentralized social media</h2>
95
-
96
- <p>We made a full stack decentralized social media app made with <span class="qt-react">React</span> +
97
- <span class="qt-js">Javascript</span> for the client code, <span class="qt-django">Django</span> + <span
98
- class="qt-python">Python</span> for the backend code, and <span class="qt-heroku">Heroku</span> for
99
- deployment. This project was made
100
- for
101
- our Web Applications and Architecture class.</p>
102
- <p>The application can connect with three other decentralized social media app in the same class:
103
- </p>
104
- <ul>
105
- <li>
106
- <a href="https://github.com/hgshah/cmput404-project/blob/main/docs/testing_other_teams.md#team-14"
107
- target="_blank">Also
108
- a social media with the same Django + Python backend server where they act on behalf of
109
- our users interacting with theirs</a></li>
110
- <li>
111
- <a href="https://github.com/hgshah/cmput404-project/blob/main/docs/testing_other_teams.md#team-7"
112
- target="_blank">A
113
- social media that uses Fast API + Python for their backend server</a></li>
114
- <li>
115
- <a href="https://github.com/hgshah/cmput404-project/blob/main/docs/testing_other_teams.md#team-12"
116
- target="_blank">Another
117
- social media that has Django + Python for their backend but we have to act on behalf of
118
- our
119
- users interacting with their users</a>
120
- </li>
121
- </ul>
122
-
123
- <!-- todo: add tags with Javascript, React, Python, Django, Heroku -->
124
-
125
- <section class="game-link-section">
126
- <button type="button" class="game-button turnip-button"
127
- role="link"
128
- title="https://github.com/hgshah/cmput404-project"
129
- on:click={() => window.open("https://github.com/hgshah/cmput404-project")}>
130
- <img src={GithubIcon} alt="github icon">
131
- </button>
132
- </section>
133
- </div>
134
- </section>
135
- </Card>
136
-
137
- <Card>
138
- <section class="project-card" slot="content">
139
- <img alt="Footage of a visual novel-like dynamic dialog interaction happening on the same page we are on"
140
- src={WeaverFootage} />
141
-
142
- <div class="project-card-body">
143
- <h2>Customized Yarnspinner interpreter and dialog runner</h2>
144
-
145
- A custom dialog interpreter, written in <span class="qt-ts">Typescript</span>, that tokenizes then
146
- transpiles custom Yarnspinner dialog into a <span class="qt-ts">Typescript</span> file. The said files can
147
- be used on a corresponding runner or library, also implemented alongside it, allowing the ability to play a
148
- custom-flavor of YarnSpinner dialogs on <span class="qt-svelte">Svelte</span>.
149
-
150
- <section class="game-link-section">
151
- <button type="button" class="game-button turnip-button"
152
- role="link"
153
- title="https://github.com/TurnipXenon/pineapple/blob/main/docs/PineappleFiberSpec.md"
154
- on:click={() => window.open("https://github.com/TurnipXenon/pineapple/blob/main/docs/PineappleFiberSpec.md")}>
155
- <img src={GithubIcon} alt="github icon">
156
- </button>
157
- </section>
158
- </div>
159
- </section>
160
- </Card>
161
-
162
- <Card>
163
- <section class="project-card" slot="content">
164
- <div class="project-card-body">
165
- <h2>Full-stack <span class="qt-c">C</span> app</h2>
166
-
167
- <p>
168
- A terminal-based app consisting of a server observing several terminal apps all concurrently
169
- sending updates to the server, which then broadcasts these information concurrently to all the
170
- other terminal apps connected.
171
- </p>
172
- <p>
173
- The project involves <span class="qt-foundation">multiprocessing</span> programming featuring pthreads and
174
- mutexes, and <span class="qt-foundation">networking</span> via sockets.
175
- </p>
176
-
177
- <section class="game-link-section">
178
- <button type="button" class="game-button turnip-button"
179
- role="link"
180
- title="https://github.com/TurnipXenon/C380-1Code/blob/main/Assignment02/DESIGN.md"
181
- on:click={() => window.open("https://github.com/TurnipXenon/C380-1Code/blob/main/Assignment02/DESIGN.md")}>
182
- <img src={GithubIcon} class="long-btn-image" alt="github icon">
183
- </button>
184
- </section>
185
- </div>
186
- </section>
187
- </Card>
188
-
189
- <Card>
190
- <section class="project-card" slot="content">
191
- <img
192
- alt="A graph that visualizes the number of memory pages made by Quicksort cached within the window set as
193
- time goes by. The trend appears to look like a damping harmonic motion that does not go below the zero line. More
194
- details include the data size being 200000 entries, each data point skips 1060174 data points, with a
195
- page size of 4096 bytes, and window size of 100000 bytes."
196
- src={WindowSetGraph} />
197
- <div class="project-card-body">
198
- <h2>Working set simulation</h2>
199
-
200
- <p>
201
- A <span class="qt-c">C</span> program that simulates the working set model based on the output of memory
202
- addresses
203
- <span class="qt-valgrind">valgrind</span> detects as being accessed by a program being ran. It's
204
- implemented using a nested hashmap <span class="qt-foundation">data structure</span> implemented from
205
- scratch. The working set is the collection of memory pages referenced by a program within a certain time
206
- frame. It comes with a report analyzing and benchmarking how memory allocation, between sorting <span
207
- class="qt-foundation">algorithms</span> heapsort, quicksort, and radixsort, is affected by the window set
208
- size, page size, and their input size.
209
- </p>
210
-
211
- <section class="game-link-section">
212
- <button type="button" class="game-button turnip-button"
213
- role="link"
214
- title="https://github.com/TurnipXenon/C380-1Code/blob/main/Assignment03/REPORT.pdf"
215
- on:click={() => window.open("https://github.com/TurnipXenon/C380-1Code/blob/main/Assignment03/REPORT.pdf")}>
216
- <img src={GithubIcon} class="long-btn-image" alt="github icon">
217
- <span>Benchmark report</span>
218
- </button>
219
- <button type="button" class="game-button turnip-button"
220
- role="link"
221
- title="https://github.com/TurnipXenon/C380-1Code/blob/main/Assignment03/DESIGN.md"
222
- on:click={() => window.open("https://github.com/TurnipXenon/C380-1Code/blob/main/Assignment03/DESIGN.md")}>
223
- <img src={GithubIcon} class="long-btn-image" alt="github icon">
224
- <span>Design</span>
225
- </button>
226
- </section>
227
- </div>
228
- </section>
229
- </Card>
230
-
231
- <Card>
232
- <section class="project-card" slot="content">
233
-
234
- <video playsinline autoplay muted loop preload="none">
235
- <source src={ThisWebsiteFootage} type="video/mp4">
236
- video unavailable. original video contains clips of this website being resized and light-dark mode being
237
- toggled.
238
- </video>
239
- <div class="project-card-body">
240
- <h2>This webpage!</h2>
241
-
242
- <p>
243
- The webpage is made of two parts. The webpage that has the content for everything here, I've
244
- lovingly called Seaweed. I kept seaweed as a private package. On the other hand, the base package which I
245
- want to use for all spin offs of my websites is called Pineapple and have kept that codebase public.
246
- </p>
247
-
248
- <p>
249
- <Chip>Svelte</Chip>
250
- <Chip>Skeleton (Svelte UI library)</Chip>
251
- <Chip>Typescript</Chip>
252
- <Chip>Vercel</Chip>
253
- <Chip>YarnSpinner</Chip>
254
- </p>
255
-
256
- <section class="game-link-section">
257
- <button type="button" class="btn variant-filled-primary turnip-button"
258
- role="link"
259
- title="https://github.com/TurnipXenon/pineapple"
260
- on:click={() => window.open("https://github.com/TurnipXenon/pineapple")}>
261
- <img src={GithubIcon} class="long-btn-image" alt="github icon">
262
- </button>
263
- </section>
264
- </div>
265
- </section>
266
- </Card>
267
-
268
- <Card>
269
- <section class="project-card" slot="content">
270
- <div class="project-card-body">
271
- <h2>Mock Uber App</h2>
272
-
273
- <p>A course project app meant to emulate how Uber works by playing with <span
274
- class="qt-google">Google Maps API</span>.
275
- </p>
276
- <p>
277
- I implemented all interfaces related to the NoSQL cloud database <span
278
- class="qt-firebase qt-google qt-infra">Firebase</span>, making writing code easier for other programmers
279
- (<span
280
- class="qt-android">Android</span> / <span class="qt-java">Java</span>). I also wrote documentation to said
281
- code and added instrumented tests that are tested by the continuous integration tool <span
282
- class="qt-infra">Travis CI</span>, ensuring that our code is tested
283
- </p>
284
-
285
- <section class="game-link-section">
286
- <!-- todo: mock uber app find link -->
287
- <button type="button" class="game-button turnip-button"
288
- role="link"
289
- title="https://github.com/CMPUT301W20T10/UberApp"
290
- on:click={() => window.open("https://github.com/CMPUT301W20T10/UberApp")}>
291
- <img src={GithubIcon} class="long-btn-image" alt="github icon">
292
- </button>
293
- </section>
294
- </div>
295
- </section>
296
- </Card>
297
-
298
- </section>
1
+ <script lang="ts">
2
+
3
+ export let email = "turnipxenon@gmail.com";
4
+
5
+ import "./seaweed.postcss";
6
+ import { getModalStore } from "@skeletonlabs/skeleton";
7
+ import LinkIcon from "$pkg/assets/icons/link-icon.svg";
8
+ import GithubIcon from "$pkg/assets/icons/github-mark.svg";
9
+ import WeaverFootage from "$pkg/assets/others/weaver-footage.gif";
10
+ import WindowSetGraph from "$pkg/assets/others/window-set.png";
11
+ import ThisWebsiteFootage from "$pkg/assets/others/seaweed-showcase.mp4";
12
+ import Card from "$pkg/components/Card.svelte";
13
+ import Chip from "$pkg/components/Chip.svelte";
14
+ import type { ModalSettings } from "@skeletonlabs/skeleton";
15
+
16
+ const modalStore = getModalStore();
17
+ const cmput401Info: ModalSettings = {
18
+ type: "confirm",
19
+ title: "Information",
20
+ body: "As a full disclosure, this link will lead you to <a href='https://cmput401.ca/projects/e5b13586-09c7-4ddd-baf6-fdb078d23398' target='_blank'>" +
21
+ "https://cmput401.ca/projects/e5b13586-09c7-4ddd-baf6-fdb078d23398</a>. " +
22
+ "We currently don't have any tests yet ensuring that the link is correct. " +
23
+ `Click confirm to go to the site. Please report any bugs at <a href='mailto:${email}' target='_blank'>` +
24
+ `${email}</a>.`,
25
+ response: (r: boolean) => {
26
+ if (r) {
27
+ window.open("https://cmput401.ca/projects/e5b13586-09c7-4ddd-baf6-fdb078d23398");
28
+ }
29
+ }
30
+ };
31
+ </script>
32
+
33
+ <Card>
34
+ <section class="section-card title-card" slot="content">
35
+ <h1 class="text-center">Projects</h1>
36
+ </section>
37
+ </Card>
38
+
39
+ <section class="projects-section">
40
+ <Card>
41
+ <section class="project-card" slot="content">
42
+ <iframe id="migrante-alberta"
43
+ width="560" height="315" src="https://www.youtube.com/embed/ZemWwf8jh8E?si=RZwSfYHI-0Ael-RE"
44
+ title="YouTube video player" style="border: none"
45
+ allowfullscreen></iframe>
46
+ <div class="project-card-body">
47
+ <!-- todo: add regression to see if page is gone: https://cmput401.ca/api/projects/e5b13586-09c7-4ddd-baf6-fdb078d23398 -->
48
+
49
+ <h2>Migrante Alberta</h2>
50
+ <p>We developed a mobile-first cross-platform application to be used by the Canadian-based
51
+ Filipino non-profit advocacy group, Migrante Alberta, to help new immigrants navigate
52
+ through local services and events
53
+ </p>
54
+ <p>
55
+ <Chip>Flutter</Chip>
56
+ <Chip>Dart</Chip>
57
+ <Chip>Python</Chip>
58
+ <Chip>Django</Chip>
59
+ <Chip>Heroku</Chip>
60
+ <Chip>Android</Chip>
61
+ <Chip>Postgresql</Chip>
62
+ </p>
63
+ <!-- todo: add a way to ask what did i do via chat? -->
64
+ <!-- <p>-->
65
+ <!-- I helped make reusable Flutter components for the application’s frontend, Dart utility files to-->
66
+ <!-- help ease writing and debugging calls to the backend, and a troubleshooting documentation-->
67
+ <!-- for handling common issues-->
68
+ <!-- </p>-->
69
+ <!-- <p>-->
70
+ <!-- Added Python unit tests to the backend endpoints, refactored the backend’s authentication-->
71
+ <!-- system from plain text to using Django’s authentication system, and wrote a script to ease-->
72
+ <!-- deployment to Heroku-->
73
+ <!-- </p>-->
74
+
75
+ <!-- todo: add tags with Dart, Flutter, Python, Django, Heroku, Android -->
76
+
77
+ <section class="game-link-section">
78
+ <button type="button" class="btn variant-filled-primary turnip-button"
79
+ title="https://selk.io/birb-project/trunk/"
80
+ on:click={() => modalStore.trigger(cmput401Info)}>
81
+ <img src={LinkIcon} class="long-btn-image" alt="itch icon">
82
+ <span>cmput401.ca</span>
83
+ </button>
84
+ </section>
85
+
86
+ </div>
87
+ </section>
88
+ </Card>
89
+
90
+ <Card>
91
+ <section class="project-card" slot="content">
92
+ <div class="project-card-body">
93
+
94
+ <h2>Decentralized social media</h2>
95
+
96
+ <p>We made a full stack decentralized social media app made with <span class="qt-react">React</span> +
97
+ <span class="qt-js">Javascript</span> for the client code, <span class="qt-django">Django</span> + <span
98
+ class="qt-python">Python</span> for the backend code, and <span class="qt-heroku">Heroku</span> for
99
+ deployment. This project was made
100
+ for
101
+ our Web Applications and Architecture class.</p>
102
+ <p>The application can connect with three other decentralized social media app in the same class:
103
+ </p>
104
+ <ul>
105
+ <li>
106
+ <a href="https://github.com/hgshah/cmput404-project/blob/main/docs/testing_other_teams.md#team-14"
107
+ target="_blank">Also
108
+ a social media with the same Django + Python backend server where they act on behalf of
109
+ our users interacting with theirs</a></li>
110
+ <li>
111
+ <a href="https://github.com/hgshah/cmput404-project/blob/main/docs/testing_other_teams.md#team-7"
112
+ target="_blank">A
113
+ social media that uses Fast API + Python for their backend server</a></li>
114
+ <li>
115
+ <a href="https://github.com/hgshah/cmput404-project/blob/main/docs/testing_other_teams.md#team-12"
116
+ target="_blank">Another
117
+ social media that has Django + Python for their backend but we have to act on behalf of
118
+ our
119
+ users interacting with their users</a>
120
+ </li>
121
+ </ul>
122
+
123
+ <!-- todo: add tags with Javascript, React, Python, Django, Heroku -->
124
+
125
+ <section class="game-link-section">
126
+ <button type="button" class="game-button turnip-button"
127
+ role="link"
128
+ title="https://github.com/hgshah/cmput404-project"
129
+ on:click={() => window.open("https://github.com/hgshah/cmput404-project")}>
130
+ <img src={GithubIcon} alt="github icon">
131
+ </button>
132
+ </section>
133
+ </div>
134
+ </section>
135
+ </Card>
136
+
137
+ <Card>
138
+ <section class="project-card" slot="content">
139
+ <img alt="Footage of a visual novel-like dynamic dialog interaction happening on the same page we are on"
140
+ src={WeaverFootage} />
141
+
142
+ <div class="project-card-body">
143
+ <h2>Customized Yarnspinner interpreter and dialog runner</h2>
144
+
145
+ A custom dialog interpreter, written in <span class="qt-ts">Typescript</span>, that tokenizes then
146
+ transpiles custom Yarnspinner dialog into a <span class="qt-ts">Typescript</span> file. The said files can
147
+ be used on a corresponding runner or library, also implemented alongside it, allowing the ability to play a
148
+ custom-flavor of YarnSpinner dialogs on <span class="qt-svelte">Svelte</span>.
149
+
150
+ <section class="game-link-section">
151
+ <button type="button" class="game-button turnip-button"
152
+ role="link"
153
+ title="https://github.com/TurnipXenon/pineapple/blob/main/docs/PineappleFiberSpec.md"
154
+ on:click={() => window.open("https://github.com/TurnipXenon/pineapple/blob/main/docs/PineappleFiberSpec.md")}>
155
+ <img src={GithubIcon} alt="github icon">
156
+ </button>
157
+ </section>
158
+ </div>
159
+ </section>
160
+ </Card>
161
+
162
+ <Card>
163
+ <section class="project-card" slot="content">
164
+ <div class="project-card-body">
165
+ <h2>Full-stack <span class="qt-c">C</span> app</h2>
166
+
167
+ <p>
168
+ A terminal-based app consisting of a server observing several terminal apps all concurrently
169
+ sending updates to the server, which then broadcasts these information concurrently to all the
170
+ other terminal apps connected.
171
+ </p>
172
+ <p>
173
+ The project involves <span class="qt-foundation">multiprocessing</span> programming featuring pthreads and
174
+ mutexes, and <span class="qt-foundation">networking</span> via sockets.
175
+ </p>
176
+
177
+ <section class="game-link-section">
178
+ <button type="button" class="game-button turnip-button"
179
+ role="link"
180
+ title="https://github.com/TurnipXenon/C380-1Code/blob/main/Assignment02/DESIGN.md"
181
+ on:click={() => window.open("https://github.com/TurnipXenon/C380-1Code/blob/main/Assignment02/DESIGN.md")}>
182
+ <img src={GithubIcon} class="long-btn-image" alt="github icon">
183
+ </button>
184
+ </section>
185
+ </div>
186
+ </section>
187
+ </Card>
188
+
189
+ <Card>
190
+ <section class="project-card" slot="content">
191
+ <img
192
+ alt="A graph that visualizes the number of memory pages made by Quicksort cached within the window set as
193
+ time goes by. The trend appears to look like a damping harmonic motion that does not go below the zero line. More
194
+ details include the data size being 200000 entries, each data point skips 1060174 data points, with a
195
+ page size of 4096 bytes, and window size of 100000 bytes."
196
+ src={WindowSetGraph} />
197
+ <div class="project-card-body">
198
+ <h2>Working set simulation</h2>
199
+
200
+ <p>
201
+ A <span class="qt-c">C</span> program that simulates the working set model based on the output of memory
202
+ addresses
203
+ <span class="qt-valgrind">valgrind</span> detects as being accessed by a program being ran. It's
204
+ implemented using a nested hashmap <span class="qt-foundation">data structure</span> implemented from
205
+ scratch. The working set is the collection of memory pages referenced by a program within a certain time
206
+ frame. It comes with a report analyzing and benchmarking how memory allocation, between sorting <span
207
+ class="qt-foundation">algorithms</span> heapsort, quicksort, and radixsort, is affected by the window set
208
+ size, page size, and their input size.
209
+ </p>
210
+
211
+ <section class="game-link-section">
212
+ <button type="button" class="game-button turnip-button"
213
+ role="link"
214
+ title="https://github.com/TurnipXenon/C380-1Code/blob/main/Assignment03/REPORT.pdf"
215
+ on:click={() => window.open("https://github.com/TurnipXenon/C380-1Code/blob/main/Assignment03/REPORT.pdf")}>
216
+ <img src={GithubIcon} class="long-btn-image" alt="github icon">
217
+ <span>Benchmark report</span>
218
+ </button>
219
+ <button type="button" class="game-button turnip-button"
220
+ role="link"
221
+ title="https://github.com/TurnipXenon/C380-1Code/blob/main/Assignment03/DESIGN.md"
222
+ on:click={() => window.open("https://github.com/TurnipXenon/C380-1Code/blob/main/Assignment03/DESIGN.md")}>
223
+ <img src={GithubIcon} class="long-btn-image" alt="github icon">
224
+ <span>Design</span>
225
+ </button>
226
+ </section>
227
+ </div>
228
+ </section>
229
+ </Card>
230
+
231
+ <Card>
232
+ <section class="project-card" slot="content">
233
+
234
+ <video playsinline autoplay muted loop preload="none">
235
+ <source src={ThisWebsiteFootage} type="video/mp4">
236
+ video unavailable. original video contains clips of this website being resized and light-dark mode being
237
+ toggled.
238
+ </video>
239
+ <div class="project-card-body">
240
+ <h2>This webpage!</h2>
241
+
242
+ <p>
243
+ The webpage is made of two parts. The webpage that has the content for everything here, I've
244
+ lovingly called Seaweed. I kept seaweed as a private package. On the other hand, the base package which I
245
+ want to use for all spin offs of my websites is called Pineapple and have kept that codebase public.
246
+ </p>
247
+
248
+ <p>
249
+ <Chip>Svelte</Chip>
250
+ <Chip>Skeleton (Svelte UI library)</Chip>
251
+ <Chip>Typescript</Chip>
252
+ <Chip>Vercel</Chip>
253
+ <Chip>YarnSpinner</Chip>
254
+ </p>
255
+
256
+ <section class="game-link-section">
257
+ <button type="button" class="btn variant-filled-primary turnip-button"
258
+ role="link"
259
+ title="https://github.com/TurnipXenon/pineapple"
260
+ on:click={() => window.open("https://github.com/TurnipXenon/pineapple")}>
261
+ <img src={GithubIcon} class="long-btn-image" alt="github icon">
262
+ </button>
263
+ </section>
264
+ </div>
265
+ </section>
266
+ </Card>
267
+
268
+ <Card>
269
+ <section class="project-card" slot="content">
270
+ <div class="project-card-body">
271
+ <h2>Mock Uber App</h2>
272
+
273
+ <p>A course project app meant to emulate how Uber works by playing with <span
274
+ class="qt-google">Google Maps API</span>.
275
+ </p>
276
+ <p>
277
+ I implemented all interfaces related to the NoSQL cloud database <span
278
+ class="qt-firebase qt-google qt-infra">Firebase</span>, making writing code easier for other programmers
279
+ (<span
280
+ class="qt-android">Android</span> / <span class="qt-java">Java</span>). I also wrote documentation to said
281
+ code and added instrumented tests that are tested by the continuous integration tool <span
282
+ class="qt-infra">Travis CI</span>, ensuring that our code is tested
283
+ </p>
284
+
285
+ <section class="game-link-section">
286
+ <!-- todo: mock uber app find link -->
287
+ <button type="button" class="game-button turnip-button"
288
+ role="link"
289
+ title="https://github.com/CMPUT301W20T10/UberApp"
290
+ on:click={() => window.open("https://github.com/CMPUT301W20T10/UberApp")}>
291
+ <img src={GithubIcon} class="long-btn-image" alt="github icon">
292
+ </button>
293
+ </section>
294
+ </div>
295
+ </section>
296
+ </Card>
297
+
298
+ </section>