<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Velda Kiara</title>
    <description>The latest articles on DEV Community by Velda Kiara (@veldakiara).</description>
    <link>https://dev.to/veldakiara</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F150303%2F8699eddb-cca4-4b45-a496-546b24fe73e8.png</url>
      <title>DEV Community: Velda Kiara</title>
      <link>https://dev.to/veldakiara</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/veldakiara"/>
    <language>en</language>
    <item>
      <title>DjangoConUS 2024: From Wish to Tradition</title>
      <dc:creator>Velda Kiara</dc:creator>
      <pubDate>Mon, 17 Mar 2025 09:37:00 +0000</pubDate>
      <link>https://dev.to/veldakiara/djangoconus-2024-from-wish-to-tradition-egk</link>
      <guid>https://dev.to/veldakiara/djangoconus-2024-from-wish-to-tradition-egk</guid>
      <description>&lt;p&gt;When I attended &lt;a href="https://2025.djangocon.us/" rel="noopener noreferrer"&gt;DjangoConUS&lt;/a&gt; for the first time in 2023, I was uncertain whether I would be able to attend the next conference. However, as fate would have it, I managed to attend once again, this time with increased responsibilities. I took part in the behind-the-scenes activities that brought our beloved conference to life, and it was a wonderful experience to be part of the team. There was much happening, with numerous moving parts and deadlines to meet to ensure we all had a fantastic time. A big shout-out to the organisers of last year's conference! 🎊🎊 &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnovbccu5ssp45zokjavz.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnovbccu5ssp45zokjavz.jpg" alt="DCUS Organizers 2025" width="799" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The day before the conference commenced, we held an inaugural Black Python Devs Summit where we discussed leadership and management, featured a panel with diverse leaders, and appreciated each other's company while sharing stories about mental health and technology. Watch and read more about the &lt;a href="https://blackpythondevs.com/2024-10-19-black-python-devs-leadership-summit/" rel="noopener noreferrer"&gt;summit here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;We also had a social that tends to happen before the conference to ease everyone into the conference. I highly recommend you attend one. I got to meet Will again, and this time, I got the three books he authored signed! Thanks &lt;a href="https://www.linkedin.com/in/william-s-vincent/" rel="noopener noreferrer"&gt;Will&lt;/a&gt;!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fekjke4h6w0g6do5rfabc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fekjke4h6w0g6do5rfabc.png" alt="Will description" width="800" height="1066"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Earlier last year, I applied for the director position on the &lt;a href="https://www.defna.org/" rel="noopener noreferrer"&gt;Django Events Foundation North America board&lt;/a&gt;. &lt;a href="https://www.defna.org/" rel="noopener noreferrer"&gt;DEFNA&lt;/a&gt; is a non-profit organisation that runs DjangoConUS, and I had the privilege of being one of the directors, which entails various responsibilities along with a touch of fun, especially since we enjoyed dinner together at the conference whilst discussing the next steps for 2024 and 2025.  &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpndbb93c86g75wezrn43.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpndbb93c86g75wezrn43.jpg" alt="Dinner with the directors" width="799" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In addition to my director duties, I chaired the conference's Code of Conduct committee and volunteered to be a session chair. As a session chair, my responsibilities were:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Arriving in the room 15 minutes before the session began, &lt;/li&gt;
&lt;li&gt;Checking the speaker's preferred pronouns, &lt;/li&gt;
&lt;li&gt;Confirming whether they would be taking questions, &lt;/li&gt;
&lt;li&gt;Introducing the speaker, &lt;/li&gt;
&lt;li&gt;Keeping track of time during the talk, &lt;/li&gt;
&lt;li&gt;Monitoring for any violations of the Code of Conduct.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It may not seem like much at first, but the number of sessions adds up if you participate in more than three. I got carried away and signed up for five excellent sessions. I also volunteered to be a session chair because I wanted to attend the sessions in person. Plus, it helped me get my steps in, so no complaints!&lt;/p&gt;

&lt;p&gt;Everything is always better with friends. I dragged &lt;a href="https://www.linkedin.com/in/abigail-afi-gbadago/" rel="noopener noreferrer"&gt;Afi&lt;/a&gt; along with me. She volunteered as both a session chair for some sessions and a session manager. Session managers are responsible for session chairs and are on hand to assist during that time. Afi and I are "the terrible twos", as Dru would have dubbed us if we were starring in Despicable Me. We should have a Despicable Me theme in DjangoCons with minions running around in costumes draped with conference colours!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8sb3annbkuxu9fab1ew7.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8sb3annbkuxu9fab1ew7.jpg" alt="Afi and I" width="799" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you missed the talks, they are all accessible on &lt;a href="https://youtube.com/playlist?list=PL2NFhrDSOxgWqE_5w5CX2iUR7-P1D0ny7&amp;amp;si=ziSVepEjrIE3b0lH" rel="noopener noreferrer"&gt;Youtube&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;As the Code of Conduct chair, I ensured that the environment was welcome and respectful for all. I got the help of &lt;a href="https://www.linkedin.com/in/petergrandstaff/" rel="noopener noreferrer"&gt;Peter &lt;/a&gt;and &lt;a href="https://www.linkedin.com/in/doreennangira/" rel="noopener noreferrer"&gt;Doreen&lt;/a&gt;, who helped with the online and physical parts of the conference too to ensure everything was okay. Part of the role was ensuring that the conference report was published for transparency. You can read about it &lt;a href="https://2024.djangocon.us/news/code-of-conduct-transparency-report/" rel="noopener noreferrer"&gt;here&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I also got to make the &lt;a href="https://youtu.be/pM_NdY87GRU?si=wgovty5KlrTz2aVE" rel="noopener noreferrer"&gt;opening remarks&lt;/a&gt; for the second day of the conference, which had me over the moon. I introduced &lt;a href="https://www.linkedin.com/in/mario-a-munoz/" rel="noopener noreferrer"&gt;Mario&lt;/a&gt;, who was the &lt;a href="https://youtu.be/rN1dhRHOs3A?si=81Czt140tybrZWOe" rel="noopener noreferrer"&gt;keynote speaker&lt;/a&gt; of the day, such a nice person and a good keynote speaker. The hat demonstration was a 10/10.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqtyiyqkb6n6n70cvfsp5.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqtyiyqkb6n6n70cvfsp5.jpg" alt="Keynote" width="800" height="533"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;After the second day of the conference, a couple of us went to the arcade, where I could not for the life of me make the claw machine pick up a plushie. But worry not—no plushies were harmed; they were just rescued from the claw machine, thanks to &lt;a href="https://www.linkedin.com/in/marc-gibbons-903b2646/" rel="noopener noreferrer"&gt;Marc&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzswf3em74nafmwmrv79c.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzswf3em74nafmwmrv79c.jpg" alt="Marc and Afi" width="800" height="600"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I was fortunate to be a &lt;a href="https://youtu.be/L3zzYOkg9bI?si=p9yUH2Iy_tjzHJmu" rel="noopener noreferrer"&gt;panellist&lt;/a&gt; at the end of the conference to discuss the role of mentorship, open source, and support systems in its success, as well as the impact of communities and programmes such as &lt;a href="https://djangogirls.org/en/" rel="noopener noreferrer"&gt;Django Girls&lt;/a&gt;, &lt;a href="https://pyladies.com/" rel="noopener noreferrer"&gt;PyLadies&lt;/a&gt;, &lt;a href="https://djangonaut.space/" rel="noopener noreferrer"&gt;Djangonaut Space&lt;/a&gt;, and &lt;a href="https://blackpythondevs.com/" rel="noopener noreferrer"&gt;Black Python Devs&lt;/a&gt;. All these communities and programmes rely on donations, and any amount you can contribute will support the right cause. &lt;/p&gt;

&lt;p&gt;Being part of the panel made me reflect on my journey in open source and my growth through the years, and more is still to come. Fun fact about the panel: it's filled with Djangonauts 🚀.  &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdd5paq7spjp60xmpvhmp.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdd5paq7spjp60xmpvhmp.jpg" alt="Panel" width="799" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I want to invite you to join this year's conference. Come along, and let's have fun, chat, and contribute to open-source projects during the sprints.&lt;/p&gt;

&lt;p&gt;This &lt;a href="https://2025.djangocon.us/" rel="noopener noreferrer"&gt;year's conference &lt;/a&gt;will be in Illinois Chicago from September 8th to 12th, 2025. Be part of the conference by buying a &lt;a href="https://ti.to/defna/djangocon-us-2025" rel="noopener noreferrer"&gt;ticket&lt;/a&gt; or submitting your &lt;a href="https://pretalx.com/djangocon-us-2025/cfp" rel="noopener noreferrer"&gt;talk proposal&lt;/a&gt;. If you would like to &lt;a href="https://2025.djangocon.us/" rel="noopener noreferrer"&gt;sponsor the conference&lt;/a&gt;, reach out to us. &lt;/p&gt;

&lt;p&gt;Feel free to donate to &lt;a href="https://www.defna.org/donate/" rel="noopener noreferrer"&gt;DEFNA&lt;/a&gt; and the &lt;a href="https://www.djangoproject.com/fundraising/" rel="noopener noreferrer"&gt;Django Software Foundation&lt;/a&gt;, both of which support Django events and activities globally. &lt;/p&gt;

&lt;p&gt;See you at the conference 🤗!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkau3oq4f7lyqttxh34we.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkau3oq4f7lyqttxh34we.jpg" alt="Afi and Benedict" width="799" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>django</category>
      <category>defna</category>
    </item>
    <item>
      <title>PyCon Ireland 2024</title>
      <dc:creator>Velda Kiara</dc:creator>
      <pubDate>Sat, 07 Dec 2024 21:16:49 +0000</pubDate>
      <link>https://dev.to/veldakiara/pycon-ireland-2024-2oao</link>
      <guid>https://dev.to/veldakiara/pycon-ireland-2024-2oao</guid>
      <description>&lt;p&gt;Dublin has been on my travel list for some time, and now that my Django talk was accepted, it gave me an excuse to bump it up the list.&lt;/p&gt;

&lt;p&gt;I wasn’t prepared for the cold temperature, but the daily hot chocolate from Dolce Sicily that my favorite friend &lt;a href="https://www.linkedin.com/in/laisbsc/" rel="noopener noreferrer"&gt;Lais&lt;/a&gt; introduced me to made everything better.&lt;/p&gt;

&lt;p&gt;My talk was on &lt;a href="https://www.canva.com/design/DAGVYLczPo8/I76AY_M32Oqecmf2jdpuLw/edit?utm_content=DAGVYLczPo8&amp;amp;utm_campaign=designshare&amp;amp;utm_medium=link2&amp;amp;utm_source=sharebutton" rel="noopener noreferrer"&gt;Django Optimizations using the Django Debug Toolbar&lt;/a&gt;, code used can be found &lt;a href="https://github.com/VeldaKiara/PyConIreland" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Earlier this year I got the chance to join &lt;a href="https://djangonaut.space/" rel="noopener noreferrer"&gt;Djangonaut Space&lt;/a&gt;. Djangonaut Space is a program that focuses on group learning, sustainability, and enduring impact. Djangonauts are community members seeking to elevate their Django coding abilities and potentially become future leaders in the Django community.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqi4e5hhfw1rmt7g3ckf9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqi4e5hhfw1rmt7g3ckf9.png" alt="Djangonaut Space Page" width="800" height="491"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;During my time as a Djangonaut, I contributed to the &lt;a href="https://github.com/django-commons/django-debug-toolbar/pulls?q=is%3Apr+author%3AVeldaKiara+is%3Aclosed" rel="noopener noreferrer"&gt;Django Debug Toolbar&lt;/a&gt;. I had used the toolbar previously in a different project to track query counts, but I never really got into the internals of how it actually worked. I also started contributing to Django News by writing Django Updates. I leveled up in the project and volunteered to maintain it, which I continue to do today.&lt;/p&gt;

&lt;p&gt;PyCon Ireland was a unique two-day conference without keynotes. I attended a couple of talks, including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  How the Irish Speak English: Python machine learning for understanding Irish accents in English by &lt;a href="https://www.linkedin.com/posts/peterpatricknolan_pycon24-presentation-on-ml-for-detecting-activity-7263717015788392448-796s" rel="noopener noreferrer"&gt;Peter Nolan&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;  Securing the Supply Chain by &lt;a href="https://www.linkedin.com/posts/dtom_pyconie-python-pycon-activity-7262034004281901056-168s" rel="noopener noreferrer"&gt;Tom Doyle&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;  Build a Powerful Autonomous Assistant with AI by &lt;a href="https://www.linkedin.com/posts/judy2k_pycon-pycon-pyconie-activity-7264549651398193152-_cwB" rel="noopener noreferrer"&gt;Mark&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0f27a5uzpgkcztqn8ugj.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0f27a5uzpgkcztqn8ugj.jpg" alt="Velda Speaking" width="800" height="602"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I enjoyed delivering my talk to a receptive audience who asked thoughtful questions and provided valuable feedback. It was exciting to connect with both Django newcomers and experienced developers.&lt;/p&gt;

&lt;p&gt;The second day was filled with workshops, including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Vector Search and RAG with Python &amp;amp; MongoDB by &lt;a href="https://www.linkedin.com/posts/judy2k_pycon-pycon-pyconie-activity-7264549651398193152-_cwB" rel="noopener noreferrer"&gt;Mark&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;  Master Advanced Web Scraping Techniques in Python by &lt;a href="https://www.linkedin.com/in/fabienvauchelles/" rel="noopener noreferrer"&gt;Fabien Vauchelles&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I liked the diverse range of sessions, from AI and data analytics to Python internals and web development.&lt;/p&gt;

&lt;p&gt;Despite the chilly weather, I recommend attending PyCon Ireland. It's a fantastic opportunity to connect with other developers, learn from experienced professionals, and contribute to the vibrant Python community. I am incredibly grateful to Djangonaut Space for their support in helping me reach this milestone. Please consider &lt;a href="https://opencollective.com/djangonaut-space/contribute" rel="noopener noreferrer"&gt;supporting this amazing program&lt;/a&gt; to empower future generations of Django developers. &lt;/p&gt;

</description>
      <category>techtalks</category>
      <category>tech</category>
    </item>
    <item>
      <title>Review: Boost Your Django DX by Adam Johnson</title>
      <dc:creator>Velda Kiara</dc:creator>
      <pubDate>Sun, 25 Aug 2024 19:31:27 +0000</pubDate>
      <link>https://dev.to/veldakiara/review-boost-your-django-dx-by-adam-johnson-9ho</link>
      <guid>https://dev.to/veldakiara/review-boost-your-django-dx-by-adam-johnson-9ho</guid>
      <description>&lt;p&gt;Book reviews are delicate. You don't want to spoil it, but you also want to give potential readers a taste of what to expect. It's an artful balance between providing context and keeping the interest alive. I have tried to strike that balance in this review by offering you just enough to lure you in without revealing too much.&lt;/p&gt;

