<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Michael Kennedy on Technology</title>
	<atom:link href="https://michaelckennedy.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>https://michaelckennedy.wordpress.com</link>
	<description>Cutting-Edge Developer and Technology Writing</description>
	<lastBuildDate>Thu, 28 Aug 2025 01:14:48 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='michaelckennedy.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>https://secure.gravatar.com/blavatar/70c5ada0da9f391fa872059c114187cc568333bdd5f0a3c26bf7cdc66b00e3b7?s=96&#038;d=https%3A%2F%2Fs0.wp.com%2Fi%2Fbuttonw-com.png</url>
		<title>Michael Kennedy on Technology</title>
		<link>https://michaelckennedy.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="https://michaelckennedy.wordpress.com/osd.xml" title="Michael Kennedy on Technology" />
	<atom:link rel='hub' href='https://michaelckennedy.wordpress.com/?pushpress=hub'/>
	<item>
		<title>Now Blogging at mkennedy.codes</title>
		<link>https://michaelckennedy.wordpress.com/2023/02/03/now-blogging-at-mkennedy-codes/</link>
					<comments>https://michaelckennedy.wordpress.com/2023/02/03/now-blogging-at-mkennedy-codes/#comments</comments>
		
		<dc:creator><![CDATA[Michael Kennedy]]></dc:creator>
		<pubDate>Fri, 03 Feb 2023 19:17:33 +0000</pubDate>
				<category><![CDATA[Articles]]></category>
		<guid isPermaLink="false">http://blog.michaelckennedy.net/?p=2432</guid>

					<description><![CDATA[Hey folks. Here&#8217;s a short one. I&#8217;ve decided to move off this blogging platform. Since there are so many links back to content over here, rather than lose those old articles and resources, I&#8217;ve moved to: https://mkennedy.codes. If you&#8217;re subscribed to the RSS feed here, please visit the new site and add my latest RSS [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="has-mirror-black-color has-text-color">Hey folks. Here&#8217;s a short one. I&#8217;ve decided to move off this blogging platform. Since there are so many links back to content over here, rather than lose those old articles and resources, I&#8217;ve moved to: <strong><a href="https://mkennedy.codes">https://mkennedy.codes</a></strong>.</p>



<p>If you&#8217;re subscribed to the RSS feed here, please visit the new site and add <a href="https://mkennedy.codes/index.xml"><strong>my latest RSS feed</strong></a> to keep getting updates.</p>



<p>Thank you!<br />Michael</p>
]]></content:encoded>
					
					<wfw:commentRss>https://michaelckennedy.wordpress.com/2023/02/03/now-blogging-at-mkennedy-codes/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
		
		<media:thumbnail url="https://michaelckennedy.wordpress.com/wp-content/uploads/2023/02/erda-estremera-sxnt9g77pe0-unsplash.jpg" />
		<media:content url="https://michaelckennedy.wordpress.com/wp-content/uploads/2023/02/erda-estremera-sxnt9g77pe0-unsplash.jpg" medium="image">
			<media:title type="html">erda-estremera-sxNt9g77PE0-unsplash</media:title>
		</media:content>

		<media:content url="https://0.gravatar.com/avatar/0c39b1af51635a37bd212fc71e854db94323bbdfdeb53bfbc9bc34d26620b8eb?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">michaelckennedy</media:title>
		</media:content>
	</item>
		<item>
		<title>20,000,000 IS QUITE A MILESTONE</title>
		<link>https://michaelckennedy.wordpress.com/2020/12/07/20_000_000-is-quite-a-milestone/</link>
					<comments>https://michaelckennedy.wordpress.com/2020/12/07/20_000_000-is-quite-a-milestone/#comments</comments>
		
		<dc:creator><![CDATA[Michael Kennedy]]></dc:creator>
		<pubDate>Mon, 07 Dec 2020 21:17:32 +0000</pubDate>
				<category><![CDATA[Talk Python To Me Podcast]]></category>
		<guid isPermaLink="false">http://blog.michaelckennedy.net/?p=2419</guid>

					<description><![CDATA[I want to take just a moment and celebrate a milestone over at the Talk Python To Me podcast. We have been growing for over 5 years since we launched. Today we passed a major milestone in the podcast and I&#8217;d like to write this post just to share my excitement and to take a [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>I want to take just a moment and celebrate a milestone over at the <a href="https://talkpython.fm">Talk Python To Me podcast</a>.</p>



<p>We have been growing for over 5 years since we launched. Today we passed a major milestone in the podcast and I&#8217;d like to write this post just to share my excitement and to take a moment to appreciate the journey.</p>



<p>Today, Talk Python To Me has had over 20,000,000 downloads. That&#8217;s an average of just under 70,000 listeners per episode. </p>



<p>You can see how we fit in the podcast world by checking out the iTunes rankings (broader than just Apple as many players use this data). If you check Chartable (at the time of this writing), we are #37 of all technology podcasts. I kind of hate this category as it&#8217;s way too broad. But if you factor out general tech and gaming of the 36 above us, you&#8217;ll see <strong>we are the #2 developer podcast in the world</strong>. Only Wes Bos&#8217;s JavaScript show is ahead.</p>



<p><a href="https://chartable.com/charts/itunes/us-technology-podcasts">https://chartable.com/charts/itunes/us-technology-podcasts</a></p>



<p>Thank you everyone who has subscribed to the show via their podcast players. If you&#8217;re not yet a listener, just search for Talk Python in your favorite podcast app and get weekly episodes for free.</p>



<p>20 million. That&#8217;s amazing folks. Let me measure that with a few different metrics. 20,000,000, 1-hour long, 35 MB mp3 downloads is</p>



<ul class="wp-block-list"><li>Like spending 8-years worth of time with listeners every week for 5 years or <strong>23 centuries</strong> together.</li><li>Giving <strong>20 PyCon keynotes</strong> every week or 5,800 keynotes in total.</li><li><strong>684,000 GB of traffic</strong> sent out of our modest Ubuntu box.</li><li>A <strong>opportunity to make Talk Python my full time job</strong> and focus 100% on building it for you all.</li></ul>



<p>So to everyone who has listened to one or more episodes. Thank you for helping us achieive this fantastic milestone.</p>



<p>Cheers,<br /><a href="https://twitter.com/mkennedy">Michael</a></p>
]]></content:encoded>
					
					<wfw:commentRss>https://michaelckennedy.wordpress.com/2020/12/07/20_000_000-is-quite-a-milestone/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
		
		<media:thumbnail url="https://michaelckennedy.wordpress.com/wp-content/uploads/2020/12/20m-talk-python.jpg" />
		<media:content url="https://michaelckennedy.wordpress.com/wp-content/uploads/2020/12/20m-talk-python.jpg" medium="image">
			<media:title type="html">20m-talk-python</media:title>
		</media:content>

		<media:content url="https://0.gravatar.com/avatar/0c39b1af51635a37bd212fc71e854db94323bbdfdeb53bfbc9bc34d26620b8eb?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">michaelckennedy</media:title>
		</media:content>
	</item>
		<item>
		<title>Take these Pythonic tips with you</title>
		<link>https://michaelckennedy.wordpress.com/2020/05/07/take-these-pythonic-tips-with-you/</link>
					<comments>https://michaelckennedy.wordpress.com/2020/05/07/take-these-pythonic-tips-with-you/#respond</comments>
		
		<dc:creator><![CDATA[Michael Kennedy]]></dc:creator>
		<pubDate>Thu, 07 May 2020 22:57:32 +0000</pubDate>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[Online courses]]></category>
		<category><![CDATA[Video]]></category>
		<guid isPermaLink="false">http://blog.michaelckennedy.net/?p=2414</guid>

					<description><![CDATA[You might have heard about my Write Pythonic Code Like a Seasoned Developer course. In that course, I cover 52+ idiomatic ideas from Python. Just to give you an idea, it talks about using for-in loops rather than faking a numerical for loop as many folks coming from C/C++ might do. By popular request, I&#8217;ve [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>You might have heard about my <strong><a href="https://training.talkpython.fm/courses/explore_pythonic_code/write-pythonic-code-like-a-seasoned-developer">Write Pythonic Code Like a Seasoned Developer</a></strong> course. In that course, I cover 52+ idiomatic ideas from Python. </p>



<p>Just to give you an idea, it talks about using for-in loops rather than faking a numerical for loop as many folks coming from C/C++ might do.</p>



<p>By popular request, I&#8217;ve decided to create a PDF distilling down these ideas into single concept images. Get it here for free:</p>



<figure class="wp-block-image size-large"><a href="https://github.com/mikeckennedy/write-pythonic-code-demos/tree/master/tips-pdf"><img width="1024" height="574" data-attachment-id="2415" data-permalink="https://michaelckennedy.wordpress.com/pythonic-slides/" data-orig-file="https://michaelckennedy.wordpress.com/wp-content/uploads/2020/05/pythonic-slides.png" data-orig-size="3328,1868" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="pythonic-slides" data-image-description="" data-image-caption="" data-medium-file="https://michaelckennedy.wordpress.com/wp-content/uploads/2020/05/pythonic-slides.png?w=300" data-large-file="https://michaelckennedy.wordpress.com/wp-content/uploads/2020/05/pythonic-slides.png?w=970" src="https://michaelckennedy.wordpress.com/wp-content/uploads/2020/05/pythonic-slides.png?w=1024" alt="" class="wp-image-2415" srcset="https://michaelckennedy.wordpress.com/wp-content/uploads/2020/05/pythonic-slides.png?w=1024 1024w, https://michaelckennedy.wordpress.com/wp-content/uploads/2020/05/pythonic-slides.png?w=2045 2045w, https://michaelckennedy.wordpress.com/wp-content/uploads/2020/05/pythonic-slides.png?w=150 150w, https://michaelckennedy.wordpress.com/wp-content/uploads/2020/05/pythonic-slides.png?w=300 300w, https://michaelckennedy.wordpress.com/wp-content/uploads/2020/05/pythonic-slides.png?w=768 768w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<p>Download at <a href="https://github.com/mikeckennedy/write-pythonic-code-demos/tree/master/tips-pdf">https://github.com/mikeckennedy/write-pythonic-code-demos/tree/master/tips-pdf</a></p>



<p>Feel free to share these with your coworkers and on social. And if they resonate with you, I cover lots of more complex, in-depth ones in the course that don&#8217;t fit into a single concept page.</p>



<p>Cheers,<br /><a href="https://twitter.com/mkennedy">Michael</a></p>
]]></content:encoded>
					
					<wfw:commentRss>https://michaelckennedy.wordpress.com/2020/05/07/take-these-pythonic-tips-with-you/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		
		<media:thumbnail url="https://michaelckennedy.wordpress.com/wp-content/uploads/2020/05/pythonic-slides-1.png" />
		<media:content url="https://michaelckennedy.wordpress.com/wp-content/uploads/2020/05/pythonic-slides-1.png" medium="image">
			<media:title type="html">pythonic-slides-1</media:title>
		</media:content>

		<media:content url="https://0.gravatar.com/avatar/0c39b1af51635a37bd212fc71e854db94323bbdfdeb53bfbc9bc34d26620b8eb?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">michaelckennedy</media:title>
		</media:content>

		<media:content url="https://michaelckennedy.wordpress.com/wp-content/uploads/2020/05/pythonic-slides.png?w=1024" medium="image" />
	</item>
		<item>
		<title>Know .NET? Learn Python with our free webcast in February!</title>
		<link>https://michaelckennedy.wordpress.com/2020/01/09/know-net-learn-python-with-our-free-webcast-in-february/</link>
					<comments>https://michaelckennedy.wordpress.com/2020/01/09/know-net-learn-python-with-our-free-webcast-in-february/#comments</comments>
		
		<dc:creator><![CDATA[Michael Kennedy]]></dc:creator>
		<pubDate>Thu, 09 Jan 2020 14:52:00 +0000</pubDate>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[webcast]]></category>
		<guid isPermaLink="false">http://blog.michaelckennedy.net/?p=2407</guid>

					<description><![CDATA[Are you a .NET developer and are considering Python as your next language to expand your knowledge and skill set? Come spend an hour with me during my next free webcast. There are many getting started presentations for Python, this webcast is specifically geared towards helping C# and .NET developers quickly get up to speed [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>Are you a .NET developer and are considering Python as your next language to expand your knowledge and skill set? Come spend an hour with me during <a href="https://www.crowdcast.io/e/python-for-dotnet-devs-webcast">my next free webcast</a>. </p>



<figure class="wp-block-image size-large"><a href="https://www.crowdcast.io/e/python-for-dotnet-devs-webcast"><img width="1024" height="704" data-attachment-id="2410" data-permalink="https://michaelckennedy.wordpress.com/screen-shot-2020-01-06-at-4-55-07-pm/" data-orig-file="https://michaelckennedy.wordpress.com/wp-content/uploads/2020/01/screen-shot-2020-01-06-at-4.55.07-pm.png" data-orig-size="1664,1144" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="screen-shot-2020-01-06-at-4.55.07-pm" data-image-description="" data-image-caption="" data-medium-file="https://michaelckennedy.wordpress.com/wp-content/uploads/2020/01/screen-shot-2020-01-06-at-4.55.07-pm.png?w=300" data-large-file="https://michaelckennedy.wordpress.com/wp-content/uploads/2020/01/screen-shot-2020-01-06-at-4.55.07-pm.png?w=970" src="https://michaelckennedy.wordpress.com/wp-content/uploads/2020/01/screen-shot-2020-01-06-at-4.55.07-pm.png?w=1024" alt="" class="wp-image-2410" srcset="https://michaelckennedy.wordpress.com/wp-content/uploads/2020/01/screen-shot-2020-01-06-at-4.55.07-pm.png?w=1024 1024w, https://michaelckennedy.wordpress.com/wp-content/uploads/2020/01/screen-shot-2020-01-06-at-4.55.07-pm.png?w=150 150w, https://michaelckennedy.wordpress.com/wp-content/uploads/2020/01/screen-shot-2020-01-06-at-4.55.07-pm.png?w=300 300w, https://michaelckennedy.wordpress.com/wp-content/uploads/2020/01/screen-shot-2020-01-06-at-4.55.07-pm.png?w=768 768w, https://michaelckennedy.wordpress.com/wp-content/uploads/2020/01/screen-shot-2020-01-06-at-4.55.07-pm.png 1664w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<p>There are many getting started presentations for Python, this webcast is specifically geared towards helping C# and .NET developers quickly get up to speed with Python. It covers a wide spectrum of the developer landscape from the language, databases and ORMs, web frameworks, data science and computational notebooks, and more.</p>



<p>Join me, Michael Kennedy, from Talk Python, the podcast and training company, to explore Python for the .NET developer. Oh, BTW, I did professional .NET for over 10 years so I knows where you&#8217;re coming from.</p>



<p>This event is free and open to everyone.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://michaelckennedy.wordpress.com/2020/01/09/know-net-learn-python-with-our-free-webcast-in-february/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
		
		<media:thumbnail url="https://michaelckennedy.wordpress.com/wp-content/uploads/2020/01/python-for-dotnet-course.png" />
		<media:content url="https://michaelckennedy.wordpress.com/wp-content/uploads/2020/01/python-for-dotnet-course.png" medium="image">
			<media:title type="html">python-for-dotnet-course</media:title>
		</media:content>

		<media:content url="https://0.gravatar.com/avatar/0c39b1af51635a37bd212fc71e854db94323bbdfdeb53bfbc9bc34d26620b8eb?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">michaelckennedy</media:title>
		</media:content>

		<media:content url="https://michaelckennedy.wordpress.com/wp-content/uploads/2020/01/screen-shot-2020-01-06-at-4.55.07-pm.png?w=1024" medium="image" />
	</item>
		<item>
		<title>Top 5 Talk Python Episodes of 2019</title>
		<link>https://michaelckennedy.wordpress.com/2019/12/19/top-5-talk-python-episodes-of-2019/</link>
					<comments>https://michaelckennedy.wordpress.com/2019/12/19/top-5-talk-python-episodes-of-2019/#comments</comments>
		
		<dc:creator><![CDATA[Michael Kennedy]]></dc:creator>
		<pubDate>Thu, 19 Dec 2019 13:28:00 +0000</pubDate>
				<category><![CDATA[Talk Python To Me Podcast]]></category>
		<category><![CDATA[Python]]></category>
		<guid isPermaLink="false">http://blog.michaelckennedy.net/?p=2401</guid>

					<description><![CDATA[It&#8217;s been a great year over at Talk Python. The podcast has been going strong with many listeners from every corner of the global. We&#8217;ve launched a bunch of new courses at Talk Python Training and even did a little good for the environment. As we near the end of the year, I&#8217;d like to [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>It&#8217;s been a great year over at Talk Python. <strong><a href="https://talkpython.fm/">The podcast</a></strong> has been going strong with many listeners from every corner of the global. We&#8217;ve launched a bunch of new courses at <strong><a href="https://training.talkpython.fm/">Talk Python Training</a></strong> and even did a little good for the environment.</p>



<p>As we near the end of the year, I&#8217;d like to take a moment and highlight the top 5 episodes, measured by number of total downloads (nearly 100,000 each).</p>



<p>In reverse order, here they are! Thank you to everyone who has listened in and subscribed to the show.</p>



<h2 class="wp-block-heading">#5: <a href="https://talkpython.fm/194">Learning (and teaching) Python in a vacuum</a></h2>



<p><strong>Guest</strong><br />Rusti Gregory</p>



<p><strong>Summary</strong><br />How do you learn programming when you&#8217;re working in a vacuum? Sure there are resources on the internet, but sometimes just bouncing ideas of others in person makes a huge difference. Join me along with Rusti Gregory as we discuss how he is learning and teaching Python in a small town in Vermont. </p>



<h2 class="wp-block-heading">#4: <a href="https://talkpython.fm/197">Modern Python Standard Library Cookbook</a></h2>



<p><strong>Guest</strong><br /><a href="https://twitter.com/__amol__">Alessandro Molina</a></p>



<p><strong>Summary</strong><br /><br />[Sorry for the audio quality on this one, if you can handle it, the content is great]</p>



<p>A recent twitter poll went around the web and it asked, what percentage of the Python standard library do you think you know? Someone copied me on it, maybe expecting some really high percentage answer. In reality, what I did answer and my rough estimate is that it&#8217;s probably around 50%.</p>



<p>This episode with Alessandro Molina definitely helped confirm that experience for me. He just published a book entitled &#8220;Modern Python Standard Library Cookbook&#8221; and it&#8217;s full of these great little corners of the standard library that you might not have bumped into but you&#8217;ll be super glad to hear about on this episode!</p>



<h2 class="wp-block-heading">#3: <a href="https://talkpython.fm/199">Automate all the things with Python at Zapier</a></h2>



<p><strong>Guest</strong><br /><a href="https://twitter.com/bryanhelmig">Bryan Helmig</a></p>



<p><strong>Summary</strong><br />Do your applications call a lot of APIs? Maybe you have a bunch of microservices driving your app. You probably don&#8217;t have the crazy combinatorial explosion that Zapier does for connecting APIs! They have millions of users automating things with 1,000s of APIs. It&#8217;s pretty crazy. And they are doing it all with Python. Join me and Bryan Helmig, the CTO and co-founder of Zapier as we discuss how they pull this off with Python.</p>



<h2 class="wp-block-heading">#2: <a href="https://talkpython.fm/episodes/show/203/beginners-and-experts-in-software-development">Beginners and Experts in Software Development</a></h2>



<p><strong>Guests</strong><br />* Karly Sindy &#8211; <a rel="noreferrer noopener" target="_blank" href="https://twitter.com/karlysindy">@karlysindy</a> <br />* Joy Dantong Ma &#8211; <a rel="noreferrer noopener" target="_blank" href="https://twitter.com/JoyDantongMa">@JoyDantongMa</a> <br />* Tsitsi Flora Munikwa &#8211; <a rel="noreferrer noopener" target="_blank" href="https://twitter.com/tsitsi_flora">@tsitsi_flora</a> <br />* Ned Batchelder &#8211; <a rel="noreferrer noopener" target="_blank" href="https://twitter.com/nedbat">@nedbat</a></p>



<p><strong>Summary</strong><br />What&#8217;s it like to be a beginner in software development? How about learning Python for the first time? This episode is a special panel episode and is the first of a two-part series we are doing on the podcast called Beginners and Experts.</p>



<p>On this first episode, we have a conversation between beginners and experts and how we can close the gap to help beginners get up to speed as quickly as possible. Our panelists are Karly Sindy, Joy Dantong Ma, Tsitsi Flora Munikwa, and Ned Batchelder.</p>



<h2 class="wp-block-heading">#1: <a href="https://talkpython.fm/episodes/show/200/escaping-excel-hell-with-python-and-pandas">Escaping Excel Hell with Python and Pandas</a></h2>



<p><strong>Guest</strong><br /><a href="https://twitter.com/chris1610">Chris Moffitt</a></p>



<p><strong>Summary</strong><br />Do you know or maybe work with people who abuse Excel? Is it their hammer to pound all the computational problems that get in their way? Well, join me to chat about this opportunity to bring Python deeper into their lives. You&#8217;ll meet Chris Moffitt who runs Practical Business Python. He works with lots of folks who could make better use of Python to solve their business problems and he has a ton of material on his website. It&#8217;s time to escape Excel hell with Python and Pandas.</p>



<h2 class="wp-block-heading">Conclusion</h2>



<p>I think it&#8217;s fitting that the most downloaded episode is how to escape from Excel and start leveraging the power of Python&#8217;s data science stack. Just one more testament to Python being a full-spectrum language and welcoming beginners while not being too simple for true experts.</p>



<p>If you had a favorite, let us know in the comment section. Which one was it and why?</p>



<p>Thanks to everyone who made this year possible (guests, listeners, and students)!</p>



<p>Cheers,<br /><a href="https://twitter.com/mkennedy">@mkennedy</a></p>
]]></content:encoded>
					
					<wfw:commentRss>https://michaelckennedy.wordpress.com/2019/12/19/top-5-talk-python-episodes-of-2019/feed/</wfw:commentRss>
			<slash:comments>6</slash:comments>
		
		
		
		<media:thumbnail url="https://michaelckennedy.wordpress.com/wp-content/uploads/2019/12/talk-python-top-5-sm.png" />
		<media:content url="https://michaelckennedy.wordpress.com/wp-content/uploads/2019/12/talk-python-top-5-sm.png" medium="image">
			<media:title type="html">talk python top 5 sm</media:title>
		</media:content>

		<media:content url="https://0.gravatar.com/avatar/0c39b1af51635a37bd212fc71e854db94323bbdfdeb53bfbc9bc34d26620b8eb?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">michaelckennedy</media:title>
		</media:content>
	</item>
		<item>
		<title>Is Python right for your team?</title>
		<link>https://michaelckennedy.wordpress.com/2019/12/04/is-python-right-for-your-team/</link>
					<comments>https://michaelckennedy.wordpress.com/2019/12/04/is-python-right-for-your-team/#comments</comments>
		
		<dc:creator><![CDATA[Michael Kennedy]]></dc:creator>
		<pubDate>Wed, 04 Dec 2019 23:18:54 +0000</pubDate>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[online]]></category>
		<category><![CDATA[webcast]]></category>
		<guid isPermaLink="false">http://blog.michaelckennedy.net/?p=2394</guid>

					<description><![CDATA[Over at Talk Python, we&#8217;re doing a fun online event for people exploring Python and whether it&#8217;s a fit for their organization or for their team. Is Python right for your organization? Are you tasked with deciding whether to adopt Python for your project or for your company? Maybe you&#8217;re just trying to decide whether [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>Over at <a href="https://talkpython.fm/"><strong>Talk Python</strong></a>, we&#8217;re doing a <strong><a href="https://talkpython.fm/python-decision-webcast">fun online event</a></strong> for people exploring Python and whether it&#8217;s a fit for their organization or for their team.<br /> <br /> <strong>Is Python right for your organization</strong>? Are you tasked  with deciding whether to adopt Python for your project or for your  company? Maybe you&#8217;re just trying to decide whether Python is the right  place to put your energy for your individual career.<br /> <br /> In this live 1-hour webcast, you will see a presentation on why Python  is such a hot technology at the moment, what it&#8217;s really good at, and  even when to avoid using Python. It&#8217;s <strong>open to non-developers and developers alike</strong>.<br /> <br /> This webcast is a <strong>guided discussion and exploration of the Python ecosystem through the lens of your organization and your team</strong>.  You will see fact-based presentations for the Python developer job  space. This will answer questions like, &#8220;Is it easy or hard to hire  Python developers for a given type of project?&#8221; You will see the wide  spectrum of Python web frameworks and how to choose the best fit. We  will explore some of the tools making Python so popular in the  scientific space.</p>



<div class="wp-block-button aligncenter"><a class="wp-block-button__link has-background has-light-green-cyan-background-color" href="https://talkpython.fm/python-decision-webcast">Save your spot in the event for free</a></div>



<h2 class="wp-block-heading">A quick note about time</h2>



<p>There is a countdown to going live and a time listed on the page. This will be displayed in your timezone! Just register and click the date/time on the top of the page to add it to your calendar of choice and you&#8217;ll be good-to-go.</p>



<h2 class="wp-block-heading">Help spread the word</h2>



<p>Know someone at your company who should attend this? Please forward this blog post or just shared the link with them:</p>



<p class="has-text-align-center"><a href="https://talkpython.fm/python-decision-webcast"><strong>https://talkpython.fm/python-decision-webcast</strong></a></p>



<p>I&#8217;m looking forward to seeing you in January.</p>



<p>Hope to see you there!<br /><a href="https://twitter.com/mkennedy"><strong>Michael</strong></a></p>
]]></content:encoded>
					
					<wfw:commentRss>https://michaelckennedy.wordpress.com/2019/12/04/is-python-right-for-your-team/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
		
		<media:thumbnail url="https://michaelckennedy.wordpress.com/wp-content/uploads/2019/12/webcast-decision.png" />
		<media:content url="https://michaelckennedy.wordpress.com/wp-content/uploads/2019/12/webcast-decision.png" medium="image">
			<media:title type="html">webcast-decision</media:title>
		</media:content>

		<media:content url="https://0.gravatar.com/avatar/0c39b1af51635a37bd212fc71e854db94323bbdfdeb53bfbc9bc34d26620b8eb?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">michaelckennedy</media:title>
		</media:content>
	</item>
		<item>
		<title>A couple of podcast interviews (me as a guest)</title>
		<link>https://michaelckennedy.wordpress.com/2019/08/05/a-couple-of-podcast-interviews-me-as-a-guest/</link>
					<comments>https://michaelckennedy.wordpress.com/2019/08/05/a-couple-of-podcast-interviews-me-as-a-guest/#comments</comments>
		
		<dc:creator><![CDATA[Michael Kennedy]]></dc:creator>
		<pubDate>Mon, 05 Aug 2019 22:31:02 +0000</pubDate>
				<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Talk Python To Me Podcast]]></category>
		<guid isPermaLink="false">http://blog.michaelckennedy.net/?p=2382</guid>

					<description><![CDATA[Hi everyone. I recently got the chance to be interviewed on two podcast / youtube shows. They were a ton of fun and I think we actually covered a ton of fun topics that were both technically deep as well as covering entrepreneurship from a tech and open source side of things. Episode 73 &#8211; [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>Hi everyone. I recently got the chance to be interviewed on two podcast / youtube shows. They were a ton of fun and I think we actually covered a ton of fun topics that were both technically deep as well as covering entrepreneurship from a tech and open source side of things. </p>



<h2 class="wp-block-heading">Episode 73 &#8211; Talking Python with Michael Kennedy</h2>



<p><strong>from the Local Maximum, episode 73</strong></p>



<figure class="wp-block-embed-soundcloud wp-block-embed is-type-rich wp-embed-aspect-1-1 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<div class="embed-soundcloud"><iframe title="Ep. 73 - Talking Python with Michael Kennedy by The Local Maximum" width="970" height="400" scrolling="no" frameborder="no" src="https://w.soundcloud.com/player/?visual=true&#038;url=https%3A%2F%2Fapi.soundcloud.com%2Ftracks%2F644801274&#038;show_artwork=true&#038;maxwidth=970&#038;maxheight=1000&#038;dnt=1"></iframe></div>
</div><figcaption>Talk Python To Me host Michael Kennedy discusses a range of issues with Max, including Python&#8217;s popularity as a programming language and what we can learn from that, hosting a podcast as part of a business, and how programming skills can fit well with other careers and in our education system.</figcaption></figure>



<h1 class="wp-block-heading">The Keys To Push Beyond Abundance with Michael Kennedy</h1>



<p>on Profitable Python with Ben McNeill</p>



<figure class="wp-block-embed-youtube wp-block-embed is-type-rich wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<a href="https://www.youtube.com/watch?v=oy3yyPqacCo" rel="nofollow">https://www.youtube.com/watch?v=oy3yyPqacCo</a>
</div></figure>



<p>In this episode we talk with Michael Kennedy, the host of Python Bytes and Talk Python to Me.  He is the founder of Talk Python training and is a Python Software Foundation fellow.  Michael has been working in the developer field for more than 20 years and has spoke at numerous conferences.  </p>



<p>Today&#8217;s conversation weaves through creating impact with python, entrepreneurial wisdom, strategies for course and content creation, and methodologies to accelerate self learning.  </p>
]]></content:encoded>
					
					<wfw:commentRss>https://michaelckennedy.wordpress.com/2019/08/05/a-couple-of-podcast-interviews-me-as-a-guest/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
		
		<media:thumbnail url="https://michaelckennedy.wordpress.com/wp-content/uploads/2019/08/claus-grunstaudl-dkeb0-m9iia-unsplash.jpg" />
		<media:content url="https://michaelckennedy.wordpress.com/wp-content/uploads/2019/08/claus-grunstaudl-dkeb0-m9iia-unsplash.jpg" medium="image">
			<media:title type="html">claus-grunstaudl-dKeB0-M9iiA-unsplash</media:title>
		</media:content>

		<media:content url="https://0.gravatar.com/avatar/0c39b1af51635a37bd212fc71e854db94323bbdfdeb53bfbc9bc34d26620b8eb?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">michaelckennedy</media:title>
		</media:content>
	</item>
		<item>
		<title>Learn Flask and SQLAlchemy with my latest online course</title>
		<link>https://michaelckennedy.wordpress.com/2019/07/03/learn-flask-and-sqlalchemy-with-my-latest-online-course/</link>
					<comments>https://michaelckennedy.wordpress.com/2019/07/03/learn-flask-and-sqlalchemy-with-my-latest-online-course/#respond</comments>
		
		<dc:creator><![CDATA[Michael Kennedy]]></dc:creator>
		<pubDate>Wed, 03 Jul 2019 21:23:51 +0000</pubDate>
				<category><![CDATA[Articles]]></category>
		<guid isPermaLink="false">http://blog.michaelckennedy.net/?p=2375</guid>

					<description><![CDATA[Hi there. I&#8217;m excited to announce the availability of my latest online Python web course. Building data-driven web apps with Flask and SQLAlchemy This is our most recent course over at Talk Python Training. It&#8217;s just under 10 hours of video content along with some demo code to follow along. Here&#8217;s the elevator pitch One [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>Hi there. I&#8217;m excited to announce the availability of my latest online Python web course.</p>



<h2 class="wp-block-heading"><strong><a href="https://training.talkpython.fm/courses/explore_flask/building-data-driven-web-applications-in-python-with-flask-sqlalchemy-and-bootstrap">Building data-driven web apps with Flask and SQLAlchemy</a></strong></h2>



<figure class="wp-block-image"><img data-attachment-id="2376" data-permalink="https://michaelckennedy.wordpress.com/flask-data-web-apps/" data-orig-file="https://michaelckennedy.wordpress.com/wp-content/uploads/2019/07/flask-data-web-apps.jpg" data-orig-size="1024,576" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="flask-data-web-apps" data-image-description="" data-image-caption="" data-medium-file="https://michaelckennedy.wordpress.com/wp-content/uploads/2019/07/flask-data-web-apps.jpg?w=300" data-large-file="https://michaelckennedy.wordpress.com/wp-content/uploads/2019/07/flask-data-web-apps.jpg?w=970" src="https://michaelckennedy.wordpress.com/wp-content/uploads/2019/07/flask-data-web-apps.jpg" alt="" class="wp-image-2376" /></figure>



<p>This is our most recent course over at <strong>Talk Python Training</strong>. It&#8217;s just under 10 hours of video content along with some demo code to follow along. </p>



<h2 class="wp-block-heading">Here&#8217;s the elevator pitch</h2>



<p>One of the areas Python really shines is in building clean and powerful web applications. Once you know the language basics, this course will teach you everything you need to build data-driven, modern web applications in Python with the Flask web framework.</p>



<h2 class="wp-block-heading">A real-world demo app</h2>



<p>Lots of web courses have cheesy or unrealistic web apps they build (if even that!). So with this one, I wanted to build the kernel of any SaaS product for public facing web app. So we will be building <strong><a href="http://pypi.org">pypi.org</a></strong> from scratch using Flask and SQLAlchemy. Then we go further to write unit tests, deploy it to a Linux server and even build out a MongoDB version as well.</p>



<figure class="wp-block-image"><img data-attachment-id="2379" data-permalink="https://michaelckennedy.wordpress.com/pypi/" data-orig-file="https://michaelckennedy.wordpress.com/wp-content/uploads/2019/07/pypi.png" data-orig-size="2342,1208" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="pypi" data-image-description="" data-image-caption="" data-medium-file="https://michaelckennedy.wordpress.com/wp-content/uploads/2019/07/pypi.png?w=300" data-large-file="https://michaelckennedy.wordpress.com/wp-content/uploads/2019/07/pypi.png?w=970" src="https://michaelckennedy.wordpress.com/wp-content/uploads/2019/07/pypi.png" alt="" class="wp-image-2379" /></figure>



<h2 class="wp-block-heading">What&#8217;s this course about and how is it different?</h2>



<p><strong>Full stack web development is exactly what you need to build true data-driven web applications in Python</strong>. Yet these courses can be confusing and overwhelming due to the many technologies involved (Python, SQL, CSS, etc).                             </p>



<p style="text-align:left;">We have taken great care to build a course that is <strong>just real enough to give you  what you need without anything extra</strong>. We build a replica of a popular web application, Python&#8217;s own packaging index over at pypi.org.                             </p>



<p style="text-align:left;">While building our replica PyPI, you will learn:                             </p>



<ul class="wp-block-list"><li>Learn about the different major Python web frameworks</li><li>Create a Flask-based website from scratch using the CLI and PyCharm</li><li>Work with dynamic HTML templates</li><li>Map URLs to view methods using routing</li><li>Make advanced use of routing to build a full custom CMS in 8 minutes</li><li>Take advantage of bootstrap to build well designed sites</li><li>Map data to and from Python using classes with SQLAlchemy</li><li>Learn how Alembic can help our database evolve as our models change</li><li>Accept user input with HTML forms</li><li>Add client and server-side validation</li><li>Overcome the special challenges of testing web apps (databases, frameworks, etc)
                                </li><li>Deploy our web application to a fresh Linux machine (virtual, cloud-based)</li><li>Leverage our design patterns to convert our app to another data model (MongoDB
                                    edition)
                                </li></ul>



<h2 class="wp-block-heading">Get the early-bird discount</h2>



<p>We are offering the course for 20% off for just the first week it&#8217;s out. So be sure to check it out now if you&#8217;re interested. The price goes back to normal July 10th.</p>



<div class="wp-block-button aligncenter"><a class="wp-block-button__link has-text-color has-background has-vivid-green-cyan-background-color" href="https://training.talkpython.fm/courses/explore_flask/building-data-driven-web-applications-in-python-with-flask-sqlalchemy-and-bootstrap" style="color:#ffffff;"><strong>Get the Data-driven Flask Course</strong></a></div>
]]></content:encoded>
					
					<wfw:commentRss>https://michaelckennedy.wordpress.com/2019/07/03/learn-flask-and-sqlalchemy-with-my-latest-online-course/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		
		<media:thumbnail url="https://michaelckennedy.wordpress.com/wp-content/uploads/2019/07/dark-flask-data-web-apps.png" />
		<media:content url="https://michaelckennedy.wordpress.com/wp-content/uploads/2019/07/dark-flask-data-web-apps.png" medium="image">
			<media:title type="html">dark-flask-data-web-apps</media:title>
		</media:content>

		<media:content url="https://0.gravatar.com/avatar/0c39b1af51635a37bd212fc71e854db94323bbdfdeb53bfbc9bc34d26620b8eb?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">michaelckennedy</media:title>
		</media:content>

		<media:content url="https://michaelckennedy.wordpress.com/wp-content/uploads/2019/07/flask-data-web-apps.jpg" medium="image" />

		<media:content url="https://michaelckennedy.wordpress.com/wp-content/uploads/2019/07/pypi.png" medium="image" />
	</item>
		<item>
		<title>Being a Great Podcast Guest</title>
		<link>https://michaelckennedy.wordpress.com/2018/12/08/being-a-great-podcast-guest/</link>
					<comments>https://michaelckennedy.wordpress.com/2018/12/08/being-a-great-podcast-guest/#respond</comments>
		
		<dc:creator><![CDATA[Michael Kennedy]]></dc:creator>
		<pubDate>Sat, 08 Dec 2018 16:13:39 +0000</pubDate>
				<category><![CDATA[Speaking]]></category>
		<category><![CDATA[Talk Python To Me Podcast]]></category>
		<guid isPermaLink="false">http://blog.michaelckennedy.net/?p=2368</guid>

					<description><![CDATA[I recently got the chance to be a guest on Brian Okken&#8217;s Test and Code podcast. His show has been coming on strong lately with some great guests. So when Brian asked me to go meta with him and be his guest to help him and all his guests get more out of his show, [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>I recently got the chance to be a guest on Brian Okken&#8217;s <strong>Test and Code podcast</strong>. His show has been coming on strong lately with some great guests.</p>



<p>So when Brian asked me to go meta with him and be his guest to help him and all his guests get more out of his show, I was happy to be part of it.</p>



<p>He just released our episode. Check it out over at <a href="https://testandcode.com/56">https://testandcode.com/56</a></p>



<p>You might initially think this episode is only for peopole who are potential podcast guests or hosts. But it really has lots of advice and lessons for all sorts of opportunities where you are getting out and doing more in a public sphere (public speaking, etc.).</p>



<p>Hope you enjoy it and thank you to Brian for having me. Subscribe to his show on <a href="https://itunes.apple.com/us/podcast/test-and-code/id1029487211">Apple iTunes</a> or <a href="https://overcast.fm/itunes1029487211/test-and-code-a-podcast-about-software-testing-software-development-and-python">Overcast</a>. If you just want to listen in right away, go ahead and play it here:<br /><br /></p>



<figure class="wp-block-audio"><audio controls src="https://aphid.fireside.fm/d/1437767933/bc7f1faf-8aad-4135-bb12-83a8af679756/acf912d0-2028-458d-87b6-ccd77a5940ff.mp3"></audio></figure>



<p><br />Cheers,<br /><a href="http://@mkennedy">@mkennedy</a><br /></p>
]]></content:encoded>
					
					<wfw:commentRss>https://michaelckennedy.wordpress.com/2018/12/08/being-a-great-podcast-guest/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		<enclosure url="http://aphid.fireside.fm/d/1437767933/bc7f1faf-8aad-4135-bb12-83a8af679756/acf912d0-2028-458d-87b6-ccd77a5940ff.mp3" length="18047652" type="audio/mpeg" />
<enclosure url="http://aphid.fireside.fm/d/1437767933/bc7f1faf-8aad-4135-bb12-83a8af679756/acf912d0-2028-458d-87b6-ccd77a5940ff.mp3" length="18047652" type="audio/mpeg" />
<enclosure url="http://aphid.fireside.fm/d/1437767933/bc7f1faf-8aad-4135-bb12-83a8af679756/acf912d0-2028-458d-87b6-ccd77a5940ff.mp3" length="18047652" type="audio/mpeg" />
<enclosure url="http://aphid.fireside.fm/d/1437767933/bc7f1faf-8aad-4135-bb12-83a8af679756/acf912d0-2028-458d-87b6-ccd77a5940ff.mp3" length="18047652" type="audio/mpeg" />
<enclosure url="http://aphid.fireside.fm/d/1437767933/bc7f1faf-8aad-4135-bb12-83a8af679756/acf912d0-2028-458d-87b6-ccd77a5940ff.mp3" length="18047652" type="audio/mpeg" />
<enclosure url="http://aphid.fireside.fm/d/1437767933/bc7f1faf-8aad-4135-bb12-83a8af679756/acf912d0-2028-458d-87b6-ccd77a5940ff.mp3" length="18047652" type="audio/mpeg" />
<enclosure url="http://aphid.fireside.fm/d/1437767933/bc7f1faf-8aad-4135-bb12-83a8af679756/acf912d0-2028-458d-87b6-ccd77a5940ff.mp3" length="18047652" type="audio/mpeg" />
<enclosure url="http://aphid.fireside.fm/d/1437767933/bc7f1faf-8aad-4135-bb12-83a8af679756/acf912d0-2028-458d-87b6-ccd77a5940ff.mp3" length="18047652" type="audio/mpeg" />
<enclosure url="http://aphid.fireside.fm/d/1437767933/bc7f1faf-8aad-4135-bb12-83a8af679756/acf912d0-2028-458d-87b6-ccd77a5940ff.mp3" length="18047652" type="audio/mpeg" />
<enclosure url="http://aphid.fireside.fm/d/1437767933/bc7f1faf-8aad-4135-bb12-83a8af679756/acf912d0-2028-458d-87b6-ccd77a5940ff.mp3" length="18047652" type="audio/mpeg" />
<enclosure url="http://aphid.fireside.fm/d/1437767933/bc7f1faf-8aad-4135-bb12-83a8af679756/acf912d0-2028-458d-87b6-ccd77a5940ff.mp3" length="18047652" type="audio/mpeg" />
<enclosure url="http://aphid.fireside.fm/d/1437767933/bc7f1faf-8aad-4135-bb12-83a8af679756/acf912d0-2028-458d-87b6-ccd77a5940ff.mp3" length="18047652" type="audio/mpeg" />
<enclosure url="http://aphid.fireside.fm/d/1437767933/bc7f1faf-8aad-4135-bb12-83a8af679756/acf912d0-2028-458d-87b6-ccd77a5940ff.mp3" length="18047652" type="audio/mpeg" />
<enclosure url="http://aphid.fireside.fm/d/1437767933/bc7f1faf-8aad-4135-bb12-83a8af679756/acf912d0-2028-458d-87b6-ccd77a5940ff.mp3" length="18047652" type="audio/mpeg" />
<enclosure url="http://aphid.fireside.fm/d/1437767933/bc7f1faf-8aad-4135-bb12-83a8af679756/acf912d0-2028-458d-87b6-ccd77a5940ff.mp3" length="18047652" type="audio/mpeg" />
<enclosure url="http://aphid.fireside.fm/d/1437767933/bc7f1faf-8aad-4135-bb12-83a8af679756/acf912d0-2028-458d-87b6-ccd77a5940ff.mp3" length="18047652" type="audio/mpeg" />
<enclosure url="http://aphid.fireside.fm/d/1437767933/bc7f1faf-8aad-4135-bb12-83a8af679756/acf912d0-2028-458d-87b6-ccd77a5940ff.mp3" length="18047652" type="audio/mpeg" />
<enclosure url="http://aphid.fireside.fm/d/1437767933/bc7f1faf-8aad-4135-bb12-83a8af679756/acf912d0-2028-458d-87b6-ccd77a5940ff.mp3" length="18047652" type="audio/mpeg" />
<enclosure url="http://aphid.fireside.fm/d/1437767933/bc7f1faf-8aad-4135-bb12-83a8af679756/acf912d0-2028-458d-87b6-ccd77a5940ff.mp3" length="18047652" type="audio/mpeg" />
<enclosure url="http://aphid.fireside.fm/d/1437767933/bc7f1faf-8aad-4135-bb12-83a8af679756/acf912d0-2028-458d-87b6-ccd77a5940ff.mp3" length="18047652" type="audio/mpeg" />
<enclosure url="http://aphid.fireside.fm/d/1437767933/bc7f1faf-8aad-4135-bb12-83a8af679756/acf912d0-2028-458d-87b6-ccd77a5940ff.mp3" length="18047652" type="audio/mpeg" />
<enclosure url="http://aphid.fireside.fm/d/1437767933/bc7f1faf-8aad-4135-bb12-83a8af679756/acf912d0-2028-458d-87b6-ccd77a5940ff.mp3" length="18047652" type="audio/mpeg" />

		
		<media:thumbnail url="https://michaelckennedy.wordpress.com/wp-content/uploads/2018/12/header.jpg" />
		<media:content url="https://michaelckennedy.wordpress.com/wp-content/uploads/2018/12/header.jpg" medium="image">
			<media:title type="html">header</media:title>
		</media:content>

		<media:content url="https://0.gravatar.com/avatar/0c39b1af51635a37bd212fc71e854db94323bbdfdeb53bfbc9bc34d26620b8eb?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">michaelckennedy</media:title>
		</media:content>
	</item>
		<item>
		<title>Learn Python Web Development with our latest course</title>
		<link>https://michaelckennedy.wordpress.com/2018/08/01/learn-python-web-development-with-our-latest-course/</link>
					<comments>https://michaelckennedy.wordpress.com/2018/08/01/learn-python-web-development-with-our-latest-course/#comments</comments>
		
		<dc:creator><![CDATA[Michael Kennedy]]></dc:creator>
		<pubDate>Wed, 01 Aug 2018 20:20:49 +0000</pubDate>
				<category><![CDATA[Python]]></category>
		<guid isPermaLink="false">http://blog.michaelckennedy.net/?p=2362</guid>

					<description><![CDATA[Hey everyone, I&#8217;m super excited to share a project I&#8217;ve been working on over the past couple of months. We just released a new course over at Talk Python Training. Building data-driven web apps with Pyramid and SQLAlchemy Visit the course page for all the details and to take the course or just keep reading. [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Hey everyone,</p>
<p>I&#8217;m super excited to share a project I&#8217;ve been working on over the past couple of months. We just released a new course over at Talk Python Training.</p>
<p style="text-align:center;"><a href="https://michaelckennedy.wordpress.com/wp-content/uploads/2018/08/python-data-web-apps.png" target="_blank" rel="noopener"><img loading="lazy" data-attachment-id="2363" data-permalink="https://michaelckennedy.wordpress.com/2018/08/01/learn-python-web-development-with-our-latest-course/python-data-web-apps/" data-orig-file="https://michaelckennedy.wordpress.com/wp-content/uploads/2018/08/python-data-web-apps.png" data-orig-size="1024,576" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="python-data-web-apps" data-image-description="" data-image-caption="" data-medium-file="https://michaelckennedy.wordpress.com/wp-content/uploads/2018/08/python-data-web-apps.png?w=300" data-large-file="https://michaelckennedy.wordpress.com/wp-content/uploads/2018/08/python-data-web-apps.png?w=970" class="alignnone size-full wp-image-2363" src="https://michaelckennedy.wordpress.com/wp-content/uploads/2018/08/python-data-web-apps.png" alt="python-data-web-apps" width="1024" height="576" srcset="https://michaelckennedy.wordpress.com/wp-content/uploads/2018/08/python-data-web-apps.png 1024w, https://michaelckennedy.wordpress.com/wp-content/uploads/2018/08/python-data-web-apps.png?w=150&amp;h=84 150w, https://michaelckennedy.wordpress.com/wp-content/uploads/2018/08/python-data-web-apps.png?w=300&amp;h=169 300w, https://michaelckennedy.wordpress.com/wp-content/uploads/2018/08/python-data-web-apps.png?w=768&amp;h=432 768w" sizes="(max-width: 1024px) 100vw, 1024px" /></a><br />
<a href="https://training.talkpython.fm/courses/explore_pyramid/building-data-driven-web-applications-in-python-with-pyramid-sqlalchemy-and-bootstrap?utm_source=blog" target="_blank" rel="noopener"><strong>Building data-driven web apps with Pyramid and SQLAlchemy</strong></a></p>
<p>Visit the <strong><a href="https://training.talkpython.fm/courses/explore_pyramid/building-data-driven-web-applications-in-python-with-pyramid-sqlalchemy-and-bootstrap?utm_source=blog" target="_blank" rel="noopener">course page</a></strong> for all the details and to take the course or just keep reading.</p>
<p>This course will teach you everything you need to build data-driven, modern web applications in Python. Full stack web development is exactly what you need to build true data-driven web applications in Python. Yet these courses can be confusing and overwhelming due to the many technologies involved (Python, SQL, CSS, etc).</p>
<p>We have taken great care to build a course that is just real enough to give you what you need without anything extra. We build a replica of a popular web application, Python&#8217;s own packaging index over at pypi.org.</p>
<p>While building our replica PyPI, you will learn:</p>
<ul>
<li>Learn about the different major Python web frameworks</li>
<li>Create a Pyramid-based website from scratch using the CLI and PyCharm</li>
<li>Work with dynamic HTML templates</li>
<li>Map URLs to view methods using routing</li>
<li>Make advanced use of routing to build a full custom CMS in 5 minutes</li>
<li>Take advantage of bootstrap to build well designed sites</li>
<li>Map data to and from Python using classes with SQLAlchemy</li>
<li>Learn how Alembic can help our database evolve as our models change</li>
<li>Accept user input with HTML forms</li>
<li>Add client and server-side validation</li>
<li>Overcome the special challenges of testing web apps (databases, frameworks, etc)</li>
<li>Deploy our web application to a fresh Linux machine (virtual, cloud-based)</li>
<li>Leverage our design patterns to convert our app to another data model (MongoDB edition)</li>
</ul>
<p>Sound interesting? Check out the course intro video or jump on over to the course page.</p>
<div class="jetpack-video-wrapper">
<div class="embed-youtube"><iframe title="Course Trailer: Building data-driven web apps with Pyramid and SQLAlchemy" width="970" height="546" src="https://www.youtube.com/embed/z5BsI7W8QJU?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe></div>
</div>
<p>Cheers,<br />
<a href="https://twitter.com/mkennedy/">@mkennedy</a></p>
<p>&nbsp;</p>
]]></content:encoded>
					
					<wfw:commentRss>https://michaelckennedy.wordpress.com/2018/08/01/learn-python-web-development-with-our-latest-course/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
		
		<media:thumbnail url="https://michaelckennedy.wordpress.com/wp-content/uploads/2018/08/darkened-data-driven.png" />
		<media:content url="https://michaelckennedy.wordpress.com/wp-content/uploads/2018/08/darkened-data-driven.png" medium="image">
			<media:title type="html">darkened data driven</media:title>
		</media:content>

		<media:content url="https://0.gravatar.com/avatar/0c39b1af51635a37bd212fc71e854db94323bbdfdeb53bfbc9bc34d26620b8eb?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">michaelckennedy</media:title>
		</media:content>

		<media:content url="https://michaelckennedy.wordpress.com/wp-content/uploads/2018/08/python-data-web-apps.png" medium="image">
			<media:title type="html">python-data-web-apps</media:title>
		</media:content>
	</item>
		<item>
		<title>Eve: Building RESTful APIs with MongoDB and Flask</title>
		<link>https://michaelckennedy.wordpress.com/2018/03/20/eve-building-restful-apis-with-mongodb-and-flask/</link>
					<comments>https://michaelckennedy.wordpress.com/2018/03/20/eve-building-restful-apis-with-mongodb-and-flask/#comments</comments>
		
		<dc:creator><![CDATA[Michael Kennedy]]></dc:creator>
		<pubDate>Tue, 20 Mar 2018 13:00:48 +0000</pubDate>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[Video]]></category>
		<category><![CDATA[Online courses]]></category>
		<guid isPermaLink="false">http://blog.michaelckennedy.net/?p=2359</guid>

					<description><![CDATA[Want to build MongoDB-backed RESTful web services in Python? Over at Talk Python Training, we just launched a new course on the Eve RESTful framework. It&#8217;s called Eve: Building RESTful APIs with MongoDB and Flask If you are thinking of building RESTful HTTP APIs with MongoDB, you owe it to yourself to check out the [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Want to build MongoDB-backed RESTful web services in Python? Over at <strong><a href="https://training.talkpython.fm">Talk Python Training</a></strong>, we just launched a new course on the <a href="http://python-eve.org/"><strong>Eve RESTful framework</strong></a>. It&#8217;s called</p>
<h2 style="text-align:center;"><a href="https://training.talkpython.fm/courses/explore_eve/eve-building-restful-mongodb-backed-apis-course">Eve: Building RESTful APIs with MongoDB and Flask</a></h2>
<p>If you are thinking of building RESTful HTTP APIs with MongoDB, you owe it to yourself to check out the course. Jump over the to the course page and watch the <strong><a href="https://training.talkpython.fm/courses/explore_eve/eve-building-restful-mongodb-backed-apis-course?autoplay=true">introductory video</a></strong>.</p>
<p>Here&#8217;s a little more info on the course, which was written by <a href="https://nicolaiarocci.com/"><strong>Nicola Iarocci</strong></a>, the creator and maintainer of Eve.</p>
<h3>Course Summary</h3>
<p>Eve is an open source Python REST API framework designed for human beings. It allows you to effortlessly build and deploy highly customizable, fully featured RESTful web services.</p>
<h3>What&#8217;s this course about and how is it different?</h3>
<p>This course will teach you to effortlessly build RESTful services based on Flask and MongoDB.</p>
<p>We dive deep into every aspect of the Eve REST framework. After a quick introduction to MongoDB and Flask, we&#8217;ll dig into Eve, build our schemas and endpoints and start serving HTTP clients right away, and that&#8217;s just the beginning.</p>
<p>In this course, you will:</p>
<ul>
<li>Create a new Eve web service application</li>
<li>Define data schemas for the service and MongoDB</li>
<li>Issue queries from the client straight into the service</li>
<li>Validate inbound data (including custom rules)</li>
<li>Add and configure paging for large data sets</li>
<li>Project responses for just the data you need</li>
<li>Switch between JSON and XML per client request</li>
<li>Secure your service with authentication</li>
<li>Add event hooks such as pre-insert actions</li>
<li>Limit the rate of your clients to avoid abuse</li>
<li>Deploy your service</li>
<li>And lots more</li>
</ul>
<h3>Who is this course for?</h3>
<p>It&#8217;s for anyone who has wants to leverage Eve to build RESTful APIs. We do assume you know basic Python concepts but advanced features and knowledge of MongoDB, Flask, and REST is not required.</p>
<p>Sound interesting? Sign up or read me over at the <strong><a href="https://training.talkpython.fm/courses/explore_eve/eve-building-restful-mongodb-backed-apis-course">course page</a></strong>!</p>
]]></content:encoded>
					
					<wfw:commentRss>https://michaelckennedy.wordpress.com/2018/03/20/eve-building-restful-apis-with-mongodb-and-flask/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
		
		<media:thumbnail url="https://michaelckennedy.wordpress.com/wp-content/uploads/2018/03/eve-and-mongo.png" />
		<media:content url="https://michaelckennedy.wordpress.com/wp-content/uploads/2018/03/eve-and-mongo.png" medium="image">
			<media:title type="html">eve-and-mongo</media:title>
		</media:content>

		<media:content url="https://0.gravatar.com/avatar/0c39b1af51635a37bd212fc71e854db94323bbdfdeb53bfbc9bc34d26620b8eb?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">michaelckennedy</media:title>
		</media:content>
	</item>
		<item>
		<title>A bunch of online Python courses</title>
		<link>https://michaelckennedy.wordpress.com/2018/01/08/a-bunch-of-online-python-courses/</link>
					<comments>https://michaelckennedy.wordpress.com/2018/01/08/a-bunch-of-online-python-courses/#comments</comments>
		
		<dc:creator><![CDATA[Michael Kennedy]]></dc:creator>
		<pubDate>Mon, 08 Jan 2018 12:30:53 +0000</pubDate>
				<category><![CDATA[Articles]]></category>
		<guid isPermaLink="false">http://blog.michaelckennedy.net/?p=2355</guid>

					<description><![CDATA[Hey everyone, Happy 2018! There are many things to celebrate as we roll into this new year. One is a bunch of new Python courses are either available or coming soon at Talk Python Training. I&#8217;ve been thinking about how to best make these available to everyone. I want you to have access to everything, [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Hey everyone,</p>
<p>Happy 2018! There are many things to celebrate as we roll into this new year. One is a bunch of new Python courses are either available or coming soon at <a href="https://training.talkpython.fm/?utm_source=pblog" target="_blank" rel="noopener">Talk Python Training</a>.</p>
<p>I&#8217;ve been thinking about how to best make these available to everyone.</p>
<p>I want you to have access to everything, all the Python courses &#8211; almost 100 hours and growing fast. I want keep the <a href="https://training.talkpython.fm/policies/pricing?utm_source=pblog#lifetime" target="_blank" rel="noopener">own it forever</a> model (way better than subscriptions for you). And so the <a href="https://training.talkpython.fm/courses/bundle/everything-bundle-2018?utm_source=pblog" target="_blank" rel="noopener">Everything Bundle</a> is born.</p>
<p><a href="https://training.talkpython.fm/courses/bundle/everything-bundle-2018?utm_source=pblog" target="_blank" rel="noopener"><img loading="lazy" data-attachment-id="2356" data-permalink="https://michaelckennedy.wordpress.com/2018/01/08/a-bunch-of-online-python-courses/everything_bundle/" data-orig-file="https://michaelckennedy.wordpress.com/wp-content/uploads/2018/01/everything_bundle.png" data-orig-size="581,331" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="everything_bundle" data-image-description="" data-image-caption="" data-medium-file="https://michaelckennedy.wordpress.com/wp-content/uploads/2018/01/everything_bundle.png?w=300" data-large-file="https://michaelckennedy.wordpress.com/wp-content/uploads/2018/01/everything_bundle.png?w=581" class=" size-full wp-image-2356 aligncenter" src="https://michaelckennedy.wordpress.com/wp-content/uploads/2018/01/everything_bundle.png" alt="everything_bundle" width="581" height="331" srcset="https://michaelckennedy.wordpress.com/wp-content/uploads/2018/01/everything_bundle.png 581w, https://michaelckennedy.wordpress.com/wp-content/uploads/2018/01/everything_bundle.png?w=150&amp;h=85 150w, https://michaelckennedy.wordpress.com/wp-content/uploads/2018/01/everything_bundle.png?w=300&amp;h=171 300w" sizes="(max-width: 581px) 100vw, 581px" /></a></p>
<p>If you&#8217;re thinking about learning Python, there really isn&#8217;t a better single resource out there. We have many of the best courses available and many amazing courses from new authors coming soon. These include</p>
<ul>
<li>Python Jumpstart by Building 10 Apps</li>
<li>Mastering PyCharm</li>
<li>Pythonic code</li>
<li>Python 3: An Illustrated Tour</li>
<li>Introduction to Ansible</li>
<li>Eve: Building RESTful APIs with MongoDB and Flask</li>
<li>And many more we&#8217;re not ready to announce just yet</li>
</ul>
<p><a href="https://training.talkpython.fm/courses/bundle/everything-bundle-2018?utm_source=pblog" target="_blank" rel="noopener">Check out the bundle</a> and find the Python course to jumpstart your next adventure!</p>
<p>Thanks!<br />
<a href="https://twitter.com/mkennedy" target="_blank" rel="noopener">@mkennedy</a></p>
<p>&nbsp;</p>
]]></content:encoded>
					
					<wfw:commentRss>https://michaelckennedy.wordpress.com/2018/01/08/a-bunch-of-online-python-courses/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
		
		<media:thumbnail url="https://michaelckennedy.wordpress.com/wp-content/uploads/2018/01/everything-2018-bundle.png" />
		<media:content url="https://michaelckennedy.wordpress.com/wp-content/uploads/2018/01/everything-2018-bundle.png" medium="image">
			<media:title type="html">everything-2018-bundle</media:title>
		</media:content>

		<media:content url="https://0.gravatar.com/avatar/0c39b1af51635a37bd212fc71e854db94323bbdfdeb53bfbc9bc34d26620b8eb?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">michaelckennedy</media:title>
		</media:content>

		<media:content url="https://michaelckennedy.wordpress.com/wp-content/uploads/2018/01/everything_bundle.png" medium="image">
			<media:title type="html">everything_bundle</media:title>
		</media:content>
	</item>
		<item>
		<title>Why is Python hard on Windows? You tell me!</title>
		<link>https://michaelckennedy.wordpress.com/2017/10/23/why-is-python-hard-on-windows-you-tell-me/</link>
					<comments>https://michaelckennedy.wordpress.com/2017/10/23/why-is-python-hard-on-windows-you-tell-me/#comments</comments>
		
		<dc:creator><![CDATA[Michael Kennedy]]></dc:creator>
		<pubDate>Mon, 23 Oct 2017 18:05:33 +0000</pubDate>
				<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Windows]]></category>
		<guid isPermaLink="false">http://blog.michaelckennedy.net/?p=2345</guid>

					<description><![CDATA[I&#8217;m building some resources to make using, developing on, and teaching with Python on Windows easier and better.  If you&#8217;ve used Python on Windows, please tell me about your experiences so we can pay it forward and make Python better on Windows. Here&#8217;s a short form (only 3 questions). I&#8217;d appreciate your thoughts. https://docs.google.com/forms/d/e/1FAIpQLSdygLS0G91t5E8LCGtZvdfzeqdePr2jFqoiR30HZjmGbaJjNQ/viewform Thanks! [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>I&#8217;m building some resources to make using, developing on, and teaching with Python on Windows easier and better.  If you&#8217;ve used Python on Windows, please tell me about your experiences so we can pay it forward and make Python better on Windows.</p>
<p>Here&#8217;s a short form (only 3 questions). I&#8217;d appreciate your thoughts.</p>
<p><a href="https://docs.google.com/forms/d/e/1FAIpQLSdygLS0G91t5E8LCGtZvdfzeqdePr2jFqoiR30HZjmGbaJjNQ/viewform" target="_blank" rel="noopener">https://docs.google.com/forms/d/e/1FAIpQLSdygLS0G91t5E8LCGtZvdfzeqdePr2jFqoiR30HZjmGbaJjNQ/viewform</a></p>
<p>Thanks!<br />
<a href="https://twitter.com/mkennedy">@mkennedy</a></p>
]]></content:encoded>
					
					<wfw:commentRss>https://michaelckennedy.wordpress.com/2017/10/23/why-is-python-hard-on-windows-you-tell-me/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
		
		<media:thumbnail url="https://michaelckennedy.wordpress.com/wp-content/uploads/2017/10/windows-10.jpg" />
		<media:content url="https://michaelckennedy.wordpress.com/wp-content/uploads/2017/10/windows-10.jpg" medium="image">
			<media:title type="html">windows 10</media:title>
		</media:content>

		<media:content url="https://0.gravatar.com/avatar/0c39b1af51635a37bd212fc71e854db94323bbdfdeb53bfbc9bc34d26620b8eb?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">michaelckennedy</media:title>
		</media:content>
	</item>
		<item>
		<title>MongoDB Quickstart with Python: A new, free course to teach you MongoDB</title>
		<link>https://michaelckennedy.wordpress.com/2017/10/11/mongodb-quickstart-with-python-a-new-free-course-to-teach-you-mongodb/</link>
					<comments>https://michaelckennedy.wordpress.com/2017/10/11/mongodb-quickstart-with-python-a-new-free-course-to-teach-you-mongodb/#comments</comments>
		
		<dc:creator><![CDATA[Michael Kennedy]]></dc:creator>
		<pubDate>Wed, 11 Oct 2017 23:04:58 +0000</pubDate>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[Video]]></category>
		<category><![CDATA[MongoDB]]></category>
		<category><![CDATA[NoSQL]]></category>
		<category><![CDATA[Online courses]]></category>
		<category><![CDATA[Open Source]]></category>
		<guid isPermaLink="false">http://blog.michaelckennedy.net/?p=2326</guid>

					<description><![CDATA[Have you been wanting to learn MongoDB or how to work with it from Python? If you&#8217;ve been on the fence about taking an online course or have been unhappy with ones you&#8217;ve taken before, here&#8217;s a great chance to get up to speed with MongoDB in just 2 hours. Sound interesting? Just visit freemongodbcourse.com and [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Have you been wanting to learn MongoDB or how to work with it from Python? If you&#8217;ve been on the fence about taking an online course or have been unhappy with ones you&#8217;ve taken before, here&#8217;s <strong>a great chance to get up to speed with MongoDB in just 2 hours</strong>.</p>
<div class="jetpack-video-wrapper">
<div class="embed-vimeo"><iframe src="https://player.vimeo.com/video/237158813" width="970" height="546" frameborder="0" title="MongoDB Quickstart 01 -01-welcome" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe></div>
</div>
<p>Sound interesting? Just visit <strong><a href="http://freemongodbcourse.com" target="_blank" rel="noopener">freemongodbcourse.com</a></strong> and sign up today. No strings attached!</p>
<h2>What is covered?</h2>
<p>There are four major topics covered.</p>
<ul>
<li>Why NoSQL and MongoDB</li>
<li>Modeling data in document databases</li>
<li>Introducing MongoEngine</li>
<li>Building the data layer with MongoEngine</li>
</ul>
<h2>Why use MongoDB?</h2>
<ul>
<li><strong>Simplicity</strong>: Requires less work to evolve as your app grows.</li>
<li><strong>Most wanted</strong>: MongoDB is the <a href="https://insights.stackoverflow.com/survey/2017#technology-most-loved-dreaded-and-wanted-databases"><strong>most wanted</strong></a> database by a factor of 2.</li>
<li><strong>Powering the web</strong>: A <strong><a href="https://www.mongodb.com/customers/under-armour" target="_blank" rel="noopener">$2 billion dollar ecommerce store</a></strong> and many<a href="https://www.mongodb.com/who-uses-mongodb" target="_blank" rel="noopener"><strong> more</strong></a>&#8230;</li>
<li><strong>Scalable</strong>: Built-in sharding and replication using the same API.</li>
</ul>
<h2>Take the course</h2>
<p>What are you waiting for? Jump over to visit <strong><a href="http://freemongodbcourse.com" target="_blank" rel="noopener">freemongodbcourse.com</a></strong> and get started!</p>
]]></content:encoded>
					
					<wfw:commentRss>https://michaelckennedy.wordpress.com/2017/10/11/mongodb-quickstart-with-python-a-new-free-course-to-teach-you-mongodb/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
		
		<media:thumbnail url="https://michaelckennedy.wordpress.com/wp-content/uploads/2017/10/mongo_python_love.png" />
		<media:content url="https://michaelckennedy.wordpress.com/wp-content/uploads/2017/10/mongo_python_love.png" medium="image">
			<media:title type="html">mongo_python_love</media:title>
		</media:content>

		<media:content url="https://0.gravatar.com/avatar/0c39b1af51635a37bd212fc71e854db94323bbdfdeb53bfbc9bc34d26620b8eb?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">michaelckennedy</media:title>
		</media:content>
	</item>
		<item>
		<title>Yelp Reviews: Authorship Attribution with Python and scikit-learn</title>
		<link>https://michaelckennedy.wordpress.com/2017/06/21/yelp-reviews-authorship-attribution-with-python-and-scikit-learn/</link>
					<comments>https://michaelckennedy.wordpress.com/2017/06/21/yelp-reviews-authorship-attribution-with-python-and-scikit-learn/#comments</comments>
		
		<dc:creator><![CDATA[Michael Kennedy]]></dc:creator>
		<pubDate>Wed, 21 Jun 2017 16:57:31 +0000</pubDate>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[scikit-learn]]></category>
		<guid isPermaLink="false">http://blog.michaelckennedy.net/?p=2317</guid>

					<description><![CDATA[This is a guest post by Gareth Dwyer is an author for DevelopIntelligence, who offers Python Training for Teams. Yelp Reviews: Authorship Attribution with Python and scikit-learn When people write text, they do so in their own specific style. Often, it&#8217;s possible to identify someone using only their unique style of writing. In this post, [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>This is a guest post by Gareth Dwyer is an author for DevelopIntelligence, who offers <a href="http://www.developintelligence.com/catalog/devops/python">Python Training for Teams</a>.</p>
<p><strong><em>Yelp Reviews: Authorship Attribution with Python and scikit-learn</em></strong></p>
<p>When people write text, they do so in their own specific <em>style</em>. Often, it&#8217;s possible to identify someone using only their unique style of writing. In this post, we&#8217;ll see how easy it is to identify people using their writing style through machine learning. Specifically, we&#8217;ll look at reviewers who have left multiple reviews on Yelp. We&#8217;ll teach a machine learning system to differentiate between different writing styles, and then see how well it can predict the correct author of a review, looking only at the review text.</p>
<h2>Overview</h2>
<p>In this post, we will:</p>
<ul>
<li>Load over 4 million reviews from the 2017 Yelp Dataset Challenge</li>
<li>Find users who have left at least 500 reviews</li>
<li>Train a support vector machine classifier to identify the writing style of each author</li>
<li>See how well the classifier can identify reviews it hasn&#8217;t seen during training</li>
</ul>
<p>We&#8217;ll use Python and Jupyter Notebook to develop our system, relying on <code>scikit-learn</code> for the machine learning components. Jupyter allows us to easily run sections of code as we progress. We can easily view the output of each &#8216;cell&#8217; of code, and make changes if necessary, without needing to rerun the entire script.</p>
<h2>Prerequisites</h2>
<p>To follow along with this post, you should have used Python before. It&#8217;ll help if you know some basics of machine learning, but we&#8217;ll explain everything we do in detail, so you should be able to keep up even if you&#8217;re just getting started. You&#8217;ll need a working Python environment with <a href="https://jupyter.org/">Jupyter notebook</a> and <a href="http://scikit-learn.org/stable/index.html">scikit-learn</a> installed. You can install both by running:</p>
<p><code>pip3 install jupyter sklearn</code></p>
<p>You&#8217;ll also need to download the Yelp dataset from <a href="https://www.yelp.com/dataset_challenge">https://www.yelp.com/dataset_challenge</a>. The data is a 1.7 GB tarball, which decompresses to over 4 GB of JSON files, so you&#8217;ll need some free disk space. Once you&#8217;ve downloaded the data and decompressed it, start up a Jupyter notebook in the same directory that you saved the dataset to, and create a new Python 3 notebook. You will then be able to run all the code while reading the explanatory text, making any changes to the code that you want.</p>
<h2>Reading in the review data</h2>
<p>First, we&#8217;ll load the Yelp reviews from disk into a Python list. We put <code>%%time</code> at the beginning of the cell to tell Jupyter to indicate how long the code took to run. On my machine, parsing the 4 million reviews took about a minute and a half.</p>
<pre class="brush: plain; title: ; notranslate">
# python
%%time
import json

reviews = []
with open(&quot;yelp_academic_dataset_review.json&quot;) as f:
for line in f:
reviews.append(json.loads(line))

# CPU times: user 52.2 s, sys: 28.7 s, total: 1min 20s
Wall time: 1min 34s
</pre>
<p>We&#8217;ll take a look at the first review so we know how the data is structured. For this post, we&#8217;ll only be using the <code>user_id</code> and <code>text</code> fields (the user IDs have been anonymized, but if two reviews have the same <code>user_id</code>, it means that they were written by the same user).</p>
<pre class="brush: plain; title: ; notranslate">
# python

print(reviews[0])
{&#039;business_id&#039;: &#039;2aFiy99vNLklCx3T_tGS9A&#039;,
&#039;cool&#039;: 0,
&#039;date&#039;: &#039;2011-10-10&#039;,
&#039;funny&#039;: 0,
&#039;review_id&#039;: &#039;NxL8SIC5yqOdnlXCg18IBg&#039;,
&#039;stars&#039;: 5,
&#039;text&#039;: &#039;If you enjoy service by someone who is
as competent as he is personable, I would recommend Corey Kaplan highly. The time he has spent here has been very productive and working with him educational and enjoyable. I hope not to need him again (though this is highly unlikely) but knowing he is there if I do is very nice. By the way, &quot;I&#039;m not from El Centro, CA. but Scottsdale, AZ.&quot;,
&#039;type&#039;: &#039;review&#039;,
&#039;useful&#039;: 0,
&#039;user_id&#039;: &#039;KpkOkG6RIf4Ra25Lhhxf1A&#039;}
</pre>
<h2>Getting the top reviewers</h2>
<p>We&#8217;re only interested in the users who have left multiple reviews for our analysis. Because most users have left only one or two reviews (see<a href="http://www.developintelligence.com/blog/2017/02/analyzing-4-million-yelp-reviews-python-aws-ec2-instance/"> http://www.developintelligence.com/blog/2017/02/analyzing-4-million-yelp-reviews-python-aws-ec2-instance/</a> for a more detailed breakdown), we&#8217;ll be excluding a large portion of the reviews. We can find the reviewers who have left the most reviews efficiently by using a Python <code>Counter</code>. We&#8217;ll take the 80 top reviewers, who have all left at least 500 reviews in this dataset.</p>
<pre class="brush: plain; title: ; notranslate">
# python

from collections import Counter

prolific_reviewers = Counter([
review[&#039;user_id&#039;]
for review in reviews]
).most_common(80)
</pre>
<p>Let&#8217;s take a look at the top 5 reviewers.</p>
<pre class="brush: plain; title: ; notranslate">
# python
prolific_reviewers[:5]
[
(&#039;CxDOIDnH8gp9KXzpBHJYXw&#039;, 3327),
(&#039;bLbSNkLggFnqwNNzzq-Ijw&#039;, 1795),
(&#039;PKEzKWv_FktMm2mGPjwd0Q&#039;, 1509),
(&#039;QJI9OSEn6ujRCtrX06vs1w&#039;, 1316),
(&#039;DK57YibC5ShBmqQl97CKog&#039;, 1266)
]
</pre>
<p>One person has left over 3000 reviews on yelp! The drop-off is quite steep, but the 80th person in the list has still left over 500 reviews.</p>
<p>Now we want to create a balanced dataset &#8212; i.e., we want the same number of reviews of each reviewer. We&#8217;ll go through all our reviews again and keep only those reviews written by the 80 authors we identified above, and only 500 reviews from each author. Below, <code>keep_ids</code> is a dictionary which we&#8217;ll use to keep count of how many reviews we have from each author.</p>
<pre class="brush: plain; title: ; notranslate">
# python
keep_ids = {pr[0] : 0 for pr in prolific_reviewers}

keep_reviews = []
for review in reviews:
uid = review[&#039;user_id&#039;]
if uid in keep_ids and keep_ids[uid] &lt; 500:
keep_reviews.append(review)
keep_ids[uid] += 1
</pre>
<h2>Preparing the training data</h2>
<p>Now we&#8217;ll split the reviews we kept into two lists: one for the texts of the reviews, and another for the author ids. The two lists are implicitly associated by index (i.e., the first text in our <code>texts</code> array was written by the first author in our <code>authors</code> array). In machine learning, we refer to these as &#8220;instances&#8221; and &#8220;labels&#8221;. Instances are the things we use to learn from, and the labels are the things we are trying to learn.</p>
<pre class="brush: plain; title: ; notranslate">
# python
texts = [review[&#039;text&#039;] for review in keep_reviews]
authors = [review[&#039;user_id&#039;] for review in keep_reviews]
</pre>
<p>Next, we need to import some things from the <code>scikit-learn</code> library. Specifically, we need a <em>vectorizer</em> (something that transforms our texts into a numerical representation that&#8217;s easier to work with) and a <em>classifier</em> (the thing that learns how to discriminate based on labeled examples). We&#8217;ll be using <code>TfidfVectorizer</code>, which transforms our text into vectors with <a href="https://en.wikipedia.org/wiki/Tf%E2%80%93idf">tf-idf weighting</a> and a <code>LinearSVM</code>, which is a <a href="https://en.wikipedia.org/wiki/Support_vector_machine">Support Vector Machine</a> with a linear kernel &#8212; a kernel that is often used for text classification tasks. We&#8217;ll also import a helper function called <code>train_test_split</code>. We&#8217;ll use this to split our data into a training set and a test set. The classifier will learn patterns from the training set, and then we&#8217;ll make sure that it actually works by seeing if it can correctly predict the authors in the held-out test set.</p>
<pre class="brush: plain; title: ; notranslate">
# python

from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.svm import LinearSVC
from sklearn.model_selection import train_test_split
</pre>
<p>Now we can transform our texts into vectors by setting up a vectorizer and giving it the list of our texts.</p>
<pre class="brush: plain; title: ; notranslate">
# python

vectorizer = TfidfVectorizer()
vectors = vectorizer.fit_transform(texts)
print(vectors.shape)

(40000, 68619)
</pre>
<p>Our <code>vectors</code> variable contains a sparse matrix with shape 40000 (which is 500 texts times by 80 authors &#8212; the number of texts we kept) by 68619 which is the number of features. Our features are single words (unigrams) and each text is represented by an indication of how often that word appears in that text (which is nearly always 0 as we have 68619 unique words in the dataset).</p>
<p>Often in machine learning, you&#8217;ll see the instances (texts in our case) referred to as <code>Xs</code> and the labels as <code>ys</code>. You can think about machine learning tasks as a function <code>y = f(x)</code>. We have <code>x</code> (the review text) and we want to know <code>y</code> (the author&#8217;s ID). The SVM attempts to learn a function <code>f</code> that can map the texts to the labels. We&#8217;ll follow this convention, and break our texts into <code>X_train</code> (the texts we&#8217;ll show the SVM as learning examples) and <code>X_test</code> (the texts we won&#8217;t show to the SVM so we can see if it&#8217;s able to predict the correct authors for these texts based on the patterns it learned from the texts in <code>X_train</code>). We&#8217;ll similarly break our labels (the author ids) into two arrays as well: <code>y_train</code> and <code>y_test</code>. We can use the function provided by scikit-learn to handle taking a random sample of our texts and labels, while making sure that the indices still correspond, as follows.</p>
<pre class="brush: plain; title: ; notranslate">
# python

# We use a fixed random_state to ensure that the same random sampling is used every time the code is run.

X_train, X_test, y_train, y_test = train_test_split(vectors, authors, test_size=0.2, random_state=1337)
</pre>
<p>We now have 32000 texts (80% of our data) to train on and 8000 (20%) for testing:</p>
<pre class="brush: plain; title: ; notranslate">
# python

print(X_train.shape, X_test.shape)
(32000, 68619) (8000, 68619)
</pre>
<h2>Training and testing a classifier</h2>
<p>We first need to call <code>fit</code> on our classifier and pass in the learning texts and labels. Then we&#8217;ll call <code>predict</code> to get predictions on the test data, and look at some metrics to see how well it did.</p>
<pre class="brush: plain; title: ; notranslate">
# python

%%time
svm = LinearSVC()
svm.fit(X_train, y_train)

# CPU times: user 16.7 s, sys: 119 ms, total: 16.8 s
# Wall time: 16.8 s
</pre>
<p>We can now make predictions on the test set (note that the SVM has never seen the labels from the test set that are stored in <code>y_test</code>). The SVM will output whichever <code>user_id</code> it thinks is most likely to be the author of that review, for each review we pass in.</p>
<pre class="brush: plain; title: ; notranslate">
# python

predictions = svm.predict(X_test)
print(list(predictions[0:10]))

[&#039;cMEtAiW60I5wE_vLfTxoJQ&#039;, &#039;EiP1OFgs-XGcKZux0OKWIA&#039;, &#039;V-BbqKqO8anwplGRx9Q5aQ&#039;, &#039;FIk4lQQu1eTe2EpzQ4xhBA&#039;, &#039;J3ucveGKKJDvtuCNnb_x0g&#039;, &#039;FIk4lQQu1eTe2EpzQ4xhBA&#039;, &#039;1kNsEAhGU8d8xugMuXJGFA&#039;, &#039;j6wLUT0ZXi-x0otelYIFpA&#039;, &#039;DK57YibC5ShBmqQl97CKog&#039;, &#039;sYQyXDjGaJj7wfaqz5u8KQ&#039;]
</pre>
<p>If the classifier did a good job, the predictions should be similar to the test labels (<code>y_test</code>). We can look at the first 10 manually to see how this works:</p>
<pre class="brush: plain; title: ; notranslate">
# python
print(y_test[:10])

[&#039;yT_QCcnq-QGipWWuzIpvtw&#039;, &#039;EiP1OFgs-XGcKZux0OKWIA&#039;, &#039;V-BbqKqO8anwplGRx9Q5aQ&#039;, &#039;FIk4lQQu1eTe2EpzQ4xhBA&#039;, &#039;J3ucveGKKJDvtuCNnb_x0g&#039;, &#039;FIk4lQQu1eTe2EpzQ4xhBA&#039;, &#039;1kNsEAhGU8d8xugMuXJGFA&#039;, &#039;j6wLUT0ZXi-x0otelYIFpA&#039;, &#039;DK57YibC5ShBmqQl97CKog&#039;, &#039;sYQyXDjGaJj7wfaqz5u8KQ&#039;]
</pre>
<p>It got all but the first one correct! We can use some more helper functions from scikit-learn to get a summarized view on the results for all 8000 predictions. Accuracy is simply the number of predictions it got right divided by all the predictions:</p>
<pre class="brush: plain; title: ; notranslate">
# python

from sklearn.metrics import accuracy_score
print(accuracy_score(y_test, predictions))
0.86475
</pre>
<p>We have 80 authors in our dataset, so if were were simply guessing the authors we&#8217;d expect to get an accuracy score of 0.0125. Instead, our SVM can correctly predict the author of the review more than 86% of the time.</p>
<h2>Improving our system</h2>
<p>Let&#8217;s see if we can tune some parameters and do even better.</p>
<p>The following vectorizer looks at words individually (unigrams) but also looks at pairs of words (bigrams). This makes our feature space much larger, so we&#8217;ll need a bit more processing time, both to create the vectors, and to train the SVM using the vectors. To alleviate this issue, we&#8217;ll tell the vectorizer to ignore all words and word pairs that don&#8217;t appear in at least five different reviews &#8212; there are a lot of very rarely used words, and we can&#8217;t learn anything from these anyway.</p>
<pre class="brush: plain; title: ; notranslate">
# python

vectorizer = TfidfVectorizer(ngram_range=(1,2), min_df=5)
vectors = vectorizer.fit_transform(texts)
print(vectors.shape)
(40000, 174396)
</pre>
<p>Now we have 174,396 features, about double the number we had before. We can create our train test split again, and run the fitting and prediction code as before.</p>
<pre class="brush: plain; title: ; notranslate">
# python

X_train, X_test, y_train, y_test = train_test_split(vectors, authors, test_size=0.2, random_state=1337)
</pre>
<pre class="brush: plain; title: ; notranslate">
# python

svm = LinearSVC()
svm.fit(X_train, y_train)
predictions = svm.predict(X_test)
print(accuracy_score(y_test, predictions))
0.90525
</pre>
<p>The new vectorization parameters are a bit better, and we can now identify the correct author correctly more than 90% of the time. Considering that some of the reviews are only a few sentences long, it is perhaps surprising that the writing styles are inactive enough.</p>
<h2>Conclusion</h2>
<p>In this post, you learnt how to use Python and scikit-learn for authorship identification. You can now prepare text data and train a simple classifier. You know a bit about the vectorization process, and the choices that have to be made regarding data preparation.</p>
<p>It might seem useless to predict labels that we already have, but we could use this same principle for many practical tasks. For example, it could help find people who have more than one Yelp account for the purposes of promoting their own establishment or leaving bad reviews for competitors. It is also useful in forensic linguistics when the true authorship of someone&#8217;s will or suicide note is often questioned, and it can be used to prove the authorship of disputed literary works, such as Shakespeare&#8217;s plays or books written under pseudonyms.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://michaelckennedy.wordpress.com/2017/06/21/yelp-reviews-authorship-attribution-with-python-and-scikit-learn/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
		
		<media:thumbnail url="https://michaelckennedy.wordpress.com/wp-content/uploads/2017/06/scikit-learn-logo.png" />
		<media:content url="https://michaelckennedy.wordpress.com/wp-content/uploads/2017/06/scikit-learn-logo.png" medium="image">
			<media:title type="html">scikit-learn-logo</media:title>
		</media:content>

		<media:content url="https://0.gravatar.com/avatar/0c39b1af51635a37bd212fc71e854db94323bbdfdeb53bfbc9bc34d26620b8eb?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">michaelckennedy</media:title>
		</media:content>
	</item>
		<item>
		<title>New course: Consuming HTTP services in Python</title>
		<link>https://michaelckennedy.wordpress.com/2017/02/22/new-course-consuming-http-services-in-python/</link>
					<comments>https://michaelckennedy.wordpress.com/2017/02/22/new-course-consuming-http-services-in-python/#respond</comments>
		
		<dc:creator><![CDATA[Michael Kennedy]]></dc:creator>
		<pubDate>Wed, 22 Feb 2017 18:41:03 +0000</pubDate>
				<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Talk Python To Me Podcast]]></category>
		<category><![CDATA[Video]]></category>
		<guid isPermaLink="false">http://blog.michaelckennedy.net/?p=2287</guid>

					<description><![CDATA[I&#8217;m thrilled to announce a new Talk Python course: Consuming HTTP, RESTful, and SOAP Services in Python Visit the course page to join What&#8217;s this course about? This course will show you how easy it is to consume a wide variety of web services using Python. You will be comfortable working with a variety of [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>I&#8217;m thrilled to announce a new Talk Python course:</p>
<h2 style="text-align:center;"><strong><a href="https://training.talkpython.fm/courses/explore_http_reset_client_course/consuming-http-and-soap-services-in-python-with-json-xml-and-screen-scraping" target="_blank">Consuming HTTP, RESTful, and SOAP Services in Python</a></strong></h2>
<div class="jetpack-video-wrapper">
<div class="embed-youtube"><iframe title="Course Introduction: Consuming HTTP and RESTful Services in Python" width="970" height="546" src="https://www.youtube.com/embed/HCIlY7OsFaI?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe></div>
</div>
<p style="text-align:center;"><a href="https://training.talkpython.fm/courses/explore_http_reset_client_course/consuming-http-and-soap-services-in-python-with-json-xml-and-screen-scraping" target="_blank">Visit the course page to join</a></p>
<h2>What&#8217;s this course about?</h2>
<p>This course will show you how easy it is to consume a wide variety of web services using Python. You will be comfortable working with a variety of web and HTTP services. In addition to core package APIs, you will learn the ins-and-outs of HTTP RESTful services and their data types.</p>
<h2>What&#8217;s this course about and how is it different?</h2>
<p>The goal of this online video course is to show you how to integrate with a variety of HTTP-based web services.</p>
<p>As you know, it&#8217;s a services world out there. There are literally 1,000&#8217;s of amazing APIs you can integrate into your applications. Whether it&#8217;s Slack or Twilio to add communication, GitHub, Trello, or BitBucket for development and deployment, or even Stripe for payments, you can dramatically boost your application&#8217;s features and power by adding services.</p>
<p>In addition to learning the APIs to integrate HTTP, REST, XML, SOAP services and web scraping into your application, you will learn the theory and concepts behind.</p>
<p>You&#8217;ll even learn to work with a number of data formats including JSON, XML, HTML, SOAP.</p>
<h2>Who is this course for?</h2>
<p>It&#8217;s for people who have some programming / scripting experience and want to improve their Python knowledge. Maybe you</p>
<ul>
<li>Want to add services to your local apps or your web apps</li>
<li>Are a developer adding integration with existing services</li>
<li>Are a data scientists looking to harvest data from the internet</li>
<li>Are a developer who needs to integrate with legacy SOAP services</li>
<li>Would like to understand the concepts behind HTTP / REST services</li>
</ul>
<p>If any of those descriptions fit you, then you&#8217;re my target student. I wrote this course for you.</p>
<h2>What services will we use?</h2>
<p>We will create a number of demo applications in Python throughout this course. These applications will integrate with a variety of services and work with a number of data formats including:</p>
<ul>
<li><strong>GitHub</strong> (list public repos for a user)<br />
<a href="https://api.github.com/">api.github.com</a></li>
<li><strong>Blog explorer</strong> (three versions: requests, py2, py3)<br />
<a href="http://consumer_services_api.talkpython.fm/">consumer_services_api.talkpython.fm</a></li>
<li><strong>RSS Feed Reader</strong><br />
<a href="https://talkpython.fm/rss">talkpython.fm/rss</a></li>
<li><strong>MP3 / podcast downloader</strong> (binary file examples)<br />
<a href="https://talkpython.fm/">talkpython.fm</a></li>
<li><strong>Course Playground Service</strong><br />
HTTP / REST version: <a href="https://training.talkpython.fm/courses/explore_http_reset_client_course/consuming-http-and-soap-services-in-python-with-json-xml-and-screen-scraping">/api/blog</a><br />
HTTP / REST version (auth): <a href="https://training.talkpython.fm/courses/explore_http_reset_client_course/consuming-http-and-soap-services-in-python-with-json-xml-and-screen-scraping">/api/restricted/blog</a><br />
SOAP version: <a href="https://training.talkpython.fm/courses/explore_http_reset_client_course/consuming-http-and-soap-services-in-python-with-json-xml-and-screen-scraping">/soap?wsdl</a></li>
<li><strong>Scraping and analyzing 80 hours of transcripts on talkpython.fm</strong><br />
E.g. <a href="https://talkpython.fm/episodes/transcript/67/property-based-testing-with-hypothesis">https://talkpython.fm/episodes/transcript/67/property-based-testing-with-hypothesis</a></li>
</ul>
<h2>What data formats will we learn to process?</h2>
<p>In addition to working with <strong>requests</strong>, <strong>urllib*</strong>, <strong>beautifulsoup4</strong>, you will learn how to work with a number of data and file formats in Python including.</p>
<div><strong>JSON</strong></div>
<ul>
<li>via the HTTP APIs</li>
<li>via the file system</li>
</ul>
<div><strong>XML</strong></p>
<ul>
<li>custom formats via the file system</li>
<li>via RSS</li>
<li>via sitemaps</li>
<li>SOAP services descriptions and messages</li>
</ul>
</div>
<div><strong>HTML</strong></p>
<ul>
<li>via basic GET requests</li>
<li>parsing deeply to convert web pages to &#8220;APIs&#8221;</li>
</ul>
<div class="extras">
<h2>Free office hours keep you from getting stuck</h2>
<p>One of the challenges of self-paced online learning is if you get stuck it can be hard to get help to get you unstuck.</p>
<p>That&#8217;s why at Talk Python Training, we offer live, online office hours. You drop in and join a group of fellow students to chat about your course progress and see solutions via screen sharing.</p>
<p>Just visit <a href="https://training.talkpython.fm/account">your account page</a> to see the upcoming office hour schedule.</p>
</div>
<div id="course_outline" class="extras">
<h2>The time to act is now</h2>
<p>Begin taking advantage of the thousands of amazing services you can use in your app today.</p>
<p style="text-align:center;"><strong><a href="https://training.talkpython.fm/courses/explore_http_reset_client_course/consuming-http-and-soap-services-in-python-with-json-xml-and-screen-scraping" target="_blank">Take the course today</a></strong></p>
<p>&nbsp;</p>
</div>
</div>
]]></content:encoded>
					
					<wfw:commentRss>https://michaelckennedy.wordpress.com/2017/02/22/new-course-consuming-http-services-in-python/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		
		<media:thumbnail url="https://michaelckennedy.wordpress.com/wp-content/uploads/2017/02/python-rest-services.png" />
		<media:content url="https://michaelckennedy.wordpress.com/wp-content/uploads/2017/02/python-rest-services.png" medium="image">
			<media:title type="html">python-rest-services</media:title>
		</media:content>

		<media:content url="https://0.gravatar.com/avatar/0c39b1af51635a37bd212fc71e854db94323bbdfdeb53bfbc9bc34d26620b8eb?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">michaelckennedy</media:title>
		</media:content>
	</item>
		<item>
		<title>Write Pythonic Code for Better Data Science (recording available)</title>
		<link>https://michaelckennedy.wordpress.com/2016/11/30/write-pythonic-code-for-better-data-science-recording-available/</link>
					<comments>https://michaelckennedy.wordpress.com/2016/11/30/write-pythonic-code-for-better-data-science-recording-available/#comments</comments>
		
		<dc:creator><![CDATA[Michael Kennedy]]></dc:creator>
		<pubDate>Wed, 30 Nov 2016 14:19:12 +0000</pubDate>
				<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Video]]></category>
		<guid isPermaLink="false">http://blog.michaelckennedy.net/?p=2258</guid>

					<description><![CDATA[&#160; I recently did a live webcast in conjunction with dataschool.io called Write Pythonic Code for Better Data Science. You might be thinking, &#8220;Live webcast, well that&#8217;s a little late, isn&#8217;t it?&#8221; Well, no, because the recording is available now. :) If you missed it and want to watch the approximately 1 hour presentation with [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>&nbsp;</p>
<p>I recently did a live webcast in conjunction with <strong><a href="http://dataschool.io" target="_blank">dataschool.io</a></strong> called <strong><a href="https://www.crowdcast.io/e/pythonic" target="_blank">Write Pythonic Code for Better Data Science</a></strong>. You might be thinking, &#8220;Live webcast, well that&#8217;s a little late, isn&#8217;t it?&#8221; Well, no, because the recording is available now. :)</p>
<p>If you missed it and want to watch the approximately 1 hour presentation with a short introduction and extensive Q&amp;A afterwards, just visit the crowdcast page to watch the replay:</p>
<p><a href="https://www.crowdcast.io/e/pythonic" target="_blank"><img loading="lazy" data-attachment-id="2269" data-permalink="https://michaelckennedy.wordpress.com/2016/11/30/write-pythonic-code-for-better-data-science-recording-available/play-write-pythonic-code-for-better-data-science/" data-orig-file="https://michaelckennedy.wordpress.com/wp-content/uploads/2016/11/play-write-pythonic-code-for-better-data-science.png" data-orig-size="1095,615" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="play-write-pythonic-code-for-better-data-science" data-image-description="" data-image-caption="" data-medium-file="https://michaelckennedy.wordpress.com/wp-content/uploads/2016/11/play-write-pythonic-code-for-better-data-science.png?w=300" data-large-file="https://michaelckennedy.wordpress.com/wp-content/uploads/2016/11/play-write-pythonic-code-for-better-data-science.png?w=970" class="alignnone size-full wp-image-2269" src="https://michaelckennedy.wordpress.com/wp-content/uploads/2016/11/play-write-pythonic-code-for-better-data-science.png" alt="play-write-pythonic-code-for-better-data-science" width="1095" height="615" srcset="https://michaelckennedy.wordpress.com/wp-content/uploads/2016/11/play-write-pythonic-code-for-better-data-science.png 1095w, https://michaelckennedy.wordpress.com/wp-content/uploads/2016/11/play-write-pythonic-code-for-better-data-science.png?w=150&amp;h=84 150w, https://michaelckennedy.wordpress.com/wp-content/uploads/2016/11/play-write-pythonic-code-for-better-data-science.png?w=300&amp;h=168 300w, https://michaelckennedy.wordpress.com/wp-content/uploads/2016/11/play-write-pythonic-code-for-better-data-science.png?w=768&amp;h=431 768w, https://michaelckennedy.wordpress.com/wp-content/uploads/2016/11/play-write-pythonic-code-for-better-data-science.png?w=1024&amp;h=575 1024w" sizes="(max-width: 1095px) 100vw, 1095px" /></a></p>
<p>If you want to see the code written during the webcast, it&#8217;s available on GitHub here:</p>
<p><a href="https://github.com/mikeckennedy/write-pythonic-code-for-better-data-science-webcast" target="_blank">github.com/mikeckennedy/write-pythonic-code-for-better-data-science-webcast</a></p>
<p>If you want to go deeper than a single webcast, I wrote a whole course on this topic called <a href="https://training.talkpython.fm/courses/explore_pythonic_code/write-pythonic-code-like-a-seasoned-developer" target="_blank">Write Pythonic Code Like a Seasoned Developer</a>. Please check it out if it sounds interesting.</p>
<p><a href="https://training.talkpython.fm/courses/explore_pythonic_code/write-pythonic-code-like-a-seasoned-developer" target="_blank"><img loading="lazy" data-attachment-id="2008" data-permalink="https://michaelckennedy.wordpress.com/blog-pythonic-code-course/" data-orig-file="https://michaelckennedy.wordpress.com/wp-content/uploads/2016/06/blog-pythonic-code-course.png" data-orig-size="1024,768" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="blog-pythonic-code-course" data-image-description="" data-image-caption="" data-medium-file="https://michaelckennedy.wordpress.com/wp-content/uploads/2016/06/blog-pythonic-code-course.png?w=300" data-large-file="https://michaelckennedy.wordpress.com/wp-content/uploads/2016/06/blog-pythonic-code-course.png?w=970" class="alignnone size-full wp-image-2008" src="https://michaelckennedy.wordpress.com/wp-content/uploads/2016/06/blog-pythonic-code-course.png" alt="blog-pythonic-code-course" width="1024" height="768" srcset="https://michaelckennedy.wordpress.com/wp-content/uploads/2016/06/blog-pythonic-code-course.png 1024w, https://michaelckennedy.wordpress.com/wp-content/uploads/2016/06/blog-pythonic-code-course.png?w=150&amp;h=113 150w, https://michaelckennedy.wordpress.com/wp-content/uploads/2016/06/blog-pythonic-code-course.png?w=300&amp;h=225 300w, https://michaelckennedy.wordpress.com/wp-content/uploads/2016/06/blog-pythonic-code-course.png?w=768&amp;h=576 768w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></p>
<p>Here&#8217;s the quick background info on the webcast as well:</p>
<p>As an aspiring data scientist, you&#8217;ve probably heard that you need to learn how to use pandas, scikit-learn, and other Python libraries. But did you know that you can also improve your data science skills by getting better at the Python language itself?</p>
<p>During this 1-hour webcast, special guest Michael Kennedy will teach you how to write Pythonic code, which is code that takes advantage of the best features of the Python language. Not only will this help you to write more efficient and readable code, it will also enable you to pick up other Python libraries more quickly!</p>
<p>At the end of Michael&#8217;s lesson, there will be plenty of time to answer your Python questions. All levels of Python users are welcome!</p>
<p>&nbsp;</p>
]]></content:encoded>
					
					<wfw:commentRss>https://michaelckennedy.wordpress.com/2016/11/30/write-pythonic-code-for-better-data-science-recording-available/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
		
		<media:thumbnail url="https://michaelckennedy.wordpress.com/wp-content/uploads/2016/11/play-write-pythonic-code-for-better-data-science.png" />
		<media:content url="https://michaelckennedy.wordpress.com/wp-content/uploads/2016/11/play-write-pythonic-code-for-better-data-science.png" medium="image">
			<media:title type="html">play-write-pythonic-code-for-better-data-science</media:title>
		</media:content>

		<media:content url="https://0.gravatar.com/avatar/0c39b1af51635a37bd212fc71e854db94323bbdfdeb53bfbc9bc34d26620b8eb?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">michaelckennedy</media:title>
		</media:content>

		<media:content url="https://michaelckennedy.wordpress.com/wp-content/uploads/2016/06/blog-pythonic-code-course.png" medium="image">
			<media:title type="html">blog-pythonic-code-course</media:title>
		</media:content>
	</item>
		<item>
		<title>Announcing Python Bytes Podcast: Python headlines delivered to your earbuds</title>
		<link>https://michaelckennedy.wordpress.com/2016/11/08/announcing-python-bytes-podcast-python-headlines-delivered-to-your-earbuds/</link>
					<comments>https://michaelckennedy.wordpress.com/2016/11/08/announcing-python-bytes-podcast-python-headlines-delivered-to-your-earbuds/#respond</comments>
		
		<dc:creator><![CDATA[Michael Kennedy]]></dc:creator>
		<pubDate>Wed, 09 Nov 2016 00:52:22 +0000</pubDate>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Podcast]]></category>
		<guid isPermaLink="false">http://blog.michaelckennedy.net/?p=2246</guid>

					<description><![CDATA[I&#8217;m very excited to let you know that I have joined forces with Brian Okken to launch a second podcast called Python Bytes. The idea is we&#8217;ll deliver Python headlines directly to your earbuds over the podcast channels! Have a listen: I hope you love the idea. You can subscribe via iTunes, Google Play, Overcast, [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>I&#8217;m very excited to let you know that I have joined forces with Brian Okken to launch a second podcast called <a href="https://pythonbytes.fm/" target="_blank">Python Bytes</a>. The idea is we&#8217;ll deliver Python headlines directly to your earbuds over the podcast channels!</p>
<p>Have a listen:</p>
<p><iframe width="100%" height="166" scrolling="no" frameborder="no" src="https://w.soundcloud.com/player/?url=https%3A%2F%2Fapi.soundcloud.com%2Ftracks%2F292168785&auto_play=false&hide_related=false&visual=false&show_comments=true&show_user=true&show_reposts=false&color=ff5500"></iframe></p>
<p>I hope you love the idea. You can subscribe via <a href="https://itunes.apple.com/us/podcast/python-bytes/id1173690032" target="_blank">iTunes</a>, <a href="https://goo.gl/app/playmusic?ibi=com.google.PlayMusic&amp;isi=691797987&amp;ius=googleplaymusic&amp;link=https://play.google.com/music/m/I7itwz2ltrsxf5bfbalkkmz6voy?t%3DPython_Bytes">Google Play</a>, <a href="https://overcast.fm/itunes1173690032/python-bytes" target="_blank">Overcast</a>, and more (just search).</p>
<p>Cheers,<br />
<a href="https://twitter.com/mkennedy" target="_blank">@mkennedy</a></p>
<p>&nbsp;</p>
]]></content:encoded>
					
					<wfw:commentRss>https://michaelckennedy.wordpress.com/2016/11/08/announcing-python-bytes-podcast-python-headlines-delivered-to-your-earbuds/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		
		<media:thumbnail url="https://michaelckennedy.wordpress.com/wp-content/uploads/2016/11/logo-noir-python-gagnant.jpg" />
		<media:content url="https://michaelckennedy.wordpress.com/wp-content/uploads/2016/11/logo-noir-python-gagnant.jpg" medium="image">
			<media:title type="html">logo-noir-python-gagnant</media:title>
		</media:content>

		<media:content url="https://0.gravatar.com/avatar/0c39b1af51635a37bd212fc71e854db94323bbdfdeb53bfbc9bc34d26620b8eb?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">michaelckennedy</media:title>
		</media:content>
	</item>
		<item>
		<title>Pre-order Python for Entrepreneurs course</title>
		<link>https://michaelckennedy.wordpress.com/2016/10/11/pre-order-python-for-entrepreneurs-course/</link>
					<comments>https://michaelckennedy.wordpress.com/2016/10/11/pre-order-python-for-entrepreneurs-course/#respond</comments>
		
		<dc:creator><![CDATA[Michael Kennedy]]></dc:creator>
		<pubDate>Tue, 11 Oct 2016 14:47:34 +0000</pubDate>
				<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Talk Python To Me Podcast]]></category>
		<category><![CDATA[business]]></category>
		<category><![CDATA[Online courses]]></category>
		<guid isPermaLink="false">http://blog.michaelckennedy.net/?p=2204</guid>

					<description><![CDATA[Good news! My popular course Python for Entrepreneurs is now available for pre-order with immediate access to the first 4 hours of content and more coming every week! You&#8217;ll even save $30 off the final price if you get it in the next couple of weeks. Interested? Visit the course page for a full, dynamic outline, more [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Good news! My popular course <a href="https://training.talkpython.fm/courses/explore_entrepreneurs/python-for-entrepreneurs-build-and-launch-your-online-business" target="_blank">Python for Entrepreneurs</a> is now <a href="https://training.talkpython.fm/courses/explore_entrepreneurs/python-for-entrepreneurs-build-and-launch-your-online-business" target="_blank">available for pre-order</a> with immediate access to the first 4 hours of content and more coming every week! You&#8217;ll even save $30 off the final price if you get it in the next couple of weeks.</p>
<p>Interested? Visit the course page for a full, dynamic outline, more info, and to pre-order for just $59 with lifetime access:</p>
<p style="text-align:center;"><strong><a href="https://talkpython.fm/launch" target="_blank">https://talkpython.fm/launch</a></strong></p>
<h2>Introductory video</h2>
<div class="jetpack-video-wrapper">
<div class="embed-vimeo"><iframe src="https://player.vimeo.com/video/184268049" width="970" height="606" frameborder="0" title="Python for Entrepreneurs Course Intro" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe></div>
</div>
<div class="description">
<h2>Course Summary</h2>
<div>A course for technical entrepreneurs by Michael Kennedy of <em>Talk Python</em> and Matt Makai of <em>Full Stack Python</em>.</div>
<div></div>
<div>Have you ever wanted to create a startup or small web-based business? Do you know a little of the Python language? Great, that&#8217;s a huge first step. But there are many elements to launching a successful online business and this course will fill in the gaps and help you realize your dreams.</div>
</div>
<div class="github">
<h2>What&#8217;s this course about and how is it different?</h2>
<p>Many courses will teach you about the technology involved in building a web application. Fewer courses will teach you what it actually takes to launch that product as an operating online business.<strong>Python for Entrepreneurs is here to teach you both how to build your website and everything needed to make it a functioning online business.</strong></p>
<p><em>The overriding goal of this course is to dramatically shorten your time from idea to minimum viable product (MVP) to running in production and accepting online payments from months to weeks or even a couple weeks in some cases.</em></p>
<p>When building an online product or web app, it&#8217;s easy to focus deeply on the product, the market fit, design, and these types of things. When you finally have it finished enough to launch your first version, <strong>you&#8217;ll find yourself hit with a wave of many unfamiliar technical tasks before you can actually go live</strong>:</p>
<ul>
<li>Accepting credit cards in a compliant manner</li>
<li>Storing user accounts in a &#8216;hacker-safe&#8217; format to keep your product out of the headlines</li>
<li>Sending outbound email (e.g. as a user makes a purchase or resets their password)</li>
<li>Collecting users&#8217; email for outbound email marketing (mailing lists)</li>
<li>Domain registration and configuration</li>
<li>SSL certificates and configuration</li>
<li>Error logging and monitoring in production</li>
<li>Deploying to cloud servers</li>
<li>Configuring your cloud servers for scale</li>
<li>Testing your website performance and making it faster</li>
<li>Getting help via part time contractors so you can focus on product and growth</li>
<li>And so much more</li>
</ul>
<p>You will learn all of these in this course: How to build a data-driven web app and launch it successfully.</p>
<p>Once you launch, <strong>you&#8217;ll need to turn your focus to areas that, as a technical person, you probably have little experience with</strong>. So we will also cover</p>
<ul>
<li>Design</li>
<li>Capturing and engaging users</li>
<li>SEO basics</li>
<li>Growth hacking basics</li>
<li>Showcasing your products</li>
</ul>
<h2>Who is this course for?</h2>
<p>The <strong>ideal student for this course is someone who knows a little (or a lot) of programming and wants to launch an online business</strong> based around a non-trivial product.</p>
<p>For example, if you have always spent your time in middle-tier programming at a big company and you want to break out of that mold to launch a competitor to AirBnB, then you found the right place to start. That would be a huge challenge, of course, but it gives you the idea of who we have in mind.</p>
<p>If you <strong>don&#8217;t know Python</strong>, consider taking my <a href="https://training.talkpython.fm/courses/explore_python_jumpstart/python-language-jumpstart-building-10-apps">Python Jumpstart by Building 10 Apps</a> course first.</p>
<p><strong>If you don&#8217;t know any programming at all, you&#8217;ll want to take a primer first</strong>. We recommend you take the free MIT course <a href="https://www.edx.org/course/introduction-computer-science-mitx-6-00-1x-8">Introduction to Computer Science and Programming Using Python</a>. Once you&#8217;ve learned the core computer science ideas you&#8217;ll be ready to dive deeper into Python with my two courses (jumpstart course and entrepreneurs course).</p>
<p>Keep in mind, this journey you are starting is not necessarily (or even recommended to be) a leap before you look experience. You don&#8217;t have to quit your job, build an MVP, and see if the market or VC community wants it. Even if you just want to build something small as a side business first, this course would be perfect for you.</p>
<h2>Get the full story</h2>
<p>Visit the course page for a full, dynamic outline, more info, and to pre-order:</p>
<p><a href="https://training.talkpython.fm/courses/explore_entrepreneurs/python-for-entrepreneurs-build-and-launch-your-online-business" target="_blank">https://training.talkpython.fm/courses/explore_entrepreneurs/python-for-entrepreneurs-build-and-launch-your-online-business</a></p>
</div>
]]></content:encoded>
					
					<wfw:commentRss>https://michaelckennedy.wordpress.com/2016/10/11/pre-order-python-for-entrepreneurs-course/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		
		<media:thumbnail url="https://michaelckennedy.wordpress.com/wp-content/uploads/2016/10/screen-shot-2016-10-10-at-9-46-35-pm.png" />
		<media:content url="https://michaelckennedy.wordpress.com/wp-content/uploads/2016/10/screen-shot-2016-10-10-at-9-46-35-pm.png" medium="image">
			<media:title type="html">screen-shot-2016-10-10-at-9-46-35-pm</media:title>
		</media:content>

		<media:content url="https://0.gravatar.com/avatar/0c39b1af51635a37bd212fc71e854db94323bbdfdeb53bfbc9bc34d26620b8eb?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">michaelckennedy</media:title>
		</media:content>
	</item>
		<item>
		<title>Pythonic code by example in 5 videos (video series)</title>
		<link>https://michaelckennedy.wordpress.com/2016/10/10/pythonic-code-by-example-in-5-videos-video-series/</link>
					<comments>https://michaelckennedy.wordpress.com/2016/10/10/pythonic-code-by-example-in-5-videos-video-series/#comments</comments>
		
		<dc:creator><![CDATA[Michael Kennedy]]></dc:creator>
		<pubDate>Tue, 11 Oct 2016 05:01:17 +0000</pubDate>
				<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Design Patterns]]></category>
		<category><![CDATA[Video]]></category>
		<guid isPermaLink="false">http://blog.michaelckennedy.net/?p=2226</guid>

					<description><![CDATA[I recently partnered with the folks over at Data Dependence to put together a video series called: [Video Series] Taking Your Python Skills to the Next Level With Pythonic Code Check out the original post for the full story. Here are the five videos and related posts if you want to dive in and watch [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>I recently partnered with the folks over at <a href="http://www.datadependence.com/2016/07/pythonic-code-video-series-intro/" target="_blank">Data Dependence</a> to put together a video series called:</p>
<p><a href="http://www.datadependence.com/2016/07/pythonic-code-video-series-intro/" target="_blank">[Video Series] Taking Your Python Skills to the Next Level With Pythonic Code</a></p>
<p>Check out the <a href="http://www.datadependence.com/2016/07/pythonic-code-video-series-intro/" target="_blank">original post for the full story</a>. Here are the five videos and related posts if you want to dive in and watch them.</p>
<p><a href="http://www.datadependence.com/2016/07/pythonic-code-video-series-list-alternatives" target="_blank">#1 Stop Using Lists for Everything</a></p>
<div class="jetpack-video-wrapper">
<div class="embed-youtube"><iframe title="Pythonic code: Tip #1 Stop using lists for everything" width="970" height="728" src="https://www.youtube.com/embed/QzEbSqCR658?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe></div>
</div>
<p><a href="http://www.datadependence.com/2016/07/pythonic-code-video-series-slots/" target="_blank">#2 Hacking Python’s Memory With __slots__</a></p>
<div class="jetpack-video-wrapper">
<div class="embed-youtube"><iframe title="Pythonic code: Tip #2 Hacking Python&#039;s memory with __slots__" width="970" height="728" src="https://www.youtube.com/embed/FUJf-eEF1GY?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe></div>
</div>
<p><a href="http://www.datadependence.com/2016/08/pythonic-code-video-series-merging-dictionaries/" target="_blank">#3 Merging Dictionaries</a></p>
<div class="jetpack-video-wrapper">
<div class="embed-youtube"><iframe title="Pythonic code: Tip #3 Merging dictionaries cleanly in Python" width="970" height="728" src="https://www.youtube.com/embed/ZMkUoHj5GU0?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe></div>
</div>
<p><a href="http://www.datadependence.com/2016/08/pythonic-code-video-series-yield-generators/" target="_blank">#4 Processing Large Data Sets With Yield and Generators</a></p>
<div class="jetpack-video-wrapper">
<div class="embed-youtube"><iframe title="Pythonic code: Tip 4 Processing large data sets with yield and generators" width="970" height="728" src="https://www.youtube.com/embed/KoH6FgVjnmg?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe></div>
</div>
<p><a href="http://www.datadependence.com/2016/08/pythonic-code-video-series-lambda-expressions/" target="_blank">#5 Lambda Expressions</a></p>
<div class="jetpack-video-wrapper">
<div class="embed-youtube"><iframe title="Pythonic code: Tip 5 Lambda expressions" width="970" height="728" src="https://www.youtube.com/embed/SwEWaNNzw-I?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe></div>
</div>
<p>Hope you enjoy the lessons!</p>
<p>If you find them useful, consider taking my full <a href="https://training.talkpython.fm/courses/explore_pythonic_code/write-pythonic-code-like-a-seasoned-developer" target="_blank">Write Pythonic Code Like a Seasoned Developer course</a>. It covers 52 Pythonic code tips (including the 5 above) in over 4 hours of content.</p>
<p><a href="https://twitter.com/mkennedy" target="_blank">@mkennedy</a></p>
]]></content:encoded>
					
					<wfw:commentRss>https://michaelckennedy.wordpress.com/2016/10/10/pythonic-code-by-example-in-5-videos-video-series/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
		
		<media:thumbnail url="https://michaelckennedy.wordpress.com/wp-content/uploads/2016/10/pythonic-header-mem.png" />
		<media:content url="https://michaelckennedy.wordpress.com/wp-content/uploads/2016/10/pythonic-header-mem.png" medium="image">
			<media:title type="html">pythonic-header-mem</media:title>
		</media:content>

		<media:content url="https://0.gravatar.com/avatar/0c39b1af51635a37bd212fc71e854db94323bbdfdeb53bfbc9bc34d26620b8eb?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">michaelckennedy</media:title>
		</media:content>
	</item>
		<item>
		<title>Python for Entrepreneurs Kickstarter Launches Today</title>
		<link>https://michaelckennedy.wordpress.com/2016/07/26/python-for-entrepreneurs-kickstarter-launches-today/</link>
					<comments>https://michaelckennedy.wordpress.com/2016/07/26/python-for-entrepreneurs-kickstarter-launches-today/#comments</comments>
		
		<dc:creator><![CDATA[Michael Kennedy]]></dc:creator>
		<pubDate>Tue, 26 Jul 2016 16:16:28 +0000</pubDate>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[Talk Python To Me Podcast]]></category>
		<category><![CDATA[Video]]></category>
		<category><![CDATA[Kickstarter]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Podcast]]></category>
		<guid isPermaLink="false">http://blog.michaelckennedy.net/?p=2173</guid>

					<description><![CDATA[I&#8217;m thrilled to announce that today, in partnership with Matt Makai of Full Stack Python, I have launched a kickstarter to fund the creation of my most anticipated course: Python for Entrepreneurs If you have been dreaming of launching your own web based business, this course is custom made for you. Check out the kickstarter [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>I&#8217;m thrilled to announce that today, in partnership with <strong>Matt Makai</strong> of <strong>Full Stack Python</strong>, I have launched a <a href="https://talkpython.fm/launch">kickstarter</a> to fund the creation of my most anticipated course:</p>
<h2 style="text-align:center;"><a href="https://talkpython.fm/launch">Python for Entrepreneurs</a><br />
<a href="https://talkpython.fm/launch"><img loading="lazy" data-attachment-id="2180" data-permalink="https://michaelckennedy.wordpress.com/2016/07/26/python-for-entrepreneurs-kickstarter-launches-today/python-for-entrepreneurs/" data-orig-file="https://michaelckennedy.wordpress.com/wp-content/uploads/2016/07/python-for-entrepreneurs.png" data-orig-size="1024,768" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="python-for-entrepreneurs" data-image-description="" data-image-caption="" data-medium-file="https://michaelckennedy.wordpress.com/wp-content/uploads/2016/07/python-for-entrepreneurs.png?w=300" data-large-file="https://michaelckennedy.wordpress.com/wp-content/uploads/2016/07/python-for-entrepreneurs.png?w=970" class="alignnone size-medium wp-image-2180 aligncenter" src="https://michaelckennedy.wordpress.com/wp-content/uploads/2016/07/python-for-entrepreneurs.png?w=600" alt="python-for-entrepreneurs" width="300" height="225" srcset="https://michaelckennedy.wordpress.com/wp-content/uploads/2016/07/python-for-entrepreneurs.png?w=600 600w, https://michaelckennedy.wordpress.com/wp-content/uploads/2016/07/python-for-entrepreneurs.png?w=300 300w, https://michaelckennedy.wordpress.com/wp-content/uploads/2016/07/python-for-entrepreneurs.png?w=150 150w" sizes="(max-width: 300px) 100vw, 300px" /></a></h2>
<p>If you have been dreaming of launching your own web based business, this course is custom made for you. Check out the <a href="https://talkpython.fm/launch">kickstarter page</a> and be sure to back the project before the end of the campaign.</p>
<p>Thanks,<br />
<a href="https://twitter.com/mkennedy" target="_blank">@mkennedy</a></p>
<p>&nbsp;</p>
]]></content:encoded>
					
					<wfw:commentRss>https://michaelckennedy.wordpress.com/2016/07/26/python-for-entrepreneurs-kickstarter-launches-today/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
		
		<media:thumbnail url="https://michaelckennedy.wordpress.com/wp-content/uploads/2016/07/python-for-entrepreneurs.png" />
		<media:content url="https://michaelckennedy.wordpress.com/wp-content/uploads/2016/07/python-for-entrepreneurs.png" medium="image">
			<media:title type="html">python-for-entrepreneurs</media:title>
		</media:content>

		<media:content url="https://0.gravatar.com/avatar/0c39b1af51635a37bd212fc71e854db94323bbdfdeb53bfbc9bc34d26620b8eb?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">michaelckennedy</media:title>
		</media:content>

		<media:content url="https://michaelckennedy.wordpress.com/wp-content/uploads/2016/07/python-for-entrepreneurs.png?w=600" medium="image">
			<media:title type="html">python-for-entrepreneurs</media:title>
		</media:content>
	</item>
		<item>
		<title>Stitcher and Talk Python Podcast: A Farewell Letter</title>
		<link>https://michaelckennedy.wordpress.com/2016/07/05/stitcher-and-talk-python-to-me-podcast-a-farewell-letter/</link>
					<comments>https://michaelckennedy.wordpress.com/2016/07/05/stitcher-and-talk-python-to-me-podcast-a-farewell-letter/#comments</comments>
		
		<dc:creator><![CDATA[Michael Kennedy]]></dc:creator>
		<pubDate>Tue, 05 Jul 2016 11:41:06 +0000</pubDate>
				<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Talk Python To Me Podcast]]></category>
		<category><![CDATA[business]]></category>
		<category><![CDATA[Podcast]]></category>
		<guid isPermaLink="false">http://blog.michaelckennedy.net/?p=2037</guid>

					<description><![CDATA[I have decided to remove my Talk Python To Me podcast from Stitcher. This has probably caused some grief to a number of my listeners and to you all I apologize about that. This post explains why I did this. If you run a podcast yourself, you might want to read this carefully too. Why [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>I have decided to remove my <a href="https://talkpython.fm/" target="_blank">Talk Python To Me podcast</a> from <a href="https://www.stitcher.com/" target="_blank">Stitcher</a>. This has probably caused some grief to a number of my listeners and to you all I apologize about that. This post explains why I did this.</p>
<p>If you run a podcast yourself, you might want to read this carefully too.</p>
<h2>Why did I do this?</h2>
<p>Why would I not want more listeners of my podcast? Do I already have too many? No, please subscribe if you haven&#8217;t &#8211; see below ;).</p>
<p><strong>I have always been a little suspicious of Stitcher&#8217;s business model.</strong> After a number of listeners requested I add Talk Python there, I figured I&#8217;d do it because, hey, I really do love you guys and gals.</p>
<p>But, agreeing to have your show listed on Stitcher is a bit of a deal with the devil. You agree to:</p>
<ol>
<li><strong>Crappy audio</strong>: They can take your RSS feed and episode MP3s, copy them to their server and re-encode them with a super crappy bit-rate. I spend a lot of money and effort producing and distributing HQ audio and don&#8217;t appreciate this.</li>
<li><strong>They sell your work, they keep the money</strong>: Stitcher takes your creative work and slices it apart, and sell <strong>their audio ads</strong> in your track without paying you at all (or if you partner with them extremely low revenue). Nevermind I spend almost 15 hours a week creating and producing the show.</li>
<li><strong>Sell it in other ways, keep the money</strong>: Similarly, they sell banner ads around your content in their player. They keep all of this money too.</li>
<li><strong>Stitcher is bad for podcasting</strong>: If they are wildly successful, they will undermine independent podcasting in general. Successful podcasts like Talk Python To Me currently work directly with sponsors, negotiate a fair rate based on product / audience fit and reach. If we are all in stitcher with their ads replacing ours, and them sending a few % back to us, podcasting will look very different (and not in a good way).</li>
</ol>
<h2>But don&#8217;t take my word for it</h2>
<p>It&#8217;s not just me being paranoid or greedy. Here&#8217;s what John Gruber from Daring Fireball has to say about the situation.</p>
<blockquote><p>Midroll owning Stitcher is not good for the podcast ecosystem. Stitcher is popular, but my show is not on Stitcher because Stitcher re-hosts the audio, compresses it to hell, and unless you opt out, inserts their own ads. <strong>That’s not how podcasting is supposed to work</strong>. I firmly believe podcasting should be open, like the web.<br />
<em>John Gruber</em> &#8211; <a href="https://daringfireball.net/linked/2016/06/06/midroll-stitcher" target="_blank">https://daringfireball.net/linked/2016/06/06/midroll-stitcher</a></p></blockquote>
<p>Here are a few commenters on articles / posts about the subject:</p>
<blockquote><p>I&#8217;ve been using stitcher for years.<strong> I had no idea how they worked.</strong> I&#8217;ve found this blog as well as some others highlighting this issue. I&#8217;ve deleted stitcher and now I&#8217;ve found an app that I can paste the rss feed into that gives me the same ability to stream or download. May not be compressed, but <strong>I want the people who worked hard to deliver me free content to make the most of their own shows</strong>. Furthermore, for people taking others ad revenue, they don&#8217;t even put it into making a good app. Stitcher had been getting buggier by the version. So people on top take it all and don&#8217;t even pay good money to decent developers. Stitcher is a capitalism-based-parasite in my opinion.<br />
<em>Kennadian</em> &#8211; <a href="http://nerdist.com/the-stitcher-situation/" target="_blank">Nerdist: The Stitcher Situation</a></p></blockquote>
<p>And from an older article:</p>
<blockquote><p>I have an iPhone and I use the default app. I downloaded Overcast and it is amazing but only does audio.<strong> Stitcher’s business practices are a little suspect amongst the industry.</strong><br />
<em>@ericelawrence</em> &#8211; <a href="http://www.theverge.com/2014/10/24/7059337/stitcher-talk-radio-app-bought-by-deezer" target="_blank">Deezer buys podcast app Stitcher</a></p></blockquote>
<p>Ben Thompson, from the amazing Exponent podcast wrote a great article called &#8220;<a href="https://stratechery.com/2016/the-future-of-podcasting/" target="_blank">The Future of Podcasting</a>&#8221; and did an episode with his co-host James on it called &#8220;<a href="http://exponent.fm/episode-082-a-podcast-about-podcasts/" target="_blank">A podcast about podcasts</a>&#8220;.</p>
<p>In the article Ben writes:</p>
<blockquote><p>Stitcher is thought to be the 2nd most popular podcast player, although it has long been controversial in some circles for its default practice of hosting podcasts itself (instead of directing users to download them directly from a podcaster’s server) and inserting ads. That model, though, was likely attractive to Scripps/Midroll: controlling the files and the player means the possibility of making meaningful measurements of play data plus dynamic ad insertion at scale.<br />
<em>Ben Thompson</em></p></blockquote>
<p>Finally, Marco Arment, who created Instapaper, hosts the Accidental Tech podcast, and created the Overcast player mentioned above wrote:</p>
<blockquote><p>Podcasts are hot right now. Big Money is coming. Big Money isn’t going to sell nicely designed, hand-crafted, RSS-backed podcast players for $2.99 or ask you to pay what you want to support them, because that doesn’t make Big Money. They’re coming with shitty apps and fantastic business deals to dominate the market, <strong>lockdown this open medium into proprietary “technology”, and build empires of middlemen to control distribution and take a cut of everyone’s revenue…</strong> I don’t know if Overcast stands a chance of preventing the Facebookization of podcasting, but I know I’m increasing the odds if my app is free without restrictions. As long as I can make money some other way, I’m fine.<br />
<em>Marco Arment</em> &#8211; <a href="https://marco.org/2016/05/07/apple-role-in-podcasting" target="_blank">Apple’s actual role in podcasting: be careful what you wish for</a></p></blockquote>
<h2>Why now?</h2>
<p>There are two events coming together to make me take the entirely manual step to hunt Google intensely to discover the email address to personally write and request removal of my podcast from Stitcher (this is not at all offered to publishers willingly from Stitcher). Oh, and I can save you the work. Email them and request your show to be removed via <a href="mailto:partners@stitcher.com" target="_blank">partners@stitcher.com</a> if that&#8217;s your choice. Lock-in via obscurity is a poor long term business model.</p>
<p><strong>Event 1</strong>: In February 2016, I struck out on my own to start <a href="https://training.talkpython.fm/" target="_blank">Talk Python Training</a> and focus on the <a href="https://talkpython.fm/" target="_blank">Talk Python To Me podcast</a>. <strong>These are my two income sources</strong>. The online courses and podcast revenue (from sponsors, the podcast is free for listeners) are how I pay my mortgage, my twin daughters upcoming college tuition and housing fees, and everything else in life that costs money when you have a family.</p>
<p>You can read the <a href="https://michaelckennedy.wordpress.com/2016/02/16/im-building-20-online-python-courses-and-i-need-your-help-video-course-library-announced/" target="_blank">whole story here</a>. You can bet this means I care more about a sustainable business model for my show and for everyone&#8217;s shows than if this was just a hobby.</p>
<p><strong>Event 2</strong>: Midroll (the largest podcast ad network) bought Stitcher for $4.5M USD. They intend to double down on the dubious business model I mentioned in the opening 4 points. You can read about this at the Wall Street Journal: <a href="http://www.wsj.com/articles/e-w-scripps-buys-podcast-company-stitcher-1465239600" target="_blank">E.W. Scripps Buys Podcast Company Stitcher</a></p>
<h2>Where can you listen to Talk Python To Me now?</h2>
<p>Talk Python To Me has been available in many places and will continue to be. I even offer an OGG-Theora version for pure open source players. Please pick your favorite podcast client (mine is Overcast on iOS but there are many on all platforms including native ones on iOS and Android).</p>
<ol>
<li>Via <a href="https://itunes.apple.com/us/podcast/talk-python-to-me-python-conversations/id979020229" target="_blank">iTunes directory</a></li>
<li>Via <a href="https://goo.gl/app/playmusic?ibi=com.google.PlayMusic&amp;isi=691797987&amp;ius=googleplaymusic&amp;link=https://play.google.com/music/m/Ili2egodifhl6zqriqcw5m2cjpy?t%3DTalk_Python_To_Me_-_Python_conversations_for_passionate_developers" target="_blank">Google Play podcast directory</a></li>
<li><a href="https://talkpython.fm/episodes/rss" target="_blank">Direct RSS</a> from talkpython.fm</li>
<li><a href="https://talkpython.fm/episodes/ogg_rss" target="_blank">Direct OGG-Theora RSS feed</a> from talkpython.fm</li>
<li>Via <a href="https://soundcloud.com/talkpython" target="_blank">SoundCloud</a> page or even our <a href="http://feeds.soundcloud.com/users/soundcloud:users:147980479/sounds.rss" target="_blank">RSS feed for SoundCloud</a></li>
<li>Our <a href="https://www.youtube.com/channel/UCKPSmMfDsXTKrCZApukcJ7A/videos" target="_blank">YouTube channel</a></li>
</ol>
<p>There are probably more places to find Talk Python To Me. But I think the 6 options above offer multiple high-quality choices no matter your platform or preferences. Don&#8217;t want to download the episodes to your device but would rather stream them like Stitcher? Many apps like Overcast allow you to subscribe but only stream the episodes on a per show basis.</p>
<h2>Thanks to my listeners</h2>
<p>Thanks to everyone who subscribes to the show. If you used stitcher, this kinda sucks for you I know. But, <strong>in the long run, this will help me keep the show going by letting me dedicate my time to creating content rather than doing this podcast as a side hustle</strong> (which I did for awhile, it&#8217;s exhausting!).</p>
<p>If this message resonates with you, <strong>please share this post</strong> with your friends and on social media.</p>
<p><span style="color:#808080">Image credit: <a style="color:#808080" href="https://www.flickr.com/photos/agooi/3823711816/in/photolist-6PTwiN-9uB9Qu-3pBYii-5wBcDq-eA2tE-5KAsLJ-6vNPCT-amTugk-ar3aik-ezXh4-ezZBB-aX45XK-yBw29-fiCFQk-8itfmK-bGxNd4-rgG2j1-aECqvM-5q8AYK-6ZDmiv-6Emz3u-pAFwcX-rXPg6z-rgFSLE-ezXkh-bLTt5e-ezXKC-8PneCe-5355BB-rvYGyf-rgP9wp-qBtXmP-qLZTVL-aUZ7Ac-rgGPaG-e5zJsz-rgFUk1-9AuuiC-8Mv8yk-89FXNw-ezXUB-bdUUFD-3pGxbQ-4K7ydP-ezXtd-458i6t-8FBnaF-3btUsB-5wBc2E-6tuX4e" target="_blank">Alex Gooi via Flickr</a></span></p>
]]></content:encoded>
					
					<wfw:commentRss>https://michaelckennedy.wordpress.com/2016/07/05/stitcher-and-talk-python-to-me-podcast-a-farewell-letter/feed/</wfw:commentRss>
			<slash:comments>10</slash:comments>
		
		
		
		<media:thumbnail url="https://michaelckennedy.wordpress.com/wp-content/uploads/2016/07/3823711816_0083ce8ea7_o.jpg" />
		<media:content url="https://michaelckennedy.wordpress.com/wp-content/uploads/2016/07/3823711816_0083ce8ea7_o.jpg" medium="image">
			<media:title type="html">3823711816_0083ce8ea7_o</media:title>
		</media:content>

		<media:content url="https://0.gravatar.com/avatar/0c39b1af51635a37bd212fc71e854db94323bbdfdeb53bfbc9bc34d26620b8eb?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">michaelckennedy</media:title>
		</media:content>
	</item>
		<item>
		<title>New course: Write Pythonic Code Like a Seasoned Developer</title>
		<link>https://michaelckennedy.wordpress.com/2016/06/21/new-course-write-pythonic-code-like-a-seasoned-developer/</link>
					<comments>https://michaelckennedy.wordpress.com/2016/06/21/new-course-write-pythonic-code-like-a-seasoned-developer/#respond</comments>
		
		<dc:creator><![CDATA[Michael Kennedy]]></dc:creator>
		<pubDate>Tue, 21 Jun 2016 13:28:38 +0000</pubDate>
				<category><![CDATA[NoSQL]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Video]]></category>
		<category><![CDATA[Online courses]]></category>
		<category><![CDATA[Open Source]]></category>
		<guid isPermaLink="false">http://blog.michaelckennedy.net/?p=2021</guid>

					<description><![CDATA[I&#8217;m thrilled to announce the second online Python course in my grand plan to create an amazing online resource for Python developers. Write Pythonic Code Like a Seasoned Developer You can buy the course for just $39, own it forever, and get started immediately. Course Summary This course will take you on a tour of [&#8230;]]]></description>
										<content:encoded><![CDATA[<div class="jetpack-video-wrapper">
<div class="embed-vimeo"><iframe src="https://player.vimeo.com/video/171562581" width="970" height="606" frameborder="0" title="Write Pythonic Code Like a Seasoned Developer" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe></div>
</div>
<p>I&#8217;m thrilled to announce the second online Python course in my grand plan to create an amazing online resource for Python developers.</p>
<p style="padding-left:30px;"><strong><a href="https://training.talkpython.fm/courses/explore_pythonic_code/write-pythonic-code-like-a-seasoned-developer" target="_blank">Write Pythonic Code Like a Seasoned Developer</a></strong></p>
<p>You can <a href="https://training.talkpython.fm/courses/explore_pythonic_code/write-pythonic-code-like-a-seasoned-developer">buy the course</a> for just <strong>$39</strong>, <a href="https://training.talkpython.fm/policies/pricing#lifetime" target="_blank">own it forever</a>, and <strong>get started immediately</strong>.</p>
<h2>Course Summary</h2>
<p>This course will take you on a tour of over 50 of the more popular and useful code examples demonstrating Pythonic code. In the examples, you&#8217;ll first see non-Pythonic code and then the more natural Pythonic version.</p>
<p>One of the special concepts in Python is the idea of writing idiomatic code that is most aligned with the language features and ideals. In Python, we call this idiomatic code Pythonic. While this idea is easy to understand, it turns out to be fairly hard to make concrete.</p>
<p>Topics covered include the expansive use of dictionaries, hacking Python&#8217;s memory usage via slots, using generators, comprehensions, and generator expressions, creating subsets of collections via slices (all the way to the database) and many more. Several of these are Python 3 features so you&#8217;ll have even more reason to adopt Python 3 for your next project.</p>
<h2>What is Pythonic code and why does it matter?</h2>
<p>One of the special concepts in Python is the idea of writing idiomatic code that is most aligned with the language features and ideals. In Python, we call this idiomatic code Pythonic. When you write Pythonic code, you are leveraging over 25 years of experience of many thousands of developers. You are writing code that is expected and tune in the CPython runtime. Most importantly perhaps, you are writing code that is easily read and understood by your follow and senior Python developers.</p>
<p>If you are building an open source product, it will be easier for other contributors to join in if your code is Pythonic. If you are running a software team, it will be easier to onboard Python developers new to your company.</p>
<p>On the flip side, if you are somewhat new to Python, you may be broadcasting this loud and clear to everyone listening: your teammates, interviewers if you&#8217;re looking for a new job, audience members if you&#8217;re giving a public presentation. This is less than ideal.</p>
<p>Finally, many of the over 50 tips covered in this course that are considered &#8220;Pythonic&#8221; allow you to write more readable code, more maintainable code, and more efficient code. So in some sense, you can think of this course as an effective Python course in its own right.</p>
<h2>Who is this course for?</h2>
<p>The course is for beginner to intermediate Python developers looking to hone their Python programming skills and become true professionals in the Python space. It is not a &#8220;Learn Python from Scratch&#8221; course and assumes you are familiar with language constructs such as modules, functions, classes, and more.</p>
<p>If you are looking to learn Python from scratch, please consider my <a href="https://training.talkpython.fm/courses/explore_python_jumpstart/python-language-jumpstart-building-10-apps" target="_blank">Python Jumpstart by Building 10 Apps</a> course.</p>
<h2>What topics will we cover?</h2>
<p>This course covers over 50 concrete programming tips to write more Pythonic code. These tips are grouped into the following broad categories.</p>
<ul>
<li>Pythonic Foundational Concepts</li>
<li>Dictionaries</li>
<li>Generators and Collections</li>
<li>Methods and Functions</li>
<li>Modules and Packages</li>
<li>Classes and Objects</li>
<li>Loops</li>
<li>Tuples</li>
<li>Python for Humans</li>
</ul>
<h2>Ready to start learning?</h2>
<p>Head over to <a href="https://training.talkpython.fm">training.talkpython.fm</a> and <a href="https://training.talkpython.fm/courses/explore_pythonic_code/write-pythonic-code-like-a-seasoned-developer">get started today</a>.</p>
<h2>Have a question?</h2>
<p>Post them in the comments below. I&#8217;d be happy to talk about it.</p>
<p>&nbsp;</p>
]]></content:encoded>
					
					<wfw:commentRss>https://michaelckennedy.wordpress.com/2016/06/21/new-course-write-pythonic-code-like-a-seasoned-developer/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		
		<media:thumbnail url="https://michaelckennedy.wordpress.com/wp-content/uploads/2016/06/write-pythonic-deemphasized.png" />
		<media:content url="https://michaelckennedy.wordpress.com/wp-content/uploads/2016/06/write-pythonic-deemphasized.png" medium="image">
			<media:title type="html">write-pythonic-deemphasized</media:title>
		</media:content>

		<media:content url="https://0.gravatar.com/avatar/0c39b1af51635a37bd212fc71e854db94323bbdfdeb53bfbc9bc34d26620b8eb?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">michaelckennedy</media:title>
		</media:content>
	</item>
		<item>
		<title>Python for the C# developer (live from NDC Oslo 2016)</title>
		<link>https://michaelckennedy.wordpress.com/2016/06/21/python-for-the-c-developer-live-from-ndc-oslo-2016/</link>
					<comments>https://michaelckennedy.wordpress.com/2016/06/21/python-for-the-c-developer-live-from-ndc-oslo-2016/#respond</comments>
		
		<dc:creator><![CDATA[Michael Kennedy]]></dc:creator>
		<pubDate>Tue, 21 Jun 2016 10:53:49 +0000</pubDate>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[Speaking]]></category>
		<category><![CDATA[Video]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Visual Studio]]></category>
		<guid isPermaLink="false">http://blog.michaelckennedy.net/?p=2011</guid>

					<description><![CDATA[Are you spending your days writing .NET and C# code? What is it you love about C# and the .NET ecosystem? Do you love Entity Framework and the hyper productivity of a great ORM? How about ASP.NET MVC as a web framework for artisains? True properties on classes? The list goes on and on. In [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Are you spending your days writing .NET and C# code? What is it you love about C# and the .NET ecosystem?</p>
<ul>
<li>Do you love Entity Framework and the hyper productivity of a great ORM?</li>
<li>How about ASP.NET MVC as a web framework for artisains?</li>
<li>True properties on classes?</li>
<li>The list goes on and on.</li>
</ul>
<p>In this live presentation from <a href="http://ndcoslo.com/" target="_blank">NDC Oslo 2016</a>, I make the case that virtually everything that is appealing for .NET developers in C# and .NET has an analogous and wonderful equivalent in the Python space.</p>
<p>If it&#8217;s time to diversify beyond Windows and Microsoft, I encourage you to watch this recorded session and see why Python is a great choice as a second language for the .NET developer.</p>
<div class="jetpack-video-wrapper">
<div class="embed-vimeo"><iframe src="https://player.vimeo.com/video/171319736" width="970" height="546" frameborder="0" title="Python: An Amazing Second Language for .NET Developers - Michael Kennedy" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe></div>
</div>
<p>&nbsp;</p>
]]></content:encoded>
					
					<wfw:commentRss>https://michaelckennedy.wordpress.com/2016/06/21/python-for-the-c-developer-live-from-ndc-oslo-2016/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		
		<media:thumbnail url="https://michaelckennedy.wordpress.com/wp-content/uploads/2016/06/screen-shot-2016-06-21-at-12-44-35-pm.png" />
		<media:content url="https://michaelckennedy.wordpress.com/wp-content/uploads/2016/06/screen-shot-2016-06-21-at-12-44-35-pm.png" medium="image">
			<media:title type="html">Screen Shot 2016-06-21 at 12.44.35 PM</media:title>
		</media:content>

		<media:content url="https://0.gravatar.com/avatar/0c39b1af51635a37bd212fc71e854db94323bbdfdeb53bfbc9bc34d26620b8eb?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">michaelckennedy</media:title>
		</media:content>
	</item>
		<item>
		<title>Away from the keyboard podcast: Michael Kennedy Goes Around The World With Python</title>
		<link>https://michaelckennedy.wordpress.com/2016/05/10/away-from-the-keyboard-podcast-michael-kennedy-goes-around-the-world-with-python/</link>
					<comments>https://michaelckennedy.wordpress.com/2016/05/10/away-from-the-keyboard-podcast-michael-kennedy-goes-around-the-world-with-python/#respond</comments>
		
		<dc:creator><![CDATA[Michael Kennedy]]></dc:creator>
		<pubDate>Tue, 10 May 2016 23:11:52 +0000</pubDate>
				<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Talk Python To Me Podcast]]></category>
		<category><![CDATA[Podcast]]></category>
		<guid isPermaLink="false">http://blog.michaelckennedy.net/?p=1990</guid>

					<description><![CDATA[Hi all, I had the honor to spend an hour with Cecil Phillip and Richie Rump on their laid back technical, but casual podcast Away From The Keyboard. I really enjoyed the conversation and I think you will too. Give them a listen. &#160;]]></description>
										<content:encoded><![CDATA[<p>Hi all,</p>
<p>I had the honor to spend an hour with <a href="https://twitter.com/cecilphillip" target="_blank">Cecil Phillip</a> and <a href="https://twitter.com/jorriss" target="_blank">Richie Rump</a> on their laid back technical, but casual podcast <a href="http://awayfromthekeyboard.com/2016/05/09/michael-kennedy-goes-around-the-world-with-python/">Away From The Keyboard</a>. I really enjoyed the conversation and I think you will too. <a href="http://awayfromthekeyboard.com/2016/05/09/michael-kennedy-goes-around-the-world-with-python/">Give them a listen</a>.</p>
<p><a href="http://awayfromthekeyboard.com/2016/05/09/michael-kennedy-goes-around-the-world-with-python/"><img loading="lazy" data-attachment-id="2001" data-permalink="https://michaelckennedy.wordpress.com/2016/05/10/away-from-the-keyboard-podcast-michael-kennedy-goes-around-the-world-with-python/aftk-me/" data-orig-file="https://michaelckennedy.wordpress.com/wp-content/uploads/2016/05/aftk-me.png" data-orig-size="2398,1420" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="aftk-me" data-image-description="" data-image-caption="" data-medium-file="https://michaelckennedy.wordpress.com/wp-content/uploads/2016/05/aftk-me.png?w=300" data-large-file="https://michaelckennedy.wordpress.com/wp-content/uploads/2016/05/aftk-me.png?w=970" class="alignnone size-full wp-image-2001" src="https://michaelckennedy.wordpress.com/wp-content/uploads/2016/05/aftk-me.png" alt="aftk-me" width="2398" height="1420" srcset="https://michaelckennedy.wordpress.com/wp-content/uploads/2016/05/aftk-me.png 2398w, https://michaelckennedy.wordpress.com/wp-content/uploads/2016/05/aftk-me.png?w=150&amp;h=89 150w, https://michaelckennedy.wordpress.com/wp-content/uploads/2016/05/aftk-me.png?w=300&amp;h=178 300w, https://michaelckennedy.wordpress.com/wp-content/uploads/2016/05/aftk-me.png?w=768&amp;h=455 768w, https://michaelckennedy.wordpress.com/wp-content/uploads/2016/05/aftk-me.png?w=1024&amp;h=606 1024w" sizes="(max-width: 2398px) 100vw, 2398px" /></a></p>
<p>&nbsp;</p>
]]></content:encoded>
					
					<wfw:commentRss>https://michaelckennedy.wordpress.com/2016/05/10/away-from-the-keyboard-podcast-michael-kennedy-goes-around-the-world-with-python/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		
		<media:thumbnail url="https://michaelckennedy.wordpress.com/wp-content/uploads/2016/05/away_from_the_keyboard_itunes.jpg" />
		<media:content url="https://michaelckennedy.wordpress.com/wp-content/uploads/2016/05/away_from_the_keyboard_itunes.jpg" medium="image">
			<media:title type="html">Away_from_the_Keyboard_iTunes</media:title>
		</media:content>

		<media:content url="https://0.gravatar.com/avatar/0c39b1af51635a37bd212fc71e854db94323bbdfdeb53bfbc9bc34d26620b8eb?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">michaelckennedy</media:title>
		</media:content>

		<media:content url="https://michaelckennedy.wordpress.com/wp-content/uploads/2016/05/aftk-me.png" medium="image">
			<media:title type="html">aftk-me</media:title>
		</media:content>
	</item>
		<item>
		<title>Talk Python Courses: You&#8217;ve asked, I&#8217;ve listened (and coded)</title>
		<link>https://michaelckennedy.wordpress.com/2016/05/04/talk-python-courses-youve-asked-ive-listened-and-coded/</link>
					<comments>https://michaelckennedy.wordpress.com/2016/05/04/talk-python-courses-youve-asked-ive-listened-and-coded/#comments</comments>
		
		<dc:creator><![CDATA[Michael Kennedy]]></dc:creator>
		<pubDate>Wed, 04 May 2016 21:25:21 +0000</pubDate>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[Talk Python To Me Podcast]]></category>
		<category><![CDATA[Online courses]]></category>
		<category><![CDATA[Open Source]]></category>
		<guid isPermaLink="false">http://blog.michaelckennedy.net/?p=1964</guid>

					<description><![CDATA[Hi everyone. My Python Jumpstart by Building 10 Apps course has been out for awhile now. I&#8217;ve already started on the next one which I&#8217;m calling Python for Entrepreneurs. I&#8217;ll keep you posted as that develops. Today I wanted to tell you about a few features I&#8217;ve added to the player and the platform that have [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Hi everyone. My <a href="https://training.talkpython.fm/courses/details/python-language-jumpstart-building-10-apps" target="_blank">Python Jumpstart by Building 10 Apps course</a> has been out for awhile now. I&#8217;ve already started on the next one which I&#8217;m calling Python for Entrepreneurs. I&#8217;ll keep you posted as that develops.</p>
<p>Today I wanted to tell you about a few features I&#8217;ve added to the player and the platform that have been requested by many of you.</p>
<h2>Feature 1: Remember my watched lectures</h2>
<p><a href="https://michaelckennedy.wordpress.com/wp-content/uploads/2016/05/watched.png" target="_blank"><img loading="lazy" data-attachment-id="1966" data-permalink="https://michaelckennedy.wordpress.com/2016/05/04/talk-python-courses-youve-asked-ive-listened-and-coded/watched/" data-orig-file="https://michaelckennedy.wordpress.com/wp-content/uploads/2016/05/watched.png" data-orig-size="1734,1034" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="watched" data-image-description="" data-image-caption="" data-medium-file="https://michaelckennedy.wordpress.com/wp-content/uploads/2016/05/watched.png?w=300" data-large-file="https://michaelckennedy.wordpress.com/wp-content/uploads/2016/05/watched.png?w=970" class="alignnone size-full wp-image-1966" src="https://michaelckennedy.wordpress.com/wp-content/uploads/2016/05/watched.png" alt="watched" width="1734" height="1034" srcset="https://michaelckennedy.wordpress.com/wp-content/uploads/2016/05/watched.png 1734w, https://michaelckennedy.wordpress.com/wp-content/uploads/2016/05/watched.png?w=150&amp;h=89 150w, https://michaelckennedy.wordpress.com/wp-content/uploads/2016/05/watched.png?w=300&amp;h=179 300w, https://michaelckennedy.wordpress.com/wp-content/uploads/2016/05/watched.png?w=768&amp;h=458 768w, https://michaelckennedy.wordpress.com/wp-content/uploads/2016/05/watched.png?w=1024&amp;h=611 1024w" sizes="(max-width: 1734px) 100vw, 1734px" /></a></p>
<p style="text-align:center;">(<a href="https://michaelckennedy.wordpress.com/wp-content/uploads/2016/05/watched.png" target="_blank">click to enlarge</a>)</p>
<p>You can see from the screenshot above that the player has automatically recorded which videos I&#8217;ve watched across all my devices (grey with checkboxes).</p>
<h2>Feature 2: Quick access and subtitles on videos</h2>
<p><a href="https://michaelckennedy.wordpress.com/wp-content/uploads/2016/05/player-features.png" target="_blank"><img loading="lazy" data-attachment-id="1973" data-permalink="https://michaelckennedy.wordpress.com/2016/05/04/talk-python-courses-youve-asked-ive-listened-and-coded/player-features/" data-orig-file="https://michaelckennedy.wordpress.com/wp-content/uploads/2016/05/player-features.png" data-orig-size="1585,1029" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="player-features" data-image-description="" data-image-caption="" data-medium-file="https://michaelckennedy.wordpress.com/wp-content/uploads/2016/05/player-features.png?w=300" data-large-file="https://michaelckennedy.wordpress.com/wp-content/uploads/2016/05/player-features.png?w=970" class="alignnone size-full wp-image-1973" src="https://michaelckennedy.wordpress.com/wp-content/uploads/2016/05/player-features.png" alt="player-features" width="1585" height="1029" srcset="https://michaelckennedy.wordpress.com/wp-content/uploads/2016/05/player-features.png 1585w, https://michaelckennedy.wordpress.com/wp-content/uploads/2016/05/player-features.png?w=150&amp;h=97 150w, https://michaelckennedy.wordpress.com/wp-content/uploads/2016/05/player-features.png?w=300&amp;h=195 300w, https://michaelckennedy.wordpress.com/wp-content/uploads/2016/05/player-features.png?w=768&amp;h=499 768w, https://michaelckennedy.wordpress.com/wp-content/uploads/2016/05/player-features.png?w=1024&amp;h=665 1024w" sizes="(max-width: 1585px) 100vw, 1585px" /></a></p>
<p style="text-align:center;">(<a href="https://michaelckennedy.wordpress.com/wp-content/uploads/2016/05/player-features.png" target="_blank">click to enlarge</a>)</p>
<p>You can see I&#8217;ve added a significant amount of quick access, navigational, and transcript / subtitle features in the player.</p>
<p>Use the CC icon in the lower-right to enable subtitles (and the HD allows you to adjust the quality / size while you&#8217;re there). Note that on Chrome sometimes it forgets your settings to keep this selected. I believe this is a third-party cookie setting.</p>
<p>Top has, from left to right, access to the main course page, transcript popup, github repository, twitter, facebook, linkedin shares, and &#8220;mark as watched and go to next&#8221;.</p>
<p>The mark as watched is automatic, but this allows you to skip ahead and record the video was watched even if you don&#8217;t actually watch it.</p>
<h2>Feature 3: Transcripts on github course repo</h2>
<p><img loading="lazy" data-attachment-id="1977" data-permalink="https://michaelckennedy.wordpress.com/2016/05/04/talk-python-courses-youve-asked-ive-listened-and-coded/github-tx/" data-orig-file="https://michaelckennedy.wordpress.com/wp-content/uploads/2016/05/github-tx.png" data-orig-size="2044,1096" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="github-tx" data-image-description="" data-image-caption="" data-medium-file="https://michaelckennedy.wordpress.com/wp-content/uploads/2016/05/github-tx.png?w=300" data-large-file="https://michaelckennedy.wordpress.com/wp-content/uploads/2016/05/github-tx.png?w=970" class="alignnone size-full wp-image-1977" src="https://michaelckennedy.wordpress.com/wp-content/uploads/2016/05/github-tx.png" alt="github-tx" width="2044" height="1096" srcset="https://michaelckennedy.wordpress.com/wp-content/uploads/2016/05/github-tx.png 2044w, https://michaelckennedy.wordpress.com/wp-content/uploads/2016/05/github-tx.png?w=150&amp;h=80 150w, https://michaelckennedy.wordpress.com/wp-content/uploads/2016/05/github-tx.png?w=300&amp;h=161 300w, https://michaelckennedy.wordpress.com/wp-content/uploads/2016/05/github-tx.png?w=768&amp;h=412 768w, https://michaelckennedy.wordpress.com/wp-content/uploads/2016/05/github-tx.png?w=1024&amp;h=549 1024w" sizes="(max-width: 2044px) 100vw, 2044px" /></p>
<p>I decided to add the transcript text files to the <a href="https://github.com/mikeckennedy/python-jumpstart-course-demos" target="_blank">course github repository</a>. You can have access to them offline from here and even use the &#8220;search this repository&#8221; for full text search across lectures.</p>
<p>Note that I&#8217;m adding transcripts as they get finished, but only the first 6 chapters have transcripts at the time of this writing.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://michaelckennedy.wordpress.com/2016/05/04/talk-python-courses-youve-asked-ive-listened-and-coded/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
		
		<media:thumbnail url="https://michaelckennedy.wordpress.com/wp-content/uploads/2016/05/watched.png" />
		<media:content url="https://michaelckennedy.wordpress.com/wp-content/uploads/2016/05/watched.png" medium="image">
			<media:title type="html">watched</media:title>
		</media:content>

		<media:content url="https://0.gravatar.com/avatar/0c39b1af51635a37bd212fc71e854db94323bbdfdeb53bfbc9bc34d26620b8eb?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">michaelckennedy</media:title>
		</media:content>

		<media:content url="https://michaelckennedy.wordpress.com/wp-content/uploads/2016/05/player-features.png" medium="image">
			<media:title type="html">player-features</media:title>
		</media:content>

		<media:content url="https://michaelckennedy.wordpress.com/wp-content/uploads/2016/05/github-tx.png" medium="image">
			<media:title type="html">github-tx</media:title>
		</media:content>
	</item>
		<item>
		<title>Hear the story of my career and what inspires me on Developer on Fire podcast</title>
		<link>https://michaelckennedy.wordpress.com/2016/03/18/hear-the-story-of-my-career-and-what-inspires-me-on-developer-on-fire-podcast/</link>
					<comments>https://michaelckennedy.wordpress.com/2016/03/18/hear-the-story-of-my-career-and-what-inspires-me-on-developer-on-fire-podcast/#comments</comments>
		
		<dc:creator><![CDATA[Michael Kennedy]]></dc:creator>
		<pubDate>Fri, 18 Mar 2016 10:06:50 +0000</pubDate>
				<category><![CDATA[Talk Python To Me Podcast]]></category>
		<guid isPermaLink="false">http://blog.michaelckennedy.net/?p=1945</guid>

					<description><![CDATA[I had the honor to share my story of how I became a &#8216;Developer on Fire&#8216; with Dave Rael on this podcast. If you&#8217;re trying to grow your software career or become an entrepreneur, you&#8217;ll probably find it interesting. Listen to Episode 112 &#124; Michael Kennedy &#8211; The Geek&#8217;s Geek &#160;]]></description>
										<content:encoded><![CDATA[<p>I had the honor to share my story of how I became a &#8216;<a href="http://developeronfire.com/episode-112-michael-kennedy-the-geek's-geek" target="_blank">Developer on Fire</a>&#8216; with <a href="https://twitter.com/raelyard" target="_blank">Dave Rael</a> on this podcast. If you&#8217;re trying to grow your software career or become an entrepreneur, you&#8217;ll probably find it interesting.</p>
<h3 style="text-align:center;">Listen to <a href="http://developeronfire.com/episode-112-michael-kennedy-the-geek's-geek" target="_blank">Episode 112 | Michael Kennedy &#8211; The Geek&#8217;s Geek</a><a href="http://developeronfire.com/episode-112-michael-kennedy-the-geek's-geek" target="_blank"><img loading="lazy" data-attachment-id="1947" data-permalink="https://michaelckennedy.wordpress.com/2016/03/18/hear-the-story-of-my-career-and-what-inspires-me-on-developer-on-fire-podcast/screen-shot-2016-03-18-at-9-40-00-am/" data-orig-file="https://michaelckennedy.wordpress.com/wp-content/uploads/2016/03/screen-shot-2016-03-18-at-9-40-00-am.png" data-orig-size="1776,1670" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="Screen Shot 2016-03-18 at 9.40.00 AM" data-image-description="" data-image-caption="" data-medium-file="https://michaelckennedy.wordpress.com/wp-content/uploads/2016/03/screen-shot-2016-03-18-at-9-40-00-am.png?w=300" data-large-file="https://michaelckennedy.wordpress.com/wp-content/uploads/2016/03/screen-shot-2016-03-18-at-9-40-00-am.png?w=970" class="alignnone size-full wp-image-1947" src="https://michaelckennedy.wordpress.com/wp-content/uploads/2016/03/screen-shot-2016-03-18-at-9-40-00-am.png" alt="Screen Shot 2016-03-18 at 9.40.00 AM" width="1776" height="1670" srcset="https://michaelckennedy.wordpress.com/wp-content/uploads/2016/03/screen-shot-2016-03-18-at-9-40-00-am.png 1776w, https://michaelckennedy.wordpress.com/wp-content/uploads/2016/03/screen-shot-2016-03-18-at-9-40-00-am.png?w=150&amp;h=141 150w, https://michaelckennedy.wordpress.com/wp-content/uploads/2016/03/screen-shot-2016-03-18-at-9-40-00-am.png?w=300&amp;h=282 300w, https://michaelckennedy.wordpress.com/wp-content/uploads/2016/03/screen-shot-2016-03-18-at-9-40-00-am.png?w=768&amp;h=722 768w, https://michaelckennedy.wordpress.com/wp-content/uploads/2016/03/screen-shot-2016-03-18-at-9-40-00-am.png?w=1024&amp;h=963 1024w" sizes="(max-width: 1776px) 100vw, 1776px" /></a></h3>
<p>&nbsp;</p>
]]></content:encoded>
					
					<wfw:commentRss>https://michaelckennedy.wordpress.com/2016/03/18/hear-the-story-of-my-career-and-what-inspires-me-on-developer-on-fire-podcast/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
		
		<media:thumbnail url="https://michaelckennedy.wordpress.com/wp-content/uploads/2016/03/developer-on-fire.png" />
		<media:content url="https://michaelckennedy.wordpress.com/wp-content/uploads/2016/03/developer-on-fire.png" medium="image">
			<media:title type="html">developer-on-fire</media:title>
		</media:content>

		<media:content url="https://0.gravatar.com/avatar/0c39b1af51635a37bd212fc71e854db94323bbdfdeb53bfbc9bc34d26620b8eb?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">michaelckennedy</media:title>
		</media:content>

		<media:content url="https://michaelckennedy.wordpress.com/wp-content/uploads/2016/03/screen-shot-2016-03-18-at-9-40-00-am.png" medium="image">
			<media:title type="html">Screen Shot 2016-03-18 at 9.40.00 AM</media:title>
		</media:content>
	</item>
		<item>
		<title>The Final 36 Hours: Python Jumpstart Video Course Kickstarter</title>
		<link>https://michaelckennedy.wordpress.com/2016/03/17/the-final-36-hours-python-jumpstart-video-course-kickstarter/</link>
					<comments>https://michaelckennedy.wordpress.com/2016/03/17/the-final-36-hours-python-jumpstart-video-course-kickstarter/#respond</comments>
		
		<dc:creator><![CDATA[Michael Kennedy]]></dc:creator>
		<pubDate>Thu, 17 Mar 2016 14:02:20 +0000</pubDate>
				<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Talk Python To Me Podcast]]></category>
		<guid isPermaLink="false">http://blog.michaelckennedy.net/?p=1902</guid>

					<description><![CDATA[[Update: Check out my Python for Entrepreneurs course running on Kickstarter now] There are just 36 hours left in my online Python course Kickstarter. Python Jumpstart by Building 10 Apps I want to thank everyone who has either backed the project or shared it with someone who might be interested. Here are a few updates [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>[<strong>Update</strong>: Check out my <strong><a href="https://talkpython.fm/launch" target="_blank">Python for Entrepreneurs</a></strong> course running on <strong><a href="https://talkpython.fm/launch" target="_blank">Kickstarter</a></strong> now]</p>
<p>There are just 36 hours left in my <a href="https://www.kickstarter.com/projects/mikeckennedy/python-jumpstart-by-building-10-apps-video-course" target="_blank">online Python course Kickstarter</a>.</p>
<h2 style="text-align:center;"><a href="https://www.kickstarter.com/projects/mikeckennedy/python-jumpstart-by-building-10-apps-video-course" target="_blank"><strong>Python Jumpstart by Building 10 Apps</strong><br />
<img loading="lazy" data-attachment-id="1909" data-permalink="https://michaelckennedy.wordpress.com/2016/03/17/the-final-36-hours-python-jumpstart-video-course-kickstarter/kick-status-march-17/" data-orig-file="https://michaelckennedy.wordpress.com/wp-content/uploads/2016/03/kick-status-march-17.png" data-orig-size="1363,623" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="kick-status-march-17" data-image-description="" data-image-caption="" data-medium-file="https://michaelckennedy.wordpress.com/wp-content/uploads/2016/03/kick-status-march-17.png?w=300" data-large-file="https://michaelckennedy.wordpress.com/wp-content/uploads/2016/03/kick-status-march-17.png?w=970" class="alignnone size-full wp-image-1909 aligncenter" src="https://michaelckennedy.wordpress.com/wp-content/uploads/2016/03/kick-status-march-17.png" alt="kick-status-march-17" width="1363" height="623" srcset="https://michaelckennedy.wordpress.com/wp-content/uploads/2016/03/kick-status-march-17.png 1363w, https://michaelckennedy.wordpress.com/wp-content/uploads/2016/03/kick-status-march-17.png?w=150&amp;h=69 150w, https://michaelckennedy.wordpress.com/wp-content/uploads/2016/03/kick-status-march-17.png?w=300&amp;h=137 300w, https://michaelckennedy.wordpress.com/wp-content/uploads/2016/03/kick-status-march-17.png?w=768&amp;h=351 768w, https://michaelckennedy.wordpress.com/wp-content/uploads/2016/03/kick-status-march-17.png?w=1024&amp;h=468 1024w" sizes="(max-width: 1363px) 100vw, 1363px" /></a></h2>
<p style="text-align:left;">I want to thank everyone who has either backed the project or shared it with someone who might be interested.</p>
<p>Here are a few updates and a final call to action.</p>
<p><strong>#1. Team options</strong>. I have had several backer levels all focused on individuals. I added a couple of company / team focused ones for the final day. If you work with a team who needs to (or should!) learn Python, please recommend they buy my course. They can choose one of the team options or just buy the course as a group when it&#8217;s out in a few weeks.</p>
<ul>
<li>TEAM PACK: 10 STUDENTS for $250</li>
<li>TEAM PACK: 20 STUDENTS for $450</li>
</ul>
<p><strong>#2. Talk Python Training</strong>. This kickstarter campaign is just the first step on my journey to build the best set of online Python training courses. I have launched <a href="https://training.talkpython.fm/" target="_blank">Talk Python Training</a>. You will be able to buy the course directly there as soon as it is finished as well as see what I&#8217;m planning next.</p>
<p><a href="https://training.talkpython.fm/" target="_blank"><img loading="lazy" data-attachment-id="1930" data-permalink="https://michaelckennedy.wordpress.com/2016/03/17/the-final-36-hours-python-jumpstart-video-course-kickstarter/talk-python-training/" data-orig-file="https://michaelckennedy.wordpress.com/wp-content/uploads/2016/03/talk-python-training.png" data-orig-size="1930,1226" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="Talk-Python-Training" data-image-description="" data-image-caption="" data-medium-file="https://michaelckennedy.wordpress.com/wp-content/uploads/2016/03/talk-python-training.png?w=300" data-large-file="https://michaelckennedy.wordpress.com/wp-content/uploads/2016/03/talk-python-training.png?w=970" class="alignnone size-full wp-image-1930" src="https://michaelckennedy.wordpress.com/wp-content/uploads/2016/03/talk-python-training.png" alt="Talk-Python-Training" width="1930" height="1226" srcset="https://michaelckennedy.wordpress.com/wp-content/uploads/2016/03/talk-python-training.png 1930w, https://michaelckennedy.wordpress.com/wp-content/uploads/2016/03/talk-python-training.png?w=150&amp;h=95 150w, https://michaelckennedy.wordpress.com/wp-content/uploads/2016/03/talk-python-training.png?w=300&amp;h=191 300w, https://michaelckennedy.wordpress.com/wp-content/uploads/2016/03/talk-python-training.png?w=768&amp;h=488 768w, https://michaelckennedy.wordpress.com/wp-content/uploads/2016/03/talk-python-training.png?w=1024&amp;h=650 1024w" sizes="(max-width: 1930px) 100vw, 1930px" /></a></p>
<h2>How can you help?</h2>
<p>If you think this project is pretty cool, please consider:</p>
<ol>
<li><a href="https://www.kickstarter.com/projects/mikeckennedy/python-jumpstart-by-building-10-apps-video-course" target="_blank"><strong>Backing the project</strong></a> on Kickstarter.</li>
<li><strong>Subscribe to my mailing list</strong> <a href="https://training.talkpython.fm/" target="_blank">on Talk Python Training</a> to hear about new courses</li>
<li><strong>Recommend the course</strong> to a friend, colleague or even your company</li>
</ol>
<p>Once again, thanks everyone. This project has been a great joy to work on and I couldn&#8217;t have done it without.</p>
<p style="text-align:right;">&#8212; Michael</p>
]]></content:encoded>
					
					<wfw:commentRss>https://michaelckennedy.wordpress.com/2016/03/17/the-final-36-hours-python-jumpstart-video-course-kickstarter/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		
		<media:thumbnail url="https://michaelckennedy.wordpress.com/wp-content/uploads/2016/03/kick-k-wide.jpg" />
		<media:content url="https://michaelckennedy.wordpress.com/wp-content/uploads/2016/03/kick-k-wide.jpg" medium="image">
			<media:title type="html">kick-k-wide</media:title>
		</media:content>

		<media:content url="https://0.gravatar.com/avatar/0c39b1af51635a37bd212fc71e854db94323bbdfdeb53bfbc9bc34d26620b8eb?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">michaelckennedy</media:title>
		</media:content>

		<media:content url="https://michaelckennedy.wordpress.com/wp-content/uploads/2016/03/kick-status-march-17.png" medium="image">
			<media:title type="html">kick-status-march-17</media:title>
		</media:content>

		<media:content url="https://michaelckennedy.wordpress.com/wp-content/uploads/2016/03/talk-python-training.png" medium="image">
			<media:title type="html">Talk-Python-Training</media:title>
		</media:content>
	</item>
		<item>
		<title>I&#8217;m Building 20 Online Python Courses and I need your help</title>
		<link>https://michaelckennedy.wordpress.com/2016/02/16/im-building-20-online-python-courses-and-i-need-your-help-video-course-library-announced/</link>
					<comments>https://michaelckennedy.wordpress.com/2016/02/16/im-building-20-online-python-courses-and-i-need-your-help-video-course-library-announced/#comments</comments>
		
		<dc:creator><![CDATA[Michael Kennedy]]></dc:creator>
		<pubDate>Tue, 16 Feb 2016 12:21:29 +0000</pubDate>
				<category><![CDATA[Articles]]></category>
		<guid isPermaLink="false">http://blog.michaelckennedy.net/?p=1853</guid>

					<description><![CDATA[[Update: Check out my Python for Entrepreneurs course running on Kickstarter now] When I started the Talk Python To Me podcast almost a year ago, I had modest expectations and more than a little uncertainty about how it would be received by the community. And honestly, everyday I&#8217;m blown away by how many people&#8217;s lives [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>[<strong>Update</strong>: Check out my <strong><a href="https://talkpython.fm/launch" target="_blank">Python for Entrepreneurs</a></strong> course running on <strong><a href="https://talkpython.fm/launch" target="_blank">Kickstarter</a></strong> now]</p>
<p>When I started the <strong><a href="https://talkpython.fm/" target="_blank">Talk Python To Me podcast</a></strong> almost a year ago, I had modest expectations and more than a little uncertainty about how it would be received by the community. And honestly, everyday I&#8217;m blown away by how many people&#8217;s lives I touch and help educate in some part of Python that was less well known to them.</p>
<p>I get a huge amount of satisfaction spending time making Python more relevant through the conversations on the podcast. <strong>I&#8217;ve been thinking about how I do more of that.</strong></p>
<p>I believe the natural counterpart of a podcast which exposes people to new ideas and inspires them to learn more about Python is a comprehensive set of online courses to help you go from inspired to empowered, from new developer to highly effective developer, from a specialized developer to a well-rounded one.</p>
<p>Today I&#8217;m announcing <strong><a href="https://www.kickstarter.com/projects/mikeckennedy/python-jumpstart-by-building-10-apps-video-course" target="_blank">the first course</a></strong> and taking the first step on a journey to build this resource for you and the whole Python community.</p>
<p><strong>Over the next two years, I plan to release 20 high-quality online courses that will be between 3 to 10 hours each (one course every 4-6 weeks)</strong>. These no-fluff courses will strive to make you effective with some corner of the Python ecosystem including the python language, web applications, databases, GUIs, parallelism, and more.</p>
<p>The first course will be about the Python programming language and will take a fun and playful approach of teaching you language details such as classes, loops, variables, and more. <strong>It&#8217;s called <a href="https://www.kickstarter.com/projects/mikeckennedy/python-jumpstart-by-building-10-apps-video-course" target="_blank">Python Jumpstart by Building 10 Applications</a></strong>, it will be about 6 hours long, and will be a comprehensive introduction to the python language.</p>
<p><a href="https://www.kickstarter.com/projects/mikeckennedy/python-jumpstart-by-building-10-apps-video-course" target="_blank"><img loading="lazy" data-attachment-id="1857" data-permalink="https://michaelckennedy.wordpress.com/2016/02/16/im-building-20-online-python-courses-and-i-need-your-help-video-course-library-announced/python-jumpstart-feature-2/" data-orig-file="https://michaelckennedy.wordpress.com/wp-content/uploads/2016/02/python-jumpstart-feature1.jpg" data-orig-size="2048,1536" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;1&quot;}" data-image-title="python-jumpstart-feature" data-image-description="" data-image-caption="" data-medium-file="https://michaelckennedy.wordpress.com/wp-content/uploads/2016/02/python-jumpstart-feature1.jpg?w=300" data-large-file="https://michaelckennedy.wordpress.com/wp-content/uploads/2016/02/python-jumpstart-feature1.jpg?w=970" class="  wp-image-1857 aligncenter" src="https://michaelckennedy.wordpress.com/wp-content/uploads/2016/02/python-jumpstart-feature1.jpg?w=2720" alt="python-jumpstart-feature" width="325" height="244" srcset="https://michaelckennedy.wordpress.com/wp-content/uploads/2016/02/python-jumpstart-feature1.jpg?w=325 325w, https://michaelckennedy.wordpress.com/wp-content/uploads/2016/02/python-jumpstart-feature1.jpg?w=650 650w, https://michaelckennedy.wordpress.com/wp-content/uploads/2016/02/python-jumpstart-feature1.jpg?w=150 150w, https://michaelckennedy.wordpress.com/wp-content/uploads/2016/02/python-jumpstart-feature1.jpg?w=300 300w" sizes="(max-width: 325px) 100vw, 325px" /></a></p>
<p>If this project resonates with you, then I need your help. <strong>As of today, I&#8217;m launching <a href="https://www.kickstarter.com/projects/mikeckennedy/python-jumpstart-by-building-10-apps-video-course" target="_blank">a kickstarter</a> to make this first course, this first step on my journey, a reality.</strong></p>
<p><a href="https://www.kickstarter.com/projects/mikeckennedy/python-jumpstart-by-building-10-apps-video-course" target="_blank"><img loading="lazy" data-attachment-id="1872" data-permalink="https://michaelckennedy.wordpress.com/2016/02/16/im-building-20-online-python-courses-and-i-need-your-help-video-course-library-announced/kickstarter-logo-light/" data-orig-file="https://michaelckennedy.wordpress.com/wp-content/uploads/2016/02/kickstarter-logo-light.png" data-orig-size="1000,117" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="kickstarter-logo-light" data-image-description="" data-image-caption="" data-medium-file="https://michaelckennedy.wordpress.com/wp-content/uploads/2016/02/kickstarter-logo-light.png?w=300" data-large-file="https://michaelckennedy.wordpress.com/wp-content/uploads/2016/02/kickstarter-logo-light.png?w=970" class="  wp-image-1872 aligncenter" src="https://michaelckennedy.wordpress.com/wp-content/uploads/2016/02/kickstarter-logo-light.png" alt="kickstarter-logo-light" width="451" height="53" srcset="https://michaelckennedy.wordpress.com/wp-content/uploads/2016/02/kickstarter-logo-light.png?w=451&amp;h=53 451w, https://michaelckennedy.wordpress.com/wp-content/uploads/2016/02/kickstarter-logo-light.png?w=902&amp;h=106 902w, https://michaelckennedy.wordpress.com/wp-content/uploads/2016/02/kickstarter-logo-light.png?w=150&amp;h=18 150w, https://michaelckennedy.wordpress.com/wp-content/uploads/2016/02/kickstarter-logo-light.png?w=300&amp;h=35 300w, https://michaelckennedy.wordpress.com/wp-content/uploads/2016/02/kickstarter-logo-light.png?w=768&amp;h=90 768w" sizes="(max-width: 451px) 100vw, 451px" /></a><br />
Please, take a moment to <strong><a href="https://www.kickstarter.com/projects/mikeckennedy/python-jumpstart-by-building-10-apps-video-course" target="_blank">visit the kickstarter</a></strong> to see what it&#8217;s all about. There are many reward levels but main one is the $29 student reward which gives you <strong>lifetime access to this first course at a significant discount.</strong></p>
<p>If you believe in this project and want to help, please tweet about the kickstarter, share it with your coworkers, or even back it yourself.</p>
<p>I&#8217;m really excited to start down this path to build something amazing for the community and I can&#8217;t do it without you. So any support or word-of-mouth endorsements you can give me will be deeply appreciated.</p>
<p>Please let me know you think. Send me a message over email, <a href="mailto:contact@talkpython.fm" target="_blank">contact@talkpython.fm</a> or on twitter via <a href="https://twitter.com/talkpython" target="_blank">@talkpython</a>.</p>
<p>Here&#8217;s a short video telling you what the course is about and why I think you&#8217;ll love it.</p>
<div class="embed-kickstarter"><iframe frameborder="0" height="727" scrolling="no" src="https://www.kickstarter.com/projects/mikeckennedy/python-jumpstart-by-building-10-apps-video-course/widget/video.html" width="970"></iframe></div>
<p>&nbsp;</p>
]]></content:encoded>
					
					<wfw:commentRss>https://michaelckennedy.wordpress.com/2016/02/16/im-building-20-online-python-courses-and-i-need-your-help-video-course-library-announced/feed/</wfw:commentRss>
			<slash:comments>23</slash:comments>
		
		
		
		<media:thumbnail url="https://michaelckennedy.wordpress.com/wp-content/uploads/2016/02/python-jumpstart-plain.png" />
		<media:content url="https://michaelckennedy.wordpress.com/wp-content/uploads/2016/02/python-jumpstart-plain.png" medium="image">
			<media:title type="html">python-jumpstart-plain</media:title>
		</media:content>

		<media:content url="https://0.gravatar.com/avatar/0c39b1af51635a37bd212fc71e854db94323bbdfdeb53bfbc9bc34d26620b8eb?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">michaelckennedy</media:title>
		</media:content>

		<media:content url="https://michaelckennedy.wordpress.com/wp-content/uploads/2016/02/python-jumpstart-feature1.jpg?w=2720" medium="image">
			<media:title type="html">python-jumpstart-feature</media:title>
		</media:content>

		<media:content url="https://michaelckennedy.wordpress.com/wp-content/uploads/2016/02/kickstarter-logo-light.png" medium="image">
			<media:title type="html">kickstarter-logo-light</media:title>
		</media:content>
	</item>
		<item>
		<title>9 reasons you should be using PyCharm</title>
		<link>https://michaelckennedy.wordpress.com/2015/11/19/9-reasons-you-should-be-using-pycharm/</link>
					<comments>https://michaelckennedy.wordpress.com/2015/11/19/9-reasons-you-should-be-using-pycharm/#comments</comments>
		
		<dc:creator><![CDATA[Michael Kennedy]]></dc:creator>
		<pubDate>Thu, 19 Nov 2015 14:02:36 +0000</pubDate>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Talk Python To Me Podcast]]></category>
		<guid isPermaLink="false">http://blog.michaelckennedy.net/?p=1554</guid>

					<description><![CDATA[On my podcast, Talk Python To Me, I&#8217;m working on an episode highlighting PyCharm, the amazing IDE from JetBrains. Here&#8217;s a blog post to accompany that episode. Update: Listen to the podcast interview with the PyCharm guys. Many developers, especially in open source ecosystems such as Python and Ruby, or Linux-based web environments in general, [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>On my podcast, <a href="http://talkpython.fm/" target="_blank">Talk Python To Me</a>, I&#8217;m working on an episode highlighting <a href="https://www.jetbrains.com/pycharm/" target="_blank">PyCharm</a>, the amazing IDE from JetBrains. Here&#8217;s a blog post to accompany that episode.</p>
<p>Update: Listen to <a href="http://talkpython.fm/episodes/show/36/python-ides-with-the-pycharm-team" target="_blank">the podcast interview with the PyCharm guys</a>.</p>
<p>Many developers, especially in open source ecosystems such as Python and Ruby, or Linux-based web environments in general, tend towards the minimalist with regard to editors. This includes editors such as Emacs and VIM but I&#8217;d also throw in more UI based text editors such as Sublime Text, Notepad++, etc.</p>
<p>In some ways this makes perfect sense. If you spend a decent amount of time SSH&#8217;ed into Linux boxes in your data center, well GUI apps such as IDEs make little sense. If you&#8217;re doing open source, maybe you are looking for something non-commercial and free. Again, totally reasonable.</p>
<p><span id="more-1554"></span>But the truth is, as professional developers, we spend most of our time on GUI-based OSes. Our time and effectiveness are extremely valuable.</p>
<p>Specifically for Python devs, I think we should be using the best tools that help us create but also read, test, maintain, and evolve the software we build. To me, the best software for this holistic purpose, is PyCharm. But often the conversation goes, &#8220;What feature makes using a big, heavyweight IDE that costs $200 worth it? I&#8217;ll just use Emacs&#8221; or something along those lines.</p>
<p>There probably isn&#8217;t a single reason that works for many people. Rather it&#8217;s the sum of all the features as a whole. Moreover, these only become a benefit once you take the time to truly learn them and leverage them without the features getting in the way.</p>
<p>So in this post, here are 9 of my favorite features of PyCharm which taken, in total, build a pretty serious case for giving PyCharm a chance. If your current workflow involves more pure text editors such as Emacs or Sublime Text, take a moment to see PyCharm with an open mind.</p>
<p>Finally, if you&#8217;re skeptical of this opinion and you think to yourself, &#8220;Here&#8217;s just another guy dependent on GUIs to write code. How weak. I don&#8217;t need that.&#8221; I should say that I spent several years writing C++ with Emacs on SGI supercomputers to great effect. So I have spent some time on both sides of the fence. For me, the grass is greener on this side.</p>
<p>Ok. Here they are: 9 reasons to consider making PyCharm your primary editor to write Python code. I could easily make this 25 but let&#8217;s start here.</p>
<h2>1. Code completion</h2>
<p><a href="https://michaelckennedy.wordpress.com/wp-content/uploads/2015/11/basic-intellisense.png" target="_blank"><img loading="lazy" data-attachment-id="1600" data-permalink="https://michaelckennedy.wordpress.com/2015/11/19/9-reasons-you-should-be-using-pycharm/basic-intellisense/" data-orig-file="https://michaelckennedy.wordpress.com/wp-content/uploads/2015/11/basic-intellisense.png" data-orig-size="1096,294" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="basic-intellisense" data-image-description="" data-image-caption="" data-medium-file="https://michaelckennedy.wordpress.com/wp-content/uploads/2015/11/basic-intellisense.png?w=300" data-large-file="https://michaelckennedy.wordpress.com/wp-content/uploads/2015/11/basic-intellisense.png?w=970" class="alignnone size-full wp-image-1600" src="https://michaelckennedy.wordpress.com/wp-content/uploads/2015/11/basic-intellisense.png" alt="basic-intellisense.png" width="1096" height="294" srcset="https://michaelckennedy.wordpress.com/wp-content/uploads/2015/11/basic-intellisense.png 1096w, https://michaelckennedy.wordpress.com/wp-content/uploads/2015/11/basic-intellisense.png?w=150&amp;h=40 150w, https://michaelckennedy.wordpress.com/wp-content/uploads/2015/11/basic-intellisense.png?w=300&amp;h=80 300w, https://michaelckennedy.wordpress.com/wp-content/uploads/2015/11/basic-intellisense.png?w=768&amp;h=206 768w, https://michaelckennedy.wordpress.com/wp-content/uploads/2015/11/basic-intellisense.png?w=1024&amp;h=275 1024w" sizes="(max-width: 1096px) 100vw, 1096px" /></a></p>
<p>PyCharm has great code completion, whether it&#8217;s for a built-in or an external package.</p>
<p>I know I said it&#8217;s the sum total of features that make PyCharm worth it. Personally, I think great intellisense / code completion may be a single feature which alone wins me over. I have to deal with minor RSI issues and the amount of code I type vs the amount of code created by the tooling with good code completion really does make a big difference in both speed and health.</p>
<h2>Python 3.5&#8217;s Type Hinting</h2>
<p><a href="https://michaelckennedy.wordpress.com/wp-content/uploads/2015/11/pycharm-type-hints1.png" target="_blank"><img loading="lazy" data-attachment-id="1602" data-permalink="https://michaelckennedy.wordpress.com/2015/11/19/9-reasons-you-should-be-using-pycharm/pycharm-type-hints-2/" data-orig-file="https://michaelckennedy.wordpress.com/wp-content/uploads/2015/11/pycharm-type-hints1.png" data-orig-size="1300,1031" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="pycharm-type-hints" data-image-description="" data-image-caption="" data-medium-file="https://michaelckennedy.wordpress.com/wp-content/uploads/2015/11/pycharm-type-hints1.png?w=300" data-large-file="https://michaelckennedy.wordpress.com/wp-content/uploads/2015/11/pycharm-type-hints1.png?w=970" class="alignnone size-full wp-image-1602" src="https://michaelckennedy.wordpress.com/wp-content/uploads/2015/11/pycharm-type-hints1.png" alt="pycharm-type-hints.png" width="1300" height="1031" srcset="https://michaelckennedy.wordpress.com/wp-content/uploads/2015/11/pycharm-type-hints1.png 1300w, https://michaelckennedy.wordpress.com/wp-content/uploads/2015/11/pycharm-type-hints1.png?w=150&amp;h=119 150w, https://michaelckennedy.wordpress.com/wp-content/uploads/2015/11/pycharm-type-hints1.png?w=300&amp;h=238 300w, https://michaelckennedy.wordpress.com/wp-content/uploads/2015/11/pycharm-type-hints1.png?w=768&amp;h=609 768w, https://michaelckennedy.wordpress.com/wp-content/uploads/2015/11/pycharm-type-hints1.png?w=1024&amp;h=812 1024w" sizes="(max-width: 1300px) 100vw, 1300px" /></a></p>
<p>If code completion fails you, type hints (as in <strong>episode_id: int</strong> ) will turn it right back on. Notice the dropdown lists methods from the int class.</p>
<h2>Code completion for SQL and databases</h2>
<p><a href="https://michaelckennedy.wordpress.com/wp-content/uploads/2015/11/sql-completiong-within-strings1.png" target="_blank"><img loading="lazy" data-attachment-id="1603" data-permalink="https://michaelckennedy.wordpress.com/2015/11/19/9-reasons-you-should-be-using-pycharm/sql-completiong-within-strings-2/" data-orig-file="https://michaelckennedy.wordpress.com/wp-content/uploads/2015/11/sql-completiong-within-strings1.png" data-orig-size="1346,800" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="sql-completiong-within-strings" data-image-description="" data-image-caption="" data-medium-file="https://michaelckennedy.wordpress.com/wp-content/uploads/2015/11/sql-completiong-within-strings1.png?w=300" data-large-file="https://michaelckennedy.wordpress.com/wp-content/uploads/2015/11/sql-completiong-within-strings1.png?w=970" class="alignnone size-full wp-image-1603" src="https://michaelckennedy.wordpress.com/wp-content/uploads/2015/11/sql-completiong-within-strings1.png" alt="sql-completiong-within-strings.png" width="1346" height="800" srcset="https://michaelckennedy.wordpress.com/wp-content/uploads/2015/11/sql-completiong-within-strings1.png 1346w, https://michaelckennedy.wordpress.com/wp-content/uploads/2015/11/sql-completiong-within-strings1.png?w=150&amp;h=89 150w, https://michaelckennedy.wordpress.com/wp-content/uploads/2015/11/sql-completiong-within-strings1.png?w=300&amp;h=178 300w, https://michaelckennedy.wordpress.com/wp-content/uploads/2015/11/sql-completiong-within-strings1.png?w=768&amp;h=456 768w, https://michaelckennedy.wordpress.com/wp-content/uploads/2015/11/sql-completiong-within-strings1.png?w=1024&amp;h=609 1024w" sizes="(max-width: 1346px) 100vw, 1346px" /></a></p>
<p>Look carefully at the image above. That is a basic string literal but PyCharm has determined that it is likely a SQL expression so turns on syntax highlighting and code completion for language keywords (WHERE, FROM, etc).</p>
<p>Moreover, I have attached my SQLite DB to the project. PyCharm is suggesting database schema specific options! O. M. G. is what I thought when I first saw that. Because of the FROM Episodes, it knows that the SELECT clause should be columns from that table.</p>
<p>Just wow. Think of the time and effort as well as avoidance of bugs this will help you with.</p>
<h2>SQLAlchemy in the debugger</h2>
<p><a href="https://michaelckennedy.wordpress.com/wp-content/uploads/2015/11/sqlalchemy-to-sql-in-debugger-annotated.png" target="_blank"><img loading="lazy" data-attachment-id="1605" data-permalink="https://michaelckennedy.wordpress.com/2015/11/19/9-reasons-you-should-be-using-pycharm/sqlalchemy-to-sql-in-debugger-annotated/" data-orig-file="https://michaelckennedy.wordpress.com/wp-content/uploads/2015/11/sqlalchemy-to-sql-in-debugger-annotated.png" data-orig-size="1996,298" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="sqlalchemy-to-sql-in-debugger-annotated" data-image-description="" data-image-caption="" data-medium-file="https://michaelckennedy.wordpress.com/wp-content/uploads/2015/11/sqlalchemy-to-sql-in-debugger-annotated.png?w=300" data-large-file="https://michaelckennedy.wordpress.com/wp-content/uploads/2015/11/sqlalchemy-to-sql-in-debugger-annotated.png?w=970" class="alignnone size-full wp-image-1605" src="https://michaelckennedy.wordpress.com/wp-content/uploads/2015/11/sqlalchemy-to-sql-in-debugger-annotated.png" alt="sqlalchemy-to-sql-in-debugger-annotated.png" width="1996" height="298" srcset="https://michaelckennedy.wordpress.com/wp-content/uploads/2015/11/sqlalchemy-to-sql-in-debugger-annotated.png 1996w, https://michaelckennedy.wordpress.com/wp-content/uploads/2015/11/sqlalchemy-to-sql-in-debugger-annotated.png?w=150&amp;h=22 150w, https://michaelckennedy.wordpress.com/wp-content/uploads/2015/11/sqlalchemy-to-sql-in-debugger-annotated.png?w=300&amp;h=45 300w, https://michaelckennedy.wordpress.com/wp-content/uploads/2015/11/sqlalchemy-to-sql-in-debugger-annotated.png?w=768&amp;h=115 768w, https://michaelckennedy.wordpress.com/wp-content/uploads/2015/11/sqlalchemy-to-sql-in-debugger-annotated.png?w=1024&amp;h=153 1024w" sizes="(max-width: 1996px) 100vw, 1996px" /></a></p>
<p>Set a breakpoint, pause in the debugger and you&#8217;ll see the SQL language representation of your SQLAlchemy ORM expression. Yeah, that&#8217;s amazing.</p>
<p>I think this is really just part of the string representation of SQLAlchemy ORM expression, but I don&#8217;t care because it&#8217;s so helpful!</p>
<h2>Git visualization in the editor</h2>
<p><a href="https://michaelckennedy.wordpress.com/wp-content/uploads/2015/11/inline-git-change-visualization.png" target="_blank"><img loading="lazy" data-attachment-id="1607" data-permalink="https://michaelckennedy.wordpress.com/2015/11/19/9-reasons-you-should-be-using-pycharm/inline-git-change-visualization/" data-orig-file="https://michaelckennedy.wordpress.com/wp-content/uploads/2015/11/inline-git-change-visualization.png" data-orig-size="1394,736" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="inline-git-change-visualization" data-image-description="" data-image-caption="" data-medium-file="https://michaelckennedy.wordpress.com/wp-content/uploads/2015/11/inline-git-change-visualization.png?w=300" data-large-file="https://michaelckennedy.wordpress.com/wp-content/uploads/2015/11/inline-git-change-visualization.png?w=970" class="alignnone size-full wp-image-1607" src="https://michaelckennedy.wordpress.com/wp-content/uploads/2015/11/inline-git-change-visualization.png" alt="inline-git-change-visualization.png" width="1394" height="736" srcset="https://michaelckennedy.wordpress.com/wp-content/uploads/2015/11/inline-git-change-visualization.png 1394w, https://michaelckennedy.wordpress.com/wp-content/uploads/2015/11/inline-git-change-visualization.png?w=150&amp;h=79 150w, https://michaelckennedy.wordpress.com/wp-content/uploads/2015/11/inline-git-change-visualization.png?w=300&amp;h=158 300w, https://michaelckennedy.wordpress.com/wp-content/uploads/2015/11/inline-git-change-visualization.png?w=768&amp;h=405 768w, https://michaelckennedy.wordpress.com/wp-content/uploads/2015/11/inline-git-change-visualization.png?w=1024&amp;h=541 1024w" sizes="(max-width: 1394px) 100vw, 1394px" /></a></p>
<p>Wondering what is changed since the last time you did a git commit? Well that would be the blue sections right there! Can even get a diff of that segment or roll it back from within the editor.</p>
<p>Here&#8217;s the same file after I checked in the changes:</p>
<p><a href="https://michaelckennedy.wordpress.com/wp-content/uploads/2015/11/inline-git-change-visualization-after.png" target="_blank"><img loading="lazy" data-attachment-id="1608" data-permalink="https://michaelckennedy.wordpress.com/2015/11/19/9-reasons-you-should-be-using-pycharm/inline-git-change-visualization-after/" data-orig-file="https://michaelckennedy.wordpress.com/wp-content/uploads/2015/11/inline-git-change-visualization-after.png" data-orig-size="1398,738" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="inline-git-change-visualization-after" data-image-description="" data-image-caption="" data-medium-file="https://michaelckennedy.wordpress.com/wp-content/uploads/2015/11/inline-git-change-visualization-after.png?w=300" data-large-file="https://michaelckennedy.wordpress.com/wp-content/uploads/2015/11/inline-git-change-visualization-after.png?w=970" class="alignnone size-full wp-image-1608" src="https://michaelckennedy.wordpress.com/wp-content/uploads/2015/11/inline-git-change-visualization-after.png" alt="inline-git-change-visualization-after.png" width="1398" height="738" srcset="https://michaelckennedy.wordpress.com/wp-content/uploads/2015/11/inline-git-change-visualization-after.png 1398w, https://michaelckennedy.wordpress.com/wp-content/uploads/2015/11/inline-git-change-visualization-after.png?w=150&amp;h=79 150w, https://michaelckennedy.wordpress.com/wp-content/uploads/2015/11/inline-git-change-visualization-after.png?w=300&amp;h=158 300w, https://michaelckennedy.wordpress.com/wp-content/uploads/2015/11/inline-git-change-visualization-after.png?w=768&amp;h=405 768w, https://michaelckennedy.wordpress.com/wp-content/uploads/2015/11/inline-git-change-visualization-after.png?w=1024&amp;h=541 1024w" sizes="(max-width: 1398px) 100vw, 1398px" /></a></p>
<h2>Code coverage in the editor</h2>
<p><a href="https://michaelckennedy.wordpress.com/wp-content/uploads/2015/11/code-coverage-in-editor.png" target="_blank"><em><img loading="lazy" data-attachment-id="1610" data-permalink="https://michaelckennedy.wordpress.com/2015/11/19/9-reasons-you-should-be-using-pycharm/code-coverage-in-editor/" data-orig-file="https://michaelckennedy.wordpress.com/wp-content/uploads/2015/11/code-coverage-in-editor.png" data-orig-size="2868,1560" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="code-coverage-in-editor" data-image-description="" data-image-caption="" data-medium-file="https://michaelckennedy.wordpress.com/wp-content/uploads/2015/11/code-coverage-in-editor.png?w=300" data-large-file="https://michaelckennedy.wordpress.com/wp-content/uploads/2015/11/code-coverage-in-editor.png?w=970" class="alignnone size-full wp-image-1610" src="https://michaelckennedy.wordpress.com/wp-content/uploads/2015/11/code-coverage-in-editor.png" alt="code-coverage-in-editor.png" width="2868" height="1560" srcset="https://michaelckennedy.wordpress.com/wp-content/uploads/2015/11/code-coverage-in-editor.png 2868w, https://michaelckennedy.wordpress.com/wp-content/uploads/2015/11/code-coverage-in-editor.png?w=150&amp;h=82 150w, https://michaelckennedy.wordpress.com/wp-content/uploads/2015/11/code-coverage-in-editor.png?w=300&amp;h=163 300w, https://michaelckennedy.wordpress.com/wp-content/uploads/2015/11/code-coverage-in-editor.png?w=768&amp;h=418 768w, https://michaelckennedy.wordpress.com/wp-content/uploads/2015/11/code-coverage-in-editor.png?w=1024&amp;h=557 1024w" sizes="(max-width: 2868px) 100vw, 2868px" /></em></a></p>
<p>Yes, you can run coverage.py outside of PyCharm. But please click that image above and look around. The code coverage details are everywhere &#8211; in the project tree, in the summary, in the editor and more.</p>
<p>Now zoom in. See the greenish and redish parts in the margin? Those are the covered and not covered segments right in the editor!</p>
<p><a href="https://michaelckennedy.wordpress.com/wp-content/uploads/2015/11/code-coverage-in-editor-close.png" target="_blank"><img loading="lazy" data-attachment-id="1613" data-permalink="https://michaelckennedy.wordpress.com/2015/11/19/9-reasons-you-should-be-using-pycharm/code-coverage-in-editor-close/" data-orig-file="https://michaelckennedy.wordpress.com/wp-content/uploads/2015/11/code-coverage-in-editor-close.png" data-orig-size="942,358" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="code-coverage-in-editor-close" data-image-description="" data-image-caption="" data-medium-file="https://michaelckennedy.wordpress.com/wp-content/uploads/2015/11/code-coverage-in-editor-close.png?w=300" data-large-file="https://michaelckennedy.wordpress.com/wp-content/uploads/2015/11/code-coverage-in-editor-close.png?w=942" class="alignnone size-full wp-image-1613" src="https://michaelckennedy.wordpress.com/wp-content/uploads/2015/11/code-coverage-in-editor-close.png" alt="code-coverage-in-editor-close.png" width="942" height="358" srcset="https://michaelckennedy.wordpress.com/wp-content/uploads/2015/11/code-coverage-in-editor-close.png 942w, https://michaelckennedy.wordpress.com/wp-content/uploads/2015/11/code-coverage-in-editor-close.png?w=150&amp;h=57 150w, https://michaelckennedy.wordpress.com/wp-content/uploads/2015/11/code-coverage-in-editor-close.png?w=300&amp;h=114 300w, https://michaelckennedy.wordpress.com/wp-content/uploads/2015/11/code-coverage-in-editor-close.png?w=768&amp;h=292 768w" sizes="(max-width: 942px) 100vw, 942px" /></a></p>
<h2>Package management</h2>
<p><a href="https://michaelckennedy.wordpress.com/wp-content/uploads/2015/11/package-management.png" target="_blank"><img loading="lazy" data-attachment-id="1614" data-permalink="https://michaelckennedy.wordpress.com/2015/11/19/9-reasons-you-should-be-using-pycharm/package-management/" data-orig-file="https://michaelckennedy.wordpress.com/wp-content/uploads/2015/11/package-management.png" data-orig-size="2062,1342" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="package-management" data-image-description="" data-image-caption="" data-medium-file="https://michaelckennedy.wordpress.com/wp-content/uploads/2015/11/package-management.png?w=300" data-large-file="https://michaelckennedy.wordpress.com/wp-content/uploads/2015/11/package-management.png?w=970" class="alignnone size-full wp-image-1614" src="https://michaelckennedy.wordpress.com/wp-content/uploads/2015/11/package-management.png" alt="package-management.png" width="2062" height="1342" srcset="https://michaelckennedy.wordpress.com/wp-content/uploads/2015/11/package-management.png 2062w, https://michaelckennedy.wordpress.com/wp-content/uploads/2015/11/package-management.png?w=150&amp;h=98 150w, https://michaelckennedy.wordpress.com/wp-content/uploads/2015/11/package-management.png?w=300&amp;h=195 300w, https://michaelckennedy.wordpress.com/wp-content/uploads/2015/11/package-management.png?w=768&amp;h=500 768w, https://michaelckennedy.wordpress.com/wp-content/uploads/2015/11/package-management.png?w=1024&amp;h=666 1024w" sizes="(max-width: 2062px) 100vw, 2062px" /></a></p>
<p>Yes, we can all use pip. But a nice visual representation of what&#8217;s installed, whether it&#8217;s current, and ability to search and add new packages is sweet.</p>
<h2>Local history</h2>
<h2><a href="https://michaelckennedy.wordpress.com/wp-content/uploads/2015/11/local-history.png" target="_blank"><img loading="lazy" data-attachment-id="1616" data-permalink="https://michaelckennedy.wordpress.com/2015/11/19/9-reasons-you-should-be-using-pycharm/local-history/" data-orig-file="https://michaelckennedy.wordpress.com/wp-content/uploads/2015/11/local-history.png" data-orig-size="1554,790" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="local-history" data-image-description="" data-image-caption="" data-medium-file="https://michaelckennedy.wordpress.com/wp-content/uploads/2015/11/local-history.png?w=300" data-large-file="https://michaelckennedy.wordpress.com/wp-content/uploads/2015/11/local-history.png?w=970" class="alignnone size-full wp-image-1616" src="https://michaelckennedy.wordpress.com/wp-content/uploads/2015/11/local-history.png" alt="local-history.png" width="1554" height="790" srcset="https://michaelckennedy.wordpress.com/wp-content/uploads/2015/11/local-history.png 1554w, https://michaelckennedy.wordpress.com/wp-content/uploads/2015/11/local-history.png?w=150&amp;h=76 150w, https://michaelckennedy.wordpress.com/wp-content/uploads/2015/11/local-history.png?w=300&amp;h=153 300w, https://michaelckennedy.wordpress.com/wp-content/uploads/2015/11/local-history.png?w=768&amp;h=390 768w, https://michaelckennedy.wordpress.com/wp-content/uploads/2015/11/local-history.png?w=1024&amp;h=521 1024w" sizes="(max-width: 1554px) 100vw, 1554px" /></a></h2>
<p>I sure hope you&#8217;re using source control. But even if you are, local history is always keeping track of your changes in a way that complements things like Git. Need to roll something back even if it&#8217;s not part of a check in? Local history is always there.</p>
<p>Here&#8217;s a diff of a file where the changes between the two versions were not checked in.</p>
<p><a href="https://michaelckennedy.wordpress.com/wp-content/uploads/2015/11/local-history-diff.png" target="_blank"><img loading="lazy" data-attachment-id="1618" data-permalink="https://michaelckennedy.wordpress.com/2015/11/19/9-reasons-you-should-be-using-pycharm/local-history-diff/" data-orig-file="https://michaelckennedy.wordpress.com/wp-content/uploads/2015/11/local-history-diff.png" data-orig-size="2236,844" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="local-history-diff" data-image-description="" data-image-caption="" data-medium-file="https://michaelckennedy.wordpress.com/wp-content/uploads/2015/11/local-history-diff.png?w=300" data-large-file="https://michaelckennedy.wordpress.com/wp-content/uploads/2015/11/local-history-diff.png?w=970" class="alignnone size-full wp-image-1618" src="https://michaelckennedy.wordpress.com/wp-content/uploads/2015/11/local-history-diff.png" alt="local-history-diff.png" width="2236" height="844" srcset="https://michaelckennedy.wordpress.com/wp-content/uploads/2015/11/local-history-diff.png 2236w, https://michaelckennedy.wordpress.com/wp-content/uploads/2015/11/local-history-diff.png?w=150&amp;h=57 150w, https://michaelckennedy.wordpress.com/wp-content/uploads/2015/11/local-history-diff.png?w=300&amp;h=113 300w, https://michaelckennedy.wordpress.com/wp-content/uploads/2015/11/local-history-diff.png?w=768&amp;h=290 768w, https://michaelckennedy.wordpress.com/wp-content/uploads/2015/11/local-history-diff.png?w=1024&amp;h=387 1024w" sizes="(max-width: 2236px) 100vw, 2236px" /></a></p>
<h2>Refactoring</h2>
<p><a href="https://michaelckennedy.wordpress.com/wp-content/uploads/2015/11/project-wide-refactoring.png" target="_blank"><img loading="lazy" data-attachment-id="1620" data-permalink="https://michaelckennedy.wordpress.com/2015/11/19/9-reasons-you-should-be-using-pycharm/project-wide-refactoring/" data-orig-file="https://michaelckennedy.wordpress.com/wp-content/uploads/2015/11/project-wide-refactoring.png" data-orig-size="1068,630" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="project-wide-refactoring" data-image-description="" data-image-caption="" data-medium-file="https://michaelckennedy.wordpress.com/wp-content/uploads/2015/11/project-wide-refactoring.png?w=300" data-large-file="https://michaelckennedy.wordpress.com/wp-content/uploads/2015/11/project-wide-refactoring.png?w=970" class="alignnone size-full wp-image-1620" src="https://michaelckennedy.wordpress.com/wp-content/uploads/2015/11/project-wide-refactoring.png" alt="project-wide-refactoring.png" width="1068" height="630" srcset="https://michaelckennedy.wordpress.com/wp-content/uploads/2015/11/project-wide-refactoring.png 1068w, https://michaelckennedy.wordpress.com/wp-content/uploads/2015/11/project-wide-refactoring.png?w=150&amp;h=88 150w, https://michaelckennedy.wordpress.com/wp-content/uploads/2015/11/project-wide-refactoring.png?w=300&amp;h=177 300w, https://michaelckennedy.wordpress.com/wp-content/uploads/2015/11/project-wide-refactoring.png?w=768&amp;h=453 768w, https://michaelckennedy.wordpress.com/wp-content/uploads/2015/11/project-wide-refactoring.png?w=1024&amp;h=604 1024w" sizes="(max-width: 1068px) 100vw, 1068px" /></a></p>
<p>Last, but not least, the ability to make changes consistently and safely across 100&#8217;s of files by understanding the syntax tree (rather than text replace) is a primary reason to use an IDE in general and PyCharm in particular.</p>
<h2>Conclusion</h2>
<p>There you have it. Taken in total, those are some seriously powerful features. Check out PyCharm. They have free community editions, and the pro version is free for open source, students, and training.</p>
<p>Feel free to share your thoughts in the comments.</p>
<p>Thanks,<br />
<a href="https://twitter.com/mkennedy" target="_blank">@mkennedy</a></p>
]]></content:encoded>
					
					<wfw:commentRss>https://michaelckennedy.wordpress.com/2015/11/19/9-reasons-you-should-be-using-pycharm/feed/</wfw:commentRss>
			<slash:comments>24</slash:comments>
		
		
		
		<media:thumbnail url="https://michaelckennedy.wordpress.com/wp-content/uploads/2015/11/why-pycharm-cover-image.png" />
		<media:content url="https://michaelckennedy.wordpress.com/wp-content/uploads/2015/11/why-pycharm-cover-image.png" medium="image">
			<media:title type="html">why-pycharm-cover-image</media:title>
		</media:content>

		<media:content url="https://0.gravatar.com/avatar/0c39b1af51635a37bd212fc71e854db94323bbdfdeb53bfbc9bc34d26620b8eb?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">michaelckennedy</media:title>
		</media:content>

		<media:content url="https://michaelckennedy.wordpress.com/wp-content/uploads/2015/11/basic-intellisense.png" medium="image">
			<media:title type="html">basic-intellisense.png</media:title>
		</media:content>

		<media:content url="https://michaelckennedy.wordpress.com/wp-content/uploads/2015/11/pycharm-type-hints1.png" medium="image">
			<media:title type="html">pycharm-type-hints.png</media:title>
		</media:content>

		<media:content url="https://michaelckennedy.wordpress.com/wp-content/uploads/2015/11/sql-completiong-within-strings1.png" medium="image">
			<media:title type="html">sql-completiong-within-strings.png</media:title>
		</media:content>

		<media:content url="https://michaelckennedy.wordpress.com/wp-content/uploads/2015/11/sqlalchemy-to-sql-in-debugger-annotated.png" medium="image">
			<media:title type="html">sqlalchemy-to-sql-in-debugger-annotated.png</media:title>
		</media:content>

		<media:content url="https://michaelckennedy.wordpress.com/wp-content/uploads/2015/11/inline-git-change-visualization.png" medium="image">
			<media:title type="html">inline-git-change-visualization.png</media:title>
		</media:content>

		<media:content url="https://michaelckennedy.wordpress.com/wp-content/uploads/2015/11/inline-git-change-visualization-after.png" medium="image">
			<media:title type="html">inline-git-change-visualization-after.png</media:title>
		</media:content>

		<media:content url="https://michaelckennedy.wordpress.com/wp-content/uploads/2015/11/code-coverage-in-editor.png" medium="image">
			<media:title type="html">code-coverage-in-editor.png</media:title>
		</media:content>

		<media:content url="https://michaelckennedy.wordpress.com/wp-content/uploads/2015/11/code-coverage-in-editor-close.png" medium="image">
			<media:title type="html">code-coverage-in-editor-close.png</media:title>
		</media:content>

		<media:content url="https://michaelckennedy.wordpress.com/wp-content/uploads/2015/11/package-management.png" medium="image">
			<media:title type="html">package-management.png</media:title>
		</media:content>

		<media:content url="https://michaelckennedy.wordpress.com/wp-content/uploads/2015/11/local-history.png" medium="image">
			<media:title type="html">local-history.png</media:title>
		</media:content>

		<media:content url="https://michaelckennedy.wordpress.com/wp-content/uploads/2015/11/local-history-diff.png" medium="image">
			<media:title type="html">local-history-diff.png</media:title>
		</media:content>

		<media:content url="https://michaelckennedy.wordpress.com/wp-content/uploads/2015/11/project-wide-refactoring.png" medium="image">
			<media:title type="html">project-wide-refactoring.png</media:title>
		</media:content>
	</item>
		<item>
		<title>Land your first Python software development job on Talk Python</title>
		<link>https://michaelckennedy.wordpress.com/2015/11/18/land-your-first-python-software-development-job-on-talk-python-to-me-podcast/</link>
					<comments>https://michaelckennedy.wordpress.com/2015/11/18/land-your-first-python-software-development-job-on-talk-python-to-me-podcast/#respond</comments>
		
		<dc:creator><![CDATA[Michael Kennedy]]></dc:creator>
		<pubDate>Wed, 18 Nov 2015 09:06:22 +0000</pubDate>
				<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Talk Python To Me Podcast]]></category>
		<guid isPermaLink="false">http://blog.michaelckennedy.net/?p=1558</guid>

					<description><![CDATA[I&#8217;m looking for a handful of people to put together a unique episode of my podcast Talk Python To Me. Can you help? There are two groups of people who I&#8217;m looking to spend 10 minutes talking with: Newly hired Python developers: Did you just get your first job as a Python developer (within the [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>I&#8217;m looking for a handful of people to put together a unique episode of my podcast <a href="http://talkpython.fm/" target="_blank">Talk Python To Me</a>. Can you help?</p>
<p>There are two groups of people who I&#8217;m looking to spend 10 minutes talking with:</p>
<ol>
<li><strong>Newly hired Python developers</strong>: Did you just get your first job as a Python developer (within the past year)? Would you spend 10 minutes on the show (audio) talking about how you learned Python and how software development as well as how you got your first gig?</li>
<li><strong>Technical leaders responsible for hiring Python developers</strong>:  Are you responsible for interviewing or hiring Python developers at your company? Would you spend 10 minutes on the show (audio) talking about what you look for and give some recommendations on how aspiring / new developers can build the right skills and experience to land their first job?</li>
</ol>
<p>What do you say? Can you be part of the show and help a lot of new developers find the right path?</p>
<p>Contact me via the show contact email here:</p>
<p><a href="http://talkpython.fm/home/contact" target="_blank">http://talkpython.fm/home/contact</a></p>
<p>If this doesn&#8217;t describe you, but you know a new developer or tech leader who does, please forward this to them. If you want to participate but are unsure whether your company &#8220;approves&#8221; of this type of exposure, you can participate anonymously.</p>
<p>This project is expected to run over the last part of November, first part of December 2015.</p>
<p>Thanks in advance!<br />
<a href="twitter.com/mkennedy" target="_blank">@mkennedy</a></p>
]]></content:encoded>
					
					<wfw:commentRss>https://michaelckennedy.wordpress.com/2015/11/18/land-your-first-python-software-development-job-on-talk-python-to-me-podcast/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		
		<media:thumbnail url="https://michaelckennedy.wordpress.com/wp-content/uploads/2015/11/talkpythonplain.jpg" />
		<media:content url="https://michaelckennedy.wordpress.com/wp-content/uploads/2015/11/talkpythonplain.jpg" medium="image">
			<media:title type="html">talkpythonplain</media:title>
		</media:content>

		<media:content url="https://0.gravatar.com/avatar/0c39b1af51635a37bd212fc71e854db94323bbdfdeb53bfbc9bc34d26620b8eb?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">michaelckennedy</media:title>
		</media:content>
	</item>
		<item>
		<title>Announcing Cache-Tier Python File Server on GitHub</title>
		<link>https://michaelckennedy.wordpress.com/2015/08/14/announcing-cache-tier-python-file-server-on-github/</link>
					<comments>https://michaelckennedy.wordpress.com/2015/08/14/announcing-cache-tier-python-file-server-on-github/#comments</comments>
		
		<dc:creator><![CDATA[Michael Kennedy]]></dc:creator>
		<pubDate>Fri, 14 Aug 2015 13:50:19 +0000</pubDate>
				<category><![CDATA[Open Source]]></category>
		<category><![CDATA[GitHub]]></category>
		<category><![CDATA[Podcast]]></category>
		<category><![CDATA[Python]]></category>
		<guid isPermaLink="false">http://blog.michaelckennedy.net/?p=1521</guid>

					<description><![CDATA[About a month ago I decided to move the audio traffic (MP3&#8217;s, etc.) for my podcast Talk Python To Me. I realized that while I had been using Amazon S3 to deliver the files and it was working wonderfully in terms of delivery, it was getting expensive. There are other hosting platforms that will let [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>About a month ago I decided to move the audio traffic (MP3&#8217;s, etc.) for my podcast <a href="http://talkpython.fm/" target="_blank">Talk Python To Me</a>. I realized that while I had been using Amazon S3 to deliver the files and it was working wonderfully in terms of delivery, it was getting expensive. There are other hosting platforms that will let me spin up a Linux server and deliver the files from that server at a much lower cost.<span id="more-1521"></span></p>
<p>But I had some reservations. First and foremost, I manage a lot of servers and thinking of keeping another one running was not appealing to me. Second, the audio stream of Talk Python is literally the lifeblood of Talk Python To Me and I owe it to both my listeners and sponsors to keep that flowing.</p>
<p>Towards this end, I have built a client (<a href="https://pypi.python.org/pypi/cache_tier" target="_blank">on PyPI</a>) and server (in Python 3 using Flask). The client has the property that if it ever detects a problem with the cache server it will automatically switch back to serving from the source location. In my example, if the cache server has issues it will fall back to serving files directly out of S3. This gave me enough confidence to not worry about depending on yet another layer / tier.</p>
<p>Moreover, the server is super easy to setup and is built to automatically sync with the files that it needs to server from the source. So for example in my case, imagine the web server were trying to serve <strong>100_yay_show_one_hundred.mp3</strong> and that file existed in a preconfigured location on Amazon S3. The very first request to the cache tier would trigger the cache server to get it from S3 and all subsequent requests on the main website would detect the presence of this file in the caching tier and use the cache server rather than the more expensive S3.</p>
<p>You&#8217;ll notice I speak often of price. But we could just as well swap it for speed or reliability. Imaging you have a slow source server, this same setup would allow you to offload almost all the network traffic and serve it out of the (presumably) much faster cache server. Additionally, I have much more control over my own server and can get better analytics rather than just sending them off to S3.</p>
<p>This setup serves a tremendous amount of data without any glitches. When a new podcast episode is released, the actual network traffic hits around 900 Mbit/sec for several minutes. Yet the CPU load and memory usage remains very low, the latency of the web app is low, and things keep on serving.</p>
<h2>Introducing Cache Tier</h2>
<p>I call my project cache-tier. It&#8217;s of course open source on GitHub at:</p>
<p><a href="https://github.com/mikeckennedy/cache-tier" target="_blank">https://github.com/mikeckennedy/cache-tier</a></p>
<p>and you can get the client via pip:</p>
<pre> <strong> pip3 install cache-tier</strong></pre>
<p>It&#8217;s built for Python 3 but should be easily converted to Python 2 if there is interest.</p>
<p>You can read the steps to setup a bare Ubuntu server to run the server here:</p>
<p><a href="https://github.com/mikeckennedy/cache-tier/blob/master/docs/setup/setup-cache-tier-server.txt" target="_blank">https://github.com/mikeckennedy/cache-tier/blob/master/docs/setup/setup-cache-tier-server.txt</a></p>
<p>Create a new Ubuntu VM and follow along. You&#8217;ll be running in no time.</p>
<h2>Using the client</h2>
<p>The client code is on PyPI as cache-tier. To get started just pip install it:</p>
<pre> <strong> pip3 install cache-tier</strong></pre>
<p>Then you use it as follows.</p>
<p><img loading="lazy" data-attachment-id="1526" data-permalink="https://michaelckennedy.wordpress.com/2015/08/14/announcing-cache-tier-python-file-server-on-github/example-cache-tier-usage/" data-orig-file="https://michaelckennedy.wordpress.com/wp-content/uploads/2015/08/example-cache-tier-usage.png" data-orig-size="1228,896" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="example-cache-tier-usage" data-image-description="" data-image-caption="" data-medium-file="https://michaelckennedy.wordpress.com/wp-content/uploads/2015/08/example-cache-tier-usage.png?w=300" data-large-file="https://michaelckennedy.wordpress.com/wp-content/uploads/2015/08/example-cache-tier-usage.png?w=970" class="aligncenter size-large wp-image-1526" src="https://michaelckennedy.wordpress.com/wp-content/uploads/2015/08/example-cache-tier-usage.png?w=842" alt="example-cache-tier-usage" width="842" height="614" srcset="https://michaelckennedy.wordpress.com/wp-content/uploads/2015/08/example-cache-tier-usage.png?w=842 842w, https://michaelckennedy.wordpress.com/wp-content/uploads/2015/08/example-cache-tier-usage.png?w=150 150w, https://michaelckennedy.wordpress.com/wp-content/uploads/2015/08/example-cache-tier-usage.png?w=300 300w, https://michaelckennedy.wordpress.com/wp-content/uploads/2015/08/example-cache-tier-usage.png?w=768 768w, https://michaelckennedy.wordpress.com/wp-content/uploads/2015/08/example-cache-tier-usage.png?w=1024 1024w, https://michaelckennedy.wordpress.com/wp-content/uploads/2015/08/example-cache-tier-usage.png 1228w" sizes="(max-width: 842px) 100vw, 842px" /></p>
<p>Call <strong>verify_file(base_file_name)</strong> to check for a cached file as well as to trigger a sync if needed. If verify_file returns True it&#8217;s safe to send the user (via a 301 redirect) to the URL generated by <strong>build_download_url(base_file_name)</strong>.</p>
<h2>Configuring the server</h2>
<p>One possible deployment is to use nginx + uWSGI + the web app. This document describes the steps to set this up on Ubuntu:</p>
<p><a href="https://github.com/mikeckennedy/cache-tier/blob/master/docs/setup/setup-cache-tier-server.txt" target="_blank">https://github.com/mikeckennedy/cache-tier/blob/master/docs/setup/setup-cache-tier-server.txt</a></p>
<p>You will need to set a few settings. Change these two settings before the server-side will work correctly:</p>
<p>File: ./etc/nginx/sites-available/cache_tier_webapp<br />
Value: server_name downloads.<strong>YOURDOMAIN</strong>.com;</p>
<p>File: ./config_data/prod.json<br />
File: ./config_data/dev.json<br />
Value: <strong>download_base_url</strong>: &#8220;<a href="https://s3.amazonaws.com/" rel="nofollow">https://s3.amazonaws.com/</a><strong>USERNAME/BUCKET/FOLDER</strong>/&#8221;</p>
<p>(Note: Amazon S3 is just one option, any public HTTP file server would work)</p>
<p>&nbsp;</p>
]]></content:encoded>
					
					<wfw:commentRss>https://michaelckennedy.wordpress.com/2015/08/14/announcing-cache-tier-python-file-server-on-github/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
		
		<media:thumbnail url="https://michaelckennedy.wordpress.com/wp-content/uploads/2015/08/github-gray-2.jpg" />
		<media:content url="https://michaelckennedy.wordpress.com/wp-content/uploads/2015/08/github-gray-2.jpg" medium="image">
			<media:title type="html">github-gray-2</media:title>
		</media:content>

		<media:content url="https://0.gravatar.com/avatar/0c39b1af51635a37bd212fc71e854db94323bbdfdeb53bfbc9bc34d26620b8eb?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">michaelckennedy</media:title>
		</media:content>

		<media:content url="https://michaelckennedy.wordpress.com/wp-content/uploads/2015/08/example-cache-tier-usage.png?w=842" medium="image">
			<media:title type="html">example-cache-tier-usage</media:title>
		</media:content>
	</item>
		<item>
		<title>Come Learn Python and Be Part of Talk Python To Me!</title>
		<link>https://michaelckennedy.wordpress.com/2015/07/27/come-learn-python-and-be-part-of-talk-python-to-me/</link>
					<comments>https://michaelckennedy.wordpress.com/2015/07/27/come-learn-python-and-be-part-of-talk-python-to-me/#comments</comments>
		
		<dc:creator><![CDATA[Michael Kennedy]]></dc:creator>
		<pubDate>Tue, 28 Jul 2015 00:04:36 +0000</pubDate>
				<category><![CDATA[Talk Python To Me Podcast]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[User Groups]]></category>
		<guid isPermaLink="false">http://blog.michaelckennedy.net/?p=1516</guid>

					<description><![CDATA[Are you interested in learning Python? Well, my buddies from San Diego: Scott Reed, Brad Cunningham, and Ike Ellis from Crafting Bytes just started the Python edition of their Technology Immersion Group (SDTIG). And Talk Python To Me is going to be part of it! Listen to the opening interview before the show comes out [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Are you interested in learning Python? Well, my buddies from San Diego: <a href="https://twitter.com/mscottreed" target="_blank">Scott Reed</a>, <a href="https://twitter.com/Foovanadil" target="_blank">Brad Cunningham</a>, and <a href="https://twitter.com/ike_ellis" target="_blank">Ike Ellis</a> from <a href="http://www.craftingbytes.com/" target="_blank">Crafting Bytes</a> just started the Python edition of their Technology Immersion Group (<a href="http://www.meetup.com/San-Diego-Technology-Immersion-Group-SDTIG/" target="_blank">SDTIG</a>). And <a href="http://www.talkpythontome.com/" target="_blank">Talk Python To Me</a> is going to be part of it!</p>
<p>Listen to the opening interview before the show comes out right here:</p>
<p><code><iframe width="100%" height="166" scrolling="no" frameborder="no" src="https://w.soundcloud.com/player/?url=https%3A%2F%2Fsoundcloud.com%2Ftalkpython%2Fsneak-preview-sdtig-learns-python-opening-interview&width=false&height=false&auto_play=false&hide_related=false&visual=false&show_comments=false&color=false&show_user=false&show_reposts=false"></iframe></code></p>
<p>You might be thinking, but I don&#8217;t live in San Diego! Don&#8217;t worry, they have you covered! Every session over the next 6 months are being streamed live from the <a href="https://www.youtube.com/channel/UCM4g18nauWI2pAuaiC6bWgw" target="_blank">Crafting Bytes YouTube</a> channel:</p>
<p><a href="https://www.youtube.com/channel/UCM4g18nauWI2pAuaiC6bWgw" target="_blank">https://www.youtube.com/channel/UCM4g18nauWI2pAuaiC6bWgw</a></p>
<p>After the six months diving into Python, I&#8217;ll put out a before and after podcast episode that follows them through the whole journey. The first one is already in the past, but here&#8217;s the video! The next session is coming soon. Put it on your calendar: <strong>4th Wednesday of every month at 5:45pm</strong>.</p>
<p><strong>Video from first session</strong>:</p>
<div class="jetpack-video-wrapper">
<div class="embed-youtube"><iframe title="SDTIG Python Meeting 1" width="970" height="546" src="https://www.youtube.com/embed/IbYyVh5BZws?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe></div>
</div>
<p>Hope you join the party. Become a member of their group on meetup.com:<br />
<a href="http://www.meetup.com/San-Diego-Technology-Immersion-Group-SDTIG/" target="_blank">http://www.meetup.com/San-Diego-Technology-Immersion-Group-SDTIG/</a></p>
<p><a href="http://www.meetup.com/San-Diego-Technology-Immersion-Group-SDTIG/" target="_blank">@mkennedy</a></p>
]]></content:encoded>
					
					<wfw:commentRss>https://michaelckennedy.wordpress.com/2015/07/27/come-learn-python-and-be-part-of-talk-python-to-me/feed/</wfw:commentRss>
			<slash:comments>3</slash:comments>
		
		
		
		<media:content url="https://0.gravatar.com/avatar/0c39b1af51635a37bd212fc71e854db94323bbdfdeb53bfbc9bc34d26620b8eb?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">michaelckennedy</media:title>
		</media:content>
	</item>
		<item>
		<title>A look inside Netflix&#8217;s cloud systems: Python at Netflix</title>
		<link>https://michaelckennedy.wordpress.com/2015/07/15/a-look-inside-netflixs-cloud-systems-python-at-netflix/</link>
					<comments>https://michaelckennedy.wordpress.com/2015/07/15/a-look-inside-netflixs-cloud-systems-python-at-netflix/#respond</comments>
		
		<dc:creator><![CDATA[Michael Kennedy]]></dc:creator>
		<pubDate>Wed, 15 Jul 2015 16:47:11 +0000</pubDate>
				<category><![CDATA[Talk Python To Me Podcast]]></category>
		<category><![CDATA[Podcast]]></category>
		<category><![CDATA[Python]]></category>
		<guid isPermaLink="false">http://blog.michaelckennedy.net/?p=1512</guid>

					<description><![CDATA[This week I released an excellent interview with Roy Rapoport from Netflix about the amazing ways Python is being used at Netflix. Listen in: Talk Python To Me &#8211; Episode #16 Python at Netflix http://www.talkpythontome.com/episodes/show/16/python-at-netflix In case you missed them, there have been a ton of other amazing Python shows. Check them out: #15: Python [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>This week I released an excellent interview with Roy Rapoport from Netflix about the amazing ways Python is being used at Netflix. Listen in:</p>
<p><a href="http://www.talkpythontome.com/episodes/show/16/python-at-netflix">Talk Python To Me &#8211; Episode #16 Python at Netflix</a><br />
<a href="http://www.talkpythontome.com/episodes/show/16/python-at-netflix">http://www.talkpythontome.com/episodes/show/16/python-at-netflix</a></p>
<p>In case you missed them, there have been a ton of other amazing Python shows. Check them out:</p>
<ul>
<li><a href="http://www.talkpythontome.com/episodes/show/15/python-at-spotify-psf-and-pyladies">#15: Python at Spotify, PSF, and PyLadies</a></li>
<li><a href="http://www.talkpythontome.com/episodes/show/14/moving-from-php-to-python-3-with-patreon">#14: Moving from PHP to Python 3 with Patreon</a></li>
<li><a href="http://www.talkpythontome.com/episodes/show/13">#13: Flask web framework and much, much more</a></li>
<li><a href="http://www.talkpythontome.com/episodes/show/12">#12: Deep Dive into Modules and Packages</a></li>
<li><a href="http://www.talkpythontome.com/episodes/show/11">#11: PyImageSearch and Computer Vision</a></li>
<li><a href="http://www.talkpythontome.com/episodes/show/10">#10: Bringing Python to the Masses with Hosting and DevOps at PythonAnywhere</a></li>
<li><a href="http://www.talkpythontome.com/episodes/show/9">#9: Docker for the Python Developer</a></li>
<li>#<a href="http://www.talkpythontome.com/episodes/show/8">8: Teaching Python at Grok Learning and Classrooms</a></li>
<li><a href="http://www.talkpythontome.com/episodes/show/7">#7: Robot Operating System (ROS) and ROSPy</a></li>
<li><a href="http://www.talkpythontome.com/episodes/show/6">#6: Requests, PyCon, and Python&#8217;s future</a></li>
<li><a href="http://www.talkpythontome.com/episodes/show/5">#5: SQLAlchemy and data access in Python</a></li>
<li><a href="http://www.talkpythontome.com/episodes/show/4">#4: Enterprise Python and Large-Scale Projects</a></li>
<li><a href="http://www.talkpythontome.com/episodes/all">And more&#8230;</a></li>
</ul>
]]></content:encoded>
					
					<wfw:commentRss>https://michaelckennedy.wordpress.com/2015/07/15/a-look-inside-netflixs-cloud-systems-python-at-netflix/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		
		<media:thumbnail url="https://michaelckennedy.wordpress.com/wp-content/uploads/2015/07/netflix.png" />
		<media:content url="https://michaelckennedy.wordpress.com/wp-content/uploads/2015/07/netflix.png" medium="image">
			<media:title type="html">netflix</media:title>
		</media:content>

		<media:content url="https://0.gravatar.com/avatar/0c39b1af51635a37bd212fc71e854db94323bbdfdeb53bfbc9bc34d26620b8eb?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">michaelckennedy</media:title>
		</media:content>
	</item>
		<item>
		<title>I made an appearance on the Geek Cookies podcast</title>
		<link>https://michaelckennedy.wordpress.com/2015/06/08/i-made-an-appearance-on-the-geek-cookies-podcast/</link>
					<comments>https://michaelckennedy.wordpress.com/2015/06/08/i-made-an-appearance-on-the-geek-cookies-podcast/#respond</comments>
		
		<dc:creator><![CDATA[Michael Kennedy]]></dc:creator>
		<pubDate>Mon, 08 Jun 2015 15:35:47 +0000</pubDate>
				<category><![CDATA[Talk Python To Me Podcast]]></category>
		<category><![CDATA[Podcast]]></category>
		<category><![CDATA[Python]]></category>
		<guid isPermaLink="false">http://blog.michaelckennedy.net/?p=1507</guid>

					<description><![CDATA[I had the honor of being a guest on the Italian Podcast Geek Cookies last week and the guys were even willing to switch to English for the main interview. If you want to here an interesting, high-level conversation about Python check it out! (English starts a 1:30 into the show). Thanks guys!]]></description>
										<content:encoded><![CDATA[<p>I had the honor of being a guest on the <a href="http://geekcookies.github.io/podcast/2015/06/06/episodio-7/">Italian Podcast Geek Cookies</a> last week and the guys were even willing to switch to English for the main interview. If you want to here an interesting, high-level conversation about Python check it out! (English starts a 1:30 into the show).</p>
<p>Thanks guys!</p>
<p><a href="http://geekcookies.github.io/podcast/2015/06/06/episodio-7/"><img loading="lazy" data-attachment-id="1509" data-permalink="https://michaelckennedy.wordpress.com/2015/06/08/i-made-an-appearance-on-the-geek-cookies-podcast/geek-cookies/" data-orig-file="https://michaelckennedy.wordpress.com/wp-content/uploads/2015/06/geek-cookies.png" data-orig-size="1496,1286" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="geek-cookies" data-image-description="" data-image-caption="" data-medium-file="https://michaelckennedy.wordpress.com/wp-content/uploads/2015/06/geek-cookies.png?w=300" data-large-file="https://michaelckennedy.wordpress.com/wp-content/uploads/2015/06/geek-cookies.png?w=970" class="aligncenter size-large wp-image-1509" src="https://michaelckennedy.wordpress.com/wp-content/uploads/2015/06/geek-cookies.png?w=842" alt="geek-cookies" width="842" height="724" srcset="https://michaelckennedy.wordpress.com/wp-content/uploads/2015/06/geek-cookies.png?w=842 842w, https://michaelckennedy.wordpress.com/wp-content/uploads/2015/06/geek-cookies.png?w=150 150w, https://michaelckennedy.wordpress.com/wp-content/uploads/2015/06/geek-cookies.png?w=300 300w, https://michaelckennedy.wordpress.com/wp-content/uploads/2015/06/geek-cookies.png?w=768 768w, https://michaelckennedy.wordpress.com/wp-content/uploads/2015/06/geek-cookies.png?w=1024 1024w, https://michaelckennedy.wordpress.com/wp-content/uploads/2015/06/geek-cookies.png 1496w" sizes="(max-width: 842px) 100vw, 842px" /></a></p>
]]></content:encoded>
					
					<wfw:commentRss>https://michaelckennedy.wordpress.com/2015/06/08/i-made-an-appearance-on-the-geek-cookies-podcast/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		
		<media:content url="https://0.gravatar.com/avatar/0c39b1af51635a37bd212fc71e854db94323bbdfdeb53bfbc9bc34d26620b8eb?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">michaelckennedy</media:title>
		</media:content>

		<media:content url="https://michaelckennedy.wordpress.com/wp-content/uploads/2015/06/geek-cookies.png?w=842" medium="image">
			<media:title type="html">geek-cookies</media:title>
		</media:content>
	</item>
		<item>
		<title>Python Podcast Episode #3 &#8211; Pyramid Web Framework</title>
		<link>https://michaelckennedy.wordpress.com/2015/04/19/python-podcast-episode-3-pyramid-web-framework/</link>
					<comments>https://michaelckennedy.wordpress.com/2015/04/19/python-podcast-episode-3-pyramid-web-framework/#respond</comments>
		
		<dc:creator><![CDATA[Michael Kennedy]]></dc:creator>
		<pubDate>Sun, 19 Apr 2015 17:40:03 +0000</pubDate>
				<category><![CDATA[Talk Python To Me Podcast]]></category>
		<category><![CDATA[Podcast]]></category>
		<category><![CDATA[Python]]></category>
		<guid isPermaLink="false">http://blog.michaelckennedy.net/?p=1501</guid>

					<description><![CDATA[Just a quick note that there is another episode of Talk Python To Me. This time I&#8217;m speaking with Chris McDonough about the Pyramid Web Framework. Listen in now, hope you enjoy the show!]]></description>
										<content:encoded><![CDATA[<p>Just a quick note that there is another episode of Talk Python To Me. This time I&#8217;m speaking with Chris McDonough about the Pyramid Web Framework.</p>
<p><a href="http://www.talkpythontome.com/episodes/show/3/pyramid-web-framework" target="_blank">Listen in now</a>, hope you enjoy the show!</p>
<p><a href="http://www.talkpythontome.com/episodes/show/3/pyramid-web-framework"><img loading="lazy" data-attachment-id="1502" data-permalink="https://michaelckennedy.wordpress.com/2015/04/19/python-podcast-episode-3-pyramid-web-framework/e3/" data-orig-file="https://michaelckennedy.wordpress.com/wp-content/uploads/2015/04/e3.png" data-orig-size="912,592" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="e3" data-image-description="" data-image-caption="" data-medium-file="https://michaelckennedy.wordpress.com/wp-content/uploads/2015/04/e3.png?w=300" data-large-file="https://michaelckennedy.wordpress.com/wp-content/uploads/2015/04/e3.png?w=912" class="aligncenter size-large wp-image-1502" src="https://michaelckennedy.wordpress.com/wp-content/uploads/2015/04/e3.png?w=660" alt="e3" width="660" height="428" srcset="https://michaelckennedy.wordpress.com/wp-content/uploads/2015/04/e3.png?w=660 660w, https://michaelckennedy.wordpress.com/wp-content/uploads/2015/04/e3.png?w=150 150w, https://michaelckennedy.wordpress.com/wp-content/uploads/2015/04/e3.png?w=300 300w, https://michaelckennedy.wordpress.com/wp-content/uploads/2015/04/e3.png?w=768 768w, https://michaelckennedy.wordpress.com/wp-content/uploads/2015/04/e3.png 912w" sizes="(max-width: 660px) 100vw, 660px" /></a></p>
]]></content:encoded>
					
					<wfw:commentRss>https://michaelckennedy.wordpress.com/2015/04/19/python-podcast-episode-3-pyramid-web-framework/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		
		<media:content url="https://0.gravatar.com/avatar/0c39b1af51635a37bd212fc71e854db94323bbdfdeb53bfbc9bc34d26620b8eb?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">michaelckennedy</media:title>
		</media:content>

		<media:content url="https://michaelckennedy.wordpress.com/wp-content/uploads/2015/04/e3.png?w=660" medium="image">
			<media:title type="html">e3</media:title>
		</media:content>
	</item>
		<item>
		<title>New Podcast Episode: Python and MongoDB</title>
		<link>https://michaelckennedy.wordpress.com/2015/04/08/new-podcast-episode-python-and-mongodb/</link>
					<comments>https://michaelckennedy.wordpress.com/2015/04/08/new-podcast-episode-python-and-mongodb/#respond</comments>
		
		<dc:creator><![CDATA[Michael Kennedy]]></dc:creator>
		<pubDate>Thu, 09 Apr 2015 05:55:48 +0000</pubDate>
				<category><![CDATA[Talk Python To Me Podcast]]></category>
		<category><![CDATA[MongoDB]]></category>
		<category><![CDATA[Podcast]]></category>
		<category><![CDATA[Python]]></category>
		<guid isPermaLink="false">http://blog.michaelckennedy.net/?p=1498</guid>

					<description><![CDATA[I recorded a session with Jesse Davis from MongoDB on Talk Python To Me. I think the show came out great. You should check it out! In this show we speak with Jesse Davis from MongoDB. Jesse is the maintainer for a number of popular open-source projects including the Python MongoDB driver known as PyMongo [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>I recorded a session with Jesse Davis from MongoDB on <a href="http://www.talkpythontome.com/episodes/show/2/python-and-mongodb" target="_blank">Talk Python To Me</a>. I think the show came out great. You should check it out!</p>
<p><a href="http://www.talkpythontome.com/episodes/show/2/python-and-mongodb"><img loading="lazy" data-attachment-id="1499" data-permalink="https://michaelckennedy.wordpress.com/2015/04/08/new-podcast-episode-python-and-mongodb/e2-snap/" data-orig-file="https://michaelckennedy.wordpress.com/wp-content/uploads/2015/04/e2-snap.png" data-orig-size="1090,647" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="Episode #2: Python and MongoDB with Jesse Davis" data-image-description="" data-image-caption="" data-medium-file="https://michaelckennedy.wordpress.com/wp-content/uploads/2015/04/e2-snap.png?w=300" data-large-file="https://michaelckennedy.wordpress.com/wp-content/uploads/2015/04/e2-snap.png?w=970" class="aligncenter size-large wp-image-1499" src="https://michaelckennedy.wordpress.com/wp-content/uploads/2015/04/e2-snap.png?w=842" alt="Episode #2: Python and MongoDB with Jesse Davis" width="842" height="500" srcset="https://michaelckennedy.wordpress.com/wp-content/uploads/2015/04/e2-snap.png?w=842 842w, https://michaelckennedy.wordpress.com/wp-content/uploads/2015/04/e2-snap.png?w=150 150w, https://michaelckennedy.wordpress.com/wp-content/uploads/2015/04/e2-snap.png?w=300 300w, https://michaelckennedy.wordpress.com/wp-content/uploads/2015/04/e2-snap.png?w=768 768w, https://michaelckennedy.wordpress.com/wp-content/uploads/2015/04/e2-snap.png?w=1024 1024w, https://michaelckennedy.wordpress.com/wp-content/uploads/2015/04/e2-snap.png 1090w" sizes="(max-width: 842px) 100vw, 842px" /></a>In this show we speak with Jesse Davis from MongoDB. Jesse is the maintainer for a number of popular open-source projects including the Python MongoDB driver known as PyMongo and Mongo C (for C/C++ developers, yes you read right! C developers). Jesse discusses how interesting it is to write both Python and C code and how it reawakens part of the brain.</p>
<p>You&#8217;ll learn a little about MongoDB, how it compares to RDBMSes as well as other NoSQL data stores.</p>
<p>Join Michael and Jesse for these great topics and much more!</p>
]]></content:encoded>
					
					<wfw:commentRss>https://michaelckennedy.wordpress.com/2015/04/08/new-podcast-episode-python-and-mongodb/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		
		<media:content url="https://0.gravatar.com/avatar/0c39b1af51635a37bd212fc71e854db94323bbdfdeb53bfbc9bc34d26620b8eb?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">michaelckennedy</media:title>
		</media:content>

		<media:content url="https://michaelckennedy.wordpress.com/wp-content/uploads/2015/04/e2-snap.png?w=842" medium="image">
			<media:title type="html">Episode #2: Python and MongoDB with Jesse Davis</media:title>
		</media:content>
	</item>
		<item>
		<title>Announcing new podcast: Talk Python To Me</title>
		<link>https://michaelckennedy.wordpress.com/2015/03/31/announcing-new-podcast-talk-python-to-me/</link>
					<comments>https://michaelckennedy.wordpress.com/2015/03/31/announcing-new-podcast-talk-python-to-me/#respond</comments>
		
		<dc:creator><![CDATA[Michael Kennedy]]></dc:creator>
		<pubDate>Tue, 31 Mar 2015 23:55:43 +0000</pubDate>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[Podcast]]></category>
		<guid isPermaLink="false">http://blog.michaelckennedy.net/?p=1489</guid>

					<description><![CDATA[I&#8217;m super excited to announce that I just launched a brand new podcast for Python developers called Talk Python To Me. This weekly podcast already has the first episode published and some amazing guests lined up. Visit the website to learn more: Talk Python To Me &#8211; http://www.talkpythontome.com/ Subscribe to the Podcast via the iTunes [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>I&#8217;m super excited to announce that I just launched a brand new podcast for Python developers called<strong> Talk Python To Me</strong>. This weekly podcast already has the first episode published and some amazing guests lined up.</p>
<p>Visit the website to learn more:</p>
<p style="text-align:center;"><a href="http://www.talkpythontome.com/" target="_blank">Talk Python To Me &#8211; http://www.talkpythontome.com/</a></p>
<p>Subscribe to the Podcast via the <a href="https://itunes.apple.com/us/podcast/talk-python-to-me-python-conversations/id979020229" target="_blank">iTunes feed</a>, become a <a href="http://www.talkpythontome.com/friends-of-the-show" target="_blank">friend of the show</a> and <a href="https://twitter.com/talkpython" target="_blank">follow us on twitter</a> as well!</p>
]]></content:encoded>
					
					<wfw:commentRss>https://michaelckennedy.wordpress.com/2015/03/31/announcing-new-podcast-talk-python-to-me/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		
		<media:thumbnail url="https://michaelckennedy.wordpress.com/wp-content/uploads/2015/03/coffee-book-pencie-placeit.jpg" />
		<media:content url="https://michaelckennedy.wordpress.com/wp-content/uploads/2015/03/coffee-book-pencie-placeit.jpg" medium="image">
			<media:title type="html">coffee-book-pencie-placeit</media:title>
		</media:content>

		<media:content url="https://0.gravatar.com/avatar/0c39b1af51635a37bd212fc71e854db94323bbdfdeb53bfbc9bc34d26620b8eb?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">michaelckennedy</media:title>
		</media:content>
	</item>
		<item>
		<title>Python Cheat Sheet</title>
		<link>https://michaelckennedy.wordpress.com/2015/03/19/python-cheat-sheet/</link>
					<comments>https://michaelckennedy.wordpress.com/2015/03/19/python-cheat-sheet/#respond</comments>
		
		<dc:creator><![CDATA[Michael Kennedy]]></dc:creator>
		<pubDate>Thu, 19 Mar 2015 20:28:25 +0000</pubDate>
				<category><![CDATA[DevelopMentor]]></category>
		<category><![CDATA[Books]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Python]]></category>
		<guid isPermaLink="false">http://blog.michaelckennedy.net/?p=1483</guid>

					<description><![CDATA[In collaboration with DevelopMentor to get the word out about our Python curriculum, I built a simple but fairly comprehensive Python cheat sheet. It&#8217;s pretty thorough at 16 pages in length and covers a diverse set of topics including Language, Types, Ecosystem, Databases, File I/O (JSON, XML, Text, etc), and more. Python Cheat Sheet.pdf If [&#8230;]]]></description>
										<content:encoded><![CDATA[<p style="text-align:left;">In collaboration with DevelopMentor to get the word out about our Python curriculum, I built a simple but fairly comprehensive Python cheat sheet. It&#8217;s pretty thorough at 16 pages in length and covers a diverse set of topics including Language, Types, Ecosystem, Databases, File I/O (JSON, XML, Text, etc), and more.</p>
<p style="text-align:center;"><a href="https://s3.amazonaws.com/michael-kennedy/downloads/DM/python_cheat_sheet.pdf" target="_blank"><img loading="lazy" data-attachment-id="1484" data-permalink="https://michaelckennedy.wordpress.com/2015/03/19/python-cheat-sheet/python-cheetshet-download-image/" data-orig-file="https://michaelckennedy.wordpress.com/wp-content/uploads/2015/03/python-cheetshet-download-image.png" data-orig-size="278,327" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="python-cheetshet-download-image" data-image-description="" data-image-caption="" data-medium-file="https://michaelckennedy.wordpress.com/wp-content/uploads/2015/03/python-cheetshet-download-image.png?w=255" data-large-file="https://michaelckennedy.wordpress.com/wp-content/uploads/2015/03/python-cheetshet-download-image.png?w=278" class="aligncenter wp-image-1484 size-full" src="https://michaelckennedy.wordpress.com/wp-content/uploads/2015/03/python-cheetshet-download-image.png" alt="python-cheetshet-download-image" width="278" height="327" srcset="https://michaelckennedy.wordpress.com/wp-content/uploads/2015/03/python-cheetshet-download-image.png 278w, https://michaelckennedy.wordpress.com/wp-content/uploads/2015/03/python-cheetshet-download-image.png?w=128&amp;h=150 128w" sizes="(max-width: 278px) 100vw, 278px" />Python Cheat Sheet.pdf</a></p>
<p style="text-align:left;">If you find this useful please mention it on Twitter or forward it to a friend.</p>
<p style="text-align:left;">Want deeper Python training? Check out <a href="https://www.youtube.com/user/mkennedy66996694/search?query=python" target="_blank">my over two hours of Python videos on my YouTube channel</a> and consider my <a href="https://www.develop.com/training-courses/python" target="_blank">DevelopMentor Python courses</a> for classroom training. I&#8217;m also the host of the <a href="http://www.talkpythontome.com/" target="_blank">Talk Python To Me Podcast</a>. Be sure to subscribe and listen to some great conversations.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://michaelckennedy.wordpress.com/2015/03/19/python-cheat-sheet/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		
		<media:content url="https://0.gravatar.com/avatar/0c39b1af51635a37bd212fc71e854db94323bbdfdeb53bfbc9bc34d26620b8eb?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">michaelckennedy</media:title>
		</media:content>

		<media:content url="https://michaelckennedy.wordpress.com/wp-content/uploads/2015/03/python-cheetshet-download-image.png" medium="image">
			<media:title type="html">python-cheetshet-download-image</media:title>
		</media:content>
	</item>
		<item>
		<title>Announcing the 2015 MongoDB Masters</title>
		<link>https://michaelckennedy.wordpress.com/2015/03/10/announcing-the-2015-mongodb-masters/</link>
					<comments>https://michaelckennedy.wordpress.com/2015/03/10/announcing-the-2015-mongodb-masters/#respond</comments>
		
		<dc:creator><![CDATA[Michael Kennedy]]></dc:creator>
		<pubDate>Tue, 10 Mar 2015 15:50:04 +0000</pubDate>
				<category><![CDATA[NoSQL]]></category>
		<category><![CDATA[MongoDB]]></category>
		<category><![CDATA[Open Source]]></category>
		<guid isPermaLink="false">http://blog.michaelckennedy.net/?p=1479</guid>

					<description><![CDATA[NEW YORK, NY and PALO ALTO, CA – March 10, 2015 – MongoDB today announced the 2015 members of the MongoDB Masters, an annual program run by MongoDB to recognize and empower leaders in the MongoDB community. Comprised of core contributors and community evangelists, the MongoDB Masters are dedicated to sharing their passion and technical [&#8230;]]]></description>
										<content:encoded><![CDATA[<p><b>NEW YORK, NY and PALO ALTO, CA – March 10, 2015 – </b>MongoDB today announced the 2015 members of the MongoDB <span class="kc">Masters</span>, an annual program run by MongoDB to recognize and empower leaders in the MongoDB community. Comprised of core contributors and community evangelists, the MongoDB <span class="kc">Masters</span> are dedicated to sharing their passion and technical expertise with the MongoDB community around the world and play a vital role in the adoption, education and advancement of MongoDB.</p>
<p><strong>** I&#8217;m honored to be one of only 35 MongoDB Masters for 2015! **<br />
</strong></p>
<div>Read the whole announcement on MongoDB&#8217;s blog<br />
<a href="http://www.mongodb.com/blog/post/announcing-2015-mongodb-masters" target="_blank">http://www.mongodb.com/blog/post/announcing-2015-mongodb-masters</a></div>
<div></div>
]]></content:encoded>
					
					<wfw:commentRss>https://michaelckennedy.wordpress.com/2015/03/10/announcing-the-2015-mongodb-masters/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			<georss:point>45.523062 -122.676482</georss:point>
		<geo:lat>45.523062</geo:lat>
		<geo:long>-122.676482</geo:long>
		<media:thumbnail url="https://michaelckennedy.wordpress.com/wp-content/uploads/2015/03/mongodb_logo.png" />
		<media:content url="https://michaelckennedy.wordpress.com/wp-content/uploads/2015/03/mongodb_logo.png" medium="image">
			<media:title type="html">MongoDB Logo</media:title>
		</media:content>

		<media:content url="https://0.gravatar.com/avatar/0c39b1af51635a37bd212fc71e854db94323bbdfdeb53bfbc9bc34d26620b8eb?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">michaelckennedy</media:title>
		</media:content>
	</item>
		<item>
		<title>Initialization in Modern C++ vs Apple&#8217;s Swift</title>
		<link>https://michaelckennedy.wordpress.com/2015/03/09/initialization-in-modern-c-vs-apples-swift/</link>
					<comments>https://michaelckennedy.wordpress.com/2015/03/09/initialization-in-modern-c-vs-apples-swift/#comments</comments>
		
		<dc:creator><![CDATA[Michael Kennedy]]></dc:creator>
		<pubDate>Mon, 09 Mar 2015 17:10:17 +0000</pubDate>
				<category><![CDATA[DevelopMentor]]></category>
		<category><![CDATA[Apple]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[iOS]]></category>
		<category><![CDATA[Swift]]></category>
		<guid isPermaLink="false">http://blog.michaelckennedy.net/?p=1474</guid>

					<description><![CDATA[Time for another great guest blog post from Bradley Needham to follow up on his very popular Swift vs. C++ post. Enjoy! Initialization in Modern C++ vs Apple&#8217;s Swift A little while ago I wrote a short post comparing some of the basic features of Modern C++ and Apple&#8217;s Swift. It was far from comprehensive, [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Time for another great guest blog post from Bradley Needham to follow up on his very popular <a href="https://michaelckennedy.wordpress.com/2014/12/08/comparison-of-modern-c-and-apples-swift-programming-language-syntax/" target="_blank">Swift vs. C++</a> post. Enjoy!</p>
<hr />
<h1>Initialization in Modern C++ vs Apple&#8217;s Swift</h1>
<p>A little while ago I wrote a short post comparing some of the basic features of <a href="https://michaelckennedy.wordpress.com/2014/12/08/comparison-of-modern-c-and-apples-swift-programming-language-syntax/">Modern C++ and Apple&#8217;s Swift</a>. It was far from comprehensive, basically only touching on the constructs mentioned in Michael Kennedy&#8217;s post <a href="https://michaelckennedy.wordpress.com/2014/11/26/comparison-of-python-and-apples-swift-programming-language-syntax/">Comparison of Python and Apple’s Swift Programming Language Syntax</a>. However the post did generate enough interest that I decided to continue the comparison by looking at one of the differences I find interesting between the two languages, <strong>initialization</strong>. Initialization is very important in any language and both C++ and Swift have built in constructs and checks to help make sure that objects get completely initialized before they are used.<span id="more-1474"></span></p>
<h2>Initialization syntax</h2>
<p>Let us start with the syntax of the two languages.</p>
<p>Objects are initialized in C++ through <em>constructors</em>. A constructor has no return value and the same name as the class.</p>
<pre>// C++
 class Person {
 public:
 Person() {} // Constructor
 };</pre>
<p>In Swift objects are initialized through <em>initializers</em>. An initializer has no return value and its name is <em>init</em>.</p>
<pre>// Swift
 public class Person {
 public init() {} // Initializer
 }</pre>
<p>Invoking a constructor or an initializer is similar.<br />
<em>Note: I am only pointing out the syntax here, how the objects are being allocated is different.</em></p>
<pre>// C++
 Person p;
 // or
 auto p = Person();</pre>
<pre>// Swift
 var p = Person()</pre>
<p>Constructors and initializers can be used to set initial values for fields.</p>
<pre>// C++
 class Person {
 int _age;
 public:
 Person() : _age(25) { }
 };</pre>
<pre>// Swift
 public class Person {
 var _age : Int
 public init() { _age = 25 }
 }</pre>
<p>Fields can also be inline initialized.</p>
<pre>// C++
 class Person {
 int _age = 25;
 public:
 Person() { }
 };</pre>
<pre>// Swift
 public class Person {
 var _age : Int = 25
 public init() { }
 }</pre>
<p>Constructors and initializers can take parameters. <em>Note: I am only showing that parameters can be passed, and not discussing implicit vs explicit parameters in Swift.</em></p>
<pre>// C++
 class Person {
 int _age;
 public:
 Person(int age) : _age(age) { }
 };
// invoke
auto p = Person(25);</pre>
<pre>// Swift
 public class Person {
 var _age : Int
 public init(age : Int) { _age = age }
 }
// invoke
var p = Person(age: 25)</pre>
<p>Constructors can invoke other constructors in the same class.</p>
<pre>// C++
 class Person {
 int _age;
 public:
 Person() : Person(25) { } // invoke the below constructor
 Person(int age) : _age(age) { }
 };</pre>
<p>Initializers can invoke other initializers in the same class.</p>
<pre>// Swift
 public class Person {
 var _age : Int
 public convenience init() {
 self.init(age: 25) // invoke the below initializer
 }
 public init(age : Int) { _age = age }
 }</pre>
<p>Constructors and initializers can invoke their base class&#8217;s initializers or constructors.</p>
<pre>// C++
 class Person {
 int _age;
 public:
 Person(int age) : _age(age) { }
 };</pre>
<pre>class Student : public Person {
 int _id;
 public:
 Student(int age, int id) :
 Person(age), // invoke base constructor
 _id(id)
 {}
 };</pre>
<pre>// Swift
 public class Person {
 var _age : Int
 public convenience init() {
 self.init(age: 25) // invoke the below initializer
 }
 public init(age : Int) { _age = age }
 }</pre>
<pre>public class Student : Person {
 var _id : Int
 public init(age: Int, id: Int) {
 _id = id
 super.init(age) // invoke base constructor
 }
 }</pre>
<h2>Order of initialization</h2>
<p>Now that we have seen the basics of the initialization syntax of C++ and Swift, let us get to the interesting part, <strong>order of initialization</strong>.</p>
<h3>In C++ the order of construction is determined by the class declaration.</h3>
<p>Objects are initialized from the top down in the inheritance heiarchy. Base classes first left to right then data members top to bottom. Given the following code:</p>
<pre>// C++
 // Given the following classes
 class Person {
 int _age;
 public:
 Person(int age) : _age(age) {
 // constructor code
 }
 };</pre>
<pre>class Student : public Person {
 int _id;
 public:
 Student(int age, int id) :
 Person(age), // invoke base constructor
 _id(id)
 {
 // constructor code
 }
 };</pre>
<p>When an instance of a Student is created.</p>
<pre>auto s = Student(25, 1001);</pre>
<p>The constructor for Person will be executed first. It will initialize <code>_age</code> and execute any code in the constructor body. Then <code>_id</code> will be initialized and finally the the code in the Student constructor will be executed.</p>
<p>This is straight forward single-phase construction that works well in C++.</p>
<h3>In Swift initialization is done in two-phases.</h3>
<p>Two-phase initialization takes a different approach. Instead of completely initializing the base class protion of the object, i.e. initializing the data as well as executing the initialization code, before initializing the sub class protion, it separates the initialization of the data from the initialization code.</p>
<p>The first phase, initializes the data starting with the sub class fields and working its way up to the base class fields. The compilier will enforce this so that you cannot call <code>super.init</code> before all sub class fields have an initialized value and you will not be able to invoke any methods on the sub class until <code>super.init</code> finishes. The second phase then executes code that can now safely access any fields because they are guarenteed to be initialized.</p>
<pre>// Swift
 // Given the following classes
 public class Person {
 var _age: Int
 public init(age: Int) {
 _age = age
 // initialization code
 }
 }</pre>
<pre>public class Student : Person {
 var _id: Int
 public init(age: Int, id: Int)
 {
 _id = id
 super.init(age)
 // initialization code
 }
 }</pre>
<p>When an instance of a Student is created.</p>
<pre>var s = Student(25, 1001);</pre>
<p>First the field <code>_id</code> would be initialized, then <code>super.init</code> would be called, then <code>_age</code> would be initialized. This would complete the first-phase and the second-phase would then execute any initialization code.</p>
<p>Swift uses two-phase initialization to prevent code from accessing the memory of an object before it has been initialized which might happen if you were to call a method (which is dynamically bound by default) from a base class initializer.</p>
<pre>// Swift
 public class Person {
 var _age: Int
 public init(age: Int) {
 _age = age
 print() // dynamically bound
 }
 public func print() { println("age: \(_age)") }
 }</pre>
<pre>public class Student : Person {
 var _id: Int
 public init(age: Int, id: Int) {
 _id = id
 super.init(age) // invoke base initializer
 }
 override public func print() {
 super.print()
 println("id: \(_id)")
 }
 }</pre>
<p>Because <code>_id</code> is initialized before <code>super.init</code> is invoked the following code:</p>
<pre>var s = Student(age: 25, id: 1001)</pre>
<p>Prints out:</p>
<pre>age: 25
 id: 1001</pre>
<p>In C++ dynamic binding is not fully set up until construction is complete so the above example in C++ would result in the print function on Person being called instead of the print function on Student.</p>
<pre>// C++
 class Person {
 int _age;
 public:
 Person(int age) : _age(age) { print(); }
 virtual void print() const {
 std::cout &lt;&lt; "age: " &lt;&lt; _age &lt;&lt; std::endl;
 }
 };

class Student : public Person {
 int _id;
 public:
 Student(int age, int id) :
 Person(age), // invoke base constructor
 _id(id)
 {}
 void print() const override {
 Person::print();
 std::cout &lt;&lt; "id: " &lt;&lt; _id &lt;&lt; std::endl;
 }
 };</pre>
<p>In C++ <code>_id</code> is not initialized before Person&#8217;s constructor is invoked but the v-table used for dynamic binding is also not fully set up so Person::print gets called and the following code:</p>
<pre>auto s = Student(25, 1001);</pre>
<p>Prints out:</p>
<pre>age: 25</pre>
<p><em>Note: In Java <code>_id</code> would not be initialized and print would be dynamically bound allowing the access of uninitialized memory.</em></p>
<p>Two-phase initialization can be implemented in C++ and there are many discussions on the pros and cons of its use. This post is not concerned with addressing those. The intention of this post is to simply point out the difference between C++&#8217;s build in initialization mechanism and Swift&#8217;s.</p>
<p>&nbsp;</p>
]]></content:encoded>
					
					<wfw:commentRss>https://michaelckennedy.wordpress.com/2015/03/09/initialization-in-modern-c-vs-apples-swift/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
		
		<media:thumbnail url="https://michaelckennedy.wordpress.com/wp-content/uploads/2014/12/cpp-vs-swift.png" />
		<media:content url="https://michaelckennedy.wordpress.com/wp-content/uploads/2014/12/cpp-vs-swift.png" medium="image">
			<media:title type="html">cpp-vs-swift</media:title>
		</media:content>

		<media:content url="https://0.gravatar.com/avatar/0c39b1af51635a37bd212fc71e854db94323bbdfdeb53bfbc9bc34d26620b8eb?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">michaelckennedy</media:title>
		</media:content>
	</item>
		<item>
		<title>New course: Announcing The Swift Programming Language from DevelopMentor</title>
		<link>https://michaelckennedy.wordpress.com/2015/01/19/new-course-announcing-the-swift-programming-language-from-developmentor/</link>
					<comments>https://michaelckennedy.wordpress.com/2015/01/19/new-course-announcing-the-swift-programming-language-from-developmentor/#respond</comments>
		
		<dc:creator><![CDATA[Michael Kennedy]]></dc:creator>
		<pubDate>Mon, 19 Jan 2015 19:47:09 +0000</pubDate>
				<category><![CDATA[DevelopMentor]]></category>
		<category><![CDATA[Apple]]></category>
		<category><![CDATA[Swift]]></category>
		<guid isPermaLink="false">http://blog.michaelckennedy.net/?p=1468</guid>

					<description><![CDATA[I&#8217;m really happy to announce the latest course I&#8217;ve co-authored at DevelopMentor: The Swift Programming Language https://www.develop.com/training-course/the-swift-programming-language This course is specifically build to help teams of existing Objective-C developers quickly but thoroughly get up to speed with Swift. Here are details on the course, read more at DevelopMentor. This course is a thorough introduction to [&#8230;]]]></description>
										<content:encoded><![CDATA[<p><a href="https://michaelckennedy.wordpress.com/wp-content/uploads/2014/12/swift-banner.png"><img loading="lazy" data-attachment-id="1437" data-permalink="https://michaelckennedy.wordpress.com/2014/12/11/announcing-developmentors-swift-ios-and-os-x-course/swift-banner/" data-orig-file="https://michaelckennedy.wordpress.com/wp-content/uploads/2014/12/swift-banner.png" data-orig-size="1000,269" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="swift-banner" data-image-description="" data-image-caption="" data-medium-file="https://michaelckennedy.wordpress.com/wp-content/uploads/2014/12/swift-banner.png?w=300" data-large-file="https://michaelckennedy.wordpress.com/wp-content/uploads/2014/12/swift-banner.png?w=970" class="alignnone size-large wp-image-1437" src="https://michaelckennedy.wordpress.com/wp-content/uploads/2014/12/swift-banner.png?w=660" alt="swift-banner" width="660" height="178" srcset="https://michaelckennedy.wordpress.com/wp-content/uploads/2014/12/swift-banner.png?w=660 660w, https://michaelckennedy.wordpress.com/wp-content/uploads/2014/12/swift-banner.png?w=150 150w, https://michaelckennedy.wordpress.com/wp-content/uploads/2014/12/swift-banner.png?w=300 300w, https://michaelckennedy.wordpress.com/wp-content/uploads/2014/12/swift-banner.png?w=768 768w, https://michaelckennedy.wordpress.com/wp-content/uploads/2014/12/swift-banner.png 1000w" sizes="(max-width: 660px) 100vw, 660px" /></a></p>
<p>I&#8217;m really happy to announce the latest course I&#8217;ve co-authored at DevelopMentor:</p>
<p><em><strong>The Swift Programming Language</strong></em><br />
<a title="The Swift Programming Language Training Course" href="https://www.develop.com/training-course/the-swift-programming-language" target="_blank">https://www.develop.com/training-course/the-swift-programming-language</a></p>
<p>This course is specifically build to help teams of existing Objective-C developers quickly but thoroughly get up to speed with Swift. <span id="more-1468"></span>Here are details on the course, read <a href="https://www.develop.com/training-course/the-swift-programming-language" target="_blank">more at DevelopMentor</a>.</p>
<div>
<p>This course is a thorough introduction to the Swift language. If you have experience with Objective-C and Apple&#8217;s developers tools and APIs and you want you and your team to quickly get up to speed on Apple&#8217;s successor to Objective-C, then this hands-on course is the perfect one for you. The time to move to Swift is right now and this is the course to get you there.</p>
<p><strong>New to Apple&#8217;s developer tools?</strong> We may have a better course for you. If you need a more rounded introduction including iOS and OS X SDKs (e.g. Cocoa Touch) and tooling (e.g. Xcode and storyboards), check out our <a href="https://www.develop.com/training-course/essential-swift-ios-and-os-x-programming">Essential Swift iOS and OS X Programming</a> which covers language and application topics.</p>
<p>When <a href="https://www.youtube.com/watch?v=oo_lf2FX9eI">Apple announced the Swift programming language</a> to cheering crowds at WWDC 2014, we knew it would be important. Swift is destined to replace the aging Objective-C language which was introduced over 32 years ago. Swift is built upon three core principles: <strong>safe</strong>, <strong>modern</strong>, and <strong>powerful</strong>. It fulfills these principles by borrowing the best features from modern languages such as Python, C#, modern C++, and others. While Swift adopts modern high-level language features it also improves upon Objective-C’s native performance and is actually <strong>faster</strong> than its predecessor.</p>
<p>While there are cross-platform options for building iOS and OS X applications, if you are ready to go <em>all in</em> on the Apple ecosystem you need to learn Swift today. This language fundamentals course is a great place to start.</p>
<div id="course-details" class="course-content-container">
<h2>Course outline and topics</h2>
<div>
<p><strong>Day 1</strong></p>
<p><strong>Introduction to Swift for iOS and OS X</strong></p>
<p>This first module introduces developers to the Swift ecosystem. You will learn why Swift was created and understand how it fits into the Apple developer ecosystem. You will learn about the various tools and SDKs needed to start building applications.</p>
<p><strong>Language Basics</strong></p>
<p>Swift is a modern language which borrows many of the best features from successful, established languages of the day such as Python and C#. Swift values readability and productivity over terseness. In this lesson, you will get a quick introduction to the major language features. We will see how to define variables and understand Swift&#8217;s variable scope. Next up is a variety of flow control constructs (if, while, etc.). We will pay special attention to loops in Swift, which has traditional for and while loops but also adds rich iteration and range based loop constructs. Finally we discuss how to import external libraries to extend our capabilities.</p>
<p><strong>Optionals and Optional Chaining</strong></p>
<p>The Swift language adds two clean and powerful features to the developer&#8217;s toolkit: optional chaining and generics. Unlike most languages, Swift types cannot be null / nil. Even though Swift has both value types and reference types, they must have a value. To specifically allow for missing values, Swift introduces optionals and optional chaining to work with these types. Using optional chaining you can entirely avoid those one-line if statements required to juggle null / nil optionals and reference types. We will also cover generics, a powerful feature to use strong-typed features in a general way.</p>
<p><strong>Common Types</strong></p>
<p>Swift has a rich type system. This lesson explores some of the fundamental types and tips for working with them (numbers, strings, dates, etc.). You will see how to convert between types and parse text into common types (e.g. dates). You&#8217;ll learn about the most used operations on these types so you can jump right into using them in your applications.</p>
<p><strong>Day 2</strong></p>
<p><strong>Collections</strong></p>
<p>Swift has a rich collection system. This lesson explores Swift&#8217;s collection classes (arrays, dictionaries, and tuples). These types have very powerful features and only some of them are covered in this lesson (saving the best for deeper examination later). You will learn to splice (via subscript ranges), combine, and generally manipulate these collections here.</p>
<p><strong>Functions and Closures</strong></p>
<p>Functions, along with classes, are key building blocks of any self-respecting language. Swift&#8217;s support for functions is very sophisticated. We start by defining basic functions and discussing parameters, return values, and related concepts. Unlike many languages, you will see that Swift functions naturally support returning multiple return values and assigning them all in one step. You will see how to define functions with varying numbers of parameters, how to create named parameters, and work with default and optional parameters. Finally we look at some of the best features of functions enabling modern, concise programming techniques: closures, expressions, and lambdas in Swift.</p>
<p><strong>Classes</strong></p>
<p>Swift is a first class object-oriented language. You will see how to define your own classes and how to add methods and fields to them. We will cover how to hook into object lifetime and initialization.</p>
<p><strong>Structures and Enumerations</strong></p>
<p>Classes are not the only way to define your own custom types in Swift. Structures allow many of the same features and functionality as classes but as a value type rather than reference type. Structures are key to high performance code in certain situations. You will also learn about enumerations which again share many features with classes and structures but they model situations where the set of data is a finite set (e.g. days of the week). You will also learn when you should use classes, when to use structures, and when to use enums.</p>
<p><strong>Day 3</strong></p>
<p><strong>Protocols and Extensions</strong></p>
<p>Next up are two powerful features for extending, adapting, and reusing types. We will begin by learning about protocols. If you are coming from another language, you may know these as interfaces. Protocols allow your types (classes, structs, and enums) to guarantee they support a minimum level of functionality and allow for greater type reuse and polymorphism. Protocols work great when extending types you control. But Swift has another feature which allows you to add functionality and features to existing types even types imported from other libraries like the String class. These are extensions and they are a powerful feature not found in many other languages.</p>
<p><strong>Generics</strong></p>
<p>The Swift language is strongly-typed. While strong typing is usually an advantage it can also get in your way. This module will show you how to reuse algorithms in Swift irrespective of their types. This is done via generics, a powerful feature to use strong-typed features in a general way. You will see how to define custom generic types, factor elements of the type into your algorithms and restrict the types can be applied via type constraints and where clauses.</p>
<p><strong>Memory management</strong></p>
<p>In this module, you will learn the ins-and-outs of memory management in Swift. Swift has two broad categories of types (reference types and value types) and you will see they differ dramatically in how memory is managed for these types. You will learn when and how to use each of these and how to identify them. We will see, that for reference types, Swift uses Automatic Reference Counting (ARC) to track and manage your app’s memory usage. In most cases, this means that memory management &#8216;just works&#8217; in Swift, and you do not need to think about memory management yourself. We will discuss various types of references and see how they affect memory management (strong, weak, and unowned references) references.</p>
</div>
</div>
</div>
]]></content:encoded>
					
					<wfw:commentRss>https://michaelckennedy.wordpress.com/2015/01/19/new-course-announcing-the-swift-programming-language-from-developmentor/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			<georss:point>34.052234 -118.243685</georss:point>
		<geo:lat>34.052234</geo:lat>
		<geo:long>-118.243685</geo:long>
		<media:content url="https://0.gravatar.com/avatar/0c39b1af51635a37bd212fc71e854db94323bbdfdeb53bfbc9bc34d26620b8eb?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">michaelckennedy</media:title>
		</media:content>

		<media:content url="https://michaelckennedy.wordpress.com/wp-content/uploads/2014/12/swift-banner.png?w=660" medium="image">
			<media:title type="html">swift-banner</media:title>
		</media:content>
	</item>
		<item>
		<title>10 Myths of Enterprise Python from PayPal</title>
		<link>https://michaelckennedy.wordpress.com/2014/12/11/10-myths-of-enterprise-python-from-paypal/</link>
					<comments>https://michaelckennedy.wordpress.com/2014/12/11/10-myths-of-enterprise-python-from-paypal/#comments</comments>
		
		<dc:creator><![CDATA[Michael Kennedy]]></dc:creator>
		<pubDate>Thu, 11 Dec 2014 16:25:20 +0000</pubDate>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Python]]></category>
		<guid isPermaLink="false">http://blog.michaelckennedy.net/?p=1445</guid>

					<description><![CDATA[[Update: Listen to my interview with Mahmoud Hashemi from PayPal on this topic on the Talk Python To Me Podcast, Episode #4] Yesterday I stumbled across an excellent article by Mahmoud Hashemi from the PayPal engineering team entitled 10 Myths of Enterprise Python. No. Seriously. It&#8217;s really good. Make sure you save it to your [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>[<strong>Update</strong>: Listen to my interview with Mahmoud Hashemi from PayPal on this topic on the <a title="Episode #4: Enterprise Python and Large-Scale Projects" href="http://www.talkpythontome.com/episodes/show/4/enterprise-python-and-large-scale-projects" target="_blank">Talk Python To Me Podcast, Episode #4</a>]</p>
<p>Yesterday I stumbled across an <em>excellent</em> article by <a href="https://twitter.com/mhashemi">Mahmoud Hashemi</a> from the PayPal engineering team entitled <a href="https://www.paypal-engineering.com/2014/12/10/10-myths-of-enterprise-python/"><strong>10 Myths of Enterprise Python</strong></a>.</p>
<p>No. Seriously. It&#8217;s really good. Make sure you save it to your reading list.</p>
<blockquote><p>
  <a href="https://www.paypal-engineering.com/2014/12/10/10-myths-of-enterprise-python/"><strong>10 Myths of Enterprise Python</strong></a><br />
  <a href="https://www.paypal-engineering.com/2014/12/10/10-myths-of-enterprise-python/">https://www.paypal-engineering.com/2014/12/10/10-myths-of-enterprise-python/</a>
</p></blockquote>
<p><span id="more-1445"></span>I have been teaching a lot of <a href="https://www.develop.com/training-courses/python">Python at DevelopMentor</a> and most people who are learning Python are coming to it from one of two places. Either they are experienced with another language but not Python or they know Python but only just enough to keep some basic scripts running.</p>
<p>While teaching the in&#8217;s and out&#8217;s of Python is a key goal, another thing we try to convey is that <strong>Python is a serious, full stack, professional, and comprehensive platform</strong>. For <em>most</em> projects, I&#8217;d gladly put Python up against C# / .NET, Java, and C++.</p>
<p>Mahmoud&#8217;s post conveys the same basic idea. The beautiful thing about his post is that he backs this up with solid usage and large enterprise data.</p>
<p>Here are a few key <strong>myths</strong> dispelled in the post:</p>
<h2>False Myths about Python</h2>
<ul>
<li>Python is not compiled</li>
<li>Python is not secure</li>
<li>Python is a scripting language</li>
<li>Python is weakly-typed</li>
<li>Python is slow</li>
<li>Python does not scale</li>
<li>Python is not for big projects</li>
</ul>
<p>The large scale use of Python is particularly impressive. For example, Mahmoud writes:</p>
<p><strong>Scale (as in performance)</strong></p>
<p><em>Scale has many definitions, but by any definition, YouTube is a web site at scale. More than 1 billion unique visitors per month, over 100 hours of uploaded video per minute, and going on 20 percent of peak Internet bandwidth, all with Python as a core technology. Dropbox, Disqus, Eventbrite, Reddit, Twilio, Instagram, Yelp, EVE Online, Second Life, and, yes, eBay and PayPal all have Python scaling stories that prove scale is more than just possible: it’s a pattern.</em></p>
<p><strong>Scale (as in size)</strong></p>
<p><em>Myth #7 discussed running Python projects at scale, but what about developing Python projects at scale? As mentioned in Myth #9, most Python projects tend not to be people-hungry. while Instagram reached hundreds of millions of hits a day at the time of their billion dollar acquisition, the whole company was still only a group of a dozen or so people. Dropbox in 2011 only had 70 engineers, and other teams were similarly lean. So, can Python scale to large teams?</em></p>
<p><em>Bank of America actually has over 5,000 Python developers, with over 10 million lines of Python in one project alone. JP Morgan underwent a similar transformation. YouTube also has engineers in the thousands and lines of code in the millions. Big products and big teams use Python every day, and while it has excellent modularity and packaging characteristics, beyond a certain point much of the general development scaling advice stays the same. Tooling, strong conventions, and code review are what make big projects a manageable reality.</em></p>
<p>Hopefully this has given you a new perspective on Python. Once again, you really should check out the original article:</p>
<p><a href="https://www.paypal-engineering.com/2014/12/10/10-myths-of-enterprise-python/"><strong>10 Myths of Enterprise Python</strong></a></p>
<p>Also, if you&#8217;re coming at this from a .NET perspective, be sure to watch my video comparison of the two ecosystems.</p>
<p><strong>Video</strong>: <a href="https://michaelckennedy.wordpress.com/2013/12/18/watch-python-for-the-c-and-net-developer/">https://michaelckennedy.wordpress.com/2013/12/18/watch-python-for-the-c-and-net-developer/</a><br />
(doesn&#8217;t work on Firefox, sorry)</p>
<p><strong>Slides</strong>: <a href="http://www.slideshare.net/mkennedy66996693/python-for-the-c-developer">http://www.slideshare.net/mkennedy66996693/python-for-the-c-developer</a></p>
]]></content:encoded>
					
					<wfw:commentRss>https://michaelckennedy.wordpress.com/2014/12/11/10-myths-of-enterprise-python-from-paypal/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
		
		<media:content url="https://0.gravatar.com/avatar/0c39b1af51635a37bd212fc71e854db94323bbdfdeb53bfbc9bc34d26620b8eb?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">michaelckennedy</media:title>
		</media:content>
	</item>
		<item>
		<title>Announcing DevelopMentor&#8217;s Swift iOS and OS X Course</title>
		<link>https://michaelckennedy.wordpress.com/2014/12/11/announcing-developmentors-swift-ios-and-os-x-course/</link>
					<comments>https://michaelckennedy.wordpress.com/2014/12/11/announcing-developmentors-swift-ios-and-os-x-course/#respond</comments>
		
		<dc:creator><![CDATA[Michael Kennedy]]></dc:creator>
		<pubDate>Thu, 11 Dec 2014 14:45:00 +0000</pubDate>
				<category><![CDATA[DevelopMentor]]></category>
		<category><![CDATA[Apple]]></category>
		<category><![CDATA[iOS]]></category>
		<category><![CDATA[OS X]]></category>
		<category><![CDATA[Swift]]></category>
		<guid isPermaLink="false">http://blog.michaelckennedy.net/?p=1436</guid>

					<description><![CDATA[What a week! Time to announce the second course this week I&#8217;ve written for DevelopMentor along with my co-author Bradley Needham. Essential Swift iOS and OS X Programming Course If you&#8217;re ready to start building iOS and OS X applications with Apple&#8217;s latest language, check out our course. Here’s some more background on this course. [&#8230;]]]></description>
										<content:encoded><![CDATA[<p><a href="https://www.develop.com/training-course/essential-swift-ios-and-os-x-programming"><img src="https://michaelckennedy.wordpress.com/wp-content/uploads/2014/12/swift-banner.png?w=600" alt="" /></a></p>
<p>What a week! Time to announce the second course this week I&#8217;ve written for <a href="https://www.develop.com/">DevelopMentor</a> along with my co-author <a href="https://www.develop.com/technicalstaff/details/bradley-needham">Bradley Needham</a>.</p>
<blockquote><p>
  <a href="https://www.develop.com/training-course/essential-swift-ios-and-os-x-programming">Essential Swift iOS and OS X Programming Course</a>
</p></blockquote>
<p>If you&#8217;re ready to start building iOS and OS X applications with Apple&#8217;s latest language, <a href="https://www.develop.com/training-course/essential-swift-ios-and-os-x-programming">check out our course</a>.</p>
<p>Here’s some more background on this course.</p>
<p><a href="https://www.develop.com/training-course/essential-swift-ios-and-os-x-programming">https://www.develop.com/training-course/essential-swift-ios-and-os-x-programming</a></p>
<h2><span id="more-1436"></span></h2>
<p>When <a href="https://www.youtube.com/watch?v=oo_lf2FX9eI">Apple announced the Swift programming language</a> to cheering crowds at WWDC 2014, we knew it would be important. Swift is destined to replace the aging Objective-C language which was introduced over 32 years ago. Swift is built upon three core principles: safe, modern, and powerful. It fulfills these principles by borrowing the best features from modern languages such as Python, C#, modern C++, and others. While Swift adopts modern high-level language features it also improves upon Objective-C’s native performance and is actually faster than its predecessor.</p>
<p>This course is a deep, practical, and hands-on exploration of the Swift language and surrounding ecosystem. You will learn why Swift was introduced. You will see how Swift is a safe, modern, and powerful language. You will learn how to build iOS (iPhone and iPad) applications as well as native OS X applications using Xcode. All of these lessons will be reinforced with hands-on exercises and many example applications built live during class.</p>
<p>There are cross-platform options for building iOS and OS X applications. However, if you are ready to go all in on the Apple ecosystem you need to learn Swift today. This comprehensive course is a great place to start.</p>
<h2>Course Outline</h2>
<p><strong>Day 1</strong></p>
<ul>
<li>Introduction to Swift for iOS and OS X</li>
<li>Language Basics</li>
<li>Types and collections</li>
<li>Functions and closures</li>
</ul>
<p><strong>Day 2</strong></p>
<ul>
<li>Optionals, Optional Chaining, and Generics</li>
<li>Classes and Structures</li>
<li>Protocols and Extensions</li>
<li>Memory management</li>
</ul>
<p><strong>Day 3</strong></p>
<ul>
<li>Day of iOS</li>
</ul>
<p><strong>Day 4</strong></p>
<ul>
<li>Day of OS X</li>
</ul>
<p>Read more on <a href="https://www.develop.com/training-course/essential-swift-ios-and-os-x-programming">develop.com</a> &#8230;</p>
]]></content:encoded>
					
					<wfw:commentRss>https://michaelckennedy.wordpress.com/2014/12/11/announcing-developmentors-swift-ios-and-os-x-course/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		
		<media:content url="https://0.gravatar.com/avatar/0c39b1af51635a37bd212fc71e854db94323bbdfdeb53bfbc9bc34d26620b8eb?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">michaelckennedy</media:title>
		</media:content>

		<media:content url="https://michaelckennedy.wordpress.com/wp-content/uploads/2014/12/swift-banner.png?w=600" medium="image" />
	</item>
		<item>
		<title>Announcing MongoDB for Python Developers Course</title>
		<link>https://michaelckennedy.wordpress.com/2014/12/10/announcing-mongodb-for-python-developers-course/</link>
					<comments>https://michaelckennedy.wordpress.com/2014/12/10/announcing-mongodb-for-python-developers-course/#respond</comments>
		
		<dc:creator><![CDATA[Michael Kennedy]]></dc:creator>
		<pubDate>Wed, 10 Dec 2014 16:40:31 +0000</pubDate>
				<category><![CDATA[DevelopMentor]]></category>
		<category><![CDATA[MongoDB]]></category>
		<category><![CDATA[NoSQL]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Python]]></category>
		<guid isPermaLink="false">http://blog.michaelckennedy.net/?p=1427</guid>

					<description><![CDATA[I&#8217;m very exited to announce the latest course I&#8217;ve written for DevelopMentor: MongoDB for Python Developers If you&#8217;re looking for MongoDB training for you or your team, please consider DevelopMentor. We also have my MongoDB for .NET developers course if you live in the .NET camp. Here&#8217;s some more background on this course. MongoDB for [&#8230;]]]></description>
										<content:encoded><![CDATA[<p><img src="https://michaelckennedy.wordpress.com/wp-content/uploads/2014/12/pythonmongodb.png" alt="" /></p>
<p>I&#8217;m very exited to announce the latest course I&#8217;ve written for DevelopMentor:</p>
<blockquote><p>
  <a href="https://www.develop.com/training-course/mongodb-for-python-developers-nosql-course">MongoDB for Python Developers</a>
</p></blockquote>
<p>If you&#8217;re looking for MongoDB training for you or your team, please consider DevelopMentor. We also have my <a href="https://www.develop.com/training-course/mongodb-for-dotnet-and-csharp-developers-nosql-course">MongoDB for .NET developers</a> course if you live in the .NET camp.</p>
<p>Here&#8217;s some more background on this course.<br />
<span id="more-1427"></span></p>
<h2>MongoDB for Python Developers</h2>
<p>This course is a deep exploration of building applications in MongoDB (the <a href="http://www.google.com/trends/explore?hl=en-US#cat=0-5&amp;q=mongodb,+couchdb,+riak,+cassandra,+ravendb,+nosql&amp;cmpt=q">most popular</a> NoSQL document-database). There are many benefits to choosing a NoSQL database over traditional RDMBSs such as SQL Server or Oracle. This course starts out by looking at why you should choose a NoSQL database in the first place. We will explore the native query language and capabilities of MongoDB. Then we will start working with MongoDB from our Python applications and look at several topics that explore the advanced aspects of the MongoDB Python API including MongoDB from Python, PyMongo, ODMs such as MongoEngine, and more. We will see how to leverage the immense scalability of MongoDB using the aggregation framework, replica sets, and sharding. You will discover how to store and manage files of virtually unlimited size in MongoDB using GridFS. We will discuss how to properly design your entities and documents (both natively and in Python) to take full advantage of what MongoDB has to offer. Finally, we will round out the course with a few topics that you will need to be successful with MongoDB including Server administration for developers and Security and permissions.</p>
<p>Note that some of the topics cover in this course are technology agnostic (for example the native query lesson is equality applicable to Python developers as well as .NET or Java developers) and some are specifically optimized for Python developers (for example MongoEngine and ODMs).</p>
<p>Why should you choose DevelopMentor&#8217;s MongoDB course? At DevelopMentor we have experience building and running large scale MongoDB deployments including our online learning platform <strong>LearningLine</strong> and <strong>develop.com</strong> itself. The course authors work closely with the MongoDB team and are in the <a href="http://www.mongodb.org/about/community/masters/">MongoDB Masters program</a>. We have been teaching MongoDB in our Python courses and our Guerrilla .NET course for several years. In short, we know what we&#8217;re doing with MongoDB and Python and we&#8217;d love to share it with you.</p>
<h2>Course outline</h2>
<p><strong>Day 1</strong></p>
<ul>
<li>Why NoSQL and why MongoDB?</li>
<li>The shell and &#8216;native&#8217; commands</li>
<li>MongoDB from Python</li>
</ul>
<p><strong>Day 2</strong></p>
<ul>
<li>Real world MongoDB with MongoEngine</li>
<li>Entity Design</li>
<li>Indexing and profiling</li>
</ul>
<p><strong>Day 3</strong></p>
<ul>
<li>GridFS &#8211; A file system within MongoDB</li>
<li>Aggregation framework</li>
<li>Server administration for developers</li>
</ul>
<p><strong>Day 4</strong></p>
<ul>
<li>Replication</li>
<li>Sharding</li>
<li>Security and permissions</li>
</ul>
<p>Read more on <a href="https://www.develop.com/training-course/mongodb-for-python-developers-nosql-course">develop.com</a> &#8230;</p>
]]></content:encoded>
					
					<wfw:commentRss>https://michaelckennedy.wordpress.com/2014/12/10/announcing-mongodb-for-python-developers-course/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		
		<media:content url="https://0.gravatar.com/avatar/0c39b1af51635a37bd212fc71e854db94323bbdfdeb53bfbc9bc34d26620b8eb?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">michaelckennedy</media:title>
		</media:content>

		<media:content url="https://michaelckennedy.wordpress.com/wp-content/uploads/2014/12/pythonmongodb.png" medium="image" />
	</item>
		<item>
		<title>Comparison of Modern C++ and Apple&#8217;s Swift Programming Language Syntax</title>
		<link>https://michaelckennedy.wordpress.com/2014/12/08/comparison-of-modern-c-and-apples-swift-programming-language-syntax/</link>
					<comments>https://michaelckennedy.wordpress.com/2014/12/08/comparison-of-modern-c-and-apples-swift-programming-language-syntax/#comments</comments>
		
		<dc:creator><![CDATA[Michael Kennedy]]></dc:creator>
		<pubDate>Mon, 08 Dec 2014 20:15:18 +0000</pubDate>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[Swift]]></category>
		<guid isPermaLink="false">http://blog.michaelckennedy.net/?p=1390</guid>

					<description><![CDATA[This is a guest post from Bradley Needham, one of my DevelopMentor colleagues. He manages our C++ curriculum and was inspired by my Swift / Python comparison (Comparison of Python and Apple’s Swift Programming Language Syntax). Here&#8217;s Bradley and C++ vs. Swift. Thanks Bradley! When Michael wrote his Python vs Swift article, I found it [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>This is a guest post from <a href="https://www.develop.com/technicalstaff/details/bradley-needham">Bradley Needham</a>, one of my <a href="https://www.develop.com/">DevelopMentor</a> colleagues. He manages our C++ curriculum and was inspired by my Swift / Python comparison (<a href="https://michaelckennedy.wordpress.com/2014/11/26/comparison-of-python-and-apples-swift-programming-language-syntax/">Comparison of Python and Apple’s Swift Programming Language Syntax</a>).</p>
<p>Here&#8217;s <strong>Bradley</strong> and <strong>C++ vs. Swift</strong>. Thanks Bradley!<span id="more-1390"></span></p>
<hr />
<p><img src="https://michaelckennedy.wordpress.com/wp-content/uploads/2014/12/cpp-vs-swift.png" alt="" /></p>
<p>When Michael wrote his Python vs Swift article, I found it interesting how similar each of these languages (Python, C#, and Swift) are and thought it might be worth having a similar article comparing Modern C++ and Swift.</p>
<h3>Code Comments</h3>
<p>Swift has the same comments as C++ with a twist:</p>
<pre class="brush: cpp; title: ; notranslate">
// C++ single line comment
// Swift single line comment

/* C++ Multiline
comment but cannot nest */

/* Swift Multiline
comment but /*can*/ nest */
</pre>
<h3>Constants and Variables</h3>
<p>Swift is strictly typed but also makes use of type inference. C++ is also strictly typed and makes use of type inference.</p>
<pre class="brush: cpp; title: ; notranslate">
var age = 25 // An inferred initialized Int variable in Swift
var salary : Float // An explicit uninitialized Float in Swift

auto age = 25; // An inferred initialized int variable in C++
double salary; // An explicit uninitialized float in C++

let pi = 3.1415 // Constant in Swift

const auto pi = 3.1415; // Constant in C++
</pre>
<h3>Strings</h3>
<p>Swift treats double-quoted literals as the String type. C++ treats double-quoted literals as a zero-terminated <code>const char[]</code> but does have a standard string type that can be used.</p>
<pre class="brush: cpp; title: ; notranslate">
var msg = &quot;A String in Swift&quot;
var s = msg.utf16Count // s is 17

auto msg = &quot;A zero-terminated const char[] in C++&quot;;
auto s = msg.length(); // error no such member

auto msg1 = std::string(&quot;A string in C++&quot;);
auto s = msg.length(); // s is 15
</pre>
<p>Both Swift and C++ support unicode. Swift provides the String type and C++ <code>std::u16string</code>.</p>
<h3>Arrays</h3>
<p>Swift supports dynamically-growable arrays. C++ has <code>std::vector</code> which offers similar functionality.</p>
<h4>Declaring</h4>
<pre class="brush: cpp; title: ; notranslate">
// Swift
var nums = [1,2,3,5,7,11]
var strings = [&quot;hello&quot;, &quot;how are you&quot;, &quot;goodbye&quot;]

// C++
auto nums = std::vector {1,2,3,5,7,11};
auto strings = std::vector {&quot;hello&quot;, &quot;how are you&quot;, &quot;goodbye&quot;};
</pre>
<h3>Using</h3>
<p>Here is a comparison of using arrays in the two languages.</p>
<pre class="brush: cpp; title: ; notranslate">
// Iteration in Swift
var nums = [1,2,3,5,7,11]
for n in nums {
println(n)
}

// Iteration in C++
auto nums = std::vector&lt;int&gt;{1,2,3,5,7,11}&lt;wbr /&gt;;
for (auto n : nums) {
std::cout &lt;&lt; n &lt;&lt; &quot;n&quot;;
}

// Updating values
nums[2] = 10 // Swift
nums[2] = 10 // C++

// Check for elements
// Swift
if !nums.isEmpty {
println(&quot;nums is not empty&quot;)
}

// C++
if (!nums.empty()) {
std::cout &lt;&lt; &quot;nums is not emptyn&quot;;
}

// Adding items
nums.append(7) // Swift
nums.push_back(7) // C++
</pre>
<h3>Dictionaries</h3>
<p>Swift has build in support for dictionaries. C++ has <code>std::map</code> and <code>std::unordered_map</code>.</p>
<pre class="brush: cpp; title: ; notranslate">
// Swift
var cust = [&quot;name&quot;: &quot;Brad&quot;, &quot;state&quot;: &quot;CA&quot;] // initialize

var the_name = cust[&quot;name&quot;] // access value
cust[&quot;name&quot;] = &quot;Bradley&quot; // change value
cust[&quot;hobby&quot;] = &quot;Swimming&quot; // add key/value
cust.removeValueForKey(&quot;hobby&quot;) // remove key/value

// C++
auto cust =
std::map&lt;std::string, std::string&gt; {{&quot;name&quot;, &quot;Brad&quot;}, {&quot;state&quot;, &quot;CA&quot;}};

auto the_name = cust[&quot;name&quot;]; // access value
cust[&quot;name&quot;] = &quot;Bradley&quot;; // change value
cust[&quot;hobby&quot;] = &quot;Swimming&quot;; // add key/value
cust.erase(cust.find(&quot;hobby&quot;)); // remove key/value
</pre>
<p>Both languages also allow for checking for the existence of a key</p>
<pre class="brush: cpp; title: ; notranslate">
// Swift
if let theHobby = cust[&quot;hobby&quot;] {
println(&quot;Your hobby is (theHobby)&quot;)
}

// C++
try {
auto theHobby = cust.at(&quot;hobby&quot;);
std::cout &lt;&lt; &quot;Your hobby is &quot; &lt;&lt; theHobby &lt;&lt; “\n&quot;;
} catch (...) {
}

// C++
auto it = cust.find(&quot;hobby&quot;);
if (it != cust.end()) {
std::cout &lt;&lt; &quot;Your hobby is &quot; &lt;&lt; it-&gt;second &lt;&lt; “\n&quot;;
}
</pre>
<h3>Conditional statements</h3>
<p>Swift allows the removal of parenthesis, C++ requires them.</p>
<pre class="brush: cpp; title: ; notranslate">
// Swift
var n = 42
if n &lt; 40 {
println(&quot;n is less than 40&quot;)
} else {
println(&quot;n is 40 or above&quot;)
}

if (n == 42) { // works with or without parenthesis
println(&quot;the answer&quot;)
}

// C++
if (n &lt; 40) { // must have parenthesis
println(&quot;n is less than 40&quot;)
} else {
println(&quot;n is 40 or above&quot;)
}

if (n == 42) {
println(&quot;the answer&quot;)
}

// conditional and logic operators are the same
// &amp;&amp;, ||, &lt;=, &gt;=, !, ==, etc.
</pre>
<h3>Switch statements</h3>
<p>Default behavior differs between languages. At the end of a case statement, Swift has an automatic break while C++ falls through to next case.</p>
<pre class="brush: cpp; title: ; notranslate">
// Swift
switch (i)
{
case 1:
// do work
case 2:
// do work
default:
// do work
}

// C++
switch (i)
{
case 1:
// do work
break; // must explicity break out of switch
case 2:
// do work
break; // must explicity break out of switch
default:
// do work
break; // must explicity break out of switch
}
</pre>
<p><code>fallthrough</code> keyword is used to fall through a case in Swift. In C++, removal of the break causes a fall through</p>
<pre class="brush: cpp; title: ; notranslate">
// Swift
switch i
{
case 1:
// do work
case 2:
// do work
fallthrough // must explicity fall through
default:
// do work
}

// C++
switch (i)
{
case 1:
// do work
break; // must explicitly break out of switch
case 2:
// do work
// no break will fall through
default:
// do work
break; // must explicitly break out of switch
}
</pre>
<p>Swift allows for switching on Strings, C++ does not</p>
<pre class="brush: cpp; title: ; notranslate">
// Swift only
switch str
{
case &quot;hello&quot;:
// do work
case &quot;goodbye&quot;:
// do work
default:
// do work
}
</pre>
<p>Swift allows for range cases. C++ uses the default fall through to accomplish similar functionality</p>
<pre class="brush: cpp; title: ; notranslate">
// Swift
switch i
{
case 1...3:
// do work
default:
// do work
}

// C++
switch (i)
{
case 1:
case 2:
case 3:
// do work
break;
default:
//do work
break;
}
</pre>
<h3>Functions</h3>
<p>Both languages have rich support for functions, including lambdas, function objects, and tuples.</p>
<pre class="brush: cpp; title: ; notranslate">
// Swift
func getUser(id : Int) -&gt; (String, String) {
var username = &quot;username&quot;
var email = &quot;email&quot;
return (username, email)
}

var (n, e) = getUser(1) // n = username, e = email

// C++11
auto getUser(int id) -&gt; std::tuple&lt;std::string, std::string&gt; {
auto username = &quot;username&quot;;
auto email = &quot;email&quot;;
return std::make_tuple(username, email);
}

// C++14
auto getUser(int id) {
auto username = &quot;username&quot;;
auto email = &quot;email&quot;;
return std::make_tuple(username, email);
}

std::string n, e;
std::tie(n, e) = getUser(1);
</pre>
<h3>Conclusion</h3>
<p>Most modern 3rd-generation languages have many similarities, it just takes getting use to the small differences in order to be able to code between them. Once you get past the language issues, you can spend your time on the platform API which is the thing that really lets you get your work done.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://michaelckennedy.wordpress.com/2014/12/08/comparison-of-modern-c-and-apples-swift-programming-language-syntax/feed/</wfw:commentRss>
			<slash:comments>22</slash:comments>
		
		
		
		<media:thumbnail url="https://michaelckennedy.wordpress.com/wp-content/uploads/2014/12/cpp-vs-swift.png" />
		<media:content url="https://michaelckennedy.wordpress.com/wp-content/uploads/2014/12/cpp-vs-swift.png" medium="image">
			<media:title type="html">cpp-vs-swift</media:title>
		</media:content>

		<media:content url="https://0.gravatar.com/avatar/0c39b1af51635a37bd212fc71e854db94323bbdfdeb53bfbc9bc34d26620b8eb?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">michaelckennedy</media:title>
		</media:content>
	</item>
		<item>
		<title>Python for the .NET Developer on .NET Rocks</title>
		<link>https://michaelckennedy.wordpress.com/2014/12/05/python-for-the-net-developer-on-net-rocks/</link>
					<comments>https://michaelckennedy.wordpress.com/2014/12/05/python-for-the-net-developer-on-net-rocks/#respond</comments>
		
		<dc:creator><![CDATA[Michael Kennedy]]></dc:creator>
		<pubDate>Fri, 05 Dec 2014 14:49:00 +0000</pubDate>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[.NET]]></category>
		<guid isPermaLink="false">http://blog.michaelckennedy.net/?p=1382</guid>

					<description><![CDATA[[Note: This news is old, I some how missed posting it to my blog. So here it is!] Show 951:  Python on .NET with Michael Kennedy Back in February, I had the honor of being the guest on the .NET Rocks podcast with Carl Franklin and Richard Campbell. We talked about the similarities between Python [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>[<strong>Note</strong>: This news is old, I some how missed posting it to my blog. So here it is!]</p>
<p><a href="http://www.dotnetrocks.com/default.aspx?showNum=951"><img src="https://michaelckennedy.wordpress.com/wp-content/uploads/2014/12/dotnetrocks-header.png" alt="" /></a><br />
<a href="http://www.dotnetrocks.com/default.aspx?showNum=951"><strong>Show 951:  Python on .NET with Michael Kennedy</strong></a></p>
<p>Back in February, I had the honor of being the guest on the .NET Rocks podcast with Carl Franklin and Richard Campbell. We talked about the similarities between Python and C# and the Python and .NET ecosystems. It was a great show and I think you’ll find it interesting if you are a .NET or Python developer.</p>
<p>Listen to the whole show at <a href="http://www.dotnetrocks.com/default.aspx?showNum=951">the .NET Rocks page</a> or you can <a href="http://s3.amazonaws.com/dnr/dotnetrocks_0951_kennedy.mp3">stream the MP3 directly</a> from the .NET Rocks website.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://michaelckennedy.wordpress.com/2014/12/05/python-for-the-net-developer-on-net-rocks/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		<enclosure url="http://s3.amazonaws.com/dnr/dotnetrocks_0951_kennedy.mp3" length="55306367" type="audio/mpeg" />
<enclosure url="http://s3.amazonaws.com/dnr/dotnetrocks_0951_kennedy.mp3" length="55306367" type="audio/mpeg" />
<enclosure url="http://s3.amazonaws.com/dnr/dotnetrocks_0951_kennedy.mp3" length="55306367" type="audio/mpeg" />
<enclosure url="http://s3.amazonaws.com/dnr/dotnetrocks_0951_kennedy.mp3" length="55306367" type="audio/mpeg" />
<enclosure url="http://s3.amazonaws.com/dnr/dotnetrocks_0951_kennedy.mp3" length="55306367" type="audio/mpeg" />
<enclosure url="http://s3.amazonaws.com/dnr/dotnetrocks_0951_kennedy.mp3" length="55306367" type="audio/mpeg" />
<enclosure url="http://s3.amazonaws.com/dnr/dotnetrocks_0951_kennedy.mp3" length="55306367" type="audio/mpeg" />
<enclosure url="http://s3.amazonaws.com/dnr/dotnetrocks_0951_kennedy.mp3" length="55306367" type="audio/mpeg" />
<enclosure url="http://s3.amazonaws.com/dnr/dotnetrocks_0951_kennedy.mp3" length="55306367" type="audio/mpeg" />
<enclosure url="http://s3.amazonaws.com/dnr/dotnetrocks_0951_kennedy.mp3" length="55306367" type="audio/mpeg" />
<enclosure url="http://s3.amazonaws.com/dnr/dotnetrocks_0951_kennedy.mp3" length="55306367" type="audio/mpeg" />
<enclosure url="http://s3.amazonaws.com/dnr/dotnetrocks_0951_kennedy.mp3" length="55306367" type="audio/mpeg" />
<enclosure url="http://s3.amazonaws.com/dnr/dotnetrocks_0951_kennedy.mp3" length="55306367" type="audio/mpeg" />
<enclosure url="http://s3.amazonaws.com/dnr/dotnetrocks_0951_kennedy.mp3" length="55306367" type="audio/mpeg" />
<enclosure url="http://s3.amazonaws.com/dnr/dotnetrocks_0951_kennedy.mp3" length="55306367" type="audio/mpeg" />
<enclosure url="http://s3.amazonaws.com/dnr/dotnetrocks_0951_kennedy.mp3" length="55306367" type="audio/mpeg" />
<enclosure url="http://s3.amazonaws.com/dnr/dotnetrocks_0951_kennedy.mp3" length="55306367" type="audio/mpeg" />
<enclosure url="http://s3.amazonaws.com/dnr/dotnetrocks_0951_kennedy.mp3" length="55306367" type="audio/mpeg" />
<enclosure url="http://s3.amazonaws.com/dnr/dotnetrocks_0951_kennedy.mp3" length="55306367" type="audio/mpeg" />
<enclosure url="http://s3.amazonaws.com/dnr/dotnetrocks_0951_kennedy.mp3" length="55306367" type="audio/mpeg" />
<enclosure url="http://s3.amazonaws.com/dnr/dotnetrocks_0951_kennedy.mp3" length="55306367" type="audio/mpeg" />
<enclosure url="http://s3.amazonaws.com/dnr/dotnetrocks_0951_kennedy.mp3" length="55306367" type="audio/mpeg" />

		
		<media:thumbnail url="https://michaelckennedy.wordpress.com/wp-content/uploads/2014/12/dotnetrocks-header.png" />
		<media:content url="https://michaelckennedy.wordpress.com/wp-content/uploads/2014/12/dotnetrocks-header.png" medium="image">
			<media:title type="html">dotnetrocks-header</media:title>
		</media:content>

		<media:content url="https://0.gravatar.com/avatar/0c39b1af51635a37bd212fc71e854db94323bbdfdeb53bfbc9bc34d26620b8eb?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">michaelckennedy</media:title>
		</media:content>
	</item>
		<item>
		<title>Better Python Integration in Windows: Shebangs and Version Selectors</title>
		<link>https://michaelckennedy.wordpress.com/2014/12/04/better-python-integration-in-windows-shebangs-and-version-selectors/</link>
					<comments>https://michaelckennedy.wordpress.com/2014/12/04/better-python-integration-in-windows-shebangs-and-version-selectors/#comments</comments>
		
		<dc:creator><![CDATA[Michael Kennedy]]></dc:creator>
		<pubDate>Thu, 04 Dec 2014 22:31:53 +0000</pubDate>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Windows]]></category>
		<guid isPermaLink="false">http://blog.michaelckennedy.net/?p=1363</guid>

					<description><![CDATA[I’ve written several times on efforts to make Python better on Windows. I also have an outstanding request to the Windows 10 team to get Python built directly into Windows 10 (please upvote it!). In this post, I’ll show you some very simple techniques to put Python on Windows relatively on par with Python on [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>I’ve written several times on efforts to make Python better on Windows. I also have an outstanding request to the Windows 10 team to get Python built directly into Windows 10 (<a href="https://windows.uservoice.com/forums/265757-windows-feature-suggestions/suggestions/6693586-ship-python-3-and-python-2-with-windows-10">please upvote it</a>!). In this post, I’ll show you some very simple techniques to put Python on Windows relatively on par with Python on OS X and Linux.</p>
<p>On OS X and Linux, we can use a special kind of comment at the top of our script called a <strong>shebang</strong>.</p>
<pre class="brush: plain; title: ; notranslate">
#!/usr/bin/env python3
# normal python code here...
</pre>
<p><span id="more-1363"></span></p>
<p>This tells the OS which Python runtime to select and allows the script to be executed directly. For example, imagine that file was named <strong>program.py</strong>. Without the shebang, if we type simply <strong>./program.py</strong> we likely will get an error. We have to specify which version of Python by running <strong>python3 ./program.py</strong>. This has several problems. It’s not obvious to users they have to do this to run the script. Moreover, if that program is for Python 2 and we guess to use Python 3 too bad for us! The shebang solves both of these for us&#8230; on OS X and Linux.</p>
<h2>Shebangs on Windows</h2>
<p>If you try this little trick on Windows, you are likely to be disappointed even if you have Python installed. One possibility is to get this lovely experience.</p>
<p><img src="https://michaelckennedy.wordpress.com/wp-content/uploads/2014/12/step2.png" alt="" /></p>
<p>Another possibility is you’ll see a dialog to choose how to run *<strong>.py</strong> files.</p>
<p><img src="https://michaelckennedy.wordpress.com/wp-content/uploads/2014/12/step4.png" alt="" /></p>
<p>If you pick Python.exe you <em>may</em> get the right outcome. But now all Python scripts are  tied to a single Python version (Python 2 <em>or</em> Python 3). What we need is to fix this with something like the shebangs of Linux.</p>
<p>Consider this simple program that states the version of Python executing it.</p>
<pre class="brush: plain; title: ; notranslate">
import sys

ver = sys.version_info[0]
print(&quot;Hello from Python {}&quot;.format(ver))
</pre>
<p>Notice that if we directly execute it by specifying the Python version to run, it works great.</p>
<p><img src="https://michaelckennedy.wordpress.com/wp-content/uploads/2014/12/step3.png" alt="" /></p>
<p>Nice. But we still have the problem of the <em>user</em> deciding which version of Python to try (not good). Since Python 3.3, they have introduced a program named <a href="http://blog.python.org/2011/07/python-launcher-for-windows_11.html">Python Launcher for Windows</a>. This lovely little program allows us to use shebangs to let the script select its version.</p>
<pre class="brush: plain; title: ; notranslate">
#!/usr/bin/env python2
import sys

ver = sys.version_info[0]
print(&quot;Hello from Python {}&quot;.format(ver))
</pre>
<p>Now if we have the Python 2 shebang or Python 3 shebang, we get the perfect behavior. This is as long as we directly specify the Python launcher (<code>c:\windows\py.exe</code>)</p>
<p><img src="https://michaelckennedy.wordpress.com/wp-content/uploads/2014/12/step5.png" alt="" /></p>
<p>Note we can even keep the <code>/usr/bin/env</code> for compatibility with Linux &amp; OS X. But directly executing the script still fails.</p>
<p><img src="https://michaelckennedy.wordpress.com/wp-content/uploads/2014/12/step2.png" alt="" /></p>
<p>Luckily, we can teach Windows to use the Python Launcher rather than locking to a particular installed version of Python. In an <strong>admin</strong> command prompt, run these two commands.</p>
<p><img src="https://michaelckennedy.wordpress.com/wp-content/uploads/2014/12/step6.png" alt="" /></p>
<h2>Success</h2>
<p>Now, try to directly execute your script. Notice that simply changing the shebang controls the version selected by the <strong>operating system</strong>.</p>
<p><img src="https://michaelckennedy.wordpress.com/wp-content/uploads/2014/12/step7.png" alt="" /></p>
<p>Props to my <a href="https://develop.com">DevelopMentor</a> colleague <a href="https://www.develop.com/technicalstaff/details/pinku-surana">Pinku Surana</a> for the tips about putting all of these together.</p>
<h2>Learning Python?</h2>
<p>If you or your team need to get up to speed on Python, consider my series of Python classes at DevelopMentor.</p>
<p><a href="https://www.develop.com/training-courses/python">https://www.develop.com/training-courses/python</a></p>
]]></content:encoded>
					
					<wfw:commentRss>https://michaelckennedy.wordpress.com/2014/12/04/better-python-integration-in-windows-shebangs-and-version-selectors/feed/</wfw:commentRss>
			<slash:comments>4</slash:comments>
		
		
		
		<media:thumbnail url="https://michaelckennedy.wordpress.com/wp-content/uploads/2014/12/step61.png" />
		<media:content url="https://michaelckennedy.wordpress.com/wp-content/uploads/2014/12/step61.png" medium="image">
			<media:title type="html">step6</media:title>
		</media:content>

		<media:content url="https://0.gravatar.com/avatar/0c39b1af51635a37bd212fc71e854db94323bbdfdeb53bfbc9bc34d26620b8eb?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">michaelckennedy</media:title>
		</media:content>

		<media:content url="https://michaelckennedy.wordpress.com/wp-content/uploads/2014/12/step2.png" medium="image" />

		<media:content url="https://michaelckennedy.wordpress.com/wp-content/uploads/2014/12/step4.png" medium="image" />

		<media:content url="https://michaelckennedy.wordpress.com/wp-content/uploads/2014/12/step3.png" medium="image" />

		<media:content url="https://michaelckennedy.wordpress.com/wp-content/uploads/2014/12/step5.png" medium="image" />

		<media:content url="https://michaelckennedy.wordpress.com/wp-content/uploads/2014/12/step2.png" medium="image" />

		<media:content url="https://michaelckennedy.wordpress.com/wp-content/uploads/2014/12/step6.png" medium="image" />

		<media:content url="https://michaelckennedy.wordpress.com/wp-content/uploads/2014/12/step7.png" medium="image" />
	</item>
		<item>
		<title>Comparison of Python and Apple&#8217;s Swift Programming Language Syntax</title>
		<link>https://michaelckennedy.wordpress.com/2014/11/26/comparison-of-python-and-apples-swift-programming-language-syntax/</link>
					<comments>https://michaelckennedy.wordpress.com/2014/11/26/comparison-of-python-and-apples-swift-programming-language-syntax/#comments</comments>
		
		<dc:creator><![CDATA[Michael Kennedy]]></dc:creator>
		<pubDate>Wed, 26 Nov 2014 19:15:03 +0000</pubDate>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Swift]]></category>
		<guid isPermaLink="false">http://blog.michaelckennedy.net/?p=1315</guid>

					<description><![CDATA[As a Python and C# developer, I have been intrigued ever since Apple announced the Swift programming language to cheering crowds at WWDC 2014. This post will explore the syntax of Python 3 vs Swift. I was inspired by Chris Pietschmann&#8217;s post Basic Comparison of C# and Apple Swift Programming Language Syntax for C# and [&#8230;]]]></description>
										<content:encoded><![CDATA[<p><img loading="lazy" data-attachment-id="1316" data-permalink="https://michaelckennedy.wordpress.com/2014/11/26/comparison-of-python-and-apples-swift-programming-language-syntax/python-vs-swift/" data-orig-file="https://michaelckennedy.wordpress.com/wp-content/uploads/2014/11/python-vs-swift.png" data-orig-size="539,219" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="python-vs-swift" data-image-description="" data-image-caption="" data-medium-file="https://michaelckennedy.wordpress.com/wp-content/uploads/2014/11/python-vs-swift.png?w=300" data-large-file="https://michaelckennedy.wordpress.com/wp-content/uploads/2014/11/python-vs-swift.png?w=539" class="aligncenter wp-image-1316 size-full" src="https://michaelckennedy.wordpress.com/wp-content/uploads/2014/11/python-vs-swift.png" alt="python vs. swift" width="539" height="219" srcset="https://michaelckennedy.wordpress.com/wp-content/uploads/2014/11/python-vs-swift.png 539w, https://michaelckennedy.wordpress.com/wp-content/uploads/2014/11/python-vs-swift.png?w=150&amp;h=61 150w, https://michaelckennedy.wordpress.com/wp-content/uploads/2014/11/python-vs-swift.png?w=300&amp;h=122 300w" sizes="(max-width: 539px) 100vw, 539px" />As a Python and C# developer, I have been intrigued ever since <a href="https://www.youtube.com/watch?v=oo_lf2FX9eI" target="_blank">Apple announced the Swift programming language</a> to cheering crowds at WWDC 2014.</p>
<p>This post will explore the <strong>syntax</strong> of Python 3 vs Swift. I was inspired by Chris Pietschmann&#8217;s post <a href="http://pietschsoft.com/post/2014/06/07/Basic-Comparison-of-C-and-Apple-Swift-Programming-Language-Syntax" target="_blank">Basic Comparison of C# and Apple Swift Programming Language Syntax</a> for C# and Swift. So here is the Python version.</p>
<p><span id="more-1315"></span></p>
<p>Before you review the syntax comparisons, you may want to download the code in Python, Swift or both:</p>
<h2>Downloads</h2>
<ul>
<li><strong>Python</strong>: <a href="https://s3.amazonaws.com/michael-kennedy/blog/python-vs-swift/PythonVsSwift.py.zip">PythonVsSwift.py.zip</a></li>
<li><strong>Swift</strong>: <a href="https://s3.amazonaws.com/michael-kennedy/blog/python-vs-swift/SwiftComparedToPython.playground.zip">SwiftComparedToPython.playground.zip</a></li>
</ul>
<h2>Code Comments</h2>
<p>Both languages have comments:</p>
<pre># Python has single line comments 
 
// Swift has single line comments
/* Swift also has multi-line
   comments in C style
*/</pre>
<h2>Declaring Constants and Variables</h2>
<p>Swift has rich support for type inference and constants. Python is dynamic and <a href="https://stackoverflow.com/questions/2682745/creating-constant-in-python" target="_blank">does not natively support constants</a>.</p>
<pre>name = "A string variable in Python"
age = 42 # An integer variable in Python
 
var name = "A string variable in Swift"
var age : Int // An explicit integer variable in Swift
age = 42
 
let pi = 3.14 // Constant in Swift</pre>
<h2>Integer Bounds</h2>
<pre># Python does not have upper bounds for integer numbers (Python 3)
large_nun = 10000000000000000000000000000000000000000000000000000
 
// Swift
var a = Int32.min
var b = Int32.max</pre>
<h2>Type Inference</h2>
<p>Swift is a strongly-typed language which makes heavy use of type-inference although you can declare explicit types. Python is a dynamic language so while there is a type system it is not evident in the syntax.</p>
<pre># Python
name = "Michael" # string variable, but can change
name = 42        # would run
n = 42           # currently an int
d = 42.0         # currently a float
 
// Swift
var name = "Michael" // string
name = 42            // Error
var n = 42           // int
var d = 42.0         // double</pre>
<h2>String Comparison</h2>
<p>Python and Swift both have Unicode strings. Python generally has richer string support than Swift (especially around string formatting).</p>
<pre># python
a = "some text"
b = "some text"
if a == b:
    print("The strings are equal")
 
# swift
var a = "some text"
var b = "some text"
if a == b {
    println("The strings are equal")
}</pre>
<p>Both languages have many functions on strings</p>
<pre># python
if a.startswith("some"): 
     print("Starts with some")

if a.endswith("some"):
     print("Ends with some")
 
// swift
if a.hasPrefix("some") {
     println("Starts with some")
 }
 
if a.hasSuffix("some") {
     println("Ends with some")
 }</pre>
<h2>String Upper or Lower Case</h2>
<pre># python
s = "some text"
u = s.upper()
l = s.lower()
 
// swift
var s = "some text"
var u = s.uppercaseString
var l = s.lowercaseString</pre>
<h2>Declaring Arrays</h2>
<p>Neither language has strict array types in the sense of C-based arrays. The arrays in Swift and Python are closer to lists. Python&#8217;s lists are not typed (hence can be heterogeneous).</p>
<pre># python
nums = [1,1,3,5,8,13,21]

// swift
var nums = [1,1,3,5,8,13,21]          // int array
var strings = ["one", "two", "three"] // string array</pre>
<h2>Working with Arrays</h2>
<pre># Iteration in python
nums = [1,1,3,5,8,13,21]
for n in nums:
    print(n)
 
# Iteration in Swift:
var nums = [1,1,3,5,8,13,21]
for n in nums {
    println(n)
}
 
# Element access
n = nums[2]      # python, n = 3
var n = nums[2]  # swift,  n = 3
 
# Updating values
nums[2] = 10 # python
nums[2] = 10 # swift
 
# Check for elements
# python
if nums:
    print("Nums is not empty")

// swift
if !nums.isEmpty {
    println("Nums is not empty")
} 
 
# Adding items:
nums.append(7) # python
nums.append(7) # swift
 
# Slicing
nums = [1,1,3,5,8,13,21]
middle     = nums[2:4]       # python, middle = [3, 5]
var middle = nums[2..&lt;4]     // swift, middle = [3,5]</pre>
<h2>Dictionaries</h2>
<p>Dictionaries play important roles in both languages and are fundamental types.</p>
<pre># python
d = dict(name="Michael", state="OR")
d = { "name": "Michael", "state": "OR" }
the_name = d["name"]
 
// swift
var empty_dict = Dictionary&lt;String, String&gt;()
var d = ["name": "Michael", "state": "OR"]
var the_name = d["name"]</pre>
<p>Adding items is the same in both languages. Removing entries is arguably clearer in Swift.</p>
<pre># add an item
d["hobby"] = "Biking" # python
d["hobby"] = "Biking" // swift
 
# remove an item
del d["hobby"]                # python
d.removeValueForKey("hobby")  // swift</pre>
<p>Checking for the existence of a key can also be done in both languages.</p>
<pre># python
if "hobby" in d:
    print("Your hobby is " + d["hobby"])
 
// swift
if let theHobby = d["hobby"] {
     println("Your hobby is \(theHobby)")
}</pre>
<h2>Conditional Statements</h2>
<p>Conditional statements are quite similar.</p>
<pre># python
n = 40
m = 2

if n &gt; 40:
    print("n bigger than 40") 
elif m == 2 and n % 2 == 0:
    print("m is 2")
else:
    print("else")
 
# swift
var n = 40
var m = 2

if n &gt; 40 {
    println("n bigger than 40") 
}
else if m == 2 &amp;&amp; n % 2 == 0 {
    print("m is 2")
}
else {
    print("else")
}</pre>
<h2>Switch statements</h2>
<p>Swift has them, Python does not.</p>
<p><strong>Functions</strong></p>
<p>Functions are very rich in both languages. They have closures, multiple return values, lambdas, and more. Here is a simple version. Note that this example also leverages tuples and tuple unpacking in both languages.</p>
<pre># python
def get_user(id):
    name = "username"
    email = "email"
    return name,email
 
n, e = get_user(1)
 
// swift
func getUser(id : Int) -&gt; (String, String) {
     var username = "username"
     var email = "email"
     return (username, email)
}
 
var (n, e) = getUser(1) // n = username, e = email</pre>
<h2>Conclusion</h2>
<p>As you can see, the similarities to Python are striking. I expect with some experience transitioning between the languages will be easy. The major differences actually lie underneath at the standard library vs cocoa base classes. As with most languages, this is where the real mastery of the platform happens.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://michaelckennedy.wordpress.com/2014/11/26/comparison-of-python-and-apples-swift-programming-language-syntax/feed/</wfw:commentRss>
			<slash:comments>16</slash:comments>
		
		
		
		<media:thumbnail url="https://michaelckennedy.wordpress.com/wp-content/uploads/2014/11/python-vs-swift.png" />
		<media:content url="https://michaelckennedy.wordpress.com/wp-content/uploads/2014/11/python-vs-swift.png" medium="image">
			<media:title type="html">python-vs-swift</media:title>
		</media:content>

		<media:content url="https://0.gravatar.com/avatar/0c39b1af51635a37bd212fc71e854db94323bbdfdeb53bfbc9bc34d26620b8eb?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">michaelckennedy</media:title>
		</media:content>
	</item>
		<item>
		<title>Shipping Python with Windows 10</title>
		<link>https://michaelckennedy.wordpress.com/2014/11/10/shipping-python-with-windows-10/</link>
					<comments>https://michaelckennedy.wordpress.com/2014/11/10/shipping-python-with-windows-10/#comments</comments>
		
		<dc:creator><![CDATA[Michael Kennedy]]></dc:creator>
		<pubDate>Mon, 10 Nov 2014 22:59:41 +0000</pubDate>
				<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Windows]]></category>
		<guid isPermaLink="false">http://blog.michaelckennedy.net/?p=1309</guid>

					<description><![CDATA[Python is awesome but Python on Windows always feels like the red-headed step child. With Window 10&#8217;s UserVoice campaign, you can help me change that! Let&#8217;s start here: Please vote for this request on UserVoice: Ship Python 3 and Python 2 with Windows 10 https://windows.uservoice.com/forums/265757-windows-feature-suggestions/suggestions/6693586-ship-python-3-and-python-2-with-windows-10 Ubuntu and OS X include the Python runtimes by default. [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Python is awesome but Python on Windows always feels like the red-headed step child. With Window 10&#8217;s UserVoice campaign, you can help me change that! Let&#8217;s start here:</p>
<p>Please vote for this request on UserVoice:</p>
<p><strong>Ship Python 3 and Python 2 with Windows 10</strong><a href="https://windows.uservoice.com/forums/265757-windows-feature-suggestions/suggestions/6693586-ship-python-3-and-python-2-with-windows-10" target="_blank"><br />
https://windows.uservoice.com/forums/265757-windows-feature-suggestions/suggestions/6693586-ship-python-3-and-python-2-with-windows-10</a></p>
<p><em>Ubuntu and OS X include the Python runtimes by default. Please Include the 64-bit version of Python 3 and Python 2 with Windows.</em></p>
<p><em>I believe many developers choose OS X and Linux over Windows because these OSes are more open source and CLI friendly. You have done a lot of fix the CLI experience in Windows 10. Please make Python development better on Windows by including it out of the box.</em></p>
<p>Need more inspiration? Watch this video about the future of Python (hint: it involves Windows)</p>
<div class="jetpack-video-wrapper">
<div class="embed-youtube"><iframe title="Jessica McKellar: The Future of Python - A Choose Your Own Adventure (Keynote)" width="970" height="546" src="https://www.youtube.com/embed/d1a4Jbjc-vU?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe></div>
</div>
]]></content:encoded>
					
					<wfw:commentRss>https://michaelckennedy.wordpress.com/2014/11/10/shipping-python-with-windows-10/feed/</wfw:commentRss>
			<slash:comments>5</slash:comments>
		
		
		
		<media:content url="https://0.gravatar.com/avatar/0c39b1af51635a37bd212fc71e854db94323bbdfdeb53bfbc9bc34d26620b8eb?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">michaelckennedy</media:title>
		</media:content>
	</item>
	</channel>
</rss>
