-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathindex.original.html
More file actions
1107 lines (1015 loc) · 70.6 KB
/
index.original.html
File metadata and controls
1107 lines (1015 loc) · 70.6 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="">
<meta name="author" content="">
<title>Albert Chang: Portfolio</title>
<meta name="description" content='Explore Albert Chang's fast, elegant, and user-friendly web projects, and gain insight into his life!'>
<meta content="Albert Chang" name="author">
<meta content="website" property="og:type">
<meta prefix="og: http://ogp.me/ns#" content="http://i.imgur.com/Nz8dAf3.png" property="og:image">
<meta content='Explore Albert Chang's fast, elegant, and user-friendly web projects, and gain insight into his life!'>
<meta content="http://www.albertchanged.me" property="og:url">
<meta content="Albert Chang: Portfolio" property="og:title">
<link rel="icon" href="img/portfolio/Portfolio-Tab-Icon-Round op.png"/>
<!-- Bootstrap Core CSS -->
<link href="vendor/bootstrap/css/bootstrap.min.css" rel="stylesheet">
<!-- Theme CSS -->
<link href="finalStyle.min.css" rel="stylesheet">
<!-- Custom Fonts -->
<link href="vendor/font-awesome/css/font-awesome.min.css" rel="stylesheet" type="text/css">
<link href="https://fonts.googleapis.com/css?family=Montserrat:300,400,500,600,700,800" rel="stylesheet" type="text/css">
<link href="https://fonts.googleapis.com/css?family=Lato:400,700,400italic,700italic" rel="stylesheet" type="text/css">
<link href="https://fonts.googleapis.com/css?family=Sriracha" rel="stylesheet">
<link href="https://fonts.googleapis.com/css?family=Open+Sans:300,400,600,700,800" rel="stylesheet">
<link href="https://fonts.googleapis.com/css?family=Libre+Franklin:200,300,400,500,700" rel="stylesheet">
<!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries -->
<!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
<!--[if lt IE 9]>
<script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>
<script src="https://oss.maxcdn.com/libs/respond.js/1.4.2/respond.min.js"></script>
<![endif]-->
</head>
<body id="page-top" class="index">
<script>
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
ga('create', 'UA-90796663-5', 'auto');
ga('send', 'pageview');
</script>
<div id="skipnav"><a href="#maincontent">Skip to main content</a></div>
<!-- Navigation -->
<nav id="mainNav" class="navbar navbar-default navbar-fixed-top navbar-custom">
<div class="container">
<!-- Brand and toggle get grouped for better mobile display -->
<div class="navbar-header page-scroll">
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1">
<span class="sr-only">Toggle navigation</span><i class="fa fa-bars"></i>
</button>
<a class="navbar-brand navbarlink" href="#page-top"><span class="light"><span style="color: black">Albert</span></span><span style="color: #848484; font-weight: 500">Chang</span><span style="color: #01A9DB; font-weight: 600">ED</span></a>
</div>
<!-- Collect the nav links, forms, and other content for toggling -->
<div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
<ul class="nav navbar-nav navbar-right">
<li class="hidden">
<a href="#page-top"></a>
</li>
<li class="page-scroll">
<a href="#skills">Skills</a>
</li>
<li class="page-scroll">
<a href="#experience">Experience</a>
</li>
<li class="page-scroll">
<a href="#portfolio">Portfolio</a>
</li>
<li class="page-scroll">
<a href="#about">About</a>
</li>
<!-- <li class="page-scroll">
<a href="resume.html" target="_blank">Résumé</a>
</li> -->
<li class="page-scroll" style="padding-right: 0px;">
<a href="#contact">Contact</a>
</li>
</ul>
</div>
<!-- /.navbar-collapse -->
</div>
<!-- /.container-fluid -->
</nav>
<!-- Header -->
<header>
<div class="container" id="maincontent" tabindex="-1">
<div class="row">
<div class="col-lg-12">
<div class="intro-text">
<h1 class="name1" style="letter-spacing: 2px; display: inline-block;"><span style="color: #01BCF5">Albert</span></h1>
<h1 class="name2" style="margin-top: 0px; letter-spacing: 2px; display: inline-block;">Chang</h1>
<object><embed src="img/portfolio/svg/PortfolioFinal4.svg" id="animation"></object>
<br>
<h4 class="headerh4"><span class="skills1" style="font-family: 'Helvetica Neue', 'Open Sans'; font-weight: 300">Developer.</span></h4>
<h4 class="headerh4 headerh4-1"><span class="skills2" style="font-family: 'Helvetica Neue', 'Open Sans'; font-weight: 300">Designer.</span></h4>
<h4 class="headerh4 headerh4-2"><span class="skills3" style="font-family: 'Helvetica Neue', 'Open Sans'; font-weight: 300">DJ. </span></h4>
<div class="page-scroll">
<a href="#skills"><div class="arrow headerbounce" id="headerarrow"></div></a>
</div>
</div>
</div>
</div>
</div>
</header>
<!-- Skills Section -->
<section class="skills" id="skills">
<div class="container" id="skillsid">
<div class="row">
<div class="col-lg-12 text-center">
<h2 class="skillsh2">Skills</h2>
<h3 style="font-size: 16px; color: #848484; font-weight: 400">Interact with them to learn more!</h3>
<hr class="sectionhr skillshr" style="width: 80px">
</div>
</div>
<h2 class="skills-title">Front End</h2>
<div class="row text-center skillrow" style="position: relative;">
<div class="col-lg-4">
<div class="skillbox text-center">
<div class="skillshape">
<h2 class="skilldescription" id="js" style="text-transform: none;">REACT</h2>
</div>
<div class="skillinfo skillinfo_topleft">
<strong>React JS<br>Redux / React Redux<br>Higher-Order Components</strong>
</div>
</div>
</div>
<div class="col-lg-4">
<div class="skillbox text-center">
<div class="skillshape">
<h2 class="skilldescription" id="css" style="text-transform: none;">JAVASCRIPT</h2>
</div>
<div class="skillinfo skillinfo_top">
<strong>ES6 JavaScript<br/>Asynchronous Programming<br>Functional Programming</strong>
</div>
</div>
</div>
<div class="col-lg-4">
<div class="skillbox text-center">
<div class="skillshape">
<h2 class="skilldescription" id="js" style="text-transform: none;">CSS</h2>
</div>
<div class="skillinfo skillinfo_topright">
<strong>CSS3<br>Sass / Less<br>BEM Naming</strong>
</div>
</div>
</div>
<div class="col-lg-4">
<div class="skillbox text-center">
<div class="skillshape">
<h2 class="skilldescription" id="js" style="text-transform: none;">HTML</h2>
</div>
<div class="skillinfo skillinfo_bottomleft">
<strong>HTML5<br>Web Components<br/>Canvas</strong>
</div>
</div>
</div>
<div class="col-lg-4">
<div class="skillbox text-center">
<div class="skillshape">
<h2 class="skilldescription" id="design">DESIGN</h2>
</div>
<div class="skillinfo skillinfo_bottom">
<strong>Mobile-first UI Design<br>Adobe Illustrator/Photoshop<br>Drawing/Sketching Accuracy</strong>
</div>
</div>
</div>
<div class="col-lg-4">
<div class="skillbox text-center">
<div class="skillshape">
<h2 class="skilldescription" id="php">TESTING</h2>
</div>
<div class="skillinfo skillinfo_bottomright">
<strong>Unit & Integration Testing<br>End-To-End Testing<br>Jest, Mocha.js, Chai.js</strong>
</div>
</div>
</div>
</div>
<br/>
<h2 class="skills-title" style="color: #424242">Back End</h2>
<div class="row text-center skillrow" style="position: relative;">
<div class="col-lg-4">
<div class="skillbox text-center">
<div class="skillshape-secondary">
<h2 class="skilldescription" id="sql">SERVERS</h2>
</div>
<div class="skillinfo skillinfo_bottomleft">
<strong>Node.js & File System<br>Koa.js & Express.js<br>AJAX & Axios</strong>
</div>
</div>
</div>
<div class="col-lg-4">
<div class="skillbox text-center">
<div class="skillshape-secondary">
<h2 class="skilldescription" id="js" style="text-transform: none;">DATABASE</h2>
</div>
<div class="skillinfo skillinfo_bottom">
<strong>PostgreSQL<br>MySQL<br>MongoDB</strong>
</div>
</div>
</div>
<div class="col-lg-4">
<div class="skillbox text-center">
<div class="skillshape-secondary">
<h2 class="skilldescription" id="ux">BASH</h2>
</div>
<div class="skillinfo skillinfo_bottomright">
<strong>Computer Automation<br>Shell Scripting<br>Git Version Control</strong>
</div>
</div>
</div>
</div>
</div>
</section>
<section class="experience" id="experience">
<div class="container" id="experienceid">
<div class="row">
<div class="col-lg-12 text-center">
<h2 class="experienceh2">Experience</h2>
<hr class="sectionhr portfoliohr">
<br>
</div>
</div>
<div class="experiencerow1">
<img src="./img/portfolio/Cisco-Blue-Logo op.png" class="experience-logo"/>
<br/>
<div class="experience-header">
<div class="experience-header-title">
<h2 class="portfolioh2" style="color: #424242">FRONT END SOFTWARE ENGINEER</h2>
<h3 class="portfolioh2">@ Cisco Systems, Inc.</h3>
</div>
<div><p class="experience-dates">Sep 2018 - Nov 2020</p></div>
</div>
<div class="experience-body">
<div class="experience-bullet">
<div class="dot-container"><span class="dot"></span></div>
<div class="experience-p"><strong>Converted</strong> from Contractor to Full Time Employee in Sep 2018 (3 months early!)</div>
</div>
<div class="experience-bullet">
<div class="dot-container"><span class="dot"></span></div>
<div class="experience-p"><strong>Owned and shipped</strong> robust ‘System 360’ dashboard web application to 3,000+ Cisco DNA Center customers worldwide</div>
</div>
<div class="experience-bullet">
<div class="dot-container"><span class="dot"></span></div>
<div class="experience-p"><strong>Developed</strong> ‘Service Explorer‘, a responsive System debugging tool that helps users monitor microservices in a hierarchical tree layout; used React and Cisco‘s HTML Canvas framework</div>
</div>
<div class="experience-bullet">
<div class="dot-container"><span class="dot"></span></div>
<div class="experience-p"><strong>Implemented</strong> a modern product landing experience for Cisco’s DNA Management System product that features Geo Map & Table views and Web Components</div>
</div>
<div class="experience-bullet">
<div class="dot-container"><span class="dot"></span></div>
<div class="experience-p"><strong>Optimized</strong> applications by utilizing React composition patterns and enabling real-time data flow throughout components via Web Sockets</div>
</div>
</div>
<br/>
<div class="experience-photo-title"><p style="color: white">System 360 (Dashboard)</p></div>
<img src="./img/portfolio/System 360 - Generic - Nov 2020 op.png" width="100%" height="100%" class="experience-project-photo" style="box-shadow: 5px 5px 2px #D8D8D8; margin-bottom: 40px" title="Full-page screenshot of System 360 Dashboard" alt="Full-page screenshot of System 360 Dashboard"/>
<div class="experience-photo-title"><p style="color: white">Service Explorer (Hierarchical Tree)</p></div>
<img src="./img/portfolio/Service Explorer - Generic - Nov 2020 op.png" width="100%" height="100%" class="experience-project-photo" style="box-shadow: 5px 5px 2px #D8D8D8;" title="Full-page screenshot of Service Explorer tree with Sidebar open" alt="Full-page screenshot of Service Explorer tree with Sidebar open"/>
</div>
<br/>
<hr class="experience-hr"/>
<br/>
<div class="experiencerow2">
<img src="./img/portfolio/Cisco-Blue-Logo op.png" class="experience-logo"/>
<br/>
<div class="experience-header">
<div class="experience-header-title">
<h2 class="portfolioh2" style="color: #424242">FRONT END SOFTWARE ENGINEER <span style="color: #6E6E6E">(Contract)</span></h2>
<h3 class="portfolioh2">@ Cisco Systems, Inc.</h3>
</div>
<div><p class="experience-dates">Jun 2018 - Sep 2018</p></div>
</div>
<div class="experience-body">
<div class="experience-bullet">
<div class="dot-container"><span class="dot"></span></div>
<div class="experience-p"><strong>Built</strong> Proof-of-Concept for ‘System 360‘, a new dashboard web application that centralizes System area information to help users monitor and manage their Cisco DNA Center product
</div>
</div>
<div class="experience-bullet">
<div class="dot-container"><span class="dot"></span></div>
<div class="experience-p"><strong>Reduced</strong> initial React, JavaScript, HTML5, and CSS3 code by 40% by modularizing into reusable React components that transfer global data via Redux and REST
</div>
</div>
<div class="experience-bullet">
<div class="dot-container"><span class="dot"></span></div>
<div class="experience-p"><strong>Presented</strong> multiple iterations to stakeholders, designers, & developers, and worked closely with them to determine long-term product vision for ‘System 360‘</div>
</div>
</div>
<br/>
<div class="experience-photo-title"><p style="color: white">Proof-of-Concept for System 360 (Dashboard)</p></div>
<img src="./img/portfolio/System 360 - Generic - Sep 2018 op.png" width="100%" height="100%" class="experience-project-photo" style="box-shadow: 5px 5px 2px #D8D8D8;z-index: 100" title="Screenshot of the first-ever iteration of System 360 Dashboard" alt="Screenshot of the first-ever iteration of System 360 Dashboard"/>
<br/>
</div>
</div>
</section>
<!-- Portfolio Grid Section -->
<section class="portfolio" id="portfolio">
<div class="container" id="portfolioid">
<br/>
<div class="row">
<div class="col-lg-12 text-center">
<h2 class="portfolioh2">Portfolio</h2>
<h3 style="font-size: 16px; color: #8D8D8D; font-weight: 400">Click on them for more information!</h3>
<hr class="sectionhr portfoliohr">
<br>
</div>
</div>
<div class="row portfoliorow1">
<div class="col-lg-4 portfolio-item">
<a href="#portfolioModal6" class="portfolio-link" data-toggle="modal">
<div class="caption">
<div class="caption-content">
<i class="fa fa-search-plus fa-3x"></i>
<br><br>
<strong><span style="font-size: 25px">Netflix Content Microservice</span></strong>
<br>
<span style="color: #01A9DB">Software Engineer</span>
</div>
</div>
<img src="img/portfolio/netflixcontent.png" class="img-responsive portfolio_pics" alt="portfolio display" style="opacity: 0.75">
</a>
</div>
<div class="col-lg-4 portfolio-item">
<a href="#portfolioModal7" class="portfolio-link" data-toggle="modal">
<div class="caption">
<div class="caption-content">
<i class="fa fa-search-plus fa-3x"></i>
<br><br>
<strong><span style="font-size: 25px">Rebasebook</span></strong>
<br>
<span style="color: #01A9DB">Full Stack Software Engineer</span>
</div>
</div>
<img src="img/portfolio/rebasebookop.png" class="img-responsive portfolio_pics" alt="portfolio display" style="opacity: 0.95">
</a>
</div>
<div class="col-lg-4 portfolio-item">
<a href="#portfolioModal8" class="portfolio-link" data-toggle="modal">
<div class="caption">
<div class="caption-content">
<i class="fa fa-search-plus fa-3x"></i>
<br><br>
<strong><span style="font-size: 25px">Ticketfaster</span></strong>
<br>
<span style="color: #01A9DB">Full Stack Software Engineer</span>
</div>
</div>
<img src="img/portfolio/ticketfasterop.png" class="img-responsive portfolio_pics" alt="portfolio display" style="opacity: 0.95">
</a>
</div>
</div>
<div class="row portfoliorow2">
<div class="col-lg-4 portfolio-item">
<a href="#portfolioModal9" class="portfolio-link" data-toggle="modal">
<div class="caption">
<div class="caption-content">
<i class="fa fa-search-plus fa-3x"></i>
<br><br>
<strong><span style="font-size: 25px">Toppit (Legacy Application)</span></strong>
<br>
<span style="color: #01A9DB">Full Stack Software Engineer</span>
</div>
</div>
<img src="img/portfolio/toppit.png" class="img-responsive portfolio_pics" alt="portfolio display" style="opacity: 0.95">
</a>
</div>
<div class="col-lg-4 portfolio-item">
<a href="#portfolioModal1" class="portfolio-link" data-toggle="modal">
<div class="caption">
<div class="caption-content">
<i class="fa fa-search-plus fa-3x"></i>
<br><br>
<strong><span style="font-size: 25px">www.albertchanged.me</span></strong>
<br>
<span style="color: #01A9DB">Full Stack Web Developer</span>
</div>
</div>
<img src="img/portfolio/portfoliodisplayop.png" class="img-responsive portfolio_pics" alt="portfolio display" style="opacity: 0.95">
</a>
</div>
<div class="col-lg-4 portfolio-item">
<a href="#portfolioModal2" class="portfolio-link" data-toggle="modal">
<div class="caption">
<div class="caption-content">
<i class="fa fa-search-plus fa-3x"></i>
<br><br>
<strong><span style="font-size: 25px">YouTube Topics </span></strong>
<br>
<span style="color: #01A9DB">React Web App / Tool Developer</span>
</div>
</div>
<img src="img/portfolio/youtubetopicsop.png" class="img-responsive portfolio_pics" alt="YouTube Topics Display">
</a>
</div>
</div>
<div class="row portfoliorow3">
<div class="col-lg-4 portfolio-item">
<a href="#portfolioModal3" class="portfolio-link" data-toggle="modal">
<div class="caption">
<div class="caption-content">
<i class="fa fa-search-plus fa-3x"></i>
<br><br>
<strong><span style="font-size: 25px">FLMWRK Landing Page</span></strong>
<br>
<span style="color: #01A9DB">Animated Website Developer</span>
</div>
</div>
<img src="img/portfolio/flmwrkop.png" class="img-responsive portfolio_pics" alt="FLMWRK Landing Page Display" style="opacity: 0.9">
</a>
</div>
<div class="col-lg-4 portfolio-item">
<a href="#portfolioModal4" class="portfolio-link" data-toggle="modal">
<div class="caption">
<div class="caption-content">
<i class="fa fa-search-plus fa-3x"></i>
<br><br>
<strong><span style="font-size: 25px">Win Her Love</span></strong>
<br>
<span style="color: #01A9DB">JavaScript Web Game Developer</span>
</div>
</div>
<img src="img/portfolio/winherloveop.png" class="img-responsive portfolio_pics" alt="Win Her Love Display">
</a>
</div>
<div class="col-lg-4 portfolio-item">
<a href="#portfolioModal5" class="portfolio-link" data-toggle="modal">
<div class="caption">
<div class="caption-content">
<i class="fa fa-search-plus fa-3x"></i>
<br><br>
<strong><span style="font-size: 25px">Golden State Watches</span></strong>
<br>
<span style="color: #01A9DB">Online Storefront Developer</span>
</div>
</div>
<img src="img/portfolio/gswhomeop.png" class="img-responsive portfolio_pics" alt="Golden State Watches Display" style="opacity: 0.9">
</a>
</div>
</div>
</div>
</section>
<!-- About Section -->
<section class="about" id="about">
<div class="container" id="aboutid">
<div class="row">
<div class="col-lg-12 text-center">
<h2 class="abouth2">About</h2>
<!-- <h3 style="font-size: 16px; color: #848484; font-weight: 400">Hover over them to learn more!</h3> -->
<hr class="sectionhr abouthr" style="width: 80px">
<p style="font-family: 'Helvetica Neue', 'Open Sans'; font-size: 25px; display: inline-block; color: #848484; font-weight: 300">I love being able to combine art and code to make something</p>
<p id="beautiful" style="font-family: 'Sriracha', cursive; font-size: 26px; display: inline-block; padding-left: 0.5%; margin-top: -15px"> beautiful.</p>
</div>
</div>
<div class="row aboutrow">
<div class="col-lg-4">
<div id="about1" class="fadein aboutsection1">
<h3 class="abouth3">EDUCATION</h3>
<hr class="sectionhr aboutsectionhr" style="width: 90px">
<p style="padding-top: 4%; color: #424242"><strong>HACK REACTOR '18</strong></p>
<p>Advanced <strong><span style="color: #606060">Software Engineering</span></strong></p>
<p style="padding-top: 4%; color: #424242"><strong>SAN JOSE STATE UNIVERSITY '17</strong></p>
<p>Majored in <strong><span style="color: #606060">Management Info Systems</span></strong><br>Minored in <strong><span style="color: #555555">Computer Science</span></strong></p>
<p style="padding-top: 2%; color: #00A1D2"><strong>Awards & Distinctions</strong></p>
<p>Hack Reactor - <strong><span style="color: #606060">Class President (2018)</span></strong><br>IBM/GameStop Hackathon - <strong><span style="color: #606060">2nd Place</span></strong><br>SJSU - <strong><span style="color: #606060">Dean's Scholar (2016-2017)</span></strong></p>
</div>
</div>
<div class="col-lg-4">
<div id="about2" class="fadein aboutsection2">
<h3 class="abouth3">HOBBIES</h3>
<hr class="sectionhr aboutsectionhr" style="width: 80px">
<strong><p style="padding-top: 4%;"><span style="color: #606060; font-weight: 500">DJing:</span> I mix quickly and embrace musical variety. Check out my mixes and mashups! <a href="https://soundcloud.com/flmwrk" style="color: #009BCA" target="_blank"><strong>FLMWRK</strong></a></p></strong>
<strong><p><span style="color: #606060; font-weight: 500">Programming:</span> I am results-driven and love problem solving. Check out my <a href="https://www.github.com/albertchanged" style="color: #009BCA" target="_blank"><strong>GitHub</strong></a>!</p></strong>
<strong><p><span style="color: #606060; font-weight: 500">Designing: </span>I have loved art since I was 5. Won two t-shirt design contests at SJSU!</p></strong>
<strong><p><span style="color: #606060; font-weight: 500">Weightlifting: </span>The body works as one, as physical strength builds mental strength. Look good, feel good!</p></strong>
</div>
</div>
<div class="col-lg-4">
<div id="about3" class="fadein aboutsection3">
<h3 class="abouth3">GOALS</h3>
<hr class="sectionhr aboutsectionhr" style="width: 50px">
<p style="padding-top: 4%;">With my solid front end <u>and</u> back end skillset, as well as my quick absorption of new technologies, I strive to enhance the world as a <span style="color: #424242"><strong>software engineer</strong></span>.</p>
<p>I enjoy seeing others succeed, and constantly search for ways to improve myself in many facets of my life.</p>
<p>But above all, I hope to be part of something that transcends personal growth — one that <strong><span style="color: #00A1D2">changes countless lives for the better</span></strong>.
</p>
</div>
</div>
<!-- <br> -->
<div class="col-lg-8 col-lg-offset-2 text-center page-scroll">
<br>
<p id="prebutton"><strong>Like what you have read?</strong></p>
<a href="#contact" class="btn btn-lg btn-outline">
Let's create some magic together.
</a>
</div>
</div>
</div>
</div>
</section>
<!-- Contact Section -->
<section class="contact" id="contact">
<div class="container" id="contactid">
<div class="row">
<div class="col-lg-12 text-center">
<h2 class="contacth2">Contact</h2>
<hr class="sectionhr contacthr" style="width: 80px">
</div>
</div>
<div class="row">
<div class="col-lg-8 col-lg-offset-2">
<p class="contactp">Please email me at <span style="font-weight: 600"><a href="mailto:albertchanged@gmail.com" class="emaillink">albertchanged@gmail.com</a></span> or fill out the form below!</p>
<form name="sentMessage" id="contactForm" novalidate>
<div class="row control-group">
<div class="form-group col-xs-12 floating-label-form-group controls">
<label for="name" style="color: #01BCF5">Name</label>
<input type="text" class="form-control" placeholder="Name" id="name" required data-validation-required-message="Please enter your name." style="padding-bottom: 10px">
<p class="help-block text-danger"></p>
</div>
</div>
<div class="row control-group">
<div class="form-group col-xs-12 floating-label-form-group controls">
<label for="email" style="color: #01BCF5">Email Address</label>
<input type="email" class="form-control" placeholder="Email Address" id="email" required data-validation-required-message="Please enter your email address.">
<p class="help-block text-danger"></p>
</div>
</div>
<div class="row control-group">
<div class="form-group col-xs-12 floating-label-form-group controls">
<label for="message" style="color: #01BCF5">Message</label>
<textarea rows="3" class="form-control" placeholder="Enjoyed my website? Have an exciting career opportunity? I would love to hear from you!" id="message" required data-validation-required-message="Please enter a message."></textarea>
</div>
</div>
<br>
<div id="success"></div>
<div class="row">
<div class="form-group col-xs-12">
<button type="submit" class="btn btn-success btn-lg">Send</button>
</div>
</div>
</form>
</div>
</div>
</div>
</section>
<!-- Footer -->
<footer class="text-center">
<div class="footer-above">
<div class="container">
<div class="row">
<div class="footer-col col-md-12">
<h3 class="footerh3">CONNECT WITH ME!</h3>
<ul class="list-inline">
<li class="socialbutton1">
<a href="https://www.linkedin.com/in/albertchanged/" target="_blank" class="btn-social btn-outline btn1"><span class="sr-only">LinkedIn</span><i class="fa fa-fw fa-linkedin"></i></a>
</li>
<li class="socialbutton2">
<a href="https://github.com/albertchanged" target="_blank" class="btn-social btn-outline btn2"><span class="sr-only">GitHub</span><i class="fa fa-fw fa-github"></i></a>
</li>
<li class="socialbutton3">
<a href="https://soundcloud.com/flmwrk" target="_blank" class="btn-social btn-outline btn3"><span class="sr-only">SoundCloud</span><i class="fa fa-fw fa-soundcloud"></i></a>
</li>
</ul>
</div>
</div>
</div>
</div>
<div class="footer-below">
<div class="container">
<div class="row">
<div class="col-lg-12">
<p class="footerp">
<strong>Updated with <span style="color: #F70000;" id="heart">♥</span> by <span style="font-weight: 700">Albert Chang</span>, 2020</strong>
</p>
</div>
</div>
</div>
</div>
</footer>
<!-- Scroll to Top Button (Only visible on small and extra-small screen sizes) -->
<div class="scroll-top page-scroll hidden-sm hidden-xs hidden-lg hidden-md">
<a class="btn btn-primary" href="#page-top">
<i class="fa fa-chevron-up"></i>
</a>
</div>
<!-- Portfolio Modals -->
<div class="portfolio-modal modal fade" id="portfolioModal1" tabindex="-1" role="dialog" aria-hidden="true">
<div class="modal-content">
<div class="close-modal" data-dismiss="modal">
<div class="lr">
<div class="rl">
</div>
</div>
</div>
<div class="container">
<div class="row">
<div class="col-lg-8 col-lg-offset-2">
<div class="modal-body">
<h2 class="portfoliotitle">albertchanged.me</h2>
<h3 class="portfoliorole fullstack">Full Stack Web Developer</h3>
<hr class="portfoliohr" style="border-top: 4px solid white;">
<p class="portfolioinfo dividertitle"><strong>Overview</strong><p>
<p class="portfolioinfo">You are on it right now!</p>
<p class="portfolioinfo">This is a culmination of nearly everything I have worked on over my past 4 years of development. Though the YouTube Topics ♫ app is the most useful, this is by far my favorite project.</p>
<p class="portfolioinfo">There were many steps in building this, so I will just discuss the three most difficult ones.</p>
<p class="portfolioinfo">I designed the homepage artwork SVG in Adobe Illustrator. Then I used CSS animations to create the 'CODE' and music notes visuals. I also learned a new way to keep an object in place as it rotates, so once I applied that to the head, I synchronized the head bob with the other animations.</p>
<p class="portfolioinfo">Next, I made CSS hover transitions on the skill boxes follow the direction of their page placement (corner-wise and edge-wise). Try them out when you get to the Skills section!</p>
<p class="portfolioinfo">Lastly, I edited border radii of the objects on the About section, divided the Portfolio section into two rows, and assigned both of them CSS animations. I then utilized jQuery and ES6 JavaScript to watch scroll events, which trigger the animations when the user scrolls the respective objects into view.</p>
<p class="portfolioinfo">Check out the <a href="https://github.com/albertchanged/Portfolio" target="_blank">GitHub repo</a>!</p>
<p class="portfolioinfo dividertitle"><strong>Technologies Used</strong></p>
<p class="portfolioinfo" style="margin-bottom: 30px"><span style="color: white"><strong>FRONT END: </strong></span>Bootstrap, HTML5, CSS3, Sass/Scss
<br><span style="color: white"><strong>BACK END: </strong></span> ES6 JavaScript, jQuery, PHP</p>
<button type="button" class="btn btn-default portfolio-button" data-dismiss="modal"><i class="fa fa-times"></i> Close</button>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="portfolio-modal modal fade" id="portfolioModal1" tabindex="-1" role="dialog" aria-hidden="true">
<div class="modal-content">
<div class="close-modal" data-dismiss="modal">
<div class="lr">
<div class="rl">
</div>
</div>
</div>
<div class="container">
<div class="row">
<div class="col-lg-8 col-lg-offset-2">
<div class="modal-body">
<h2 class="portfoliotitle">Netflix Content Microservice</h2>
<h3 class="portfoliorole fullstack">Software Engineer</h3>
<hr class="portfoliohr" style="border-top: 4px solid white;">
<p class="portfolioinfo dividertitle"><strong>Overview</strong><p>
<p class="portfolioinfo">You are on it right now!</p>
<p class="portfolioinfo">This is a culmination of nearly everything I have learned over the past 2 years of development. Though the YouTube Topics ♫ app is the most useful, this is by far my favorite project.</p>
<p class="portfolioinfo">There were many steps in building this, so I will just discuss the three most difficult ones.</p>
<p class="portfolioinfo">I designed the homepage artwork SVG in Adobe Illustrator. Then I used CSS animations to create the 'CODE' and music notes visuals. I also learned a new way to keep an object in place as it rotates, so once I applied that to the head, I synchronized the head bob with the other animations.</p>
<p class="portfolioinfo">Next, I made CSS hover transitions on the skill boxes follow the direction of their page placement (corner-wise and edge-wise). Try them out when you get to the Skills section!</p>
<p class="portfolioinfo">Lastly, I edited border radii of the objects on the About section, divided the Portfolio section into two rows, and assigned both of them CSS animations. I then utilized jQuery and ES6 JavaScript to watch scroll events, which trigger the animations when the user scrolls the respective objects into view.</p>
<p class="portfolioinfo">Check out the <a href="https://github.com/albertchanged/Portfolio" target="_blank">GitHub repo</a>!</p>
<p class="portfolioinfo dividertitle"><strong>Technologies Used</strong></p>
<p class="portfolioinfo" style="margin-bottom: 30px"><span style="color: white"><strong>FRONT END: </strong></span>Bootstrap, HTML5, CSS3, Sass/Scss
<br><span style="color: white"><strong>BACK END: </strong></span> ES6 JavaScript, jQuery, PHP</p>
<button type="button" class="btn btn-default portfolio-button" data-dismiss="modal"><i class="fa fa-times"></i> Close</button>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="portfolio-modal modal fade" id="portfolioModal2" tabindex="-1" role="dialog" aria-hidden="true">
<div class="modal-content">
<div class="close-modal" data-dismiss="modal">
<div class="lr">
<div class="rl">
</div>
</div>
</div>
<div class="container">
<div class="row">
<div class="col-lg-8 col-lg-offset-2">
<div class="modal-body">
<a href="https://github.com/albertchanged/YouTube-Topics" target="_blank" class="titlelink"><h2 class="portfoliotitle">YouTube Topics ♫<img src="img/portfolio/linkblue.png" class="linkpic"/></h2></a>
<h3 class="portfoliorole">React Web App / Tool Developer</h3>
<hr class="portfoliohr" style="border-top: 4px solid white;">
<p class="portfolioinfo dividertitle"><strong>Overview</strong><p>
<p class="portfolioinfo">Say goodbye to unofficial lyric videos and bad audio on YouTube!</p>
<p class="portfolioinfo">This YouTube-esque web application populates search results directly from YouTube’s ‘Topic’ channels to provide the highest quality music to the user.</p>
<p class="portfolioinfo">With the help of <a href="https://github.com/StephenGrider" target="_blank">Stephen Grider's</a> <a href="https://www.udemy.com/react-redux/" target="_blank">Udemy course</a>, I designed components / states in ES6 to create the site's backbone, and bundled the application with Babel and Webpack.</p>
<p class="portfolioinfo">Then I took off running, querying the search results to return only videos from 'Topic' channels and using jQuery to select/deselect videos as the user chooses. I also learned to organize my CSS with Sass, which greatly improved the source code's readability.</p>
<p class="portfolioinfo">Check out the <a href="https://github.com/albertchanged/YouTube-Topics" target="_blank">GitHub repo</a>!</p>
<p class="portfolioinfo dividertitle"><strong>Technologies Used</strong></p>
<p class="portfolioinfo"><span style="color: white"><strong>FRONT END: </strong></span> React JS, Sass/Scss, Bootstrap, HTML5, CSS3
<br><span style="color: white"><strong>BACK END: </strong></span> ES6 JavaScript, jQuery, Webpack, YouTube Data API</p>
<hr class="portfoliohr" style="margin-bottom: 35px; border-top: 4px solid white;">
<a href="https://github.com/albertchanged/YouTube-Topics" target="_blank"><img src="img/portfolio/screenshotyoutubeop.png" class="img-responsive img-centered portfolio_pics" alt="Screenshot of YouTube Topics ♫ page" style="box-shadow: 0px 0px 10px #A4A4A4;"></a>
<button type="button" class="btn btn-default portfolio-button" data-dismiss="modal"><i class="fa fa-times"></i> Close</button>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="portfolio-modal modal fade" id="portfolioModal3" tabindex="-1" role="dialog" aria-hidden="true">
<div class="modal-content">
<div class="close-modal" data-dismiss="modal">
<div class="lr">
<div class="rl">
</div>
</div>
</div>
<div class="container">
<div class="row">
<div class="col-lg-8 col-lg-offset-2">
<div class="modal-body">
<a href="https://albertchanged.github.io/FLMWRK/" target="_blank" class="titlelink"><h2 class="portfoliotitle">FLMWRK<img src="img/portfolio/linkblue.png" class="linkpic"/></h2></a>
<h3 class="portfoliorole">Animated Website Developer</h3>
<hr class="portfoliohr" style="border-top: 4px solid white;">
<p class="portfolioinfo dividertitle"><strong>Overview</strong><p>
<p class="portfolioinfo">Besides tackling cool projects to deepen my skill set and show what I could do as YOUR next software developer, I also love DJing! And what better way to combine the two than to create a simple yet effective landing page for my DJ persona, <a href="https://soundcloud.com/FLMWRK" target="_blank">FLMWRK</a>?</p>
<p class="portfolioinfo">I first created a minimalistic footer. Then I converted my self-designed logo into SVGs in Adobe Illustrator, and used CSS animations to trace, fill, and fade them in following a specific order.</p>
<p class="portfolioinfo">Lastly, I needed to emphasize the 'FLM' (flame) in 'FLMWRK', so I set animation delays on certain aspects of my logo in order to emulate a cool "flaming" illusion.</p>
<p class="portfolioinfo">Check out the <a href="https://github.com/albertchanged/FLMWRK" target="_blank">Github repo</a>!</p>
<p class="portfolioinfo dividertitle"><strong>Technologies Used</strong></p>
<p class="portfolioinfo"><span style="color: white"><strong>FRONT END:</strong></span> HTML5, CSS3
<br><span style="color: white"><strong>MISC. TOOLS: </strong></span> SVG, Adobe Illustrator CS5</p>
<hr class="portfoliohr" style="margin-bottom: 35px; border-top: 4px solid white;">
<a href="https://albertchanged.github.io/FLMWRK/" target="_blank"><img src="img/portfolio/screenshotflmwrkop.png" class="img-responsive img-centered portfolio_pics" alt="Screenshot of FLMWRK Landing Page" style="box-shadow: 0px 0px 5px #A4A4A4;"></a>
<button type="button" class="btn btn-default portfolio-button" data-dismiss="modal"><i class="fa fa-times"></i> Close</button>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="portfolio-modal modal fade" id="portfolioModal4" tabindex="-1" role="dialog" aria-hidden="true">
<div class="modal-content">
<div class="close-modal" data-dismiss="modal">
<div class="lr">
<div class="rl">
</div>
</div>
</div>
<div class="container">
<div class="row">
<div class="col-lg-8 col-lg-offset-2">
<div class="modal-body">
<a href="https://albertchanged.github.io/Win-Her-Love/" target="_blank" class="titlelink"><h2 class="portfoliotitle">Win Her Love<img src="img/portfolio/linkblue.png" class="linkpic"/></h2></a>
<h3 class="portfoliorole">JavaScript Web Game Developer</h3>
<hr class="portfoliohr" style="border-top: 4px solid white;">
<p class="portfolioinfo dividertitle"><strong>Overview</strong><p>
<p class="portfolioinfo"><strong><span style="color: white">Objective:</span> Evade Bug swarms to collect Hearts from a Princess at the end of the board.</strong></p>
<p class="portfolioinfo">Alright, I cannot take ALL the credit for this Frogger-esque game!</p>
<p class="portfolioinfo">HUGE thank you to the <a href="https://www.udacity.com/course/front-end-web-developer-nanodegree--nd001" target="_blank">Udacity Front End Web Developer Nanodegree course</a> for providing the artwork, game engine, and starting code for the Boy and Bug sprites.</p>
<p class="portfolioinfo">Having that foundation allowed me to expand on each aspect of the game using ES6 JavaScript. I first edited the game engine to extend the gameboard. I also figured out how to vary the Bugs' frequency and speed, and recalibrated both their and the Boy's impact radii.</p>
<p class="portfolioinfo">Then I inserted a Princess who moves to a random block after each interaction with the Boy, which causes the Hearts, Score, and amount of Bugs to update. This was the most difficult algorithm to devise because it required multiple JavaScript prototypes to listen to each other.</p>
<p class="portfolioinfo">Finally, I used HTML Local Storage to cache the player's highest score so he/she can try to beat it in the future!</p>
<p class="portfolioinfo"><span style="color: white"><strong>***More game instructions are on the right side of <a href="https://albertchanged.github.io/Win-Her-Love/" target="_blank">its page</a>.***</strong></span></p>
<p class="portfolioinfo">Check out the <a href="https://github.com/albertchanged/Win-Her-Love" target="_blank">Github repo</a>!</p>
<p class="portfolioinfo dividertitle"><strong>Technologies Used</strong></p>
<p class="portfolioinfo"><span style="color: white"><strong>FRONT END: </strong></span> HTML5, CSS3
<br><span style="color: white"><strong>BACK END: </strong></span> ES6 JavaScript</p>
<hr class="portfoliohr" style="margin-bottom: 35px; border-top: 4px solid white;">
<a href="https://albertchanged.github.io/Win-Her-Love/" target="_blank"><img src="img/portfolio/screenshotwinherloveop.png" class="img-responsive img-centered portfolio_pics" alt="Screenshot of Win Her Love Page" style="box-shadow: 0px 0px 10px #A4A4A4;"></a>
<button type="button" class="btn btn-default portfolio-button" data-dismiss="modal"><i class="fa fa-times"></i> Close</button>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="portfolio-modal modal fade" id="portfolioModal5" tabindex="-1" role="dialog" aria-hidden="true">
<div class="modal-content">
<div class="close-modal" data-dismiss="modal">
<div class="lr">
<div class="rl">
</div>
</div>
</div>
<div class="container">
<div class="row">
<div class="col-lg-8 col-lg-offset-2">
<div class="modal-body">
<a href="http://goldenstatecoder.altervista.org/" target="_blank" class="titlelink"><h2 class="portfoliotitle">Golden State Watches<img src="img/portfolio/linkblue.png" class="linkpic"/></h2></a>
<h3 class="portfoliorole">Online Storefront Developer</h3>
<hr class="portfoliohr" style="border-top: 4px solid white;">
<p class="portfolioinfo dividertitle"><strong>Overview</strong><p>
<p class="portfolioinfo">This was a group project for my Web Based Computing course in college. Two teammates and I created an online storefront for gold watches. I was the lead developer.</p>
<p class="portfolioinfo">First, I combined 3 Bootstrap templates to connect the parallax structure, product view modals, and team member section together.</p>
<p class="portfolioinfo">I gave each product view modal a title->image->table->form layout. As my teammates filled product view modals with watch information and images, I searched for ways to spice up the interface. I found a ticking Canvas clock online and superimposed it onto the home page.</p>
<p class="portfolioinfo">A teammate and I implemented a dynamic star-rating and feedback system within HTML forms in the product view modals. I edited the PHP code given by my professor to display this feedback on an internal page. Lastly, we reworked the CSS to establish the site's overall feel.</p>
<p class="portfolioinfo dividertitle"><strong>Technologies Used</strong></p>
<p class="portfolioinfo"><span style="color: white"><strong>FRONT END: </strong></span> HTML5, CSS3, Bootstrap
<br><span style="color: white"><strong>BACK END: </strong></span> ES6 JavaScript, PHP, MySQL</p>
<hr class="portfoliohr" style="margin-bottom: 35px; border-top: 4px solid white;">
<a href="http://goldenstatecoder.altervista.org/" target="_blank"><img src="img/portfolio/screenshotgswop.png" class="img-responsive img-centered portfolio_pics" alt="Screenshot of Golden State Watches Page" style="box-shadow: 0px 0px 5px #A4A4A4;"></a>
<button type="button" class="btn btn-default portfolio-button" data-dismiss="modal"><i class="fa fa-times"></i> Close</button>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="portfolio-modal modal fade" id="portfolioModal6" tabindex="-1" role="dialog" aria-hidden="true">
<div class="modal-content">
<div class="close-modal" data-dismiss="modal">
<div class="lr">
<div class="rl">
</div>
</div>
</div>
<div class="container">
<div class="row">
<div class="col-lg-8 col-lg-offset-2">
<div class="modal-body">
<a href="https://github.com/albertchanged/netflix-content" target="_blank" class="titlelink"><h2 class="portfoliotitle">Netflix Content Microservice<img src="img/portfolio/linkblue.png" class="linkpic"/></h2></a>
<h3 class="portfoliorole">Software Engineer</h3>
<hr class="portfoliohr" style="border-top: 4px solid white;">
<p class="portfolioinfo dividertitle"><strong>Overview</strong><p>
<p class="portfolioinfo">
This application centered around optimization and scalability. I simulated vigorous Netflix site activity through stress tests that conjured 3,500+ concurrent users.
Though there were 3 use cases, my primary focus was to provide another microservice with full video data (15 sections) from my Cassandra database of 10,000,000 unique records – in each request I received!
</p>
<p class="portfolioinfo">
Using Koa.js in a Node.js runtime environment, I authored all route, endpoint, database, and test files to provide my Artillery stress test endpoints to attack with requests.
My primary endpoint was called 'GET content/:id'.
</p>
<p class="portfolioinfo">
Initially, my functionality could only reach a throughput of 400 requests per second (RPS), and at some points, took 2,600 milliseconds (ms) to complete a request.
However, after implementing Redis to cache results and achieve constant time retrieval, I increased my throughput by 400% to 1,300 RPS and reduced my latency by 75% to 630 ms!
</p>
<p class="portfolioinfo">
I then enlisted a Docker Swarm to deploy my service on Amazon Web Services EC2 Linux Instances.
I started with 1 t2.medium instance to hold Cassandra, Redis, and a proxy server, and 1 t2.micro to hold my application's web server.
</p>
<p class="portfolioinfo">
My deployment goal was to achieve 1,000+ RPS and a latency below 200 ms.
Stress testing this setup yielded a throughput of 650 RPS and latency of 722 ms. Not quite there yet.
</p>
<p class="portfolioinfo">
So, to distribute request load across more nodes, I horizontally scaled my service by adding 2 more t2.micro instances, both of which carried my web server as well.
With this new and robust setup, I more than doubled my throughput to 1,400 RPS and cut my latency by 85% to 115 ms!
</p>
<p class="portfolioinfo">Check out the <a href="https://github.com/albertchanged/netflix-content" target="_blank">GitHub repo</a>!</p>
<p class="portfolioinfo dividertitle"><strong>Technologies Used</strong></p>
<p class="portfolioinfo"><span style="color: white"><strong>DEPLOYMENT: </strong></span> Amazon Web Services, Docker, Docker Swarm
<br><span style="color: white"><strong>BACK END: </strong></span> Node.js, Koa.js, Cassandra DB, Redis</p>
<hr class="portfoliohr" style="margin-bottom: 35px; border-top: 4px solid white;">
<p>Best metrics achieved: 1400 RPS, latency of < 125 ms</p>
<a href="https://i.imgur.com/676rcCs.png" target="_blank"><img src="img/portfolio/netflixop.png" class="img-responsive img-centered portfolio_pics" alt="Achieved Metrics for Netflix Content Microservice" style="box-shadow: 0px 0px 5px #A4A4A4;"></a>
<button type="button" class="btn btn-default portfolio-button" data-dismiss="modal"><i class="fa fa-times"></i> Close</button>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="portfolio-modal modal fade" id="portfolioModal7" tabindex="-1" role="dialog" aria-hidden="true">
<div class="modal-content">
<div class="close-modal" data-dismiss="modal">
<div class="lr">
<div class="rl">
</div>
</div>
</div>
<div class="container">
<div class="row">
<div class="col-lg-8 col-lg-offset-2">
<div class="modal-body">
<a href="https://github.com/albertchanged/rebasebook" target="_blank" class="titlelink"><h2 class="portfoliotitle">Rebasebook<img src="img/portfolio/linkblue.png" class="linkpic"/></h2></a>
<h3 class="portfoliorole">Full Stack Software Engineer</h3>
<hr class="portfoliohr" style="border-top: 4px solid white;">
<p class="portfolioinfo dividertitle"><strong>Overview</strong><p>
<p class="portfolioinfo">Welcome to the social media for programmers!</p>
<p class="portfolioinfo">This application was heavily inspired by Facebook's functionalities, look, and feel.</p>
<p class="portfolioinfo"><p class="portfolioinfo">I led the development of Rebasebook in a team with 3 other engineers, creating the initial scaffolding,
authoring several key React components, implementing React Router, editing most styles, and working with fellow engineers on their components' CSS.
</p>
<p class="portfolioinfo">
I architected the CreatePost, Post, and PostList components, which were reusable throughout the application – mainly within the Feed and Profile components.
</p>
<p class="portfolioinfo">The biggest challenge? The Liking and Unliking functionality, including showing which users have already Liked a Post.
Of the 10+ database and React methods that I wrote, the ones concerning Likes were the most complicated because of their queries' nested JOINs.
</p>
<p class="portfolioinfo">Another difficulty was rendering different Profiles upon URL changes. I solved this by incorporating a React lifecycle method called
componentWillReceiveProps, in which I detected changes in URL parameters and pushed them to a React Router redirect function to render a new Profile.
</p>
<p class="portfolioinfo">Despite the bumps, my team and I were able to piece together an amazingly accurate Facebook replica!</p>
<p class="portfolioinfo"></p>
<p class="portfolioinfo">Check out the <a href="https://github.com/albertchanged/rebasebook" target="_blank">GitHub repo</a>!</p>
<p class="portfolioinfo dividertitle"><strong>Technologies Used</strong></p>
<p class="portfolioinfo"><span style="color: white"><strong>FRONT END: </strong></span> React JS, React Router, CSS, HTML
<br><span style="color: white"><strong>BACK END: </strong></span> PostgreSQL, Express.js</p>
<hr class="portfoliohr" style="margin-bottom: 35px; border-top: 4px solid white;">
<iframe class="video-embed" src="https://www.youtube.com/embed/c8W4gY5V11w" frameborder="0" allow="autoplay; encrypted-media" allowfullscreen></iframe>
<br><br>
<button type="button" class="btn btn-default portfolio-button" data-dismiss="modal"><i class="fa fa-times"></i> Close</button>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="portfolio-modal modal fade" id="portfolioModal8" tabindex="-1" role="dialog" aria-hidden="true">
<div class="modal-content">
<div class="close-modal" data-dismiss="modal">
<div class="lr">
<div class="rl">
</div>
</div>
</div>
<div class="container">
<div class="row">
<div class="col-lg-8 col-lg-offset-2">
<div class="modal-body">
<a href="https://github.com/albertchanged/ticketfaster" target="_blank" class="titlelink"><h2 class="portfoliotitle">Ticketfaster<img src="img/portfolio/linkblue.png" class="linkpic"/></h2></a>
<h3 class="portfoliorole">Full Stack Software Engineer</h3>
<hr class="portfoliohr" style="border-top: 4px solid white;">
<p class="portfolioinfo dividertitle"><strong>Overview</strong><p>
<p class="portfolioinfo">Tired of ads and other irrelevant aspects on ticket purchasing websites?</p>
<p class="portfolioinfo">Ticketfaster is a ticket purchasing platform that finds you exactly what you are looking for: event tickets, faster!</p>
<p class="portfolioinfo">I architected the front end portion with React, and powered the application with Ticketmaster's API and a back end of Sequelize ORM (in MySQL dialect) and Express.js.</p>
<p class="portfolioinfo">The biggest challenge that I faced while developing Ticketfaster was enabling components to re-render with new data within the same page.</p>
<p class="portfolioinfo">I accomplished that by adding multi-layer callback functions that set component states to new data, thereby re-rendering them as desired.</p>
<p class="portfolioinfo">Check out the <a href="https://github.com/albertchanged/ticketfaster" target="_blank">GitHub repo</a>!</p>
<p class="portfolioinfo dividertitle"><strong>Technologies Used</strong></p>
<p class="portfolioinfo"><span style="color: white"><strong>FRONT END: </strong></span> React JS, CSS, HTML
<br><span style="color: white"><strong>BACK END: </strong></span> Sequelize ORM, Express.js, Ticketmaster API</p>
<hr class="portfoliohr" style="margin-bottom: 35px; border-top: 4px solid white;">
<iframe class="video-embed" src="https://www.youtube.com/embed/p5ptaZFyc_w" frameborder="0" allow="autoplay; encrypted-media" allowfullscreen></iframe>
<br><br>
<button type="button" class="btn btn-default portfolio-button" data-dismiss="modal"><i class="fa fa-times"></i> Close</button>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="portfolio-modal modal fade" id="portfolioModal9" tabindex="-1" role="dialog" aria-hidden="true">
<div class="modal-content">
<div class="close-modal" data-dismiss="modal">
<div class="lr">
<div class="rl">
</div>
</div>
</div>