&lt;p&gt;A little back story: I first heard about this book from my good friend &lt;a href="https://twitter.com/CodenameTim" rel="noopener noreferrer"&gt;Tim&lt;/a&gt; at &lt;a href="https://djangonaut.space/" rel="noopener noreferrer"&gt;Djangonaut Space&lt;/a&gt; and added it to my read list. I had just created the tech book club channel on &lt;a href="https://discord.gg/XUc3tFqCT3" rel="noopener noreferrer"&gt;Black Python Devs Discord&lt;/a&gt; because reading with other people is fun. I mentioned this book, and we got to voting on it, and it passed. This would be the first book we read as a book club. We got a few copies gifted to us by &lt;a href="https://adamj.eu/" rel="noopener noreferrer"&gt;Adam Johnson&lt;/a&gt; through &lt;a href="https://twitter.com/muheuenga" rel="noopener noreferrer"&gt;Ngazetungue Muheue&lt;/a&gt;, which we are still honored to get as a community that just clocked one year. This review is a personal appreciation to &lt;a href="https://adamj.eu/" rel="noopener noreferrer"&gt;Adam&lt;/a&gt; for recognizing our efforts and being part of our book club journey. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7wrel3ic5j153sx0mkjf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7wrel3ic5j153sx0mkjf.png" alt="First page of the book"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I do not know about you, but any written material that calls me &lt;code&gt;dear reader&lt;/code&gt; has me locked in. That is my soft spot. Why? It's personalized for me. In that moment, it is just me and the author revealing the hidden meanings behind the words hidden in the shell case of the book.  &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2umd70y5glu90u3ky4w2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2umd70y5glu90u3ky4w2.png" alt="sweet spot"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I like how the book starts and how it's personalized to show the inspiration and its beginning.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbhib3qfyiznxn5o2kzn8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbhib3qfyiznxn5o2kzn8.png" alt="Expectations"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The expectations are also set; you clearly know what you are in for. &lt;br&gt;
Like a choose-your-own-adventure story or a show like &lt;a href="https://www.netflix.com/ke/title/80992058" rel="noopener noreferrer"&gt;Kaleidoscope&lt;/a&gt;, this book offers the freedom to cherry pick the sections that peak your interest or read it as a linear narrative from beginning to end. The best of both worlds.&lt;/p&gt;

&lt;p&gt;The book has &lt;a href="https://adamchainz.gumroad.com/l/byddx?layout=profile&amp;amp;recommended_by=library" rel="noopener noreferrer"&gt;twelve chapters&lt;/a&gt;. It starts with documentation, the source of truth, and explores how to access &lt;a href="https://twitter.com/AdamChainz/status/1826540508925083829" rel="noopener noreferrer"&gt;documentation offline&lt;/a&gt; (&lt;a href="https://devdocs.io/" rel="noopener noreferrer"&gt;DevDocs&lt;/a&gt;) or online. It then progresses towards creating your own System Checks. &lt;/p&gt;

&lt;p&gt;What I find neat about the book is that it explains code quality tools and then shows you how to create your own custom tooling as well.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Give a man fish and you feed him for a day, teach a man to fish and you feed him for a lifetime." - Lao Tzu.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Technical books can be a tough read. Their practicality often demands constant switching between the book and the code editor, which can quickly become boring. This book, however, goes beyond the typical technical text. It incorporates personality. Through small jokes and the use of unconventional words like &lt;code&gt;shebang!&lt;/code&gt;, the book injects humor and keeps you engaged.&lt;/p&gt;

&lt;p&gt;The book promises to boost your Django development. This means you need to have written some Django and Python code to easily grasp the content. Despite this, every code highlighted in the book is deconstructed and explained so that you can understand what each line does. &lt;/p&gt;

&lt;p&gt;Resources/links per page are displayed as footnotes for easy copy and paste, allowing you to read them later to avoid distractions during your reading session.&lt;/p&gt;

&lt;p&gt;Some books are read and never opened again, while others are read and referenced later. This book is in both categories: it can be read for enjoyment and also used as a reference. &lt;/p&gt;

&lt;p&gt;We have questions about the significance of names. Let me pause to address a different question in this context: what is in a book? Specifically, what is in this book?&lt;/p&gt;

&lt;p&gt;The book promises to boost your Django development by introducing you to some widely used open-source tools, providing instructions on how to use them, providing behind-the-scenes action of how the tools we use work, how features of Django work like fixes and settings, and most vital of all, how to customize the tools to fit your needs. Additionally, it provides a list of tools and concepts the book did not cover.&lt;/p&gt;

&lt;p&gt;Does it boost your Django development? In my own personal opinion, yes, it does. However, for you, &lt;a href="https://adamj.eu/books/" rel="noopener noreferrer"&gt;there is only one way to find out; read it&lt;/a&gt;! &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;I wrote this review because it's a gem, and I believe everyone should have the opportunity to discover its hidden treasures. &lt;a href="https://veldakiara.substack.com/" rel="noopener noreferrer"&gt;I love having fun with words.&lt;/a&gt; &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqw86v458vq9orjuc9ufd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqw86v458vq9orjuc9ufd.png" alt="Finished book"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>bookreview</category>
      <category>django</category>
      <category>python</category>
    </item>
    <item>
      <title>Essential Documentation Categories</title>
      <dc:creator>Velda Kiara</dc:creator>
      <pubDate>Mon, 26 Feb 2024 08:49:23 +0000</pubDate>
      <link>https://dev.to/veldakiara/essential-documentation-categories-2fbb</link>
      <guid>https://dev.to/veldakiara/essential-documentation-categories-2fbb</guid>
      <description>&lt;p&gt;Last week in the Djangonaut Space, we had a session with &lt;a href="https://mastodon.online/@EvilDMP"&gt;Daniele Procida&lt;/a&gt; called &lt;strong&gt;&lt;em&gt;Let's become confident about Django documentation, right now&lt;/em&gt;&lt;/strong&gt;. This session brought back something we discussed during the &lt;a href="https://2023.djangocon.us/"&gt;DjangoCon US 2023 Sprints&lt;/a&gt;. &lt;/p&gt;

&lt;h2&gt;
  
  
  Documentation
&lt;/h2&gt;

&lt;p&gt;Documentation is a form of art. Drawing words from thin air and placing them sensibly in a document or tool of your choice to achieve a predefined goal.&lt;/p&gt;

&lt;p&gt;Let's say I am learning Django for the first time. The first thing would be to look for step-by-step documentation (tutorial) and follow someone along to build a CRUD project. After a few trials, I learned how to build Django projects. With the knowledge I have acquired, I decided to add authentication using sign-in with Google. The next thing is to do research on how to implement sign-in with Google on a Django project. By the end of the article, I will have implemented this. However, now I am curious to know if there are different ways to implement this and if how I implemented it is the right way (reference). Now that I have learned the different ways and settled on the right way, I want to understand why most applications have moved to using single sign-on instead of email sign-ins (explanation).&lt;/p&gt;

&lt;p&gt;As per the above ideal analogy, the goals of the user have shifted, which means the resources in terms of documentation have also changed.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwhtkuimo4um6tdh6j0pj.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwhtkuimo4um6tdh6j0pj.jpg" alt="categories" width="800" height="607"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Documentation takes different forms and categories, depending on the target audience. These categories mainly include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Tutorials&lt;/li&gt;
&lt;li&gt;How-to guides &lt;/li&gt;
&lt;li&gt;Reference &lt;/li&gt;
&lt;li&gt;Explanation &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj4swexp7bhjrx6xeof82.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj4swexp7bhjrx6xeof82.png" alt="compass" width="800" height="472"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Tutorials
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;A &lt;a href="https://diataxis.fr/tutorials/"&gt;tutorial&lt;/a&gt; is an experience that takes place under the guidance of a tutor. A tutorial is always learning-oriented.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;A tutorial is where the instructor holds the reader's hand and takes them through steps to achieve a predefined goal. They provide a sense of safety and comfort to the reader because they are in the instructor's hands.&lt;/p&gt;

&lt;h3&gt;
  
  
  How To Guides
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;a href="https://diataxis.fr/how-to-guides/"&gt;How to guides&lt;/a&gt; are directions that guide the reader through a problem or towards a result. How-to guides are goal-oriented.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;How-to guides are checklists. They assume that the reader already has some knowledge. The goal of the guide is to apply the steps to what the reader is working on or wants to achieve at the time.&lt;/p&gt;

&lt;h3&gt;
  
  
  Reference
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;a href="https://diataxis.fr/reference/"&gt;Reference guides&lt;/a&gt; are technical descriptions of the machinery and how to operate it. Reference material is information-oriented.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;A reference contains information in the form of facts; no action is needed.&lt;/p&gt;

&lt;h3&gt;
  
  
  Explanation
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://diataxis.fr/explanation/"&gt;Explanation&lt;/a&gt; is a discusive treatment of a subject, that permits reflection. Explanation is understanding-oriented.&lt;/p&gt;

&lt;p&gt;Explanations reveal information in the fold that can be read while in the bathroom or doing a mundane task.&lt;/p&gt;

&lt;p&gt;To explore more of the different categories with examples and sample goals, check out this &lt;a href="https://diataxis.fr/tutorials/"&gt;resource&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Remember, documentation is not just a task; it's a powerful tool for informing and educating users. The essential categories will help you craft targeted, effective documents that meet your objectives and resonate with your audience. Adios!&lt;/p&gt;

</description>
      <category>technicalwriting</category>
      <category>documentation</category>
      <category>tutorial</category>
      <category>development</category>
    </item>
    <item>
      <title>DjangoConUS 2023: A Wish Fulfilled</title>
      <dc:creator>Velda Kiara</dc:creator>
      <pubDate>Sat, 30 Dec 2023 09:57:14 +0000</pubDate>
      <link>https://dev.to/veldakiara/djangoconus-2023-a-wish-fulfilled-2mmc</link>
      <guid>https://dev.to/veldakiara/djangoconus-2023-a-wish-fulfilled-2mmc</guid>
      <description>&lt;p&gt;I first heard of DjangoCon US in 2021. DjangoCon is a series of international conferences that brings together django enthusiasts, developers and anyone interested in the framework together to learn and network. I was particularly interested in the one being held in the US. I had not attended one before and I volunteered to help organize to get to know what happens and to help out as much as I can.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsgtoblno9mzckl6zqezo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsgtoblno9mzckl6zqezo.png" alt="Email" width="800" height="159"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I did not get a response back but that did not deter me from wanting to attend the conference one day at any capacity. That was my wish.&lt;/p&gt;

&lt;p&gt;I followed the conference everywhere, I did not want to miss any announcement. Fast forward to this year I decided to make  an application to speak. It was a gutsy move however, I would rather deal with rejection than struggle with what ifs.&lt;/p&gt;

&lt;p&gt;In June 22nd I got &lt;strong&gt;THE&lt;/strong&gt; email. I was screaming on top of my lungs, calling everyone who knew how much I wanted to speak at this conference.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7m2mykwzq3qzoxe5knit.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7m2mykwzq3qzoxe5knit.png" alt="Congratulations" width="800" height="169"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Pre-Conference
&lt;/h2&gt;

&lt;p&gt;A tradition I have before every conference I attend, I like to know who is attending and how to get in touch before the conference. The speakers list and schedule came in handy. I got to select what talks I would attend and who to have conversations on certain topics. &lt;/p&gt;

&lt;p&gt;Also, a lot of folks who attend conferences announce it on other socials so its also easy to pick up other people who are attending. I Had my list of folks I wanted to talk to and made room for other unexpected interactions. &lt;/p&gt;

&lt;h3&gt;
  
  
  Black Python Devs
&lt;/h3&gt;

&lt;p&gt;I had ice cream with folks from the Black Python Devs community at The Parlour. I got involved with the community earlier this year, after I saw &lt;a href="https://twitter.com/kjaymiller" rel="noopener noreferrer"&gt;Jay's&lt;/a&gt; Tweet on granting people early access to the &lt;a href="https://blackpythondevs.github.io/" rel="noopener noreferrer"&gt;community&lt;/a&gt;. I have been an active member and recently got into the team to help move things along. I got to meet &lt;a href="https://twitter.com/MesrenyameDogbe" rel="noopener noreferrer"&gt;Abby&lt;/a&gt;, &lt;a href="https://twitter.com/kjaymiller" rel="noopener noreferrer"&gt;Jay&lt;/a&gt;, &lt;a href="https://twitter.com/KojoIdrissa" rel="noopener noreferrer"&gt;Kojo &lt;/a&gt;and &lt;a href="https://twitter.com/BajoranEngineer" rel="noopener noreferrer"&gt;Dawn&lt;/a&gt; for the first time in person. Additionally, I made new friends like &lt;a href="https://twitter.com/ronn_zw" rel="noopener noreferrer"&gt;Ron&lt;/a&gt; who were learning about the community at that point. You can be part of the community &lt;a href="https://discord.com/invite/XUc3tFqCT3" rel="noopener noreferrer"&gt;by using this link&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Django Social
&lt;/h3&gt;

&lt;p&gt;Later that same evening we headed to the &lt;a href="https://www.linkedin.com/company/djangosocial/" rel="noopener noreferrer"&gt;Django Social&lt;/a&gt; meetup. &lt;br&gt;
Django Social is an easy to run social event for the Django community, pioneered by the &lt;a href="https://foxleytalent.com/about/" rel="noopener noreferrer"&gt;Foxley talent team&lt;/a&gt; . It was a good way to socialise before the conference.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Conference
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fusd5ubhxys29os7nis5m.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fusd5ubhxys29os7nis5m.jpg" alt="Velda and Abby" width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The conference was beyond my expectations. The talks were detailed, informative and fun. Specifically the keynote made by my friend, &lt;a href="https://twitter.com/MesrenyameDogbe" rel="noopener noreferrer"&gt;Abby&lt;/a&gt;. A little back story, &lt;a href="https://twitter.com/MesrenyameDogbe" rel="noopener noreferrer"&gt;Abby&lt;/a&gt; and I were involved with the Twitter Developer Community Pre-Musk era. We knew of each other and had interacted virtually on socials talking about open source. This conference would be my first DjangoCon, which meant I was all over the place looking for all information about what to expect. The first place to check was the schedule. I was looking for other speakers who looked like me and wishing that one of the keynote speakers was an African. In my book that would be a top-tier level of impressiveness. And it really was. Abby delivered the best &lt;a href="https://youtu.be/CDT2NqHdRUo?si=BJ9pZfJYrBVF0rNQ" rel="noopener noreferrer"&gt;keynote.&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fc0hqel6j481biiii0uje.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fc0hqel6j481biiii0uje.jpg" alt="Image of bpd" width="799" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We also had other folks giving amazing talks like &lt;a href="https://youtu.be/qowFCmaNFp4?si=SR7fXZGYfVk8N-Vo" rel="noopener noreferrer"&gt;Ron&lt;/a&gt;, &lt;a href="https://youtu.be/YrlSlOZOkNQ?si=FeLn1QB_d4-RAk_9" rel="noopener noreferrer"&gt;Abigail Afi &lt;/a&gt;and &lt;a href="https://youtu.be/FNDCGyTA5fE?si=T5gav279flmJJ4N3" rel="noopener noreferrer"&gt;Felipe&lt;/a&gt;. I also enjoyed the lighting talks. This was a new thing I experienced. Five minutes lightning talks. I was used to lighting talks being a solid 15 minutes.  &lt;/p&gt;

