<?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-937156188585270009</id><updated>2012-02-16T03:35:14.586-08:00</updated><category term='gsoc 2008 promotion flyer saturos google summer of code'/><title type='text'>Tanks for the Code</title><subtitle type='html'>Musings and grumbles
from the BZFlag
Summer of Code Mentors.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://tanks4code.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/937156188585270009/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://tanks4code.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>JeffM2501</name><uri>http://www.blogger.com/profile/03904226290405736334</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://3.bp.blogspot.com/_rqhhi665igo/SvHvK43kbPI/AAAAAAAAAko/3g5EhszA4NQ/S220/Kyle_Onasi.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>9</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-937156188585270009.post-9157009485227867192</id><published>2008-07-09T10:23:00.000-07:00</published><updated>2008-07-09T11:13:21.585-07:00</updated><title type='text'>C-style callbacks in C++ code</title><content type='html'>There have been a few questions about how to use BZFlag's callback pattern.  We don't typically use either C++-style template callbacks or functors; we use C-style callbacks in C++ code.  It's not an unusual pattern, so I thought I'd lay out how it works here so our SoC students and others can benefit.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Anatomy of a Callback&lt;/span&gt;&lt;br /&gt;There are three major components on each side of a callback system:&lt;br /&gt;&lt;br /&gt;On the callback ("user") side:&lt;br /&gt;1. Registering function - this function (usually a constructor or initializer) is responsible for registering a callback.  It calls the Registration Function, usually providing a pointer to a static member function of the same class with the callback prototype, and passing the 'this' pointer as the user data.  There may be an accompanying deregistering function (for instance, an object's destructor) if the calling side has a deregistration function.&lt;br /&gt;&lt;br /&gt;2. Primary callback function - this function is almost always a static member function.  Its prototype matches the callback prototype provided by the calling side.  If you passed 'this' as the user data when registering, you'll get the same pointer (i.e. an instance pointer to your class) in the void* user data when this callback is called.&lt;br /&gt;&lt;br /&gt;3. Local callback function - since the primary callback function is static, there's frequently an instanced local callback function, invoked by the primary callback function - for instance, ((MyType*)data)-&gt;localCallbackHandler(...).  This makes the code easier to follow and avoids access-specifier issues.&lt;br /&gt;&lt;br /&gt;On the calling ("library") side:&lt;br /&gt;1. Registration function - this function allows the user to register his desired callback.  It stores the function pointer and user data in a table for lookup later.  It is usually accompanied by a deregistration function to avoid crashing when the user data is dealloc'ed.&lt;br /&gt;&lt;br /&gt;2. Callback prototype - this is a function prototype defined by a typedef that specifies how the callback function should look (parameters and return value).  Minimally it includes the user data pointer (as a void*).&lt;br /&gt;&lt;br /&gt;3. Calling function - this function iterates through the callback table and calls each one with its appropriate user data, plus any other data the calling side wishes to pass to the callback.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;I've been told I need to use a callback - how do I?&lt;/span&gt;&lt;br /&gt;First, familiarize yourself with the calling ("library") side.  Find the callback prototype and find out what the calling function(s) are - this will tell you what data you have access to, and when the callback will be triggered.  Also locate the registration and deregistration functions.&lt;br /&gt;&lt;br /&gt;Second, add registration code to the object that you want to receive the callback.  This will usually involve a call to the registration function in your constructor and the deregistration function in your destructor, though you may choose to put them elsewhere if your design calls for it.&lt;br /&gt;&lt;br /&gt;Third, write your callback function.  Follow the prototype you found earlier.  Generally this will need to be a static member function.  You may be able to do all your logic directly in the primary callback function, but usually you will need a local (instanced) callback also.  In some cases you may want all your logic in the local callback, so all you'll need to do is cast the user data to your class type, and call its local callback member.&lt;br /&gt;&lt;br /&gt;Example (the "user" side is at the end):&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;// this is the "additional information" we're going to&lt;br /&gt;// pass back to our callback&lt;br /&gt;typedef struct&lt;br /&gt;{&lt;br /&gt;  // stuff&lt;br /&gt;} callbackInfo;&lt;br /&gt;&lt;br /&gt;// this is the callback prototype&lt;br /&gt;typedef void (*cbfunc)(const callbackInfo*, void*);&lt;br /&gt;&lt;br /&gt;// this is the "calling side" (library) class&lt;br /&gt;class Calling&lt;br /&gt;{&lt;br /&gt;public:&lt;br /&gt;  // add a callback to the table&lt;br /&gt;  void registerCB(cbfunc function, void* data)&lt;br /&gt;  {&lt;br /&gt;    callbacks.push_back(&lt;br /&gt;      std::make_pair&amp;lt;cbfunc,void*&amp;gt;(function, data));&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  // remove a callback from the table&lt;br /&gt;  void deregisterCB(cbfunc function, void* data)&lt;br /&gt;  {&lt;br /&gt;    // left as an excercise for the reader&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  // this is the function that actually calls the callback&lt;br /&gt;  void trigger(void)&lt;br /&gt;  {&lt;br /&gt;    callbackInfo cbi; // fill this as appropriate&lt;br /&gt;    for (std::list&amp;lt;std::pair&amp;lt;cbfunc,void*&amp;gt; &amp;gt;::iterator&lt;br /&gt;         itr = callbacks.begin();&lt;br /&gt;         itr != callbacks.end(); ++itr)&lt;br /&gt;    {&lt;br /&gt;      (*itr).first(&amp;amp;cbi, (*itr).second);&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;private:&lt;br /&gt;  // callback table&lt;br /&gt;  std::list&amp;lt;std::pair&amp;lt;cbfunc,void*&amp;gt; &amp;gt; callbacks;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;// we need an instance of the library class&lt;br /&gt;Calling globalCaller;&lt;br /&gt;&lt;br /&gt;// this is the "callback side" (user) class&lt;br /&gt;class CallMe&lt;br /&gt;{&lt;br /&gt;public:&lt;br /&gt;  CallMe()&lt;br /&gt;  {&lt;br /&gt;    globalCaller.registerCB(&amp;amp;myCallback, this);&lt;br /&gt;  }&lt;br /&gt;  ~CallMe()&lt;br /&gt;  {&lt;br /&gt;    globalCaller.deregisterCB(&amp;amp;myCallback, this);&lt;br /&gt;  }&lt;br /&gt;  static void myCallback(const callbackInfo* info, void* userData)&lt;br /&gt;  {&lt;br /&gt;    if (!userData) return;&lt;br /&gt;    ((CallMe*)userData)-&amp;gt;localCallback(info);&lt;br /&gt;  }&lt;br /&gt;  void localCallback(const callbackInfo* info)&lt;br /&gt;  {&lt;br /&gt;    // do stuff&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/937156188585270009-9157009485227867192?l=tanks4code.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tanks4code.blogspot.com/feeds/9157009485227867192/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=937156188585270009&amp;postID=9157009485227867192' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/937156188585270009/posts/default/9157009485227867192'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/937156188585270009/posts/default/9157009485227867192'/><link rel='alternate' type='text/html' href='http://tanks4code.blogspot.com/2008/07/c-style-callbacks-in-c-code.html' title='C-style callbacks in C++ code'/><author><name>DTRemenak</name><uri>http://www.blogger.com/profile/17236284660809371389</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-937156188585270009.post-5061777894037509805</id><published>2008-05-30T11:21:00.001-07:00</published><updated>2008-05-30T11:31:40.968-07:00</updated><title type='text'>Commits</title><content type='html'>I'm happy to see the first sets of commits coming in from our SoC students this year, and I just wanted to take a moment to remind everyone of two things:&lt;br /&gt;&lt;br /&gt;1. &lt;span style="font-weight: bold;"&gt;Commit early, commit often. &lt;/span&gt; You should be committing once per (working) day, minimum; more often is better.  Use the source control tools to your advantage.  If it builds, check it in, with appropriate comments.  It's just like making sure you hit the save button every once in a while, but better...you can always go back to older versions.  Nobody is going to criticize you for committing a work-in-progress (and you might get some good ideas from people who review commits as they come in).&lt;br /&gt;&lt;br /&gt;2. &lt;span style="font-weight: bold;"&gt;If it hasn't been committed, it doesn't exist.&lt;/span&gt;  If you want to talk to someone about your code, it's best and easiest if it's in the repository.  Likewise, if your mentor is evaluating your status, they're not going to go off of what may or may not be on your hard drive, they're going to go off of what they have access to.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/937156188585270009-5061777894037509805?l=tanks4code.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tanks4code.blogspot.com/feeds/5061777894037509805/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=937156188585270009&amp;postID=5061777894037509805' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/937156188585270009/posts/default/5061777894037509805'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/937156188585270009/posts/default/5061777894037509805'/><link rel='alternate' type='text/html' href='http://tanks4code.blogspot.com/2008/05/commits.html' title='Commits'/><author><name>DTRemenak</name><uri>http://www.blogger.com/profile/17236284660809371389</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-937156188585270009.post-8013420257276680816</id><published>2008-04-21T17:23:00.000-07:00</published><updated>2008-04-23T17:34:54.086-07:00</updated><title type='text'>The envelope please</title><content type='html'>Well, the deadline has come and gone and the students who will be participating in the summer of code for BZFlag have been chosen.&lt;br /&gt;&lt;!-- Break --&gt;&lt;br /&gt;Congratulations to;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;David Sanders&lt;/span&gt; (&lt;span style="font-style: italic;"&gt;KingofCamelot&lt;/span&gt;)&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Istvan Szakats&lt;/span&gt; (&lt;span style="font-style: italic;"&gt;Wyk3d&lt;/span&gt;)&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Joshua Bodine&lt;/span&gt; (&lt;span style="font-style: italic;"&gt;Constitution&lt;/span&gt;)&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Luke Rewega&lt;/span&gt; (&lt;span style="font-style: italic;"&gt;Lukstr&lt;/span&gt;)&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Kornel Kisielewicz&lt;/span&gt; (&lt;span style=""&gt;Epyon&lt;/span&gt;)&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Harrison Reiser&lt;/span&gt; (&lt;span style="font-style: italic;"&gt;bugQ&lt;/span&gt;)&lt;br /&gt;&lt;br /&gt;We were very surprised to be given 6 slots for the project, as overall application counts were down. We would like to thank Google for this great opportunity and want to wish SoC students from all proejcts luck in the coming months.&lt;br /&gt;&lt;br /&gt;We had a number of very good applications and are very sorry for those that did not make it this year. We do expect every single one of you to hang around and apply next year :).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/937156188585270009-8013420257276680816?l=tanks4code.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tanks4code.blogspot.com/feeds/8013420257276680816/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=937156188585270009&amp;postID=8013420257276680816' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/937156188585270009/posts/default/8013420257276680816'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/937156188585270009/posts/default/8013420257276680816'/><link rel='alternate' type='text/html' href='http://tanks4code.blogspot.com/2008/04/envelope-please.html' title='The envelope please'/><author><name>JeffM2501</name><uri>http://www.blogger.com/profile/03904226290405736334</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://3.bp.blogspot.com/_rqhhi665igo/SvHvK43kbPI/AAAAAAAAAko/3g5EhszA4NQ/S220/Kyle_Onasi.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-937156188585270009.post-2442835580489739987</id><published>2008-03-20T14:33:00.000-07:00</published><updated>2008-03-27T15:11:29.916-07:00</updated><title type='text'>T-Shirt Progress</title><content type='html'>People have asked what we did with the money from the summer of code last year. Well... we are using it to print up some BZFlag T-shirts.&lt;br&gt;&lt;br&gt;&lt;br /&gt;&lt;img src="http://store.bzflag.bz/images/Anvil_980_smoke.png"&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;They are being printed now and will be sold on the &lt;a href="http://store.bzflag.org"&gt;BZFlag Online Store&lt;/a&gt; when they are ready.&lt;br /&gt;&lt;br&gt;&lt;br /&gt;I would like to thank saturos again for his most excellent design.&lt;br&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://saturos.de/s/satu_shirt.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px;" src="http://saturos.de/s/satu_shirt.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/937156188585270009-2442835580489739987?l=tanks4code.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tanks4code.blogspot.com/feeds/2442835580489739987/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=937156188585270009&amp;postID=2442835580489739987' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/937156188585270009/posts/default/2442835580489739987'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/937156188585270009/posts/default/2442835580489739987'/><link rel='alternate' type='text/html' href='http://tanks4code.blogspot.com/2008/03/t-shirt-progress.html' title='T-Shirt Progress'/><author><name>JeffM2501</name><uri>http://www.blogger.com/profile/03904226290405736334</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://3.bp.blogspot.com/_rqhhi665igo/SvHvK43kbPI/AAAAAAAAAko/3g5EhszA4NQ/S220/Kyle_Onasi.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-937156188585270009.post-7551710242657462279</id><published>2008-03-17T14:30:00.000-07:00</published><updated>2008-03-17T15:36:39.975-07:00</updated><title type='text'>We are In!</title><content type='html'>BZFlag has is proud to have been officially accepted as a mentoring organization for the Google Summer of code program. We look forward to working with both the students and other mentoring organizations.&lt;br /&gt;&lt;br /&gt;Students wishing to participate should look at our SoC2008 wiki page, specifically the &lt;a href="http://my.bzflag.org/w/Google_Summer_of_Code/2008#Proposal_Ideas"&gt;Ideas Page&lt;/a&gt;. They should also be sure to read the &lt;a href="http://code.google.com/opensource/gsoc/2008/faqs.html"&gt; Program FAQ&lt;/a&gt; that has been provided by Google.&lt;br /&gt;&lt;br /&gt;Good luck to everyone.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/937156188585270009-7551710242657462279?l=tanks4code.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tanks4code.blogspot.com/feeds/7551710242657462279/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=937156188585270009&amp;postID=7551710242657462279' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/937156188585270009/posts/default/7551710242657462279'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/937156188585270009/posts/default/7551710242657462279'/><link rel='alternate' type='text/html' href='http://tanks4code.blogspot.com/2008/03/we-are-in.html' title='We are In!'/><author><name>JeffM2501</name><uri>http://www.blogger.com/profile/03904226290405736334</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://3.bp.blogspot.com/_rqhhi665igo/SvHvK43kbPI/AAAAAAAAAko/3g5EhszA4NQ/S220/Kyle_Onasi.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-937156188585270009.post-4960828666329963698</id><published>2008-03-10T00:44:00.000-07:00</published><updated>2008-03-10T00:54:18.422-07:00</updated><title type='text'>Application Guidelines</title><content type='html'>I've prepared a list of submission guidelines for applicants that should hopefully improve the quality of applications we receive this year.  The guidelines are pretty applicable to all projects but hopefully give a better starting point than we gave last year since we (intentionally) don't use an application template.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The application guidelines are available here: &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://my.bzflag.org/w/Google_Summer_of_Code/Application_Guidelines"&gt;http://my.bzflag.org/w/Google_Summer_of_Code/Application_Guidelines&lt;/a&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/937156188585270009-4960828666329963698?l=tanks4code.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://my.bzflag.org/w/Google_Summer_of_Code/Application_Guidelines' title='Application Guidelines'/><link rel='replies' type='application/atom+xml' href='http://tanks4code.blogspot.com/feeds/4960828666329963698/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=937156188585270009&amp;postID=4960828666329963698' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/937156188585270009/posts/default/4960828666329963698'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/937156188585270009/posts/default/4960828666329963698'/><link rel='alternate' type='text/html' href='http://tanks4code.blogspot.com/2008/03/application-guidelines.html' title='Application Guidelines'/><author><name>brlcad</name><uri>http://www.blogger.com/profile/17957856891871525651</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-937156188585270009.post-4096873514789504085</id><published>2008-03-02T19:20:00.000-08:00</published><updated>2008-03-12T14:48:44.158-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gsoc 2008 promotion flyer saturos google summer of code'/><title type='text'>2008 Google Summer of Code promotional flyers</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://my.bzflag.org/wiki/images/6/66/BZGSoC2008_small.gif"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px;" src="http://my.bzflag.org/wiki/images/6/66/BZGSoC2008_small.gif" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;In order to get the word out again regarding our (anticipated) participation in the 2008 Google Summer of Code again like last year, there is a really awesome promotional flyer available thanks to our very own Saturos graphic artist extraordinaire:&lt;div&gt;&lt;br /&gt;&lt;a href="http://my.bzflag.org/w/Google_Summer_of_Code/2008#Promotion_Flyers"&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;&lt;span class="Apple-style-span"  style="font-size:large;"&gt;http://my.bzflag.org/w/Google_Summer_of_Code/2008#Promotion_Flyers&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;More details to be posted later (presuming we are accepted), but feel free to post the flyer around local universities and colleges in the meantime.  There are translations presently available in German and Spanish thanks to whodaman and Manu respectively, and be sure to thank Saturos for the great design if you see him around!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/937156188585270009-4096873514789504085?l=tanks4code.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://my.bzflag.org/w/Google_Summer_of_Code/2008#Promotion_Flyers' title='2008 Google Summer of Code promotional flyers'/><link rel='replies' type='application/atom+xml' href='http://tanks4code.blogspot.com/feeds/4096873514789504085/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=937156188585270009&amp;postID=4096873514789504085' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/937156188585270009/posts/default/4096873514789504085'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/937156188585270009/posts/default/4096873514789504085'/><link rel='alternate' type='text/html' href='http://tanks4code.blogspot.com/2008/03/2008-google-summer-of-code-promotional.html' title='2008 Google Summer of Code promotional flyers'/><author><name>brlcad</name><uri>http://www.blogger.com/profile/17957856891871525651</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-937156188585270009.post-5903090115485716067</id><published>2008-02-26T23:56:00.000-08:00</published><updated>2008-02-27T00:00:59.874-08:00</updated><title type='text'>Shirt logos</title><content type='html'>So we are looking for designs for some T-Shirts we are thinking of having printed up.&lt;br /&gt;&lt;br /&gt;Here is my my first shot(s).&lt;br /&gt;&lt;br /&gt;2 color design on green.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.opencombat.net/files/images/green_shirt_2_Color.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px;" src="http://www.opencombat.net/files/images/green_shirt_2_Color.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;4 color design on dingy brown.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.opencombat.net/files/images/brown_shirt_4_color.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px;" src="http://www.opencombat.net/files/images/brown_shirt_4_color.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;even if we don't use them, I did take the time to redo the tank model for the images :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/937156188585270009-5903090115485716067?l=tanks4code.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tanks4code.blogspot.com/feeds/5903090115485716067/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=937156188585270009&amp;postID=5903090115485716067' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/937156188585270009/posts/default/5903090115485716067'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/937156188585270009/posts/default/5903090115485716067'/><link rel='alternate' type='text/html' href='http://tanks4code.blogspot.com/2008/02/shirt-logos.html' title='Shirt logos'/><author><name>JeffM2501</name><uri>http://www.blogger.com/profile/03904226290405736334</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://3.bp.blogspot.com/_rqhhi665igo/SvHvK43kbPI/AAAAAAAAAko/3g5EhszA4NQ/S220/Kyle_Onasi.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-937156188585270009.post-8599388132720747225</id><published>2008-02-25T19:45:00.000-08:00</published><updated>2008-02-25T21:44:58.342-08:00</updated><title type='text'>How to be a successful mentor org.</title><content type='html'>Lest my inbox be lying to me, &lt;a href="http://googlesummerofcode.blogspot.com/2008/02/sounds-like-summer.html"&gt; Summer of code 2008 is &lt;span style="font-weight:bold;"&gt;ON&lt;/span&gt;&lt;/a&gt;.Ok, will be on, probably.&lt;br /&gt;&lt;br /&gt;Since &lt;a href="http://bzflag.org"&gt;BZFlag&lt;/a&gt; has full intent to apply as a mentoring org. again this year, we thought it would be appropriate to share some tips and pointers to some of the newer participants.&lt;br /&gt;&lt;br /&gt;&lt;UL&gt;&lt;br /&gt;&lt;LI&gt;Be nice to the Google staff. Under no circumstances should you address them using slang terms for reproductive organs. It does not work. Trust us on this.&lt;br /&gt;&lt;LI&gt;Provide as many sample ideas as you can for your students. &lt;a href="http://my.bzflag.org/w/Google_Summer_of_Code/2007#Proposal_Ideas"&gt;Wikis are awesome for this.&lt;/a&gt;&lt;br /&gt;&lt;LI&gt;Be the FIRST org to return with beer and spirits at the mentor summit party. We personally believe this is a key factor.&lt;br /&gt;&lt;LI&gt;Don't bag on the web apps Google provides. We meet the web guy and he's seriously busting his ass to do what he can.&lt;br /&gt;&lt;LI&gt;Promote your project to hell and back. Perhaps con, umm I mean persuade people to slather &lt;a href="http://my.bzflag.org/w/Google_Summer_of_Code/2007#Promotion_Flyers"&gt;a bitchen poster all over college campuses&lt;/a&gt;. Remember the students pick you, not the other way around.&lt;br /&gt;&lt;LI&gt;Get started dredging your developers for prospective mentors, and get them involved in your planing process. Cattle prods work wonders.&lt;br /&gt;&lt;LI&gt;Read &lt;a href="http://my.bzflag.org/gsoc/bzflag_gsoc2007_post_mortem.pdf"&gt;a sweet looking postmortem&lt;/a&gt; (15 meg PDF, no dead things, I swear) and see where you can go wrong.&lt;br /&gt;&lt;LI&gt;Get your user base ready so it won't scare off any potential students. Chain your trolls, clean up your noobs, polish your topics, and for the love of god people, do not go all freaky when a girl shows up, she's probably smarter then you.&lt;br /&gt;&lt;LI&gt;Register your project with &lt;a href="http://cia.vc/"&gt;CIA&lt;/a&gt; so you can get stats and RSS feeds about your commits. Everyone loves seein' their name scroll by in 10pt, courier.&lt;br /&gt;&lt;LI&gt;Sacrifice your beloved bottle opener to the great Google goods at the aforementioned mentor party. (I'll miss you little buddy... I'm sure your in a better place now, or the pool filter.... oh man...I promised myself I wouldn't cry)&lt;br /&gt;&lt;/UL&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/937156188585270009-8599388132720747225?l=tanks4code.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tanks4code.blogspot.com/feeds/8599388132720747225/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=937156188585270009&amp;postID=8599388132720747225' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/937156188585270009/posts/default/8599388132720747225'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/937156188585270009/posts/default/8599388132720747225'/><link rel='alternate' type='text/html' href='http://tanks4code.blogspot.com/2008/02/how-to-be-successful-mentor-org.html' title='How to be a successful mentor org.'/><author><name>JeffM2501</name><uri>http://www.blogger.com/profile/03904226290405736334</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://3.bp.blogspot.com/_rqhhi665igo/SvHvK43kbPI/AAAAAAAAAko/3g5EhszA4NQ/S220/Kyle_Onasi.jpg'/></author><thr:total>0</thr:total></entry></feed>
