<?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: Alex Turner</title>
    <description>The latest articles on DEV Community by Alex Turner (@alxtrnr).</description>
    <link>https://dev.to/alxtrnr</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%2F292359%2F4505895f-38d8-4c2a-bb3e-3080441f1499.png</url>
      <title>DEV Community: Alex Turner</title>
      <link>https://dev.to/alxtrnr</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/alxtrnr"/>
    <language>en</language>
    <item>
      <title>The Mystery Calculator</title>
      <dc:creator>Alex Turner</dc:creator>
      <pubDate>Wed, 07 Dec 2022 22:51:43 +0000</pubDate>
      <link>https://dev.to/alxtrnr/the-mystery-calculator-140c</link>
      <guid>https://dev.to/alxtrnr/the-mystery-calculator-140c</guid>
      <description>&lt;p&gt;There was one time my Christmas cracker contained a pack of six cards, the so-called Mystery Calculator, which provides a neat little party trick for the non-initiated.&lt;/p&gt;

&lt;p&gt;It goes like this. The six cards all have 32 numbers on them, all between 1 and 63 and arranged in a matrix of 4 rows and 8 columns per card. The unsuspecting participant is asked to randomly pick one card from the deck of 6 and to silently memorise one of the 32 numbers on that card. The card is then handed back to the magician and the participant is asked to select from the 5 remaining cards those that also have the memorised number on them.&lt;/p&gt;

&lt;p&gt;The magician, based on the initially chosen card as well as the cards selected in the second step, is then able to divine which was the number the participant had silently chosen in the first place. With a bit of magician's hocus pocus and mumbo jumbo, this neat little trick will draw some ooohs! and aaahs! from the party audience.&lt;/p&gt;

&lt;p&gt;So what's the math behind the magic? All the magician has to do is to add the left hand corner numbers of the initial card and any other card where that number appears and the total is always the number the participant had silently memorised!&lt;/p&gt;

&lt;p&gt;I had just started learning to program with Python. Fairly quickly I coded a working version of The Mystery Calculator I could run in my terminal. It sat neglected for a while until I decided to learn how to share my python projects with others. This is my first effort. I refactored the code and used Streamlit to turn my python script into this simple &lt;a href="https://alxtrnr-streamlit-game-play-e5b2n1.streamlit.app"&gt;web app&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.tourl"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>python</category>
      <category>streamlit</category>
      <category>beginners</category>
      <category>christmas</category>
    </item>
    <item>
      <title>The Linux script command.</title>
      <dc:creator>Alex Turner</dc:creator>
      <pubDate>Fri, 29 Jan 2021 21:48:43 +0000</pubDate>
      <link>https://dev.to/alxtrnr/the-linux-script-command-476a</link>
      <guid>https://dev.to/alxtrnr/the-linux-script-command-476a</guid>
      <description>&lt;p&gt;Linux has a built in command called script. Invoking it generates a file that effectivly records everything which is subsequently typed into and/or displayed in the terminal until such time ctrl d is pressed. Doing so ends and saves the session. Play back in the terminal is as simple as invoking another command together with the path to the saved file.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;script &lt;span class="nt"&gt;--help&lt;/span&gt;

Make a typescript of a terminal session.

Options:
 &lt;span class="nt"&gt;-a&lt;/span&gt;, &lt;span class="nt"&gt;--append&lt;/span&gt;                  append the output
 &lt;span class="nt"&gt;-c&lt;/span&gt;, &lt;span class="nt"&gt;--command&lt;/span&gt; &amp;lt;&lt;span class="nb"&gt;command&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;       run &lt;span class="nb"&gt;command &lt;/span&gt;rather than interactive shell
 &lt;span class="nt"&gt;-e&lt;/span&gt;, &lt;span class="nt"&gt;--return&lt;/span&gt;                  &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="nb"&gt;exit &lt;/span&gt;code of the child process
 &lt;span class="nt"&gt;-f&lt;/span&gt;, &lt;span class="nt"&gt;--flush&lt;/span&gt;                   run flush after each write
     &lt;span class="nt"&gt;--force&lt;/span&gt;                   use output file even when it is a &lt;span class="nb"&gt;link&lt;/span&gt;
 &lt;span class="nt"&gt;-o&lt;/span&gt;, &lt;span class="nt"&gt;--output-limit&lt;/span&gt; &amp;lt;size&amp;gt;     terminate &lt;span class="k"&gt;if &lt;/span&gt;output files exceed size
 &lt;span class="nt"&gt;-q&lt;/span&gt;, &lt;span class="nt"&gt;--quiet&lt;/span&gt;                   be quiet
 &lt;span class="nt"&gt;-t&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&amp;lt;file&amp;gt;], &lt;span class="nt"&gt;--timing&lt;/span&gt;&lt;span class="o"&gt;[=&lt;/span&gt;&amp;lt;file&amp;gt;] output timing data to stderr or to FILE
 &lt;span class="nt"&gt;-h&lt;/span&gt;, &lt;span class="nt"&gt;--help&lt;/span&gt;                    display this &lt;span class="nb"&gt;help&lt;/span&gt;
 &lt;span class="nt"&gt;-V&lt;/span&gt;, &lt;span class="nt"&gt;--version&lt;/span&gt;                 display version

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