&lt;p&gt;The conference was a weeklong event, divided into three parts: tutorials, talks and sprints. One of my goals this year was to contribute to as many Python projects as I could including Django itself. That is exactly what I did during the sprints. I helped improve the Django documentation in particular. I had the opportunity to work with &lt;a href="https://mastodon.social/@EvilDMP@mastodon.online" rel="noopener noreferrer"&gt;Daniele&lt;/a&gt;, &lt;a href="https://mastodon.social/@nessita@fosstodon.org" rel="noopener noreferrer"&gt;Natalia&lt;/a&gt; and &lt;a href="https://mastodon.social/@lancegoyke@fosstodon.org" rel="noopener noreferrer"&gt;Lance&lt;/a&gt;, which lead to a lot more insights and discussions in terms of technical documentation.&lt;/p&gt;

&lt;h3&gt;
  
  
  My Talk
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fybn1dtfmvdbz0tjp3fkc.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fybn1dtfmvdbz0tjp3fkc.jpg" alt="Velda giving a talk" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The good, the nerve racking and the support. I did a test run previously to check if everything works on screen and it did. When I got on stage I had an issue. Murphy's law came into play. The screen was flickering in an annoying way. It did not make sense because the point of testing was to ensure it worked. There I was on stage looking good ready to deliver my talk, but waiting awkwardly as the support team figures it out. I should really look into being a stand up comedian because I could have easily entertained the audience.&lt;/p&gt;

&lt;p&gt;I am grateful to my cousins who really stepped up. Jay   and Filipe were helping me with their laptops to set up the container that had the code plus presentation while Kojo was talking me through how long I would have to finish my talk because the conference must go on. Abby was already on stage to introduce me. I really felt supported. This was my moment no matter what happened I was going to give a good talk and enjoy myself while at it. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj9g2glpmlko18pafzgdq.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj9g2glpmlko18pafzgdq.jpg" alt="Django folks" width="800" height="1066"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I did a good job and actually got to walk through the code later with &lt;a href="https://www.linkedin.com/in/aman-something/" rel="noopener noreferrer"&gt;Aman&lt;/a&gt; and &lt;a href="https://www.linkedin.com/in/anthony-o-shea-b4484695/" rel="noopener noreferrer"&gt;Anthony&lt;/a&gt; who also got to make their first open source contribution to my code. I was exhilarated because it showed that I was clear and I got to help other folks understand how to build APIs and other factors to consider. &lt;/p&gt;

&lt;p&gt;You can watch my &lt;a href="https://youtu.be/qcxio8C9Mh0?si=9C_TaYrUHf2_pusT" rel="noopener noreferrer"&gt;video here&lt;/a&gt; and get the slides &lt;a href="https://veldakiara.notion.site/Conferences-MeetUps-97cb5d0fa18e4ea5b7c0d24888c3803b" rel="noopener noreferrer"&gt;too&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The playlist for all the videos for &lt;a href="https://youtube.com/playlist?list=PL2NFhrDSOxgX41jqYSi0HmO9Wsf6WDSmf&amp;amp;si=o8hwN-KfnIWJrH0h" rel="noopener noreferrer"&gt;DjangoCon US 2023&lt;/a&gt; &lt;/p&gt;

&lt;h2&gt;
  
  
  Penny For My Thoughts
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F71ko5q3xz7flt0h4syaw.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F71ko5q3xz7flt0h4syaw.jpg" alt="me" width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I got to interact with people who I was not naturally predisposed to. I got to interact with authors like &lt;a href="https://wsvincent.com/" rel="noopener noreferrer"&gt;William Vincent&lt;/a&gt; and &lt;a href="https://ehmatthes.com/" rel="noopener noreferrer"&gt;Eric Matthes&lt;/a&gt; who answered the numerous questions I had about writing a book. They were kind enough to give me access to them in case I had any more questions come up as well.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhccyhia08yn7ve14654s.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhccyhia08yn7ve14654s.jpg" alt="William, Eric and Velda" width="800" height="600"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I also got to talk to and interact with the people who were present when Django was on its early stages and people who got involved after like &lt;a href="https://twitter.com/fwiles" rel="noopener noreferrer"&gt;Frank Wiles&lt;/a&gt;, &lt;a href="https://mastodon.social/@webology" rel="noopener noreferrer"&gt;Jeff Triplett&lt;/a&gt;,&lt;a href="https://mastodon.social/@jacob@jacobian.org" rel="noopener noreferrer"&gt;Jacob&lt;/a&gt;, &lt;a href="https://twitter.com/CodenameTim" rel="noopener noreferrer"&gt;Tim Schilling&lt;/a&gt; and &lt;a href="https://twitter.com/BajoranEngineer" rel="noopener noreferrer"&gt;Dawn Wages&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fktgedbg0n8nqwjudvs9y.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fktgedbg0n8nqwjudvs9y.jpg" alt="Djangocon US organizers" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The organisers of DjangoCon US were so kind, friendly and always willing to help throughout the conference. They are the real heroes.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsfqngab6drf2732hceuw.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsfqngab6drf2732hceuw.jpg" alt="Drew and Velda" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I belonged. What does that mean? My initial fear was not fitting in. Being a first time attendee is nerve wracking and adding that I would be speaking makes it double. Everyone was so warm and kind. I forgot that I was just meeting all this people for the first time. I loved it. I affirmed the statement that many of those who came before me did, "I came for the framework and I am choosing to stay for the community". I gotta spread the warmness to all Django folks.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F05yxs7i02oab8zmitdsa.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F05yxs7i02oab8zmitdsa.jpg" alt="Game nights" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you can attend dinners and games or activities at the end of the conferences that is where friendships are made and built. &lt;/p&gt;

&lt;p&gt;I had a great time and loved each and every moment. This conference will always have a special place in my heart. I look forward to attending more DjangoCons.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flykwuhccaszk673smxm9.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flykwuhccaszk673smxm9.jpg" alt="DjangoCon US attendees" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>django</category>
      <category>djangoconus</category>
      <category>conference</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Groove with the Funky API Versioning Boogie</title>
      <dc:creator>Velda Kiara</dc:creator>
      <pubDate>Thu, 31 Aug 2023 14:37:06 +0000</pubDate>
      <link>https://dev.to/veldakiara/groove-with-the-funky-api-versioning-boogie-2n7l</link>
      <guid>https://dev.to/veldakiara/groove-with-the-funky-api-versioning-boogie-2n7l</guid>
      <description>&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fusq7czrp163de4d3tcet.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fusq7czrp163de4d3tcet.jpeg" alt="vector" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I love playing &lt;a href="https://nekki.com/vector/"&gt;vector&lt;/a&gt; because it features a free runner who is not held by the system who runs, jumps and climbs to avoid capture by the protectors of the system. The rush, the breaking off from a system has a thrill that takes you from reality a bit. I got excited when they introduced a new version in June &lt;code&gt;v2.0.0&lt;/code&gt; which means we had a bump in terms of introduction of new features like Hard mode, level of the day, updated interface, graphics and sounds improvements as well as new gadgets. There have been patches made till &lt;code&gt;v2.0.4&lt;/code&gt; which was released on August. The Patch contained optimizations for levels 1-2 and bug fixes to ensure that we all have a good time playing. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.to/veldakiara/the-nitty-gritty-of-api-methods-2m4h"&gt;APIs&lt;/a&gt; change due to the constant evolution of software and user requirements. The strategy to manage the changes and updates is known as API versioning. &lt;/p&gt;

&lt;h2&gt;
  
  
  Factors To Consider During Versioning
&lt;/h2&gt;

&lt;p&gt;a. &lt;strong&gt;Semantic Versioning&lt;/strong&gt;: communicates the meaning of version numbers in the software in use by consumers through MAJOR.MINOR.PATCH. Vector uses semantic versioning, as demonstrated by their recent upgrade to &lt;code&gt;v2.0.4&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;The first number (&lt;code&gt;2&lt;/code&gt;) indicates the major version changes, which indicate that the software has undergone a significant change through either a new feature introduction or breaking changes.&lt;/p&gt;

&lt;p&gt;The second number (&lt;code&gt;0&lt;/code&gt;) indicates minor version changes that are backward compatible, like new features or bug fixes.&lt;/p&gt;

&lt;p&gt;The third number (&lt;code&gt;4&lt;/code&gt;) indicates patch version changes, which are bug fixes that are backward compatible.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Rules for Semantic Versioning&lt;/strong&gt;&lt;br&gt;
Major version number changes only if there are vital changes that break compatibility with previous versions.&lt;/p&gt;

&lt;p&gt;Minor version numbers are incremented only if there are slight changes to the software that are backward-compatible.&lt;/p&gt;

&lt;p&gt;The patch version number is incremented only if there are bug fixes that are backward compatible.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Benefits of Semantic Versioning&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Makes it easier to track changes being made.&lt;/li&gt;
&lt;li&gt;Helps in communicating the meaning of version numbers to clients.&lt;/li&gt;
&lt;li&gt;Makes it easier for consumers to choose the right version of software for their needs.&lt;/li&gt;
&lt;li&gt;Reduces compatibility challenges between different versions of software&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;b. &lt;strong&gt;Backward Compatibility&lt;/strong&gt;: making sure that existing clients can still communicate with the new version of the API, especially after major version updates. Existing clients should continue to use the API without any disruption when changes are made to it.&lt;/p&gt;

&lt;p&gt;c. &lt;strong&gt;Forward compatibility&lt;/strong&gt;: new clients that adapt the API after version updates should be able to interact with it seamlessly without any issues.&lt;/p&gt;

&lt;p&gt;d. &lt;strong&gt;Depreciation Period&lt;/strong&gt;: This is what I like to refer to as the notice period, for example, if you are leaving a job or a rental. This is applied to versioning too, where the maintainers and owners of the API inform users that a version of the API is about to be deprecated and how long they have to update their code to avoid issues with requests. This can be done through documentation or response headers.&lt;/p&gt;

&lt;p&gt;e. &lt;strong&gt;Documentation&lt;/strong&gt;: This is the first point of contact for the user. Clearly document the changes made in each version and provide migration guides to help developers transition to newer versions. Keep the documentation updated at all times.&lt;/p&gt;

&lt;p&gt;f. &lt;strong&gt;API Stability&lt;/strong&gt;: API endpoints and field names should remain constant or stable within a version. Avoid making frequent changes.&lt;/p&gt;

&lt;p&gt;g. &lt;strong&gt;Error Handling&lt;/strong&gt;: Handle versioning-related errors by providing informative error responses to clients, indicating that they are using an unsupported or deprecated version.&lt;/p&gt;

&lt;p&gt;h. &lt;strong&gt;Communication with Clients&lt;/strong&gt;: Clients of the API need to be informed about changes, updates, and deprecated features so they can adapt their code accordingly. This can be done through sending emails, newsletters, blog posts, and release notes.&lt;/p&gt;

&lt;h2&gt;
  
  
  API Versioning Methods
&lt;/h2&gt;

&lt;p&gt;There are different ways to choose from on how to implement versioning.  &lt;/p&gt;

&lt;p&gt;&lt;a href="https://usecsv.com/community/api-versioning#:~:text=Versioning%20through%20URL%20Path&amp;amp;text=For%20example%2C%20you%20can%20include,to%20only%20use%20the%20major"&gt;URL path versioning &lt;/a&gt;is where the version number is included in the URL path.&lt;/p&gt;

&lt;p&gt;Example: &lt;a href="https://developer.twitter.com/en/docs/platform-overview"&gt;Twitter API&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;Original Endpoint: https://api.twitter.com/1.1/statuses/user_timeline.json&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;New Version Endpoint: https://api.twitter.com/2/statuses/user_timeline.json&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://blog.hubspot.com/website/api-versioning#:~:text=Query%20Parameters,instead%20of%20in%20the%20path"&gt;Query parameter versioning&lt;/a&gt; is a method of versioning REST APIs where the version number is included as a query parameter in the URL. &lt;/p&gt;

&lt;p&gt;Example: &lt;a href="https://docs.github.com/en/rest/quickstart?apiVersion=2022-11-28"&gt;GitHub API&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;Original Endpoint: https://api.github.com/repos/octocat/Hello-World/issues&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;New Version Endpoint: https://api.github.com/repos/octocat/Hello-World/issues?version=2&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://restfulapi.net/versioning/"&gt;Header versioning&lt;/a&gt; is a method of versioning REST APIs where the version number is included as a custom header in the HTTP request. &lt;/p&gt;

&lt;p&gt;Example: &lt;a href="https://stripe.com/docs/api"&gt;Stripe API&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;Original Endpoint: https://api.stripe.com/v1/charges&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;New Version Endpoint: https://api.stripe.com/v1/charges?Stripe-Version=2019-12-03&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;Header: Stripe-Version: 2019-12-03&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://apigility.org/documentation/api-primer/versioning.html"&gt;Media Type Versioning&lt;/a&gt;: The version number is specified within the media type (MIME type) of the request or response.&lt;/p&gt;

&lt;p&gt;Example: &lt;a href="https://learn.microsoft.com/en-us/graph/use-the-api"&gt;Microsoft Graph API&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;Original Content Type: application/json&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;New Version Content-Type: application/vnd.microsoft.graph.v2+json&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://docs.oracle.com/middleware/11119/fp/concepts/chapter07.htm"&gt;Namespace Versioning&lt;/a&gt;: Versioning is incorporated into the namespace of the API's codebase or endpoint structure.&lt;/p&gt;

&lt;p&gt;Example: &lt;a href="https://docs.aws.amazon.com/AmazonS3/latest/API/Welcome.html"&gt;Amazon S3 API&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;Original Endpoint: https://s3.amazonaws.com/v1/bucket/object&lt;br&gt;
&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;New Version Endpoint: https://s3.amazonaws.com/v2/bucket/object&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://nordicapis.com/how-to-smartly-sunset-and-deprecate-apis/"&gt;No Versioning (Depreciated and Sunset Strategy)&lt;/a&gt;: API providers choose not to version their APIs but rather maintain a deprecated phase for old features while introducing new ones. This approach requires clear communication with clients about the deprecation timeline.&lt;/p&gt;

&lt;p&gt;Example: &lt;a href="https://developers.facebook.com/docs/graph-api/overview/"&gt;Facebook Graph API&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Best Practices For API Versioning
&lt;/h2&gt;

&lt;p&gt;a. &lt;strong&gt;Start with v1&lt;/strong&gt;: Begin your API versioning with v1.0.0. It's easier to manage and plan for future versions once you start with v1.&lt;/p&gt;

