<?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-8104768</id><updated>2011-09-02T16:40:05.574-05:00</updated><title type='text'>www.emilas.com/george</title><subtitle type='html'>&lt;a href="http://emilas.blogspot.com/"&gt;ByLog-PyMe&lt;/a&gt;&lt;br /&gt;&lt;small&gt;Never fight code: it'll always win - Dave Thomas&lt;/small&gt;



</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://emilas.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8104768/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://emilas.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Gheorghe</name><uri>http://www.blogger.com/profile/16345214304445028131</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='26' src='http://www.emilas.com/tutu.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>24</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-8104768.post-113263755001361562</id><published>2005-11-21T23:26:00.000-06:00</published><updated>2005-11-21T23:32:30.023-06:00</updated><title type='text'>this blog has moved</title><content type='html'>I got tired of blogger being so slow altow it now seams faster. Anyway is final, &lt;br /&gt;this blog &lt;a href="http://www.emilas.com/WCatalog/WCatalog/WIndex?type=blog"&gt;has moved&lt;/a&gt; to my website http://www.emilas.com/ where even if spead is only as fast as my DSL at least I have greater flexibility.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8104768-113263755001361562?l=emilas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://emilas.blogspot.com/feeds/113263755001361562/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8104768&amp;postID=113263755001361562' title='11 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8104768/posts/default/113263755001361562'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8104768/posts/default/113263755001361562'/><link rel='alternate' type='text/html' href='http://emilas.blogspot.com/2005/11/this-blog-has-moved.html' title='this blog has moved'/><author><name>Gheorghe</name><uri>http://www.blogger.com/profile/16345214304445028131</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='26' src='http://www.emilas.com/tutu.jpg'/></author><thr:total>11</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8104768.post-111256785800208371</id><published>2005-04-03T17:37:00.000-05:00</published><updated>2005-04-03T17:37:38.003-05:00</updated><title type='text'>No lambda</title><content type='html'>&lt;pre&gt;&lt;br /&gt;class fn:&lt;br /&gt;    def __init__(gen):&lt;br /&gt;        self.gen = gen&lt;br /&gt;    def __call__(*args):&lt;br /&gt;        fn.args = args&lt;br /&gt;        return self.gen.next()&lt;br /&gt;&lt;br /&gt;f = fn(a+b+c for a,b,c in fn.args)&lt;br /&gt;f(2,3,4)        &lt;br /&gt;&lt;br /&gt;f = lambda a,b,c: a+b+c&lt;br /&gt;f(2,3,4)&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/8104768-111256785800208371?l=emilas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://emilas.blogspot.com/feeds/111256785800208371/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8104768&amp;postID=111256785800208371' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8104768/posts/default/111256785800208371'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8104768/posts/default/111256785800208371'/><link rel='alternate' type='text/html' href='http://emilas.blogspot.com/2005/04/no-lambda.html' title='No lambda'/><author><name>Gheorghe</name><uri>http://www.blogger.com/profile/16345214304445028131</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='26' src='http://www.emilas.com/tutu.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8104768.post-110936551084751142</id><published>2005-02-25T15:04:00.000-06:00</published><updated>2005-02-25T15:05:10.846-06:00</updated><title type='text'>SQL Server express</title><content type='html'>Free sql server from microsoft&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8104768-110936551084751142?l=emilas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://lab.msdn.microsoft.com/express/sql/' title='SQL Server express'/><link rel='replies' type='application/atom+xml' href='http://emilas.blogspot.com/feeds/110936551084751142/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8104768&amp;postID=110936551084751142' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8104768/posts/default/110936551084751142'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8104768/posts/default/110936551084751142'/><link rel='alternate' type='text/html' href='http://emilas.blogspot.com/2005/02/sql-server-express.html' title='SQL Server express'/><author><name>Gheorghe</name><uri>http://www.blogger.com/profile/16345214304445028131</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='26' src='http://www.emilas.com/tutu.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8104768.post-110702015177708803</id><published>2005-01-29T11:34:00.000-06:00</published><updated>2005-01-29T11:35:51.776-06:00</updated><title type='text'>free pictures web site</title><content type='html'>http://www.sxc.hu/index.phtml&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8104768-110702015177708803?l=emilas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.sxc.hu/' title='free pictures web site'/><link rel='replies' type='application/atom+xml' href='http://emilas.blogspot.com/feeds/110702015177708803/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8104768&amp;postID=110702015177708803' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8104768/posts/default/110702015177708803'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8104768/posts/default/110702015177708803'/><link rel='alternate' type='text/html' href='http://emilas.blogspot.com/2005/01/free-pictures-web-site.html' title='free pictures web site'/><author><name>Gheorghe</name><uri>http://www.blogger.com/profile/16345214304445028131</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='26' src='http://www.emilas.com/tutu.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8104768.post-110634655297261787</id><published>2005-01-21T16:28:00.000-06:00</published><updated>2005-01-21T16:35:36.236-06:00</updated><title type='text'>def __typecheck__: pass</title><content type='html'>__typecheck__: documentation, support for IDE, catch typo errors&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;I'm tired and sick, your finger is sticking into my eye. My&lt;br /&gt;    head is resting onto my fist. My ears are leaking connections &lt;br /&gt;    and the world is laying flat. Already the clocks are ticking &lt;br /&gt;    destructive demand and opposing is Homeric at best. The literature &lt;br /&gt;    has never been written, yet the breath is full of critical smoke. &lt;br /&gt;    A war is smiling at us.&lt;br /&gt;        It's dark and I'm ready to sleep.&lt;br /&gt;&lt;/pre&gt;       &lt;br /&gt;&lt;br /&gt;- allow a human reader of code to understand better what happens in that code, since programmes can't really right documentation and they must be forced somehow to document their intentions&lt;br /&gt;- this isn't going to be done unless declarations are enforced otherwise is going to remain a mechanism of not writing metadata. Maybe if we are driven into some special mood?&lt;br /&gt;- if we enforce we are OK and flexibility is saved by ignoring any action possibly suggested by declarations&lt;br /&gt;   -rules are broken =&gt; documentation is less useful maybe is van maybe even more dangerous when trust is going to disappear&lt;br /&gt;- what kind of help is this supposed to give to IDE programmers. Generic genuine help? what does it mean? Is this support the end of IDE request, will programmers ever want more tool support? maybe something that is not possible even with the most strict declarations of types and interfaces?&lt;br /&gt;- function signature lookup? (IDE does import, run, dir?) &lt;br /&gt;- type of current variable (use AST and type inference, or run code?)&lt;br /&gt;- are we afraid to build slow solutions? are we afraid to build resource hungry solutions? &lt;br /&gt;- solution first?, optimization later?, hardware support - embrace distance between script and system ? &lt;br /&gt;- gather some IDE developers and discuss how to make it work, even if code will need be run, probably there are ways to get this without declaring intent&lt;br /&gt;- maybe Python must grow an IDE out of it's core as a standard&lt;br /&gt;- maybe Python needs library enhancement more stringently, maybe it needs to reshape old abstractions ?&lt;br /&gt;- maybe building better abstractions is more useful? (are there any? Erlang, distribution, concurrence, network, Mozart)&lt;br /&gt;- are more abstractions just sugar growing into diabetes ?&lt;br /&gt;- gather people from PyChecker those that built type inferencers, those that built just in time compilers, those that built different semantics with similar syntax as python&lt;br /&gt;- discuss implementation possibilities or design choices? &lt;br /&gt;- 666 ?&lt;br /&gt;- more easily said when you can hire people, harder when you can't?&lt;br /&gt;    &lt;br /&gt;- is python good as is, what does it need, why. Why doesn't python have types declarations already, is it demand? is it implementation difficulties, is it design?  - Is there a philosophy? What is it? what is it for?&lt;br /&gt;    &lt;br /&gt;- are this declarations to help programmers? What are the trade offs? how much will it help? how much will it introduce confusion? what are the ramifications? what else will it impact?&lt;br /&gt;    &lt;br /&gt;- who will this make happy? who can use this efficiently? how many? what do the masses need most?&lt;br /&gt;- how does the hardware market look like? where is it moving? are there any trends? is python aware?&lt;br /&gt;- how is the corporate world? where is it moving towards? what does it seek?&lt;br /&gt;- how is the python world? where is it moving towards? what does it seek? &lt;br /&gt;- are there connections? are there too few? too many?&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8104768-110634655297261787?l=emilas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://emilas.blogspot.com/feeds/110634655297261787/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8104768&amp;postID=110634655297261787' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8104768/posts/default/110634655297261787'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8104768/posts/default/110634655297261787'/><link rel='alternate' type='text/html' href='http://emilas.blogspot.com/2005/01/def-typecheck-pass.html' title='def __typecheck__: pass'/><author><name>Gheorghe</name><uri>http://www.blogger.com/profile/16345214304445028131</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='26' src='http://www.emilas.com/tutu.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8104768.post-110071200402260702</id><published>2004-11-17T11:18:00.000-06:00</published><updated>2004-11-17T11:23:09.950-06:00</updated><title type='text'>Boa's _custom_classes</title><content type='html'>Shame on me, if I bodered to read the help I could have long ago start subclasing wx controls "inside Boa GUI builder".&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;class wxFrame1(wxFrame):&lt;br /&gt;    _custom_classes = {'wxTreeCtrl': ['MyTreeCtrl', 'MyOtherTreeCtrl']}&lt;br /&gt;    def _init_utils(self):&lt;br /&gt;        pass&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/8104768-110071200402260702?l=emilas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://emilas.blogspot.com/feeds/110071200402260702/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8104768&amp;postID=110071200402260702' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8104768/posts/default/110071200402260702'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8104768/posts/default/110071200402260702'/><link rel='alternate' type='text/html' href='http://emilas.blogspot.com/2004/11/boas-customclasses.html' title='Boa&apos;s _custom_classes'/><author><name>Gheorghe</name><uri>http://www.blogger.com/profile/16345214304445028131</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='26' src='http://www.emilas.com/tutu.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8104768.post-110070476911059299</id><published>2004-11-17T09:17:00.000-06:00</published><updated>2004-11-17T10:53:57.000-06:00</updated><title type='text'>python static typing  should be protocol adaptation</title><content type='html'>&lt;pre&gt;&lt;br /&gt;&lt;cite&gt;&lt;br /&gt;Glad to hear that.  As for me, I'd love it if function arguments, only,&lt;br /&gt;could bear an 'as' clause (making 'as' a keyword is long overdue):&lt;br /&gt;&lt;br /&gt;def x(y as foo, z as bar):&lt;br /&gt;    body of x&lt;br /&gt;&lt;br /&gt;translating into:&lt;br /&gt;&lt;br /&gt;def x(y, z):&lt;br /&gt;    y = adapt(y, foo)&lt;br /&gt;    z = adapt(z, bar):&lt;br /&gt;    body of x&lt;br /&gt;&lt;br /&gt;where builtin 'adapt' does protocol adaptation.  On the other hand, if&lt;br /&gt;the semantics of those 'as' clauses were something like:&lt;br /&gt;&lt;br /&gt;def x(y, z):&lt;br /&gt;    if type(y) is not foo: raise TypeError, 'y must be foo'&lt;br /&gt;    if type(z) is not bar: raise TypeError, 'z must be bar'&lt;br /&gt;    body of x&lt;br /&gt;&lt;br /&gt;then that's the day I move to Ruby, or any other language that remained&lt;br /&gt;halfway sensible (if any).&lt;br /&gt;&lt;/cite&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Of course adaptation is posible already using decorator functions, or if using PyProtocols someone can also go having all kinds of contracts, the simplest would be function dispatch conditions, like:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;@foo.when(x&gt;10)&lt;br /&gt;def foo(x): &lt;br /&gt;   ...&lt;br /&gt;@foo.when(x&lt;5)&lt;br /&gt;def foo(x): &lt;br /&gt;   ...&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;but anyways I beleave some syntax in the language for stuff like that will make people actualy use them more often.&lt;br /&gt;I beleave there are lots of people in python coming from C, VB, Java like languages,  who have a harder time using them, while others coming from Lisp who had them all since forever will say finaly, oh God what took you so long.&lt;br /&gt;Designing with different conceps it's never going to be easy. To put this in paradoxical terms, nobody never love anything unless they already do.&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8104768-110070476911059299?l=emilas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://groups.google.com/groups?hl=en&amp;lr=&amp;c2coff=1&amp;frame=right&amp;rnum=21&amp;thl=727748354,727731737,727731700,727860183,727808172,727730617,727735570,727605006,727581938,727573335,727524212,727472519&amp;seekm=4198C90C.8080003%40infrae.com#link28' title='python static typing  should be protocol adaptation'/><link rel='replies' type='application/atom+xml' href='http://emilas.blogspot.com/feeds/110070476911059299/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8104768&amp;postID=110070476911059299' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8104768/posts/default/110070476911059299'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8104768/posts/default/110070476911059299'/><link rel='alternate' type='text/html' href='http://emilas.blogspot.com/2004/11/python-static-typing-should-be.html' title='python static typing  should be protocol adaptation'/><author><name>Gheorghe</name><uri>http://www.blogger.com/profile/16345214304445028131</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='26' src='http://www.emilas.com/tutu.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8104768.post-110021386069389198</id><published>2004-11-11T16:55:00.000-06:00</published><updated>2004-11-11T16:58:19.653-06:00</updated><title type='text'>Creepy Polar Express - Uncanny Valley</title><content type='html'>&lt;a href="http://www.arclight.net/~pdb/glimpses/valley.html"&gt;Uncanny Valley&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8104768-110021386069389198?l=emilas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.nedbatchelder.com/blog/200411.html#e20041110T092037' title='Creepy Polar Express - Uncanny Valley'/><link rel='replies' type='application/atom+xml' href='http://emilas.blogspot.com/feeds/110021386069389198/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8104768&amp;postID=110021386069389198' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8104768/posts/default/110021386069389198'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8104768/posts/default/110021386069389198'/><link rel='alternate' type='text/html' href='http://emilas.blogspot.com/2004/11/creepy-polar-express-uncanny-valley_11.html' title='Creepy Polar Express - Uncanny Valley'/><author><name>Gheorghe</name><uri>http://www.blogger.com/profile/16345214304445028131</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='26' src='http://www.emilas.com/tutu.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8104768.post-109997808353970811</id><published>2004-11-08T23:25:00.000-06:00</published><updated>2004-11-08T23:30:13.883-06:00</updated><title type='text'>Lori</title><content type='html'>Loredana Groza on &lt;a href="http://www.photo.net/"&gt;photo.net&lt;/a&gt;?&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.photo.net/photodb/photo?topic_id=1481&amp;msg_id=00A2mx&amp;photo_id=2863768&amp;photo_sel_index=0"&gt;&lt;img src="http://gallery.photo.net/photo/2863768-lg.jpg" width="100"&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8104768-109997808353970811?l=emilas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.photo.net/photodb/photo?topic_id=1481&amp;msg_id=00A2mx&amp;photo_id=2863768&amp;photo_sel_index=0' title='Lori'/><link rel='replies' type='application/atom+xml' href='http://emilas.blogspot.com/feeds/109997808353970811/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8104768&amp;postID=109997808353970811' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8104768/posts/default/109997808353970811'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8104768/posts/default/109997808353970811'/><link rel='alternate' type='text/html' href='http://emilas.blogspot.com/2004/11/lori.html' title='Lori'/><author><name>Gheorghe</name><uri>http://www.blogger.com/profile/16345214304445028131</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='26' src='http://www.emilas.com/tutu.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8104768.post-109994758793072205</id><published>2004-11-08T14:57:00.000-06:00</published><updated>2004-11-08T23:34:59.286-06:00</updated><title type='text'>abstractions save time working, but not learning</title><content type='html'>Today I read this &lt;a href="http://www.joelonsoftware.com/articles/LeakyAbstractions.html"&gt;great article&lt;/a&gt; again and somehow I can't take this out of my mind:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;So the abstractions save us time working, but they don't save us time learning&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;And all this means that paradoxically, even as we have higher and higher level programming tools with better and better abstractions, becoming a proficient programmer is getting harder and harder.&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8104768-109994758793072205?l=emilas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.joelonsoftware.com/articles/LeakyAbstractions.html' title='abstractions save time working, but not learning'/><link rel='replies' type='application/atom+xml' href='http://emilas.blogspot.com/feeds/109994758793072205/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8104768&amp;postID=109994758793072205' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8104768/posts/default/109994758793072205'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8104768/posts/default/109994758793072205'/><link rel='alternate' type='text/html' href='http://emilas.blogspot.com/2004/11/abstractions-save-time-working-but-not.html' title='abstractions save time working, but not learning'/><author><name>Gheorghe</name><uri>http://www.blogger.com/profile/16345214304445028131</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='26' src='http://www.emilas.com/tutu.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8104768.post-109994002569331505</id><published>2004-11-08T11:37:00.000-06:00</published><updated>2004-11-08T12:56:27.343-06:00</updated><title type='text'>Computers are useless. They can only give answers</title><content type='html'>Evan Jones: http://evanjones.ca/&lt;br /&gt;"Computers are useless. They can only give answers" - Pablo Picasso&lt;br /&gt;&lt;br /&gt;Nice motto, however I guess they can make humans raise questions too. But the topic of what makes humans raise questions seams insanely hard to reason about. And what is a valid new question and what is a reformulation is another one.&lt;br /&gt;&lt;br /&gt;It's just me being bored and having nothing better to do. &lt;br /&gt;But is it ever different in such topics ever, anywhere?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8104768-109994002569331505?l=emilas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://emilas.blogspot.com/feeds/109994002569331505/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8104768&amp;postID=109994002569331505' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8104768/posts/default/109994002569331505'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8104768/posts/default/109994002569331505'/><link rel='alternate' type='text/html' href='http://emilas.blogspot.com/2004/11/computers-are-useless-they-can-only.html' title='Computers are useless. They can only give answers'/><author><name>Gheorghe</name><uri>http://www.blogger.com/profile/16345214304445028131</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='26' src='http://www.emilas.com/tutu.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8104768.post-109984274986546024</id><published>2004-11-07T09:39:00.000-06:00</published><updated>2004-11-08T10:19:54.430-06:00</updated><title type='text'>Bloom Filters</title><content type='html'>The first think for me would be to implement a quick exists(txt) in a given huge collection of texts. rom there I can start searching.&lt;br /&gt;Maybe the vector could be a "hash table" with indexes in the collection as values and provided that the hash functions, between themselves have very low collision ratio, the bits in the vector are now pointing to index in the collection instead of seen/not-seen and we could have a very fast search.&lt;br /&gt;Also would make a nice implementation of "e-mail and beyond" black-list/white-list.&lt;br /&gt;The only question is how do you come up with k different hashing mechanisms yet in a limited space like (1..m) and what is the best k,m to use for a given lenght of your collection?. I guess the answer is God bless the mathematicians.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Update&lt;/b&gt;Now that I think a little more about, this is all blabla (hash table), since m would probably need to be as big as the collection length, or somewhere near to allow for overlaping not to happend, and so cannot be fixed from the start, wich I beleve was the hole point of this, (where there are k different hashes to minimize the impact of a given relatively small m).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8104768-109984274986546024?l=emilas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.cs.wisc.edu/~cao/papers/summary-cache/node8.html#SECTION00053000000000000000' title='Bloom Filters'/><link rel='replies' type='application/atom+xml' href='http://emilas.blogspot.com/feeds/109984274986546024/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8104768&amp;postID=109984274986546024' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8104768/posts/default/109984274986546024'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8104768/posts/default/109984274986546024'/><link rel='alternate' type='text/html' href='http://emilas.blogspot.com/2004/11/bloom-filters.html' title='Bloom Filters'/><author><name>Gheorghe</name><uri>http://www.blogger.com/profile/16345214304445028131</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='26' src='http://www.emilas.com/tutu.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8104768.post-109951867065646989</id><published>2004-11-03T15:19:00.000-06:00</published><updated>2004-11-07T10:15:55.930-06:00</updated><title type='text'>http pull / push</title><content type='html'>For push:&lt;br /&gt;server sends Content-type: multipart/x-mixed-replace and then sends each part whenever it wants. &lt;br /&gt;The browser will keep waiting for parts and present each part as a different page.&lt;br /&gt;   -in ASP do response.flush for each part and "sleep" until next part?&lt;br /&gt;   -is CGI ok since they will stay alive for so long? &lt;br /&gt;   -how is the server to cope with many of this such request, what is better separate processes (CGI, out of process ASP) or in-server-process scripts (pooled ASP) &lt;br /&gt;   -what about apache, is CGI or mod-python better&lt;br /&gt;   -what about third parties like webware?&lt;br /&gt;&lt;br /&gt;How does someone do incremental updates of only one part of the page? &lt;br /&gt;Maybe via JavaScript window.XMLHttpRequest and document.write or element.innerHTML ?&lt;br /&gt;Maybe the MIME part is some javascript in a hidden (1 pixel) frame that updates the rest of the page (frames)?&lt;br /&gt;&lt;br /&gt;It kind of starts to smell already, but I should give it a try and eventualy look for more info, for now i think I'll stay with pull via javascript XMLHttpRequest or HTML &amp;lt;meta refresh&amp;gt;.&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8104768-109951867065646989?l=emilas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://wp.netscape.com/assist/net_sites/pushpull.html' title='http pull / push'/><link rel='replies' type='application/atom+xml' href='http://emilas.blogspot.com/feeds/109951867065646989/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8104768&amp;postID=109951867065646989' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8104768/posts/default/109951867065646989'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8104768/posts/default/109951867065646989'/><link rel='alternate' type='text/html' href='http://emilas.blogspot.com/2004/11/http-pull-push.html' title='http pull / push'/><author><name>Gheorghe</name><uri>http://www.blogger.com/profile/16345214304445028131</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='26' src='http://www.emilas.com/tutu.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8104768.post-109915868666789137</id><published>2004-10-30T13:50:00.000-05:00</published><updated>2004-10-30T12:54:40.563-05:00</updated><title type='text'>XML-RPC - Multiple calls over same connection</title><content type='html'>Login once and then succesive calls must assume those credentials.&lt;br /&gt;The following is nice but "login profiled behaviour" is still a question, (or not? can we configure SSH env. such that it will proxy to different rpc servers based on auth. profile? and if yes, isn't multiple rpc servers a complication?) &lt;br /&gt;&lt;br /&gt;&lt;cite&gt;The default implementation uses HTTP as a transport, but that is&lt;br /&gt;not a requirement.  You just have to be able to serialise the request&lt;br /&gt;and response parameters into an XML stream.  The xmlrplic loads and&lt;br /&gt;dumps functions will do that for you.&lt;br /&gt;&lt;br /&gt;In one of my projects I actually use XML-RPC over SSH and deal with&lt;br /&gt;the authentication etc at the SSH level.  (I use the excellent pure&lt;br /&gt;Python paramiko library for the SSH protocol part).&lt;/cite&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8104768-109915868666789137?l=emilas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://groups.google.com/groups%3Fhl%3Den%26lr%3D%26threadm%3Dpan.2004.10.30.10.37.52.136926%2540fakehost.com%26prev%3D/groups%253Fnum%253D100%2526hl%253Den%2526group%253Dcomp.lang.python' title='XML-RPC - Multiple calls over same connection'/><link rel='replies' type='application/atom+xml' href='http://emilas.blogspot.com/feeds/109915868666789137/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8104768&amp;postID=109915868666789137' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8104768/posts/default/109915868666789137'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8104768/posts/default/109915868666789137'/><link rel='alternate' type='text/html' href='http://emilas.blogspot.com/2004/10/xml-rpc-multiple-calls-over-same.html' title='XML-RPC - Multiple calls over same connection'/><author><name>Gheorghe</name><uri>http://www.blogger.com/profile/16345214304445028131</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='26' src='http://www.emilas.com/tutu.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8104768.post-109862948538771858</id><published>2004-10-24T09:42:00.000-05:00</published><updated>2004-11-11T16:10:14.450-06:00</updated><title type='text'>A draft ?</title><content type='html'>How to not enjoy a draft if Bush is re-elected. &lt;br /&gt;www.enjoythedraft.com&lt;br /&gt;&lt;br /&gt;Is there some how to enjoy taxes a la Europe more then rumor web presence?. Don't balance taxes at end of year, pay taxes included in the prices of things.&lt;br /&gt;How would this be implemented? What would there be in this for small businesses, and what for big wolfs?&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8104768-109862948538771858?l=emilas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.enjoythedraft.com/faqreal.htm' title='A draft ?'/><link rel='replies' type='application/atom+xml' href='http://emilas.blogspot.com/feeds/109862948538771858/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8104768&amp;postID=109862948538771858' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8104768/posts/default/109862948538771858'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8104768/posts/default/109862948538771858'/><link rel='alternate' type='text/html' href='http://emilas.blogspot.com/2004/10/draft.html' title='A draft ?'/><author><name>Gheorghe</name><uri>http://www.blogger.com/profile/16345214304445028131</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='26' src='http://www.emilas.com/tutu.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8104768.post-109838330733451541</id><published>2004-10-21T13:27:00.000-05:00</published><updated>2004-10-21T13:28:27.336-05:00</updated><title type='text'>Links to remember</title><content type='html'>http://www.williamgibsonbooks.com/ &lt;br /&gt;read something from there (SF ?) &lt;br /&gt;awarded + "Neuromancer" I heard but never went anywhere with it yet&lt;br /&gt;&lt;br /&gt;http://compsoc.dur.ac.uk/whitespace/            &lt;br /&gt;how to code some language keywords as white space &lt;br /&gt;=&gt; bored people build boring stuff&lt;br /&gt;&lt;br /&gt;http://www.worldwidewords.org/ &lt;br /&gt;good ???? for an english illiterate like myself&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8104768-109838330733451541?l=emilas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://emilas.blogspot.com/feeds/109838330733451541/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8104768&amp;postID=109838330733451541' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8104768/posts/default/109838330733451541'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8104768/posts/default/109838330733451541'/><link rel='alternate' type='text/html' href='http://emilas.blogspot.com/2004/10/links-to-remember.html' title='Links to remember'/><author><name>Gheorghe</name><uri>http://www.blogger.com/profile/16345214304445028131</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='26' src='http://www.emilas.com/tutu.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8104768.post-109838309313079314</id><published>2004-10-21T13:23:00.000-05:00</published><updated>2004-10-21T16:19:28.823-05:00</updated><title type='text'>Metaclass to autoupdate existing instances of a class to newly  modified and reloaded classes</title><content type='html'>&lt;pre&gt;&lt;br /&gt;Pretty simple yet so powerfull:&lt;br /&gt;ideas: &lt;br /&gt;   -name the class __metaclass__ so all we need is import&lt;br /&gt;   -keep track of the instances in a new key (A) of the class attributes dictionary&lt;br /&gt;    (use instance __init__ to add the new instances to A in the class)&lt;br /&gt;   -at module reload, check sys.modules for the old class and copy A from old class &lt;br /&gt;    to new class dictionary&lt;br /&gt;   -for each instance (a) in A replace a.__class__ from old class to new class&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;#----- autoupdate.py&lt;br /&gt;'''metaclass for auto-update classes'''&lt;br /&gt;class __metaclass__(type):&lt;br /&gt;    &lt;i&gt;# automatically keeps tracks of instances    &lt;/i&gt;&lt;br /&gt;    def __new__(cls, class_name, bases, class_dict):&lt;br /&gt;        import inspect&lt;br /&gt;        module_name = class_dict['__module__']&lt;br /&gt;        &lt;i&gt;#we will update bellow the class_dict with a new key: &lt;br /&gt;        #instance_dict_name and value a list of instances&lt;/i&gt;&lt;br /&gt;        instance_dict_name = '_%s__instances' % class_name  &lt;br /&gt;        &lt;i&gt;# see if there is already an older class&lt;/i&gt;&lt;br /&gt;        import sys&lt;br /&gt;        old_instance_dict = None&lt;br /&gt;        if sys.modules.has_key(module_name):&lt;br /&gt;            module = sys.modules[module_name]&lt;br /&gt;            if hasattr(module, class_name):&lt;br /&gt;                old_instance_dict = getattr(getattr(module, class_name),&lt;br /&gt;                                        instance_dict_name)&lt;br /&gt;        &lt;i&gt;# add instance list&lt;/i&gt;&lt;br /&gt;        import weakref&lt;br /&gt;        class_dict[instance_dict_name] = weakref.WeakValueDictionary()&lt;br /&gt;        &lt;i&gt;# override the __init__&lt;/i&gt;&lt;br /&gt;        if class_dict.has_key('__init__'):&lt;br /&gt;            def new_init(self, *args, **kw):&lt;br /&gt;                instance_dict_name = '_%s__instances' % (&lt;br /&gt;                                     self.__class__.__name__)&lt;br /&gt;                getattr(self.__class__,&lt;br /&gt;                        instance_dict_name)[id(self)] = self&lt;br /&gt;                self.__original_init__(*args, **kw)&lt;br /&gt;            class_dict['__original_init__'] = class_dict['__init__']&lt;br /&gt;            class_dict['__init__'] = new_init&lt;br /&gt;        else:&lt;br /&gt;            def new_init(self, *args, **kw):&lt;br /&gt;                instance_dict_name = '_%s__instances' % (&lt;br /&gt;                                     self.__class__.__name__)&lt;br /&gt;                getattr(self.__class__,&lt;br /&gt;                        instance_dict_name)[id(self)] = self&lt;br /&gt;            class_dict['__init__'] = new_init            &lt;br /&gt;        &lt;i&gt;# build the class, with instance_dict&lt;/i&gt;&lt;br /&gt;        new_class = type.__new__(cls, class_name, bases, class_dict)&lt;br /&gt;        &lt;i&gt;# copy over the instance dictionary, and update __class__&lt;/i&gt;&lt;br /&gt;        if old_instance_dict is not None:&lt;br /&gt;            for instance_id, instance in (&lt;br /&gt;                              old_instance_dict.iteritems()):&lt;br /&gt;                getattr(new_class,&lt;br /&gt;                        instance_dict_name)[instance_id] = instance&lt;br /&gt;                instance.__class__ = new_class&lt;br /&gt;        &lt;i&gt;# return new class&lt;/i&gt;&lt;br /&gt;        return new_class&lt;br /&gt;&lt;br /&gt;#----- Spam.py&lt;br /&gt;from autoupdate import __metaclass__&lt;br /&gt;class Egg:&lt;br /&gt;    '''Put here your class code'''&lt;br /&gt;    # def print(self):&lt;br /&gt;    #     print 'Hello World!'&lt;br /&gt;&lt;br /&gt;#----- from your Python console&lt;br /&gt;import Spam&lt;br /&gt;x = Spam.Egg()&lt;br /&gt;# ... edit your Spam.py file and change code for Spam.Egg class,&lt;br /&gt;#     e.g.: add a print() method to Spam.Egg by uncommenting&lt;br /&gt;#     the corresponding lines. Save the file.&lt;br /&gt;reload(Spam)&lt;br /&gt;x.print() # prints 'Hello World!'&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/8104768-109838309313079314?l=emilas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://groups.google.com/groups?hl=en&amp;lr=&amp;selm=8ef9bea6.0406022026.954155e@posting.google.com&amp;rnum=66' title='Metaclass to autoupdate existing instances of a class to newly  modified and reloaded classes'/><link rel='replies' type='application/atom+xml' href='http://emilas.blogspot.com/feeds/109838309313079314/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8104768&amp;postID=109838309313079314' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8104768/posts/default/109838309313079314'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8104768/posts/default/109838309313079314'/><link rel='alternate' type='text/html' href='http://emilas.blogspot.com/2004/10/metaclass-to-autoupdate-existing.html' title='Metaclass to autoupdate existing instances of a class to newly  modified and reloaded classes'/><author><name>Gheorghe</name><uri>http://www.blogger.com/profile/16345214304445028131</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='26' src='http://www.emilas.com/tutu.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8104768.post-109829867059977995</id><published>2004-10-20T13:39:00.000-05:00</published><updated>2004-10-20T13:57:50.600-05:00</updated><title type='text'>color SynthAxis</title><content type='html'>The "bester" coloring tool: &lt;a href="http://color.cranf.net"&gt;color SynthAxis&lt;/a&gt;. &lt;br /&gt;It actualy allows anti-designers pretend to be "ok" designers as far as "color schemes" go.&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8104768-109829867059977995?l=emilas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://color.cranf.net' title='color SynthAxis'/><link rel='replies' type='application/atom+xml' href='http://emilas.blogspot.com/feeds/109829867059977995/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8104768&amp;postID=109829867059977995' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8104768/posts/default/109829867059977995'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8104768/posts/default/109829867059977995'/><link rel='alternate' type='text/html' href='http://emilas.blogspot.com/2004/10/color-synthaxis.html' title='color SynthAxis'/><author><name>Gheorghe</name><uri>http://www.blogger.com/profile/16345214304445028131</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='26' src='http://www.emilas.com/tutu.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8104768.post-109828951051043810</id><published>2004-10-20T11:39:00.000-05:00</published><updated>2004-10-20T11:43:58.946-05:00</updated><title type='text'>Test Driven Development</title><content type='html'>One aspect I cannot understand in TDD is how someone can assume that code is good if it's tested.Code that tests something is still code isn't it?&lt;br /&gt;How do you know if you tested for everything that may go wrong?&lt;br /&gt;If you can get the test correct then you can also get the main code correct.&lt;br /&gt;&lt;br /&gt;The only help I see from TDD is that it may allow to see how fixing something here breaks something there. But that means the code is coupled and then how do you test for all this coupling? &lt;br /&gt;&lt;br /&gt;-Your code should not be coupled. &lt;br /&gt;-But how do I write GUI code that is uncoupled?&lt;br /&gt;-Don't couple beforehand, instead use runtime registration of event handling.&lt;br /&gt;-How is that uncoupling? How do you test for this chain of events and how do you know how are they going to happen?&lt;br /&gt;-Test everything behind the GUI and leave GUI tests for later.&lt;br /&gt;-What's the point?&lt;br /&gt;-You should not write GUI code and start do some tests.&lt;br /&gt;-Ha?&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8104768-109828951051043810?l=emilas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://emilas.blogspot.com/feeds/109828951051043810/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8104768&amp;postID=109828951051043810' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8104768/posts/default/109828951051043810'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8104768/posts/default/109828951051043810'/><link rel='alternate' type='text/html' href='http://emilas.blogspot.com/2004/10/test-driven-development.html' title='Test Driven Development'/><author><name>Gheorghe</name><uri>http://www.blogger.com/profile/16345214304445028131</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='26' src='http://www.emilas.com/tutu.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8104768.post-109828738219305908</id><published>2004-10-20T10:06:00.000-05:00</published><updated>2004-11-08T09:55:03.966-06:00</updated><title type='text'>Python Interfaces</title><content type='html'>Ned Batchelder had &lt;a href="http://www.nedbatchelder.com/text/pythonic-interfaces.html"&gt;problems mimicking Java's interfaces in Python&lt;/a&gt; and then he also had problems departing from that too.&lt;br /&gt;&lt;br /&gt;The problem is that the implementer actually implements all the methods in the interfaces (via inheritance) regardless of whether it overwrites the behavior or not.&lt;br /&gt;&lt;br /&gt;If there were real interfaces in Python's language, then this would not be a problem since it would only be implemented if it actually implements it.&lt;br /&gt;&lt;br /&gt;He also explains how one does this in Java, which IMO is because Java forces you to implement all the methods in the implementer, so you must start creating hierarchies of interfaces to allow the implementer implement only one method, namely the child interfaces's method.&lt;br /&gt;&lt;br /&gt;In python, thanks to the fact that everything is an object and dynamic nature of things you can declare that something does something other ways:&lt;br /&gt;&lt;b&gt;methodName.notYetImplemented = True&lt;/b&gt; even if there is code in the body of the method and then rely on this attribute of the method's object rather then on the fact that there is code in the body of the method or not like in Java.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;def makeAbstract(f): &lt;br /&gt;     f.abstract=True &lt;br /&gt;     return f &lt;br /&gt;&lt;br /&gt;class NotImplemented(Exception): pass &lt;br /&gt;&lt;br /&gt;class Executable: &lt;br /&gt;     @makeAbstract &lt;br /&gt;     def oneWay(self): &lt;br /&gt;          raise NotImplemented &lt;br /&gt;     @makeAbstract &lt;br /&gt;     def secondWay(self): &lt;br /&gt;          raise NotImplemented &lt;br /&gt;  or for py2.3 &lt;br /&gt;     oneWay = makeAbstract(oneWay) &lt;br /&gt;     secondWay = makeAbstract(secondWay) &lt;br /&gt;&lt;br /&gt;class Statement(Executable): &lt;br /&gt;     def oneWay(self): &lt;br /&gt;          print "one way executed" &lt;br /&gt;&lt;br /&gt;s = Statement() &lt;br /&gt;&lt;br /&gt;if not hasattr(getattr(s, 'oneWay'), "abstract"): &lt;br /&gt;     s.oneWay() &lt;br /&gt;else: &lt;br /&gt;     s.secondWay() &lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Of course someone can argue how much more readeble an &lt;i&gt;interface inheritace dispach&lt;/i&gt; mechanism is vs a &lt;i&gt;switch dispache&lt;/i&gt; mechanism such like the one above, and I agree that often that is true, however there are many instances when "simple is simpler and therefore better". However this discution dosen't interests me and I let the purists take onto that. &lt;br /&gt;Now if you would like to let the dispach mechanism be taken care of by someone else, not you, then better use something like "runtime object providing a protocol"&lt;a href="http://peak.telecommunity.com/PyProtocols.html"&gt;PyProtocols&lt;/a&gt; wich is now also arguable as clean or cleaner then a "compile time object following interface specifications" such as Java's.&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8104768-109828738219305908?l=emilas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://emilas.blogspot.com/feeds/109828738219305908/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8104768&amp;postID=109828738219305908' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8104768/posts/default/109828738219305908'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8104768/posts/default/109828738219305908'/><link rel='alternate' type='text/html' href='http://emilas.blogspot.com/2004/10/python-interfaces.html' title='Python Interfaces'/><author><name>Gheorghe</name><uri>http://www.blogger.com/profile/16345214304445028131</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='26' src='http://www.emilas.com/tutu.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8104768.post-109821951093285490</id><published>2004-10-19T16:40:00.000-05:00</published><updated>2004-10-19T16:47:44.830-05:00</updated><title type='text'>Are we becoming robots?</title><content type='html'>We can't really see what technology does because:&lt;br /&gt;&lt;cite&gt;an exponential curve approximates a straight line when viewed for a brief duration&lt;/cite&gt; (&lt;a href="http://www.kurzweilai.net/meme/frame.html?main=/articles/art0134.html"&gt;Ray Kurzweil&lt;/a&gt;)&lt;br /&gt;So predictions are always in linear way (see below) because they are ideas applied to ideas.&lt;br /&gt;&lt;br /&gt;The problem with "non-technological" fields of knowledge is that there is no reliable apparatus to effectively remembering and so to being able to quickly applying knowledge, rather a cycle of re-inventions and epiphanies (lousy memory triggers) represent the engine of evolution.&lt;br /&gt;&lt;br /&gt;So really what technology does, it allows us to remember?.&lt;br /&gt;&lt;br /&gt;Technology way, the exponential way (the anti-struggling way?)&lt;br /&gt;Ideas build concrete objects. A&lt;br /&gt;A and ideas build concrete objects. B&lt;br /&gt;B and ideas build concrete objects. C&lt;br /&gt;...&lt;br /&gt;&lt;br /&gt;Gnoseology way, the linear way (the struggling way?)&lt;br /&gt;Ideas build ideas. A&lt;br /&gt;A builds ideas. A&lt;br /&gt;A builds ideas. A&lt;br /&gt;...&lt;br /&gt;&lt;br /&gt;The equation to spin around &lt;a href="http://www.wired.com/wired/archive/8.04/joy.html"&gt;Bill Joy&lt;/a&gt;:&lt;br /&gt;linear + exponential = exponential&lt;br /&gt;gnoseology + technology = technology&lt;br /&gt;epistemology = gnoseology + technology&lt;br /&gt;ontology = epistemology&lt;br /&gt;ontology = technology&lt;br /&gt;&lt;br /&gt;versus the old way&lt;br /&gt;epistemology = gnoseology&lt;br /&gt;ontology = epistemology&lt;br /&gt;&lt;br /&gt;Thank you syllogism for being a friend again and probably still let me be with the ontology maped the old way.&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8104768-109821951093285490?l=emilas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://emilas.blogspot.com/feeds/109821951093285490/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8104768&amp;postID=109821951093285490' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8104768/posts/default/109821951093285490'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8104768/posts/default/109821951093285490'/><link rel='alternate' type='text/html' href='http://emilas.blogspot.com/2004/10/are-we-becoming-robots.html' title='Are we becoming robots?'/><author><name>Gheorghe</name><uri>http://www.blogger.com/profile/16345214304445028131</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='26' src='http://www.emilas.com/tutu.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8104768.post-109820883782277131</id><published>2004-10-19T14:00:00.000-05:00</published><updated>2004-10-19T16:11:45.840-05:00</updated><title type='text'>OS religion</title><content type='html'>&lt;a href="http://diveintomark.org/archives/2003/08/04/xp"&gt;Install XP in 5 hours or less&lt;/a&gt;&lt;br /&gt;&lt;a href="http://ln.hixie.ch/?start=1060025253&amp;count=1"&gt;Install X-Chat in 5 hours or more&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Sometimes you may find yourself taken over by the flow of things, when your brain is more in a "sensory like" state.&lt;br /&gt;=&gt; You may find this funny&lt;br /&gt;&lt;br /&gt;Sometimes you may find yourself taken over by the critical you, when your brain is more in a "why, when, how" state.&lt;br /&gt;=&gt; You may find this sad&lt;br /&gt;&lt;br /&gt;&lt;a href="http://emilas.blogspot.com/2004/10/subjectivism.html"&gt;Again&lt;/a&gt; &lt;acronym title="In my opinion"&gt;IMO&lt;/acronym&gt; is always about "my world" rather the "the world".&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8104768-109820883782277131?l=emilas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://emilas.blogspot.com/feeds/109820883782277131/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8104768&amp;postID=109820883782277131' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8104768/posts/default/109820883782277131'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8104768/posts/default/109820883782277131'/><link rel='alternate' type='text/html' href='http://emilas.blogspot.com/2004/10/os-religion.html' title='OS religion'/><author><name>Gheorghe</name><uri>http://www.blogger.com/profile/16345214304445028131</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='26' src='http://www.emilas.com/tutu.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8104768.post-109820653471178204</id><published>2004-10-19T13:21:00.000-05:00</published><updated>2004-11-07T10:03:49.290-06:00</updated><title type='text'>Subjectivism</title><content type='html'>Via &lt;a href="http://blog.colorstudy.com/ianb/weblog/2004/10/18.html#P164"&gt;Ian Bicking&lt;/a&gt;&lt;br /&gt;&lt;p&gt;&lt;cite&gt;I realized I dislike Kerry because he isn't who I want him to be. But that's unfair -- he is who he is. He was selected for who he was.&lt;/cite&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;acronym title="In my opinion"&gt;IMO&lt;/acronym&gt; this is most often what the problem is:&lt;br /&gt;&lt;p&gt;The world does not exist, what exists is "my world" where &lt;i&gt;the world is in the ways I got where I am know&lt;/i&gt;, with my frustrations, my happy moments, my knowledge and from there the inferred inevitable subjective opinions etc.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;I strongly believe that even mathematics to a prety large degree is subjective, then what to talk about the less a priori wings of the world.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8104768-109820653471178204?l=emilas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://emilas.blogspot.com/feeds/109820653471178204/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8104768&amp;postID=109820653471178204' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8104768/posts/default/109820653471178204'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8104768/posts/default/109820653471178204'/><link rel='alternate' type='text/html' href='http://emilas.blogspot.com/2004/10/subjectivism.html' title='Subjectivism'/><author><name>Gheorghe</name><uri>http://www.blogger.com/profile/16345214304445028131</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='26' src='http://www.emilas.com/tutu.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8104768.post-109820493237737409</id><published>2004-10-19T11:54:00.000-05:00</published><updated>2004-10-19T13:19:55.296-05:00</updated><title type='text'>html image inlining</title><content type='html'>I didn't know about this&lt;br /&gt;Nice&lt;br /&gt;&lt;br /&gt;I've been inlining in emails, but for web I was always using a separate script to &lt;br /&gt;give out images for which links should not be known like:&lt;br /&gt;&amp;lt;img src="getImage?id=bla"&amp;gt;&lt;br /&gt;&amp;lt;img src="getImage?id=bla2"&amp;gt;&lt;br /&gt;where getImage only works if a user is signed in or something.&lt;br /&gt;Now I can turn more round trips into one if images are not big using something like&lt;br /&gt;&lt;br /&gt;&amp;lt;img&lt;br /&gt;   src="data:image/gif;base64,&lt;br /&gt;    R0lGODlhAwEgAPcAAP///87OzqWlpYSEhHNzc2tra1paWiEYGQv+E&lt;br /&gt;    AP/OGP/OAM7Oxr29xjEA/2MA/5wA/+8A/+dK79573ta8AGAAA&lt;br /&gt;    AAAAAAAAAAAAAAAAAAAAAAAAAAAA&lt;br /&gt;    AAAAAAAAAAAIpHuDBABsMANrb8JqF0gFxG+XAAHeqe2S+&lt;br /&gt;    Rh//hEFwEiA8ENJPN8K6NawcWA50CCLMnw7kUa/p&lt;br /&gt;    Rdrpco7uOexAMKBLYPpNlxAZ6DAnJlm7WlavA4FANR0Kg9CEAC&lt;br /&gt;    BAQAOw==&lt;br /&gt;   " &amp;gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8104768-109820493237737409?l=emilas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://emilas.blogspot.com/feeds/109820493237737409/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8104768&amp;postID=109820493237737409' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8104768/posts/default/109820493237737409'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8104768/posts/default/109820493237737409'/><link rel='alternate' type='text/html' href='http://emilas.blogspot.com/2004/10/html-image-inlining.html' title='html image inlining'/><author><name>Gheorghe</name><uri>http://www.blogger.com/profile/16345214304445028131</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='26' src='http://www.emilas.com/tutu.jpg'/></author><thr:total>1</thr:total></entry></feed>