&lt;/div&gt;



&lt;p&gt;Simply entering...&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;script &lt;span class="nt"&gt;--t&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;script_log &lt;span class="nt"&gt;-q&lt;/span&gt; scriptfile
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;...will invoke &lt;code&gt;script&lt;/code&gt; and recording of the terminal session.&lt;/p&gt;

&lt;p&gt;To play back the session it's...&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;scriptreplay &lt;span class="nt"&gt;--timing&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;script_log scriptfile
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;More details for reference &lt;a href="https://linoxide.com/linux-command/script-command-recorder/"&gt;here&lt;/a&gt;. Could be good to include in a repo as a means to demonstrate functionality of a CLI. More typical I suppose would be to screen record a recorded demo...&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;URL Scraper and site map builder.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;iframe src="https://player.vimeo.com/video/506287073" width="710" height="399"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;I have coded a CLI scraper and site map builder. A first for me. Enjoying the process and learning. Got to a point of mostly tweaking. Time to move on. Good enough will do. Here's the repo on &lt;a href="https://github.com/alxtrnr/alxscrpr"&gt;GitHub&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>python</category>
      <category>beginners</category>
      <category>linux</category>
    </item>
    <item>
      <title>Getting to grips with dictionary comprehensions. </title>
      <dc:creator>Alex Turner</dc:creator>
      <pubDate>Wed, 11 Nov 2020 15:12:29 +0000</pubDate>
      <link>https://dev.to/alxtrnr/getting-to-grips-with-dictionary-comprehensions-18p3</link>
      <guid>https://dev.to/alxtrnr/getting-to-grips-with-dictionary-comprehensions-18p3</guid>
      <description>&lt;p&gt;I've given myself a much harder time learning dictionary comprehensions than necessary. Code block. &lt;a href="https://dev.to/n0nb1narydev/do-i-have-coder-s-block-2bjc"&gt;Like writers block&lt;/a&gt; perhaps? Feeling a bit slow with being stuck for a while on a project stage. &lt;/p&gt;

&lt;p&gt;A touch of cognitive overload. Some interesting ideas about this at &lt;a href="https://computethought.blog/2020/05/18/cognitive-load-and-coding/"&gt;Cognitive Load and Coding&lt;/a&gt;. Worth a read with some good references at the end to follow up. &lt;a href="https://stitcher.io/blog/a-programmers-cognitive-load"&gt;A progammers cognitve load&lt;/a&gt; was especially helpful. I have increased the font size in my IDE and enabled auto folding. Basic stuff I could have done ages ago if I'd have been curious enough. &lt;/p&gt;

&lt;p&gt;Back pain. Change in routines blah blah blah... It's all transient so long as I don't give up. Take some respite and come back to the learning. &lt;/p&gt;

&lt;p&gt;Made some progress yesterday. A new approach. Narrowed my focus. Completed some &lt;a href="https://pybit.es/"&gt;PyBites&lt;/a&gt;. Encouraged by solving a few of these I completed one on dictionary comprehensions. PyBites is handy to have on my list of go to places for learning Python. &lt;/p&gt;