&lt;p&gt;b. &lt;strong&gt;Maintain Only a Few Active Versions&lt;/strong&gt;: Supporting too many versions can become cumbersome for the team. Aim to maintain only a few active versions and periodically depreciate and sunset older versions.&lt;/p&gt;

&lt;p&gt;c. &lt;strong&gt;API Documentation&lt;/strong&gt;: Keep your API documentation up-to-date and clear. State the versioning strategy being used and the changes between versions.&lt;/p&gt;

&lt;p&gt;d. &lt;strong&gt;Testing and Monitoring&lt;/strong&gt;: Thoroughly test each version of the API and actively monitor API usage to identify potential issues and vulnerabilities.&lt;/p&gt;

&lt;p&gt;e. &lt;strong&gt;Error Reporting&lt;/strong&gt;: Implement proper error reporting and logging to track version-specific issues.&lt;/p&gt;

&lt;p&gt;f. &lt;strong&gt;Communication&lt;/strong&gt;: Communicate version updates and deprecations to your API users through release notes, blog posts, or email newsletters.&lt;/p&gt;

&lt;p&gt;g. &lt;strong&gt;Granularity&lt;/strong&gt;: Consider the granularity of versioning. For minor changes, endpoint-level versioning might be enough, while major changes may require a full version update.&lt;/p&gt;

&lt;p&gt;This article has gone through an overview of API versioning, from its fundamental concepts to consider to the best practices for its implementation. By understanding the principles of API versioning, developers and stakeholders can ensure that their APIs are versioned in a way that is easy to understand, use and that minimizes the impact of changes to the API on their users. This will help to ensure the longevity, compatibility, and seamless evolution of APIs, fostering robust and adaptable systems for the future.&lt;/p&gt;

</description>
      <category>api</category>
      <category>softwareengineering</category>
      <category>programming</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Golden Ticket To Explore Google Cloud</title>
      <dc:creator>Velda Kiara</dc:creator>
      <pubDate>Mon, 07 Aug 2023 15:01:14 +0000</pubDate>
      <link>https://dev.to/veldakiara/golden-ticket-to-explore-google-cloud-54ng</link>
      <guid>https://dev.to/veldakiara/golden-ticket-to-explore-google-cloud-54ng</guid>
      <description>&lt;p&gt;Cloud computing is using technology that has five of these traits:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Getting on-demand and self-service through an interface with no human intervention&lt;/li&gt;
&lt;li&gt;Clients get access from anywhere through an internet connection.&lt;/li&gt;
&lt;li&gt;Clients don't worry about the physical location of resources provided by the cloud provider.&lt;/li&gt;
&lt;li&gt;Resources are flexible. You can get more quickly, and if you need less, they can be scaled back just as fast.&lt;/li&gt;
&lt;li&gt;Payment is made on the resources used; pay as you go, model.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Google Cloud, in particular, provides: computing, storage, big data, machine learning, application services for web, mobile analytics, and backend solutions.&lt;/p&gt;

&lt;h2&gt;
  
  
  Cloud History
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.merriam-webster.com/dictionary/colocate#:~:text=colocated%20or%20co%2Dlocated%3B%20colocating,same%20place%20or%20close%20together"&gt;Colocation&lt;/a&gt; was the first wave of cloud computing that allowed users to rent physical spaces, which was financially efficient, instead of getting involved with data centres real estate.&lt;/p&gt;

&lt;p&gt;The second wave involved virtualised data centres. I enjoy writing on paper using different colours of pens and sometimes pencils. I carry my stationery in a pouch because it's easy to lose pens, and I quite value my pens and pencils. However, as much as I love all my pens and pencils, I cannot carry them all everywhere because the size of my pouch is smaller than the number of pens and pencils I own. I have to choose what I want to use every time. But imagine if I had a fairy godmother who would whip out a magical purple pouch just for me that could fit all of my current and future pens and pencils. I would not have to worry about choosing because I could make the choice anywhere and use any pen at any given time. This is the same concept as virtualised data centres. They are like the magical purple pouch for computers and data, instead of having physical storage devices around. The magical purple pouch makes it easy to stay organised and has easy access, holding everything you need in one place.&lt;/p&gt;

&lt;p&gt;Virtualisation allows users to control and configure the environment that suits their needs.&lt;/p&gt;

&lt;p&gt;The third wave is the container-based architecture. This consists of services that are automated and scalable. Services automatically provision and configure their infrastructure to run applications.&lt;/p&gt;

&lt;p&gt;Virtualised data centres lead to the introduction of new offerings:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;IaaS (Infrastructure as a service) offers compute, storage, and network capabilities as virtual resources that are arranged similarly to physical data centres. Clients pay for resources they have chosen ahead of time.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;PaaS (platform as a service): focuses on resources for the application logic by binding code to libraries that provide access to the infrastructure that the application needs. Clients only pay for the resources they use.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Managed infrastructure and services were also introduced. Managed infrastructure and services allow companies to focus on their business goals, like delivering products faster and more reliably, while spending fewer resources on maintaining their technical infrastructure.&lt;/p&gt;

&lt;p&gt;Serverless computing was also introduced, where the developers focus on their code instead of server configuration.Google offers serverless technologies that include &lt;a href="https://cloud.google.com/functions"&gt;Cloud Functions&lt;/a&gt; and &lt;a href="https://cloud.google.com/run"&gt;Cloud Run&lt;/a&gt;.Cloud Functions manages event-driven code and offers a pay-as-you-go service, while Cloud Run allows clients to deploy their containerized microservice applications in a managed environment.&lt;/p&gt;

&lt;p&gt;SaaS (Software as a Service) is where applications are run and consumed in the cloud without the need for local storage. A good example is GMail or Drive.&lt;/p&gt;

&lt;p&gt;Google Cloud runs on Google's own global network. Google's infrastructure is based in five major locations: North America, South America, Europe, Asia, and Australia. Having multiple service locations are vital since they affect the availability, durability, and latency of information.&lt;/p&gt;

&lt;p&gt;Geographical locations are divided into different regions and zones. Regions represent geographic areas that are composed of zones. E.g., London, or Europe-West 2, is a region with three zones: europe-west2-a, europe-west2-b, and europe-west2-c. Google Cloud resources are deployed in the Zones. For redundancy and protection against natural disasters, you should run resources in different regions.&lt;/p&gt;

&lt;p&gt;Multiregion is possible in Google Cloud using &lt;a href="https://cloud.google.com/spanner"&gt;Cloud Spanner&lt;/a&gt;, which allows you to replicate the database not only in multiple zones but also in multiple regions as defined in the instance configuration. The replicas allow you to read data with low latency from multiple locations that are close to or within the region in the configuration.&lt;/p&gt;

&lt;h2&gt;
  
  
  Google Infrastructure Security
&lt;/h2&gt;

&lt;p&gt;In order to secure data and avoid breaches, security is implemented on Google Cloud, from the physical location of the data centers to the hardware, software, and underlining infrastructure.&lt;/p&gt;

&lt;p&gt;The hardware layer has three security features:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Server boards and networking equipment are made and designed by Google. The security chips deployed on servers and peripherals are also custom-made.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Have a secure boot stack to ensure that the right software is being booted correctly.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Premises security: Google designs and builds its own data centres to incorporate multiple layers of physical security protections as well as limit access to authorized personnel.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The Service deployment layer's main feature is the encryption of inter-service communication. Google's infrastructure automatically encrypts RPC (Remote Procedure Call) traffic between data centres, which is how Google services communicate with one another.&lt;/p&gt;

&lt;p&gt;The user identity layer, in this case the central identity service, is displayed to users as the login or sign-up page. The service may ask for additional information based on the risk factors, like if the user has logged in to the same device in the past. Other factors, like the implementation of the U2F open standard while signing in for authentication purposes.&lt;/p&gt;

&lt;p&gt;In the storage services layer, encryption is at rest as a security feature. Google's applications access physical storage indirectly. They use storage services and encryption using keys that are centrally managed and applied at the storage services. Hardware encryption is also enabled on the hardware in SSDs and hard drives.&lt;/p&gt;

&lt;p&gt;The Internet communication layer consists of two key security features:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Google services are registered with an infrastructure service called the Google Front End(GFE) to ensure TLS connections are ended using a public-private key pair andan X.509 certificate from a Certified Authority (CA). GFE also protects against denial-of-service ("DoS") attacks.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Denial of Service ("DoS") protection through absorbing many DoS attacks due to the scale of its infrastructure. Google has multi-tier, multi-layer DoS protections that further reduce the risk of DoS impact on services running behind GFE.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Operational security layer, which provides four key features:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Intrusion detection: rules and machine intelligence provide warnings of possible incidents. &lt;a href="https://www.synopsys.com/glossary/what-is-red-teaming.html"&gt;Red Team&lt;/a&gt; exercises are conducted to improve the effectiveness of detection and response mechanisms.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Reducing insider risk: limiting the activities of authorized personnel and monitoring access to the infrastructure&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Employees use U2F to protect against phishing attacks&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Strict software development practices that require a two-party review of code to prevent introducing certain classes of security bugs&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Having a choice whether to continue using a service or not is a factor that Google Cloud put in place to avoid locking their users to just them as vendors. Google publishes key elements using open-source licenses to create ecosystems that provide more options. For instance, the Google Kubernetes Engine allows clients to mix micro-services running across different clouds.&lt;/p&gt;

&lt;h2&gt;
  
  
  Functional Structure of Google Cloud
&lt;/h2&gt;

&lt;p&gt;Google Cloud has four levels in terms of hierarchy, starting from the top to the bottom:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Organization node: has all resources, projects, and folders of the organization.&lt;/li&gt;
&lt;li&gt;Folders are made up of projects.&lt;/li&gt;
&lt;li&gt;Projects Are made up of resources.&lt;/li&gt;
&lt;li&gt;Resources: represents virtual machines and cloud storage buckets, tables in BigQuery, or anything else in Google Cloud&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The resource hierarchy mentioned above is vital because it relates to how policies are applied when using Google Cloud. Policies are inherited downward, which means if a policy is applied to a folder, all projects within that folder will also have the same policy.&lt;/p&gt;

&lt;h3&gt;
  
  
  Projects
&lt;/h3&gt;

&lt;p&gt;Projects are the baseline for enabling and using Cloud services like managing APIs, enabling billing, adding and removing collaborators, and enabling additional services.&lt;/p&gt;

&lt;p&gt;Projects:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;are separate entities under the organization node.&lt;/li&gt;
&lt;li&gt;hold resources that belong to exactly one project.&lt;/li&gt;
&lt;li&gt;can have different owners and users.&lt;/li&gt;
&lt;li&gt;are billed and managed separately.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Google Cloud projects have three key attributes:&lt;br&gt;
&lt;strong&gt;Project IDs&lt;/strong&gt; are unique and assigned by Google Cloud and cannot be changed after creation.&lt;br&gt;
&lt;strong&gt;Project name&lt;/strong&gt;: created by users, do not have to be unique, and can be changed at anytime.&lt;br&gt;
&lt;strong&gt;Project number&lt;/strong&gt;: created by Google, unique, and cannot be changed.&lt;/p&gt;

&lt;h3&gt;
  
  
  Folders
&lt;/h3&gt;

&lt;p&gt;Folders allow you to assign policies and resources at the level of your choice. Resources inherit policies and permissions assigned to their folder.&lt;br&gt;
In cases where a team manages two projects, you can add policies to a common folder so they have the same permissions and also avoid duplication of data.&lt;/p&gt;

&lt;p&gt;Different organizations may contain many departments that have their own Google Cloud Resources . Folders allow the organizations to group the resources according to departments and have the ability to delegate administrative rights to work independently.&lt;/p&gt;

&lt;h3&gt;
  
  
  Organization Node
&lt;/h3&gt;

&lt;p&gt;To use folders, you need to have an organization node, which is the peak of the hierarchy.&lt;/p&gt;

&lt;p&gt;The organizational node comes with special roles, including administrators with the privilege to change policies and project creators with the role of controlling who can spend money.&lt;/p&gt;

&lt;p&gt;Organization nodes can be created in two ways. If a company is already a Google Workspace client, cloud projects will automatically belong to the organization node; if it is not, you can use Google Cloud Identity to generate one.&lt;/p&gt;

&lt;p&gt;IAM (Identity Access Management) is used to help administrators control who has access to folders, projects, and resources. Administrators apply policies that define &lt;strong&gt;who&lt;/strong&gt; has access &lt;strong&gt;to perform what&lt;/strong&gt; actions using &lt;strong&gt;which resources&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;"who"&lt;/strong&gt; in an IAM policy can be a Google account or group, a service account, or a Cloud identity domain. The &lt;strong&gt;"who"&lt;/strong&gt; is also referred to as a principal with its own email address as an identifier.&lt;br&gt;
 &lt;br&gt;
&lt;strong&gt;"Perform what"&lt;/strong&gt; is defined by a role. The role is an accumulation of permissions. If you grant a role to a principal, you grant all permissions that the particular role entails.&lt;/p&gt;

&lt;p&gt;You have the ability to define deny rules that prevent some principals from using certain permissions, regardless of the role they have. IAM always checks the relevant deny policies before the allow policies. Both deny and allow policies are inherited through the resource hierarchy.&lt;/p&gt;

&lt;p&gt;There are three types of roles in IAM: basic, predefined, and custom.&lt;br&gt;
Basic roles: when applied, they affect all resources in that project. They include owners, editors, viewers, and billing admins. Viewers can access resources but cannot make changes; editors and owners can access and change a resource, but owners can do more, like manage the associated roles and permissions as well as set up billing; billing admins set up billing but cannot change resources.&lt;/p&gt;

&lt;p&gt;Predefined roles: some cloud services offer predefined roles and define where those roles will be applied.&lt;/p&gt;

&lt;p&gt;Custom roles are used to give more specific permissions to a role. These roles can only be applied at the project or organizational level.&lt;/p&gt;

&lt;h4&gt;
  
  
  Service Accounts
&lt;/h4&gt;

&lt;p&gt;Service accounts are used to give permissions to a Compute Engine virtual machine. Service accounts are email addresses that use cryptographic keys to access resources instead of passwords. Service accounts do not need to be managed. Besides being an identity, service accounts are resources that can have IAM policies attached to them.&lt;/p&gt;

&lt;h4&gt;
  
  
  Cloud Identity
&lt;/h4&gt;

&lt;p&gt;Cloud identity is a tool that allows organizations to define policies and manage users and groups using the Google admin console.&lt;/p&gt;

&lt;h4&gt;
  
  
  Google Cloud Access
&lt;/h4&gt;

&lt;p&gt;There are four ways to access Google Cloud.&lt;/p&gt;

&lt;p&gt;The Google Cloud console is the Google Cloud GUI (Graphical User Interface) that helps you perform actions like diagnosing production issues on the web.&lt;/p&gt;

&lt;p&gt;The Cloud SDK and Shell: The Cloud SDK is a set of tools to manage resources on Google Cloud. The cloud shell provides access to cloud resources through the command line.&lt;/p&gt;

