<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-3805021752227734860</id><updated>2011-07-28T20:27:34.518-07:00</updated><title type='text'>GSoC libtpproto2-py</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://tpproto2.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3805021752227734860/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://tpproto2.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>cherez</name><uri>http://www.blogger.com/profile/11713580471446866995</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>41</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-3805021752227734860.post-7095270939812939955</id><published>2009-08-18T17:59:00.000-07:00</published><updated>2009-08-18T18:27:01.988-07:00</updated><title type='text'>Weekly update for July 18th</title><content type='html'>This week's work was mostly on the port of tpclient-pytext. The majority of this work was modifying the code to work with the new generator-style API. Besides this was  modifying the code to work with the new Object and Order implementations. This is still a little lacking, as the order insertion function hasn't been rewritten yet and the show function needs to be modified. I also discovered some older bugs with packing and unpacking DescStructures, which have been fixed.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3805021752227734860-7095270939812939955?l=tpproto2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tpproto2.blogspot.com/feeds/7095270939812939955/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tpproto2.blogspot.com/2009/08/weekly-update-for-july-18th.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3805021752227734860/posts/default/7095270939812939955'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3805021752227734860/posts/default/7095270939812939955'/><link rel='alternate' type='text/html' href='http://tpproto2.blogspot.com/2009/08/weekly-update-for-july-18th.html' title='Weekly update for July 18th'/><author><name>cherez</name><uri>http://www.blogger.com/profile/11713580471446866995</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3805021752227734860.post-6470915134735987251</id><published>2009-08-17T08:03:00.000-07:00</published><updated>2009-08-17T08:05:02.618-07:00</updated><title type='text'>Daily Update for August 16th</title><content type='html'>After some work, I got all the descriptions working. All that I need to do now is work on the Order and Message methods, but I'm too tired to function any longer, so those will have to be handled tomorrow.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3805021752227734860-6470915134735987251?l=tpproto2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tpproto2.blogspot.com/feeds/6470915134735987251/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tpproto2.blogspot.com/2009/08/daily-update-for-august-16th.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3805021752227734860/posts/default/6470915134735987251'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3805021752227734860/posts/default/6470915134735987251'/><link rel='alternate' type='text/html' href='http://tpproto2.blogspot.com/2009/08/daily-update-for-august-16th.html' title='Daily Update for August 16th'/><author><name>cherez</name><uri>http://www.blogger.com/profile/11713580471446866995</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3805021752227734860.post-2140656202955656099</id><published>2009-08-16T09:56:00.000-07:00</published><updated>2009-08-16T09:58:25.913-07:00</updated><title type='text'>Daily update for August 15th</title><content type='html'>Steady progress with tpclient-pytext. It still needs some work with descriptions, which will be my focus tomorrow.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3805021752227734860-2140656202955656099?l=tpproto2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tpproto2.blogspot.com/feeds/2140656202955656099/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tpproto2.blogspot.com/2009/08/daily-update-for-august-15th.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3805021752227734860/posts/default/2140656202955656099'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3805021752227734860/posts/default/2140656202955656099'/><link rel='alternate' type='text/html' href='http://tpproto2.blogspot.com/2009/08/daily-update-for-august-15th.html' title='Daily update for August 15th'/><author><name>cherez</name><uri>http://www.blogger.com/profile/11713580471446866995</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3805021752227734860.post-419712569377490232</id><published>2009-08-14T02:33:00.000-07:00</published><updated>2009-08-14T02:38:13.943-07:00</updated><title type='text'>Daily Update for Augist 13th</title><content type='html'>I got &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;tpserver&lt;/span&gt;-&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;cpp&lt;/span&gt; running locally today, and with llnz's help I fixed the connection problem I had been having. The problem was that I was including the header's length in the packet length. This has now been fixed, but I haven't updated the unit tests yet. I will do that tomorrow before I work on extending the client.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3805021752227734860-419712569377490232?l=tpproto2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tpproto2.blogspot.com/feeds/419712569377490232/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tpproto2.blogspot.com/2009/08/daily-update-for-augist-13th.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3805021752227734860/posts/default/419712569377490232'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3805021752227734860/posts/default/419712569377490232'/><link rel='alternate' type='text/html' href='http://tpproto2.blogspot.com/2009/08/daily-update-for-augist-13th.html' title='Daily Update for Augist 13th'/><author><name>cherez</name><uri>http://www.blogger.com/profile/11713580471446866995</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3805021752227734860.post-7519479497220520680</id><published>2009-08-11T18:03:00.000-07:00</published><updated>2009-08-11T18:28:04.821-07:00</updated><title type='text'>Weekly update for August 11th</title><content type='html'>&lt;p&gt;This post will be extending more than a week back since I was unable to write my update for last week. As I mentioned yesterday, I've done a lot of work on common and client, which I will touch on separately:&lt;/p&gt;&lt;p&gt;common: While it was mostly functional, common could not pull subclasses of describable packets (order and object) correctly. This required modifying the code in parser to identify the type field in a description and save it so that common could look it up. After that work was mostly on expanding coverage, which is now fairly complete sans the SSL support. As I was unable to connect to any SSL servers with any program, there was no useful means to test it. The testing for this will be pushed to the integration tests with client, as time has become more pressing.&lt;/p&gt;&lt;p&gt;client: Probably more than half the lines in client had to be modified because of API changes over the course of the project. This includes differences in object names between libtpproto-py and protocol.xml, the transitions of objects to being an object rather than a singleton, and some logic changes that have occurred since the original writing. In the current state I don't believe any significiant changes need to be made, but because this is essentially protocol code, my own misunderstanding is a very real possiblity.&lt;/p&gt;&lt;p&gt;tpclient-pytext:  This is still in a rudimentary state, as I'm having some difficulties porting it to the new library. As I mentioned before, I have been failing to connect to the servers with the client. The packet appears to be correctly constructed, however, so I fear I'm misunderstanding the protocol.  This is presently my top priority. I will be attempting to set up a local server for a more controlled testing environment tonight.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3805021752227734860-7519479497220520680?l=tpproto2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tpproto2.blogspot.com/feeds/7519479497220520680/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tpproto2.blogspot.com/2009/08/weekly-update-for-august-11th.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3805021752227734860/posts/default/7519479497220520680'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3805021752227734860/posts/default/7519479497220520680'/><link rel='alternate' type='text/html' href='http://tpproto2.blogspot.com/2009/08/weekly-update-for-august-11th.html' title='Weekly update for August 11th'/><author><name>cherez</name><uri>http://www.blogger.com/profile/11713580471446866995</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3805021752227734860.post-3063144923557645434</id><published>2009-08-10T20:56:00.000-07:00</published><updated>2009-08-10T21:06:23.851-07:00</updated><title type='text'>Update for August 10th!</title><content type='html'>&lt;p&gt;Hello again, the internet! Thanks to ISP troubles I've been unable to connect over SSL or SSH for the last week. I don't know why, but it seems to have resolved itself.&lt;/p&gt;&lt;p&gt;I now have common in a mostly finished state and have client ready for testing. The insert methods in client require me to essentially cast a packet to another type and send it. This should be straightforward, but I've not implemented it yet.&lt;/p&gt;&lt;p&gt;I've started porting tpclient-pytext to use libtpproto2-py. I'm hung up on being unable to get a reply from the server upon logging in. I've manually determined that the server is not sending a reply, so I now suspect that there might be an error in the connect packet. i will investigate tomorrow.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3805021752227734860-3063144923557645434?l=tpproto2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tpproto2.blogspot.com/feeds/3063144923557645434/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tpproto2.blogspot.com/2009/08/update-for-august-10th.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3805021752227734860/posts/default/3063144923557645434'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3805021752227734860/posts/default/3063144923557645434'/><link rel='alternate' type='text/html' href='http://tpproto2.blogspot.com/2009/08/update-for-august-10th.html' title='Update for August 10th!'/><author><name>cherez</name><uri>http://www.blogger.com/profile/11713580471446866995</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3805021752227734860.post-5822493148949996805</id><published>2009-08-03T17:48:00.000-07:00</published><updated>2009-08-03T19:56:06.950-07:00</updated><title type='text'>Daily update for August 2nd</title><content type='html'>Fixed the unpacking bug and made ConnectionCommon correctly identify subclasses  of describable packets. Expanded coverage to get confidence that ConnectionCommon now works for all packets. Still need a good way to test SSL support, then work on Client.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3805021752227734860-5822493148949996805?l=tpproto2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tpproto2.blogspot.com/feeds/5822493148949996805/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tpproto2.blogspot.com/2009/08/daily-update-for-august-2nd.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3805021752227734860/posts/default/5822493148949996805'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3805021752227734860/posts/default/5822493148949996805'/><link rel='alternate' type='text/html' href='http://tpproto2.blogspot.com/2009/08/daily-update-for-august-2nd.html' title='Daily update for August 2nd'/><author><name>cherez</name><uri>http://www.blogger.com/profile/11713580471446866995</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3805021752227734860.post-1582989494176675262</id><published>2009-08-01T16:28:00.001-07:00</published><updated>2009-08-01T16:54:18.155-07:00</updated><title type='text'>Daily update for July 31st</title><content type='html'>I believe all mentions of a packet's length have been corrected. However, I seem to have found problems with unpacking in the unit tests. I'll be looking into the cause of that tomorrow.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3805021752227734860-1582989494176675262?l=tpproto2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tpproto2.blogspot.com/feeds/1582989494176675262/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tpproto2.blogspot.com/2009/08/daily-update-for-july-31st.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3805021752227734860/posts/default/1582989494176675262'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3805021752227734860/posts/default/1582989494176675262'/><link rel='alternate' type='text/html' href='http://tpproto2.blogspot.com/2009/08/daily-update-for-july-31st.html' title='Daily update for July 31st'/><author><name>cherez</name><uri>http://www.blogger.com/profile/11713580471446866995</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3805021752227734860.post-573951073317769472</id><published>2009-07-30T22:50:00.000-07:00</published><updated>2009-07-30T23:10:23.610-07:00</updated><title type='text'>Daily update for July 30th</title><content type='html'>&lt;span style="font-family:arial;"&gt;I've found some issues with the length attribute of packets. To simplify calculating the length, length is a property that dynamically is calculated based on the data in the packet. This is supposed to be used in the outgoing packets (it is not) while we should be using the encoded length of properties received from the network (we use the calculated value, which is always the length of a header). I am working on fixing this and  expect to have everything straightened out tomorrow.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3805021752227734860-573951073317769472?l=tpproto2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tpproto2.blogspot.com/feeds/573951073317769472/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tpproto2.blogspot.com/2009/07/daily-update-for-july-30th.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3805021752227734860/posts/default/573951073317769472'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3805021752227734860/posts/default/573951073317769472'/><link rel='alternate' type='text/html' href='http://tpproto2.blogspot.com/2009/07/daily-update-for-july-30th.html' title='Daily update for July 30th'/><author><name>cherez</name><uri>http://www.blogger.com/profile/11713580471446866995</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3805021752227734860.post-2466069448136091214</id><published>2009-07-28T17:18:00.000-07:00</published><updated>2009-07-28T18:19:00.882-07:00</updated><title type='text'>Weekly update for July 28th</title><content type='html'>&lt;p&gt;The last few days have been somewhat slow; I've come down with a cold that has wrecked my brain. Common is now roughly done, but I'd like some better coverage on the socket and SSL wrappers, and I realized that the packet receiver does not properly create the subclasses of describable packets. I've got a fix mostly coded, and I think I'll have this written and tested tomorrow.&lt;/p&gt;&lt;p&gt;I've also started looking at the Client module for testing.  I would like to actually have it talking to one of the existing TP servers for the tests, but I'm not sure I want that large a dependency for the tests. &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3805021752227734860-2466069448136091214?l=tpproto2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tpproto2.blogspot.com/feeds/2466069448136091214/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tpproto2.blogspot.com/2009/07/weekly-update-for-july-28th.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3805021752227734860/posts/default/2466069448136091214'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3805021752227734860/posts/default/2466069448136091214'/><link rel='alternate' type='text/html' href='http://tpproto2.blogspot.com/2009/07/weekly-update-for-july-28th.html' title='Weekly update for July 28th'/><author><name>cherez</name><uri>http://www.blogger.com/profile/11713580471446866995</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3805021752227734860.post-5450135328653348479</id><published>2009-07-27T00:30:00.000-07:00</published><updated>2009-07-28T17:18:06.485-07:00</updated><title type='text'>Daily Update for July 26th</title><content type='html'>&lt;p&gt;Today was mostly code clean up of removing dead code and simplifying some functions.  As a result the ConnectionCommon.__recvPacketGenerator method now knows the size of a packet and doesn't have to keep feeding bytes to the Header class until it works.&lt;/p&gt;&lt;p&gt;Tomorrow I'll try to solve my problems with the __process__ method not knowing what arguments to pass to __init__, as well as figuring out a good way to test the socket wrapping classes.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3805021752227734860-5450135328653348479?l=tpproto2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tpproto2.blogspot.com/feeds/5450135328653348479/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tpproto2.blogspot.com/2009/07/daily-update-for-july-26th.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3805021752227734860/posts/default/5450135328653348479'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3805021752227734860/posts/default/5450135328653348479'/><link rel='alternate' type='text/html' href='http://tpproto2.blogspot.com/2009/07/daily-update-for-july-26th.html' title='Daily Update for July 26th'/><author><name>cherez</name><uri>http://www.blogger.com/profile/11713580471446866995</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3805021752227734860.post-4444030677163706646</id><published>2009-07-25T01:13:00.000-07:00</published><updated>2009-07-25T01:33:16.548-07:00</updated><title type='text'>Daily Update for July 24th</title><content type='html'>I found the origin of the failures I mentioned of the __get__ methods of structures. It turns out the __get__ method is only called when the structure is a member of the class; and the structures in Header were not actually class members. This is now remedied.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3805021752227734860-4444030677163706646?l=tpproto2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tpproto2.blogspot.com/feeds/4444030677163706646/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tpproto2.blogspot.com/2009/07/daily-update-for-july-24th.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3805021752227734860/posts/default/4444030677163706646'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3805021752227734860/posts/default/4444030677163706646'/><link rel='alternate' type='text/html' href='http://tpproto2.blogspot.com/2009/07/daily-update-for-july-24th.html' title='Daily Update for July 24th'/><author><name>cherez</name><uri>http://www.blogger.com/profile/11713580471446866995</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3805021752227734860.post-7434688897069933489</id><published>2009-07-24T00:31:00.000-07:00</published><updated>2009-07-24T00:38:57.623-07:00</updated><title type='text'>Daily Update for July 23rd</title><content type='html'>Today I got ConnectionCommon._recvFrame working. There was some magic involved, such as giving Packets a second constructor. I also ran into some strange problems where accessing the structures of a packet returned the structure rather than the proxy. I am hoping to fix this tomorrow because it seems an afront to the laws of both man and God.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3805021752227734860-7434688897069933489?l=tpproto2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tpproto2.blogspot.com/feeds/7434688897069933489/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tpproto2.blogspot.com/2009/07/daily-update-for-july-23rd.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3805021752227734860/posts/default/7434688897069933489'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3805021752227734860/posts/default/7434688897069933489'/><link rel='alternate' type='text/html' href='http://tpproto2.blogspot.com/2009/07/daily-update-for-july-23rd.html' title='Daily Update for July 23rd'/><author><name>cherez</name><uri>http://www.blogger.com/profile/11713580471446866995</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3805021752227734860.post-2096481689360234002</id><published>2009-07-22T20:47:00.000-07:00</published><updated>2009-07-22T21:36:15.048-07:00</updated><title type='text'>Daily Update for July 22nd</title><content type='html'>Today's work was in ConnectionCommon. I'm presently working on the __recvFrameGenerator method. This method essentially pulls packets off the network as strings and translates them into the correct object. It also appears to be written with a different Packet class in mind, referencing, methods, properties, and exceptions that don't exist. Tomorrow I intend to have the logic gap bridged, and then I can figure out how to properly test the Connection class.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3805021752227734860-2096481689360234002?l=tpproto2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tpproto2.blogspot.com/feeds/2096481689360234002/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tpproto2.blogspot.com/2009/07/daily-update-for-july-22nd.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3805021752227734860/posts/default/2096481689360234002'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3805021752227734860/posts/default/2096481689360234002'/><link rel='alternate' type='text/html' href='http://tpproto2.blogspot.com/2009/07/daily-update-for-july-22nd.html' title='Daily Update for July 22nd'/><author><name>cherez</name><uri>http://www.blogger.com/profile/11713580471446866995</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3805021752227734860.post-1102094070611993327</id><published>2009-07-21T16:20:00.000-07:00</published><updated>2009-07-21T17:10:29.058-07:00</updated><title type='text'>Weekly Update for July 21st</title><content type='html'>&lt;p&gt;This week has been working on Common and cleaning up Parser, Structures, and Xstruct. I've found that Common has some expectations of Parser that aren't (yet) true.  I am working on reconcilliation of the two, but I want to get the previous branches merged with the master to minimize conflicts in the work.&lt;/p&gt;&lt;p&gt;For the more shareable work: Parser now has TP04 version numbering. Structures now has a more accessible API and unit tests that reflect it. Xstruct now is a port of the libtproto-py TP04 branch, with bug fixes and expanded unit tests to cover the new functionality and a few cases that I had previously overlooked.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3805021752227734860-1102094070611993327?l=tpproto2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tpproto2.blogspot.com/feeds/1102094070611993327/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tpproto2.blogspot.com/2009/07/weekly-update-for-july-21st.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3805021752227734860/posts/default/1102094070611993327'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3805021752227734860/posts/default/1102094070611993327'/><link rel='alternate' type='text/html' href='http://tpproto2.blogspot.com/2009/07/weekly-update-for-july-21st.html' title='Weekly Update for July 21st'/><author><name>cherez</name><uri>http://www.blogger.com/profile/11713580471446866995</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3805021752227734860.post-5246131567644951260</id><published>2009-07-21T14:06:00.000-07:00</published><updated>2009-07-21T14:36:33.007-07:00</updated><title type='text'>Update for July 20th</title><content type='html'>&lt;p&gt;There's not much to say about the work on Common right now.  I'm looking for the best way to test it, and the best answer I've come up with is using a dummy socket to capture the Connection I/O. For the protocol changes I mentioned before; the Connection objects now take a Protocol argument in addition to what they took previously.&lt;/p&gt;&lt;p&gt;In the other branches I've cleaned up the unit tests in Structures, and fixed the previously mentioned bug with lists that take only a single list in xstruct. I think those branches are ready to be merged into the master branch.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3805021752227734860-5246131567644951260?l=tpproto2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tpproto2.blogspot.com/feeds/5246131567644951260/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tpproto2.blogspot.com/2009/07/update-for-july-20th.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3805021752227734860/posts/default/5246131567644951260'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3805021752227734860/posts/default/5246131567644951260'/><link rel='alternate' type='text/html' href='http://tpproto2.blogspot.com/2009/07/update-for-july-20th.html' title='Update for July 20th'/><author><name>cherez</name><uri>http://www.blogger.com/profile/11713580471446866995</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3805021752227734860.post-6607175394775209412</id><published>2009-07-17T23:01:00.000-07:00</published><updated>2009-07-17T23:10:41.843-07:00</updated><title type='text'>Daily Update for July 17th</title><content type='html'>I've got StringQueue passing its UnitTests now. Working on the rest of the common module I've become aware that at several points the objects module is referenced. This module no longer exists, as Parser now creates a new object whenever it is run that has the contents of the former singleton. I'll discuss with mithro tomorrow how the module should be adapted for this.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3805021752227734860-6607175394775209412?l=tpproto2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tpproto2.blogspot.com/feeds/6607175394775209412/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tpproto2.blogspot.com/2009/07/daily-update-for-july-17th.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3805021752227734860/posts/default/6607175394775209412'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3805021752227734860/posts/default/6607175394775209412'/><link rel='alternate' type='text/html' href='http://tpproto2.blogspot.com/2009/07/daily-update-for-july-17th.html' title='Daily Update for July 17th'/><author><name>cherez</name><uri>http://www.blogger.com/profile/11713580471446866995</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3805021752227734860.post-213202890448319794</id><published>2009-07-16T02:30:00.000-07:00</published><updated>2009-07-16T02:46:06.251-07:00</updated><title type='text'>Daily Update for July 15th</title><content type='html'>&lt;p&gt;Todays I got the new xstruct compliant with the unit tests. This included adding support for character and floating point types, and fixing  a bug with {} lists. I also added some coverage tests for the new callback features.&lt;/p&gt;&lt;p&gt;I also became aware that the pack and unpack callback methods have an inconsistent API.  I may change this after I speak with mithro tomorrow. Additionally, I have found that there's an edge case where a list whose only element is another list will have an inconsistent pack/unpack API. Once I figure out how to fix this I don't expect it to be more than a few lines.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3805021752227734860-213202890448319794?l=tpproto2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tpproto2.blogspot.com/feeds/213202890448319794/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tpproto2.blogspot.com/2009/07/daily-update-for-july-15th.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3805021752227734860/posts/default/213202890448319794'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3805021752227734860/posts/default/213202890448319794'/><link rel='alternate' type='text/html' href='http://tpproto2.blogspot.com/2009/07/daily-update-for-july-15th.html' title='Daily Update for July 15th'/><author><name>cherez</name><uri>http://www.blogger.com/profile/11713580471446866995</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3805021752227734860.post-8655122064678028465</id><published>2009-07-14T17:45:00.000-07:00</published><updated>2009-07-14T18:20:13.221-07:00</updated><title type='text'>Weekly Update fol July 14th</title><content type='html'>&lt;p&gt;This week the parser saw some flexiblity improvements. As I mentioned yesterday it's now encapsulated in a class and returns a unique protocol each time it's run so multiple protocols can be used simultaneously.&lt;/p&gt;&lt;p&gt;I also worked on improving some of the components I've already worked on. I've made some readability improvements to the structures module and have begun porting the xstruct module from libtpproto-py's TP04 branch. The xstruct module does not yet pass the unit tests, so it's not ready to be merged yet, but this should be remedied soon.&lt;/p&gt;&lt;p&gt;I've also been reading over the Common and Client modules to figure out how they can best be tested. There is not much to show for that yet, but I'm hoping to have something soon.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3805021752227734860-8655122064678028465?l=tpproto2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tpproto2.blogspot.com/feeds/8655122064678028465/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tpproto2.blogspot.com/2009/07/weekly-update-fol-july-14th.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3805021752227734860/posts/default/8655122064678028465'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3805021752227734860/posts/default/8655122064678028465'/><link rel='alternate' type='text/html' href='http://tpproto2.blogspot.com/2009/07/weekly-update-fol-july-14th.html' title='Weekly Update fol July 14th'/><author><name>cherez</name><uri>http://www.blogger.com/profile/11713580471446866995</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3805021752227734860.post-513310613678517864</id><published>2009-07-12T23:04:00.000-07:00</published><updated>2009-07-12T23:35:40.162-07:00</updated><title type='text'>Daily Update for July 12th</title><content type='html'>&lt;p&gt;I've missed some daily updates; my ISP had been quite convinced that Blogger was not a real website. It seems better now, so I should be updating daily again.&lt;/p&gt;&lt;p&gt;At mithro's suggestion the parser returns a new protocol each time it's called rather than putting the definition in the objects module; thus multiple protocols can be used at once. I've also encapsulated the parser into a class, in response to some superstition about global variables or something, but this at least makes the parser threadsafe.&lt;/p&gt;&lt;p&gt;mithro has also informed me that the header that was previously in use doesn't work with TP04 because of the header format has changed to a major/minor version scheme. The minor version (the "Frame Type Version") isn't in protocol.xml, so implementing this is mostly waiting on thinking of a good answer.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3805021752227734860-513310613678517864?l=tpproto2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tpproto2.blogspot.com/feeds/513310613678517864/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tpproto2.blogspot.com/2009/07/daily-update-for-july-12th.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3805021752227734860/posts/default/513310613678517864'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3805021752227734860/posts/default/513310613678517864'/><link rel='alternate' type='text/html' href='http://tpproto2.blogspot.com/2009/07/daily-update-for-july-12th.html' title='Daily Update for July 12th'/><author><name>cherez</name><uri>http://www.blogger.com/profile/11713580471446866995</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3805021752227734860.post-2209013559593139447</id><published>2009-07-08T14:11:00.000-07:00</published><updated>2009-07-08T15:55:53.285-07:00</updated><title type='text'>What I've done so far.</title><content type='html'>&lt;p&gt;Mithro asked me to write a summary of what I've done so far in GSoC, so here I go:&lt;/p&gt;&lt;p&gt;I started on the xstruct module (an improved version of Python's struct module), as it did not depend on any other modules but was used by much of the rest of the library. My work here was mostly writing unit tests as xstruct was not a new module, but I did find flaws in a number of types wihch I presume simply hadn't been tested. This included incorrect unicode support for string encoding and floating-point types having been overlooked entirely.&lt;/p&gt;&lt;p&gt;After that I began work on the structures module. This module is something of a high-level wrapper of xstruct. It provides a kind of type-safe way to represent the structures of xstruct. I of course wrote unit tests for this, which uncovered quite a lot of bugs throughout that needed to be addressed. The bulk of code changes were in the Group and List structures, as they represented mutable and nestable types. These were in a pretty unusable state, but now do exactly what they're supposed to do. &lt;/p&gt;&lt;p&gt;In the last few weeks I've been working on the parser module of libtpproto2-py. This module  is an XML parser which reads the protocol.xml file that specifies  the Thousand Parsec protocol, and generates classes representing all the kinds of packets that might be transmitted. This module required quite a lot more work. The parser was SAX-based and took me a lot of work to be able to follow. Because a primary goal of libtpproto2-py is readability, I rewrote the parser from scratch using a DOM approach which I find to be much more readable. The previous parser also was incomplete in its parsing of protocol.xml. Most notable is that it had no support for parameters, which are used by the server to specify custom objects and orders for the game being played. Getting full parameter support has been the last major feature I've completed.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3805021752227734860-2209013559593139447?l=tpproto2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tpproto2.blogspot.com/feeds/2209013559593139447/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tpproto2.blogspot.com/2009/07/what-ive-done-so-far.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3805021752227734860/posts/default/2209013559593139447'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3805021752227734860/posts/default/2209013559593139447'/><link rel='alternate' type='text/html' href='http://tpproto2.blogspot.com/2009/07/what-ive-done-so-far.html' title='What I&apos;ve done so far.'/><author><name>cherez</name><uri>http://www.blogger.com/profile/11713580471446866995</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3805021752227734860.post-5919461936087473138</id><published>2009-07-08T12:51:00.000-07:00</published><updated>2009-07-08T14:12:28.956-07:00</updated><title type='text'>Weekly update for June 7th</title><content type='html'>Parser should now be in a roughly finished state. All that should be remaining is getting 100% coverage on it, and improving readability until I get Mithro's okay to push.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3805021752227734860-5919461936087473138?l=tpproto2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tpproto2.blogspot.com/feeds/5919461936087473138/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tpproto2.blogspot.com/2009/07/weekly-update-for-june-7th.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3805021752227734860/posts/default/5919461936087473138'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3805021752227734860/posts/default/5919461936087473138'/><link rel='alternate' type='text/html' href='http://tpproto2.blogspot.com/2009/07/weekly-update-for-june-7th.html' title='Weekly update for June 7th'/><author><name>cherez</name><uri>http://www.blogger.com/profile/11713580471446866995</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3805021752227734860.post-3943077212718143286</id><published>2009-07-07T01:40:00.000-07:00</published><updated>2009-07-07T01:41:26.161-07:00</updated><title type='text'>Daily Update for July 6th</title><content type='html'>I think everything in Parser works now. Tomorrow I'll clean everything up and, if I find nothing missing, will push it on to the main repository.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3805021752227734860-3943077212718143286?l=tpproto2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tpproto2.blogspot.com/feeds/3943077212718143286/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tpproto2.blogspot.com/2009/07/daily-update-for-july-6th.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3805021752227734860/posts/default/3943077212718143286'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3805021752227734860/posts/default/3943077212718143286'/><link rel='alternate' type='text/html' href='http://tpproto2.blogspot.com/2009/07/daily-update-for-july-6th.html' title='Daily Update for July 6th'/><author><name>cherez</name><uri>http://www.blogger.com/profile/11713580471446866995</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3805021752227734860.post-4052875417263984333</id><published>2009-07-06T01:05:00.000-07:00</published><updated>2009-07-06T01:13:07.974-07:00</updated><title type='text'>Daily Update for July 5th</title><content type='html'>Only problem with DescStructure right now is that its check method  requires state information it doesn't have access to in order to work.   Mithro suggested that I write a GroupStructure that can encompass DescStructure and the field it needs to determine its structure, and let that Group handle checking. I'll work on that tomorrow, and finish making useparameters work (which I believe will mostly entail making sure I understand their behavior correctly.)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3805021752227734860-4052875417263984333?l=tpproto2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tpproto2.blogspot.com/feeds/4052875417263984333/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tpproto2.blogspot.com/2009/07/daily-update-for-july-5th.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3805021752227734860/posts/default/4052875417263984333'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3805021752227734860/posts/default/4052875417263984333'/><link rel='alternate' type='text/html' href='http://tpproto2.blogspot.com/2009/07/daily-update-for-july-5th.html' title='Daily Update for July 5th'/><author><name>cherez</name><uri>http://www.blogger.com/profile/11713580471446866995</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3805021752227734860.post-8127810040084197649</id><published>2009-07-04T23:30:00.000-07:00</published><updated>2009-07-04T23:31:53.360-07:00</updated><title type='text'>Dailf update for July 4th</title><content type='html'>Well, testing says that Descstructure doesn't work. I've got it mostly hammered out now, hoping to figure out what is going on with it in the morning. My only explanation right now is "spooky action at a distance".&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3805021752227734860-8127810040084197649?l=tpproto2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tpproto2.blogspot.com/feeds/8127810040084197649/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tpproto2.blogspot.com/2009/07/dailf-update-for-july-4th.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3805021752227734860/posts/default/8127810040084197649'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3805021752227734860/posts/default/8127810040084197649'/><link rel='alternate' type='text/html' href='http://tpproto2.blogspot.com/2009/07/dailf-update-for-july-4th.html' title='Dailf update for July 4th'/><author><name>cherez</name><uri>http://www.blogger.com/profile/11713580471446866995</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3805021752227734860.post-6420017902735788537</id><published>2009-07-04T00:48:00.000-07:00</published><updated>2009-07-04T00:52:53.521-07:00</updated><title type='text'>Daily Update for July 3rd</title><content type='html'>I think descparameters work now. Tomorrow I'll properly test them and work on getting useparameters working.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3805021752227734860-6420017902735788537?l=tpproto2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tpproto2.blogspot.com/feeds/6420017902735788537/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tpproto2.blogspot.com/2009/07/daily-update-for-july-3rd.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3805021752227734860/posts/default/6420017902735788537'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3805021752227734860/posts/default/6420017902735788537'/><link rel='alternate' type='text/html' href='http://tpproto2.blogspot.com/2009/07/daily-update-for-july-3rd.html' title='Daily Update for July 3rd'/><author><name>cherez</name><uri>http://www.blogger.com/profile/11713580471446866995</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3805021752227734860.post-1824171194412530202</id><published>2009-07-03T00:40:00.000-07:00</published><updated>2009-07-03T00:47:01.904-07:00</updated><title type='text'>Daily Update for July 2nd</title><content type='html'>Today's work was on implementing packing packets as I touched on in yesterday's post. As usual, GroupStructure threw me off for a while, but has just been fixed. Tomorrow I'll write the Desc wrappers and tie it all together to make packets all packable.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3805021752227734860-1824171194412530202?l=tpproto2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tpproto2.blogspot.com/feeds/1824171194412530202/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tpproto2.blogspot.com/2009/07/daily-update-for-july-2nd.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3805021752227734860/posts/default/1824171194412530202'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3805021752227734860/posts/default/1824171194412530202'/><link rel='alternate' type='text/html' href='http://tpproto2.blogspot.com/2009/07/daily-update-for-july-2nd.html' title='Daily Update for July 2nd'/><author><name>cherez</name><uri>http://www.blogger.com/profile/11713580471446866995</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3805021752227734860.post-3749127267349684584</id><published>2009-07-01T23:26:00.000-07:00</published><updated>2009-07-02T00:17:42.623-07:00</updated><title type='text'>Daily Update for July 1st</title><content type='html'>The main focus today was how to handle the additional values in a packet's structure from parameters. Packets with use parameters are simple as they can simply be appended. Desc parameters are more difficult because they end up inside lists, giving them a heterogeneous structure. The solution I'm leading toward at present is creating a Structure class that can wrap a List or Group  and which will defer to the wrapped class for most operations, but will provide pack and unpack methods which can handle the heterogeneity this requires. With luck this should be implemented tomorrow.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3805021752227734860-3749127267349684584?l=tpproto2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tpproto2.blogspot.com/feeds/3749127267349684584/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tpproto2.blogspot.com/2009/07/daily-update-for-july-1st.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3805021752227734860/posts/default/3749127267349684584'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3805021752227734860/posts/default/3749127267349684584'/><link rel='alternate' type='text/html' href='http://tpproto2.blogspot.com/2009/07/daily-update-for-july-1st.html' title='Daily Update for July 1st'/><author><name>cherez</name><uri>http://www.blogger.com/profile/11713580471446866995</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3805021752227734860.post-1398021793156744307</id><published>2009-06-30T18:11:00.000-07:00</published><updated>2009-06-30T18:34:03.022-07:00</updated><title type='text'>Weekly update for June 30th</title><content type='html'>&lt;p&gt;The bug with coverage.py has been confirmed. The exact nature of the bug hasn't  been determined, but figleaf appears to be more reliable and will be  the source of coverage reports from here on.&lt;/p&gt;&lt;p&gt;Parser is nearly finished now.  All that remains is to get the logic in-line with the message protocol, which should not take more than a few days.  Once this is complete work on Client/Server/common will begin; for real this time.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3805021752227734860-1398021793156744307?l=tpproto2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tpproto2.blogspot.com/feeds/1398021793156744307/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tpproto2.blogspot.com/2009/06/weekly-update-for-june-30th.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3805021752227734860/posts/default/1398021793156744307'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3805021752227734860/posts/default/1398021793156744307'/><link rel='alternate' type='text/html' href='http://tpproto2.blogspot.com/2009/06/weekly-update-for-june-30th.html' title='Weekly update for June 30th'/><author><name>cherez</name><uri>http://www.blogger.com/profile/11713580471446866995</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3805021752227734860.post-38418761869689956</id><published>2009-06-25T17:57:00.000-07:00</published><updated>2009-06-25T18:09:32.942-07:00</updated><title type='text'>Daily Update for June 24th</title><content type='html'>Mostly coverage work today. Wrote several XML files for all the verification tests. I'm also suspecting that I've run into a bug with coverage.py because of some strange holes in the reported coverage. Investigation will follow.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3805021752227734860-38418761869689956?l=tpproto2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tpproto2.blogspot.com/feeds/38418761869689956/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tpproto2.blogspot.com/2009/06/daily-update-for-june-24th.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3805021752227734860/posts/default/38418761869689956'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3805021752227734860/posts/default/38418761869689956'/><link rel='alternate' type='text/html' href='http://tpproto2.blogspot.com/2009/06/daily-update-for-june-24th.html' title='Daily Update for June 24th'/><author><name>cherez</name><uri>http://www.blogger.com/profile/11713580471446866995</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3805021752227734860.post-6124110364593853030</id><published>2009-06-23T18:43:00.000-07:00</published><updated>2009-06-23T19:47:55.815-07:00</updated><title type='text'>Weekly update for June 23rd</title><content type='html'>&lt;p&gt;This week most the work was on the DOM parser with a fix of the sorting method or ListProxy.&lt;/p&gt;&lt;p&gt;The parser now has more complete verification and several test files. Parameters are mostly implemented now, but are still lacking some of the semantic logic to tie them together to the packets. This should be remedied in the next few days, followed by work on Client/Server/common.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3805021752227734860-6124110364593853030?l=tpproto2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tpproto2.blogspot.com/feeds/6124110364593853030/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tpproto2.blogspot.com/2009/06/weekly-update-for-june-23rd.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3805021752227734860/posts/default/6124110364593853030'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3805021752227734860/posts/default/6124110364593853030'/><link rel='alternate' type='text/html' href='http://tpproto2.blogspot.com/2009/06/weekly-update-for-june-23rd.html' title='Weekly update for June 23rd'/><author><name>cherez</name><uri>http://www.blogger.com/profile/11713580471446866995</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3805021752227734860.post-7021217541038032514</id><published>2009-06-16T18:39:00.000-07:00</published><updated>2009-06-16T18:51:15.031-07:00</updated><title type='text'>Weekly update for June 16th</title><content type='html'>&lt;p&gt;This week I pulled 100% coverage of structures and 99.5% coverage of xstruct, as well as finishing up the black magic of structures (Group and List.)&lt;/p&gt;&lt;p&gt;I'm on to Parser, where I have unit tests for the parts that I can confirm work (pretty much everything except parameterlists and enumerations.) Being sick the last few days has robbed me of the mental capacity to add the missing functionality to Parser, so I bided time by rewriting Parser in DOM rather than SAX. The DOM parser has enumeration support, but no paramatersets yet.  I am waiting on mithro's approval before I decide whether or not to replace the SAX.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3805021752227734860-7021217541038032514?l=tpproto2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tpproto2.blogspot.com/feeds/7021217541038032514/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tpproto2.blogspot.com/2009/06/weekly-update-for-june-16th.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3805021752227734860/posts/default/7021217541038032514'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3805021752227734860/posts/default/7021217541038032514'/><link rel='alternate' type='text/html' href='http://tpproto2.blogspot.com/2009/06/weekly-update-for-june-16th.html' title='Weekly update for June 16th'/><author><name>cherez</name><uri>http://www.blogger.com/profile/11713580471446866995</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3805021752227734860.post-50883969617654497</id><published>2009-06-14T14:43:00.000-07:00</published><updated>2009-06-14T15:08:48.976-07:00</updated><title type='text'>Work for June 13th</title><content type='html'>Fixed up parser's imports so it runs. It has no support for parametersets, though. I also discovered that protocol.xml was buggy and grabbed a new version from the documents repository. Also found a couple instances of eval() to get members of modules. Replaced them with getattr.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3805021752227734860-50883969617654497?l=tpproto2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tpproto2.blogspot.com/feeds/50883969617654497/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tpproto2.blogspot.com/2009/06/work-for-june-13th.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3805021752227734860/posts/default/50883969617654497'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3805021752227734860/posts/default/50883969617654497'/><link rel='alternate' type='text/html' href='http://tpproto2.blogspot.com/2009/06/work-for-june-13th.html' title='Work for June 13th'/><author><name>cherez</name><uri>http://www.blogger.com/profile/11713580471446866995</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3805021752227734860.post-4692044631537867827</id><published>2009-06-11T22:16:00.000-07:00</published><updated>2009-06-11T22:21:45.433-07:00</updated><title type='text'>Work for June 11th</title><content type='html'>&lt;p&gt;I think ListProxy now supports every list operation (I know I'm going to be shown wrong soon). Structures now has 100% test coverage, and xstruct has just 1 uncovered line related to traceback formatting.&lt;/p&gt;&lt;p&gt;Tomorrow I should be starting on parser.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3805021752227734860-4692044631537867827?l=tpproto2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tpproto2.blogspot.com/feeds/4692044631537867827/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tpproto2.blogspot.com/2009/06/work-for-june-11th.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3805021752227734860/posts/default/4692044631537867827'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3805021752227734860/posts/default/4692044631537867827'/><link rel='alternate' type='text/html' href='http://tpproto2.blogspot.com/2009/06/work-for-june-11th.html' title='Work for June 11th'/><author><name>cherez</name><uri>http://www.blogger.com/profile/11713580471446866995</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3805021752227734860.post-2468693800501239900</id><published>2009-06-10T16:33:00.000-07:00</published><updated>2009-06-10T19:45:06.730-07:00</updated><title type='text'>Work for June 10th</title><content type='html'>&lt;p&gt;Most of today's work consisted of looking at segments of xstruct and structures that the unit tests haven't touched and finding a way to get them covered.&lt;/p&gt;&lt;p&gt;xstruct is now down to six uncovered lines, and structures down to 4, for an aggregate 98% coverage. Said lines are either very difficult/impossible to hit or of questionable utility, so I will seek mthiro's wisdom before proceeding.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3805021752227734860-2468693800501239900?l=tpproto2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tpproto2.blogspot.com/feeds/2468693800501239900/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tpproto2.blogspot.com/2009/06/work-for-june-10th.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3805021752227734860/posts/default/2468693800501239900'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3805021752227734860/posts/default/2468693800501239900'/><link rel='alternate' type='text/html' href='http://tpproto2.blogspot.com/2009/06/work-for-june-10th.html' title='Work for June 10th'/><author><name>cherez</name><uri>http://www.blogger.com/profile/11713580471446866995</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3805021752227734860.post-5549686606575085154</id><published>2009-06-09T18:02:00.000-07:00</published><updated>2009-06-09T20:03:57.849-07:00</updated><title type='text'>How structures works</title><content type='html'>&lt;p&gt;&lt;span&gt;structures contains much more deep magic than I was expecting when I started on it.  For the benefit of anyone who might be working on it later, or the curious, I will try to explain&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;span style="font-size:180%;"&gt;Basics&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;span style="font-size:100%;"&gt;The structure classes all implement type-safe wrappers for data types. What this means for you is if your object has a &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;StringStructure&lt;/span&gt; member, then  you can pretty much treat it just like a string. You can plug it in wherever you would need a string and you can set it to any string value. The difference is if you try to set it to a non-string value an exception will be thrown. In &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;libtpproto&lt;/span&gt;2-&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;py&lt;/span&gt; this is used to catch wrong values for types as soon as possible rather than when we attempt to send them over the protocol.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;span style="font-size:180%;"&gt;How It Works&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;To achieve these properties we essentially have to change how Python acts when a Structure is get or set on an instance of a class. Fortunately for us, Python provides tools for doing just this. The Structure classes all override the __get__ and __set__ methods. These methods are called when a member of a class is read from or written to respectively.  Each Structure stores a special variable in the class that contains the value it is storing. So, if have a &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;StringStructure&lt;/span&gt; named "string" in an object A" and write to it, it first checks that the new value is a legal string. If this value is legal it stores it in A.__string. Likewise, when A.string is accessed, it actually returns A.__string.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;span style="font-size:180%;"&gt;Group and List&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;The above method works great for integers, times, and strings. This is because they may directly into an immutable Python type.  Group, however acts more like an object, having mutable members, and List acts like a list of groups.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;Suppose , for instance, an object A has a group g with a string s, and g returns a regular object with its members then:&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;A.g.s = "string"&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;Would modify s in the returned object, but this would not be reflected in A. Thus these mutable types need to return a more sophisticated object. We call this a Proxy.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;span style="font-size:180%;"&gt;Groups and their Proxies&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;A &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;GroupProxy&lt;/span&gt; is created with awareness of what object it is a member of and what &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_5"&gt;GroupStructure&lt;/span&gt; it proxies. It overrides __&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_6"&gt;getattr&lt;/span&gt;__ and __&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_7"&gt;setattr&lt;/span&gt;__ methods. These methods function like __get__ and __set__, but they belong to the parent object rather than the accessed child. These are overloaded to find the corresponding Structures within its Group.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;Because it is relatively easy with Groups for Structures at different levels to share a name, we use a more complex naming scheme. In the example before A.g.s stores its values in A.__g_s rather than A.__s. This, combined with each Group ensuring that no two members share a name, means any Group is guaranteed to have unique qualifiers for every child.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;The way Group achieves this is whenever it receives a name, for every child: it takes its own name, append an underscore, then adds the child's &lt;em&gt;original&lt;/em&gt; name (stored as id in all Structures), and sets that as the child's new name. Notice that if any children are Groups this will propagate all the way down.  This is important since the children will exist before the parent, since they are passed to the parent's constructor. It's also important to use the child's original name or g.g.s's name will be "s", then &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_8"&gt;prepend&lt;/span&gt; "g_" for "g_s", then &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_9"&gt;prepend&lt;/span&gt; "g_g_" for "g_g_g_s".&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;span style="font-size:180%;"&gt;Lists and their Proxies&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;span style="font-size:100%;"&gt;Naming threatened to get even trickier with lists. Suppose We have a list, A.l where every element of the list is a string. Using groups method, a list of strings would all want to store their special data somewhere like A.__l_s, which would mean they would all end up with the same value. Rather than try to work the index into the name as well (and force some name propagation nightmares) Everything is stored under A.__l. A.__l is a list of objects which have only one member: a &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_10"&gt;GroupStructure&lt;/span&gt; named "group".  The &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_11"&gt;GroupStructure&lt;/span&gt; will contain whatever is stored in the list.  Everything in Group i will be stored in A.__l[i] and not have to worry about stepping on &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_12"&gt;anyone's&lt;/span&gt; toes.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;span style="font-size:100%;"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_13"&gt;ListProxies&lt;/span&gt; try to act as much like Python lists as possible. Rather than overriding __&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_14"&gt;getattr&lt;/span&gt;__ and __&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_15"&gt;setattr&lt;/span&gt;__ they override __&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_16"&gt;getitem&lt;/span&gt;__ and __&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_17"&gt;setitem&lt;/span&gt;__, which behave equivalently with indexing items in a list. Thus, when &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_18"&gt;ListProxy&lt;/span&gt;.__&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_19"&gt;getitem&lt;/span&gt;__(i) is called, it returns A.__l[i].group. This means it returns a &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_20"&gt;GroupProxy&lt;/span&gt;, and can then access the members of the list following the rules set in &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_21"&gt;GroupProxy&lt;/span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;span style="font-size:180%;"&gt;Shortcomings&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;span style="font-size:100%;"&gt;This method does its job well enough, essentially pushing strict typing on a loosely typed language without muddling the syntax, but it's not perfect. The biggest fault I can find with it right now is underscores in names can cause havoc. A structure named "&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_22"&gt;getattr&lt;/span&gt;__" will overwrite its parent object's __&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_23"&gt;getattr&lt;/span&gt;__ method and cause an exception to throw any time a member of the parent is read. Likewise clever usage of underscores could cause an object to share a qualifier with the child of  a group at its level. The answer for this within my project is that Thousand Parsec's protocol isn't trying to destroy its applications, so this shouldn't come up. This is not a good answer, however. More practical solutions could mean restricting underscores from structure names, or finding somewhere else to store the data. For now I'll leave that for future generations to ponder.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3805021752227734860-5549686606575085154?l=tpproto2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tpproto2.blogspot.com/feeds/5549686606575085154/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tpproto2.blogspot.com/2009/06/how-structures-works.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3805021752227734860/posts/default/5549686606575085154'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3805021752227734860/posts/default/5549686606575085154'/><link rel='alternate' type='text/html' href='http://tpproto2.blogspot.com/2009/06/how-structures-works.html' title='How structures works'/><author><name>cherez</name><uri>http://www.blogger.com/profile/11713580471446866995</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3805021752227734860.post-3313172291923161358</id><published>2009-06-09T17:54:00.000-07:00</published><updated>2009-06-09T18:02:51.097-07:00</updated><title type='text'>Plans for June 16th</title><content type='html'>Now that the  foundational modules are well tested I'll be digging into the meatier parts of the project. For the next week I'll be working on the parser module, which reads protocol.xml and generates protocol information; essentially generating the protocol API at run time.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3805021752227734860-3313172291923161358?l=tpproto2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tpproto2.blogspot.com/feeds/3313172291923161358/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tpproto2.blogspot.com/2009/06/plans-for-june-16th.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3805021752227734860/posts/default/3313172291923161358'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3805021752227734860/posts/default/3313172291923161358'/><link rel='alternate' type='text/html' href='http://tpproto2.blogspot.com/2009/06/plans-for-june-16th.html' title='Plans for June 16th'/><author><name>cherez</name><uri>http://www.blogger.com/profile/11713580471446866995</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3805021752227734860.post-2374177250671821112</id><published>2009-06-09T17:43:00.000-07:00</published><updated>2009-06-09T17:54:10.369-07:00</updated><title type='text'>Update for June 9th</title><content type='html'>&lt;p&gt;Work on the structures package has been mostly completed now.  The unit tests all check out and cover most of the code (about 70-80% by my estimates). I will be expanding that coverage as the project continues.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3805021752227734860-2374177250671821112?l=tpproto2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tpproto2.blogspot.com/feeds/2374177250671821112/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tpproto2.blogspot.com/2009/06/update-for-june-9th.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3805021752227734860/posts/default/2374177250671821112'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3805021752227734860/posts/default/2374177250671821112'/><link rel='alternate' type='text/html' href='http://tpproto2.blogspot.com/2009/06/update-for-june-9th.html' title='Update for June 9th'/><author><name>cherez</name><uri>http://www.blogger.com/profile/11713580471446866995</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3805021752227734860.post-3548662212717520137</id><published>2009-06-02T18:05:00.000-07:00</published><updated>2009-06-02T18:13:36.484-07:00</updated><title type='text'>Plans for June 9th</title><content type='html'>&lt;p&gt;Now that the  &lt;em&gt;xstruct&lt;/em&gt; module is "done" (as much so as can be said of any code 2 weeks into a project), following Mithro's suggestion I'll be working on the &lt;em&gt;structures&lt;/em&gt; module. This is something of a higher-level wrapper for xstruct. It should also be the level at which the data transmitted with the protocol will be defined at.&lt;/p&gt;&lt;p&gt;I expect this will be similar work to what I did for xstruct. Most the functionality is already there, so I'll be focusing on rigorous unit testing and fix any broken or missing functionality I find while testing.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3805021752227734860-3548662212717520137?l=tpproto2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tpproto2.blogspot.com/feeds/3548662212717520137/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tpproto2.blogspot.com/2009/06/plans-for-june-9th.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3805021752227734860/posts/default/3548662212717520137'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3805021752227734860/posts/default/3548662212717520137'/><link rel='alternate' type='text/html' href='http://tpproto2.blogspot.com/2009/06/plans-for-june-9th.html' title='Plans for June 9th'/><author><name>cherez</name><uri>http://www.blogger.com/profile/11713580471446866995</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3805021752227734860.post-5742317344781071527</id><published>2009-06-02T17:30:00.000-07:00</published><updated>2009-06-02T18:04:42.782-07:00</updated><title type='text'>Update for June 2nd</title><content type='html'>&lt;p&gt;This week I worked on the xstruct module. I wrote unit tests for pack and unpack that:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Ensured all types in the documentation could be packed and unpacked to get the original value.&lt;/li&gt;&lt;li&gt;Ensured pack generated the expected string from a tuple, and unpack generated the expected tuple from a string.&lt;/li&gt;&lt;li&gt;Ensured  an exception was thrown for type mismatches.&lt;/li&gt;&lt;li&gt;Ensured an exception was thrown when an integer did not fit within its type.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;In doing this, I corrected bugs that disallowed the 'c', 'f', and 'd' (single ASCII character, float, and double) types from being used. I also added bounds checking for all the integer types, as previously the module only checked that unsigned types did not have negative values.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3805021752227734860-5742317344781071527?l=tpproto2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tpproto2.blogspot.com/feeds/5742317344781071527/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tpproto2.blogspot.com/2009/06/update-for-june-2nd.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3805021752227734860/posts/default/5742317344781071527'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3805021752227734860/posts/default/5742317344781071527'/><link rel='alternate' type='text/html' href='http://tpproto2.blogspot.com/2009/06/update-for-june-2nd.html' title='Update for June 2nd'/><author><name>cherez</name><uri>http://www.blogger.com/profile/11713580471446866995</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3805021752227734860.post-7453374956242101669</id><published>2009-05-26T18:33:00.000-07:00</published><updated>2009-05-28T00:06:06.911-07:00</updated><title type='text'>Purpose</title><content type='html'>&lt;p&gt;This blog is for my Summer of Code project. I'll be working for &lt;a href="http://thousandparsec.net/"&gt;Thousand Parsec&lt;/a&gt; on libtpproto2-py. That is, the 2nd Python library implementating the Thousand Parsec protocol. I'm writing this in a blog for several reasons:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;To keep my mentor and anyone else who might be following my project as up to date as possible.&lt;/li&gt;&lt;li&gt;To force myself to know what it is I'm doing at every point.&lt;/li&gt;&lt;li&gt;To illucidate any future developers of any design decisions I'll have to make.&lt;/li&gt;&lt;li&gt;To give any curious readers an idea of what GSoC is really like.&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;I'll be posting any pertinent thought to those subjects here.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3805021752227734860-7453374956242101669?l=tpproto2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tpproto2.blogspot.com/feeds/7453374956242101669/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tpproto2.blogspot.com/2009/05/purpose.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3805021752227734860/posts/default/7453374956242101669'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3805021752227734860/posts/default/7453374956242101669'/><link rel='alternate' type='text/html' href='http://tpproto2.blogspot.com/2009/05/purpose.html' title='Purpose'/><author><name>cherez</name><uri>http://www.blogger.com/profile/11713580471446866995</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
