tag:blogger.com,1999:blog-124020252024-03-13T11:51:38.757+00:00TEE: Teki Editorial EverywhereInsightful, In-depth & InteractiveTeki Chanhttp://www.blogger.com/profile/10757919473525051617noreply@blogger.comBlogger309125tag:blogger.com,1999:blog-12402025.post-67291000272242687972024-01-11T22:35:00.002+00:002024-01-16T22:42:12.107+00:00Event: Manchester Coding Dojo<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiEyHgAJtTIdO0WjJHSPEARgJB6K-kmCRQf8GRLIGwAtCjiYGbDH_Tz-r7bpLeskI2BMEWA6hPA4iyf_jnceLPCvaxA2z7hYVv3e-2fn3CnF9JMELB_NKpJKJjEP3-P8DoNZPrWp5rSQmXW4CYz76zvrT3Y8BEZktFiQCM6k1cg4kyUma_xFfHr/s1920/CodeDojo.JPG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="1440" data-original-width="1920" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiEyHgAJtTIdO0WjJHSPEARgJB6K-kmCRQf8GRLIGwAtCjiYGbDH_Tz-r7bpLeskI2BMEWA6hPA4iyf_jnceLPCvaxA2z7hYVv3e-2fn3CnF9JMELB_NKpJKJjEP3-P8DoNZPrWp5rSQmXW4CYz76zvrT3Y8BEZktFiQCM6k1cg4kyUma_xFfHr/s320/CodeDojo.JPG" width="320" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">Coding Dojo</td></tr></tbody></table><p>Thank you to <a href="https://www.codurance.com/" target="_blank">Codurance</a> for organising Coding Dojo to learn <a href="https://en.wikipedia.org/wiki/Test-driven_development" target="_blank">Test Driven Development</a>. We did not only taste TDD and JS but also explored <a href="https://copilot.microsoft.com/" target="_blank">Copilot</a>, Team Collaboration, Project Management, Methodology, etc. Networking seemed endless after the talk. No wonder why <a href="https://www.manchesterdigital.com/" target="_blank">this city</a> became a hub of talents. </p><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEijY2jtCq46dBC-Jx_pn5GfOgOT_Kc0VPJwC_cXjY1X_x4ZICBGqVjC2dC7_XIDb-G13zGWVpjW5uelBSyJp1oHsf-Gv8NWT97sWSWWbhX25zk5My1Ayxch6UNV8hHSl245w00fmK6QM0LoAfHyZfecfXlS39310F67ceapYDiPmTeNhpgexoYi/s4032/Department_Bonded_Warehouse.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="3024" data-original-width="4032" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEijY2jtCq46dBC-Jx_pn5GfOgOT_Kc0VPJwC_cXjY1X_x4ZICBGqVjC2dC7_XIDb-G13zGWVpjW5uelBSyJp1oHsf-Gv8NWT97sWSWWbhX25zk5My1Ayxch6UNV8hHSl245w00fmK6QM0LoAfHyZfecfXlS39310F67ceapYDiPmTeNhpgexoYi/s320/Department_Bonded_Warehouse.jpg" width="320" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">Outside Department Bonded Warehouse</td></tr></tbody></table><br /><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjDTSYX_hulOCuEyoYbviuaqv7r6wRAsy51ayzQQ7UBDNF4orR6SsAe_FWP31BIW_JF-u_5y1HbZDDD1g08Ht1r27EIdQcphxH8r9bGQyoqUXsZh-UFBrKRB4pm7f9zqZX2zt-QiHbSjm-wnyn-1_LPEJcpb_WgdoGlwQXRB0eq27PzshYUOtYV/s4032/Inside_DB_Warehouse.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="3024" data-original-width="4032" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjDTSYX_hulOCuEyoYbviuaqv7r6wRAsy51ayzQQ7UBDNF4orR6SsAe_FWP31BIW_JF-u_5y1HbZDDD1g08Ht1r27EIdQcphxH8r9bGQyoqUXsZh-UFBrKRB4pm7f9zqZX2zt-QiHbSjm-wnyn-1_LPEJcpb_WgdoGlwQXRB0eq27PzshYUOtYV/s320/Inside_DB_Warehouse.jpg" width="320" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">Inside Department Bonded Warehouse</td></tr></tbody></table><br /><p><br /></p>Teki Chanhttp://www.blogger.com/profile/10757919473525051617noreply@blogger.com018 Lower Byrom St, Manchester M3 4AP, UK53.4778198 -2.256119825.167585963821153 -37.4123698 81.788053636178844 32.9001302tag:blogger.com,1999:blog-12402025.post-32120162449298213642023-12-25T22:22:00.001+00:002024-01-16T22:30:34.393+00:00Monty Hall Problem Simulation<p><span style="color: #4c1130; font-family: courier;">"""</span></p><p><span style="color: #4c1130; font-family: courier;">This is a simulation of Monty Hall Problem.</span></p><p><span style="color: #4c1130; font-family: courier;">https://en.wikipedia.org/wiki/Monty_Hall_problem</span></p><p><span style="color: #4c1130; font-family: courier;"><br /></span></p><p><span style="color: #4c1130; font-family: courier;">Suppose you're on a game show, and you're given the choice of three doors: Behind one door is a car; behind the others, goats.</span></p><p><span style="color: #4c1130; font-family: courier;">You pick a door, say No. 1, and the host, who knows what's behind the doors, opens another door, say No. 3, which has a goat.</span></p><p><span style="color: #4c1130; font-family: courier;">He then says to you, "Do you want to pick door No. 2?" Is it to your advantage to switch your choice?</span></p><p><span style="color: #4c1130; font-family: courier;">"""</span></p><p><span style="font-family: courier;"><span style="color: #2b00fe;">import</span> random</span></p><p><span style="font-family: courier;"><br /></span></p><p><span style="font-family: courier;">NUM_DOORS = 3 <span style="color: #274e13;"># three doors in the game</span></span></p><p><span style="font-family: courier;">MAX_ROUND = 10000 <span style="color: #274e13;"># number of rounds for statistics</span></span></p><p><span style="font-family: courier;"><br /></span></p><p><span style="font-family: courier;">change_win_count = 0</span></p><p><span style="font-family: courier;"><br /></span></p><p><span style="font-family: courier;"><span style="color: #2b00fe;">for</span> _ <span style="color: #2b00fe;">in</span> <span style="color: #ffa400;">range</span>(MAX_ROUND):</span></p><p><span style="font-family: courier;"> <span style="color: #274e13;"># randomly to put a car behind a door</span></span></p><p><span style="font-family: courier;"> car_door = random.<span style="color: #ffa400;">randint</span>(0, NUM_DOORS - 1)</span></p><p><span style="font-family: courier;"> <span style="color: #274e13;"># the player firstly selects a door</span></span></p><p><span style="font-family: courier;"> player_first_guess = random.<span style="color: #ffa400;">randint</span>(0, NUM_DOORS - 1)</span></p><p><span style="font-family: courier;"> <span style="color: #274e13;"># the host opens another door without a car</span></span></p><p><span style="font-family: courier;"> host_door = random.<span style="color: #ffa400;">choice</span>([</span></p><p><span style="font-family: courier;"> x <span style="color: #2b00fe;">for</span> x <span style="color: #2b00fe;">in</span> <span style="color: #ffa400;">range</span>(NUM_DOORS) <span style="color: #2b00fe;">if</span> x != player_first_guess <span style="color: #2b00fe;">and</span> x != car_door</span></p><p><span style="font-family: courier;"> ])</span></p><p><span style="font-family: courier;"> <span style="color: #274e13;"># the option if the player changes his mind</span></span></p><p><span style="font-family: courier;"> player_second_guess = random.<span style="color: #ffa400;">choice</span>([</span></p><p><span style="font-family: courier;"> x <span style="color: #2b00fe;">for</span> x <span style="color: #2b00fe;">in</span> <span style="color: #ffa400;">range</span>(NUM_DOORS) <span style="color: #2b00fe;">if</span> x != player_first_guess <span style="color: #2b00fe;">and</span> x != host_door</span></p><p><span style="font-family: courier;"> ])</span></p><p><span style="font-family: courier;"><br /></span></p><p><span style="font-family: courier;"> <span style="color: #274e13;"># count the win if the second guess is correct</span></span></p><p><span style="font-family: courier;"> <span style="color: #2b00fe;">if</span> player_second_guess == car_door:</span></p><p><span style="font-family: courier;"> change_win_count += 1</span></p><p><span style="font-family: courier;"><br /></span></p><p><span style="color: #274e13; font-family: courier;"># Print the statistics result</span></p><p><span style="font-family: courier;">print("<span style="color: #800180;">Win percentage if you switch the choice is {r:.2f}%</span>".<span style="color: #ffa400;">format</span>(</span></p><p><span style="font-family: courier;"> r=(change_win_count * 100) / MAX_ROUND))</span></p><div><br /></div>Teki Chanhttp://www.blogger.com/profile/10757919473525051617noreply@blogger.com0tag:blogger.com,1999:blog-12402025.post-22380543580683860262023-09-08T12:47:00.002+00:002023-12-26T13:14:45.287+00:00Small Step, Giant Leap<p> <table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhtySiZmwucc13TtN7-L1ukABGmFTzaV5Rz-kW6U1C5ZsG2otGX5A5_rdwFaGchWVcR7AXZs77E92z40IdkGp4ebvvtpKDWJNCFT5m_jynfBf1DnlwD6KkBuE4w9c88BW1Sd1vLUgxlCoOOIlRIce-4MAilIlF_QA6eWf-7ftgtgQWFNr3zlY2Z/s828/1694384811395.jpeg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="621" data-original-width="828" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhtySiZmwucc13TtN7-L1ukABGmFTzaV5Rz-kW6U1C5ZsG2otGX5A5_rdwFaGchWVcR7AXZs77E92z40IdkGp4ebvvtpKDWJNCFT5m_jynfBf1DnlwD6KkBuE4w9c88BW1Sd1vLUgxlCoOOIlRIce-4MAilIlF_QA6eWf-7ftgtgQWFNr3zlY2Z/s320/1694384811395.jpeg" width="320" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">Looms in Quarry Bank</td></tr></tbody></table><br /></p><p>Check out these two antique looms displayed in Quarry Bank of National Trust </p><p>Although they look similar, the left one comes with a tiny gadget called Flying Shuttle. This small improvement dramatically increased the productivity over tenfold. John Kay might not have even imagined how much his invention would become a catalyst for the Industrial Revolution and have profound effects on the world history. </p><p>You know what? Keep dreaming, innovating, and moving ahead. You never know your next small step could be a giant leap for mankind.</p><div><br /></div>Teki Chanhttp://www.blogger.com/profile/10757919473525051617noreply@blogger.com0Styal Rd, Styal, Wilmslow SK9 4HP, UK53.345190500000008 -2.246935825.034956663821163 -37.4031858 81.655424336178854 32.9093142tag:blogger.com,1999:blog-12402025.post-67418922934369389872023-09-06T13:04:00.000+00:002023-09-06T13:04:26.785+00:00Pluses and Minuses: How Math Solves Our Problems<p> </p><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><span style="margin-left: auto; margin-right: auto;"><a href="https://www.amazon.co.uk/Pluses-Minuses-Math-Solves-Problems/dp/0143134582" target="_blank"><img border="0" data-original-height="499" data-original-width="332" height="499" src="https://m.media-amazon.com/images/I/41G869uQ9xL._SX330_BO1,204,203,200_.jpg" width="332" /></a></span></td></tr><tr><td class="tr-caption" style="text-align: center;"><a href="https://www.amazon.co.uk/Pluses-Minuses-Math-Solves-Problems/dp/0143134582" target="_blank">Pluses and Minuses: How Math Solves Our Problems</a></td></tr></tbody></table><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: left;"><br /></div>"Pluses and Minuses: How Math Solves Our Problems" by Stefan Buijsman is a thought provoking book about the role of Mathematics in our daily life.<div><br /></div><div>The book starts with examples of Google Map and Netflix to present that Maths is not only an abstract exercise in a classroom but also closely related with us everyday. Following that, it describes how human being interpret Maths and its development along the history in various cultures.</div><div><br /></div><div>The later chapters demonstrate about the history and applications of two advanced topics, Calculus and Probability. The last topic is about graph theory and explores its usage in navigation, streaming service, cancer treatment and social media.</div><div><br /></div><div>The last chapter is not only a conclusion but also rethinks the nature of Maths and how we correctly and mistakenly apply it in our daily experiences.</div><div><br /></div><div>While the book contains a few content describing Maths formula and theorems in this book, it primarily focuses on the interactions between Maths and human being, including historical context, cultural significance, and practical uses. They sound quite engaging. They also reflect how deeply the author understands Maths in the position of our society.</div><div><br /></div><div>One more thing I learnt from this book is how to illustrate some complex concept, e.g. a brand new system solution, to audience regardless of their background. Like this book, we can start an immediate example which is related with the concept, then trace what if the concept is not in place, some stories of its development (not a big bang, not a surprise) and behind the scenes, and finally bring out how the complication leads opportunity. This approach is to package the new concept to sound easier, familiar and more pleasant.</div><div><br /></div><div>In summary, this book is such captivating and accessible that effectively bridges the gap between Maths and our everyday life. The author is able to connect mathematical concepts with real-world examples, historical context, and cultural significance makes this book a compelling read for anyone interested in understanding the pervasive role of mathematics in our society.</div><div><br /><div><br /></div><div><br /></div></div>Teki Chanhttp://www.blogger.com/profile/10757919473525051617noreply@blogger.com0tag:blogger.com,1999:blog-12402025.post-9263314692061681222023-08-17T22:04:00.003+00:002023-09-06T11:51:57.734+00:00Event: Developer Productivity Engineering: What's in it for me?<p>Manchester Java Community hosted another great session in <a href="https://www.thoughtworks.com/" target="_blank">Thoughtworks</a>. The speaker is <a href="https://trishagee.com/" target="_blank">Trisha Gee</a>, co-author of the renowned book <a href="https://www.amazon.co.uk/Head-First-Java-3rd-Brain-Friendly/dp/1491910771" target="_blank">Head First Java</a>. </p><p>The speaker pointed out that the productivity of developers did not mainly come from individual developer themselves but from the organisation which offers productive environments or not. The factor includes work space size, quietness, privateness, any diversion or needless interruption.</p><p>On technology side, productivity can be improved by consistency and reliability of builds. Very fast feedback can improve productivity and quality, thus increase revenue, reduce cost and improve brand.</p><h3 style="text-align: left;">References:</h3><p></p><ul style="text-align: left;"><li><a href="https://trishagee.com/presentations/developer-productivity-engineering-whats-in-it-for-me/" target="_blank">DEVELOPER PRODUCTIVITY ENGINEERING: WHAT’S IN IT FOR ME?</a></li><li><a href="https://tidelift.com/subscription/managed-open-source-survey" target="_blank">The 2019 Tidelift managed open source survey results</a></li><li><a href="https://www.amazon.co.uk/Peopleware-Productive-Projects-Tom-DeMarco/dp/0932633439" target="_blank">Peopleware: Productive Projects and Teams</a></li><li><a href="https://trace.tennessee.edu/cgi/viewcontent.cgi?article=1010&context=utk_harlan" target="_blank">Software Productivity</a> </li><li><a href="https://www.amazon.co.uk/Goal-Process-Ongoing-Improvement/dp/0884271951" target="_blank">The Goal: A Process of Ongoing Improvement</a></li><li><a href="https://docs.gradle.org/current/userguide/performance.html" target="_blank">Improve the Performance of Gradle Builds</a></li><li><a href="https://builds.gradle.org/project/Gradle" target="_blank">CI fanout</a></li><li><a href="https://gradle.com/blog/netflix-pursues-soft-devex-goals-with-hard-devprod-metrics-using-test-distribution/" target="_blank">Netflix Pursues Soft DevEx Goals with Hard DevProd Metrics using Test Distribution</a></li><li><a href="https://arxiv.org/pdf/1810.05286.pdf" target="_blank">Predictive Test Selection</a></li><li><a href="https://scans.gradle.com/" target="_blank">Get started with Build Scan for Gradle, Apache Maven, and sbt</a></li><li><a href="https://youtube.com/playlist?list=PLLQbIfXVLZqH4Ag5Og8VXYpJV9AworvXm" target="_blank">Using the Build Scan Service to Troubleshoot Build Failures</a></li><li><a href="https://mcminn.info/publications/Parry2022a.pdf" target="_blank">Surveying the Developer Experience of Flaky Tests</a></li><li><a href="https://www.youtube.com/watch?v=vHBzZHE4tJ0" target="_blank">5 Reasons Your Automated Tests Fail</a></li><li><a href="https://www.amazon.co.uk/Release-Design-Deploy-Production-Ready-Software/dp/1680502395/ref=pd_lpo_sccl_1/261-6846402-0747155?pd_rd_w=wkUZJ&content-id=amzn1.sym.efc89c20-c5a9-4620-b6cd-2f4e51bac956&pf_rd_p=efc89c20-c5a9-4620-b6cd-2f4e51bac956&pf_rd_r=40TPBV3Q88FFT6GQ4SAS&pd_rd_wg=TmkUY&pd_rd_r=0eb2f7a1-af43-4234-84d5-d37fe66bc104&pd_rd_i=1680502395&psc=1" target="_blank">Release It! Design and Deploy Production–Ready Software</a></li></ul><p></p><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh1eUv58fqCVy23YvD4RwJsKtKZez_wfU2AT6rtSXbu3TWyBGYYxm-RPTTP6yy0cFdmPWgHgnn1Rb3QZll4M5Mt5-qsU6QgA3noMn45DJrY-lanft46_pIuoP_DmaG3qP1b8t_zrfOVNIYdvwpTW_Woz6IHhvjw06TVQXc-6Xh_BCNjDvs6AARq/s2662/Trisha_and_Teki.jpg" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="2662" data-original-width="2662" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh1eUv58fqCVy23YvD4RwJsKtKZez_wfU2AT6rtSXbu3TWyBGYYxm-RPTTP6yy0cFdmPWgHgnn1Rb3QZll4M5Mt5-qsU6QgA3noMn45DJrY-lanft46_pIuoP_DmaG3qP1b8t_zrfOVNIYdvwpTW_Woz6IHhvjw06TVQXc-6Xh_BCNjDvs6AARq/s320/Trisha_and_Teki.jpg" width="320" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">Trisha Gee and Head First Java</td></tr></tbody></table><div class="separator" style="clear: both; text-align: center;"><br /></div><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhcDvvY-nUnpvbnsHojrCEdkE76Si4Zwb0ltC_T1ncUxKkAH-9CBTim06Px9X7gLdoeP7ZxxK6o990ptzAmvXmrHM2ji5T8Q7bpR7kVosdvJpnOR3J2bMNp0Yrn7EeLPkHUu7mQOjwhh8P4u9Iv-dkf4op7T0uCyKV2qy_GQ1XWhRbRzAECE5aw/s3905/author_signature.jpg" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="2929" data-original-width="3905" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhcDvvY-nUnpvbnsHojrCEdkE76Si4Zwb0ltC_T1ncUxKkAH-9CBTim06Px9X7gLdoeP7ZxxK6o990ptzAmvXmrHM2ji5T8Q7bpR7kVosdvJpnOR3J2bMNp0Yrn7EeLPkHUu7mQOjwhh8P4u9Iv-dkf4op7T0uCyKV2qy_GQ1XWhRbRzAECE5aw/s320/author_signature.jpg" width="320" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">Author Signature</td></tr></tbody></table><br /><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgo7bvcOsSGm2SbQduYaypSwdpxqEIsom5FOqdzMPsrYwFjejqQU_rZu2vv6htni4b0j0tNusclkyBN-evZ8LYBQaTIsyYuGSmjHV6yr66GCa94X79ADpXHjtmlNfBJFFXhNhdxcMmQDLeiDe6XMnDfrNL2XlQGb7BUsewsE2NQMfS_kC1XfMnS/s4032/In_ThoughtWorks.jpg" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="3024" data-original-width="4032" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgo7bvcOsSGm2SbQduYaypSwdpxqEIsom5FOqdzMPsrYwFjejqQU_rZu2vv6htni4b0j0tNusclkyBN-evZ8LYBQaTIsyYuGSmjHV6yr66GCa94X79ADpXHjtmlNfBJFFXhNhdxcMmQDLeiDe6XMnDfrNL2XlQGb7BUsewsE2NQMfS_kC1XfMnS/s320/In_ThoughtWorks.jpg" width="320" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">Inside Thoughtworks</td></tr></tbody></table><br /><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjBfVPVpWasjgTblmoRRrLYeMUATlj_xNYZ5K00ex9wImc9RoH899tq24bPKj32gHy8H-OigjmuxuXeL0PWt0UiDaMldubD4XWdxlOZLi8pAIbq9ah43Oj0IR45xVqxbVyJOvJoLr3j55tdjWo1OB_4l5biFFqsa72z7maDb7dCSkn_9JiTZWoa/s4032/In_ThoughtWorks_2.jpg" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="3024" data-original-width="4032" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjBfVPVpWasjgTblmoRRrLYeMUATlj_xNYZ5K00ex9wImc9RoH899tq24bPKj32gHy8H-OigjmuxuXeL0PWt0UiDaMldubD4XWdxlOZLi8pAIbq9ah43Oj0IR45xVqxbVyJOvJoLr3j55tdjWo1OB_4l5biFFqsa72z7maDb7dCSkn_9JiTZWoa/s320/In_ThoughtWorks_2.jpg" width="320" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">Inside Thoughtworks</td></tr></tbody></table><br /><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgqFWlIQ-WD1XAxrJ6IFHKQICkyQLFdGFzE64M6Kdk5AdoX0lD6V0BndFbRNlFvKjpbXvYgqCL4LJbDxcRRDS7VZS5RqmYO_gizoukuZPJatq4cnFCqfBm0m5qAQ8GYCozOg1fby9Xf7vLFtYtwkK48pNeOqjz1dakmmpQk0DfLORZpQJIesqsj/s4032/Out_ThoughtWorks.jpg" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="4032" data-original-width="3024" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgqFWlIQ-WD1XAxrJ6IFHKQICkyQLFdGFzE64M6Kdk5AdoX0lD6V0BndFbRNlFvKjpbXvYgqCL4LJbDxcRRDS7VZS5RqmYO_gizoukuZPJatq4cnFCqfBm0m5qAQ8GYCozOg1fby9Xf7vLFtYtwkK48pNeOqjz1dakmmpQk0DfLORZpQJIesqsj/s320/Out_ThoughtWorks.jpg" width="240" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">Outside Thoughtworks</td></tr></tbody></table><br /><div class="separator" style="clear: both; text-align: center;"><br /></div><br /><p><br /></p>Teki Chanhttp://www.blogger.com/profile/10757919473525051617noreply@blogger.com04, Federation House, 2 Federation St, Manchester M4 4BF, UK53.4860507 -2.23990225.175816863821154 -37.396152 81.796284536178845 32.916348tag:blogger.com,1999:blog-12402025.post-38767969241070644532023-07-13T22:25:00.003+00:002023-07-13T22:51:11.915+00:00Event: Be a better Java developer, learn faster and get more results!<p>I joined a meetup brought by <a href="https://manchesterjavacommunity.org/" target="_blank">Manchester Java Community</a> at <a href="https://www.roku.com/" target="_blank">Roku</a>'s office. The topic is <b>Be a better Java developer, learn faster and get more results!</b></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgkgnThjnkIPI_IQoP15Cnj3-XGzzDL8GaxTcsvVRmP0rmgQV-sRpP8Xgu1M1LWbk4kPjFjyqFenmVGYYeiuwEDr2pDu3jnne4Y_iDArKWGFkjlXmhhdBr5uoTF6kaGyvdAt03edzuxiEBMY9yHL13ODJZt7Li8jWfYNXHsicp9HnJl1aOWcTCo/s1024/Floor12_One_CircleSquare.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="269" data-original-width="1024" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgkgnThjnkIPI_IQoP15Cnj3-XGzzDL8GaxTcsvVRmP0rmgQV-sRpP8Xgu1M1LWbk4kPjFjyqFenmVGYYeiuwEDr2pDu3jnne4Y_iDArKWGFkjlXmhhdBr5uoTF6kaGyvdAt03edzuxiEBMY9yHL13ODJZt7Li8jWfYNXHsicp9HnJl1aOWcTCo/s16000/Floor12_One_CircleSquare.jpg" /></a></div><p>The speech started with the dynamic trios:</p><p></p><ul style="text-align: left;"><li>Fire your neurons: learn by doing</li><li>Force to practise</li><li>Frequent action</li></ul><div>The captivating speaker also shared back stories of recruitment and his own secret of Reputation Formula, i.e.,</div><div><span style="color: #274e13; font-family: courier;">Career Reputation = (Focus * Visibility * Action * Skill [XP] * Giver * Responsibility * Consistency) / ((Me-me-me) * Lies^2 * Difficult)</span></div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg2cUzMIBvtVvXVgrerlCUGcOlsx4djZWPRYwnd2Td1OVOdN14z_69BSjnLCMNT03ToOyD_bECAyImElTS_jBJhXgPfFjPM2TuXMPEZzwkybBUEt5vlokUv7f9dn0oCBV8dUlwJLxQcgv69KUDqdb2pPsq_Ul2FgdHDnSGTyYGCbItKyf-fao6Z/s1024/meetup_230713.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="552" data-original-width="1024" height="173" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg2cUzMIBvtVvXVgrerlCUGcOlsx4djZWPRYwnd2Td1OVOdN14z_69BSjnLCMNT03ToOyD_bECAyImElTS_jBJhXgPfFjPM2TuXMPEZzwkybBUEt5vlokUv7f9dn0oCBV8dUlwJLxQcgv69KUDqdb2pPsq_Ul2FgdHDnSGTyYGCbItKyf-fao6Z/s320/meetup_230713.jpg" width="320" /></a></div><div><br /></div><div>In Q&A session, we delved into burning questions like the future of AI in developer jobs and whether Java will be the next COBOL. </div><div><br /></div><div>Thank you very much to <a href="https://twitter.com/brjavaman" target="_blank">Bruno Souza</a> for his fascinating speech and inspirational career advice.</div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjJtSvyoBDVrCArcjhtDVVQipIe7k95YoL3j0atMcfwN0vHZjvMYMLFZZUjo5rlbrJfTtvE4M3trfHXW5ar5ATsPcAlNVVhzIKxOV_P5Qx45rCW_d9xu5R85Q2Bln7gAaeRDNhiBn0oLK8kbkJ0kWHz-FetbalUnYVbMh8zIoyUwESebXD3fAPm/s1024/Bruno_Souza.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1024" data-original-width="1024" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjJtSvyoBDVrCArcjhtDVVQipIe7k95YoL3j0atMcfwN0vHZjvMYMLFZZUjo5rlbrJfTtvE4M3trfHXW5ar5ATsPcAlNVVhzIKxOV_P5Qx45rCW_d9xu5R85Q2Bln7gAaeRDNhiBn0oLK8kbkJ0kWHz-FetbalUnYVbMh8zIoyUwESebXD3fAPm/s320/Bruno_Souza.jpg" width="320" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><br /></div><br /><div><br /></div><p></p>Teki Chanhttp://www.blogger.com/profile/10757919473525051617noreply@blogger.com03 Symphony Park, Manchester M1 7FS英國53.473158299999987 -2.239285125.162924463821142 -37.395535100000004 81.783392136178833 32.916964899999996tag:blogger.com,1999:blog-12402025.post-50892826212325076252023-06-27T09:10:00.003+00:002023-06-27T09:11:49.558+00:00Ethical Hacking 101<p>In today's digital landscape, software security is paramount. To safeguard applications from cyber attacks, developers must embrace Ethical Hacking—an innovative approach that empowers them to uncover vulnerabilities and strengthen security measures.</p><p>Ethical Hacking involves adopting the mindset of malicious hackers to identify weaknesses and fortify defences against unauthorised access, data breaches, and other threats. By integrating this practice into the coding process, developers gain valuable insights, proactively mitigating risks and creating more robust and secure software systems. <br /><br /><span class="TextRun SCXO243379094 BCX0" color="windowtext" data-contrast="auto" face="Calibri, sans-serif" lang="EN-GB" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; font-size: 11pt; font-variant-ligatures: none; line-height: 17px; margin: 0px; padding: 0px; user-select: text;" xml:lang="EN-GB">I took a basic lesson from <a href="https://snyk.io/" target="_blank">Snyk</a> about Ethical Hacking, which helps me consider security measures in coding.</span><span class="EOP SCXO243379094 BCX0" color="windowtext" face="Calibri, sans-serif" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: white; font-size: 11pt; line-height: 17px; margin: 0px; padding: 0px; user-select: text;"> </span></p><div class="OutlineElement Ltr BCX0 SCXO224470427" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: white; clear: both; cursor: text; direction: ltr; font-family: "Segoe UI", "Segoe UI Web", Arial, Verdana, sans-serif; font-size: 12px; margin: 0px; overflow: visible; padding: 0px; position: relative; user-select: text;"><h2 style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; color: windowtext; font-kerning: none; margin: 0px; overflow-wrap: break-word; padding: 0px; text-align: left; user-select: text; vertical-align: baseline;"><span class="TextRun SCXO224470427 BCX0" color="windowtext" data-contrast="auto" face="Calibri, sans-serif" lang="EN-GB" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; font-size: 11pt; font-variant-ligatures: none; line-height: 17px; margin: 0px; padding: 0px; user-select: text;" xml:lang="EN-GB">Process</span><span class="EOP SCXO224470427 BCX0" color="windowtext" face="Calibri, sans-serif" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; font-size: 11pt; line-height: 17px; margin: 0px; padding: 0px; user-select: text;"> </span></h2><span class="TextRun SCXO224470427 BCX0" color="windowtext" data-contrast="auto" face="Calibri, sans-serif" lang="EN-GB" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; font-size: 11pt; font-variant-ligatures: none; line-height: 17px; margin: 0px; padding: 0px; user-select: text;" xml:lang="EN-GB"><ul><li><span class="TextRun SCXO224470427 BCX0" color="windowtext" data-contrast="auto" face="Calibri, sans-serif" lang="EN-GB" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; font-size: 11pt; font-variant-ligatures: none; line-height: 17px; margin: 0px; padding: 0px; user-select: text;" xml:lang="EN-GB">Plan & Prepare (</span><span class="TextRun SCXO224470427 BCX0" color="windowtext" data-contrast="auto" face="Calibri, sans-serif" lang="EN-US" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; font-size: 11pt; font-variant-ligatures: none; line-height: 17px; margin: 0px; padding: 0px; user-select: text;" xml:lang="EN-US">Reconnaissance phase)</span><span class="EOP SCXO224470427 BCX0" color="windowtext" face="Calibri, sans-serif" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; font-size: 11pt; line-height: 17px; margin: 0px; padding: 0px; user-select: text;"> </span></li><li>Scan & Enumerate<span class="EOP SCXO224470427 BCX0" color="windowtext" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; font-size: 11pt; line-height: 17px; margin: 0px; padding: 0px; user-select: text;"> </span></li><li>Exploit<span class="EOP SCXO224470427 BCX0" color="windowtext" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; font-size: 11pt; line-height: 17px; margin: 0px; padding: 0px; user-select: text;"> </span></li><li>Analyse & Report</li><li>Communicate & Collaborate</li><li><span class="TextRun SCXO224470427 BCX0" color="windowtext" data-contrast="auto" lang="EN-GB" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; font-size: 11pt; font-variant-ligatures: none; line-height: 17px; margin: 0px; padding: 0px; user-select: text;" xml:lang="EN-GB">Continuous Education & Professional Development</span><span class="EOP SCXO224470427 BCX0" color="windowtext" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; font-size: 11pt; line-height: 17px; margin: 0px; padding: 0px; user-select: text;"> </span></li></ul></span></div><div class="OutlineElement Ltr BCX0 SCXO224470427" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: white; clear: both; cursor: text; direction: ltr; font-family: "Segoe UI", "Segoe UI Web", Arial, Verdana, sans-serif; margin: 0px; overflow: visible; padding: 0px; position: relative; user-select: text;"><h2 style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; color: windowtext; font-kerning: none; font-size: 12px; margin: 0px; overflow-wrap: break-word; padding: 0px; text-align: left; user-select: text; vertical-align: baseline;"><span class="TextRun SCXO224470427 BCX0" color="windowtext" data-contrast="auto" face="Calibri, sans-serif" lang="EN-GB" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; font-size: 11pt; font-variant-ligatures: none; line-height: 17px; margin: 0px; padding: 0px; user-select: text;" xml:lang="EN-GB">Tools</span><span class="EOP SCXO224470427 BCX0" color="windowtext" face="Calibri, sans-serif" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; font-size: 11pt; line-height: 17px; margin: 0px; padding: 0px; user-select: text;"> </span></h2><div style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; color: windowtext; font-kerning: none; margin: 0px; overflow-wrap: break-word; padding: 0px; text-align: left; user-select: text; vertical-align: baseline;"><ul style="text-align: left;"><li><a href="https://nmap.org/" target="_blank">Nmap</a>: network scanner<span class="EOP SCXO224470427 BCX0" color="windowtext" face="Calibri, sans-serif" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; line-height: 17px; margin: 0px; padding: 0px; user-select: text;"> <br /></span></li><li><span class="TextRun SCXO224470427 BCX0" color="windowtext" data-contrast="auto" lang="EN-US" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; font-variant-ligatures: none; line-height: 17px; margin: 0px; padding: 0px; user-select: text;" xml:lang="EN-US"><a href="https://portswigger.net/burp" target="_blank">Burp Suite</a>: security testing of web applications</span><span class="EOP SCXO224470427 BCX0" color="windowtext" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; line-height: 17px; margin: 0px; padding: 0px; user-select: text;"> <br /></span></li><li><span class="TextRun SCXO224470427 BCX0" color="windowtext" data-contrast="auto" lang="EN-GB" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; font-variant-ligatures: none; line-height: 17px; margin: 0px; padding: 0px; user-select: text;" xml:lang="EN-GB"><a href="https://www.metasploit.com/">Metasploit</a>: penetration tests</span><span class="EOP SCXO224470427 BCX0" color="windowtext" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; line-height: 17px; margin: 0px; padding: 0px; user-select: text;"> <br /></span></li><li><span class="TextRun SCXO224470427 BCX0" color="windowtext" data-contrast="auto" lang="EN-GB" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; font-variant-ligatures: none; line-height: 17px; margin: 0px; padding: 0px; user-select: text;" xml:lang="EN-GB"><a href="https://www.wireshark.org/" target="_blank">Wireshark</a>: packet analyser</span><span class="EOP SCXO224470427 BCX0" color="windowtext" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; line-height: 17px; margin: 0px; padding: 0px; user-select: text;"> <br /></span></li><li><span class="TextRun SCXO224470427 BCX0" color="windowtext" data-contrast="auto" lang="EN-GB" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; font-variant-ligatures: none; line-height: 17px; margin: 0px; padding: 0px; user-select: text;" xml:lang="EN-GB"><a href="https://www.maltego.com/" target="_blank">Maltego</a>: intelligence and forensics, </span><span class="TextRun SCXO224470427 BCX0" color="windowtext" data-contrast="auto" lang="EN-US" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; font-variant-ligatures: none; line-height: 17px; margin: 0px; padding: 0px; user-select: text;" xml:lang="EN-US">graphical link analysis for real-time data mining.</span><span class="EOP SCXO224470427 BCX0" color="windowtext" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; line-height: 17px; margin: 0px; padding: 0px; user-select: text;"> <br /></span></li><li><span class="TextRun SCXO224470427 BCX0" color="windowtext" data-contrast="auto" lang="EN-US" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; font-variant-ligatures: none; line-height: 17px; margin: 0px; padding: 0px; user-select: text;" xml:lang="EN-US"><a href="https://snyk.io/" target="_blank">Snyk</a>: scan, prioritize, and fix security vulnerabilities of codes</span><span class="EOP SCXO224470427 BCX0" color="windowtext" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; line-height: 17px; margin: 0px; padding: 0px; user-select: text;"> <br /></span></li><li><span class="TextRun SCXO224470427 BCX0" color="windowtext" data-contrast="auto" lang="EN-GB" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; font-variant-ligatures: none; line-height: 17px; margin: 0px; padding: 0px; user-select: text;" xml:lang="EN-GB"><a href="https://www.openwall.com/john/" target="_blank">John the Ripper</a>: password cracking tool</span><span class="EOP SCXO224470427 BCX0" color="windowtext" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; line-height: 17px; margin: 0px; padding: 0px; user-select: text;"> <br /></span></li><li><span class="TextRun SCXO224470427 BCX0" color="windowtext" data-contrast="auto" lang="EN-GB" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; font-variant-ligatures: none; line-height: 17px; margin: 0px; padding: 0px; user-select: text;" xml:lang="EN-GB"><a href="https://www.wappalyzer.com/" target="_blank">Wappalyzer</a>: Find out what websites are built with</span><span class="EOP SCXO224470427 BCX0" color="windowtext" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; line-height: 17px; margin: 0px; padding: 0px; user-select: text;"> <br /></span></li><li><span class="TextRun SCXO224470427 BCX0" color="windowtext" data-contrast="auto" lang="EN-GB" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; font-variant-ligatures: none; line-height: 17px; margin: 0px; padding: 0px; user-select: text;" xml:lang="EN-GB"><a href="https://www.kali.org/" target="_blank">Kali linux</a>: for digital forensics and penetration testing</span><span class="EOP SCXO224470427 BCX0" color="windowtext" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; line-height: 17px; margin: 0px; padding: 0px; user-select: text;"> </span></li></ul></div><ul class="BulletListStyle1 SCXO224470427 BCX0" role="list" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; cursor: text; font-family: verdana; font-size: 12px; margin: 0px; overflow: visible; padding: 0px; text-align: left; user-select: text;"><li><span class="EOP SCXO224470427 BCX0" color="windowtext" face="Calibri, sans-serif" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; font-size: 11pt; line-height: 17px; margin: 0px; padding: 0px; user-select: text;"> </span></li></ul></div><div class="OutlineElement Ltr SCXO224470427 BCX0" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: white; clear: both; cursor: text; direction: ltr; font-family: "Segoe UI", "Segoe UI Web", Arial, Verdana, sans-serif; margin: 0px; overflow: visible; padding: 0px; position: relative; user-select: text;"><h2 style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; color: windowtext; font-kerning: none; font-size: 12px; margin: 0px; overflow-wrap: break-word; padding: 0px; text-align: left; user-select: text; vertical-align: baseline;"><span class="TextRun SCXO224470427 BCX0" color="windowtext" data-contrast="auto" face="Calibri, sans-serif" lang="EN-GB" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; font-size: 11pt; font-variant-ligatures: none; line-height: 17px; margin: 0px; padding: 0px; user-select: text;" xml:lang="EN-GB">Best Practices</span><span class="EOP SCXO224470427 BCX0" color="windowtext" face="Calibri, sans-serif" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; font-size: 11pt; line-height: 17px; margin: 0px; padding: 0px; user-select: text;"> </span></h2><span class="TextRun SCXO224470427 BCX0" color="windowtext" data-contrast="auto" lang="EN-GB" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; font-family: verdana; font-variant-ligatures: none; line-height: 17px; margin: 0px; padding: 0px; user-select: text;" xml:lang="EN-GB"><ul style="text-align: left;"><li><span class="TextRun SCXO224470427 BCX0" color="windowtext" data-contrast="auto" lang="EN-GB" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; font-family: verdana; font-variant-ligatures: none; line-height: 17px; margin: 0px; padding: 0px; user-select: text;" xml:lang="EN-GB">Obtain permissions before conducting any testing</span><span class="EOP SCXO224470427 BCX0" color="windowtext" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; font-family: verdana; line-height: 17px; margin: 0px; padding: 0px; user-select: text;"> </span></li><li>Follow all relevant laws and regulations<span class="EOP SCXO224470427 BCX0" color="windowtext" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; line-height: 17px; margin: 0px; padding: 0px; user-select: text;"> </span></li><li>Do not use tools or techniques that could cause damage or disruption<span class="EOP SCXO224470427 BCX0" color="windowtext" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; line-height: 17px; margin: 0px; padding: 0px; user-select: text;"> </span></li><li>Use a risk-based approach<span class="EOP SCXO224470427 BCX0" color="windowtext" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; line-height: 17px; margin: 0px; padding: 0px; user-select: text;"> </span></li><li>Document your findings and provide a report to the owner<span class="EOP SCXO224470427 BCX0" color="windowtext" face="Calibri, sans-serif" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; line-height: 17px; margin: 0px; padding: 0px; user-select: text;"> </span></li></ul></span><blockquote style="border: none; margin: 0px 0px 0px 40px; padding: 0px;"></blockquote><p></p></div><div class="OutlineElement Ltr SCXO224470427 BCX0" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: white; clear: both; cursor: text; direction: ltr; font-family: "Segoe UI", "Segoe UI Web", Arial, Verdana, sans-serif; font-size: 12px; margin: 0px; overflow: visible; padding: 0px; position: relative; user-select: text;"><p class="Paragraph SCXO224470427 BCX0" lang="EN-GB" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; color: windowtext; font-kerning: none; margin: 0px; overflow-wrap: break-word; padding: 0px; user-select: text; vertical-align: baseline;" xml:lang="EN-GB"><span class="TextRun SCXO224470427 BCX0" color="windowtext" data-contrast="auto" face="Calibri, sans-serif" lang="EN-GB" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; font-size: 11pt; font-variant-ligatures: none; line-height: 17px; margin: 0px; padding: 0px; user-select: text;" xml:lang="EN-GB"><span class="NormalTextRun SCXO224470427 BCX0" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: inherit; margin: 0px; padding: 0px; user-select: text;"></span></span><span class="EOP SCXO224470427 BCX0" color="windowtext" face="Calibri, sans-serif" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; font-size: 11pt; line-height: 17px; margin: 0px; padding: 0px; user-select: text;"> </span></p></div><div class="OutlineElement Ltr SCXO224470427 BCX0" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: white; clear: both; cursor: text; direction: ltr; font-family: "Segoe UI", "Segoe UI Web", Arial, Verdana, sans-serif; font-size: 12px; margin: 0px; overflow: visible; padding: 0px; position: relative; user-select: text;"><h2 style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; color: windowtext; font-kerning: none; margin: 0px; overflow-wrap: break-word; padding: 0px; text-align: left; user-select: text; vertical-align: baseline;"><span class="TextRun SCXO224470427 BCX0" color="windowtext" data-contrast="auto" face="Calibri, sans-serif" lang="EN-GB" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; font-size: 11pt; font-variant-ligatures: none; line-height: 17px; margin: 0px; padding: 0px; user-select: text;" xml:lang="EN-GB">XSS (Cross-Site Scripting)</span><span class="EOP SCXO224470427 BCX0" color="windowtext" face="Calibri, sans-serif" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; font-size: 11pt; line-height: 17px; margin: 0px; padding: 0px; user-select: text;"> </span></h2></div><div class="OutlineElement Ltr SCXO224470427 BCX0" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: white; clear: both; cursor: text; direction: ltr; margin: 0px; overflow: visible; padding: 0px; position: relative; user-select: text;"><p class="Paragraph SCXO224470427 BCX0" lang="EN-GB" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; color: windowtext; font-family: "Segoe UI", "Segoe UI Web", Arial, Verdana, sans-serif; font-kerning: none; font-size: 12px; margin: 0px; overflow-wrap: break-word; padding: 0px; user-select: text; vertical-align: baseline;" xml:lang="EN-GB"><span class="TextRun SCXO224470427 BCX0" color="windowtext" data-contrast="auto" face="Calibri, sans-serif" lang="EN-GB" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; font-size: 11pt; font-variant-ligatures: none; line-height: 17px; margin: 0px; padding: 0px; user-select: text;" xml:lang="EN-GB"><br /></span></p><p class="Paragraph SCXO224470427 BCX0" lang="EN-GB" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; font-kerning: none; margin: 0px; overflow-wrap: break-word; padding: 0px; user-select: text; vertical-align: baseline;" xml:lang="EN-GB"><span class="TextRun SCXO224470427 BCX0" data-contrast="auto" lang="EN-GB" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; font-size: 14.6667px; font-variant-ligatures: none; line-height: 17px; margin: 0px; padding: 0px; user-select: text;" xml:lang="EN-GB"><span face="Calibri, sans-serif">Cross-Site Scripting attacks are a type of injection, in which malicious scripts are injected into otherwise benign and trusted websites.</span></span></p><p class="Paragraph SCXO224470427 BCX0" lang="EN-GB" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; color: windowtext; font-family: "Segoe UI", "Segoe UI Web", Arial, Verdana, sans-serif; font-kerning: none; font-size: 12px; margin: 0px; overflow-wrap: break-word; padding: 0px; user-select: text; vertical-align: baseline;" xml:lang="EN-GB"><span class="TextRun SCXO224470427 BCX0" color="windowtext" data-contrast="auto" face="Calibri, sans-serif" lang="EN-GB" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; font-size: 11pt; font-variant-ligatures: none; line-height: 17px; margin: 0px; padding: 0px; user-select: text;" xml:lang="EN-GB"><br /></span></p><p class="Paragraph SCXO224470427 BCX0" lang="EN-GB" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; color: windowtext; font-family: "Segoe UI", "Segoe UI Web", Arial, Verdana, sans-serif; font-kerning: none; font-size: 12px; margin: 0px; overflow-wrap: break-word; padding: 0px; user-select: text; vertical-align: baseline;" xml:lang="EN-GB"><span class="TextRun SCXO224470427 BCX0" color="windowtext" data-contrast="auto" face="Calibri, sans-serif" lang="EN-GB" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; font-size: 11pt; font-variant-ligatures: none; line-height: 17px; margin: 0px; padding: 0px; user-select: text;" xml:lang="EN-GB">Example: Try to fill in</span><span class="EOP SCXO224470427 BCX0" color="windowtext" face="Calibri, sans-serif" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; font-size: 11pt; line-height: 17px; margin: 0px; padding: 0px; user-select: text;"> </span></p></div><div class="OutlineElement Ltr SCXO224470427 BCX0" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: white; clear: both; cursor: text; direction: ltr; margin: 0px; overflow: visible; padding: 0px; position: relative; user-select: text;"><p class="Paragraph SCXO224470427 BCX0" lang="EN-GB" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; font-kerning: none; margin: 0px; overflow-wrap: break-word; padding: 0px; user-select: text; vertical-align: baseline;" xml:lang="EN-GB"><span style="color: #274e13; font-family: courier; font-size: x-small;"><span class="TextRun SCXO224470427 BCX0" data-contrast="auto" lang="EN-GB" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; font-variant-ligatures: none; line-height: 17px; margin: 0px; padding: 0px; user-select: text;" xml:lang="EN-GB">[Totally Safe Link]</span><span class="EOP SCXO224470427 BCX0" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; line-height: 17px; margin: 0px; padding: 0px; user-select: text;"> </span></span></p></div><div class="OutlineElement Ltr SCXO224470427 BCX0" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: white; clear: both; cursor: text; direction: ltr; margin: 0px; overflow: visible; padding: 0px; position: relative; user-select: text;"><p class="Paragraph SCXO224470427 BCX0" lang="EN-GB" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; font-kerning: none; margin: 0px; overflow-wrap: break-word; padding: 0px; user-select: text; vertical-align: baseline;" xml:lang="EN-GB"><span style="color: #274e13; font-family: courier; font-size: x-small;"><span class="TextRun SCXO224470427 BCX0" data-contrast="auto" lang="EN-GB" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; font-variant-ligatures: none; line-height: 17px; margin: 0px; padding: 0px; user-select: text;" xml:lang="EN-GB">(javascript&#58document;cookieStore.g et('super_secret_cookie'8#41;.then((e&#</span><span class="EOP SCXO224470427 BCX0" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; line-height: 17px; margin: 0px; padding: 0px; user-select: text;"> </span></span></p></div><div class="OutlineElement Ltr SCXO224470427 BCX0" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: white; clear: both; cursor: text; direction: ltr; margin: 0px; overflow: visible; padding: 0px; position: relative; user-select: text;"><p class="Paragraph SCXO224470427 BCX0" lang="EN-GB" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; font-kerning: none; margin: 0px; overflow-wrap: break-word; padding: 0px; user-select: text; vertical-align: baseline;" xml:lang="EN-GB"><span style="color: #274e13; font-family: courier; font-size: x-small;"><span class="TextRun SCXO224470427 BCX0" data-contrast="auto" lang="EN-GB" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; font-variant-ligatures: none; line-height: 17px; margin: 0px; padding: 0px; user-select: text;" xml:lang="EN-GB">41; =></span><span class="EOP SCXO224470427 BCX0" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; line-height: 17px; margin: 0px; padding: 0px; user-select: text;"> </span></span></p></div><div class="OutlineElement Ltr SCXO224470427 BCX0" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: white; clear: both; cursor: text; direction: ltr; margin: 0px; overflow: visible; padding: 0px; position: relative; user-select: text;"><p class="Paragraph SCXO224470427 BCX0" lang="EN-GB" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; font-kerning: none; margin: 0px; overflow-wrap: break-word; padding: 0px; user-select: text; vertical-align: baseline;" xml:lang="EN-GB"><span style="color: #274e13; font-family: courier; font-size: x-small;"><span class="TextRun SCXO224470427 BCX0" data-contrast="auto" lang="EN-GB" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; font-variant-ligatures: none; line-height: 17px; margin: 0px; padding: 0px; user-select: text;" xml:lang="EN-GB">{document.getElementsByClassName('v-text-field _slot'8#41;</span><span class="EOP SCXO224470427 BCX0" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; line-height: 17px; margin: 0px; padding: 0px; user-select: text;"> </span></span></p></div><div class="OutlineElement Ltr SCXO224470427 BCX0" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: white; clear: both; cursor: text; direction: ltr; margin: 0px; overflow: visible; padding: 0px; position: relative; user-select: text;"><p class="Paragraph SCXO224470427 BCX0" lang="EN-GB" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; font-kerning: none; margin: 0px; overflow-wrap: break-word; padding: 0px; user-select: text; vertical-align: baseline;" xml:lang="EN-GB"><span style="color: #274e13; font-family: courier; font-size: x-small;"><span class="TextRun SCXO224470427 BCX0" data-contrast="auto" lang="EN-GB" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; font-variant-ligatures: none; line-height: 17px; margin: 0px; padding: 0px; user-select: text;" xml:lang="EN-GB">[1].childNodes[1].value='${e.namel = $</span><span class="EOP SCXO224470427 BCX0" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; line-height: 17px; margin: 0px; padding: 0px; user-select: text;"> </span></span></p></div><div class="OutlineElement Ltr SCXO224470427 BCX0" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: white; clear: both; cursor: text; direction: ltr; margin: 0px; overflow: visible; padding: 0px; position: relative; user-select: text;"><p class="Paragraph SCXO224470427 BCX0" lang="EN-GB" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; font-kerning: none; margin: 0px; overflow-wrap: break-word; padding: 0px; user-select: text; vertical-align: baseline;" xml:lang="EN-GB"><span style="color: #274e13; font-family: courier; font-size: x-small;"><span class="TextRun SCXO224470427 BCX0" data-contrast="auto" lang="EN-GB" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; font-variant-ligatures: none; line-height: 17px; margin: 0px; padding: 0px; user-select: text;" xml:lang="EN-GB">{e.value}</span><span class="EOP SCXO224470427 BCX0" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; line-height: 17px; margin: 0px; padding: 0px; user-select: text;"> </span></span></p></div><div class="OutlineElement Ltr SCXO224470427 BCX0" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: white; clear: both; cursor: text; direction: ltr; margin: 0px; overflow: visible; padding: 0px; position: relative; user-select: text;"><p class="Paragraph SCXO224470427 BCX0" lang="EN-GB" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; font-kerning: none; margin: 0px; overflow-wrap: break-word; padding: 0px; user-select: text; vertical-align: baseline;" xml:lang="EN-GB"><span style="color: #274e13; font-family: courier; font-size: x-small;"><span class="TextRun SCXO224470427 BCX0" data-contrast="auto" lang="EN-GB" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; font-variant-ligatures: none; line-height: 17px; margin: 0px; padding: 0px; user-select: text;" xml:lang="EN-GB">*;document.getElementsByClassName('v</span><span class="EOP SCXO224470427 BCX0" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; line-height: 17px; margin: 0px; padding: 0px; user-select: text;"> </span></span></p></div><div class="OutlineElement Ltr SCXO224470427 BCX0" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: white; clear: both; cursor: text; direction: ltr; margin: 0px; overflow: visible; padding: 0px; position: relative; user-select: text;"><p class="Paragraph SCXO224470427 BCX0" lang="EN-GB" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; font-kerning: none; margin: 0px; overflow-wrap: break-word; padding: 0px; user-select: text; vertical-align: baseline;" xml:lang="EN-GB"><span style="color: #274e13; font-family: courier; font-size: x-small;"><span class="TextRun SCXO224470427 BCX0" data-contrast="auto" lang="EN-GB" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; font-variant-ligatures: none; line-height: 17px; margin: 0px; padding: 0px; user-select: text;" xml:lang="EN-GB">-text-field slot'8#41;</span><span class="EOP SCXO224470427 BCX0" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; line-height: 17px; margin: 0px; padding: 0px; user-select: text;"> </span></span></p></div><div class="OutlineElement Ltr SCXO224470427 BCX0" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: white; clear: both; cursor: text; direction: ltr; margin: 0px; overflow: visible; padding: 0px; position: relative; user-select: text;"><p class="Paragraph SCXO224470427 BCX0" lang="EN-GB" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; font-kerning: none; margin: 0px; overflow-wrap: break-word; padding: 0px; user-select: text; vertical-align: baseline;" xml:lang="EN-GB"><span style="color: #274e13; font-family: courier; font-size: x-small;"><span class="TextRun SCXO224470427 BCX0" data-contrast="auto" lang="EN-GB" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; font-variant-ligatures: none; line-height: 17px; margin: 0px; padding: 0px; user-select: text;" xml:lang="EN-GB">[1].childNodes [1].dispatchEvent(new</span><span class="EOP SCXO224470427 BCX0" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; line-height: 17px; margin: 0px; padding: 0px; user-select: text;"> </span></span></p></div><div class="OutlineElement Ltr SCXO224470427 BCX0" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: white; clear: both; cursor: text; direction: ltr; margin: 0px; overflow: visible; padding: 0px; position: relative; user-select: text;"><p class="Paragraph SCXO224470427 BCX0" lang="EN-GB" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; font-kerning: none; margin: 0px; overflow-wrap: break-word; padding: 0px; user-select: text; vertical-align: baseline;" xml:lang="EN-GB"><span style="color: #274e13; font-family: courier; font-size: x-small;"><span class="TextRun SCXO224470427 BCX0" data-contrast="auto" lang="EN-GB" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; font-variant-ligatures: none; line-height: 17px; margin: 0px; padding: 0px; user-select: text;" xml:lang="EN-GB">Event ('input'&#41;8#41;;document.getEl ementsByClassName'v-text-field _slot'8#41;</span><span class="EOP SCXO224470427 BCX0" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; line-height: 17px; margin: 0px; padding: 0px; user-select: text;"> </span></span></p></div><div class="OutlineElement Ltr SCXO224470427 BCX0" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: white; clear: both; cursor: text; direction: ltr; margin: 0px; overflow: visible; padding: 0px; position: relative; user-select: text;"><p class="Paragraph SCXO224470427 BCX0" lang="EN-GB" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; font-kerning: none; margin: 0px; overflow-wrap: break-word; padding: 0px; user-select: text; vertical-align: baseline;" xml:lang="EN-GB"><span style="color: #274e13; font-family: courier; font-size: x-small;"><span class="TextRun SCXO224470427 BCX0" data-contrast="auto" lang="EN-GB" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; font-variant-ligatures: none; line-height: 17px; margin: 0px; padding: 0px; user-select: text;" xml:lang="EN-GB">[1].nextElementSibling.childNodes[0].clic k(8#41;}8#41;</span><span class="EOP SCXO224470427 BCX0" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; line-height: 17px; margin: 0px; padding: 0px; user-select: text;"> </span></span></p><div class="OutlineElement Ltr SCXO224470427 BCX0" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; clear: both; cursor: text; direction: ltr; font-family: "Segoe UI", "Segoe UI Web", Arial, Verdana, sans-serif; font-size: 12px; margin: 0px 0px 0px 24px; overflow: visible; padding: 0px; position: relative; user-select: text;"><p class="Paragraph SCXO224470427 BCX0" lang="EN-GB" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; color: windowtext; font-kerning: none; margin: 0px; overflow-wrap: break-word; padding: 0px; user-select: text; vertical-align: baseline;" xml:lang="EN-GB"><span class="TextRun SCXO224470427 BCX0" color="windowtext" data-contrast="auto" face="Calibri, sans-serif" lang="EN-GB" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; font-size: 11pt; font-variant-ligatures: none; line-height: 17px; margin: 0px; padding: 0px; user-select: text;" xml:lang="EN-GB"><span class="NormalTextRun SCXO224470427 BCX0" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: inherit; margin: 0px; padding: 0px; user-select: text;"></span></span><span class="EOP SCXO224470427 BCX0" color="windowtext" face="Calibri, sans-serif" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; font-size: 11pt; line-height: 17px; margin: 0px; padding: 0px; user-select: text;"> </span></p></div></div><div class="OutlineElement Ltr SCXO224470427 BCX0" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: white; clear: both; cursor: text; direction: ltr; font-family: "Segoe UI", "Segoe UI Web", Arial, Verdana, sans-serif; font-size: 12px; margin: 0px; overflow: visible; padding: 0px; position: relative; user-select: text;"><p class="Paragraph SCXO224470427 BCX0" lang="EN-GB" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; color: windowtext; font-kerning: none; margin: 0px; overflow-wrap: break-word; padding: 0px; user-select: text; vertical-align: baseline;" xml:lang="EN-GB"><span class="TextRun SCXO224470427 BCX0" color="windowtext" data-contrast="auto" face="Calibri, sans-serif" lang="EN-GB" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; font-size: 11pt; font-variant-ligatures: none; line-height: 17px; margin: 0px; padding: 0px; user-select: text;" xml:lang="EN-GB">Then conduct <a href="https://learn.snyk.io/lessons/prototype-pollution/javascript/" target="_blank">Prototype Pollution</a>, says caused by <a href="https://lodash.com/" target="_blank">lodash</a>. See detail at</span><span class="TextRun MacChromeBold SCXO224470427 BCX0" color="windowtext" data-contrast="auto" face="Calibri, sans-serif" lang="EN-GB" style="-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; font-size: 11pt; font-variant-ligatures: none; font-weight: bold; line-height: 17px; margin: 0px; padding: 0px; user-select: text;" xml:lang="EN-GB"> </span><a class="Hyperlink SCXO224470427 BCX0" href="https://github.com/Kirill89/prototype-pollution-explained/blob/master/README.md" rel="noreferrer noopener" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; margin: 0px; padding: 0px; user-select: text;" target="_blank"><span class="TextRun SCXO224470427 BCX0" data-contrast="auto" face="Calibri, sans-serif" lang="EN-GB" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; font-size: 11pt; font-variant-ligatures: none; line-height: 17px; margin: 0px; padding: 0px; text-decoration-line: none; user-select: text;" xml:lang="EN-GB">https://github.com/Kirill89/prototype-pollution-explained/blob/master/README.md</span></a><span class="TextRun EmptyTextRun SCXO224470427 BCX0" color="windowtext" data-contrast="auto" face="Calibri, sans-serif" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; font-size: 11pt; font-variant-ligatures: none; line-height: 17px; margin: 0px; padding: 0px; user-select: text;"></span><span class="EOP SCXO224470427 BCX0" color="windowtext" face="Calibri, sans-serif" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; font-size: 11pt; line-height: 17px; margin: 0px; padding: 0px; user-select: text;"> </span></p></div><div class="OutlineElement Ltr SCXO224470427 BCX0" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: white; clear: both; cursor: text; direction: ltr; font-family: "Segoe UI", "Segoe UI Web", Arial, Verdana, sans-serif; font-size: 12px; margin: 0px; overflow: visible; padding: 0px; position: relative; user-select: text;"><p class="Paragraph SCXO224470427 BCX0" lang="EN-GB" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; color: windowtext; font-kerning: none; margin: 0px; overflow-wrap: break-word; padding: 0px; user-select: text; vertical-align: baseline;" xml:lang="EN-GB"><span class="TextRun SCXO224470427 BCX0" color="windowtext" data-contrast="auto" face="Calibri, sans-serif" lang="EN-GB" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; font-size: 11pt; font-variant-ligatures: none; line-height: 17px; margin: 0px; padding: 0px; user-select: text;" xml:lang="EN-GB"><span class="NormalTextRun SCXO224470427 BCX0" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: inherit; margin: 0px; padding: 0px; user-select: text;"></span></span><span class="EOP SCXO224470427 BCX0" color="windowtext" face="Calibri, sans-serif" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; font-size: 11pt; line-height: 17px; margin: 0px; padding: 0px; user-select: text;"> </span></p></div><div class="OutlineElement Ltr SCXO224470427 BCX0" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: white; clear: both; cursor: text; direction: ltr; margin: 0px; overflow: visible; padding: 0px; position: relative; user-select: text;"><h2 style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; color: windowtext; font-family: "Segoe UI", "Segoe UI Web", Arial, Verdana, sans-serif; font-kerning: none; font-size: 12px; margin: 0px; overflow-wrap: break-word; padding: 0px; text-align: left; user-select: text; vertical-align: baseline;"><span class="TextRun SCXO224470427 BCX0" color="windowtext" data-contrast="auto" face="Calibri, sans-serif" lang="EN-GB" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; font-size: 11pt; font-variant-ligatures: none; line-height: 17px; margin: 0px; padding: 0px; user-select: text;" xml:lang="EN-GB">Path Traversal</span><span class="EOP SCXO224470427 BCX0" color="windowtext" face="Calibri, sans-serif" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; font-size: 11pt; line-height: 17px; margin: 0px; padding: 0px; user-select: text;"> </span></h2><p class="Paragraph SCXO224470427 BCX0" lang="EN-GB" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; color: windowtext; font-family: "Segoe UI", "Segoe UI Web", Arial, Verdana, sans-serif; font-kerning: none; font-size: 12px; margin: 0px; overflow-wrap: break-word; padding: 0px; user-select: text; vertical-align: baseline;" xml:lang="EN-GB"><span class="EOP SCXO224470427 BCX0" color="windowtext" face="Calibri, sans-serif" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; font-size: 11pt; line-height: 17px; margin: 0px; padding: 0px; user-select: text;"><br /></span></p><p class="Paragraph SCXO224470427 BCX0" lang="EN-GB" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; font-kerning: none; margin: 0px; overflow-wrap: break-word; padding: 0px; user-select: text; vertical-align: baseline;" xml:lang="EN-GB"><span class="EOP SCXO224470427 BCX0" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; font-size: 14.6667px; line-height: 17px; margin: 0px; padding: 0px; user-select: text;"><span face="Calibri, sans-serif">A path traversal attack (also known as directory traversal) aims to access files and directories that are stored outside the web root folder.</span></span></p><p class="Paragraph SCXO224470427 BCX0" lang="EN-GB" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; font-kerning: none; margin: 0px; overflow-wrap: break-word; padding: 0px; user-select: text; vertical-align: baseline;" xml:lang="EN-GB"><span class="EOP SCXO224470427 BCX0" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; font-size: 14.6667px; line-height: 17px; margin: 0px; padding: 0px; user-select: text;"><span face="Calibri, sans-serif"><br /></span></span></p></div><div class="OutlineElement Ltr SCXO224470427 BCX0" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: white; clear: both; cursor: text; direction: ltr; margin: 0px; overflow: visible; padding: 0px; position: relative; user-select: text;"><div style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; font-kerning: none; margin: 0px; overflow-wrap: break-word; padding: 0px; text-align: left; user-select: text; vertical-align: baseline;"><span class="TextRun SCXO224470427 BCX0" color="windowtext" data-contrast="auto" face="Calibri, sans-serif" lang="EN-GB" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; font-size: 11pt; font-variant-ligatures: none; line-height: 17px; margin: 0px; padding: 0px; user-select: text;" xml:lang="EN-GB">Example: Send a request like </span><span class="TextRun SCXO224470427 BCX0" data-contrast="auto" lang="EN-GB" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; font-variant-ligatures: none; line-height: 17px; margin: 0px; padding: 0px; user-select: text;" xml:lang="EN-GB"><span style="color: #274e13; font-family: courier; font-size: x-small;">/82e82e/82e82e/82e82/8282/82e%2e/etc/passwd</span></span><span class="TextRun SCXO224470427 BCX0" color="windowtext" data-contrast="auto" face="Calibri, sans-serif" lang="EN-GB" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; font-size: 11pt; font-variant-ligatures: none; line-height: 17px; margin: 0px; padding: 0px; user-select: text;" xml:lang="EN-GB"> , due to some libraries like <a href="https://security.snyk.io/package/npm/st/0.2.4" target="_blank">st@0.2.4</a></span><span class="EOP SCXO224470427 BCX0" color="windowtext" face="Calibri, sans-serif" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; font-size: 11pt; line-height: 17px; margin: 0px; padding: 0px; user-select: text;"><a href="https://security.snyk.io/package/npm/st/0.2.4" target="_blank"> </a></span></div></div><div class="OutlineElement Ltr SCXO224470427 BCX0" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: white; clear: both; cursor: text; direction: ltr; font-family: "Segoe UI", "Segoe UI Web", Arial, Verdana, sans-serif; font-size: 12px; margin: 0px; overflow: visible; padding: 0px; position: relative; user-select: text;"><p class="Paragraph SCXO224470427 BCX0" lang="EN-GB" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; color: windowtext; font-kerning: none; margin: 0px; overflow-wrap: break-word; padding: 0px; user-select: text; vertical-align: baseline;" xml:lang="EN-GB"><br /></p></div><div class="OutlineElement Ltr SCXO224470427 BCX0" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: white; clear: both; cursor: text; direction: ltr; font-family: "Segoe UI", "Segoe UI Web", Arial, Verdana, sans-serif; margin: 0px; overflow: visible; padding: 0px; position: relative; user-select: text;"><h2 style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; color: windowtext; font-kerning: none; font-size: 12px; margin: 0px; overflow-wrap: break-word; padding: 0px; text-align: left; user-select: text; vertical-align: baseline;"><span class="TextRun SCXO224470427 BCX0" color="windowtext" data-contrast="auto" face="Calibri, sans-serif" lang="EN-GB" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; font-size: 11pt; font-variant-ligatures: none; line-height: 17px; margin: 0px; padding: 0px; user-select: text;" xml:lang="EN-GB">Vulnerability Disclosure Program & Bug Bounty</span></h2><div><ul style="text-align: left;"><li><span class="TextRun SCXO224470427 BCX0" color="windowtext" data-contrast="auto" face="Calibri, sans-serif" lang="EN-GB" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; font-variant-ligatures: none; line-height: 17px; margin: 0px; padding: 0px; user-select: text;" xml:lang="EN-GB"><a href="https://www.hackerone.com/" target="_blank">Hackerone</a></span><span class="EOP SCXO224470427 BCX0" color="windowtext" face="Calibri, sans-serif" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; line-height: 17px; margin: 0px; padding: 0px; user-select: text;"> </span></li><li><a href="https://www.bugcrowd.com/" target="_blank">Bugcrowd</a><span class="EOP SCXO224470427 BCX0" color="windowtext" face="Calibri, sans-serif" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; line-height: 17px; margin: 0px; padding: 0px; user-select: text;"> </span></li><li><a href="https://www.intigriti.com/" target="_blank">Intigriti</a><span class="EOP SCXO224470427 BCX0" color="windowtext" face="Calibri, sans-serif" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; line-height: 17px; margin: 0px; padding: 0px; user-select: text;"> </span></li><li>Promote responsible disclosure and incentivizing bug hunting<span class="EOP SCXO224470427 BCX0" color="windowtext" face="Calibri, sans-serif" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; line-height: 17px; margin: 0px; padding: 0px; user-select: text;"> </span></li><li>Identify and address security weaknesses before they can be exploited by malicious actors<span class="EOP SCXO224470427 BCX0" color="windowtext" face="Calibri, sans-serif" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; line-height: 17px; margin: 0px; padding: 0px; user-select: text;"> </span></li><li>Improve the overall security of software and systems<span class="EOP SCXO224470427 BCX0" color="windowtext" face="Calibri, sans-serif" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; line-height: 17px; margin: 0px; padding: 0px; user-select: text;"> </span></li><li>Include scope and objectives, methodology, findings and vulnerabilities, risk assessment and severity ratings, and recommendations for mitigation<span class="EOP SCXO224470427 BCX0" color="windowtext" face="Calibri, sans-serif" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; line-height: 17px; margin: 0px; padding: 0px; user-select: text;"> </span></li><li>Consider honesty, accuracy, confidentiality. and respect for 3rd-party agreement<span class="EOP SCXO224470427 BCX0" color="windowtext" face="Calibri, sans-serif" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; line-height: 17px; margin: 0px; padding: 0px; user-select: text;"> </span></li></ul></div></div><div class="OutlineElement Ltr SCXO224470427 BCX0" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: white; clear: both; cursor: text; direction: ltr; font-family: "Segoe UI", "Segoe UI Web", Arial, Verdana, sans-serif; font-size: 12px; margin: 0px; overflow: visible; padding: 0px; position: relative; user-select: text;"><p class="Paragraph SCXO224470427 BCX0" lang="EN-GB" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; color: windowtext; font-kerning: none; margin: 0px; overflow-wrap: break-word; padding: 0px; user-select: text; vertical-align: baseline;" xml:lang="EN-GB"><span class="TextRun EmptyTextRun SCXO224470427 BCX0" color="windowtext" data-contrast="auto" face="Calibri, sans-serif" lang="EN-GB" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; font-size: 11pt; font-variant-ligatures: none; line-height: 17px; margin: 0px; padding: 0px; user-select: text;" xml:lang="EN-GB"></span><span class="LineBreakBlob BlobObject DragDrop SCXO224470427 BCX0" color="windowtext" face="WordVisiCarriageReturn_MSFontService, Calibri, sans-serif" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; font-size: 11pt; line-height: 17px; margin: 0px; padding: 0px; user-select: text;"><span class="SCXO224470427 BCX0" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; margin: 0px; padding: 0px; user-select: text; white-space: pre;"> </span><br class="SCXO224470427 BCX0" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; margin: 0px; padding: 0px; user-select: text; white-space: pre;" /></span></p><h2 style="text-align: left;"><span class="TextRun SCXO224470427 BCX0" color="windowtext" data-contrast="auto" face="Calibri, sans-serif" lang="EN-GB" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; font-size: 11pt; font-variant-ligatures: none; line-height: 17px; margin: 0px; padding: 0px; user-select: text;" xml:lang="EN-GB">Resources</span><span class="EOP SCXO224470427 BCX0" color="windowtext" face="Calibri, sans-serif" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; font-size: 11pt; line-height: 17px; margin: 0px; padding: 0px; user-select: text;"> </span></h2><p></p></div><div class="OutlineElement Ltr SCXO224470427 BCX0" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: white; clear: both; cursor: text; direction: ltr; margin: 0px; overflow: visible; padding: 0px; position: relative; user-select: text;"><p class="Paragraph SCXO224470427 BCX0" lang="EN-GB" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; color: windowtext; font-kerning: none; margin: 0px; overflow-wrap: break-word; padding: 0px; user-select: text; vertical-align: baseline;" xml:lang="EN-GB"></p><ul style="font-family: "Segoe UI", "Segoe UI Web", Arial, Verdana, sans-serif; font-size: 12px; text-align: left;"><li><a class="Hyperlink SCXO224470427 BCX0" href="https://owasp.org/" rel="noreferrer noopener" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; margin: 0px; padding: 0px; user-select: text;" target="_blank"><span class="TextRun SCXO224470427 BCX0" data-contrast="auto" face="Calibri, sans-serif" lang="EN-GB" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; font-size: 11pt; font-variant-ligatures: none; line-height: 17px; margin: 0px; padding: 0px; text-decoration-line: none; user-select: text;" xml:lang="EN-GB">https://owasp.org/</span></a><span class="TextRun EmptyTextRun SCXO224470427 BCX0" color="windowtext" data-contrast="auto" face="Calibri, sans-serif" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; font-size: 11pt; font-variant-ligatures: none; line-height: 17px; margin: 0px; padding: 0px; user-select: text;"></span><span class="EOP SCXO224470427 BCX0" color="windowtext" face="Calibri, sans-serif" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; font-size: 11pt; line-height: 17px; margin: 0px; padding: 0px; user-select: text;"> </span></li><li><a class="Hyperlink SCXO224470427 BCX0" href="https://owasp.org/www-project-juice-shop/" rel="noreferrer noopener" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; margin: 0px; padding: 0px; user-select: text;" target="_blank"><span class="TextRun SCXO224470427 BCX0" data-contrast="auto" face="Calibri, sans-serif" lang="EN-GB" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; font-size: 11pt; font-variant-ligatures: none; line-height: 17px; margin: 0px; padding: 0px; text-decoration-line: none; user-select: text;" xml:lang="EN-GB">https://owasp.org/www-project-juice-shop/</span></a><span class="TextRun EmptyTextRun SCXO224470427 BCX0" color="windowtext" data-contrast="auto" face="Calibri, sans-serif" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; font-size: 11pt; font-variant-ligatures: none; line-height: 17px; margin: 0px; padding: 0px; user-select: text;"></span><span class="EOP SCXO224470427 BCX0" color="windowtext" face="Calibri, sans-serif" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; font-size: 11pt; line-height: 17px; margin: 0px; padding: 0px; user-select: text;"> </span></li><li><a class="Hyperlink SCXO224470427 BCX0" href="https://cheatsheetseries.owasp.org/cheatsheets/Cross_Site_Scripting_Prevention_Cheat_Sheet.html" rel="noreferrer noopener" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; margin: 0px; padding: 0px; user-select: text;" target="_blank"><span class="TextRun SCXO224470427 BCX0" data-contrast="auto" face="Calibri, sans-serif" lang="EN-GB" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; font-size: 11pt; font-variant-ligatures: none; line-height: 17px; margin: 0px; padding: 0px; text-decoration-line: none; user-select: text;" xml:lang="EN-GB">https://cheatsheetseries.owasp.org/cheatsheets/Cross_Site_Scripting_Prevention_Cheat_Sheet.html</span></a><span class="TextRun EmptyTextRun SCXO224470427 BCX0" color="windowtext" data-contrast="auto" face="Calibri, sans-serif" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; font-size: 11pt; font-variant-ligatures: none; line-height: 17px; margin: 0px; padding: 0px; user-select: text;"></span><span class="EOP SCXO224470427 BCX0" color="windowtext" face="Calibri, sans-serif" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; font-size: 11pt; line-height: 17px; margin: 0px; padding: 0px; user-select: text;"> </span></li><li><a class="Hyperlink SCXO224470427 BCX0" href="https://bugcrowd.com/agilebits" rel="noreferrer noopener" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; margin: 0px; padding: 0px; user-select: text;" target="_blank"><span class="TextRun SCXO224470427 BCX0" data-contrast="auto" face="Calibri, sans-serif" lang="EN-GB" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; font-size: 11pt; font-variant-ligatures: none; line-height: 17px; margin: 0px; padding: 0px; text-decoration-line: none; user-select: text;" xml:lang="EN-GB">https://bugcrowd.com/agilebits</span></a><span class="TextRun EmptyTextRun SCXO224470427 BCX0" color="windowtext" data-contrast="auto" face="Calibri, sans-serif" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; font-size: 11pt; font-variant-ligatures: none; line-height: 17px; margin: 0px; padding: 0px; user-select: text;"></span><span class="EOP SCXO224470427 BCX0" color="windowtext" face="Calibri, sans-serif" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; font-size: 11pt; line-height: 17px; margin: 0px; padding: 0px; user-select: text;"> </span></li><li><a class="Hyperlink SCXO224470427 BCX0" href="https://tryhackme.com/" rel="noreferrer noopener" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; margin: 0px; padding: 0px; user-select: text;" target="_blank"><span class="TextRun SCXO224470427 BCX0" data-contrast="auto" face="Calibri, sans-serif" lang="EN-GB" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; font-size: 11pt; font-variant-ligatures: none; line-height: 17px; margin: 0px; padding: 0px; text-decoration-line: none; user-select: text;" xml:lang="EN-GB">https://tryhackme.com/</span></a><span class="TextRun EmptyTextRun SCXO224470427 BCX0" color="windowtext" data-contrast="auto" face="Calibri, sans-serif" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; font-size: 11pt; font-variant-ligatures: none; line-height: 17px; margin: 0px; padding: 0px; user-select: text;"></span><span class="EOP SCXO224470427 BCX0" color="windowtext" face="Calibri, sans-serif" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; font-size: 11pt; line-height: 17px; margin: 0px; padding: 0px; user-select: text;"> </span></li><li><a class="Hyperlink SCXO224470427 BCX0" href="https://www.hackthebox.com/" rel="noreferrer noopener" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; margin: 0px; padding: 0px; user-select: text;" target="_blank"><span class="TextRun SCXO224470427 BCX0" data-contrast="auto" face="Calibri, sans-serif" lang="EN-GB" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; font-size: 11pt; font-variant-ligatures: none; line-height: 17px; margin: 0px; padding: 0px; text-decoration-line: none; user-select: text;" xml:lang="EN-GB">https://www.hackthebox.com/</span></a><span class="TextRun EmptyTextRun SCXO224470427 BCX0" color="windowtext" data-contrast="auto" face="Calibri, sans-serif" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; font-size: 11pt; font-variant-ligatures: none; line-height: 17px; margin: 0px; padding: 0px; user-select: text;"></span><span class="EOP SCXO224470427 BCX0" color="windowtext" face="Calibri, sans-serif" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; font-size: 11pt; line-height: 17px; margin: 0px; padding: 0px; user-select: text;"> </span></li><li><a class="Hyperlink SCXO224470427 BCX0" href="https://www.devseccon.com/" rel="noreferrer noopener" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; margin: 0px; padding: 0px; user-select: text;" target="_blank"><span class="TextRun SCXO224470427 BCX0" data-contrast="auto" face="Calibri, sans-serif" lang="EN-GB" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; font-size: 11pt; font-variant-ligatures: none; line-height: 17px; margin: 0px; padding: 0px; text-decoration-line: none; user-select: text;" xml:lang="EN-GB">https://www.devseccon.com/</span></a><span class="TextRun EmptyTextRun SCXO224470427 BCX0" color="windowtext" data-contrast="auto" face="Calibri, sans-serif" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; font-size: 11pt; font-variant-ligatures: none; line-height: 17px; margin: 0px; padding: 0px; user-select: text;"></span><span class="EOP SCXO224470427 BCX0" color="windowtext" face="Calibri, sans-serif" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; font-size: 11pt; line-height: 17px; margin: 0px; padding: 0px; user-select: text;"> </span></li><li><a class="Hyperlink SCXO224470427 BCX0" href="https://github.com/snyk-workshops/EH-Patch-Todo-App" rel="noreferrer noopener" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; margin: 0px; padding: 0px; user-select: text;" target="_blank"><span class="TextRun SCXO224470427 BCX0" data-contrast="auto" face="Calibri, sans-serif" lang="EN-GB" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; font-size: 11pt; font-variant-ligatures: none; line-height: 17px; margin: 0px; padding: 0px; text-decoration-line: none; user-select: text;" xml:lang="EN-GB">https://github.com/snyk-workshops/EH-Patch-Todo-App</span></a><span class="TextRun EmptyTextRun SCXO224470427 BCX0" color="windowtext" data-contrast="auto" face="Calibri, sans-serif" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; font-size: 11pt; font-variant-ligatures: none; line-height: 17px; margin: 0px; padding: 0px; user-select: text;"></span><span class="EOP SCXO224470427 BCX0" color="windowtext" face="Calibri, sans-serif" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; font-size: 11pt; line-height: 17px; margin: 0px; padding: 0px; user-select: text;"> </span></li><li><a class="Hyperlink SCXO224470427 BCX0" href="https://learn.snyk.io/" rel="noreferrer noopener" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; margin: 0px; padding: 0px; user-select: text;" target="_blank"><span class="TextRun SCXO224470427 BCX0" data-contrast="auto" face="Calibri, sans-serif" lang="EN-GB" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; font-size: 11pt; font-variant-ligatures: none; line-height: 17px; margin: 0px; padding: 0px; text-decoration-line: none; user-select: text;" xml:lang="EN-GB">https://learn.snyk.io/</span></a><span class="TextRun EmptyTextRun SCXO224470427 BCX0" color="windowtext" data-contrast="auto" face="Calibri, sans-serif" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; font-size: 11pt; font-variant-ligatures: none; line-height: 17px; margin: 0px; padding: 0px; user-select: text;"></span><span class="EOP SCXO224470427 BCX0" color="windowtext" face="Calibri, sans-serif" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; font-size: 11pt; line-height: 17px; margin: 0px; padding: 0px; user-select: text;"> </span></li><li><a class="Hyperlink SCXO224470427 BCX0" href="https://snyk.io/blog/" rel="noreferrer noopener" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; margin: 0px; padding: 0px; user-select: text;" target="_blank"><span class="TextRun SCXO224470427 BCX0" data-contrast="auto" face="Calibri, sans-serif" lang="EN-GB" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; font-size: 11pt; font-variant-ligatures: none; line-height: 17px; margin: 0px; padding: 0px; text-decoration-line: none; user-select: text;" xml:lang="EN-GB">https://snyk.io/blog/</span></a><span class="TextRun EmptyTextRun SCXO224470427 BCX0" color="windowtext" data-contrast="auto" face="Calibri, sans-serif" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; font-size: 11pt; font-variant-ligatures: none; line-height: 17px; margin: 0px; padding: 0px; user-select: text;"></span><span class="EOP SCXO224470427 BCX0" color="windowtext" face="Calibri, sans-serif" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; font-size: 11pt; line-height: 17px; margin: 0px; padding: 0px; user-select: text;"> </span></li><li><a class="Hyperlink SCXO224470427 BCX0" href="https://snyk.io/ethical-hacking-resources/" rel="noreferrer noopener" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; margin: 0px; padding: 0px; user-select: text;" target="_blank"><span class="TextRun SCXO224470427 BCX0" data-contrast="auto" face="Calibri, sans-serif" lang="EN-GB" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; font-size: 11pt; font-variant-ligatures: none; line-height: 17px; margin: 0px; padding: 0px; text-decoration-line: none; user-select: text;" xml:lang="EN-GB">https://snyk.io/ethical-hacking-resources/</span></a><span class="TextRun EmptyTextRun SCXO224470427 BCX0" color="windowtext" data-contrast="auto" face="Calibri, sans-serif" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; font-size: 11pt; font-variant-ligatures: none; line-height: 17px; margin: 0px; padding: 0px; user-select: text;"></span><span class="EOP SCXO224470427 BCX0" color="windowtext" face="Calibri, sans-serif" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; font-size: 11pt; line-height: 17px; margin: 0px; padding: 0px; user-select: text;"> </span></li><li><a class="Hyperlink SCXO224470427 BCX0" href="https://twitter.com/snyksec" rel="noreferrer noopener" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; margin: 0px; padding: 0px; user-select: text;" target="_blank"><span class="TextRun SCXO224470427 BCX0" data-contrast="auto" face="Calibri, sans-serif" lang="EN-GB" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; font-size: 11pt; font-variant-ligatures: none; line-height: 17px; margin: 0px; padding: 0px; text-decoration-line: none; user-select: text;" xml:lang="EN-GB">https://twitter.com/snyksec</span></a><span class="TextRun EmptyTextRun SCXO224470427 BCX0" color="windowtext" data-contrast="auto" face="Calibri, sans-serif" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; font-size: 11pt; font-variant-ligatures: none; line-height: 17px; margin: 0px; padding: 0px; user-select: text;"></span><span class="EOP SCXO224470427 BCX0" color="windowtext" face="Calibri, sans-serif" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; font-size: 11pt; line-height: 17px; margin: 0px; padding: 0px; user-select: text;"> </span></li><li><a class="Hyperlink SCXO224470427 BCX0" href="https://www.youtube.com/snyksec" rel="noreferrer noopener" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; margin: 0px; padding: 0px; user-select: text;" target="_blank"><span class="TextRun SCXO224470427 BCX0" data-contrast="auto" face="Calibri, sans-serif" lang="EN-GB" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; font-size: 11pt; font-variant-ligatures: none; line-height: 17px; margin: 0px; padding: 0px; text-decoration-line: none; user-select: text;" xml:lang="EN-GB">https://www.youtube.com/snyksec</span></a><span class="TextRun EmptyTextRun SCXO224470427 BCX0" color="windowtext" data-contrast="auto" face="Calibri, sans-serif" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; font-size: 11pt; font-variant-ligatures: none; line-height: 17px; margin: 0px; padding: 0px; user-select: text;"></span><span class="EOP SCXO224470427 BCX0" color="windowtext" face="Calibri, sans-serif" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; font-size: 11pt; line-height: 17px; margin: 0px; padding: 0px; user-select: text;"> </span></li><li><a class="Hyperlink SCXO224470427 BCX0" href="https://docs.snyk.io/snyk-cli/install-the-snyk-cli" rel="noreferrer noopener" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; margin: 0px; padding: 0px; user-select: text;" target="_blank"><span class="TextRun SCXO224470427 BCX0" data-contrast="auto" face="Calibri, sans-serif" lang="EN-GB" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; font-size: 11pt; font-variant-ligatures: none; line-height: 17px; margin: 0px; padding: 0px; text-decoration-line: none; user-select: text;" xml:lang="EN-GB">https://docs.snyk.io/snyk-cli/install-the-snyk-cli</span></a><span class="TextRun EmptyTextRun SCXO224470427 BCX0" color="windowtext" data-contrast="auto" face="Calibri, sans-serif" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; font-size: 11pt; font-variant-ligatures: none; line-height: 17px; margin: 0px; padding: 0px; user-select: text;"></span><span class="EOP SCXO224470427 BCX0" color="windowtext" face="Calibri, sans-serif" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; font-size: 11pt; line-height: 17px; margin: 0px; padding: 0px; user-select: text;"> </span></li><li><a class="Hyperlink SCXO224470427 BCX0" href="https://snyk.io/platform/ide-plugins" rel="noreferrer noopener" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; margin: 0px; padding: 0px; user-select: text;" target="_blank"><span class="TextRun SCXO224470427 BCX0" data-contrast="auto" face="Calibri, sans-serif" lang="EN-GB" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; font-size: 11pt; font-variant-ligatures: none; line-height: 17px; margin: 0px; padding: 0px; text-decoration-line: none; user-select: text;" xml:lang="EN-GB">https://snyk.io/platform/ide-plugins</span></a><span class="TextRun EmptyTextRun SCXO224470427 BCX0" color="windowtext" data-contrast="auto" face="Calibri, sans-serif" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; font-size: 11pt; font-variant-ligatures: none; line-height: 17px; margin: 0px; padding: 0px; user-select: text;"></span><span class="EOP SCXO224470427 BCX0" color="windowtext" face="Calibri, sans-serif" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; font-size: 11pt; line-height: 17px; margin: 0px; padding: 0px; user-select: text;"> </span></li><li><a class="Hyperlink SCXO224470427 BCX0" href="https://snyk-chat-goof.snykchallenge.io/" rel="noreferrer noopener" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; margin: 0px; padding: 0px; user-select: text;" target="_blank"><span class="TextRun SCXO224470427 BCX0" data-contrast="auto" face="Calibri, sans-serif" lang="EN-GB" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; font-size: 11pt; font-variant-ligatures: none; line-height: 17px; margin: 0px; padding: 0px; text-decoration-line: none; user-select: text;" xml:lang="EN-GB">https://snyk-chat-goof.snykchallenge.io/</span></a><span class="TextRun EmptyTextRun SCXO224470427 BCX0" color="windowtext" data-contrast="auto" face="Calibri, sans-serif" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; font-size: 11pt; font-variant-ligatures: none; line-height: 17px; margin: 0px; padding: 0px; user-select: text;"></span><span class="EOP SCXO224470427 BCX0" color="windowtext" face="Calibri, sans-serif" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; font-size: 11pt; line-height: 17px; margin: 0px; padding: 0px; user-select: text;"> </span></li><li><a class="Hyperlink SCXO224470427 BCX0" href="https://snyk.io/advisor/" rel="noreferrer noopener" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; margin: 0px; padding: 0px; user-select: text;" target="_blank"><span class="TextRun SCXO224470427 BCX0" data-contrast="auto" face="Calibri, sans-serif" lang="EN-GB" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; font-size: 11pt; font-variant-ligatures: none; line-height: 17px; margin: 0px; padding: 0px; text-decoration-line: none; user-select: text;" xml:lang="EN-GB">https://snyk.io/advisor/</span></a><span class="TextRun EmptyTextRun SCXO224470427 BCX0" color="windowtext" data-contrast="auto" face="Calibri, sans-serif" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; font-size: 11pt; font-variant-ligatures: none; line-height: 17px; margin: 0px; padding: 0px; user-select: text;"></span><span class="EOP SCXO224470427 BCX0" color="windowtext" face="Calibri, sans-serif" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; font-size: 11pt; line-height: 17px; margin: 0px; padding: 0px; user-select: text;"> </span></li><li><a class="Hyperlink SCXO224470427 BCX0" href="https://security.snyk.io/vuln/SNYK-JS-SIMPLEMARKDOWN-173788" rel="noreferrer noopener" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; margin: 0px; padding: 0px; user-select: text;" target="_blank"><span class="TextRun SCXO224470427 BCX0" data-contrast="auto" face="Calibri, sans-serif" lang="EN-GB" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; font-size: 11pt; font-variant-ligatures: none; line-height: 17px; margin: 0px; padding: 0px; text-decoration-line: none; user-select: text;" xml:lang="EN-GB">https://security.snyk.io/vuln/SNYK-JS-SIMPLEMARKDOWN-173788</span></a><span class="TextRun EmptyTextRun SCXO224470427 BCX0" color="windowtext" data-contrast="auto" face="Calibri, sans-serif" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; font-size: 11pt; font-variant-ligatures: none; line-height: 17px; margin: 0px; padding: 0px; user-select: text;"></span><span class="EOP SCXO224470427 BCX0" color="windowtext" face="Calibri, sans-serif" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; font-size: 11pt; line-height: 17px; margin: 0px; padding: 0px; user-select: text;"> </span></li></ul><div><span face="Calibri, sans-serif"><span style="font-size: 14.6667px;"><br /></span></span></div><span color="rgba(0, 0, 0, 0)"><span class="TextRun EmptyTextRun SCXO224470427 BCX0" color="windowtext" data-contrast="auto" face="Calibri, sans-serif" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; font-size: 11pt; font-variant-ligatures: none; line-height: 17px; margin: 0px; padding: 0px; user-select: text;"></span></span><p></p></div><div class="OutlineElement Ltr SCXO224470427 BCX0" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: white; clear: both; cursor: text; direction: ltr; font-family: "Segoe UI", "Segoe UI Web", Arial, Verdana, sans-serif; font-size: 12px; margin: 0px; overflow: visible; padding: 0px; position: relative; user-select: text;"><p class="Paragraph SCXO224470427 BCX0" lang="EN-GB" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; color: windowtext; font-kerning: none; margin: 0px; overflow-wrap: break-word; padding: 0px; user-select: text; vertical-align: baseline;" xml:lang="EN-GB"><span class="TextRun EmptyTextRun SCXO224470427 BCX0" color="windowtext" data-contrast="auto" face="Calibri, sans-serif" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; font-size: 11pt; font-variant-ligatures: none; line-height: 17px; margin: 0px; padding: 0px; user-select: text;"></span></p></div><div class="OutlineElement Ltr SCXO224470427 BCX0" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: white; clear: both; cursor: text; direction: ltr; font-family: "Segoe UI", "Segoe UI Web", Arial, Verdana, sans-serif; font-size: 12px; margin: 0px; overflow: visible; padding: 0px; position: relative; user-select: text;"><p class="Paragraph SCXO224470427 BCX0" lang="EN-GB" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; color: windowtext; font-kerning: none; margin: 0px; overflow-wrap: break-word; padding: 0px; user-select: text; vertical-align: baseline;" xml:lang="EN-GB"><span class="TextRun EmptyTextRun SCXO224470427 BCX0" color="windowtext" data-contrast="auto" face="Calibri, sans-serif" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; font-size: 11pt; font-variant-ligatures: none; line-height: 17px; margin: 0px; padding: 0px; user-select: text;"></span></p></div><div class="OutlineElement Ltr SCXO224470427 BCX0" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: white; clear: both; cursor: text; direction: ltr; font-family: "Segoe UI", "Segoe UI Web", Arial, Verdana, sans-serif; font-size: 12px; margin: 0px; overflow: visible; padding: 0px; position: relative; user-select: text;"><p class="Paragraph SCXO224470427 BCX0" lang="EN-GB" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; color: windowtext; font-kerning: none; margin: 0px; overflow-wrap: break-word; padding: 0px; user-select: text; vertical-align: baseline;" xml:lang="EN-GB"><span class="TextRun EmptyTextRun SCXO224470427 BCX0" color="windowtext" data-contrast="auto" face="Calibri, sans-serif" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; font-size: 11pt; font-variant-ligatures: none; line-height: 17px; margin: 0px; padding: 0px; user-select: text;"></span></p></div><div class="OutlineElement Ltr SCXO224470427 BCX0" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: white; clear: both; cursor: text; direction: ltr; font-family: "Segoe UI", "Segoe UI Web", Arial, Verdana, sans-serif; font-size: 12px; margin: 0px; overflow: visible; padding: 0px; position: relative; user-select: text;"><p class="Paragraph SCXO224470427 BCX0" lang="EN-GB" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; color: windowtext; font-kerning: none; margin: 0px; overflow-wrap: break-word; padding: 0px; user-select: text; vertical-align: baseline;" xml:lang="EN-GB"><span class="TextRun EmptyTextRun SCXO224470427 BCX0" color="windowtext" data-contrast="auto" face="Calibri, sans-serif" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; font-size: 11pt; font-variant-ligatures: none; line-height: 17px; margin: 0px; padding: 0px; user-select: text;"></span></p></div><div class="OutlineElement Ltr SCXO224470427 BCX0" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: white; clear: both; cursor: text; direction: ltr; font-family: "Segoe UI", "Segoe UI Web", Arial, Verdana, sans-serif; font-size: 12px; margin: 0px; overflow: visible; padding: 0px; position: relative; user-select: text;"><p class="Paragraph SCXO224470427 BCX0" lang="EN-GB" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; color: windowtext; font-kerning: none; margin: 0px; overflow-wrap: break-word; padding: 0px; user-select: text; vertical-align: baseline;" xml:lang="EN-GB"><span class="TextRun EmptyTextRun SCXO224470427 BCX0" color="windowtext" data-contrast="auto" face="Calibri, sans-serif" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; font-size: 11pt; font-variant-ligatures: none; line-height: 17px; margin: 0px; padding: 0px; user-select: text;"></span></p></div><div class="OutlineElement Ltr SCXO224470427 BCX0" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: white; clear: both; cursor: text; direction: ltr; font-family: "Segoe UI", "Segoe UI Web", Arial, Verdana, sans-serif; font-size: 12px; margin: 0px; overflow: visible; padding: 0px; position: relative; user-select: text;"><p class="Paragraph SCXO224470427 BCX0" lang="EN-GB" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; color: windowtext; font-kerning: none; margin: 0px; overflow-wrap: break-word; padding: 0px; user-select: text; vertical-align: baseline;" xml:lang="EN-GB"><span class="TextRun EmptyTextRun SCXO224470427 BCX0" color="windowtext" data-contrast="auto" face="Calibri, sans-serif" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; font-size: 11pt; font-variant-ligatures: none; line-height: 17px; margin: 0px; padding: 0px; user-select: text;"></span></p></div><div class="OutlineElement Ltr SCXO224470427 BCX0" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: white; clear: both; cursor: text; direction: ltr; font-family: "Segoe UI", "Segoe UI Web", Arial, Verdana, sans-serif; font-size: 12px; margin: 0px; overflow: visible; padding: 0px; position: relative; user-select: text;"><p class="Paragraph SCXO224470427 BCX0" lang="EN-GB" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; color: windowtext; font-kerning: none; margin: 0px; overflow-wrap: break-word; padding: 0px; user-select: text; vertical-align: baseline;" xml:lang="EN-GB"><span class="TextRun EmptyTextRun SCXO224470427 BCX0" color="windowtext" data-contrast="auto" face="Calibri, sans-serif" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; font-size: 11pt; font-variant-ligatures: none; line-height: 17px; margin: 0px; padding: 0px; user-select: text;"></span></p></div><div class="OutlineElement Ltr SCXO224470427 BCX0" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: white; clear: both; cursor: text; direction: ltr; font-family: "Segoe UI", "Segoe UI Web", Arial, Verdana, sans-serif; font-size: 12px; margin: 0px; overflow: visible; padding: 0px; position: relative; user-select: text;"><p class="Paragraph SCXO224470427 BCX0" lang="EN-GB" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; color: windowtext; font-kerning: none; margin: 0px; overflow-wrap: break-word; padding: 0px; user-select: text; vertical-align: baseline;" xml:lang="EN-GB"><span class="TextRun EmptyTextRun SCXO224470427 BCX0" color="windowtext" data-contrast="auto" face="Calibri, sans-serif" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; font-size: 11pt; font-variant-ligatures: none; line-height: 17px; margin: 0px; padding: 0px; user-select: text;"></span></p></div><div class="OutlineElement Ltr SCXO224470427 BCX0" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: white; clear: both; cursor: text; direction: ltr; font-family: "Segoe UI", "Segoe UI Web", Arial, Verdana, sans-serif; font-size: 12px; margin: 0px; overflow: visible; padding: 0px; position: relative; user-select: text;"><p class="Paragraph SCXO224470427 BCX0" lang="EN-GB" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; color: windowtext; font-kerning: none; margin: 0px; overflow-wrap: break-word; padding: 0px; user-select: text; vertical-align: baseline;" xml:lang="EN-GB"><span class="TextRun EmptyTextRun SCXO224470427 BCX0" color="windowtext" data-contrast="auto" face="Calibri, sans-serif" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; font-size: 11pt; font-variant-ligatures: none; line-height: 17px; margin: 0px; padding: 0px; user-select: text;"></span></p></div><div class="OutlineElement Ltr SCXO224470427 BCX0" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: white; clear: both; cursor: text; direction: ltr; font-family: "Segoe UI", "Segoe UI Web", Arial, Verdana, sans-serif; font-size: 12px; margin: 0px; overflow: visible; padding: 0px; position: relative; user-select: text;"><p class="Paragraph SCXO224470427 BCX0" lang="EN-GB" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; color: windowtext; font-kerning: none; margin: 0px; overflow-wrap: break-word; padding: 0px; user-select: text; vertical-align: baseline;" xml:lang="EN-GB"><span class="TextRun EmptyTextRun SCXO224470427 BCX0" color="windowtext" data-contrast="auto" face="Calibri, sans-serif" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; font-size: 11pt; font-variant-ligatures: none; line-height: 17px; margin: 0px; padding: 0px; user-select: text;"></span></p></div><div class="OutlineElement Ltr SCXO224470427 BCX0" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: white; clear: both; cursor: text; direction: ltr; font-family: "Segoe UI", "Segoe UI Web", Arial, Verdana, sans-serif; font-size: 12px; margin: 0px; overflow: visible; padding: 0px; position: relative; user-select: text;"><p class="Paragraph SCXO224470427 BCX0" lang="EN-GB" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; color: windowtext; font-kerning: none; margin: 0px; overflow-wrap: break-word; padding: 0px; user-select: text; vertical-align: baseline;" xml:lang="EN-GB"><span class="TextRun EmptyTextRun SCXO224470427 BCX0" color="windowtext" data-contrast="auto" face="Calibri, sans-serif" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; font-size: 11pt; font-variant-ligatures: none; line-height: 17px; margin: 0px; padding: 0px; user-select: text;"></span></p></div><div class="OutlineElement Ltr SCXO224470427 BCX0" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: white; clear: both; cursor: text; direction: ltr; font-family: "Segoe UI", "Segoe UI Web", Arial, Verdana, sans-serif; font-size: 12px; margin: 0px; overflow: visible; padding: 0px; position: relative; user-select: text;"><p class="Paragraph SCXO224470427 BCX0" lang="EN-GB" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; color: windowtext; font-kerning: none; margin: 0px; overflow-wrap: break-word; padding: 0px; user-select: text; vertical-align: baseline;" xml:lang="EN-GB"><span class="TextRun EmptyTextRun SCXO224470427 BCX0" color="windowtext" data-contrast="auto" face="Calibri, sans-serif" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; font-size: 11pt; font-variant-ligatures: none; line-height: 17px; margin: 0px; padding: 0px; user-select: text;"></span></p></div><div class="OutlineElement Ltr SCXO224470427 BCX0" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: white; clear: both; cursor: text; direction: ltr; font-family: "Segoe UI", "Segoe UI Web", Arial, Verdana, sans-serif; font-size: 12px; margin: 0px; overflow: visible; padding: 0px; position: relative; user-select: text;"><p class="Paragraph SCXO224470427 BCX0" lang="EN-GB" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; color: windowtext; font-kerning: none; margin: 0px; overflow-wrap: break-word; padding: 0px; user-select: text; vertical-align: baseline;" xml:lang="EN-GB"><span class="TextRun EmptyTextRun SCXO224470427 BCX0" color="windowtext" data-contrast="auto" face="Calibri, sans-serif" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; font-size: 11pt; font-variant-ligatures: none; line-height: 17px; margin: 0px; padding: 0px; user-select: text;"></span></p></div><div class="OutlineElement Ltr SCXO224470427 BCX0" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: white; clear: both; cursor: text; direction: ltr; font-family: "Segoe UI", "Segoe UI Web", Arial, Verdana, sans-serif; font-size: 12px; margin: 0px; overflow: visible; padding: 0px; position: relative; user-select: text;"><p class="Paragraph SCXO224470427 BCX0" lang="EN-GB" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; color: windowtext; font-kerning: none; margin: 0px; overflow-wrap: break-word; padding: 0px; user-select: text; vertical-align: baseline;" xml:lang="EN-GB"><span class="TextRun EmptyTextRun SCXO224470427 BCX0" color="windowtext" data-contrast="auto" face="Calibri, sans-serif" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; font-size: 11pt; font-variant-ligatures: none; line-height: 17px; margin: 0px; padding: 0px; user-select: text;"></span></p></div><div class="OutlineElement Ltr SCXO224470427 BCX0" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: white; clear: both; cursor: text; direction: ltr; font-family: "Segoe UI", "Segoe UI Web", Arial, Verdana, sans-serif; font-size: 12px; margin: 0px; overflow: visible; padding: 0px; position: relative; user-select: text;"><p class="Paragraph SCXO224470427 BCX0" lang="EN-GB" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; color: windowtext; font-kerning: none; margin: 0px; overflow-wrap: break-word; padding: 0px; user-select: text; vertical-align: baseline;" xml:lang="EN-GB"><span class="TextRun EmptyTextRun SCXO224470427 BCX0" color="windowtext" data-contrast="auto" face="Calibri, sans-serif" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; font-size: 11pt; font-variant-ligatures: none; line-height: 17px; margin: 0px; padding: 0px; user-select: text;"></span></p></div><div class="OutlineElement Ltr SCXO224470427 BCX0" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: white; clear: both; cursor: text; direction: ltr; font-family: "Segoe UI", "Segoe UI Web", Arial, Verdana, sans-serif; font-size: 12px; margin: 0px; overflow: visible; padding: 0px; position: relative; user-select: text;"><p class="Paragraph SCXO224470427 BCX0" lang="EN-GB" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; color: windowtext; font-kerning: none; margin: 0px; overflow-wrap: break-word; padding: 0px; user-select: text; vertical-align: baseline;" xml:lang="EN-GB"><span class="TextRun EmptyTextRun SCXO224470427 BCX0" color="windowtext" data-contrast="auto" face="Calibri, sans-serif" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; font-size: 11pt; font-variant-ligatures: none; line-height: 17px; margin: 0px; padding: 0px; user-select: text;"></span></p></div><div class="OutlineElement Ltr SCXO224470427 BCX0" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: white; clear: both; cursor: text; direction: ltr; font-family: "Segoe UI", "Segoe UI Web", Arial, Verdana, sans-serif; font-size: 12px; margin: 0px; overflow: visible; padding: 0px; position: relative; user-select: text;"><p class="Paragraph SCXO224470427 BCX0" lang="EN-GB" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; color: windowtext; font-kerning: none; margin: 0px; overflow-wrap: break-word; padding: 0px; user-select: text; vertical-align: baseline;" xml:lang="EN-GB"><span class="TextRun EmptyTextRun SCXO224470427 BCX0" color="windowtext" data-contrast="auto" face="Calibri, sans-serif" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; font-size: 11pt; font-variant-ligatures: none; line-height: 17px; margin: 0px; padding: 0px; user-select: text;"></span></p></div>Teki Chanhttp://www.blogger.com/profile/10757919473525051617noreply@blogger.com0tag:blogger.com,1999:blog-12402025.post-10861627553779234942022-12-07T13:00:00.004+00:002023-03-08T21:29:39.482+00:00Driving Test was passed<span style="background-color: white; color: rgba(0, 0, 0, 0.9); font-family: -apple-system, system-ui, "system-ui", "Segoe UI", Roboto, "Helvetica Neue", "Fira Sans", Ubuntu, Oxygen, "Oxygen Sans", Cantarell, "Droid Sans", "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Lucida Grande", Helvetica, Arial, sans-serif; font-size: 14px;">Hurray! I passed the driving test!</span><br style="background-color: white; box-sizing: inherit; color: rgba(0, 0, 0, 0.9); font-family: -apple-system, system-ui, "system-ui", "Segoe UI", Roboto, "Helvetica Neue", "Fira Sans", Ubuntu, Oxygen, "Oxygen Sans", Cantarell, "Droid Sans", "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Lucida Grande", Helvetica, Arial, sans-serif; font-size: 14px; line-height: inherit !important;" /><br style="background-color: white; box-sizing: inherit; color: rgba(0, 0, 0, 0.9); font-family: -apple-system, system-ui, "system-ui", "Segoe UI", Roboto, "Helvetica Neue", "Fira Sans", Ubuntu, Oxygen, "Oxygen Sans", Cantarell, "Droid Sans", "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Lucida Grande", Helvetica, Arial, sans-serif; font-size: 14px; line-height: inherit !important;" /><span style="background-color: white; color: rgba(0, 0, 0, 0.9); font-family: -apple-system, system-ui, "system-ui", "Segoe UI", Roboto, "Helvetica Neue", "Fira Sans", Ubuntu, Oxygen, "Oxygen Sans", Cantarell, "Droid Sans", "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Lucida Grande", Helvetica, Arial, sans-serif; font-size: 14px;">Driving isn't a rocket science, yet it's still a challenge, especially when there is noise surrounding your determination, such as "You're a coder, not a driver"; "You're too old to learn driving"; "You're going to a centre with the least passing rate", etc. Leaving your comfort zone can be intimidating, but when you take a leap, you open yourself up to new experiences, opportunities and growth.</span><br style="background-color: white; box-sizing: inherit; color: rgba(0, 0, 0, 0.9); font-family: -apple-system, system-ui, "system-ui", "Segoe UI", Roboto, "Helvetica Neue", "Fira Sans", Ubuntu, Oxygen, "Oxygen Sans", Cantarell, "Droid Sans", "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Lucida Grande", Helvetica, Arial, sans-serif; font-size: 14px; line-height: inherit !important;" /><br style="background-color: white; box-sizing: inherit; color: rgba(0, 0, 0, 0.9); font-family: -apple-system, system-ui, "system-ui", "Segoe UI", Roboto, "Helvetica Neue", "Fira Sans", Ubuntu, Oxygen, "Oxygen Sans", Cantarell, "Droid Sans", "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Lucida Grande", Helvetica, Arial, sans-serif; font-size: 14px; line-height: inherit !important;" /><span style="background-color: white; color: rgba(0, 0, 0, 0.9); font-family: -apple-system, system-ui, "system-ui", "Segoe UI", Roboto, "Helvetica Neue", "Fira Sans", Ubuntu, Oxygen, "Oxygen Sans", Cantarell, "Droid Sans", "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Lucida Grande", Helvetica, Arial, sans-serif; font-size: 14px;">Embrace a new change with an open mind and a positive attitude. You'll be pleased at what you can achieve.</span><div><span style="background-color: white; color: rgba(0, 0, 0, 0.9); font-family: -apple-system, system-ui, "system-ui", "Segoe UI", Roboto, "Helvetica Neue", "Fira Sans", Ubuntu, Oxygen, "Oxygen Sans", Cantarell, "Droid Sans", "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Lucida Grande", Helvetica, Arial, sans-serif; font-size: 14px;"><br /></span></div><div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg5sjCbKntrqcud7xRepvdpo7_dojE6I1IVToyNfeIZuX1DaQLUMc4w5mTBzp64cWyoD8omNgAEykpN2r_Dp-GnoO87-EQ1ubhYmRx6itXIVI_6YUc7KlBoE-mnScCyUrR_SLuwl7GVyPwkVMXuj6QNT_lwH6kaKsHlDu2mS-jumf0r9eb51Q/s2000/DrivingPassed.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="2000" data-original-width="1126" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg5sjCbKntrqcud7xRepvdpo7_dojE6I1IVToyNfeIZuX1DaQLUMc4w5mTBzp64cWyoD8omNgAEykpN2r_Dp-GnoO87-EQ1ubhYmRx6itXIVI_6YUc7KlBoE-mnScCyUrR_SLuwl7GVyPwkVMXuj6QNT_lwH6kaKsHlDu2mS-jumf0r9eb51Q/s320/DrivingPassed.JPG" width="180" /></a></div><br /><span style="background-color: white; color: rgba(0, 0, 0, 0.9); font-family: -apple-system, system-ui, "system-ui", "Segoe UI", Roboto, "Helvetica Neue", "Fira Sans", Ubuntu, Oxygen, "Oxygen Sans", Cantarell, "Droid Sans", "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Lucida Grande", Helvetica, Arial, sans-serif; font-size: 14px;"><br /></span></div>Teki Chanhttp://www.blogger.com/profile/10757919473525051617noreply@blogger.com1英國麥克爾斯菲爾德馬格斯菲特53.258663 -2.11928724.948429163821153 -37.275537 81.568896836178851 33.036963tag:blogger.com,1999:blog-12402025.post-51123388622712633882022-12-01T17:00:00.027+00:002023-04-06T12:13:42.352+00:00Merry Xmas 2022<p> <table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgOM_sMRztSfJJ4zyAD04NYojTeHshKTRo_U5jwY0E2YY9XHlbIXIyeMKPTR8v5WS6jpL7g0kLzS23Ccnbd2IH4ma1mELuhQm9NWMopckvY4aFc-KlRfRhFGHKhgFcMBEoi7p492pi5w2Jq2d9LyhVFgJ7_OdODcXDw02UdA7jupqvSUkL5IA/s4032/Christmas_Party_221201.JPG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="3024" data-original-width="4032" height="300" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgOM_sMRztSfJJ4zyAD04NYojTeHshKTRo_U5jwY0E2YY9XHlbIXIyeMKPTR8v5WS6jpL7g0kLzS23Ccnbd2IH4ma1mELuhQm9NWMopckvY4aFc-KlRfRhFGHKhgFcMBEoi7p492pi5w2Jq2d9LyhVFgJ7_OdODcXDw02UdA7jupqvSUkL5IA/w400-h300/Christmas_Party_221201.JPG" width="400" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">Lunch @ The Fox</td></tr></tbody></table><br /></p><p>I felt trilled when actually meeting up the colleagues who I used to meet online only. The tradition Christmas party in a tradition pub made our gathering warm.</p>Teki Chanhttp://www.blogger.com/profile/10757919473525051617noreply@blogger.com0High St, Steventon, Abingdon OX13 6RZ英國51.6234872 -1.319361523.313253363821154 -36.4756115 79.933721036178838 33.8368885tag:blogger.com,1999:blog-12402025.post-51774569365300058382022-10-27T10:24:00.003+00:002022-10-27T10:26:55.706+00:00Event: Comparing Native Java REST API Frameworks with Matt Raible<a href="https://twitter.com/mcrjava" target="_blank">Manchester Java Community</a> hosted a meetup with a fantastic speaker <a href="https://twitter.com/mraible" target="_blank">Matt Raible</a> in <a href="https://twitter.com/InfinityWorks" target="_blank">Infinity Works</a>'s office. Matt compared the startup performance and memory usage of <a href="https://spring.io/projects/spring-boot" target="_blank">Spring Boot</a>, <a href="https://micronaut.io/" target="_blank">Micronaut</a>, <a href="https://quarkus.io/" target="_blank">Quarkus</a> and <a href="https://helidon.io/" target="_blank">Helidon</a> frameworks. He built a REST API application secured by OAuth 2.0 and ran the application in Docker with the four frameworks respectively.
<div class="separator" style="clear: both;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi5sxlogExntabWMxgziUuX3B7xJdanTLPXS0evg1pbCduKkweRxgQ_erxzVsWWyRxpUNUw5T8eg2ZdZSjRsgKIW2F81gNbsG3iKwMC6IaiS5nPiQPvLpVhfFJmmcwZIf6SWfzCKTgUNSpfKK6Yg1NFwR9Y5FFU1FViwqzi5vV-acTtBTstIg/s1600/meetup_221026.jpg" style="display: block; padding: 1em 0; text-align: center; "><img alt="" border="0" data-original-height="3024" data-original-width="4032" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi5sxlogExntabWMxgziUuX3B7xJdanTLPXS0evg1pbCduKkweRxgQ_erxzVsWWyRxpUNUw5T8eg2ZdZSjRsgKIW2F81gNbsG3iKwMC6IaiS5nPiQPvLpVhfFJmmcwZIf6SWfzCKTgUNSpfKK6Yg1NFwR9Y5FFU1FViwqzi5vV-acTtBTstIg/s1600/meetup_221026.jpg"/></a></div>
His slides and related resources can be found at <a href="https://speakerdeck.com/mraible/comparing-native-java-rest-api-frameworks-manchester-jug-2022" target="_blank">Comparing Native Java REST API Frameworks - Manchester JUG 2022</a>. Here is my thought after the talk:
<ul>
<li>Java is still hugely popular and widely used (<a href="https://tekiedit.blogspot.com/2022/04/java-and-i.html">Yay!</a>). The community should contribute to the language to encourage more younger generation to adopt it.</li>
<li>Use <a href="https://sdkman.io/" target="_blank">SDKMAN</a> to manage multiple JDK in a local computer</li>
<li>Use <a href="https://httpie.io/" target="_blank">HTTPie</a> which is better than cURL for testing API</li>
<li>Test OpenID Connect requests and debug responses with <a href="https://oidcdebugger.com/" target="_blank">OpenID Connect debugger</a></li>
<li>Build optimized Docker images for your Java applications with <a href="https://github.com/GoogleContainerTools/jib" target="_blank">Jib</a></li>
<li>Compare with startup time which does matter for Serverless</li>
<li>Take <a href="https://microprofile.io/" target="_blank">MicroProfile</a> as the baseline platform for Java microservices architecture.</li>
<li>Secure API with OAuth 2.1 to capture best practices of 2.0 with extensions</li>
<li>Spring provides much better testing support. It can mock up all the things before you reach endpoints. Spring has the strongest and dominent community and ecosystem.</li>
<li>Quarkus does not need compilation again when changed</li>
<li>Frameworks ease the development. On the other hand, the sophisticated frameworks hide the complexity which developers may not deep-dive it. Thus it may incur a risk of unwanted side effects of other libraries they are not aware of.</li>
<li>Spring framework comes with other sister projects like Spring Data and Spring Security. It is not straightforward to migrate from Spring due to dependency of sister projects.</li>
</ul>
Teki Chanhttp://www.blogger.com/profile/10757919473525051617noreply@blogger.com0No.2 Circle Square 1 Symphony Park, Manchester M1 7FS英國53.472687699999987 -2.238946825.162453863821142 -37.3951968 81.782921536178833 32.9173032tag:blogger.com,1999:blog-12402025.post-35542149966078282362022-09-26T10:49:00.001+00:002022-09-26T10:49:21.125+00:00Unique Random Numbers<p>Thanking Java's stream feature, it is easy to generate a list of unique random numbers. For example, we want to pick up 6 lucky numbers for Lotto which ranges from 1 to 59.</p><p class="p1" style="font-size: 11px; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: normal; margin: 0px;"><span class="s1" style="font-variant-ligatures: no-common-ligatures;"><span style="color: #274e13; font-family: courier;">new Random().ints(1, 59+1).distinct().limit(6).sorted().boxed().collect(Collectors.toList());</span></span></p><p><br /></p>Teki Chanhttp://www.blogger.com/profile/10757919473525051617noreply@blogger.com0tag:blogger.com,1999:blog-12402025.post-82060414124326446252022-08-31T17:07:00.084+00:002022-08-31T17:07:00.163+00:00J Forum<p>I joined an online conference called <a href="https://skillsmatter.com/conferences/13869-java-forum" target="_blank">J Forum</a> which explored the current state of Java ecosystem, ahead of this September's release of Java 19. Here are some takeaways:</p><p></p><ul style="text-align: left;"><li><a href="https://docs.oracle.com/javase/8/docs/technotes/guides/vm/gctuning/ergonomics.html" target="_blank">Garbage Collector Ergonomics</a>. There are several GC selections for various situations. Here are the recommendations:</li><ul><li>Serial: single core, smal heaps</li><li>Parallel: multi-core small heaps; batch jobs with any heap size</li><li>G1: responsive in medium to large heaps (request-response/DB interactions); only when processors 2+ and memory 1728MB+</li><li>Z: responsive in medium to large heaps (request-response/DB interactions); JDK 17+; Pause < 1ms</li><li>Shenandoah: responsive in medium to large heaps (request-response/DB interactions); JDK 17+; Pause <10ms</li></ul><li>GC Tuning does not only rely on setting heap size (<span style="font-family: courier;">-Xmx</span> for well-sized workloads, <span style="font-family: courier;">-XX:MaxRAMPercentage</span> for workloads to be scaled along container memory limits, <span style="font-family: courier;">-XX:ActiveProcessorCount</span>), but also understanding the workload. You should select appropriate GC and have enough CPUs (check <span style="font-family: courier;">Runtime.getRuntime().availableProcessors()</span> and <span style="font-family: courier;">-XX:+PrintFlagsFinal</span>)</li><li>Analyze VM data with JDK Flight Recorder (JFR)</li><li><a href="https://docs.pact.io/" target="_blank">Contract Testing</a> for testing an integration point by checking each application in isolation to ensure the messages it sends or receives conform to a shared understanding that is documented in a "contract".</li><li>Introduction to <a href="https://www.jcp.org" target="_blank">JCP</a></li><li>References:</li><ul><li><a href="https://docs.microsoft.com/en-us/azure/developer/java/containers/overview" target="_blank">Containerize your Java applications</a></li><li><a href="https://www.manning.com/books/the-well-grounded-java-developer-second-edition" target="_blank">The Well-Grounded Java Developer</a></li><li><a href="https://github.com/holly-cummins/house-of-microservices-quarkus-contract-testing-sample" target="_blank">Demo for Contract Testing</a></li></ul></ul><p></p><p> </p>Teki Chanhttp://www.blogger.com/profile/10757919473525051617noreply@blogger.com0tag:blogger.com,1999:blog-12402025.post-34116155509813111442022-08-01T19:04:00.002+00:002022-08-01T19:04:54.396+00:00YFinance4J and Java 17 New Features<p>Java 17 as LTS has been released since Sep 2021 while Java 8 remains widely used. I have prepared a Java library for Yahoo! Finance called <a href="https://github.com/tekichan/yfinance4j" target="_blank">YFinance4J</a> to demonstrate <a href="https://github.com/tekichan/yfinance4j/blob/main/JAVA_17_FEATURES.md" target="_blank">some new features</a> after Java 8. Hopefully the new features may tempt you to switch.</p>Teki Chanhttp://www.blogger.com/profile/10757919473525051617noreply@blogger.com0tag:blogger.com,1999:blog-12402025.post-60689690356219470232022-07-22T19:19:00.003+00:002022-07-22T19:19:29.833+00:00Event: Deploy to the cloud with Github Actions<p><a href="https://twitter.com/mcrjava" target="_blank">Manchester Java Community</a> hosted an event in a dog friendly office of <a href="https://twitter.com/kinandcarta" target="_blank">Kin + Carta</a>. We learnt about digital transformation experience as well as <a href="https://twitter.com/bbenz" target="_blank">Brian Benz</a> live coding with Github and Azure new features. </p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh5CfDYw2XqXjS5mwkhW7n_3QSN5-1rS1jZ-jnEqlaPCt7RzYXIjWEd2KQX9dDIlUDn6dalAl2WjW83LeZ9ddqc5jfia5VUjl_ev4CYGt8CsoAW7biMRzjDssQ-8-JjD2j4NnQa4ekGg5ibJwh-YOAQnoJq3Gp3dVS5G_IyGoV-BNuJpwF2vA/s4032/kinandcarta_office.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="3024" data-original-width="4032" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh5CfDYw2XqXjS5mwkhW7n_3QSN5-1rS1jZ-jnEqlaPCt7RzYXIjWEd2KQX9dDIlUDn6dalAl2WjW83LeZ9ddqc5jfia5VUjl_ev4CYGt8CsoAW7biMRzjDssQ-8-JjD2j4NnQa4ekGg5ibJwh-YOAQnoJq3Gp3dVS5G_IyGoV-BNuJpwF2vA/s320/kinandcarta_office.jpg" width="320" /></a></div><br /><p><br /></p><p>Digital Transformation experience is about to transform an enterprise to agilely adapt the digital technology, such as API Gateway and Cloud Routing, to bring better user experience.</p><p>Thanking the cloud advocate Brian, he brought us <a href="https://octoverse.github.com/" target="_blank">Octoverse Report</a> about better performance and well being for developers. He also showed us a fun feature of <a href="https://github.com/features/copilot" target="_blank">Github Co-pilot</a> as an AI pair programmer as well as more practical features in Github: <a href="https://github.com/features/codespaces">Github Codespaces</a> and <a href="https://docs.github.com/en/actions/using-github-hosted-runners/about-github-hosted-runners" target="_blank">Github-hosted runners</a>.</p><p>Certainly the key topic Brian demonstrated is <a href="https://docs.microsoft.com/en-us/azure/azure-app-configuration/howto-feature-filters-aspnet-core" target="_blank">Feature Filters</a> in Azure App. This new feature is helpful for A/B Testing and Blue-Green Deployment.</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh33oVzvwk2JqvEJ5Xp6Jmz_SuONAyHbfm0h42H5nXyj6GKwWRZLAEPLooPL23MNIuiYWKknBvKNHeSSdtk55388BvdQ0JJpua0HtqmR6wiaVxH6bcI85rSbkXUSCAX611SgZQOZN_fNZqO3-9qJXLN-DqPtUpYzxpl7CbzaOrM0aQV6J5Elg/s4032/mjc_220721.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="3024" data-original-width="4032" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh33oVzvwk2JqvEJ5Xp6Jmz_SuONAyHbfm0h42H5nXyj6GKwWRZLAEPLooPL23MNIuiYWKknBvKNHeSSdtk55388BvdQ0JJpua0HtqmR6wiaVxH6bcI85rSbkXUSCAX611SgZQOZN_fNZqO3-9qJXLN-DqPtUpYzxpl7CbzaOrM0aQV6J5Elg/s320/mjc_220721.jpg" width="320" /></a></div><br /><p>I was feeling chilled when I had a chat with participants in person. We shared our struggles in WFH and our daily coding works.</p><p><br /></p>Teki Chanhttp://www.blogger.com/profile/10757919473525051617noreply@blogger.com02 Hardman Blvd, Manchester M3 3AQ英國53.4804536 -2.253351125.170219763821152 -37.4096011 81.790687436178843 32.9028989tag:blogger.com,1999:blog-12402025.post-79691606343072589492022-07-04T21:57:00.000+00:002022-07-04T21:57:30.325+00:00Effective Java<p>Effective Java is one of must-read books for every Java programmer. Certainly this book does not introduce Java syntax, it does not instruct what Java libraries or frameworks are popular. Instead it explains best practices of Java programming in detail. This book makes you how to code in Java like an expert.</p><div class="separator" style="clear: both; text-align: center;"><a href="https://www.amazon.com/Effective-Java-Joshua-Bloch/dp/0134685997" imageanchor="1" style="margin-left: 1em; margin-right: 1em;" target="_blank"><img border="0" data-original-height="499" data-original-width="378" height="499" src="https://images-na.ssl-images-amazon.com/images/I/41zLisPNN2L._SX376_BO1,204,203,200_.jpg" width="378" /></a></div><br /><p>This book covers 11 topics as the following:</p><p></p><ul style="text-align: left;"><li>Creating and Destroying Objects</li><li>Methods Common to All Objects</li><li>Classes and Interfaces</li><li>Generics</li><li>Enums and Annotations</li><li>Lambda and Streams</li><li>Methods</li><li>General Programming</li><li>Exceptions</li><li>Concurrency</li><li>Serialization</li></ul><p></p><p>The first three chapters talks about how to start Java code designs. Instead of constructors, you should consider other methods like factory and builder. Which and how you should implement common methods like toString, equals, hashCode. Some rules are actually parts of <a href="https://tekiedit.blogspot.com/2019/08/10-oop-design-principles-used-in-stock.html">Object-Oriented Design</a> principles.</p><p>The next three chapters involves some key usages of Java: Generics, primitive types, auto-unboxing and Collections are commonly used and you should know how to use them correctly. Enum and Annotations are very useful and you could efficiently code with them. Lambda and Streams, which are two of most important features since Java 8, are preferred and used judiciously.</p><p>The following three chapters are more how to code better generally and some of the rules are applicable to other languages. The last two chapters are Java specific. It gives kind of guidelines how to use them carefully.</p><p>This book, in my opinions, is essential for those who have intermediate Java knowledge and want to advance the skills. Especially after you finish some fundamental books like hello world style, you will learn what should be better in terms of maintainability, performance and prevention of loop-hope. For example, you will learn why builders are used instead of just parameterised constructors. try-with-resource is favoured. for-loop syntax should be wisely used with Collections rather than just <i>for(int i=0; i<length; i++)</i>.</p><p>Another preferred feature of this book is to compare common mistakes and correct usage to explain the importance of the rules. For example it compares a typical getter implementation (just return a field) and defensive copies in getter to prevent internal change of immutable objects.</p><p>Generally speaking, the main ideas of this book are compliance of OOD principles, maintainable and safe codes (type-safe, thread-safe, testable) as well as well documentation with JavaDoc. A senior Java developer should well understand the ideas and coach his subordinates to write beautiful Java codes with the principles.</p>Teki Chanhttp://www.blogger.com/profile/10757919473525051617noreply@blogger.com0tag:blogger.com,1999:blog-12402025.post-59957545302637146012022-06-28T21:43:00.000+00:002022-06-28T21:43:29.724+00:00Designing Data-Intensive Applications<p>Designing Data-Intensive Applications introduces diverse landscape of technologies of storing and processing data. It covers from fundamental concepts, distributed data and data processing. This book does not tell you what software or how to build a data related application. It rather talks about how data systems work and their design concerns.</p><div class="separator" style="clear: both; text-align: center;"><a href="https://www.amazon.com/Designing-Data-Intensive-Applications-Reliable-Maintainable-dp-1449373321/dp/1449373321/ref=mt_other?_encoding=UTF8&me=&qid=" style="margin-left: 1em; margin-right: 1em;" target="_blank"><img border="0" data-original-height="499" data-original-width="381" height="499" src="https://images-na.ssl-images-amazon.com/images/I/51ZSpMl1-LL._SX379_BO1,204,203,200_.jpg" width="381" /></a></div><div><br /></div>The book starts with non-functional requirements such as reliability, scalability and maintainability. Then it jumps data models which are associated with birth of NoSQL and ORM, thus query languages. The next chapter deeply dives into storage which is a common topics of traditional databases, e.g. Hash Indexes, Sorted String Tables, Log-Structured Merge-Trees, B-Trees. The topic is also extended to OLTP and OLAP, data warehouse. In the last chapter of the first section, it turns to topics of encoding formats such as JSON, XML and binary and dataflow services such as REST, SOAP and RPC.<br /><p>The second section is about distributed data. It starts with scalability associated with Shared-Nothing Architectures. Then it talks about various replication problems (high availability, disconnected operation, latency, scalability, single-leader replication, multi-leader replication, leaderless replication, read-after-write consistency, monotonic read, consistent prefix reads), as well as partitioning problems (key range partitioning, hash partitioning, document-partitioned indexes, term-partitioned indexes). The next chapter is about Transactions. In the chapter, the author criticises the meaning of Atomicity, Consistency, Isolation, Durability, Serialisability, Two-Phase Locking, Serialisable Snapshot Isolation. Then it talks about troubles with distributed systems, consistency and consensus. The author also criticises Consistency, Availability and Partition Tolerance theorem unhelpful in the chapter.</p><p>The third section is about derived data. It talks about Batch Processing which includes traditional unix tools, MapReduce, Distributed FileSystems, Hadoop. It is concerned with problems of Partitioning, Fault Tolerance, Sort-merge joins, Broadcast hash joins, Partitioned hash joins. The next chapter is about Stream Processing which includes AMQP/JMS-style message broker, Log-based message broker, Stream-stream joins, Stream-table joins, Table-table joins. The final chapter is about the future of data systems which covers technologies and usages.</p><p>The coverage of this book is very wide, deep and comprehensive. Maybe some topics, especially for typical application developers, have been passed to the third-party experts such as database vendors or cloud service providers. Those topics are, however, still valuable and worth to reference when we design a data layer system. Particularly the demand of data layer systems has become increasing. A modern data layer system can consist of multiple persistence products from cache, file systems, databases, messaging brokers, stream processing, etc. Those topics can generally guide us how to select and combine them in our architectural design.</p><p><br /></p>Teki Chanhttp://www.blogger.com/profile/10757919473525051617noreply@blogger.com0tag:blogger.com,1999:blog-12402025.post-25236721142084799012022-06-16T07:21:00.003+00:002022-06-28T16:29:57.912+00:00Cartwright Gardens, London<p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgepXf8xWpjTmebmZctH1T0Al2a37t3d5i29x6PMwBr_LOb1CiXDUiRUcOliCYOP5BnI0x_1qxHiYDthBzyKfFwUMCNsm9fMTIEibIi8NAP8CDZcALugDb23x5hL9DoEl7kcXDuIJ6BxlV5xULU8xIHD8tKOaRFs23cPJCC9aWO2Wx79VH-Wg/s4032/Cartwright_Gardens.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="3024" data-original-width="4032" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgepXf8xWpjTmebmZctH1T0Al2a37t3d5i29x6PMwBr_LOb1CiXDUiRUcOliCYOP5BnI0x_1qxHiYDthBzyKfFwUMCNsm9fMTIEibIi8NAP8CDZcALugDb23x5hL9DoEl7kcXDuIJ6BxlV5xULU8xIHD8tKOaRFs23cPJCC9aWO2Wx79VH-Wg/s320/Cartwright_Gardens.jpg" width="320" /></a></div><br /> You'll find another you at the end of the road. Who know?<p></p>Teki Chanhttp://www.blogger.com/profile/10757919473525051617noreply@blogger.com0Cartwright Gardens, London WC1H英國51.5273064 -0.126882423.217072563821155 -35.2831324 79.837540236178853 35.0293676tag:blogger.com,1999:blog-12402025.post-91601072383466297232022-04-07T16:37:00.000+00:002022-04-07T16:37:36.030+00:00Java and I<p>
Along the release of Java 18, <a href="https://dev.java" target="_blank">dev.java</a> published an article about <a href="https://dev.java/evolution/" target="_blank">Java Platform Revolution</a>. Truly Java 8 is still one of the most popular and widely used Java version. It is not only because of the great features the article mentioned, but also the new commercial scheme has been introduced since Java 8. Anyway, Java 8 is an unforgetable milestone of Java history.
</p>
<p>
Another unforgettable Java version is, in my opinion, 1.4, which came with many features, such as Regular Expression, Cryptography, Logging, Non-blocking I/O, XML, etc, to modernise the programming language. I made my first application - Secure Chatbox Server-Client in Java twenty years ago. I posted a few articles to <a href="https://www.techrepublic.com/meet-the-team/us/tekichan/">Tech Republic</a> for Java 1.4.
</p>
<p>
Running a Java application was a nightmare at that moment. I remember that starting an Oracle application built in Java allowed me to take a nap. Running a Java applet could use up memory of your computer. It has taken a long time to rebuild its image. Nowadays Java has been widely used in enterprises, especially for backend servers and trading system desktops, Android apps, Big Data such as <a href="https://hadoop.apache.org/" target="_blank">Hadoop</a> and <a href="https://www.elastic.co/elasticsearch/" target="_blank">ElasticSearch</a> and even one of our favorite video games <a href="https://www.minecraft.net/en-us/store/minecraft-java-edition" target="_blank">Minecraft</a>.
</p>
<p>
Thanking the well established <a href="https://www.oracle.com/java/technologies/introduction-to-java.html" target="_blank">design goals</a>, Java remains one of <a href="https://spectrum.ieee.org/top-programming-languages/#/index/2021/1/1/1/1/1/50/1/50/1/50/1/30/1/30/1/20/1/20/1/5/1/50/1/100/1/50/" target="_blank">top programming languages in IEEE Spectrum in 2021</a>. Let us recall those design goals:
</p>
<ul>
<li>Simple, Object Oriented, and Familiar</li>
<li>Robust and Secure</li>
<li>Architecture Neutral and Portable</li>
<li>High Performance</li>
<li>Interpreted, Threaded, and Dynamic</li>
</ul>
<p>
I started my career with <a href="https://docs.oracle.com/javase/8/docs/technotes/guides/swing/" target="_blank">Java Swing</a>, which is an API for providing GUI in Java. I experienced coding in Notepad :P, <a href="https://www.ultraedit.com/" target="_blank">UltraEdit</a>, <a href="https://netbeans.apache.org/" target="_blank">NetBeans</a>, <a href="https://www.eclipse.org/" target="_blank">Eclipse</a> and till now <a href="https://www.jetbrains.com/idea/" target="_blank">IntelliJ</a>. I switched buidling tools from <a href="https://ant.apache.org/" target="_blank">Ant</a>, to <a href="https://maven.apache.org/what-is-maven.html" target="_blank">Maven</a>, to now <a href="https://gradle.org/" target="_blank">Gradle</a>. The language itself evolves, so do its ecosystem partners.
</p>
<p>
Then I switched more to backend side, mainly related to <a href="https://spring.io/" target="_blank">Spring Framework</a>. Its Inversion of control (IoC) container and Model-View-Controller framework have brought much productivity in development, especially for enterprise applications. By the way, last month Spring announced <a href="https://spring.io/blog/2022/03/28/an-update-on-java-17-adoption" target="_blank">an update on adoption of Java 17</a>, the latest LTS version.
</p>
<a href="https://www.oracle.com/java/technologies/java-se-support-roadmap.html" target="_blank">The next LTS version is Java 21</a>, which is supposed to be released in Sep 2023. Hopefully Java continues to evolve at an ever-faster pace, remains vital and playing an important role in enterprise applications and integrations in the coming future.Teki Chanhttp://www.blogger.com/profile/10757919473525051617noreply@blogger.com0tag:blogger.com,1999:blog-12402025.post-45121456170354180012022-02-24T22:38:00.003+00:002022-03-22T15:12:25.089+00:00Clickstream Collector<p><b>"This is My Architecture"</b> is an inspirational video series produced by AWS. HK01 shared their Serverless Clickstream Analytics Architecture in the program. Inspired by that, I created a tech stack at <a href="https://github.com/tekichan/clickstream-collector">https://github.com/tekichan/clickstream-collector</a> to demonstrate how to build a Clickstream Collector in AWS Serverless Architecture.</p><div class="separator" style="clear: both; text-align: center;"><a href="https://github.com/tekichan/clickstream-collector/raw/main/docs/clickstream_collection.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="381" data-original-width="681" height="381" src="https://github.com/tekichan/clickstream-collector/raw/main/docs/clickstream_collection.png" width="681" /></a></div><br /><p>In addition, inspired by a TV program, I built Touchwood App at <a href="https://tekichan.github.io/clickstream-collector/" target="_blank">https://tekichan.github.io/clickstream-collector/</a> as the demo frontend. Hopefully the app may bring you fortune. 😉</p>
<pre>
我阿媽話「講錯嘢要 Touchwood」。好似我咁。每日都講錯好多嘢,每日都發生好多唔如意嘅事,但就每次都搵唔到塊wood嚟touch。
有人話「樹木喺有靈性,touch一下就會有好運」,呢個app入面就有好多款wood可以touch。
有時唔只喺講錯嘢,得閒touch下都好,或者都會帶來好運。大家都try try,就算明知無用都好。
- Never @ IT狗
</pre>
Teki Chanhttp://www.blogger.com/profile/10757919473525051617noreply@blogger.com0tag:blogger.com,1999:blog-12402025.post-32664679972820713552022-02-09T08:30:00.002+00:002022-03-22T08:12:12.587+00:00Statistics Tutorial via Python and Jupyter<div style="text-align: left;"><span style="font-weight: normal;">You know what? <a href="https://www.reed.co.uk/average-salary/average-data-scientist-salary-in-london" target="_blank">The average salary of Data Scientist in London</a> is £74,644 in 2022. I have created a tutorial about <a href="https://github.com/tekichan/statistics-tutorial" target="_blank">Statistics via Python and Jupyter</a>. The tutorial aims at beginners who are interested in Data Scientist career and want to master Statistics and Python, considered as fundamental knowledges of Data Science.</span></div><div style="text-align: left;"><span style="font-weight: normal;"><br /></span></div><div style="text-align: left;"><span style="font-weight: normal;">URL: </span><a href="https://github.com/tekichan/statistics-tutorial">https://github.com/tekichan/statistics-tutorial</a></div>Teki Chanhttp://www.blogger.com/profile/10757919473525051617noreply@blogger.com0tag:blogger.com,1999:blog-12402025.post-18047624532483723482021-12-19T15:25:00.002+00:002022-06-28T16:31:02.712+00:00Introduction to EduBlocks<p>我錄製了一段廣東話視頻,介紹如何使用圖像化工具編程Python。該工具簡單易用,適合對編程有興趣的小朋友和初學者。</p>
<iframe allowfullscreen="" class="BLOG_video_class" height="322" src="https://www.youtube.com/embed/9ruUPJDCi0w" width="400" youtube-src-id="9ruUPJDCi0w"></iframe>Teki Chanhttp://www.blogger.com/profile/10757919473525051617noreply@blogger.com0tag:blogger.com,1999:blog-12402025.post-62843394924376131272021-12-15T19:52:00.015+00:002022-06-29T06:06:44.798+00:00Manchester Art Gallery<p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEifNfwMu8hHtlEyov844DgkKCraVcOdeWJAIGzEWcvMQsguDPv_28dr_b5uXsGg5IOsM0rCprrtZi-XbjG_vRld3BBg5Uvq7MMeHy_9agQe0mefsWO0TPooXg71zyTzuoYX-UeObwyA577tOCk_z8B0SvNT8QovIjog5Q8woLk6878EdshoGQ/s4032/Manchester_Art_Gallery_15_Dec_2021.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="3024" data-original-width="4032" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEifNfwMu8hHtlEyov844DgkKCraVcOdeWJAIGzEWcvMQsguDPv_28dr_b5uXsGg5IOsM0rCprrtZi-XbjG_vRld3BBg5Uvq7MMeHy_9agQe0mefsWO0TPooXg71zyTzuoYX-UeObwyA577tOCk_z8B0SvNT8QovIjog5Q8woLk6878EdshoGQ/s320/Manchester_Art_Gallery_15_Dec_2021.jpg" width="320" /></a></div><br /> Is it an illusion? A glamorous temptation.<p></p><p>or reflection of shadow? A history of sorrow.</p>Teki Chanhttp://www.blogger.com/profile/10757919473525051617noreply@blogger.com0Manchester Art Gallery, Mosley St, Manchester M2 3JL英國53.4789499 -2.241493525.168716063821158 -37.3977435 81.789183736178842 32.9147565tag:blogger.com,1999:blog-12402025.post-86011037279389284002021-10-22T04:44:00.009+00:002022-06-28T16:49:22.367+00:00Milton Park, Abingdon<p> </p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi--YXVxRReyAAxkBTi8siWMWt2jhQTuu5LVmHfvvyxX2KolDDO1VoP0I2qqVwp9veQoqdSRUdaLRBU9J4CNxYoPwhuY3LzwOVpKXOcsOXNYGXwiqmt1VMclKSAvLnkR8FKBTf7QwxjyQvUAWD02nJV-2m7ns60hBA0Q7CqHcMIeCigIKbr1Q/s4032/Milton_Park_Abingdon_22_Oct_2021.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="3024" data-original-width="4032" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi--YXVxRReyAAxkBTi8siWMWt2jhQTuu5LVmHfvvyxX2KolDDO1VoP0I2qqVwp9veQoqdSRUdaLRBU9J4CNxYoPwhuY3LzwOVpKXOcsOXNYGXwiqmt1VMclKSAvLnkR8FKBTf7QwxjyQvUAWD02nJV-2m7ns60hBA0Q7CqHcMIeCigIKbr1Q/s320/Milton_Park_Abingdon_22_Oct_2021.jpg" width="320" /></a></div><br /><p></p><p>You welcome me with goodbye. That is Autumn. </p>Teki Chanhttp://www.blogger.com/profile/10757919473525051617noreply@blogger.com0Park Dr, Abingdon, 英國51.6216252 -1.293299923.311391363821151 -36.4495499 79.931859036178849 33.8629501tag:blogger.com,1999:blog-12402025.post-77281292740939635902021-06-07T16:07:00.001+00:002022-03-22T08:12:33.212+00:00正向教育家長和教師手冊<p>今次介紹的另一本育兒「好書」叫做<a href="https://www.makepositive.hk/product-page/book" target="_blank">《正向教育家長和教師手冊》</a>,透過簡介另外五本《樂活kids正向教育故事讀本系列》的故事,從而介紹如何實踐「正向教育」。</p><div class="separator" style="clear: both; text-align: center;"><a href="https://static.wixstatic.com/media/9f1b76_15694ee967f54afa94cd40a16701d683~mv2.jpg/v1/fill/w_881,h_661,al_c,q_85,usm_0.66_1.00_0.01/9f1b76_15694ee967f54afa94cd40a16701d683~mv2.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="600" data-original-width="800" height="300" src="https://static.wixstatic.com/media/9f1b76_15694ee967f54afa94cd40a16701d683~mv2.jpg/v1/fill/w_881,h_661,al_c,q_85,usm_0.66_1.00_0.01/9f1b76_15694ee967f54afa94cd40a16701d683~mv2.jpg" width="400" /></a></div><p><br /></p><p>這本書開宗明義說明「正向教育」是通過社會科學協助個人活出美好和豐盛,接著列出當中六種美德與24個性格強項,分別是</p><p></p><ul style="text-align: left;"><li>仁愛</li><ul><li>仁慈</li><li>愛</li><li><span style="background-color: #fcff01;">社交智慧</span></li></ul><li>智慧與知識</li><ul><li>創造力</li><li>喜愛學習</li><li>好奇心</li><li>洞察力</li><li>判斷力</li></ul><li>靈性與超越</li><ul><li>對美麗和卓越的欣賞</li><li>幽默感</li><li><span style="background-color: #fcff01;">感恩</span></li><li>靈修性</li><li><span style="background-color: #fcff01;">希望</span></li></ul><li>公義</li><ul><li>團隊精神</li><li>公平</li><li>領導才能</li></ul><li>節制</li><ul><li><span style="background-color: #fcff01;">寬恕</span></li><li>審慎</li><li>謙遜</li><li>自我規範</li></ul><li>勇氣</li><ul><li>勇敢</li><li>正直</li><li>毅力/<span style="background-color: #fcff01;">堅毅</span></li><li><span style="background-color: #fcff01;">熱情與幹勁</span></li></ul></ul><p></p><p>這本書的後半部便是逐一簡介另外五本故事書的內容,從而闡述一些性格強項,並建議如何在日常生活當中實踐。每一個故事簡介不但加插故事書的可愛插圖,而且附上「正向金句」,令讀者更容易理解故事寓意。</p><p>正如書中所言,「正向教育」的對象不只是學生,而且還包括教師和家長,好讓大家一同學習、實踐與身教。假如你是教師或家長,可以先自行細閱這本60餘頁的手冊,再向兒童共同閱讀那五本故事書,並從中引導及解說,相信可以令他們更加投入故事當中,倍添樂趣與得着。</p><p><br /></p>Teki Chanhttp://www.blogger.com/profile/10757919473525051617noreply@blogger.com0tag:blogger.com,1999:blog-12402025.post-11802273543207795782021-04-06T15:21:00.001+00:002022-03-22T08:12:44.325+00:00父母見證.查經.歷奇<p>學校著我們分享有關育兒的書籍,我們便選擇這本《<a href="https://www.logos.com.hk/bf/acms/content.asp?site=logosbf&op=show&type=product&code=9789627106098" target="_blank">父母見證.查經.歷奇</a>》,在此向各位介紹一下。</p><div class="separator" style="clear: both; text-align: center;"><a href="https://www.logos.com.hk/bf/acms/content.asp?site=logosbf&op=show&type=product&code=9789627106098" style="margin-left: 1em; margin-right: 1em;" target="_blank"><img border="0" data-original-height="200" data-original-width="133" src="https://www.logos.com.hk/acms/upload/logos/images/book/9789627106098.jpg" /></a></div><div><br /></div>這本書結集多位父母,包括上市公司主席、立法會議員、抗疫英雄、知名演員、單親媽媽等等,各自分享他們育兒的經歷,中間加插不同的聖經人物育兒成功及失敗的例子,以及從箴言與詩篇中得到有關育兒的啟示。<div><br /></div><div>以下是我自己總結書中育兒要訣:</div><div><ol style="text-align: left;"><li>終身學習。沒人第一天懂得當父母,也沒人可以成為完美的父母。做父母的沒必要獨自挑起重擔,反而可以把重擔、擔憂交託給全能的神。在苦難中更見神的恩典。</li><li>以身作則。子女學習的對象不是父母的教材或訓言,而是父母待人處事的態度。在子女面前展現正確的價值觀,如聖經所言的「仁愛」、「喜樂」、「和平」、「忍耐」、「恩慈」、「良善」、「信實」、「溫柔」、「節制」
。學業反而是其次,如書中所言:「我未見過盡情發揮潛能的孩子會『揸兜』。」</li><li>坦誠相待。父母也有錯,也會遇上人生高低起伏。與其隱瞞子女,倒不如開誠布公,在子女面前展示如何改錯,或改變自己,或挫折中重新振作。</li><li>與兒同行。親子時間最寶貴,也讓父母明瞭自己的子女。子女都是罪人,會反叛。何時嚴正管教,何時放手,應該拿捏得宜。若要子女聽從父母,父母也應先聆聽子女的心底話,正如父神隨時隨地聆聽我們的禱告一樣,才能夠建立互信的基礎。</li></ol></div><div><p>書中分享父母連同聖經人物有三十個家庭,每一個家庭的經歷都各盡不同。相信這三十個不同的經歷及心得,總會有一些與你自身的境況有所相似,無論你是信主與否,也許都值得參考或效法。</p></div>Teki Chanhttp://www.blogger.com/profile/10757919473525051617noreply@blogger.com1