&lt;p&gt;The APIs: Google Cloud Services offers Google API Explorer, which shows available APIs and how to interact with them.&lt;/p&gt;

&lt;p&gt;Google Cloud Console Mobile App: It provides a range of services like starting and stopping Cloud SQL instances, metrics alerts, and seeing logs from instances.&lt;/p&gt;

&lt;p&gt;Through this article you now have a comprehensive understanding of the remarkable evolution of cloud computing,the structure and organization of Google Cloud, security features, and how to access &lt;a href="https://cloud.google.com/"&gt;Google Cloud&lt;/a&gt;. &lt;/p&gt;

</description>
      <category>googlecloud</category>
      <category>cloud</category>
      <category>devops</category>
    </item>
    <item>
      <title>The Nitty Gritty of API Methods</title>
      <dc:creator>Velda Kiara</dc:creator>
      <pubDate>Tue, 01 Aug 2023 18:51:56 +0000</pubDate>
      <link>https://dev.to/veldakiara/the-nitty-gritty-of-api-methods-2m4h</link>
      <guid>https://dev.to/veldakiara/the-nitty-gritty-of-api-methods-2m4h</guid>
      <description>&lt;p&gt;I have always had a sweet tooth, which I partly blame on my late grandfather, Nyanya. I used to enjoy the walks and drives we took when I was younger to the different candy stores looking for new candy to try as he told me stories of the olden days and how things have changed for the better, and how proud he was of how the town grew in terms of resources and infrastructure. We had a particular store that we always saved for last because the owner, Lucy, was a good friend of my grandpa. Lucy was so kind and always saved the best sweets for me. I used to get the optimal customer service treatment. This one time I wanted our usual order of red berry sweets, but there were not any at the time, and she recommended another treat, which was sweet and sour. I was skeptical, but I trusted Lucy since she was our longtime sweets plug, and if she recommends something, it's obviously top-notch.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffoz3zerj2jz7u4ygm20y.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffoz3zerj2jz7u4ygm20y.png" alt="Demonstration of API using Nyanya, Velda, lucy" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The goal of this article is to explore the different API (application programming interface) methods there are. But before the deep dive, we need to start from the top. An API is an interface between the client and the server. Case in point: my grandad and I are the clients since we want to get sweets from Lucy's shop. Lucy is the API, and the shop is her server. When we wanted our usual order, she responded by telling us that they were not available and recommended a particular type of sweet. In software development, an API gets a request from a client and provides a response through status codes like 404 if the resource is not available or 200 if the resource is available. But to know what response to give and how to interact—that is, the exchange of knowing what to ask for and how to interact—is what we are referring to as API methods.&lt;/p&gt;

&lt;p&gt;API methods are specific &lt;a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods"&gt;HTTP methods&lt;/a&gt; that interact with resources on a server through an API. The common API methods are GET, POST, PUT, PATCH, and DELETE.&lt;/p&gt;

&lt;h2&gt;
  
  
  GET
&lt;/h2&gt;

&lt;p&gt;The GET method is used to acquire data from the server without making any adjustments to it. The GET requests are read-only and should not have ramifications on the server. GET requests should be safe and idempotent, which means that the same requests should obtain the same result without altering the server.&lt;/p&gt;

&lt;h2&gt;
  
  
  POST
&lt;/h2&gt;

&lt;p&gt;The POST method is used to send data to the server to make a new resource. POST is typically used to convey data to the server for processing or add brand-new records to a collection. POST requests are idempotent because they will affect the server directly, which means that every POST request will result in a new resource being created on the server.&lt;/p&gt;

&lt;h2&gt;
  
  
  PUT
&lt;/h2&gt;

&lt;p&gt;PUT is used to replace or update an existing resource on the server. PUT conveys the representation of the resource, and the server replaces it with the data provided.&lt;/p&gt;

&lt;p&gt;PUT is idempotent since multiple PUT requests have the same effect as one request. However, if the request does not exist, the server will create one based on the data.&lt;/p&gt;

&lt;h2&gt;
  
  
  PATCH
&lt;/h2&gt;

&lt;p&gt;PATCH is a method that updates partial information on an existing resource. Sort of like how an edit button works, make a few changes, say a spelling mistake in a word of a sentence, but the rest of the sentence remains the same. &lt;/p&gt;

&lt;h2&gt;
  
  
  DELETE
&lt;/h2&gt;

&lt;p&gt;DELETE is used to remove a specified resource permanently from the server. DELETE is not idempotent since it eradicates a resource from a server.&lt;/p&gt;

&lt;h3&gt;
  
  
  Differences Between PUT and PATCH
&lt;/h3&gt;

&lt;p&gt;A common question asked when interacting with API methods is what are the key differences between PUT and PATCH. They are so similar yet so different.&lt;/p&gt;

&lt;p&gt;The PUT method is used to replace a whole resource. To clarify, we have a product resource with a name, price, and description. To replace the entire resource, we would have to change the information on all the fields (name, price, and description) that are going to be sent as a request.&lt;/p&gt;

&lt;p&gt;The PATCH method updates specific parts of the resource. Using the same example, we have a product resource with a name, price, and description. For PATCH, we can update the description and add information to that field. If the description was "plain purple sweater" we can update it to "purple sweater with white lace on the front".&lt;/p&gt;

&lt;p&gt;PUT is idempotent, meaning calling it a couple of times with the same data has the same effect as calling it once, while PATCH is not idempotent, so calling it with the same data may yield unexpected results.&lt;/p&gt;

&lt;p&gt;PUT is used to create or update a resource, while PATCH is used to update resources.&lt;/p&gt;

&lt;p&gt;The differences come up depending on the use case, control level, and efficiency. If you need to replace the entirety of a resource, use PUT; if you want to modify the data without overwriting the existing resource, use PATCH.&lt;/p&gt;

&lt;h3&gt;
  
  
  Best Practices of API Methods
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;GET&lt;/strong&gt; &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Use GET to perform operations that can only be read and  do not affect the server.&lt;/li&gt;
&lt;li&gt;Make use of query parameters such as sorting, filtering, and paginating the responses for easy access.&lt;/li&gt;
&lt;li&gt;Adapt caching mechanisms like ETag and Last-Modified to reduce the server load and improve the response time for requests made repeatedly.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;POST&lt;/strong&gt; &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Use POST to create new resources on the server.&lt;/li&gt;
&lt;li&gt;Have a clear illustration of the request payload format and structure of the resource that is created in the response.&lt;/li&gt;
&lt;li&gt;The new resource added should have a unique identifier for ease of access.&lt;/li&gt;
&lt;li&gt;Ensure that the requests are not idempotent.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;PUT&lt;/strong&gt; &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Replace a whole resource on the server using PUT.&lt;/li&gt;
&lt;li&gt;Have the complete resource with required fields so that if some fields are not provided, they should be set or reset to default values.&lt;/li&gt;
&lt;li&gt;Ensure the PUT request is idempotent.&lt;/li&gt;
&lt;li&gt;Adapt versioning to handle updates to resources without breaking compatibility with older users.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;PATCH&lt;/strong&gt; &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;For partial updates to an existing resource, use PATCH.&lt;/li&gt;
&lt;li&gt;Define the format clearly and concisely for the PATCH requests and have the supported operations documented.&lt;/li&gt;
&lt;li&gt;Ensure the server applies the partial changes correctly, leaving the untouched attributes unchanged.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;DELETE&lt;/strong&gt; &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Use DELETE to eradicate a resource &lt;/li&gt;
&lt;li&gt;Have authentication and authorisation mechanisms in place to prevent eradication of resources by unauthorised persons&lt;/li&gt;
&lt;li&gt;Return proper HTTP status codes&lt;/li&gt;
&lt;li&gt;Ensure DELETE requests are not idempotent&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In conclusion, API methods play a fundamental role in enabling seamless communication and interaction between different software components in web development. Each method serves specific functions and has distinct characteristics, allowing developers to perform a wide range of operations on resources. As software continues to evolve, API methods will be at the forefront of driving the future of interconnected software ecosystems.&lt;/p&gt;

</description>
      <category>api</category>
      <category>programming</category>
      <category>webdev</category>
    </item>
    <item>
      <title>The Uncreative Software Engineer's Compendium to Testing</title>
      <dc:creator>Velda Kiara</dc:creator>
      <pubDate>Mon, 31 Jul 2023 08:52:10 +0000</pubDate>
      <link>https://dev.to/veldakiara/the-uncreative-software-engineers-compendium-to-testing-3b10</link>
      <guid>https://dev.to/veldakiara/the-uncreative-software-engineers-compendium-to-testing-3b10</guid>
      <description>&lt;p&gt;Testing is an integral part of software engineering, specifically for all the stakeholders involved. The users get to enjoy software that is user-friendly and satisfies their needs, while the engineers enjoy building software that is error- and bug-free.&lt;/p&gt;

&lt;h2&gt;
  
  
  Benefits of Testing
&lt;/h2&gt;

&lt;p&gt;Bug detection and prevention: developers can identify bugs, errors, and defects in the software during development and get them resolved to avoid causing user inconveniences. This also saves time, cost, and effort to fix them in production.&lt;/p&gt;

&lt;p&gt;Quality assurance: testing ensures that the software meets specific requirements in regard to functionality, performance, security, and user satisfaction.&lt;/p&gt;

&lt;p&gt;User experience: usability testing allows the developer to identify areas that need improvement to create an application that is user-friendly and easy to use.&lt;/p&gt;

&lt;p&gt;Risk mitigation: security and performance testing allow the discovery of potential vulnerability points and bottlenecks that can be resolved before deployment.&lt;/p&gt;

&lt;p&gt;Continuous integration and Continuous delivery (CI/CD): automated tests are done at each stage of development to ensure changes made do not cause a break in the application or introduce new issues, and for a faster delivery process.&lt;/p&gt;

&lt;p&gt;Customer confidence: testing increases the trust of clients that the software will function as expected without critical errors, which leads to customer adoption and loyalty.&lt;/p&gt;

&lt;p&gt;Regulatory compliance: the software may be subject to legal compliance; testing helps verify that the software is legally compliant, which reduces the risk of penalties and legal actions.&lt;/p&gt;

&lt;p&gt;Maintainability and scalability: well-tested software provides room for change without introducing unexpected issues, which makes it easier to scale and maintain.&lt;/p&gt;

&lt;p&gt;Team collaboration: different teams while building get more involved; like testers, product owners, and developers, they communicate and issue feedback, which leads to a better understanding of requirements and potential requirements.&lt;/p&gt;

&lt;h2&gt;
  
  
  Types of Tests
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Unit Testing
&lt;/h3&gt;

&lt;p&gt;As atoms are the smallest unit of matter, unit testing tests the smallest unit of software at the lowest level. This includes functions, methods, classes, components, and modules.&lt;/p&gt;

&lt;p&gt;There are different unit-testing tools depending on the language being used. In Python, for example, there are a range of tools that you can use for this:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://docs.python.org/3/library/unittest.html"&gt;Unittest&lt;/a&gt;: a built-in unit testing framework for Python that provides test discovery, test fixtures, and various assertion methods.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://pytest.org/"&gt;Pytest&lt;/a&gt;: is a third-party testing framework that supports fixtures, parameterized testing, and easy test discovery while having room to add plugins to extend its functionality.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://docs.nose2.io/"&gt;Nose2&lt;/a&gt;: It offers test discovery, fixture support, and plugin support. It is almost identical to Pytest but is preferred due to its features and simplicity.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://docs.python.org/3/library/doctest.html"&gt;Doctest&lt;/a&gt;: this is embedding test cases within the docstrings of your code. This module allows you to write tests directly in the docstrings and run them to ensure the code examples provided in the documentation are accurate.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://christophergs.com/python/2020/04/12/python-tox-why-use-it-and-tutorial/"&gt;Tox&lt;/a&gt;: is a testing tool that automates testing across multiple Python environments. Tox ensures the code works in different Python versions and environments.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://hypothesis.readthedocs.io/"&gt;Hypothesis&lt;/a&gt;: a property-based testing tool that generates random test data and verifies that the fields and properties hold true for various scenarios.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://docs.python.org/3/library/unittest.mock.html"&gt;Mock/unittest.mock&lt;/a&gt;: provides tools for mocking and patching objects and functions, specifically useful for isolating components during testing.&lt;/p&gt;

&lt;h3&gt;
  
  
  Integration Testing
&lt;/h3&gt;

&lt;p&gt;Integration testing involves testing the correlation between different units to ensure they work together as expected.&lt;/p&gt;

&lt;p&gt;Some tools can be used for unit and integration testing, for example: Unittest, Pytest, Nose2, Mock, and Doctest.&lt;/p&gt;

&lt;p&gt;Specific tools for integration include: &lt;/p&gt;

&lt;p&gt;&lt;a href="https://pypi.org/project/requests/"&gt;Requests&lt;/a&gt;: is an HTTP library in Python that permits HTTP requests and verifies the responses made. It tests for interactions with RESTful APIs or other web services.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.geeksforgeeks.org/selenium-python-tutorial/"&gt;Selenium&lt;/a&gt;: is used for automating web browsers and is used to test interactions across different web pages and components.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://httpretty.readthedocs.io/"&gt;HTTPretty&lt;/a&gt;: allows you to mock HTTP requests and responses. It's mainly used to simulate interactions with external APIs.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://faker.readthedocs.io/"&gt;Faker&lt;/a&gt;: a library that generates fake data that can be useful when you need data to test for various components.&lt;/p&gt;

&lt;h3&gt;
  
  
  Regression Testing
&lt;/h3&gt;

&lt;p&gt;Regression testing is re-running tests to check that the changes made, which include additions and reductions to the software, do not introduce any new defects.&lt;/p&gt;

&lt;p&gt;Regression testing can be performed in three different ways. The first one is re-testing the whole application or specific functionality affected by the incoming changes. The second is re-executing the test suite to confirm that the changes did not introduce a breaking change to the existing functionality. The third is comparing the current version of the software with the previous version to ensure there is no breakage in functionality.&lt;/p&gt;

&lt;h3&gt;
  
  
  Performance Testing
&lt;/h3&gt;

&lt;p&gt;Performance testing is a test that evaluates how the software acts under a variety of conditions, for example, speed, responsiveness, and stability during peak times. Performance testing identifies bottlenecks, potential performance issues, reliability, and the ability of the system to handle certain loads.&lt;/p&gt;

