<br><br><div class="gmail_quote">On Wed, Apr 20, 2011 at 10:59 AM, Samuel Rivas <span dir="ltr"><<a href="mailto:samuel.rivas@madsgroup.org">samuel.rivas@madsgroup.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
<div class="im">> Things become problematic when you do not entirely understand the<br>
> abstraction.<br>
> Maybe the abstraction is inappropriate for your needs. I have seen many<br>
> examples<br>
> of code where the gen_server *is* inappropriate. The acid test is "does the<br>
> gen_sever code look like spaghetti" if the answer is yes then all you have<br>
> done<br>
> is shoe horn the applications into an inappropriate form. In this case<br>
> you should ditch the gen_server and roll-your own.<br>
<br>
</div>Another problem I often see is that newbies tend to regard gen_server<br>
as something that does magic, and fail to understand how the code runs<br>
in the server and the clients (since that code lives in the same<br>
module, usually).<br>
<br>
They end up in solutions with parts of the gen server sending messages<br>
back and forth, putting receives that spoil the abstraction<br>
intercepting messages that gen_server code should be handling,<br>
throwing exits in server code and attempting to catch them in the<br>
client code, blocking servers with heavyweight operations, ...<br>
<br>
I really consider advising against using gen_server (or any other<br>
abstraction) until one is able to write a client-server and a<br>
supervisor tree without them so that you can understand what's<br>
happening under the hood of gen_server (which, as you say, it's not<br>
rocket science).</blockquote><div><br> </div><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">Absolutely.<br>
<br>
I think the problem stems from the use of IDEs - in eclipse/Xcode etc you click on<br>
a "new project" button and the system automatically generates a load of crap files<br>
full of incomprehensible undocumented nonsense. This leads to a mentality<br>
of "using stuff without understanding it" - All I ever use is emacs, make and a shell.<br>
Usually I put all the files in one directory. I want to understand *everything*<br>
<br>
As IDEs get more and more complex and help you more and more<br>
it gets harder and harder to understand what's really going on.<br>
<br>
Graphics programming used to be easy - anybody remember Borlands turbo graphics?<br>
- but now it's far more difficult since you have to fight with all the tools and<br>
frameworks that get in the way and make life difficult.<br>
<br>
/joe<br>
<br>
 
<br>
<br>
Cheers<br>
--<br>
<font color="#888888">Samuel<br>
</font></blockquote></div><br>