<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
		>
<channel>
	<title>Comments for Cognitive Consonance</title>
	<atom:link href="http://tiago.org/cc/comments/feed/" rel="self" type="application/rss+xml" />
	<link>http://tiago.org/cc</link>
	<description>Software engineering in a computational biology environment</description>
	<lastBuildDate>Tue, 29 Dec 2009 12:25:39 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		<item>
		<title>Comment on Clojure: &#8220;Being a Lisp Is a Handicap&#8221; by jneira</title>
		<link>http://tiago.org/cc/2009/12/02/clojure-being-a-lisp-is-a-handicap/comment-page-1/#comment-1100</link>
		<dc:creator>jneira</dc:creator>
		<pubDate>Tue, 29 Dec 2009 12:25:39 +0000</pubDate>
		<guid isPermaLink="false">http://tiago.org/cc/?p=200#comment-1100</guid>
		<description>The op flexibility (op infix == function prefix) reminds me haskell, i suppose haskell borrow it from prolog (directly or not). But it seems that the compiler has to  be necessarily more complicated and you have to keep in mind the precedence rules (even if your have created or changed the rules!). I am sure that (for other features of Clojure) Hickey built clojure with Haskell-Ocaml in mind and chose a unique way for good reason. Anyway reader macros are  discouraged but it is possible to use them (trough java or pure clojure code)