&lt;p&gt;Tools used for performance testing include:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://locust.io/"&gt;Locust&lt;/a&gt;: is an open-source load testing framework that allows you to define scenarios using Python code. It simulates a large number of concurrent users and measures the performance of your web applications and APIs.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://medium.com/bb-tutorials-and-thoughts/how-to-do-performance-testing-for-the-python-api-with-jmeter-36b589e886e4"&gt;JMeter&lt;/a&gt;: is a Java-based performance testing tool that supports scripting in Python using plugins. JMeter is used for load testing different applications, including web services.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://pytest-benchmark.readthedocs.io/"&gt;Pytest-benchmark&lt;/a&gt;: Pytest permits you to track and compare the performance of functions and code snippets over time. It identifies performance declines and improvements in your Python code.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/rakyll/hey"&gt;Hey&lt;/a&gt;: is a fast HTTP load testing tool used to test web applications and APIs. It provides a CLI (command-line interface) and supports concurrent requests.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://pypi.org/project/httpbenchmark/"&gt;Apache Benchmark&lt;/a&gt;(ab): is a command-line tool that comes with the Apache HTTP server and is used to perform load testing.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://serialized.net/2017/06/load-testing-with-vegeta-and-python/"&gt;Vegeta&lt;/a&gt;: is a Go-based load testing tool that tests the performance of your web services and APIs. Additionally, it supports rate limiting and provides detailed reports.&lt;/p&gt;

&lt;p&gt;Performance testing involves testing for different conditions as shown below:&lt;/p&gt;

&lt;p&gt;a. Load Testing &lt;/p&gt;

&lt;p&gt;Load testing is testing the stability of an application by applying a load that is equal to or less than the expected load. For instance, if an application can handle 4300 users at a time with a response time of 2.5 seconds, load testing can be done by applying the maximum load for 4300 users or less, like 3000 users, to verify that the application responds within 2.5 seconds for all users.&lt;/p&gt;

&lt;p&gt;b. Stress Testing &lt;/p&gt;

&lt;p&gt;Stress testing is testing the stability of an application by applying a load that is greater than the expected load. For instance, if an application can handle 4300 users at a time with a response time of 2.5 seconds, stress testing can be done by adding a load of 500 more users and checking the response time for all the users. The goal is to check how the application behaves under stress.&lt;/p&gt;

&lt;p&gt;c. Scalability Testing&lt;/p&gt;

&lt;p&gt;Scalability testing tests the stability as well as the response time of an application by applying more load than expected. For instance, if an application can withstand 4300 users at a time with a response time of 2.5 seconds, scalability testing can be done by applying a load of more than 1100 users and increasing it periodically to find the point of crash.&lt;/p&gt;

&lt;p&gt;4300 users, 2.5 seconds&lt;br&gt;
5800 users, 3 seconds&lt;br&gt;
6300 users, 3.5 seconds&lt;br&gt;
7000 users in 4 seconds&lt;br&gt;
8500 users crash: point identified during scalability testing&lt;/p&gt;

&lt;p&gt;d. Volume Testing&lt;/p&gt;

&lt;p&gt;Volume testing tests the stability of an application and the response time in relation to the capacity of the data being transferred to a database. Simply put, how the database handles the transfer of huge amounts of data.&lt;/p&gt;

&lt;p&gt;e. Endurance/Soak Testing&lt;/p&gt;

&lt;p&gt;Endurance testing is testing an application's stability and response time by applying the load continuously for longer time periods to ensure the application still works fine throughout.&lt;/p&gt;

&lt;h3&gt;
  
  
  Acceptance Testing
&lt;/h3&gt;

&lt;p&gt;Acceptance testing is done during the final phase of testing before an application is shared with end users. It involves testing the software in relation to the requirements and, if the users are satisfied with the output, validating the functionality of the application.&lt;/p&gt;

&lt;p&gt;Tools for acceptance testing: &lt;/p&gt;

&lt;p&gt;&lt;a href="https://behave.readthedocs.io/"&gt;Behave&lt;/a&gt;: is a Behavior-Driven Development (BDD) Python framework where you write acceptance tests in Gherkin, which is a human-readable language. The tests are written in regular text, which makes them easier for all stakeholders to understand. The tests are executed by the framework.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://pypi.org/project/pytest-bdd/"&gt;Pytest-bdd&lt;/a&gt;: is a Pytest plugin with BDD enabled to test using Gherkin while integrating seamlessly with Pytest.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://splinter.readthedocs.io/"&gt;Splinter&lt;/a&gt;: is a web testing library used for testing web applications through the abstraction of web drivers to interact with web pages and perform acceptance tests.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://pyautogui.readthedocs.io/"&gt;PyAutoGUI&lt;/a&gt;: is a library used for acceptance testing of desktop applications by programmatically controlling the mouse and keyboard to automate the interactions with the application.&lt;/p&gt;

&lt;h3&gt;
  
  
  Security Testing
&lt;/h3&gt;

&lt;p&gt;Security testing identifies vulnerabilities and weaknesses, both internal and external, in the software application that can be exploited. The aim of this test is to protect against unauthorized access and data breaches, among other ramifications.&lt;/p&gt;

&lt;p&gt;a. Penetration Testing&lt;br&gt;
Pen testing is testing carried out by external contractors to find out the weak points of the system in terms of security. The contractors carry out operations like SQL injections, URL manipulation, Privilege Elevation, session expiry, and then provide a report to the organisation.&lt;/p&gt;

&lt;p&gt;Tools for security testing: &lt;/p&gt;

&lt;p&gt;&lt;a href="https://bandit.readthedocs.io/"&gt;Bandit&lt;/a&gt;: is a tool designed  for Python applications to analyse your code for potential security issues like insecure use of functions, hardcoded password and much more.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://pypi.org/project/safety/"&gt;Safety&lt;/a&gt;: is a command line utility that scans Python dependencies against PyPI(Python Package Index) security advisories database for known security vulnerabilities. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://pypi.org/project/python-PySAP/"&gt;PySAP&lt;/a&gt;(Python Static Analysis Plugin): is an analysis tool that scans Python code to check for security issues, potential bugs and other quality problems.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.geeksforgeeks.org/pylint-module-in-python/"&gt;PyLint&lt;/a&gt;: helps identify potential security vulnerabilities and coding issues that may cause security issues.&lt;/p&gt;

&lt;h3&gt;
  
  
  Automation
&lt;/h3&gt;

&lt;p&gt;Automation in testing is the use of tools and scripts to execute test cases and compare the output with the expected results. It saves time, increases coverage and prevents monotonous tasks. Tools for this include Selenium, Pytest and Unittest.&lt;/p&gt;

&lt;h3&gt;
  
  
  Smoke Testing
&lt;/h3&gt;

&lt;p&gt;Smoke testing is a quick test conducted to check whether the essential functionalities are working as anticipated after a new build or deployment.The test validates the build to ensure no issues exist. &lt;/p&gt;

&lt;h3&gt;
  
  
  Sanity Testing
&lt;/h3&gt;

&lt;p&gt;Sanity testing entails testing a narrow and focused area to verify that the added functionality or bug fix has not affected the core features of the application. It is a subset of the regression test.&lt;/p&gt;

&lt;h3&gt;
  
  
  Exploratory Testing
&lt;/h3&gt;

&lt;p&gt;Exploratory testing is an informal testing approach where  testers perform tests without a pre-defined test plan. They execute tests based on their knowledge and understanding of the software. &lt;/p&gt;

&lt;p&gt;Resources and tools that aid exploratory testing include:&lt;/p&gt;

&lt;p&gt;Test Management Tools like &lt;a href="https://pypi.org/project/testrail-api/"&gt;TestRail&lt;/a&gt; help testers organise their exploratory sessions, track and document their findings.&lt;/p&gt;

&lt;p&gt;Session-Based Test Management (SBTM) Tools like Jira to help testers structure their sessions into time-boxed sessions for easier reporting and communication of reports.&lt;/p&gt;

&lt;p&gt;Browser Developer Tools like Chrome DevTools allow testers to inspect elements, monitor network activity and debug JavaScript during exploratory testing of web applications.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://pypi.org/project/fiddler-client/"&gt;Fiddler&lt;/a&gt;: is a web debugging tool that inspects web traffic to analyse API calls.&lt;/p&gt;

&lt;h3&gt;
  
  
  Non-destructive Testing
&lt;/h3&gt;

&lt;p&gt;Non-destructive Testing concerns methods that permit you to inspect and verify behaviour of the code without altering its state or affecting the applications functionality.&lt;/p&gt;

&lt;p&gt;Resources and tools for non-destructive testing include: &lt;/p&gt;

&lt;p&gt;&lt;a href="https://pypi.org/project/pytest-snapshot/"&gt;PyTest Snapshot Plugin&lt;/a&gt;permits visual inspection of outputs without modifying actual implementation.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://coverage.readthedocs.io/"&gt;Code Coverage Analysis&lt;/a&gt; assess the code portions tested by the current test suites without altering the code.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://pytest-with-eric.com/pytest-best-practices/pytest-monkeypatch/"&gt;Monkeypatching with pytest&lt;/a&gt;provides a  temporal replacement of functions without altering the original implementation.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://deepsource.com/blog/python-code-review-checklist"&gt;Code review and inspection&lt;/a&gt;: where team members review code to identify issues and improve the code quality without altering the codebase.&lt;/p&gt;

&lt;h3&gt;
  
  
  System Integration Testing
&lt;/h3&gt;

&lt;p&gt;System integration is joining individual components into a working system. System integration testing is the verification of the interactions between different components of an application to ensure they work together as expected and that data flows smoothly between them.&lt;/p&gt;

&lt;h3&gt;
  
  
  Continuous Testing
&lt;/h3&gt;

&lt;p&gt;Continuous testing is executing tests automatically and as frequent as changes are being made to the software. This is also a part of continuous integration and continuous delivery.&lt;br&gt;
The goal is to identify issues early, ensure quality and provide fast feedback. &lt;/p&gt;

&lt;p&gt;Some common tools for continuous testing include: &lt;/p&gt;

&lt;p&gt;&lt;a href="https://testinfra.readthedocs.io/"&gt;Testinfra&lt;/a&gt;: is a testing framework for infrastructure used to test system configurations and infrastructure as code.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.python-engineer.com/posts/run-python-github-actions/"&gt;GitHub Actions&lt;/a&gt; / &lt;a href="https://www.activestate.com/blog/how-to-set-up-ci-cd-for-python-on-gitlab/"&gt;GitLab CI &lt;/a&gt;/ &lt;a href="https://www.jenkins.io/solutions/python/"&gt;Jenkins&lt;/a&gt;: used to automate continuous testing workflow and can be configured to run scripts for every code push or pull request.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://circleci.com/docs/language-python/"&gt;CirlceCI&lt;/a&gt;: supports continuous testing for Python projects&lt;/p&gt;

&lt;p&gt;&lt;a href="https://medium.com/geekculture/automate-your-python-tests-with-travis-ci-64b4ae1743c3"&gt;Travis CI&lt;/a&gt;: integrated with Github to be used for continuous testing for Python projects.&lt;/p&gt;

&lt;h3&gt;
  
  
  API Testing
&lt;/h3&gt;

&lt;p&gt;API(Application Programming Interfaces) entails testing the endpoints to verify that they are functional, reliable and secure. &lt;/p&gt;

&lt;p&gt;Tools used for API testing include:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dredd.org/"&gt;Dredd&lt;/a&gt;: used to test APIs based on the API blueprint or OpenAPI specification, to ensure implementation matches the specification.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://networkdirection.net/python/resources/generating-python-code-from-postman/"&gt;Postman&lt;/a&gt;: provides a user-friendly interface for managing, creating and testing APIs. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://deviniti.com/support/addon/server/testflo-88/latest/overview/"&gt;TestFLO for Jira&lt;/a&gt;: is a Jira plugin that assists in executing API tests  as part of the testing process&lt;/p&gt;

&lt;p&gt;&lt;a href="https://testdriven.io/blog/fastapi-hypothesis/"&gt;Schemathesis&lt;/a&gt;: executes API tests based on OpenAPI/Swagger specifications.&lt;/p&gt;

&lt;h3&gt;
  
  
  Agile Testing
&lt;/h3&gt;

&lt;p&gt;Agile testing is a testing approach that aligns with the agile methodology which is iterative, incremental, and adaptive to changing requirements of the application due to feedback from the users. The tests are mainly carried out by the engineers involved. Popular tools for this include Jira, Trello, and Confluence. &lt;/p&gt;

&lt;h3&gt;
  
  
  Gray Box Testing
&lt;/h3&gt;

&lt;p&gt;Gray box testing is a blending of &lt;a href="https://www.checkpoint.com/cyber-hub/cyber-security/what-is-penetration-testing/what-is-black-box-testing/#:~:text=Black%20box%20testing%2C%20a%20form,automated%20black%20box%20security%20testing."&gt;black box&lt;/a&gt; and &lt;a href="https://www.geeksforgeeks.org/software-engineering-white-box-testing/"&gt;white box testing&lt;/a&gt;. In this case, the tester has some knowledge of the internal under-workings of the application. The incomplete knowledge allows testers to create tests that target specific areas while considering the overall system behaviour.&lt;/p&gt;

&lt;h3&gt;
  
  
  Data Driven Testing
&lt;/h3&gt;

&lt;p&gt;Data driven testing is where the test data is stored in a separate database. This will allow the tester to validate multiple test cases using different data sets.&lt;/p&gt;

&lt;p&gt;Tools for data driven tests include:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://smartbear.com/blog/your-guide-to-data-driven-testing/"&gt;DDT (Data-Driven Tests)&lt;/a&gt;: DDT is a library that allows you to use the &lt;code&gt;@ddt.data&lt;/code&gt; decorator to define test cases and use the data sets they provide.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.w3schools.com/python/python_json.asp"&gt;JSON &lt;/a&gt;/ &lt;a href="https://realpython.com/python-yaml/"&gt;YAML&lt;/a&gt; / &lt;a href="https://realpython.com/python-csv/"&gt;CSV&lt;/a&gt; files: Python has built-in support for the file formats to easily store and retrieve data for the data-driven test scenarios.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.paramiko.org/"&gt;Paramiko&lt;/a&gt;: entails testing SSH connections in Python.&lt;/p&gt;

&lt;h3&gt;
  
  
  Model-based Testing
&lt;/h3&gt;

&lt;p&gt;Model-based testing is where a formal model of the systems behaviour is used to generate test cases systematically.  &lt;/p&gt;

&lt;p&gt;Tools and resources to help in model testing include:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://staff.washington.edu/jon/pymodel/www/"&gt;PyModel&lt;/a&gt;: is a Python library that creates state models and generates test cases based on the models.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://pypi.org/project/specmatic/"&gt;Specmate&lt;/a&gt;: is an open-source model-based testing tool that supports web based applications to create models and provide test cases&lt;/p&gt;

&lt;p&gt;&lt;a href="https://graphwalker.github.io/"&gt;GraphWalker&lt;/a&gt;: is an open-source tool that allows creation of models in graph format and generates tests based on the graphs.&lt;/p&gt;

&lt;h3&gt;
  
  
  Basis Path Testing
&lt;/h3&gt;

&lt;p&gt;Basis Path testing is a technique that tests the control flow paths through a program. The tests need to be carried out at least once. Test cases are created based on the &lt;a href="https://www.geeksforgeeks.org/cyclomatic-complexity/"&gt;cyclomatic complexity&lt;/a&gt;, that is calculated from the number of linearly independent paths in the control flow path.&lt;/p&gt;