&lt;p&gt;I am hoping to help embed what I'm spending time learning by writing something about it here. First time trying. Hopefully I've understood it and I've written nothing that will misinform.  Critique / corrections are welcome. Here goes:&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;bites&lt;/span&gt; &lt;span class="o"&gt;=&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="s"&gt;'PyBites Die Hard'&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="s"&gt;'Parsing dates from logs'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
         &lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;'Palindromes'&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="s"&gt;'Practice exceptions'&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="s"&gt;'Enrich a class with dunder methods'&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="s"&gt;'Write a user validation function'&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="s"&gt;'Convert dict in namedtuple/json'&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="s"&gt;'Generate a table of n sequences'&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="s"&gt;'Enumerate 2 sequences'&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="s"&gt;'Special PyBites date generator'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
         &lt;span class="mi"&gt;17&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;'Form teams from a group of friends'&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="s"&gt;'Find the most common word'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
         &lt;span class="mi"&gt;19&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;'Write a simple property'&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="s"&gt;'Write a context manager'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
         &lt;span class="mi"&gt;21&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;'Query a nested data structure'&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="n"&gt;exclude_bites&lt;/span&gt; &lt;span class="o"&gt;=&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;10&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="mi"&gt;21&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;


&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;filter_bites&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;bites&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;bites&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;bites_done&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;exclude_bites&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="s"&gt;"""return the bites dict with the exclude_bites filtered out"""&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;value&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;bites&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;items&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;key&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;bites_done&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;


&lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;filter_bites&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;bites&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;exclude_bites&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;So what that does is to take a dictionary (bites) and a set (exclude_bites). From them we return a new dictionary from the entries of the existing dictionary excluding entries whose key matches an element in the set.&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="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;value&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;bites&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;items&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;key&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;bites_done&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Which returns dictionary items -&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="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="s"&gt;'Parsing dates from logs'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
&lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;'Palindromes'&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="s"&gt;'Enrich a class with dunder methods'&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="s"&gt;'Write a user validation function'&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="s"&gt;'Convert dict in namedtuple/json'&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="s"&gt;'Generate a table of n sequences'&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="s"&gt;'Enumerate 2 sequences'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
&lt;span class="mi"&gt;17&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;'Form teams from a group of friends'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
&lt;span class="mi"&gt;19&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;'Write a simple property'&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="s"&gt;'Write a context manager'&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Notice that dictionary items with a key that matches an element in&lt;br&gt;
&lt;br&gt;
 &lt;code&gt;exclude_bites = {6, 10, 16, 18, 21}&lt;/code&gt;&lt;br&gt;
&lt;br&gt;
have been excluded.  &lt;/p&gt;

&lt;p&gt;Keys can be generated from an immutable type&lt;br&gt;
&lt;br&gt;
 &lt;code&gt;int, float, decimal, complex, bool, string, tuple, range, frozenset, bytes&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;With this example the int is used (iterated) from the keys in bites dictionary. The keys must also be hashable. For example a tuple with lists will not work as lists are mutable and therefore not hashable.  A tuple of strings would be fine as strings are immutable.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Python dictionaries leverage hash tables. When we use a key that contains an unhashable type, i.e. a list, the underlying hash map cannot guarantee the key will map to the same bucket every single time. If we can't hash our key, we can't use it in our dictionary. The thing to remember is that Python dictionaries require hashable dict keys. Immutable keys is not enough. (&lt;a href="https://alysivji.github.io/quick-hit-hashable-dict-keys.html"&gt;nods*&lt;/a&gt;)&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The value may be assigned to any iterable bites_items() in this case. It does not need to be immutable. It could also be assigned the same value for all keys. The condition to filter/sort simply follows the if statement. Here th exclude_bites set is called to check and iterate through .&lt;/p&gt;

&lt;p&gt;Well I think that worked. Feel like I have furthered by understanding a bit. Trying new ways of learning. Getting over stumbling blocks. Practice, do projects and don't give up! &lt;/p&gt;