See:
http://fulldisclojure.blogspot.com/2009/12/how-to-write-clojure-reader-macro.html
http://briancarper.net/blog/clojure-reader-macros</description>
		<content:encoded><![CDATA[<p>The op flexibility (op infix == function prefix) reminds me haskell, i suppose haskell borrow it from prolog (directly or not). But it seems that the compiler has to  be necessarily more complicated and you have to keep in mind the precedence rules (even if your have created or changed the rules!). I am sure that (for other features of Clojure) Hickey built clojure with Haskell-Ocaml in mind and chose a unique way for good reason. Anyway reader macros are  discouraged but it is possible to use them (trough java or pure clojure code)<br />
See:<br />
<a href="http://fulldisclojure.blogspot.com/2009/12/how-to-write-clojure-reader-macro.html" rel="nofollow">http://fulldisclojure.blogspot.com/2009/12/how-to-write-clojure-reader-macro.html</a><br />
<a href="http://briancarper.net/blog/clojure-reader-macros" rel="nofollow">http://briancarper.net/blog/clojure-reader-macros</a></p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Swing menus in Clojure by Stephen Pardue</title>
		<link>http://tiago.org/cc/2009/10/27/swing-menus-in-clojure/comment-page-1/#comment-1002</link>
		<dc:creator>Stephen Pardue</dc:creator>
		<pubDate>Tue, 22 Dec 2009 03:28:52 +0000</pubDate>
		<guid isPermaLink="false">http://tiago.org/cc/?p=110#comment-1002</guid>
		<description>That is pretty cool. How do you handle events?</description>
		<content:encoded><![CDATA[<p>That is pretty cool. How do you handle events?</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Lisp and Clojure: prefix notation and parentheses by zzorn</title>
		<link>http://tiago.org/cc/2009/12/03/lisp-and-clojure-prefix-notation-and-parentheses/comment-page-1/#comment-943</link>
		<dc:creator>zzorn</dc:creator>
		<pubDate>Fri, 18 Dec 2009 08:52:27 +0000</pubDate>
		<guid isPermaLink="false">http://tiago.org/cc/?p=205#comment-943</guid>
		<description>In the end, aren&#039;t all programming languages basically just synthetic sugar, on top of machine code (from an engineering perspective), or on top of a Turing machine / lambda calculus / or equivalent (from a theoretical perspective).

Every move to a higher level programming language is just a layer of syntactic sugar converting the language constructs back to a lower level language.

So from this perspective, syntactic sugar is needed for all languages, the interesting problem is finding out what syntactic sugar is best suited for a given purpose.</description>
		<content:encoded><![CDATA[<p>In the end, aren&#8217;t all programming languages basically just synthetic sugar, on top of machine code (from an engineering perspective), or on top of a Turing machine / lambda calculus / or equivalent (from a theoretical perspective).</p>
<p>Every move to a higher level programming language is just a layer of syntactic sugar converting the language constructs back to a lower level language.</p>
<p>So from this perspective, syntactic sugar is needed for all languages, the interesting problem is finding out what syntactic sugar is best suited for a given purpose.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Lisp and Clojure: prefix notation and parentheses by tiago</title>
		<link>http://tiago.org/cc/2009/12/03/lisp-and-clojure-prefix-notation-and-parentheses/comment-page-1/#comment-866</link>
		<dc:creator>tiago</dc:creator>
		<pubDate>Thu, 03 Dec 2009 14:09:47 +0000</pubDate>
		<guid isPermaLink="false">http://tiago.org/cc/?p=205#comment-866</guid>
		<description>Interestingly, I never use Java in my examples. I use Prolog, a language that can do what Lisp do without resorting to the &quot;hack on top&quot; which is macros.

The argument that I try to make comes precisely from the opposite direction of imperative programming: Comes from logic programming.

I don&#039;t know where I fail to get that message across. But considering that I hardly refer Java, I am starting to suspect some people read what they want to read, and not what I trying to transmit.

Lisp obviously suffers from the same problem as Prolog: As it is really a nice and elegant solution, it tends to breed some level of arrogance. Understandable, but self-destructive at the end.</description>
		<content:encoded><![CDATA[<p>Interestingly, I never use Java in my examples. I use Prolog, a language that can do what Lisp do without resorting to the &#8220;hack on top&#8221; which is macros.</p>
<p>The argument that I try to make comes precisely from the opposite direction of imperative programming: Comes from logic programming.</p>
<p>I don&#8217;t know where I fail to get that message across. But considering that I hardly refer Java, I am starting to suspect some people read what they want to read, and not what I trying to transmit.</p>
<p>Lisp obviously suffers from the same problem as Prolog: As it is really a nice and elegant solution, it tends to breed some level of arrogance. Understandable, but self-destructive at the end.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Lisp and Clojure: prefix notation and parentheses by Patrick Logan</title>
		<link>http://tiago.org/cc/2009/12/03/lisp-and-clojure-prefix-notation-and-parentheses/comment-page-1/#comment-865</link>
		<dc:creator>Patrick Logan</dc:creator>
		<pubDate>Thu, 03 Dec 2009 11:45:53 +0000</pubDate>
		<guid isPermaLink="false">http://tiago.org/cc/?p=205#comment-865</guid>
		<description>Apparently a number of people like Java&#039;s syntax, yet there are very few infix operators in Java. Nor can they be extended. Lack of infix operators in Lisp does not seem to be the reason for fear of Lisp&#039;s sexprs.

Infix math expressions go back decades in Lisp... they&#039;re easy to implement. Most Lisp programmers don&#039;t give two hoots and a holler for them, though.

Anyway Lisp is deep, deeper than syntax. I think people are generally taught imperative programming, not applicative.

Lisps tend to have better support for various mathematics than the curly-braced languages to boot, when it comes to semantics, richness, and accuracy.

Whatever.</description>
		<content:encoded><![CDATA[<p>Apparently a number of people like Java&#8217;s syntax, yet there are very few infix operators in Java. Nor can they be extended. Lack of infix operators in Lisp does not seem to be the reason for fear of Lisp&#8217;s sexprs.</p>
<p>Infix math expressions go back decades in Lisp&#8230; they&#8217;re easy to implement. Most Lisp programmers don&#8217;t give two hoots and a holler for them, though.</p>
<p>Anyway Lisp is deep, deeper than syntax. I think people are generally taught imperative programming, not applicative.</p>
<p>Lisps tend to have better support for various mathematics than the curly-braced languages to boot, when it comes to semantics, richness, and accuracy.</p>
<p>Whatever.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Clojure: &#8220;Being a Lisp Is a Handicap&#8221; by tiago</title>
		<link>http://tiago.org/cc/2009/12/02/clojure-being-a-lisp-is-a-handicap/comment-page-1/#comment-864</link>
		<dc:creator>tiago</dc:creator>
		<pubDate>Thu, 03 Dec 2009 10:51:31 +0000</pubDate>
		<guid isPermaLink="false">http://tiago.org/cc/?p=200#comment-864</guid>
		<description>Thanks for the comment. Note the following, though: The Prolog type of solution DOES NOT IMPOSE infix notation. It can accommodate both types of syntax.

+(2,3,X) - equivalent to (+ 2 3)
2 + 3.

Note full flexibility and freedom to choose your style with the :- op built-in . And at very little cost in parser complexity. No hard-coded operators at all.</description>
		<content:encoded><![CDATA[<p>Thanks for the comment. Note the following, though: The Prolog type of solution DOES NOT IMPOSE infix notation. It can accommodate both types of syntax.</p>
<p>+(2,3,X) &#8211; equivalent to (+ 2 3)<br />
2 + 3.</p>
<p>Note full flexibility and freedom to choose your style with the :- op built-in . And at very little cost in parser complexity. No hard-coded operators at all.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Clojure: &#8220;Being a Lisp Is a Handicap&#8221; by E[X]</title>
		<link>http://tiago.org/cc/2009/12/02/clojure-being-a-lisp-is-a-handicap/comment-page-1/#comment-860</link>
		<dc:creator>E[X]</dc:creator>
		<pubDate>Thu, 03 Dec 2009 04:23:47 +0000</pubDate>
		<guid isPermaLink="false">http://tiago.org/cc/?p=200#comment-860</guid>
		<description>Actually, it isn&#039;t easy to do in clojure because it lacks reader macros. 
However infix syntax on lisp has been attempted many times and it never became mainstream, probably because the code that really benefits from it is ends up being much less common than you intuitively think it is and the abuntant number of parenthesis are there because of the deeply nested style lisp programmers (myself included) tend to favor.</description>
		<content:encoded><![CDATA[<p>Actually, it isn&#8217;t easy to do in clojure because it lacks reader macros.<br />
However infix syntax on lisp has been attempted many times and it never became mainstream, probably because the code that really benefits from it is ends up being much less common than you intuitively think it is and the abuntant number of parenthesis are there because of the deeply nested style lisp programmers (myself included) tend to favor.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Concurrency and multicore CPU/GPUs are overhyped by Tom</title>
		<link>http://tiago.org/cc/2009/11/02/concurrency-and-multicore-cpugpus-are-overhyped/comment-page-1/#comment-837</link>
		<dc:creator>Tom</dc:creator>
		<pubDate>Sun, 22 Nov 2009 17:48:54 +0000</pubDate>
		<guid isPermaLink="false">http://tiago.org/cc/?p=130#comment-837</guid>
		<description>I don&#039;t see any examples of overhyping concurrency and multicores for specific applications. If you look at most examples given by these areas, they demonstrate their strengths - multicore, concurrency, works for problems that can be sped up using them.

Why NOT have it? If it&#039;s a nice benefit on occasion, why not? Divvy out your problems between ones that can be attacked in a massively parallel way, those that can use GPU, those that just need brute CPU strength, and deal with them accordingly.

It sounds like extrapolation from one data point to say &quot;i don&#039;t need it, so why does everyone else?&quot; which is the basic vibe from point 1. Why would you need a fast laptop? You don&#039;t seem to. But many people want one. Wouldn&#039;t you want an Ion, or Ion 2 in your netbook? Or maybe an SSD would speed it up?

There&#039;s a fundamental difference between individual user&#039;s needs, and their desires, their wants. The majority of netbook users would i&#039;d argue want a faster netbook. They&#039;re sucky slow. Concurrency might be in parts hard, but sometimes it&#039;s pretty easy, and getting easier. 

Concurrency, having the CPU GPU memory HD, SSD firepower is relevant when the problem can be tackled this way. And when it is, it&#039;s hugely important, as the gains are manyfold. It&#039;s not the general be all and end all, but if a user could have a more powerful computer, wouldn&#039;t they take it? has there really been many cases of &quot;excessive&quot; or too much computational power?

Would many people go back to single core? Or integrated over discrete graphics power? The need/desire of a user for more computational power  isn&#039;t a fixed value, and i&#039;d imagine it&#039;s going up , with day to day variations, all the time.</description>
		<content:encoded><![CDATA[<p>I don&#8217;t see any examples of overhyping concurrency and multicores for specific applications. If you look at most examples given by these areas, they demonstrate their strengths &#8211; multicore, concurrency, works for problems that can be sped up using them.</p>
<p>Why NOT have it? If it&#8217;s a nice benefit on occasion, why not? Divvy out your problems between ones that can be attacked in a massively parallel way, those that can use GPU, those that just need brute CPU strength, and deal with them accordingly.</p>
<p>It sounds like extrapolation from one data point to say &#8220;i don&#8217;t need it, so why does everyone else?&#8221; which is the basic vibe from point 1. Why would you need a fast laptop? You don&#8217;t seem to. But many people want one. Wouldn&#8217;t you want an Ion, or Ion 2 in your netbook? Or maybe an SSD would speed it up?</p>
<p>There&#8217;s a fundamental difference between individual user&#8217;s needs, and their desires, their wants. The majority of netbook users would i&#8217;d argue want a faster netbook. They&#8217;re sucky slow. Concurrency might be in parts hard, but sometimes it&#8217;s pretty easy, and getting easier. </p>
<p>Concurrency, having the CPU GPU memory HD, SSD firepower is relevant when the problem can be tackled this way. And when it is, it&#8217;s hugely important, as the gains are manyfold. It&#8217;s not the general be all and end all, but if a user could have a more powerful computer, wouldn&#8217;t they take it? has there really been many cases of &#8220;excessive&#8221; or too much computational power?</p>
<p>Would many people go back to single core? Or integrated over discrete graphics power? The need/desire of a user for more computational power  isn&#8217;t a fixed value, and i&#8217;d imagine it&#8217;s going up , with day to day variations, all the time.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on More clojure N00b tips by tiago</title>
		<link>http://tiago.org/cc/2009/11/04/more-clojure-n00b-tips/comment-page-1/#comment-835</link>
		<dc:creator>tiago</dc:creator>
		<pubDate>Thu, 19 Nov 2009 18:29:24 +0000</pubDate>
		<guid isPermaLink="false">http://tiago.org/cc/?p=139#comment-835</guid>
		<description>Public Farley: My feelings exactly.</description>
		<content:encoded><![CDATA[<p>Public Farley: My feelings exactly.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on More clojure N00b tips by Public Farley</title>
		<link>http://tiago.org/cc/2009/11/04/more-clojure-n00b-tips/comment-page-1/#comment-833</link>
		<dc:creator>Public Farley</dc:creator>
		<pubDate>Thu, 19 Nov 2009 17:33:35 +0000</pubDate>
		<guid isPermaLink="false">http://tiago.org/cc/?p=139#comment-833</guid>
		<description>Actually the Contains? function is working as per spec. In retrospect it may have been better named as contains-key? though. 

Here&#039;s why:

Try the following

(contains? [&#039;a &#039;b] 0) =&gt; true
(contains? [&#039;a &#039;b] 2) =&gt; false

(contains? {:1 &#039;a :2 &#039;b} :1) =&gt; true
(contains? {:1 &#039;a :2 &#039;b} :3) =&gt; false

Contains? performs the following test: &quot;for a given collection does the given key exist?&quot;. For the first two calls, since vectors are keyed by their indices, the second argument is an index. Hence, the indices 0 and 1 exist. The index 2 does not.

Similarly for the map, the key :1 exists. The key :3 does not.

For a list, there is no defined key so a test of the form (contains?  key) always returns false. You do have a point in that it might have been better if an exception of something like KeyUndefinedForCollectionException was thrown...

Sadly, for list membership, I have resorted to dropping down into the java contains method (using the dot operator) as follows:

(.contains &#039;(a b) &#039;a) =&gt; true
(.contains &#039;(a b) &#039;c) =&gt; false
(.contains (list &#039;a &#039;b) &#039;a) =&gt; true
(.contains (list &#039;a &#039;b) &#039;c) =&gt; false


Yup. Kind of confusing.....</description>
		<content:encoded><![CDATA[<p>Actually the Contains? function is working as per spec. In retrospect it may have been better named as contains-key? though. </p>
<p>Here&#8217;s why:</p>
<p>Try the following</p>
<p>(contains? ['a 'b] 0) =&gt; true<br />
(contains? ['a 'b] 2) =&gt; false</p>
<p>(contains? {:1 &#8216;a :2 &#8216;b} :1) =&gt; true<br />
(contains? {:1 &#8216;a :2 &#8216;b} :3) =&gt; false</p>
<p>Contains? performs the following test: &#8220;for a given collection does the given key exist?&#8221;. For the first two calls, since vectors are keyed by their indices, the second argument is an index. Hence, the indices 0 and 1 exist. The index 2 does not.</p>
<p>Similarly for the map, the key :1 exists. The key :3 does not.</p>
<p>For a list, there is no defined key so a test of the form (contains?  key) always returns false. You do have a point in that it might have been better if an exception of something like KeyUndefinedForCollectionException was thrown&#8230;</p>
<p>Sadly, for list membership, I have resorted to dropping down into the java contains method (using the dot operator) as follows:</p>
<p>(.contains &#8216;(a b) &#8216;a) =&gt; true<br />
(.contains &#8216;(a b) &#8216;c) =&gt; false<br />
(.contains (list &#8216;a &#8216;b) &#8216;a) =&gt; true<br />
(.contains (list &#8216;a &#8216;b) &#8216;c) =&gt; false</p>
<p>Yup. Kind of confusing&#8230;..</p>
]]></content:encoded>
	</item>
</channel>
</rss>