&lt;h3&gt;
  
  
  Conclusion
&lt;/h3&gt;

&lt;p&gt;Throughout this article, we have explored various testing methodologies in software engineering and the tools available to support each type of testing. We learned that testing is an essential and ongoing process in software development, as changes and updates to software can introduce new defects. Continuous testing is crucial to ensure that software remains reliable and meets the needs of users.&lt;/p&gt;

&lt;p&gt;To enhance your understanding of testing and stay up-to-date with emerging trends in the software testing domain, I recommend exploring the following resources:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.atlassian.com/continuous-delivery/software-testing/types-of-software-testing"&gt;Atlassian&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.softwaretestinghelp.com/types-of-software-testing/"&gt;Testing Help&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.geeksforgeeks.org/types-software-testing/"&gt;Testing types &lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.geeksforgeeks.org/software-testing-test-maturity-model/?ref=lbp"&gt;Testing Maturity&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.netsolutions.com/insights/definitive-software-testing-list/"&gt;Software Testing List&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://pypi.org/project/HeyAthena/"&gt;Hey Athena&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://artificialcorner.com/maximizing-performance-with-hey-ultimate-tool-for-load-testing-7a9cb5b60168"&gt;Maximizing performance&lt;/a&gt;&lt;/p&gt;

</description>
      <category>testing</category>
      <category>programming</category>
      <category>softwareengineering</category>
      <category>python</category>
    </item>
    <item>
      <title>Big O Notation: Time and Space Complexity</title>
      <dc:creator>Velda Kiara</dc:creator>
      <pubDate>Tue, 18 Oct 2022 21:11:03 +0000</pubDate>
      <link>https://dev.to/veldakiara/big-o-notation-time-and-space-complexity-14kk</link>
      <guid>https://dev.to/veldakiara/big-o-notation-time-and-space-complexity-14kk</guid>
      <description>&lt;p&gt;Efficiency is the word of the day. As humans we strive to be efficient in whatever we do, from moving around using Google Maps to having food delivered at our doorstep. &lt;/p&gt;

&lt;p&gt;In computing, the computational complexity is the amount of resources required to run the algorithm. Resources in this case are the time and memory needed. &lt;/p&gt;

&lt;p&gt;Time complexity is the amount of time taken by an algorithm as a function of the length of the input. Space complexity is the auxiliary memory taken by an algorithm to run as a function of the length of the input. Auxiliary memory is the lowest-cost, highest-space, and slowest-approach storage in a computer system.&lt;/p&gt;

&lt;p&gt;Time and space are crucial since they determine how different computer programs are developed, designed and add value to the end user. &lt;/p&gt;

&lt;p&gt;An ideal algorithm is one that takes less time and consumes&lt;br&gt;
minimal space. &lt;/p&gt;

&lt;p&gt;Algorithms just like humans optimizing tasks need to be executed optimally. Nothing is set in stone, most of the tradeoffs of time and space are in relation to the requirements. If the important thing of algorithm A is to run as fast as possible despite memory usage, we choose the most time efficient. While, if for the algorithm A, the vital thing is conserving space despite time, we select the most space efficient. Also, if we need to save both time and space we select one which uses an average amount of both time and space.&lt;/p&gt;

&lt;p&gt;A good example of time and space complexity is as follows:&lt;br&gt;
Example 1 to print one simple statement&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;

&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;time&lt;/span&gt;

&lt;span class="c1"&gt;# get the start time
&lt;/span&gt;&lt;span class="n"&gt;st&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;time&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;time&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;checking the time complexity example&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# get the end time
&lt;/span&gt;&lt;span class="n"&gt;et&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;time&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;time&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="c1"&gt;# get the execution time
&lt;/span&gt;&lt;span class="n"&gt;elapsed_time&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;et&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;st&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Execution time:&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;elapsed_time&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;seconds&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# output
# checking the time complexity example
# Execution time: 4.57763671875e-05 seconds
&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Example 2 to print one simple statement 10 times&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;

&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;time&lt;/span&gt;

&lt;span class="c1"&gt;# get the start time
&lt;/span&gt;&lt;span class="n"&gt;st&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;time&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;time&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nf"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;time complexity example&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# get the end time
&lt;/span&gt;&lt;span class="n"&gt;et&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;time&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;time&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="c1"&gt;# get the execution time
&lt;/span&gt;&lt;span class="n"&gt;elapsed_time&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;et&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;st&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Execution time:&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;elapsed_time&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;seconds&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# output
# time complexity example
# time complexity example
# time complexity example
# time complexity example
# time complexity example
# time complexity example
# time complexity example
# time complexity example
# time complexity example
# time complexity example
# Execution time: 6.031990051269531e-05 seconds
&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;The execution time differs for both since example one runs a simple statement(execution time of 4.57763671875e-05 seconds) while example two has a FOR Loop and the time taken is subject to the value of N, which in our case is 10 times(execution time of 6.031990051269531e-05 seconds).&lt;/p&gt;

&lt;p&gt;The two examples above clearly illustrate that for algorithms that use statements execute once and require same amount of time. While statements that have conditions like Loops will increase depending on the number of times the Loop should run. For algorithms with combinations of Loops or nested Loops and single statements, time increases proportionately based on the number of times each and every statement should run.&lt;/p&gt;

&lt;h2&gt;
  
  
  Big O Notation
&lt;/h2&gt;

&lt;p&gt;Big O Notation is used to describe the complexity of an algorithm using algebra terms. We use Big O to express running time of algorithms relative to its input, as the input size increases. &lt;/p&gt;

&lt;h2&gt;
  
  
  Types of Complexities
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Constant time – O(1)&lt;br&gt;
An algorithm has constant time when it does not depend on the input size. Which means whether the input size increases or not, the runtime will always be the same.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Linear time – O(n)&lt;br&gt;
An algorithm has linear time complexity when the run time increases with increase in the length of the input. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Logarithmic time – O (log n)&lt;br&gt;
An algorithm has logarithmic time complexity when the size of input decreases in each step, which means that the input size is not the same as the operations being done. Operations increase as the input size increases. This is commonly seen in binary trees or binary search trees, where to search values you split the array into two, to ensure operation is not done on every element of the data.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Quadratic time – O (n^2)&lt;br&gt;
An algorithm has quadratic time when the time increases non-linearly (n^2) with the length of the input. To exemplify nested Loops use this where one Loop has O(n), then finds another Loop which goes for O(n)*O(n) = O(n^2).&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If say there are 'm' Loops defined, the order will be O(n ^ m). This is called polynomial time complexity functions.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw60v8xeslmummrtoafav.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw60v8xeslmummrtoafav.png" alt="growth"&gt;&lt;/a&gt;&lt;a href="https://www.mygreatlearning.com/blog/why-is-time-complexity-essential/" rel="noopener noreferrer"&gt;Order of growth for all time complexities&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Differences in Time and Space Complexity
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Time&lt;/th&gt;
&lt;th&gt;Space&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Calculates the time taken&lt;/td&gt;
&lt;td&gt;Estimates the memory required&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Time is counted for each and every statement&lt;/td&gt;
&lt;td&gt;Memory is counted for all outputs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Input data is the main determinant&lt;/td&gt;
&lt;td&gt;The variable size is the main determinant&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Vital for solution optimization&lt;/td&gt;
&lt;td&gt;Essential for solution optimization&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Cheatsheets
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi2txut06uuc5x73hu232.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi2txut06uuc5x73hu232.png" alt="average dsa"&gt;&lt;/a&gt;&lt;a href="https://www.bigocheatsheet.com/" rel="noopener noreferrer"&gt;Common Data structure Space and Time Complexity Cheatsheet&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flh7ihucs0gl3tq7hpwoz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flh7ihucs0gl3tq7hpwoz.png" alt="array algo"&gt;&lt;/a&gt;&lt;a href="https://www.bigocheatsheet.com/" rel="noopener noreferrer"&gt;Array Sorting Algorithms Space and Time Complexity Cheatsheet&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Conclusion
&lt;/h3&gt;

&lt;p&gt;Through this article we have explored what time and space complexity and why we use Big O notation. Whether you are interviewing or learning this for the first time out of curiosity I hope this knowledge sticks with you.&lt;/p&gt;

&lt;h3&gt;
  
  
  Resources
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://towardsdatascience.com/space-and-time-complexity-in-computer-algorithms-a7fffe9e4683" rel="noopener noreferrer"&gt;Complexities&lt;/a&gt;&lt;br&gt;
&lt;a href="https://livecodestream.dev/post/complete-guide-to-understanding-time-and-space-complexity-of-algorithms/" rel="noopener noreferrer"&gt;Guide to Complexity&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.bigocheatsheet.com/" rel="noopener noreferrer"&gt;Cheatsheet&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.mygreatlearning.com/blog/why-is-time-complexity-essential/" rel="noopener noreferrer"&gt;Time Complexity&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.simplilearn.com/tutorials/data-structure-tutorial/time-and-space-complexity" rel="noopener noreferrer"&gt;Complexity differences&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.freecodecamp.org/news/big-o-notation-why-it-matters-and-why-it-doesnt-1674cfa8a23c/" rel="noopener noreferrer"&gt;Big O Notation&lt;/a&gt;&lt;/p&gt;

</description>
      <category>dsa</category>
      <category>python</category>
      <category>timecomplexity</category>
      <category>spacecomplexity</category>
    </item>
    <item>
      <title>Data Structures</title>
      <dc:creator>Velda Kiara</dc:creator>
      <pubDate>Tue, 18 Oct 2022 15:04:30 +0000</pubDate>
      <link>https://dev.to/veldakiara/data-structures-5386</link>
      <guid>https://dev.to/veldakiara/data-structures-5386</guid>
      <description>&lt;p&gt;A structure is an arrangement and organization of related elements in a system.&lt;br&gt;
Data is translated information for processing.&lt;/p&gt;

&lt;p&gt;A data structure is a fundamental way of organizing data for efficient access dependent on the situation.&lt;/p&gt;
&lt;h2&gt;
  
  
  Types Of Data Structures
&lt;/h2&gt;
&lt;h3&gt;
  
  
  Lists
&lt;/h3&gt;

&lt;p&gt;A list is an ordered collection of data which can store elements of the same type and different type.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;
&lt;span class="c1"&gt;# how to create a list, using square brackets
&lt;/span&gt;&lt;span class="n"&gt;list1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="c1"&gt;#empty list
&lt;/span&gt;&lt;span class="n"&gt;list2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;list3&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;e&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;g&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;6.5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;i&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;list2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;list3&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="c1"&gt;#output [1, 2, 3, 4, 5] [1, 'e', 'g', 6.5, 8, 'i']
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;List elements are accessed by the assigned index. The index starts from '0' and ends at 'N - 1', where N is the total number of elements.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;list3&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt; &lt;span class="c1"&gt;#goes to item at index 2 in list 3
#g
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Slicing Lists
&lt;/h4&gt;

&lt;p&gt;To slice a list you use the &lt;code&gt;:&lt;/code&gt; operator. To slice the list the start index is included while the last index is excluded.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# List slicing, syntax list[ Initial : End : IndexJump ]
&lt;/span&gt;&lt;span class="n"&gt;my_list&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;d&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;a&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;t&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;a&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;s&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;t&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;r&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;u&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;c&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;t&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;u&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;r&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;e&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;s&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="c1"&gt;# elements from index 2 to index 5
&lt;/span&gt;&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;my_list&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;&lt;span class="c1"&gt;#last item excluded
&lt;/span&gt;&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;my_list&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;&lt;span class="c1"&gt;#last item included
&lt;/span&gt;
&lt;span class="c1"&gt;# elements from index 4 to end
&lt;/span&gt;&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;my_list&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;:])&lt;/span&gt;

&lt;span class="c1"&gt;# elements beginning to end
&lt;/span&gt;&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;my_list&lt;/span&gt;&lt;span class="p"&gt;[:])&lt;/span&gt;

&lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;
output
[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;t&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;, &lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;a&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;, &lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;s&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;]
[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;t&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;, &lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;a&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;, &lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;s&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;, &lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;t&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;]
[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;s&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;, &lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;t&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;, &lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;r&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;, &lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;u&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;, &lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;c&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;, &lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;t&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;, &lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;u&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;, &lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;r&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;, &lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;e&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;, &lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;s&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;]
[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;d&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;, &lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;a&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;, &lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;t&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;, &lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;a&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;, &lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;s&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;, &lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;t&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;, &lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;r&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;, &lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;u&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;, &lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;c&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;, &lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;t&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;, &lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;u&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;, &lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;r&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;, &lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;e&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;, &lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;s&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;]
&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Elements of a list can be changed, hence the term lists are mutable.&lt;br&gt;
To change an item we can use the assignment operator &lt;code&gt;=&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;nums1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="c1"&gt;# modifying the 1st item    
&lt;/span&gt;&lt;span class="n"&gt;nums1&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;            

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;nums1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# change 2nd to 4th items
&lt;/span&gt;&lt;span class="n"&gt;nums1&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;  

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;nums1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;   

&lt;span class="c1"&gt;# output
# [1, 4, 6, 8]
# [1, 3, 5, 7]   
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To add a value to a list we use the append() method, for multiple values we use the extend() method. Concatenation of lists is when two or more lists are combined together. To concatenate use the &lt;code&gt;+&lt;/code&gt; operator&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Appending and Extending lists in Python
&lt;/span&gt;&lt;span class="n"&gt;nums&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="n"&gt;nums&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;nums&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;nums&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;extend&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;11&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;13&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;nums&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;nums&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;extend&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;15&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;14&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;16&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;18&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;nums&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# output
# [1, 4, 5, 8]
# [1, 4, 5, 8, 10, 11, 13]
# [1, 4, 5, 8, 10, 11, 13, 20, 15, 14, 16, 18]
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  List comprehensions
&lt;/h3&gt;

&lt;p&gt;This is a simple way to create a new list from a existing one.&lt;br&gt;
Syntax is &lt;code&gt;[expression for item in list]&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;#an example of list comprehension and if statement
&lt;/span&gt;&lt;span class="n"&gt;nums2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nf"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;nums2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="c1"&gt;#[0, 2, 4, 6, 8]
&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To iterate through lists we use the &lt;code&gt;for&lt;/code&gt; statement, and &lt;code&gt;not in&lt;/code&gt; statements. Other list properties can be found &lt;a href="https://www.programiz.com/python-programming/list"&gt;here&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Dictionaries
&lt;/h3&gt;

&lt;p&gt;Dictionaries are collections with &lt;code&gt;key:value&lt;/code&gt; pairs.&lt;br&gt;
To create a dictionary use the &lt;code&gt;{}&lt;/code&gt;, curly braces. To access elements we use the keys inside square brackets&lt;code&gt;[]&lt;/code&gt;, or the &lt;code&gt;get()&lt;/code&gt; method.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;#empty dict
&lt;/span&gt;&lt;span class="n"&gt;shuri&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{}&lt;/span&gt;