</description>
      <category>python</category>
      <category>beginners</category>
      <category>learning</category>
    </item>
    <item>
      <title>They said '...learning Python is easy!'. I missed the memo about programming.     </title>
      <dc:creator>Alex Turner</dc:creator>
      <pubDate>Thu, 05 Nov 2020 17:46:03 +0000</pubDate>
      <link>https://dev.to/alxtrnr/they-said-learning-python-is-easy-i-missed-the-memo-about-programming-7p8</link>
      <guid>https://dev.to/alxtrnr/they-said-learning-python-is-easy-i-missed-the-memo-about-programming-7p8</guid>
      <description>&lt;p&gt;So I have been learning to code using Python. It started as a distraction over the Christmas holidays in 2019. It's now November 2020. I've coded way more days than not over that time. #100 days straight? Most likely and more than once. Not been counting. &lt;/p&gt;

&lt;p&gt;Coding exercises, tutorials, blogs, websites, podcasts and so on. Enjoyed reading posts on &lt;a href="https://dev.to/"&gt;dev.to&lt;/a&gt; where I'm learning the language and getting a feel for the culture of the development world. There's much talk about impostor syndrome. Seems it pretty endemic. Not heard it referred to as much with reference to any other endeavour. Something perhaps to do with a lot of developers being self taught and/or that learning on the job is a prerequisite and necessity to stay match fit.  &lt;/p&gt;

&lt;p&gt;Getting stuck with things right now. Final stage of a 'hard' &lt;a href="https://hyperskill.org/projects/74/stages/415/implement"&gt;project&lt;/a&gt; on Jet Brains Academy and just not getting it.  Learning Python (easy); learning to program (hard). Codecamp says I'm - &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--5KwGKUUK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://monaxle.ddns.net/s/jtJQNc8RqrsLsQn/preview" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--5KwGKUUK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://monaxle.ddns.net/s/jtJQNc8RqrsLsQn/preview" alt="codecamp"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Completing exercises and small projects is no longer enough to keep making progress. Shame as I was enjoying the illusion the pace had created! &lt;a href="https://jamesclear.com/beginners-guide-deliberate-practice"&gt;Deliberate practice&lt;/a&gt; might be what's needed from now. &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Deliberate practice is not a comfortable activity. It requires sustained effort and concentration. The people who master the art of deliberate practice are committed to being lifelong learners—always exploring and experimenting and refining.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;My interest is starting to wane. I've been avoiding getting on. Finding other distractions.  Not having fun. Can I even be bothered with it anymore. &lt;/p&gt;

&lt;p&gt;Hold on! That could be the impostor syndrome in disguise. Phew! Maybe you have got what it takes after all! Perhaps it's not that you can't be bothered it's that you don't think you're good enough. Let that shit go!  &lt;/p&gt;

&lt;p&gt;Coding skill is an attribute I would like to have. Here's to the effort deliberate practice takes! &lt;/p&gt;

</description>
      <category>beginners</category>
      <category>codenewbie</category>
    </item>
    <item>
      <title>Three months of free learning.</title>
      <dc:creator>Alex Turner</dc:creator>
      <pubDate>Sun, 02 Aug 2020 16:26:18 +0000</pubDate>
      <link>https://dev.to/alxtrnr/three-months-of-free-learning-4bhj</link>
      <guid>https://dev.to/alxtrnr/three-months-of-free-learning-4bhj</guid>
      <description>&lt;p&gt;Here's my &lt;a href="https://hyperskill.org/join/ef4fc2cdf"&gt;refer a friend link&lt;/a&gt; anyone can use to get three months of free learning with &lt;a href="https://hyperskill.org/join/ef4fc2cdf"&gt;Jet Brains Academy&lt;/a&gt;. Not sure but you might instead get a free subscription till the new year. I suppose it might depend on when you use the link. The blurb I get says...&lt;/p&gt;

&lt;p&gt;&lt;em&gt;We are offering all of our registered users a free trial until January 1, 2021. Thank you for being with us in the early stages of JetBrains Academy’s development!&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;After the trial is over, you’ll receive a 50% discount for the first 12 months of your subscription.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Just in case you're wondering you don't have to sign up to a subscription or give out any payment details. At least I didn't anyway.  &lt;/p&gt;

&lt;p&gt;The tutorials and projects are very engaging and go beyond the basics. I'm working through the &lt;a href="https://hyperskill.org/tracks/2"&gt;Python developer track&lt;/a&gt; and learning loads. The platform syncs with &lt;a href="https://www.jetbrains.com/pycharm/"&gt;PyCharm&lt;/a&gt; beautifully. I am really enjoying the process.&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>python</category>
      <category>java</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
