<?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:blogger='http://schemas.google.com/blogger/2008' 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-5445766604096569596</id><updated>2026-03-26T15:37:06.179-07:00</updated><category term="mysql"/><category term="antipattern"/><category term="database"/><category term="php"/><category term="rails"/><category term="sql"/><category term="trees"/><title type='text'>Keeping it Simple</title><subtitle type='html'>Being mindful of best practices in software development fundamentals can be more effective than adopting every latest technology.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://karwin.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5445766604096569596/posts/default?alt=atom&amp;redirect=false'/><link rel='alternate' type='text/html' href='http://karwin.blogspot.com/'/><author><name>Bill Karwin</name><uri>http://www.blogger.com/profile/13004667086865377598</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjNQuiIcVhWUcTF6Aj9XkNA36g30Pmo_b9p_FyJfjvn3u99GpYM4FdkpimMsggIBdY7h5wbSgvG23Es8AFKcC3UQD3XiNt5PpxyaPXU50MgKvptbPQJQkdx4RJeS13XFGo/s220/D6H_4140_sm.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>4</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-5445766604096569596.post-7556770131188981897</id><published>2012-11-20T17:24:00.001-08:00</published><updated>2014-11-24T09:40:20.798-08:00</updated><title type='text'>C Pointers Explained, Really</title><summary type="text">While I was in college, a friend of mine complained that he was confused while programming in C, struggling to learn the syntax for pointers.

He gave the example of something like: *x=**p++ being ugly and unreadable, with too many operations layered on each other, making it hard to tell what was happening. &amp;nbsp;He said he had done a bit of programming with assembly language, but he wasn&#39;t </summary><link rel='replies' type='application/atom+xml' href='http://karwin.blogspot.com/feeds/7556770131188981897/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5445766604096569596/7556770131188981897' title='26 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5445766604096569596/posts/default/7556770131188981897'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5445766604096569596/posts/default/7556770131188981897'/><link rel='alternate' type='text/html' href='http://karwin.blogspot.com/2012/11/c-pointers-explained-really.html' title='C Pointers Explained, Really'/><author><name>Bill Karwin</name><uri>http://www.blogger.com/profile/13004667086865377598</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjNQuiIcVhWUcTF6Aj9XkNA36g30Pmo_b9p_FyJfjvn3u99GpYM4FdkpimMsggIBdY7h5wbSgvG23Es8AFKcC3UQD3XiNt5PpxyaPXU50MgKvptbPQJQkdx4RJeS13XFGo/s220/D6H_4140_sm.jpg'/></author><thr:total>26</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5445766604096569596.post-6402470695723624702</id><published>2010-03-24T13:55:00.000-07:00</published><updated>2010-03-24T14:35:40.398-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="mysql"/><category scheme="http://www.blogger.com/atom/ns#" term="sql"/><category scheme="http://www.blogger.com/atom/ns#" term="trees"/><title type='text'>Rendering Trees with Closure Tables</title><summary type="text">I got a comment from a reader about the Naive Trees section of my presentation SQL Antipatterns Strike Back.  I&#39;ve given this presentation at the MySQL Conference &amp;amp; Expo in the past.I&#39;d also like to mention that I&#39;ve developed these ideas into a new book, SQL Antipatterns: Avoiding the Pitfalls of Database Programming.  The book is now available in Beta and for pre-order from Pragmatic </summary><link rel='replies' type='application/atom+xml' href='http://karwin.blogspot.com/feeds/6402470695723624702/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5445766604096569596/6402470695723624702' title='71 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5445766604096569596/posts/default/6402470695723624702'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5445766604096569596/posts/default/6402470695723624702'/><link rel='alternate' type='text/html' href='http://karwin.blogspot.com/2010/03/rendering-trees-with-closure-tables.html' title='Rendering Trees with Closure Tables'/><author><name>Bill Karwin</name><uri>http://www.blogger.com/profile/13004667086865377598</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjNQuiIcVhWUcTF6Aj9XkNA36g30Pmo_b9p_FyJfjvn3u99GpYM4FdkpimMsggIBdY7h5wbSgvG23Es8AFKcC3UQD3XiNt5PpxyaPXU50MgKvptbPQJQkdx4RJeS13XFGo/s220/D6H_4140_sm.jpg'/></author><thr:total>71</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5445766604096569596.post-1980070121282754138</id><published>2009-05-21T15:05:00.000-07:00</published><updated>2016-01-04T20:48:46.190-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="antipattern"/><category scheme="http://www.blogger.com/atom/ns#" term="mysql"/><title type='text'>EAV FAIL</title><summary type="text">



Photo by&amp;nbsp;Mike Gogulski, used in accordance with the Creative Commons BY-SA 3.0 license

The photo above illustrates (by counter-example) an important characteristic of a normalized database:  each logical &quot;type&quot; of attribute belongs in a separate column.

Just because three values happen to be numeric doesn&#39;t mean it makes sense to SUM() them together.  But if dissimilar attributes are </summary><link rel='replies' type='application/atom+xml' href='http://karwin.blogspot.com/feeds/1980070121282754138/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5445766604096569596/1980070121282754138' title='118 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5445766604096569596/posts/default/1980070121282754138'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5445766604096569596/posts/default/1980070121282754138'/><link rel='alternate' type='text/html' href='http://karwin.blogspot.com/2009/05/eav-fail.html' title='EAV FAIL'/><author><name>Bill Karwin</name><uri>http://www.blogger.com/profile/13004667086865377598</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjNQuiIcVhWUcTF6Aj9XkNA36g30Pmo_b9p_FyJfjvn3u99GpYM4FdkpimMsggIBdY7h5wbSgvG23Es8AFKcC3UQD3XiNt5PpxyaPXU50MgKvptbPQJQkdx4RJeS13XFGo/s220/D6H_4140_sm.jpg'/></author><thr:total>118</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5445766604096569596.post-7350185166163754147</id><published>2008-05-23T12:55:00.000-07:00</published><updated>2008-05-28T10:33:05.819-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="database"/><category scheme="http://www.blogger.com/atom/ns#" term="mysql"/><category scheme="http://www.blogger.com/atom/ns#" term="php"/><category scheme="http://www.blogger.com/atom/ns#" term="rails"/><title type='text'>ActiveRecord does not suck</title><summary type="text">I&#39;ve been reading a few blog postings such as Kore Nordmann&#39;s ActiveRecord sucks and Mike Seth&#39;s ActiveRecord sucks, but Kore Nordmann is wrong.ActiveRecord is fine.  It is a tool that does just what it&#39;s designed to do.  What sucks is when developers try to make it do other things than what it&#39;s intended to do.I worked for Zend, managing the Zend Framework project through its 1.0 release.  I </summary><link rel='replies' type='application/atom+xml' href='http://karwin.blogspot.com/feeds/7350185166163754147/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5445766604096569596/7350185166163754147' title='58 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5445766604096569596/posts/default/7350185166163754147'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5445766604096569596/posts/default/7350185166163754147'/><link rel='alternate' type='text/html' href='http://karwin.blogspot.com/2008/05/activerecord-does-not-suck.html' title='ActiveRecord does not suck'/><author><name>Bill Karwin</name><uri>http://www.blogger.com/profile/13004667086865377598</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjNQuiIcVhWUcTF6Aj9XkNA36g30Pmo_b9p_FyJfjvn3u99GpYM4FdkpimMsggIBdY7h5wbSgvG23Es8AFKcC3UQD3XiNt5PpxyaPXU50MgKvptbPQJQkdx4RJeS13XFGo/s220/D6H_4140_sm.jpg'/></author><thr:total>58</thr:total></entry></feed>