&lt;span class="c1"&gt;# get vs [] for retrieving elements
&lt;/span&gt;&lt;span class="n"&gt;shuri&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;title&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;ray&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;number&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;16&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;# Output: ray
&lt;/span&gt;&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;shuri&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;title&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;

&lt;span class="c1"&gt;# Output: 16
&lt;/span&gt;&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;shuri&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;number&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To add or change items in a dictionary use an assignment operator &lt;code&gt;=&lt;/code&gt;. If the key exists, the value is updated, whereas if the key is not available, both the key and value are added.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;shuri&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;title&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;ray&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;number&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;16&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="c1"&gt;#adding a value 
&lt;/span&gt;&lt;span class="n"&gt;shuri&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;color&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;purple&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;shuri&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="c1"&gt;#update the value
&lt;/span&gt;&lt;span class="n"&gt;shuri&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;title&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;sheldon&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;shuri&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# output
# {'title': 'ray', 'number': 16, 'color': 'purple'}
# {'title': 'sheldon', 'number': 16, 'color': 'purple'}
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;pop()&lt;/code&gt; method is used to remove an item from the dictionary using the key provided. &lt;code&gt;popitem()&lt;/code&gt; method removes and returns the &lt;code&gt;key:value&lt;/code&gt; pair. To remove all items we use &lt;code&gt;clear()&lt;/code&gt; method and to remove the whole dictionary we use the &lt;code&gt;del&lt;/code&gt; keyword.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;shuri&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;title&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;ray&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;number&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;16&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;street&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;kes&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;pages&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;123&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="c1"&gt;#adding a value 
&lt;/span&gt;&lt;span class="n"&gt;shuri&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;color&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;purple&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;shuri&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="c1"&gt;#update the value
&lt;/span&gt;&lt;span class="n"&gt;shuri&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;title&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;sheldon&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;shuri&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;pop&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;street&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;shuri&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;shuri&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;popitem&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;shuri&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;#clear all the items
&lt;/span&gt;&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;shuri&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;clear&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;

&lt;span class="c1"&gt;# delete the dictionary itself
&lt;/span&gt;&lt;span class="k"&gt;del&lt;/span&gt; &lt;span class="n"&gt;shuri&lt;/span&gt;

&lt;span class="c1"&gt;# output
# {'title': 'ray', 'number': 16, 'street': 'kes', 'pages': 123, 'color': 'purple'}
# kes
# {'title': 'sheldon', 'number': 16, 'pages': 123, 'color': 'purple'}
# ('color', 'purple')
# {'title': 'sheldon', 'number': 16, 'pages': 123}
# None
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Sets
&lt;/h3&gt;

&lt;p&gt;Sets are created by either using the &lt;code&gt;set()&lt;/code&gt; function or &lt;code&gt;{}&lt;/code&gt; with items separated by commas. To add an item on a set use the &lt;code&gt;add()&lt;/code&gt; method, for multiple items use &lt;code&gt;update()&lt;/code&gt; method.&lt;br&gt;
Sets do not store duplicates.&lt;/p&gt;

&lt;p&gt;Items can be removed by using &lt;code&gt;discard()&lt;/code&gt; and &lt;code&gt;remove()&lt;/code&gt;.&lt;br&gt;
The main difference between discard and remove is that remove raises an error if the element is not in the set while discard leaves the set the same.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;#create a set
&lt;/span&gt;&lt;span class="n"&gt;shuri&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;set&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="c1"&gt;#add value to the set
&lt;/span&gt;&lt;span class="n"&gt;shuri&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;shuri&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="c1"&gt;#update values to the set
&lt;/span&gt;&lt;span class="n"&gt;shuri&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;update&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;11&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;12&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;span class="nf"&gt;print &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;shuri&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;shuri&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;discard&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;shuri&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;remove&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;shuri&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;#other way to create a set
&lt;/span&gt;&lt;span class="n"&gt;sam&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sam&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# output
# {4}
# {4, 5, 6, 7, 11, 12}
# {5, 6, 11, 12}
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Set Operations
&lt;/h4&gt;

&lt;p&gt;Union is merging two sets to one using the &lt;code&gt;|&lt;/code&gt; operator.&lt;br&gt;
Intersection is the common items in the sets. Can be done in two methods using the &lt;code&gt;intersection()&lt;/code&gt; function or &lt;code&gt;&amp;amp;&lt;/code&gt; operator.&lt;br&gt;
Difference of the set is a set of elements in the first set but not in the second set or vice versa. We use the &lt;code&gt;-&lt;/code&gt; operator. This can also be achieved using the &lt;code&gt;difference()&lt;/code&gt; method.&lt;br&gt;
Symmetric difference is set of elements in the first and second set but not in both. We use the &lt;code&gt;^&lt;/code&gt; operator or the &lt;code&gt;symmetric_difference()&lt;/code&gt; method.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;#create a set
&lt;/span&gt;&lt;span class="n"&gt;shuri&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;set&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="c1"&gt;#add value to the set
&lt;/span&gt;&lt;span class="n"&gt;shuri&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;shuri&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="c1"&gt;#update values to the set
&lt;/span&gt;&lt;span class="n"&gt;shuri&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;update&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;11&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;12&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;span class="nf"&gt;print &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;shuri&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;shuri&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;discard&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;shuri&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;remove&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;shuri&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;#other way to create a set
&lt;/span&gt;&lt;span class="n"&gt;sam&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sam&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;#union
&lt;/span&gt;&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sam&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="n"&gt;shuri&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;#intersection
&lt;/span&gt;&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sam&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt; &lt;span class="n"&gt;shuri&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sam&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;intersection&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;shuri&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;

&lt;span class="c1"&gt;#difference
&lt;/span&gt;&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sam&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;shuri&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;shuri&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;difference&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sam&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;

&lt;span class="c1"&gt;#symmetric difference
&lt;/span&gt;&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sam&lt;/span&gt;&lt;span class="o"&gt;^&lt;/span&gt;&lt;span class="n"&gt;shuri&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;shuri&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;symmetric_difference&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sam&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;I hope you learned the different data structures, how to create and manipulate them.&lt;/p&gt;

&lt;h3&gt;
  
  
  Read more from these resources
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://www.programiz.com/python-programming/list"&gt;Programiz&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.geeksforgeeks.org/python-data-structures/#amp_tf=From%20%251%24s&amp;amp;aoh=16660244244881&amp;amp;referrer=https%3A%2F%2Fwww.google.com&amp;amp;ampshare=https%3A%2F%2Fwww.geeksforgeeks.org%2Fpython-data-structures%2F"&gt;DSA, Geeks for Geeks&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.programiz.com/python-programming/list-comprehension"&gt;List comprehensions&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.programiz.com/python-programming/anonymous-function"&gt;Lambda functions&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.geeksforgeeks.org/python-list-slicing/"&gt;List slicing&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.programiz.com/python-programming/dictionary"&gt;Dictionaries&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.programiz.com/python-programming/set"&gt;Set&lt;/a&gt;&lt;/p&gt;

</description>
      <category>python</category>
      <category>dsa</category>
      <category>programming</category>
    </item>
    <item>
      <title>Twitter Bot Challenge by Kenya Twitter Developer Community</title>
      <dc:creator>Velda Kiara</dc:creator>
      <pubDate>Wed, 12 Jan 2022 20:51:32 +0000</pubDate>
      <link>https://dev.to/veldakiara/twitter-bot-challenge-by-kenya-twitter-developer-community-38g6</link>
      <guid>https://dev.to/veldakiara/twitter-bot-challenge-by-kenya-twitter-developer-community-38g6</guid>
      <description>&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpgrny7gfqldvkyyjpmqa.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpgrny7gfqldvkyyjpmqa.jpg" alt="Alexander" width="800" height="600"&gt;&lt;/a&gt;Image by &lt;a href="https://unsplash.com/@alexbemore?utm_source=unsplash&amp;amp;utm_medium=referral&amp;amp;utm_content=creditCopyText"&gt;Alexander Shatov&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://twitter.com/"&gt;Twitter&lt;/a&gt; is a social media site whose purpose is to connect people and allow people to share their thoughts with other users globally. &lt;/p&gt;

&lt;p&gt;Twitter allows users to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Discover stories regarding news and events&lt;/li&gt;
&lt;li&gt;Follow people and companies that post content they enjoy consuming&lt;/li&gt;
&lt;li&gt;Have live audio conversations through spaces&lt;/li&gt;
&lt;li&gt;Simply communicate with friends. &lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt; Twitter API &lt;h2&gt;&lt;/h2&gt;

&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://developer.twitter.com/en/docs/twitter-api/getting-started/about-twitter-api"&gt;The Twitter API&lt;/a&gt; is a set of programmatic endpoints that can be used to understand or build the conversation on Twitter. &lt;br&gt;
This API allows you to find and retrieve, engage with, or create a variety of different resources including the following:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Tweets&lt;/li&gt;
&lt;li&gt;Users&lt;/li&gt;
&lt;li&gt;Spaces&lt;/li&gt;
&lt;li&gt;Direct Messages&lt;/li&gt;
&lt;li&gt;Lists&lt;/li&gt;
&lt;li&gt;Trends&lt;/li&gt;
&lt;li&gt;Media&lt;/li&gt;
&lt;li&gt;Places&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;Use Cases&lt;h2&gt;&lt;/h2&gt;

&lt;/h2&gt;
&lt;p&gt;There are different use cases for using the Twitter API.&lt;br&gt;
The use cases include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://developer.twitter.com/en/use-cases/build-for-businesses"&gt;Build for businesses&lt;/a&gt;: using the API to help your business listen, act, and discover.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://developer.twitter.com/en/use-cases/build-for-consumers"&gt;Build for consumers&lt;/a&gt;: build for people on Twitter, to enhance and improve their experience on the platform.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://developer.twitter.com/en/use-cases/do-research"&gt;Do research&lt;/a&gt;: using the API to get historical and real-time data points for your next research project.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://developer.twitter.com/en/use-cases/teach-and-learn"&gt;Teach and learn&lt;/a&gt;: teach or learn valuable skills with the API.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://developer.twitter.com/en/use-cases/build-for-good"&gt;Build for good&lt;/a&gt;: make the world, and Twitter, a better place.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://developer.twitter.com/en/use-cases/build-for-fun"&gt;Build for fun&lt;/a&gt;: experiment, explore, create, and have fun.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt; Twitter Bot Challenge (#BuildWhat'sNext) &lt;h2&gt;&lt;/h2&gt;

&lt;/h2&gt;
&lt;p&gt;The Twitter Bot Challenge aims to support the tech ecosystem in Kenya to build using the Twitter API. We will be using the API to build for fun by creating bots. We believe all work and no play makes Makena or Maina a dull person. &lt;/p&gt;

&lt;h2&gt; Why You Should Participate &lt;h2&gt;&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;You will improve your skills in using the Twitter API&lt;/li&gt;
&lt;li&gt;You will expand your network by engaging with other developers using the API&lt;/li&gt;
&lt;li&gt;You will have fun&lt;/li&gt;
&lt;li&gt;You will get the chance to win prizes&lt;/li&gt;
&lt;li&gt;You will get access to more opportunities on using the API&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt; How to Participate &lt;h2&gt;&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt; Register to participate in the challenge by filling out this &lt;a href="https://forms.gle/xc3jzi4CE1TaNkwZA"&gt;form&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Join the webinar on January 15th 2022 by registering &lt;a href="https://twitterdev.bevylabs.com/events/details/twitter-nairobi-twitter-developer-community-presents-twitter-bot-challenge-build-whats-next/"&gt;here&lt;/a&gt;, the speaker slides can be found &lt;a href="https://docs.google.com/presentation/d/1-sBrbOsIlgxOh_LcFjN5jAqHsTLiKgVcNo0u0YDaQZA/edit?usp=sharing"&gt;here&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Join the Twitter Developer Community Kenya &lt;a href="https://t.me/+K7Nnd1-rbsJkYzI0"&gt;here&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Have an idea of what you want to build&lt;/li&gt;
&lt;li&gt;Apply to get access  to the API &lt;a href="https://developer.twitter.com/en/portal/petition/essential/basic-info"&gt;here &lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Find documentation to help &lt;a href="https://developer.twitter.com/en/docs"&gt;here&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Tweet about your progress by tagging us @TdevcommunityKe and #TwitterBotChallengeKE, #buildwhatsnext&lt;/li&gt;
&lt;li&gt;Upon completion write about your experience participating, the good, the bad and the ugly, and most of all what you learned.&lt;/li&gt;
&lt;li&gt;Submit the link to the article and the link to your bot and more information &lt;a href="https://forms.gle/gxURSJS7ubqtBsws8"&gt;here &lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Winners will be announced and prizes will be awarded.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt; Important Dates &lt;h2&gt;&lt;/h2&gt;

&lt;/h2&gt;
&lt;/h2&gt;
&lt;/h2&gt;
&lt;p&gt;15th January 2022 - The challenge begins.&lt;br&gt;
15th February 2022 - The challenge ends.&lt;br&gt;
2nd March 2022 - 10 successful participants will be rewarded.&lt;/p&gt;

&lt;h2&gt; Resources to Get Started &lt;/h2&gt;


&lt;p&gt;&lt;a href="https://developer.twitter.com/en/docs/twitter-api/getting-started/about-twitter-api"&gt;About the Twitter API&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://developer.twitter.com/en/docs/twitter-api/getting-started/make-your-first-request"&gt;Make your first request&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;&lt;a href="https://developer.twitter.com/en/docs/twitter-api/what-to-build"&gt;What to build with the Twitter API&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://developer.twitter.com/en/docs/twitter-api/migrate/twitter-api-endpoint-map"&gt;Twitter API endpoint map&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://developer.twitter.com/en/docs/twitter-api/tools-and-libraries/v2"&gt;Twitter API v2 tools and libraries&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt; Helpful Tutorials &lt;/h3&gt;

&lt;p&gt;&lt;a href="https://developer.twitter.com/en/docs/tutorials/how-to-store-streaming-tweets-in-a-google-sheet"&gt;How to store streaming Tweets in a Google Sheet&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://developer.twitter.com/en/docs/tutorials/building-an-app-to-stream-tweets"&gt;End-to-end building an app to stream Tweets in real-time&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://developer.twitter.com/en/docs/tutorials/how-to-analyze-the-sentiment-of-your-own-tweets"&gt;How to analyze the sentiment of your own Tweets&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://developer.twitter.com/en/docs/tutorials/postman-getting-started"&gt;Getting started with Postman&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://developer.twitter.com/en/docs/tutorials/nyc-parking"&gt;Using Search Tweets and Twilio to solve a problem&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt; Twitter API tools &lt;/h3&gt;

&lt;p&gt;&lt;a href="https://developer.twitter.com/apitools/"&gt;Query builder, Twitter API v2 request generator, and convert v1.1 to v2&lt;/a&gt;&lt;/p&gt;

</description>
      <category>twitter</category>
    </item>
  </channel>
</rss>
