Congratulations!

[Valid RSS] This is a valid RSS feed.

Recommendations

This feed is valid, but interoperability with the widest range of feed readers could be improved by implementing the following recommendations.

Source: http://mechanicalcat.net/richard/log/rss

  1. <?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
  2. <rss version="2.0">
  3. <channel>
  4.  <title>Richard Jones' Log</title>
  5.  <link>http://mechanicalcat.net/richard/log</link>
  6.  <description>Richard Jones' Log</description>
  7.  <managingEditor>[email protected] (Richard Jones)</managingEditor>
  8.  <language>en</language>
  9.  
  10.  <item>
  11.   <title>PyCon Australia 2016: Registration Opens!</title>
  12.   <guid>http://mechanicalcat.net/richard/log/Python/PyCon_Australia_2016__Registration_Opens</guid>
  13.   <pubDate>Sun, 22 May 2016 22:52:24 +0000</pubDate>
  14.   <link>http://mechanicalcat.net/richard/log/Python/PyCon_Australia_2016__Registration_Opens</link>
  15.   <description>&lt;p&gt;
  16. We are delighted to announce that online registration is now open for &lt;a href="https://2016.pycon-au.org"&gt;PyCon Australia 2016&lt;/a&gt;. The seventh PyCon Australia is being held in Melbourne, Victoria from August 12th \x96 16th at the Melbourne Convention and Exhibition Centre, will draw hundreds of Python developers, enthusiasts and students from Australasia and afar.
  17. &lt;/p&gt;&lt;p&gt;
  18.  
  19. Starting today, early bird offers are up for grabs. To take advantage of these discounted ticket rates, be among the first 90 to register. Early bird registration starts from $60 for full-time students, $190 for enthusiasts and $495 for professionals. Offers this good won\x92t last long, so &lt;a href="https://2016.pycon-au.org"&gt;register right away&lt;/a&gt;.
  20. &lt;/p&gt;&lt;p&gt;
  21.  
  22. &lt;b&gt;We strongly encourage attendees to organise their accommodation as early as possible, as demand for cheaper rooms is very strong during the AFL season.&lt;/b&gt;
  23. &lt;/p&gt;&lt;p&gt;
  24.  
  25. PyCon Australia has endeavoured to keep tickets as affordable as possible. Financial assistance is also available: for information about eligibility, head to &lt;a href="https://2016.pycon-au.org/about/financial_assistance"&gt;our financial assistance page&lt;/a&gt; and apply. We are able to make such offers thanks to our Sponsors and Contributors.
  26. &lt;/p&gt;&lt;p&gt;
  27.  
  28. To begin the registration process, and find out more about each level of ticket, visit &lt;a href="https://2016.pycon-au.org/register/prices"&gt;our registration information page&lt;/a&gt;.
  29. &lt;/p&gt;&lt;p&gt;
  30.  
  31.  
  32. &lt;b&gt;Important Dates to Help You Plan&lt;/b&gt;
  33. &lt;/p&gt;
  34. &lt;ul&gt;
  35. &lt;li&gt;22 May: Registration opens - \x91Early bird\x92 prices for the first 90 tickets
  36. &lt;/li&gt;&lt;li&gt;
  37. 17 June: Last day to apply for financial assistance
  38. &lt;/li&gt;&lt;li&gt;
  39.  
  40. 26 June: Last day to purchase conference dinner tickets
  41. &lt;/li&gt;&lt;li&gt;
  42.  
  43. 9 July: Last day to order conference t-shirts
  44. &lt;/li&gt;&lt;li&gt;
  45.  
  46. 12 August: PyCon Australia 2016 begins!
  47. &lt;/li&gt;&lt;/ul&gt;
  48. &lt;p&gt;
  49. &lt;b&gt;About PyCon Australia&lt;/b&gt;
  50. &lt;/p&gt;&lt;p&gt;
  51. PyCon Australia is the national conference for the Python programming community. The seventh PyCon Australia will be held on August 12-16 2016 in Melbourne, bringing together professional, student and enthusiast developers with a love for programming in Python. PyCon Australia informs the country\x92s developers with presentations by experts and core developers of Python, as well as the libraries and frameworks that they rely on.
  52. &lt;/p&gt;&lt;p&gt;
  53.  
  54. To find out more about PyCon Australia 2016, visit our website at &lt;a href="http://pycon-au.org"&gt;pycon-au.org&lt;/a&gt;, follow us at @pyconau or e-mail us at [email protected]
  55. &lt;/p&gt;&lt;p&gt;
  56.  
  57. PyCon Australia is presented by Linux Australia (&lt;a href="http://www.linux.org.au"&gt;www.linux.org.au&lt;/a&gt;) and acknowledges the support of our Platinum Sponsors, DevDemand.co and IRESS; and our Gold sponsors, Google Australia and Optiver. For full details of our sponsors, see our website.
  58. &lt;/p&gt;
  59.  
  60. </description>
  61.  </item>
  62.  
  63.  
  64.  <item>
  65.   <title>PyCon Australia 2016 Call for Proposals!</title>
  66.   <guid>http://mechanicalcat.net/richard/log/Python/PyCon_Australia_2016_Call_for_Proposals</guid>
  67.   <pubDate>Mon, 18 Apr 2016 23:35:25 +0000</pubDate>
  68.   <link>http://mechanicalcat.net/richard/log/Python/PyCon_Australia_2016_Call_for_Proposals</link>
  69.   <description>&lt;img src="https://2016.pycon-au.org/logo-mel.png" style="float: right; margin-left: 1em"&gt;
  70. &lt;p&gt;&lt;a href="https://2016.pycon-au.org/person/new"&gt;Register&lt;/a&gt; and &lt;a href="https://2016.pycon-au.org/proposal/new" title="New Proposal"&gt;submit a proposal&lt;/a&gt;, or read on for more information.&lt;/p&gt;
  71.  
  72. &lt;p&gt;
  73. &lt;b&gt;&lt;a href="https://2016.pycon-au.org"&gt;PyCon Australia 2016&lt;/a&gt; is pleased to announce that its Call for Proposals is now open!&lt;/b&gt; The conference this year will be held from Friday 12th August to Tuesday 16th August. Miniconfs and special events are held on Friday 12th. The main conference is held on Saturday 13th and Sunday 14th. Monday 15th and Tuesday 16th are developer sprints.
  74. &lt;/p&gt;&lt;p&gt;
  75. &lt;b&gt;Important Dates&lt;/b&gt;&lt;/p&gt;
  76. &lt;ol&gt;
  77. &lt;li&gt;Proposal submission deadline: Sunday, 8th May&lt;/li&gt;
  78. &lt;li&gt;Proposal acceptance: Sunday, 29th May&lt;/li&gt;
  79. &lt;/ol&gt;
  80. &lt;p&gt;
  81. PyCon Australia attracts professional developers from all walks of life, including industry, government, and science, as well as enthusiast and student developers. We\x92re looking for proposals for presentations and tutorials on any aspect of Python programming, at all skill levels from novice to advanced.
  82. &lt;/p&gt;&lt;p&gt;
  83. Presentation subjects may range from reports on open source, academic or commercial projects; or even tutorials and case studies. If a presentation is interesting and useful to the Python community, it will be considered for inclusion in the program.
  84. We're especially interested in short presentations that will teach conference-goers something new and useful. Can you show attendees how to use a module? Explore a Python language feature? Package an application?&lt;/p&gt;
  85.  
  86. &lt;b&gt;Special Events&lt;/b&gt;
  87. &lt;p&gt;Four special events will be held on Friday 12th August, as a prelude to the main conference. These special events are:
  88. &lt;ul&gt;
  89. &lt;li&gt;&lt;a href="https://2016.pycon-au.org/programme/djangocon_au"&gt;DjangoConAU&lt;/a&gt;&lt;/li&gt;
  90. &lt;li&gt;&lt;a href="https://2016.pycon-au.org/programme/python_in_education_seminar"&gt;Python in Education&lt;/a&gt;&lt;/li&gt;
  91. &lt;li&gt;&lt;a href="https://2016.pycon-au.org/programme/science_and_data_miniconf"&gt;Science and Data&lt;/a&gt;&lt;/li&gt;
  92. &lt;li&gt;&lt;a href="https://2016.pycon-au.org/programme/internet_of_things_miniconf"&gt;Internet of Things&lt;/a&gt;&lt;/li&gt;
  93. &lt;/ul&gt;
  94. &lt;/p&gt;&lt;p&gt;
  95. If your talk is targeted to a particular field, or requires a lot of prior knowledge, the special events might be a better fit than the main part of the conference.
  96. &lt;/p&gt;&lt;p&gt;
  97. We are running a combined call for proposals for all the special events and the main conference. In the submission form you can nominate which event(s) your proposal is targeting.
  98. &lt;/p&gt;
  99.  
  100. &lt;b&gt;First Time Speakers&lt;/b&gt;
  101. &lt;p&gt;
  102. We welcome first-time speakers; we are a community conference and we are eager to hear about your experience. If you have friends or colleagues who have something valuable to contribute, twist their arms to tell us about it! Please also forward this Call for Proposals to anyone that you feel may be interested.
  103. &lt;/p&gt;
  104.  
  105. &lt;b&gt;Speaker Benefits&lt;/b&gt;
  106. &lt;p&gt;
  107. Speakers are eligible for discounted conference registration (early bird prices) that will be waived on request. If you, or your organisation, can afford to register at full price, such payments will go directly towards our financial assistance pool to help people who could not otherwise afford to attend the conference.
  108. &lt;/p&gt;&lt;p&gt;
  109. You will not be automatically registered as an attendee for the conference; you will need to register yourself and failure to do so may result in loss of your talk slot(s).&lt;/p&gt;
  110.  
  111. &lt;b&gt;Financial Assistance&lt;/b&gt;
  112. &lt;p&gt;
  113. PyCon Australia offers a generous &lt;a href="https://2016.pycon-au.org/about/financial_assistance"&gt;financial assistance programme&lt;/a&gt;, so that some attendees and speakers have some -- or in rare cases, all -- of their expenses such as flight, hotel and admission provided to them from the conference budget.
  114. &lt;/p&gt;
  115. &lt;p&gt;
  116. PyCon Australia strongly encourages people to apply for financial assistance -- even if we can\x92t cover all of your expenses, we will give you free or discounted admission based on need. The application process is simple, and straightforward. It\x92s also very liberal -- the only caveat is that &lt;b&gt;accepted speakers are given priority&lt;/b&gt; so that we don\x92t lose a good talk because of financial need. We also don\x92t ban anyone from applying.
  117. &lt;/p&gt;</description>
  118.  </item>
  119.  
  120.  
  121.  <item>
  122.   <title>Horizon development with openstack-ansible</title>
  123.   <guid>http://mechanicalcat.net/richard/log/OpenStack/Horizon_development_with_openstack_ansible</guid>
  124.   <pubDate>Tue, 10 Nov 2015 23:00:44 +0000</pubDate>
  125.   <link>http://mechanicalcat.net/richard/log/OpenStack/Horizon_development_with_openstack_ansible</link>
  126.   <description>&lt;p&gt;&lt;a href="Easy_installation_of_a_new_stack_with_OpenStack_Ansible_Deployment__OSAD"&gt;Previously&lt;/a&gt;, I had written about getting &lt;a href="https://wiki.openstack.org/wiki/OpenStackAnsible"&gt;openstack-ansible&lt;/a&gt; (was "OSAD") up and running as a development stack for Horizon to target. Things changed slightly since then, so I thought I'd write a small update post.
  127. &lt;/p&gt;
  128. &lt;p&gt;Mostly, follow the &lt;a href="http://docs.openstack.org/developer/openstack-ansible/developer-docs/quickstart-aio.html"&gt;OSA quick start guide&lt;/a&gt; as-is, with a small change:&lt;/p&gt;
  129. &lt;pre class="code"&gt;
  130. # Update repository information and install git
  131. apt-get update &amp;amp;&amp;amp; apt-get install -y git
  132.  
  133. # Clone the OSA repository
  134. git clone https://github.com/openstack/openstack-ansible /opt/openstack-ansible
  135.  
  136. # Bootstrap the env
  137. cd /opt/openstack-ansible
  138. ./scripts/bootstrap-ansible.sh
  139. ./scripts/bootstrap-aio.sh
  140. &lt;/pre&gt;
  141. At this point, we deviate from the instructions because we need to edit the configuration to expose all of the service URLs in the service catalog through the external IP address, rather than just the public URLs. This is necessary because OSA only uses the external address for the public URLs, but Horizon requires access to the admin URLs also.
  142. &lt;pre class="code"&gt;
  143. # Set the internal address to the external
  144. sed -i "s/internal_lb_vip_address:.*/internal_lb_vip_address: \"{{ external_lb_vip_address }}\"/" \
  145.  /etc/openstack_deploy/openstack_user_config.yml&amp;#8203;
  146. &lt;/pre&gt;
  147. &lt;p&gt;Now we're going to edit the configuration so we don't set up all those unnecessary services. Open /etc/openstack_deploy/openstack_user_config.yml in an editor and turn off the Horizon container creation by editing:
  148. &lt;/p&gt;
  149. &lt;pre class="code"&gt;
  150. os-infra_hosts:
  151.  aio1:
  152.    # Horizon is set to multiple to test clustering. This test only requires x2.
  153.    affinity:
  154.      &lt;span style="background-color: lightgreen"&gt;horizon_container: 2&lt;/span&gt;
  155.    ip: 172.29.236.100
  156. &lt;/pre&gt;
  157.  
  158. &lt;p&gt;to:&lt;/p&gt;
  159.  
  160. &lt;pre class="code"&gt;
  161. os-infra_hosts:
  162.  aio1:
  163.    # Horizon is set to multiple to test clustering. This test only requires x2.
  164.    affinity:
  165.      &lt;span style="background-color: lightgreen"&gt;horizon_container: 0&lt;/span&gt;
  166.    ip: 172.29.236.100
  167. &lt;/pre&gt;
  168.  
  169. &lt;p&gt;Similar edits can be made to reduce the size of the Galera and RabbitMQ clusters from 3 to 1
  170.  in the "galera_container" and "rabbit_mq_container" settings.&lt;/p&gt;
  171.  
  172. &lt;p&gt;Now we can continue on and create the stack:&lt;/p&gt;
  173.  
  174. &lt;pre class="code"&gt;
  175. scripts/run-playbooks.sh
  176. &lt;/pre&gt;
  177.  
  178. &lt;p&gt;The stack will be empty (no networks, flavours or images) so to add some, I run:&lt;/p&gt;
  179.  
  180. &lt;pre class="code"&gt;
  181. pushd playbooks
  182. openstack-ansible os-tempest-install.yml
  183. popd
  184. &lt;/pre&gt;
  185.  
  186. &lt;p&gt;A Keystone endpoint will be created on port 5000 on the public IP of the host you set OSAD up on. This is the HAProxy (load-balancer) endpoint, so it's there no matter how many actual Keystones are set up by the OSAD setup.&lt;/p&gt;
  187.  
  188. &lt;p&gt;The final step is to edit the Horizon configuration (local_settings.py) for that endpoint and to also hard-set the Keystone API version:&lt;p&gt;
  189.  
  190. &lt;pre class="code"&gt;
  191. OPENSTACK_API_VERSIONS = {
  192.    "identity": 3,
  193. }
  194. &lt;/pre&gt;
  195.  
  196. &lt;p&gt;Oh, and if you're wondering what your admin password is, it's here:&lt;/p&gt;
  197. &lt;pre class="code"&gt;
  198. # grep admin_pass /etc/openstack_deploy/user_secrets.yml
  199. heat_stack_domain_admin_password: &lt;i&gt;[some random string]&lt;/i&gt;
  200. keystone_auth_admin_password: &lt;i&gt;[some other random string]&lt;/i&gt;
  201. &lt;/pre&gt;
  202.  
  203. &lt;p&gt;To log in as "admin" you need that second password. You can edit that value to something of your own choosing after the "scripts/bootstrap-aio.sh" step above.&lt;/p&gt;</description>
  204.  </item>
  205.  
  206.  
  207.  <item>
  208.   <title>PyCon Australia 2015 Programme Released</title>
  209.   <guid>http://mechanicalcat.net/richard/log/Python/PyCon_Australia_2015_Programme_Released</guid>
  210.   <pubDate>Wed, 24 Jun 2015 08:53:01 +0000</pubDate>
  211.   <link>http://mechanicalcat.net/richard/log/Python/PyCon_Australia_2015_Programme_Released</link>
  212.   <description>&lt;p&gt;PyCon Australia is proud to release our programme for 2015, spread over the weekend of August 1st and 2nd, following our Miniconfs on Friday 31 July.&lt;/p&gt;
  213. &lt;p&gt;Following our largest ever response to our Call for Proposals, we are able to present two keynotes, forty eight talks and two tutorials. The conference will feature four full tracks of presentations, covering all aspects of the Python ecosystem, presented by experts and core developers of key Python technology. Our presenters cover a broad range of backgrounds, including industry, research, government and academia.&lt;/p&gt;
  214. &lt;p&gt;We are still finalising our Miniconf timetable, but we expect another thirty talks for Friday. We&amp;#8217;d like to highlight the inaugural running of the Education Miniconf whose primary aim is to bring educators and the Python community closer together.&lt;/p&gt;
  215. &lt;p&gt;The full schedule for PyCon Australia 2015 can be found at &lt;a href="http://2015.pycon-au.org/programme/about" rel="nofollow"&gt;http://2015.pycon-au.org/programme/about&lt;/a&gt;&lt;/p&gt;
  216. &lt;p&gt;PyCon Australia has endeavoured to keep tickets as affordable as possible. We are able to do so, thanks to our Sponsors and Contributors. Registrations for PyCon Australia 2015 are now open, with prices starting at AU$50 for students, and tickets for the general public starting at AU$240. All prices include GST, and more information can be found at &lt;a href="http://2015.pycon-au.org/register/prices" rel="nofollow"&gt;http://2015.pycon-au.org/register/prices&lt;/a&gt;&lt;/p&gt;
  217. &lt;p&gt;We have also worked out favourable deals with accommodation providers for PyCon delegates. Find out more about the options at &lt;a href="http://2015.pycon-au.org/register/accommodation" rel="nofollow"&gt;http://2015.pycon-au.org/register/accommodation&lt;/a&gt;&lt;/p&gt;
  218. &lt;p&gt;To begin the registration process, and find out more about each level of ticket, visit &lt;a href="http://2015.pycon-au.org/register/prices" rel="nofollow"&gt;http://2015.pycon-au.org/register/prices&lt;/a&gt;&lt;br&gt;
  219. Important Dates to Help You Plan
  220. &lt;p&gt;    June 29: Financial Assistance program closes.&lt;br&gt;
  221.    July 8: Last day to Order PyCon Australia 2015 T-shirts&lt;br&gt;
  222.    July 19: Last day to Advise Special Dietary Requirements&lt;br&gt;
  223.    July 31 : PyCon Australia 2015 Begins
  224. &lt;p&gt;&lt;b&gt;About PyCon Australia&lt;/b&gt;&lt;/p&gt;
  225. &lt;p&gt;PyCon Australia is the national conference for the Python Programming Community. The sixth PyCon Australia will be held on July 31 through August 4th, 2015 in Brisbane, bringing together professional, student and enthusiast developers with a love for developing with Python. PyCon Australia informs the country\x92s Python developers with presentations, tutorials and panel sessions by experts and core developers of Python, as well as the libraries and frameworks that they rely on.&lt;/p&gt;
  226. &lt;p&gt;To find out more about PyCon Australia 2015, visit our website at &lt;a href="http://pycon-au.org" rel="nofollow"&gt;http://pycon-au.org&lt;/a&gt; or e-mail us at &lt;a href="mailto:[email protected]"&gt;[email protected]&lt;/a&gt;.&lt;/p&gt;
  227. &lt;p&gt;PyCon Australia is presented by Linux Australia (www.linux.org.au) and acknowledges the support of our Platinum Sponsors, Red Hat Asia-Pacific, and Netbox Blue; and our Gold sponsors, The Australian Signals Directorate and Google Australia. For full details of our sponsors, see our website.&lt;/p&gt;</description>
  228.  </item>
  229.  
  230.  
  231.  <item>
  232.   <title>PyCon Australia 2015 Early Bird Registrations Now Open!</title>
  233.   <guid>http://mechanicalcat.net/richard/log/Python/PyCon_Australia_2015_Early_Bird_Registrations_Now_Open</guid>
  234.   <pubDate>Mon, 15 Jun 2015 02:48:10 +0000</pubDate>
  235.   <link>http://mechanicalcat.net/richard/log/Python/PyCon_Australia_2015_Early_Bird_Registrations_Now_Open</link>
  236.   <description>&lt;p&gt;We are delighted to announce that online registration is now open for PyCon Australia 2015. The sixth PyCon Australia is being held in Brisbane, Queensland from July 31st \x96 4th August at the Pullman Brisbane and is expected to draw hundreds of Python developers, enthusiasts and students from Australasia and afar.&lt;/p&gt;
  237. &lt;p&gt;Starting today, early bird offers are up for grabs. To take advantage of these discounted ticket rates, be among the first 100 to register. Early bird registration starts from $50 for full-time students, $180 for enthusiasts and $460 for professionals. Offers this good won\x92t last long, so head straight to &lt;a href="http://2015.pycon-au.org" rel="nofollow"&gt;http://2015.pycon-au.org&lt;/a&gt; and register right away.&lt;/p&gt;
  238. &lt;p&gt;PyCon Australia has endeavoured to keep tickets as affordable as possible. We are able to do so, thanks to our Sponsors and Contributors.&lt;/p&gt;
  239. &lt;p&gt;We have also worked out favourable deals with accommodation providers for PyCon delegates. Find out more about the options at &lt;a href="http://2015.pycon-au.org/register/accommodation" rel="nofollow"&gt;http://2015.pycon-au.org/register/accommodation&lt;/a&gt;&lt;/p&gt;
  240. &lt;p&gt;To begin the registration process, and find out more about each level of ticket, visit &lt;a href="http://2015.pycon-au.org/register/prices" rel="nofollow"&gt;http://2015.pycon-au.org/register/prices&lt;/a&gt;&lt;/p&gt;
  241.  
  242. &lt;p&gt;&lt;b&gt;Important Dates to Help You Plan&lt;/b&gt;&lt;/p&gt;
  243. &lt;p&gt;June 8: Early Bird Registration Opens &amp;#8212; open to the first 100 tickets&lt;br&gt;
  244. June 29: Financial Assistance program closes.&lt;br&gt;
  245. July 8: Last day to Order PyCon Australia 2015 T-shirts&lt;br&gt;
  246. July 19: Last day to Advise Special Dietary Requirements&lt;br&gt;
  247. July 31 : PyCon Australia 2015 Begins
  248. &lt;p&gt;&lt;b&gt;About PyCon Australia&lt;/b&gt;&lt;/p&gt;
  249. &lt;p&gt;PyCon Australia is the national conference for the Python Programming Community. The sixth PyCon Australia will be held on July 31 through August 4th, 2015 in Brisbane, bringing together professional, student and enthusiast developers with a love for developing with Python. PyCon Australia informs the country\x92s Python developers with presentations, tutorials and panel sessions by experts and core developers of Python, as well as the libraries and frameworks that they rely on.&lt;/p&gt;
  250. &lt;p&gt;To find out more about PyCon Australia 2015, visit our website at &lt;a href="http://pycon-au.org" rel="nofollow"&gt;http://pycon-au.org&lt;/a&gt; or e-mail us at &lt;a href="mailto:[email protected]"&gt;[email protected]&lt;/a&gt;.&lt;/p&gt;
  251. &lt;p&gt;PyCon Australia is presented by Linux Australia (www.linux.org.au) and acknowledges the support of our Platinum Sponsors, Red Hat Asia-Pacific, and Netbox Blue; and our Gold sponsors, The Australian Signals Directorate and Google Australia. For full details of our sponsors, see our website.&lt;/p&gt;
  252. </description>
  253.  </item>
  254.  
  255.  
  256.  <item>
  257.   <title>Easy installation of a new stack with OpenStack Ansible Deployment (OSAD)</title>
  258.   <guid>http://mechanicalcat.net/richard/log/OpenStack/Easy_installation_of_a_new_stack_with_OpenStack_Ansible_Deployment__OSAD</guid>
  259.   <pubDate>Fri, 15 May 2015 16:40:30 +0000</pubDate>
  260.   <link>http://mechanicalcat.net/richard/log/OpenStack/Easy_installation_of_a_new_stack_with_OpenStack_Ansible_Deployment__OSAD</link>
  261.   <description>&lt;p&gt;&lt;b&gt;Update: this blog post has been superseded by &lt;a href="Horizon_development_with_openstack_ansible"&gt;new instructions&lt;/a&gt;.&lt;/b&gt;&lt;/p&gt;
  262.  
  263. &lt;p&gt;&lt;a href="https://github.com/stackforge/os-ansible-deployment"&gt;OSAD&lt;/a&gt; is a project that deploys
  264.  &lt;a href="http://www.openstack.org/"&gt;OpenStack&lt;/a&gt; using &lt;a href="http://www.ansible.com/"&gt;Ansible&lt;/a&gt; ("OpenStack
  265.  Ansible Deployment") and I decided to see whether I
  266.  could use it to create the development stack I needed behind my &lt;a href="http://docs.openstack.org/developer/horizon/"&gt;Horizon&lt;/a&gt; work.
  267. &lt;/p&gt;
  268. &lt;p&gt;&lt;b&gt;OSAD Simple Installation&lt;/b&gt;&lt;/p&gt;
  269. &lt;p&gt;The absolute simplest installation is the one the OSAD project uses for its testing using &lt;a href="https://github.com/openstack/tempest"&gt;Tempest&lt;/a&gt;. It sets
  270.  up a moderately complex stack environment (multiple Keystones, Horizons, rabbitmq backends, etc all load
  271.  balanced through a configured HAProxy).
  272.  You'll need a system with 8GB of RAM and 40GB of disk.
  273.  You don't want it to run the actual Tempest suite though, so
  274.  include RUN_TEMPEST=hellno (anything that's not "yes" will do):
  275. &lt;pre class="code"&gt;
  276. apt-get update &amp;amp;&amp;amp; apt-get install -y git
  277.  
  278. # Clone the source code
  279. git clone https://github.com/stackforge/os-ansible-deployment /opt/os-ansible-deployment
  280.  
  281. # Change your directory
  282. cd /opt/os-ansible-deployment
  283.  
  284. # Checkout your desired branch (master for bleeding edge)
  285. git checkout kilo
  286.  
  287. # Run the script from the root directory of the cloned repository
  288. RUN_TEMPEST=no ./scripts/gate-check-commit.sh
  289. &lt;/pre&gt;
  290. &lt;p&gt;For my purposes, I need the following setup:&lt;/p&gt;
  291. &lt;img src="/images/osad-setup.png"&gt;
  292. &lt;p&gt;So, I need my local Horizon to talk to a remote stack, and the default OSAD install has all of the
  293.  Admin services accessed locally-only. We need to reconfigure it just a little to have it expose the
  294.  public interface for all of those services. We can also edit the configuration to reduce the
  295.  number of services started: I don't need to set up Horizon at all, and don't need a large mysql and rabbitmq
  296.  cluster either.&lt;/p&gt;
  297. &lt;p&gt;So, the initial steps are very similar:&lt;/p&gt;
  298. &lt;pre class="code"&gt;# Clone the source code
  299. git clone https://github.com/stackforge/os-ansible-deployment /opt/os-ansible-deployment
  300.  
  301. # Change your directory
  302. cd /opt/os-ansible-deployment
  303.  
  304. # Checkout your desired branch.
  305. git checkout master
  306.  
  307. # Bootstrap the env
  308. ./scripts/bootstrap-aio.sh
  309.  
  310. # Bootstrap Ansible
  311. ./scripts/bootstrap-ansible.sh
  312.  
  313. # Set the internal address to the external
  314. sed -i "s/internal_lb_vip_address:.*/internal_lb_vip_address: \"{{ external_lb_vip_address }}\"/" \
  315.  /etc/openstack_deploy/openstack_user_config.yml&amp;#8203;
  316. &lt;/pre&gt;
  317. &lt;p&gt;Now we're going to edit the configuration so we don't set up all those unnecessary services. Open
  318.  /etc/openstack_deploy/openstack_user_config.yml in an editor and turn off the Horizon container
  319.  creation by editing:
  320.  
  321. &lt;pre class="code"&gt;
  322. os-infra_hosts:
  323.  aio1:
  324.    # Horizon is set to multiple to test clustering. This test only requires x2.
  325.    affinity:
  326.      &lt;span style="background-color: lightgreen"&gt;horizon_container: 2&lt;/span&gt;
  327.    ip: 172.29.236.100
  328. &lt;/pre&gt;
  329.  
  330. &lt;p&gt;to:&lt;/p&gt;
  331.  
  332. &lt;pre class="code"&gt;
  333. os-infra_hosts:
  334.  aio1:
  335.    # Horizon is set to multiple to test clustering. This test only requires x2.
  336.    affinity:
  337.      &lt;span style="background-color: lightgreen"&gt;horizon_container: 0&lt;/span&gt;
  338.    ip: 172.29.236.100
  339. &lt;/pre&gt;
  340.  
  341. &lt;p&gt;Similar edits can be made to reduce the size of the Galera and RabbitMQ clusters from 3 to 1
  342.  in the "galera_container" and "rabbit_mq_container" settings.&lt;/p&gt;
  343.  
  344. &lt;p&gt;Now we can continue on and create the stack:&lt;/p&gt;
  345.  
  346. &lt;pre class="code"&gt;
  347. # Enter the playbooks directory
  348. pushd playbooks
  349. # Setup all the things
  350. openstack-ansible haproxy-install.yml
  351. openstack-ansible setup-everything.yml
  352. popd
  353. &lt;/pre&gt;
  354.  
  355. &lt;p&gt;The stack will be empty (no networks, flavours or images) so to add some, I run:&lt;/p&gt;
  356.  
  357. &lt;pre class="code"&gt;
  358. pushd playbooks
  359. openstack-ansible os-tempest-install.yml
  360. popd
  361. &lt;/pre&gt;
  362.  
  363. &lt;p&gt;This sets up the tempest environment but does not run the tests.&lt;/p&gt;
  364.  
  365. &lt;p&gt;A Keystone endpoint will be created on port 5000 on the public IP of the host you set OSAD up on. This is the HAProxy (load-balancer) endpoint, so it's there no matter how many actual Keystones are set up by the OSAD setup.&lt;/p&gt;</description>
  366.  </item>
  367.  
  368.  
  369.  <item>
  370.   <title>PyCon Australia 2015 Call for Proposals is Open!</title>
  371.   <guid>http://mechanicalcat.net/richard/log/Python/PyCon_Australia_2015_Call_for_Proposals_is_Open</guid>
  372.   <pubDate>Tue, 31 Mar 2015 08:39:18 +0000</pubDate>
  373.   <link>http://mechanicalcat.net/richard/log/Python/PyCon_Australia_2015_Call_for_Proposals_is_Open</link>
  374.   <description>&lt;b&gt;Closes Friday 8th May&lt;/b&gt;
  375. &lt;p&gt;
  376.  
  377. PyCon Australia 2015 is pleased to announce that its Call for Proposals is now open!
  378. &lt;/p&gt;&lt;p&gt;
  379.  
  380. The conference this year will be held on Saturday 1st and Sunday 2nd August 2015 in Brisbane. We'll also be featuring a day of Miniconfs on Friday 31st July.
  381. &lt;/p&gt;&lt;p&gt;
  382. The deadline for proposal submission is Friday 8th May, 2015.
  383. &lt;/p&gt;&lt;p&gt;
  384.  
  385. PyCon Australia attracts professional developers from all walks of life, including industry, government, and science, as well as enthusiast and student developers. We\x92re looking for proposals for presentations and tutorials on any aspect of Python programming, at all skill levels from novice to advanced.
  386. &lt;/p&gt;&lt;p&gt;
  387.  
  388. Presentation subjects may range from reports on open source, academic or commercial projects; or even tutorials and case studies. If a presentation is interesting and useful to the Python community, it will be considered for inclusion in the program.
  389. &lt;/p&gt;&lt;p&gt;
  390.  
  391. We're especially interested in short presentations that will teach conference-goers something new and useful. Can you show attendees how to use a module? Explore a Python language feature? Package an application?
  392. &lt;/p&gt;&lt;p&gt;
  393.  
  394. &lt;b&gt;Miniconfs&lt;/b&gt;
  395. &lt;/p&gt;&lt;p&gt;
  396.  
  397. Four Miniconfs will be held on Friday 31st July, as a prelude to the main conference. Miniconfs are run by community members and are separate to the main conference. If you are a first time speaker, or your talk is targeted to a particular field, the Miniconfs might be a better fit than the main part of the conference. If your proposal is not selected for the main part of the conference, it may be selected for one of our Miniconfs:
  398. &lt;/p&gt;&lt;p&gt;
  399.  
  400. &lt;b&gt;DjangoCon AU&lt;/b&gt; is the annual conference of Django users in the Southern Hemisphere. It covers all aspects of web software development, from design to deployment - and, of course, the use of the Django framework itself. It provides an excellent opportunity to discuss the state of the art of web software development with other developers and designers.
  401. &lt;/p&gt;&lt;p&gt;
  402.  
  403. &lt;b&gt;The Python in Education Miniconf&lt;/b&gt; aims to bring together community workshop organisers, professional Python instructors and professional educators across primary, secondary and tertiary levels to share their experiences and requirements, and identify areas of potential collaboration with each other and also with the broader Python community.
  404. &lt;/p&gt;&lt;p&gt;
  405.  
  406. &lt;b&gt;The Science and Data Miniconf&lt;/b&gt; is a forum for people using Python to tackle problems in science and data analysis. It aims to cover commercial and research interests in applications of science, engineering, mathematics, finance, and data analysis using Python, including AI and 'big data' topics.
  407. &lt;/p&gt;&lt;p&gt;
  408.  
  409. &lt;b&gt;The OpenStack Miniconf&lt;/b&gt; is dedicated to talks related to the OpenStack project and we welcome proposals of all kinds: technical, community, infrastructure or code talks/discussions; academic or commercial applications; or even tutorials and case studies. If a presentation is interesting and useful to the OpenStack community, it will be considered for inclusion. We also welcome talks that have been given previously in different events.
  410. &lt;/p&gt;&lt;p&gt;
  411.  
  412. &lt;b&gt;First Time Speakers&lt;/b&gt;
  413. &lt;/p&gt;&lt;p&gt;
  414.  
  415. We welcome first-time speakers; we are a community conference and we are eager to hear about your experience. If you have friends or colleagues who have something valuable to contribute, twist their arms to tell us about it! Please also forward this Call for Proposals to anyone that you feel may be interested.
  416. &lt;/p&gt;&lt;p&gt;
  417.  
  418. The most recent call for proposals information can always be found at:
  419. &lt;a href="http://pycon-au.org/cfp"&gt;http://pycon-au.org/cfp&lt;/a&gt;
  420. &lt;/p&gt;&lt;p&gt;
  421.  
  422. See you in Brisbane in July!
  423. &lt;/p&gt;&lt;p&gt;
  424.  
  425. &lt;b&gt;Important Dates&lt;/b&gt;
  426. &lt;/p&gt;&lt;p&gt;
  427.  
  428. &lt;ol&gt;
  429. &lt;li&gt;Call for Proposals opens: Friday 27th March, 2015
  430. &lt;/li&gt;&lt;li&gt;Proposal submission deadline: Friday 8th May, 2015
  431. &lt;/li&gt;&lt;li&gt;Proposal acceptance: Monday 25 May, 2015
  432.  
  433. &lt;/ol&gt;</description>
  434.  </item>
  435.  
  436.  
  437.  <item>
  438.   <title>When testing goes bad</title>
  439.   <guid>http://mechanicalcat.net/richard/log/Python/When_testing_goes_bad</guid>
  440.   <pubDate>Thu, 28 Aug 2014 08:07:09 +0000</pubDate>
  441.   <link>http://mechanicalcat.net/richard/log/Python/When_testing_goes_bad</link>
  442.   <description>&lt;p&gt;
  443. I've recently started working on a large, mature code base (some 65,000
  444. lines of Python code). It has 1048 unit tests implemented in the standard
  445. unittest.TestCase fashion using the mox framework for mocking support (I'm not
  446. surprised you've not heard of it).
  447. &lt;/p&gt;&lt;p&gt;
  448. Recently I fixed a bug which was causing a user interface panel to display
  449. when it shouldn't have been. The fix basically amounts to a couple of lines
  450. of code added to the panel in question:
  451. &lt;pre class="code"&gt;
  452. +    def can_access(self, context):
  453. +        # extend basic permission-based check with a check to see whether
  454. +        # the Aggregates extension is even enabled in nova
  455. +        if not nova.extension_supported('Aggregates', context['request']):
  456. +            return False
  457. +        return super(Aggregates, self).can_access(context)
  458. &lt;/pre&gt;&lt;p&gt;
  459.  
  460. When I ran the unit test suite I discovered to my horror that &lt;b&gt;498 of
  461. the 1048 tests now failed&lt;/b&gt;. The reason for this is that the can_access()
  462. method here is called as a side-effect of those 498 tests and the
  463. nova.extension_supported (which is a REST call under the hood) needed to be
  464. mocked correctly to support it being called.
  465. &lt;/p&gt;&lt;p&gt;
  466.  
  467. I quickly discovered that given the size of the test
  468. suite, and the testing tools used, each of those 498 tests must be
  469. fixed by hand, one at a time (if I'm lucky, some of them can be knocked off
  470. two at a time).
  471. &lt;/p&gt;&lt;p&gt;
  472.  
  473. The main cause is mox's mocking of callables like the one above which
  474. enforces the order that those callables are invoked. It also enforces
  475. that the calls are made at all (uncalled mocks are treated as test failures).
  476. &lt;/p&gt;&lt;p&gt;
  477.  
  478. This means there is no possibility to provide a blanket mock
  479. for the "nova.extension_supported". Tests with existing calls to that API
  480. need careful attention
  481. to ensure the ordering is correct. Tests which don't result in the side-
  482. effect call to the above method will raise an error, so even adding a mock
  483. setup in a TestCase.setUp() doesn't work in most cases.
  484. &lt;/p&gt;&lt;p&gt;
  485.  
  486. It doesn't help that the codebase is so large, and has been developed by so
  487. many people over years. Mocking isn't consistently implemented; even the
  488. basic structure of tests in TestCases is inconsistent.
  489. &lt;/p&gt;&lt;p&gt;
  490.  
  491. It's worth noting that the ordering check that mox provides is never used as
  492. far as I can tell in this codebase. I haven't sighted an example of
  493. multiple calls to the same mocked API without the additional use of the mox
  494. InAnyOrder() modifier. mox does not provide a mechanism to turn the ordering
  495. check off completely.
  496. &lt;/p&gt;&lt;p&gt;
  497.  
  498. The &lt;a href="https://pypi.python.org/pypi/pretend"&gt;pretend&lt;/a&gt; library (my go-to for stubbing) splits out the
  499. mocking step and the verification of calls so the ordering will only be
  500. enforced if you deem it absolutely necessary.
  501. &lt;/p&gt;&lt;p&gt;
  502.  
  503. The choice to use unittest-style TestCase classes makes managing fixtures
  504. much more difficult (it becomes a nightmare of classes and mixins and setUp()
  505. super() calls or alternatively a nightmare of mixin classes and multiple
  506. explicit setup calls in test bodies).
  507. This is exacerbated by the test suite in question introducing its own
  508. mock-generating decorator which will generate a mock, but again leaves the
  509. implementation of the mocking to the test cases. &lt;a href="https://pypi.python.org/pypi/pytest"&gt;py.test&lt;/a&gt;'s fixtures are a
  510. far superior mechanism for managing mocking fixtures, allowing simpler,
  511. central creation of mocks and overriding of them through fixture
  512. dependencies.
  513. &lt;/p&gt;&lt;p&gt;
  514.  
  515. The result is that I spent some time working through some of the test suite
  516. and discovered that in an afternoon I could fix about 10% of the failing
  517. tests. I have decided that spending a week fixing the tests for my 5 line
  518. bug fix is just not worth it, and I've withdrawn &lt;a href="https://review.openstack.org/#/c/117090"&gt;the patch&lt;/a&gt;.
  519. &lt;/p&gt;</description>
  520.  </item>
  521.  
  522.  
  523.  <item>
  524.   <title>devpi quick-start</title>
  525.   <guid>http://mechanicalcat.net/richard/log/Python/devpi_quick_start</guid>
  526.   <pubDate>Mon, 11 Aug 2014 02:44:37 +0000</pubDate>
  527.   <link>http://mechanicalcat.net/richard/log/Python/devpi_quick_start</link>
  528.   <description>&lt;p&gt;(devpi is &lt;em&gt;the&lt;/em&gt; caching proxy for PyPI which does a bunch of other things too but mostly just speeds up "pip install" and isolates you from network issues - or complete lack of connectivity)&lt;/p&gt;
  529. &lt;p&gt;I gave a &lt;a href="https://www.youtube.com/watch?v=pZTiAkwiPgI"&gt;25-minute introduction&lt;/a&gt; to &lt;a href="http://doc.devpi.net/"&gt;devpi&lt;/a&gt; at &lt;a href="pycon-au.org"&gt;PyCon AU&lt;/a&gt; and since then have been requested to put together a quick-start guide:&lt;/p&gt;
  530. &lt;p&gt;&lt;b&gt;devpi in 60 seconds&lt;/b&gt;&lt;/p&gt;
  531. &lt;p&gt;Step 1: create a virtualenv&lt;/p&gt;
  532. &lt;pre class="code"&gt;mkvirtualenv devpi&lt;/pre&gt;
  533. &lt;p&gt;Step 2: install devpi&lt;/p&gt;
  534. &lt;pre class="code"&gt;pip install devpi&lt;/pre&gt;
  535. &lt;p&gt;Step 3: run devpi&lt;/p&gt;
  536. &lt;pre class="code"&gt;devpi-server --start&lt;/pre&gt;
  537. &lt;p&gt;Step 4: use devpi (noting the URL from the previous command output)&lt;/p&gt;
  538. &lt;pre class="code"&gt;devpi use --set-cfg [URL]/root/pypi&lt;/pre&gt;
  539. &lt;p&gt;Step 5: profit!&lt;/p&gt;
  540. &lt;pre class="code"&gt;pip install yarg&lt;/pre&gt;
  541. &lt;p&gt;The first installation will call out to the Internet but subsequent installs will use the cached version.&lt;/p&gt;
  542. &lt;p&gt;Win!&lt;/p&gt;
  543. </description>
  544.  </item>
  545.  
  546.  
  547.  <item>
  548.   <title>Those neck-supporting pillows for flying? You're using them wrong!</title>
  549.   <guid>http://mechanicalcat.net/richard/log/PublicMemory/Those_neck_supporting_pillows_for_flying__You_re_using_them_wrong</guid>
  550.   <pubDate>Sat, 26 Apr 2014 12:31:12 +0000</pubDate>
  551.   <link>http://mechanicalcat.net/richard/log/PublicMemory/Those_neck_supporting_pillows_for_flying__You_re_using_them_wrong</link>
  552.   <description>&lt;p&gt;OK folks, something I learned about those horseshoe-shaped pillows: they don't go around your neck. They're basically useless like that.&lt;/p&gt;
  553. &lt;p&gt;First up: make sure you get one that joins up at the open end - some sort of clip fastener to hold the ends together.&lt;/p&gt;
  554. &lt;p&gt;Then: it goes &lt;b&gt;around the back of your head&lt;/b&gt; with the bottom of the horseshoe behind your neck and the open end clipped together but pointing up. If you're doing it right, that sucker will fit very snugly over the back of your head to the point that it'll stay stuck on when you move your head away from the headrest.&lt;/p&gt;
  555. &lt;p&gt;Doing this will mean that your head is held in place vertically and horizontally.&lt;/p&gt;
  556. &lt;p&gt;Note: I lost the pillow I had that joined together with a clip and bought another that didn't but was made of "memory foam" and it worked just as well.&lt;/p&gt;</description>
  557.  </item>
  558.  
  559.  
  560.  <item>
  561.   <title>PyCon AU 2014 CFP about to close!</title>
  562.   <guid>http://mechanicalcat.net/richard/log/Python/PyCon_AU_2014_CFP_about_to_close</guid>
  563.   <pubDate>Thu, 24 Apr 2014 05:31:05 +0000</pubDate>
  564.   <link>http://mechanicalcat.net/richard/log/Python/PyCon_AU_2014_CFP_about_to_close</link>
  565.   <description>&lt;p&gt;The &lt;a href="http://2014.pycon-au.org/cfp"&gt;PyCon Australia 2014 CFP&lt;/a&gt; is about to close! Last chance to get your proposal in! Quoted:
  566. &lt;/p&gt;
  567. &lt;blockquote&gt;&lt;p&gt;
  568. The conference this year will be held on Saturday 2 and Sunday 3 August 2014 in Brisbane. We'll also be featuring a day of miniconfs on Friday 1 August.
  569. &lt;/p&gt;&lt;p&gt;
  570. The deadline for proposal submission is Friday 25 April, 2014.
  571. &lt;/p&gt;&lt;p&gt;
  572. PyCon Australia attracts professional developers from all walks of life, including industry, government, and science, as well as enthusiast and student developers. We\x92re looking for proposals for presentations and tutorials on any aspect of Python programming, at all skill levels from novice to advanced.
  573. &lt;/p&gt;&lt;p&gt;
  574. Presentation subjects may range from reports on open source, academic or commercial projects; or even tutorials and case studies. If a presentation is interesting and useful to the Python community, it will be considered for inclusion in the program.
  575. &lt;/p&gt;&lt;p&gt;
  576. We're especially interested in short presentations that will teach conference-goers something new and useful. Can you show attendees how to use a module? Explore a Python language feature? Package an application?
  577. &lt;/p&gt;&lt;p&gt;
  578. Proposals about the Django web framework are very strongly encouraged, and will also be considered for inclusion in DjangoCon AU, to be held on Friday 1 August.
  579. &lt;/p&gt;&lt;p&gt;
  580. There will also be a Science and Data Analysis miniconf and an OpenStack miniconf held alongside DjangoCon AU. Proposals on either of these topics will be considered for inclusion in these miniconfs.
  581. &lt;/p&gt;&lt;p&gt;
  582. We welcome first-time speakers; we are a community conference and we are eager to hear about your experience. If you have friends or colleagues who have something valuable to contribute, twist their arms to tell us about it! Please also forward this Call for Proposals to anyone that you feel may be interested.
  583. &lt;/p&gt;&lt;p&gt;
  584. See you in Brisbane in August!
  585. &lt;/p&gt;&lt;/blockquote&gt;</description>
  586.  </item>
  587.  
  588.  
  589.  <item>
  590.   <title>Python 3.3 and virtualenv</title>
  591.   <guid>http://mechanicalcat.net/richard/log/Python/Python_3_3_and_virtualenv</guid>
  592.   <pubDate>Mon, 20 Jan 2014 22:33:30 +0000</pubDate>
  593.   <link>http://mechanicalcat.net/richard/log/Python/Python_3_3_and_virtualenv</link>
  594.   <description>&lt;p&gt;We're kicking off some new projects using Python 3 (yay!) but had some issues getting &lt;a href="http://www.virtualenv.org/en/latest/"&gt;virtualenvs&lt;/a&gt; working. Which is kinda ironic given that Python 3.3 included virtualenv in it, as pyvenv. Unfortunately, &lt;a href="http://docs.python.org/dev/library/venv.html"&gt;pyvenv&lt;/a&gt; isn't quite the same thing as &lt;a href="https://pypi.python.org/pypi/virtualenv"&gt;virtualenv&lt;/a&gt;, and in particular it doesn't install/include pip and setuptools. There's also some additional issues introduced under Ubuntu.&lt;/p&gt;
  595. &lt;p&gt;First, you'll need to obtain Python 3.3. Some of the methods you could use will work and some are known to produce a non-viable environment. In particular:&lt;/p&gt;
  596. &lt;ul&gt;
  597. &lt;li&gt;OS X: get it from &lt;a href="http://brew.sh/"&gt;homebrew&lt;/a&gt; ("brew install python3"). I've not tried other avenues, but this works and is the easiest approach in my opinion.&lt;/li&gt;
  598. &lt;li&gt;Ubuntu: get it from source, building like so:
  599. &lt;pre class="code"&gt;sudo apt-get install build-essential libsqlite-dev sqlite3 bzip2 libbz2-dev
  600. wget http://python.org/ftp/python/3.3.3/Python-3.3.3.tar.bz2
  601. tar jxf ./Python-3.3.3.tar.bz2
  602. cd ./Python-3.3.3
  603. ./configure --prefix=/opt/python3.3
  604. make &amp;amp;&amp;amp; sudo make install&lt;/pre&gt;
  605. Do &lt;b&gt;not&lt;/b&gt; attempt to use any currently-available pre-built packages (eg. from a PPA) as they will create broken virtualenvs. See &lt;a href="http://stackoverflow.com/questions/15370872/why-do-distribute-and-pip-install-to-my-virtualenvs-local-bin"&gt;this discussion&lt;/a&gt; for some enlightenment, but note the lack of a reasonable solution.&lt;/li&gt;
  606. &lt;li&gt;Windows: no idea, sorry.&lt;/li&gt;
  607. &lt;/ul&gt;
  608. &lt;p&gt;Now that you've got a Python 3.3 installation, you can create your virtual environment. You do this with this command combination:&lt;/p&gt;
  609. &lt;pre class="code"&gt;pyvenv-3.3
  610. . /bin/activate
  611. wget https://bitbucket.org/pypa/setuptools/raw/bootstrap/ez_setup.py
  612. python3.3 ez_setup.py
  613. wget https://raw.github.com/pypa/pip/master/contrib/get-pip.py
  614. python3.3 get-pip.py&lt;/pre&gt;
  615. &lt;p&gt;Now you should have a viable, working Python 3.3 virtual environment.&lt;/p&gt;
  616. &lt;p&gt;Fortunately &lt;a href="http://www.python.org/dev/peps/pep-0453/"&gt;Python 3.4 is going to improve on this by installing pip alongside python&lt;/a&gt;.&lt;/p&gt;
  617. &lt;p&gt;Also, pip 1.5.1's "get-pip.py" will let you skip that extra setuptools install above when it's out (real soon).&lt;/p&gt;</description>
  618.  </item>
  619.  
  620.  
  621.  <item>
  622.   <title>Python Game Programming Challenge (PyWeek) #17 is coming!</title>
  623.   <guid>http://mechanicalcat.net/richard/log/Python/Python_Game_Programming_Challenge__PyWeek___17_is_coming</guid>
  624.   <pubDate>Thu, 25 Jul 2013 05:03:52 +0000</pubDate>
  625.   <link>http://mechanicalcat.net/richard/log/Python/Python_Game_Programming_Challenge__PyWeek___17_is_coming</link>
  626.   <description>&lt;a href="http://pyweek.org/"&gt;&lt;img border="0" src="http://media.pyweek.org/static/pyweek.png"&gt;&lt;/a&gt;
  627. &lt;p&gt;The &lt;a href="http://pyweek.org/17/"&gt;17th Python Game Programming Challenge (PyWeek)&lt;/a&gt; is coming. It'll run from the 1st to the 8th of September.&lt;/p&gt;
  628. &lt;p&gt;The PyWeek challenge:&lt;/p&gt;
  629. &lt;ol&gt;
  630. &lt;li&gt;Invites entrants to write a game in one week from scratch
  631.  either as an individual or in a team,&lt;/li&gt;
  632. &lt;li&gt;Is intended to be challenging and fun,&lt;/li&gt;
  633. &lt;li&gt;Will increase the public body of game tools, code and expertise,&lt;/li&gt;
  634. &lt;li&gt;Will let a lot of people actually finish a game, and&lt;/li&gt;
  635. &lt;li&gt;May inspire new projects (with ready made teams!)&lt;/li&gt;
  636. &lt;/ol&gt;
  637. &lt;p&gt;Check out the &lt;a href="http://pyweek.org/s/help/"&gt;help page&lt;/a&gt; for how to compete and the growing &lt;a href="http://pyweek.org/d/4008/"&gt;resources message board post&lt;/a&gt;.&lt;/p&gt;</description>
  638.  </item>
  639.  
  640.  
  641.  <item>
  642.   <title>PyCon AU 2013 and Things You Should Not Do In Python</title>
  643.   <guid>http://mechanicalcat.net/richard/log/Python/PyCon_AU_2013_and_Things_You_Should_Not_Do_In_Python</guid>
  644.   <pubDate>Fri, 12 Jul 2013 03:46:12 +0000</pubDate>
  645.   <link>http://mechanicalcat.net/richard/log/Python/PyCon_AU_2013_and_Things_You_Should_Not_Do_In_Python</link>
  646.   <description>&lt;p&gt;So &lt;a href="http://pycon-au.org"&gt;PyCon Australia&lt;/a&gt; is done for another year and it was a corker. I'm somewhat overwhelmed and Graeme Cross has an &lt;a href="http://www.curiousvenn.com/?p=425"&gt;great summary of the event&lt;/a&gt;, but I really must repeat what an amazing job the organisers did in running a quality, smooth event packed with Python. See also Katie Miller's writeup about the 10 things that &lt;a href="http://codemiller.com/post/55054286648/pycon-au-particulars-10-elements-of-a-quality"&gt;PyCon AU does particularly well&lt;/a&gt;.&lt;/p&gt;
  647. &lt;p&gt;Personally, I pleased as punch that my talk &lt;i&gt;Don't Do This&lt;/i&gt; went as well as it did - I had a blast giving it and it was well-received.&lt;/p&gt;
  648. &lt;iframe width="640" height="480" src="//www.youtube.com/embed/H2yfXnUb1S4" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;
  649. &lt;p&gt;Also, Ben Finney talked a bunch about PyCon AU in &lt;a href="http://rrrfm.libsyn.com/byte-into-it-10-july-2013"&gt;Wednesday's Byte Into It on 3RRR&lt;/a&gt;.</description>
  650.  </item>
  651.  
  652.  
  653.  <item>
  654.   <title>How awesome was PyCon?</title>
  655.   <guid>http://mechanicalcat.net/richard/log/Python/How_awesome_was_PyCon</guid>
  656.   <pubDate>Thu, 21 Mar 2013 00:05:37 +0000</pubDate>
  657.   <link>http://mechanicalcat.net/richard/log/Python/How_awesome_was_PyCon</link>
  658.   <description>&lt;a href="/images/young-coders.jpg"&gt;&lt;img style="float: right; margin-left: 10px;" src="/images/young-coders.thumb.jpg"&gt;&lt;/a&gt;
  659. &lt;p&gt;&lt;a href="http://us.pycon.org/"&gt;PyCon&lt;/a&gt; was awesome.
  660. &lt;/p&gt;
  661. &lt;p&gt;
  662. It started with the &lt;a href="http://mechanicalgirl.com/post/young-coders-learning-python-pycon-2013/"&gt;Young Coders&lt;/a&gt; tutorial where I had the privilege of helping out as an assistant. The kids were amazing. Barbara Shaurette and Katie Cunningham were amazing. It was awesome.
  663. &lt;/p&gt;
  664. &lt;p&gt;
  665. The next day I popped in to help set up that room again but then spent the rest of the day focusing on my afternoon tutorial &lt;a href="http://pyvideo.org/video/1718/introduction-to-pygame"&gt;teaching people to write games in Python&lt;/a&gt;. It was packed - 35 or so attendees had signed up but then a bunch of the kids from the first day of Young Coders also came along to watch and learn. Including an 8 year old girl who told her dad she wanted to write video games. Awesome.
  666. &lt;/p&gt;
  667. &lt;p&gt;
  668. Then the conference proper started with an inspiring &lt;a href="http://www.youtube.com/watch?v=WQJ67Xvw1Zo"&gt;opening speech&lt;/a&gt; by the conference chair Jesse Noller about his vision of &lt;em&gt;Change the future - education, outreach, politeness, respect, tenacity and vision&lt;/em&gt;. A broad, ambitious and awesome vision, and one I can fully get behind. Then Eben Upton &lt;a href="http://www.youtube.com/watch?v=PAHBZImmXsI"&gt;took the stage&lt;/a&gt; to tell us about his journey with the Raspberry Pi project and a little of his vision. Lots of similarities. And then everyone got a Raspberry Pi. Awesome.
  669. &lt;/p&gt;
  670. &lt;p&gt;People wanting help figuring out how to teach kids to program their Raspberry Pi could try the free &lt;a href="http://downloads.raspberrypi.org/Raspberry_Pi_Education_Manual.pdf"&gt;Raspberry Pi Education Manual&lt;/a&gt; PDF.&lt;/p&gt;
  671. &lt;p&gt;
  672. I spent a lot of time during the conference split between talking through various things in the hallway (I'm the &lt;a href="https://pypi.python.org/pypi"&gt;Cheeseshop&lt;/a&gt; &lt;a href="http://en.wikipedia.org/wiki/Benevolent_Dictator_for_Life"&gt;BDFL&lt;/a&gt; and there's many things afoot there and PyCon is a great time to move things forward very quickly), and spending time in the Raspberry Pi lab, chairing talk sessions for amazing speakers and generally having my mind awesomely expanded.
  673. &lt;/p&gt;
  674. &lt;p&gt;
  675. I taught many people the basics of pygame. I ran into the Kivy developers, and talked to them about the Pi. During the sprints they ported Kivy to the Pi and even developed some simple games using &lt;a href="http://www.youtube.com/watch?v=NVM09gaX6pQ"&gt;Kivy, the Pi and some simple hardware sensors&lt;/a&gt; (I'm playing the game with a tilt sensor).
  676. &lt;/p&gt;
  677. &lt;p&gt;
  678. I had an inspiring conversation with James Bennett during which a light went off in my head and the result is Python Enhancement Proposal (PEP) 439 for "&lt;a href="http://www.python.org/dev/peps/pep-0439/"&gt;Inclusion of pip bootstrap in Python installation&lt;/a&gt;". (apologies if you get a badly-formatted version; it should be fixed shortly.)
  679. &lt;/p&gt;
  680. &lt;p&gt;
  681. I'm exhausted. The people here - the community - is amazing and vibrant and brilliant and huge. 2500 people at the conference, 20% women. Awesome.
  682. &lt;/p&gt;
  683. &lt;p&gt;Seriously, look how many people were there...&lt;/p&gt;
  684. &lt;a href="/images/P1050598-P1050600.jpg"&gt;&lt;img src="/images/P1050598-P1050600.thumb.jpg"&gt;&lt;/a&gt;</description>
  685.  </item>
  686.  
  687.  
  688.  <item>
  689.   <title>Python Game Programming Challenge (PyWeek) #16 is coming!</title>
  690.   <guid>http://mechanicalcat.net/richard/log/Python/Python_Game_Programming_Challenge__PyWeek___16_is_coming</guid>
  691.   <pubDate>Mon, 18 Feb 2013 04:29:33 +0000</pubDate>
  692.   <link>http://mechanicalcat.net/richard/log/Python/Python_Game_Programming_Challenge__PyWeek___16_is_coming</link>
  693.   <description>&lt;a href="http://pyweek.org/"&gt;&lt;img border="0" src="http://media.pyweek.org/static/pyweek.png"&gt;&lt;/a&gt;
  694. &lt;p&gt;The &lt;a href="http://pyweek.org/16/"&gt;16th Python Game Programming Challenge (PyWeek)&lt;/a&gt; is coming. It'll run from the 14th to the 21st of April.&lt;/p&gt;
  695. &lt;p&gt;The PyWeek challenge:&lt;/p&gt;
  696. &lt;ol&gt;
  697. &lt;li&gt;Invites entrants to write a game in one week from scratch
  698.  either as an individual or in a team,&lt;/li&gt;
  699. &lt;li&gt;Is intended to be challenging and fun,&lt;/li&gt;
  700. &lt;li&gt;Will increase the public body of game tools, code and expertise,&lt;/li&gt;
  701. &lt;li&gt;Will let a lot of people actually finish a game, and&lt;/li&gt;
  702. &lt;li&gt;May inspire new projects (with ready made teams!)&lt;/li&gt;
  703. &lt;/ol&gt;
  704. &lt;p&gt;Check out the &lt;a href="http://pyweek.org/s/help/"&gt;help page&lt;/a&gt; for how to compete and the growing &lt;a href="http://pyweek.org/d/4008/"&gt;resources message board post&lt;/a&gt;.&lt;/p&gt;</description>
  705.  </item>
  706.  
  707.  
  708.  <item>
  709.   <title>PyPI password-related security changes</title>
  710.   <guid>http://mechanicalcat.net/richard/log/Python/PyPI_password_related_security_changes</guid>
  711.   <pubDate>Fri, 15 Feb 2013 00:47:53 +0000</pubDate>
  712.   <link>http://mechanicalcat.net/richard/log/Python/PyPI_password_related_security_changes</link>
  713.   <description>TL;DR: please log into PyPI and change your password.
  714. &lt;p&gt;
  715. Recently we have been auditing and improving security of the &lt;a href="https://pypi.python.org/pypi"&gt;Python Package
  716. Index (PyPI)&lt;/a&gt; and other python.org hosts.
  717. &lt;p&gt;
  718. You may be aware that the wiki.python.org host was compromised. Since we must
  719. assume that all passwords stored in that system are also compromised, and we
  720. also assume that some users share passwords between python.org systems, we are
  721. performing a password reset of all PyPI accounts in one week's time, at
  722. 2013-02-22 00:00 UTC.
  723. &lt;p&gt;
  724. If you log in before that deadline and change your password then you'll be
  725. fine, otherwise you'll need to use the password recovery form after the reset
  726. has occurred.
  727. &lt;p&gt;
  728. Additionally, we would ask you to begin to access PyPI using HTTPS through the
  729. web. We're in the process of installing a new SSL certificate so the current
  730. Big Red Certificate Warning should go away very soon.
  731. &lt;p&gt;
  732. We are in the process of updating the Python packaging toolset to use HTTPS.
  733. &lt;p&gt;
  734. These steps are but a couple of those we're intending to take to better secure
  735. PyPI. If you are interested in these matters I encourage you to participate in
  736. the discussion on the &lt;a href="http://mail.python.org/mailman/listinfo/catalog-sig"&gt;catalog SIG&lt;/a&gt;.
  737. &lt;p&gt;
  738. Finally, we apologise for any inconvenience these changes have caused.</description>
  739.  </item>
  740.  
  741.  
  742.  <item>
  743.   <title>Introducing pythonhosted.org - the new packages.python.org</title>
  744.   <guid>http://mechanicalcat.net/richard/log/Python/Introducing_pythonhosted_org___the_new_packages_python_org</guid>
  745.   <pubDate>Sat, 09 Feb 2013 02:21:35 +0000</pubDate>
  746.   <link>http://mechanicalcat.net/richard/log/Python/Introducing_pythonhosted_org___the_new_packages_python_org</link>
  747.   <description>&lt;p&gt;We've just added a new domain to the python.org stable, &lt;a href="http://pythonhosted.org"&gt;pythonhosted.org&lt;/a&gt;, to replace the existing packages.python.org domain. All accesses to the old domain are redirected to the new - all existing references will work. Google et al should catch up eventually.&lt;/p&gt;
  748. &lt;p&gt;This was done as &lt;a href="http://mail.python.org/pipermail/catalog-sig/2013-February/004848.html"&gt;part&lt;/a&gt; of an overall review of security of the PyPI website. Warning, that thread is longish :-)&lt;/p&gt;</description>
  749.  </item>
  750.  
  751.  
  752.  <item>
  753.   <title>Compiling cx_Oracle on OS X</title>
  754.   <guid>http://mechanicalcat.net/richard/log/Python/Compiling_cx_Oracle_on_OS_X</guid>
  755.   <pubDate>Fri, 04 Jan 2013 00:43:10 +0000</pubDate>
  756.   <link>http://mechanicalcat.net/richard/log/Python/Compiling_cx_Oracle_on_OS_X</link>
  757.   <description>&lt;p&gt;Occasionally I need to compile cx_Oracle on OS X and the 32- and 64-bit worlds collide head-on in a mess of "implicit conversion shortens 64-bit value into a 32-bit value" and "file was built for unsupported file format which is not the architecture being linked (x86_64)" errors.&lt;/p&gt;
  758. &lt;p&gt;I keep forgetting the various steps needed to make this work correctly so here they are:&lt;/p&gt;
  759. &lt;ol&gt;
  760. &lt;li&gt;Create a virtualenv with a python interpreter stripped to 32-bit only. In the virtualenv bin directory (&lt;code&gt;$WORKON_HOME/&lt;em&gt;name_of_virtualenv&lt;/em&gt;/bin&lt;/code&gt;):
  761. &lt;pre class="code"&gt;% mv python python.fat
  762. % lipo python.fat -remove x86_64 -output python&lt;/pre&gt;
  763. Doing this saves all the hassles of that "arch", "VERSIONER_PYTHON_PREFER_32_BIT" and "defaults write blah blah" guff and doesn't affect any other virtualenvs.&lt;/li&gt;
  764. &lt;li&gt;Now that we have a "thin" Python compatible with the Oracle library, we can build cx_Oracle. Unfortunately even though Python is thin its configuration is not so we need to force things using an obscure environment variable that distutils will pick up:
  765. &lt;pre class="code"&gt;ARCHFLAGS="-arch i386" pip install cx_Oracle&lt;/pre&gt;&lt;/li&gt;
  766. &lt;/ol&gt;
  767. &lt;p&gt;There, that was easy, wasn't it?&lt;/p&gt;</description>
  768.  </item>
  769.  
  770.  
  771.  <item>
  772.   <title>Python Game Programming Challenge (PyWeek) #15 is coming!</title>
  773.   <guid>http://mechanicalcat.net/richard/log/Python/Python_Game_Programming_Challenge__PyWeek___15_is_coming</guid>
  774.   <pubDate>Thu, 09 Aug 2012 05:08:18 +0000</pubDate>
  775.   <link>http://mechanicalcat.net/richard/log/Python/Python_Game_Programming_Challenge__PyWeek___15_is_coming</link>
  776.   <description>&lt;a href="http://pyweek.org/"&gt;&lt;img border="0" src="http://media.pyweek.org/static/pyweek.png"&gt;&lt;/a&gt;
  777. &lt;p&gt;The &lt;a href="http://pyweek.org/15/"&gt;15th Python Game Programming Challenge (PyWeek)&lt;/a&gt; is coming. It'll run from the 9th to the 16th of September.&lt;/p&gt;
  778. &lt;p&gt;The PyWeek challenge:&lt;/p&gt;
  779. &lt;ol&gt;
  780. &lt;li&gt;Invites entrants to write a game in one week from scratch
  781.  either as an individual or in a team,&lt;/li&gt;
  782. &lt;li&gt;Is intended to be challenging and fun,&lt;/li&gt;
  783. &lt;li&gt;Will increase the public body of game tools, code and expertise,&lt;/li&gt;
  784. &lt;li&gt;Will let a lot of people actually finish a game, and&lt;/li&gt;
  785. &lt;li&gt;May inspire new projects (with ready made teams!)&lt;/li&gt;
  786. &lt;/ol&gt;
  787. &lt;p&gt;Check out the &lt;a href="http://pyweek.org/s/help/"&gt;help page&lt;/a&gt; for how to compete and the growing &lt;a href="http://pyweek.org/d/4008/"&gt;resources message board post&lt;/a&gt;.&lt;/p&gt;</description>
  788.  </item>
  789.  
  790. </channel>
  791. </rss>
  792.  

If you would like to create a banner that links to this page (i.e. this validation result), do the following:

  1. Download the "valid RSS" banner.

  2. Upload the image to your own server. (This step is important. Please do not link directly to the image on this server.)

  3. Add this HTML to your page (change the image src attribute if necessary):

If you would like to create a text link instead, here is the URL you can use:

http://www.feedvalidator.org/check.cgi?url=http%3A//mechanicalcat.net/richard/log/rss

Copyright © 2002-9 Sam Ruby, Mark Pilgrim, Joseph Walton, and Phil Ringnalda