Page 10 of 11 Previous  1, 2, 3 ... , 9, 10, 11  Next

View previous topic View next topic Go down

Competition (hehe, that is a good thing) is hereby declared on the open source statists

Post  Shelby on Sat Nov 05, 2011 5:33 am

Tangentially, note there is a more complete (adds images and important links) and easier-to-read version of the essay Understand Everything Fundamentally.

This post might read as though it is all about me, but really the point is about everyone and that science can't make computations that can capture every individual's potential ability to contribute to knowledge formation.

Here is why we can't measure my IQ:

Eric Raymond wrote:
it is quite difficult to write a test of
mental ability that is not at least 50% correlated with all other such
tests. Or, to put it another way, no matter how you design ten tests for
mental ability, at least about half the variance in the scores for any one
of them statistically appears to be due to a “general intelligence”
that shows up on the other nine tests as well.

Psychometricians call this general intelligence measure “g”. It
turns out to predict important real-world success measures quite well
— not just performance in school but income and job success as
well. The fundamental weakness in multiple-factor theories of intelligence
is that measures of intelligence other than g appear to predict
very little about real-world outcomes. So you can call a lot of other
things “intelligence” if you want to make people feel warm and fuzzy,
but doing so simply isn’t very useful in the real world.

Although "g" may be the most important factor for majority of people and situations, there will be those "one-in-a-million" IQ which is so important at a particular set of circumstances and does have an incredible real world result, but it is so rare that it is not possible to design a test for itori[/i]. This is just the same degrees-of-freedom and fitness concept again, and that nature never knows what it will do a priori, i.e. we need a diversity of IQs that we can't measure (that are not described by "g"). Eric Raymond does not conceptualize that this is why average IQ rises (it is due to fitness of a rising population means more chance of someone like me being alive!). Eric makes the same mathematical conceptual error as Winter made, "labor or production does not equate to productivity":

Murray’s news is that the Flynn effect is not being driven by a
rise in average g...

...I’m not entirely sure what this means yet, and I don’t believe
Murray or other psychometricians have gotten to the bottom of it

Bottom line is I realize it is not the optimum use of a gifted or genius skill, to spend all my time trying to dumb it down (explain it) because others don't have the IQ capacity (i.e. very rare kind of reductionist, conceptualization ability) to understand it. It is more efficient for me to get more competitive making actions that implement my models into the market, so people can use them (where they don't need to understand why they are reaching success with the tools and paradigms I am creating).


This is my "time to shut up and work" post, so I am going to put a lot of information and links in this post, so that I have clear record and understanding of why I made this abrupt decision to go hide in a programming cave.

It is time to stop talking and become more introverted for a while, and start implementing the alternative paradigm to these open source statists, who imo hide under the lie of being libertarians or anarchists (read my other links to understand why saving-at-interest is statism and failure directed).

Let me make it clear that I have no bad personal feelings towards any one mentioned in this post. People do what they do, and talk is cheap. If I am intent on helping progress some concept, I have to work at it. Vendetta's waste time and effort.

Eric Raymond wrote:
shelby wrote:
@nigel, my reply went into the spam queue I think.

And is never coming out. Shelby, you were warned that you would be banned if you went above one post a day. You’ve been repeatedly violating this. I had been putting up with it because you’ve been having a lucid streak recently, but you’re back to semi-unhinged babbling. So you’re banned.

Your semi-psychotic word-salad prose style is quite recognizable. I won’t tolerate you returning under yet another mask. Jocelyn, or whoever you are.

Eric Raymond censored the comments near the bottom of this post, one of which is a critical design flaw he is making that will affect all open source repositories. Since he claims to be in the 156-171 IQ range (or in 145 - 175 range or more narrowly in the 160-165 range with 150+ being serious polymathy), I suppose my IQ is quite a bit higher than I thought. I would say I am in the third group:

140-155: “…some in this group exceed the average university student in academic competence while still in primary school.”

I have perhaps also demonstrated some of the traits of being polymathy, but it is dubious to me whether I met the requirement to do so with original work (my entropic theory was dubiously original, Copute may qualify):

but to have to cross-discipline knowledge to a depth and breadth necessary to see all the pieces in CatB before CatB would require a genuine polymath,

Evidence of me being in that third group is that even though most of my elementary school education was chaotic (was it 10 schools before I graduated high school, I forget?), as I was placed in inner city baby sitting schools, didn't have access to sufficient reading materials, moved by myself from Louisiana to California, was drunk my entire 10th grade, yet still managed to get a 3.2 GPA with (Trigonometry, US History, Physics I, etc), was the JV league champion in X-Country, and a 4.0 GPA the rest of the way of my high school and college. I was taking Calculus at the college at night in my senior year and I know I had the capacity to reach that years earlier, because I purchased on my own initiative (from Radio Shack) and read the following book when I was 12 or 13 and had already taught myself digital logic even I had never been formally taught base 10 or logarithms.

Understanding Digital Computer by Forrest M. Mims (published by RadioShack 1979, 1987 2nd Ed)

My SAT scores appear to place me in the 130 - 140 IQ range.

My elementary school teacher sent to me have a complete IQ test (based on how fast I was excelling, for example I won a classroom spelling bee, I devoured the SRA reading and comprehension materials at a very high pace and comprehension) and I think they were disappointed. I think my score was some where just below 120 or in the mid-120s or so. My mom never told me afair. I have taken some IQ tests on a whim since then, and have scored any where from 115 after end of a 15 hour work-day (I think this might have been Standford-Binet style) to 138. On the one I scored 138, I am sure the IQ test had the wrong answer for one of the philosophy questions, which would have placed me higher. I always refused to guess on tests (even the SAT). So on timed tests (e.g. the Stanford-Binet), I often don't finish and use poor time-management, i.e. stay stuck on a question too long. And I never train for these tests (i.e. practice at being good at these mechanical techniques). The IQ examiner asked me what I saw in patterns and I wasn't interested and I said "squiggly lines". Any way, what I have noticed is that I am not genius at recognizing a pattern from a random sample quickly. This is a mechanical skill (Ken Burnside describes his vectorization). Nor am I genius at memorizing large sets of data, which I presume can be learned by training in mnemonics (I did well with spelling in elementary when such mechanization was important to me). My genius is in conceptualization, i.e. reducing complex patterns to lower complexity models. It is very, very difficult to test that aspect of IQ because I am not gifted at translating the conceptual model to communication (i.e. Q&A) that capture the model. I think this is why IQ tests don't capture my IQ. Also I come across as not being extremely intelligent because my verbal and prose skills would not really tell you what is going on in my mind. I have no effective way to articulate what is going on in my mind, and when I attempt to, I fail and look stupid.

my experience is representative is completely broken. I took that one after kiba mentioned it. It got my IQ wrong by…well, mine is in the range where measurement becomes difficult because none of the instruments are very good, and the only psychometrician I currently know personally says she thinks the estimate I got from is low by almost two sigmas. So depending on whether you believe that site’s estimation methods or her, was low by 30 to 50(!) points.

It is not valid to make too many generalizations from a set of experiences, but what I am explaining is only one example of a phenomenon I have experienced over and over in my life. The problem is my math visualization IQ is apparently genius (as evidenced by the fact even Eric Raymond thinks that my explanation about entropic theorem is "semi-psychotic word-salad" noise), and my reading comprehension is above average and perhaps 1 to 2 sigma gifted (was better before I lost vision in one eye, as I tire when reading long passages now), but my composition prose is very weak. The reason my composition prose is weak is because my mind is has a multi-variable visualization of a problem set, and it is very arduous to figure out how to describe this in linear prose. Eric Raymond makes short-cuts, which makes for efficient prose, but sometimes technically incorrect (e.g. see the bolded text near bottom of this post). In fact, I can make very terse logically complete summaries of the complex models in my head, but then no one understands them. This is not to say there are never any holes in my models, just that I am apparently genius (one-in-a-million?) in terms of seeing models that no one else does, and that even they don't understand after I explain it to them (and apparently even if they are genius). So where does that place me? High-genius? I think my mathematical visualization IQ must be "off the charts" as I have alleged in the past. Eric Raymond says that I am intelligent but I have a "nuttiness and combination of intelligence and grandiose, delusional mentation". What I have observed (see my comments in each blog thread that preceded each censored comment below), is that Eric Raymond thinks I am not lucid, when I start talking about the entropic theorem. This indicates a high probability he can't visualize the model in his head. I have had several indications in discussions about computer language design and other decision choices, where I have begun to realize that I am smarter than him in the area of conceptualization of a model. Also I do tend to rush my writings (before they've been fully hashed out and organized for maximum comprehension) and write at say 4am when I haven't slept for 18+ hours, so the quality of my prose can decline precipitously at times. This comment by Eric explains what my brain is doing in terms of trying to simplify the world around me to models. What is interesting is my spatial-kinematics were off the charts before losing vision in my right eye. I excelled at sports and was often called "baby Michael Jordan" for my preemptive body contortions. Since my 1999 eye injury was not in youth (I am still competitive with 20 year olds in basketball without the right eye), my brain has adjusted slowly to exploiting any unused brain sections, but it seems to about 2006 caused me significant breakthoughs in conceptual understanding of computer science, physical science, and economics. However, this could have been the effect of rise of Google and access to more reading material, as well as more free time since I made enough money on Cool Page to stop working.

The best programmers form conceptual models and have an "NT" Myers-Briggs Type Indicator psychometric profile, yet I am a top programmer. Circa Sept 2010 I scored "ENFP, 44/88/25/22%" and today on same test I scored ENFP 33%/62%/50%/44% (explained by recently I increased my desire to measure and prove my conceptual models, also I have increased my rational degrees-of-freedom compassion for diversity).

Stop there! What the heck does that word-salad mean, "rational degrees-of-freedom compassion for diversity"? It is the tersest way I could quickly think of, to explain that compassion for diversity (i.e. the "F" and "P" in my Myers-Briggs type), is synonymous with degrees-of-freedom, and degrees-of-freedom are more economic in my conceptual model of social capitalism (a/k/a political economy). Tangentially Adam Smith didn't understand that my Entropic Economy Theorem determined the optimization of his "invisible hand" because he advocated uniformity (which is the antithesis of optimization of degrees-of-freedom fitness, i.e. the "invisible hand"):

Adam Smith wrote:
The subjects of every state ought to contribute towards the support of the government, as nearly as possible, in proportion to their respective abilities; that is, in proportion to the revenue which they respectively enjoy under the protection of the state.

And "NP" means "NP types as abstract". ENFP are idealists and champions, famous examples are Mark Twain, Theodor "Dr." Seuss Geisel, Will Rogers, Robin Williams, Andy Rooney (actually I can see myself doing the things they did had I chosen to focus on the areas they did). If broadened to the "NF" superset, which is the idealist+champion temperament, then include those who are introverted and/or judgmental (which I am not so, that is why I don't create political movements as these people did), e.g. Martin Luther King Jr., David, King of Israel, Abraham Lincoln, Ronald Reagan, Ross Perot, Oprah Winfrey, William Shakespeare, John F. Kennedy, Jr.. This link describes me. Here is a description which is bit too narrow and presumptive, but still interesting. Here is a more well-rounded description. Let's compare to Eric Raymond who is borderline between ENTP and ENTJ (i.e. he oscillates between prioritizing judgment and perception, which I have noticed), so famous people included those who advance statism radically, e.g. Franklin D. Roosevelt, Richard M. Nixon, Margaret Thatcher, Al Gore, Alexander the Great, Sir Walter Raleigh, Thomas Edison. And a few comedians, Jim Carrey, Dave Letterman, Steve Martin, Alfred Hitchcock, George Carlin. If we included the introverted "NT" types, which Eric Raymond is not (he consumes much time and energy being social), then the list of accomplishments becomes more much impressive, Augustus Caesar, Thomas Jefferson, John F. Kennedy, Socrates, Rene Descartes, Blaise Pascal, Sir Isaac Newton, C. G. Jung (invented this test!), William James, and Albert Einstein. Thus I can make a conceptual observation that perhaps Mr. Raymond needs to spend less time controlling social outcomes and more time using his intellect to make accomplishments. Perhaps Eric and I have similar non-linear thinking going inside our heads, but we filter them differently perhaps. Here is one thing Eric is correct about. Letting my stream-of-consciousness flow out in prose is very ineffective (no one understands). In speaking, I do quite a bit better (see the prior link for why). But the best is when I shut up and put my conceptual ideas into my achievements. I only can do this in spurts, because my personality type depends on extroversion and social interactions.This explains why I am always in a rush (I might be missing some social interaction or feedback loop).

An example of my superior conceptualization IQ is Eric Raymond stereotypes Christians as all professing millenarianism (btw his use of the word "believe" is redundant, since the definition of millenarisnism contains "belief in", thus I use the word "profess"). Well that is not what Revelation predicts. It predicts that those who follow statism will perish and those who follow freedom will survive (which has happened over and over again in history). Then he procedes to make the conceptual error of conflating freedom lovers (Christians) with statist Mathusians. He has in the past conflated Christians with those fake Christians who promote such crazy statism as the Inquisition (i.e. the ENFJ types he conflates us ENFP with). Perhaps he doesn't understand the concept that the "church" in the bible is not a building, but rather those who believe in freedom. He should read 1 Samuel 8, Matthew 6:5, etc..


Took a test today, trying to find some IQ tests online to evaluate people.

I scored 144 on this one:

This seems to confirm my suspicion that I am in the "superior" range in terms of "g", but perhaps higher than that in "spatial visualization":

Here are some more:


Scored 131 IQ on this test today:

But if I answered "do not know" for the following vocabulary words, and if I had known their definitions, then my score would have been 144. So this confirms that my decisions about late elementary or middle school, to de-prioritize cluttering my mind with long-term memory of obscure words, shows up both in a big differential between my math and verbal SAT scores segments and also in the IQ tests I take. So it looks like I am in the realm of 140s in terms of "visual mathematics", and every IQ test tells me I am higher in that realm, which is also evident to me in my vocation.


Also got 140 or perfect score on this timed one:

Another test: I scored 135

This is a very difficult test:

The following I were unable to answer (I refuse to guess), and I would have needed considerably more time to solve them:


Note I took this at 1am, so being more fresh may have enabled me to do better.

Note the answers may be here, but don't cheat:

Let me explain better 26, there are 2 short lines rotated 45 degrees each step (left to right on each row) around the left and right middle row pegs, and 1 long line on the center peg that is rotating 45 degrees per step.

+++ Here are the censored posts +++

Shelby Moore wrote:
After some sleep, I realized I am afaics correct. See point#1 below for the killer problem.

Identity theft means who+time is not necessarily unambiguous when the commit can not be located in the current copy. So if commit hashes in references are properly propagated by DVCS when they change, then afaics it is no less unambiguous in any case.

A commit hash will change when portions of a commit are propagated to a copy, and/or a commit is propagated to a copy which has a different history of commits.

The advantage is then the semantics of "I am referencing this content" is not changed to "I am referencing an identity and a time". The latter semantic introduces numerous problems:

1. Requires that contribution to open source can never be anonymous, because by definition anonymity requires an identity which is shared by all who want to be anonymous.
2. Privacy strategies may vary by DVCS.
3. Requires the DVCS to tag commit with identity+time key (apparently most do already).
4. The identity+time key on the tag has to be compatible with the format of the action stamp in the comment.

Action stamps are a "can-of-worms". The fundamental problem is that universal identity has an infinite asymptotic cost in ubiquitous networking. In networks, only the content should be linked (i.e. referenced), because it has a local scope (the content only). Notice how the political weakness of the internet are the global authorities for addressing content. An identity has a global scope and thus binds the referenced content to the globe, thus reducing degrees-of-freedom and thus is statism. For example, if Google+ forces global identity (not anonymous), then the government can (top-down) politicize content.

For philosophical and economic reasons, I am very much against forcing identity. It can't be controlled by the individual any way (identity theft, political hack jobs, authorities planting false evidence, etc), and it can become concrete boots. Some tolerate universal identity, for practical reasons I presume. I don't think they are practical reasons, because they are always uneconomic in the broader scope analysis.

Feel free to flame me, I just feel very strongly about protecting freedom, especially when it is always technically correct.

There are very few universal laws (forces) in nature. I think one is that uniformity or ubiquity of order is uneconomic and failure direction. This is because the trend of the universe it also towards maximum disorder, which I think most people fail to realize is maximum independent possibilities, i.e. maximum degrees-of-freedom. Sorry to be so verbose, but so many readers don't grasp this universal force of nature. If they would just learn this, so many incorrect design decisions (about everything, even AGW) could be averted.

Shelby Moore wrote:
Eric Raymond wrote:
> VCS-independent way

Now you are dependent on either non-anonymity and globally unique id (antithesis of locality and degrees-of-freedom preferred by the philosophy of unix), or for anonymity the user introduces random ids which are not guaranteed to be even locally (to a VCS set) unique.

I pointed out other problems in the post you censored, as well others have pointed out problems.

You ask for input, then you censor or refuse to debate it (and not just my input). Brilliant!

But that is what makes a free market. I encourage you to knock yourself out!

@Rrrr, more independent entities competing means more knowledge, because they can compete to provide better solutions (i.e. fitness). Centralization of decisions leads to vested interests and politics, which is always less knowledge and more gridlock.

@nigel wrote:
source license is orthogonal to do with being a walled garden

Disagree. The more open the license, the less limitations on reuse of the code base.

The definition of walled garden only requires that it is not possible to offer alternatives. Market success is orthogonal.

Linux is a mainstream open source OS with greater than 50% share in certain server segments.

But my point was that for the first time we have a mainstream (bulk of the world's population) OS with greater than 50% global share.

but doesn’t preclude closed source operating systems from gaining traction

No one has in general purpose servers. Now mobile has fallen to open source.

Before I wrote 2 - 4 years. Recently Apple has dropped to 14% because of the late and 4S disappointment, and seeing Android accelerating in developing markets, I am now pondering that Apple may drop to single digit global share in 2012.

I disagree that the business models for the Magic Cauldron's Inverse Commons are limited. Opposite actually. There are more degrees-of-freedom and more fitness cases, because open source removes friction and allows more companies to share effort in a win-win.

Any attempt to close an open source OS will fail into a fork, because the world has too much to gain from the enchanced degrees-of-freedom of the Inverse Commons.

Google's vested interests will if necessary be destroyed eventually by open source. Imho this is not heading toward socialism where we don't get paid for programming. (I am working on advancing solutions)

I expect Apple's high margin markets to crater with the collapse of the dollar (and strengthening of the NAU) and Euro (and strengthening of the EU) circa 2012 - 2014, including high margin Macs. The western masses are going to be devalued by a factor of 3 at least.

I expect the smaller nimbler competitors are also going to be making addons and software. I think eventually there will be standardized ports for Android. Perhaps the priority was to unfork the phone and tablet OS. Also as the OS stabilizes, the Taiwanese and Chinese will produce standard reference designs and then we will see a proliferation of smaller nimbler players. A company like Dell might jump in (or maybe Amazon is that). I recently saw Alcatel here (not sure if it was Android). And even as it stands now, you have got perhaps a dozen manufacturers of Android versus Apple. They will improve their vertical integration and their horizontal standardization.

I don't think Google wants to weaken the other players in the Android ecosystem, so I don't think they will buy up every small innovation that attacks every vertical market nook & cranny. Google's strategy is let the others do that low margin business.

Last edited by Shelby on Sun Jan 15, 2012 7:53 pm; edited 15 times in total


Posts : 3107
Join date : 2008-10-21

View user profile

Back to top Go down

Forge data jails perspective

Post  Shelby on Wed Nov 16, 2011 9:12 am

Perhaps I am still "banned", so I will copy this comment around:

Shelby wrote:
In my vision of the future, we currently have too much discussion that could all be replaced by code submits. So really all we need for this future direction is the version control to be open. Don't tell me about a bug, or discuss a new feature, submit some code.

For this vision to work, I need:

1. Uncoordinated development, meaning anyone can submit a new version of a module at any time, and it gets used as others choose to.
2. Referential transparency of modules, to minimize cascade and localize effects of code submits.

The whole point is that the world is headed into massive unemployment, and the future is one where millions of people are employed as programmers.

I still hate the idea that the user has to have a global identity. I think that is headed in the wrong direction. You seem to be trying to solve a problem by adding complexity instead of removing the source of the complexity.

To go along with this, I am planning to start a computer science education system online, similar to khanacademy but more focused with some key tools development.

Some examples to argue for replacing public discourse with uncoordinated coding.

Some evidence that bug reporting is a political black hole, and a model where people can code their own versions of modules at-will, would be superior than so much bickering:


Posts : 3107
Join date : 2008-10-21

View user profile

Back to top Go down

Paradigmatic decentralized federalization of "bug reporting" (re: forge data jails perspective)

Post  Shelby on Fri Nov 18, 2011 12:58 am

To: Eric Raymond

Pleased to see your latest blog post is relevant to my prior email. So it
deserves my clarification as follows.

Perhaps this can help.

Shelby wrote:
Building on my prior comment, when bug reports are submitted with code, i.e. we need only DVCS and no separate bug reporting tool, then this is federation.

It means that users who are not developers need to interface with some developer in his/her "TODO list" or "bug tracker".

It also solves Linus's problem of how to assign bugs to relevant developers.

So you finally see that centralization is always the problem. I have only been trying to tell you this for 2 years.

And you never want to force federation explicitly, as that has a very low entropy. Do it paradigmatically, by eliminating the centralization paradigm which is preventing it, as I suggested above.

Sigh, it takes people a long time to catch up with my thinking. First they ignore you, then they ban you, then they join you.


Posts : 3107
Join date : 2008-10-21

View user profile

Back to top Go down

Found some reviews and photos of my old software product WordUp

Post  Shelby on Sun Nov 20, 2011 3:04 am


Posts : 3107
Join date : 2008-10-21

View user profile

Back to top Go down

What is OOP, i.e. extensible programming?

Post  Shelby on Sun Nov 27, 2011 4:56 am

This ties in my prior article about Understanding Everything Fundamentally in terms of an entropic force.


Posts : 3107
Join date : 2008-10-21

View user profile

Back to top Go down

Re: Reddit Users Aim To Build A New, Censorship-Free Internet

Post  Shelby on Mon Nov 28, 2011 2:03 am

I went to reddit:

Wireless mesh networks won't work, because they don't scale:

They should be working on anonymous virtual network that rides on the existing internet connections:

As I had predicted in prior post in this thread about years ago, what is does demonstrate is that analogous to what happened with music downloading, the more the government tries to interfere with knowledge formation, the more the creative the market will get at side stepping the power of the government.

> Wary Of SOPA, Reddit Users Aim To Build A New, Censorship-Free
> Internet - Forbes


Posts : 3107
Join date : 2008-10-21

View user profile

Back to top Go down

Software business model lessons

Post  Shelby on Fri Dec 09, 2011 5:21 pm

  1. Cannot profit *within* a s/w platform
  2. Own your clients
  3. Open platforms (listen for several minutes until he explains that ExpertsExchange had a "pay wall")
  4. Don't sell s/w
  5. Knowledge is capital (relationships are based around mutual knowledge)
  6. Behavior capture is the asset (it should be an instantaneous compulsive habit, and have inertia to minimize churn from competition)
  7. Monetization can be orthogonal to main behavior (monetize the most valuable component of the knowledge capital)
  8. Avoid centralization (because has reduced degrees-of-freedom, e.g. web portals)

Last edited by Shelby on Sat Dec 10, 2011 2:50 am; edited 1 time in total


Posts : 3107
Join date : 2008-10-21

View user profile

Back to top Go down

The censored discussion at SO

Post  Shelby on Sat Dec 10, 2011 1:47 am

If you down vote this, you do not know the subject matter. Ignorance is bliss I guess. – Shelby Moore III 3 hours ago

To say that a statement "does something" is incredibly imprecise, as an expression also "does something"-- it evaluates to a value. I know what people are trying to say, they just don't choose precise words and definitions. The precise word is (a statement must not be) referentially transparent (i.e. imperative). That is more precise than "does something" or "side-effect". Do you want SO to be a site of knowledge or ignorance? – Shelby Moore III 2 hours ago

A statement does not have to have a side effect: f(); is a valid statement, even if f happens to be side-effect-free. An expression does not have to have a value type: f() is an expression even if f returns void. C#'s type system doesn't exactly have a bottom type. – Gilles 2 hours ago

See my comments under Mark Cidade's answer, which explain why a statement is often in reality the bottom type and not the unit type. – Shelby Moore III 2 hours ago

@Gilles f(); is an expression. If it has side-effects, it becomes a imperative statement. I am sorry but you are wrong. The semicolon has nothing to do with it. Please read this and learn. I want to be friendly, so please don't take it the wrong way. I just want to help people understand. – Shelby Moore III 2 hours ago

Friendly advice: when you communicate with people, don't redefine what technical words mean. In the context of C#, the words “expression” and “statement” have precise meanings that are given by the syntax. – Gilles 2 hours ago

@Gilles I think perhaps Shelby might have missed the C# tag on this question. – Andrew Barber 1 hour ago

@AndrewBarber please read the question again. He "assumes it is the same in other languages", and he asks "a good definition of expressions and statements and what the differences are". – Shelby Moore III 1 hour ago

@ShelbyMooreIII Please read the question again, yourself; he was asking specifically about C#. You didn't even really attempt to answer the actual question. – Andrew Barber 1 hour ago

@Gilles Please don't redefine general technical terms 'expression' and 'statement'. My comments and answer are correct for C#. If f(); has the type void and has no side-effects, then it is a NOOP. A good compiler will not allow NOOPs. If f(); has no side-effects and its return value is not used, it is also a NOOP. Do you want to learn or downvote and be stubborn? I am here trying to teach and help. Do you appreciate or want me to leave SO? – Shelby Moore III 1 hour ago

@AndrewBarber I did answer the question w.r.t. C#. I answered with one precise sentence. That sentence is correct for C#. I then elaborated about what void in C# means in terms of type theory. You are wrong if you think type theory doesn't apply to C#. Are you proud of downvoting this? Please think about it. – Shelby Moore III 1 hour ago

@ShelbyMooreIII I'd be interested in knowing what makes you think I down voted. One thing for sure; I'll stop trying to help you figure out why you might be getting the votes/comments you are getting. – Andrew Barber 1 hour ago

@AndrewBarber If it is a political contest for who can be ignorant and deny their ignorance, then I have no business to be here. People who downvote based on their emotions, and not based on facts, deserve their bliss. – Shelby Moore III 53 mins ago

Please downvote it more. I will blog about this and raise awareness of why the format of SO doesn't work for knowledge in all cases. I would like you to maximize the downvotes please. – Shelby Moore III 49 mins ago

This "I am right, everybody else is wrong" attitude is not going to win you any friends. Instead of doing that, you might want to consider explaining your position in a constructive fashion. – NullUserException♦ 41 mins ago

@NullUserException What did I write that was not constructive. Your emotions are clouding your vision. Go read again what I wrote. Whether I am "right" or not, will be proven in due time. And your names will remain as a permanent record or where you stood on the issue and how you reacted to my sincere attempt to help here. My first comment about ignorance is because you shouldn't downvote w/o giving a reason, so the author can respond. I have responded constructively and my logic stands above. Are you proud of yourselves? I try to live in a rational and amicable world. – Shelby Moore III 38 mins ago

I always give the courtesy of an explanation when I downvote someone, except for 3 or 4 cases of gibberish that I couldn't make sense of. I try to be rational and fair. The fact that I have been designing a computer language nonstop for the past year, means I have had my head in these topics and that is why I know what I am writing about. It is incredulous that you are downvoting this logic. Must be based on some emotional criteria? – Shelby Moore III 33 mins ago

@ShelbyMooreIII You are being highly confrontational and you are accusing people of being ignorant. This is not constructive. And no, downvotes don't have to come with an explanation. This has been discussed at length, the most recent of these discussions is here: – NullUserException♦ 30 mins ago

@NullUserException They don't have to come with an explanation, but the system does ask you to do it each time, and I think it is a way to respect rationality and knowledge, especially when the answer is so strong. You are free to disagree. And I am free to leave SO. And I am not being confrontational. I am being factual. Ignorance is a demonstrated fact in this case. It is not ad hominen to state a fact. I am willing to help people learn. That is very valuable. If you don't value it, I will be oblige and leave. – Shelby Moore III 22 mins ago

You sound exactly like this guy here: – Aillyn 15 mins ago

@Aillyn Factually, that is how we all sound to someone who doesn't know programming. So imagine what does that say about you, that you can't understand basic definitions of fundamental computer science terms? Are proud of that? You want to put your name on that comment? Amazing. Maybe it is because I am 46, and I come from a time where people respected those who know more and are gracious to take their scarce time to come teach. I will leave SO now. Bye. – Shelby Moore III 4 mins ago

Last edited by Shelby on Sat Dec 10, 2011 3:10 am; edited 1 time in total


Posts : 3107
Join date : 2008-10-21

View user profile

Back to top Go down

Copute's business model

Post  Shelby on Sat Dec 10, 2011 2:59 am

cf. Software Business Model Lessons

This will be written in a cryptic manner, so only I know what this means.

10% of programming wages must be contributed to pool, when coding s/w that incorporates modules from the pool. Self-policing is that those who can entice a programmer to cheat, will receive all of that programmers revenues for 7 years. This is a unilateral decision of Copute mgmt (agreed to in the TOS). Winner must present electronically verifiable proof of payment, e.g. Paypal, and the completed code work.

The idea is to maximize knowledge formation and eliminate cheating and moderation.

P.S. this will encourage those that want to cheat to demand gold & silver as payment. That is a win for society.


Posts : 3107
Join date : 2008-10-21

View user profile

Back to top Go down

How I might experiment with changing StackOverflow's game theory model

Post  Shelby on Sat Dec 10, 2011 7:52 am

To get more relevance and end the delusion that we can stop discussion. Just hide the discussion by default.

  1. No displayed rep power, nor # of votes on answers nor questions. (to minimize ego, the psychological retribution punitive value of downvoting, and the madness of herds to copy those with huge # of upvotes).
  2. Users are competing only for relative rankings of their questions and answers.
  3. Each up and down vote requires a new discussion thread, that opens with a statement of justification by the voter. Only the voter and the person being voted against, can post discussion in these threads. This appear as a collapsed single line in comments, that can be expanded (click the "+") to see whole discussion.
  4. Votes can be up and down voted, ditto need a new justification discussion sub-thread for each.
  5. Voting a vote up or down changes the weight of that user's vote. Also user's relative hidden rep is used to weight the votes. This is sort of analogous to a Google PankRank algorithm.

Here is what was discussed before they censored it over there:

Shelby wrote a question:
How can I maximize my downvotes so as to attain the most negative rep ever?

This ends with a suggestion for an improvement to anonymous downvoting. The title of this question is because I don't expect my suggestion to be taken seriously, because design-by-committee is well known to be an anti-pattern (i.e. oxymoronic).

I am trying to demonstrate that the tyranny of the MOB is incredibly "intelligent" when defining the fundamental definitions of computer science.

Remember, those terms that we are supposed to learn in Comp Sci 101, that are fundamental to our ability to understand higher-order computer science concepts. If we get those wrong, SO is not relevant to fundamental computer science.

(But maybe that isn't the point of SO? Maybe SO is only designed to be relevant to "teach me by doing my coding sample (job) for me", and gaining INCORRECT fundamental understanding?)

For example, "casting" (vs. conversion), "expression" vs. "statement", declarative vs. imperative vs. functional programming, call-by-sharing vs. call-by-value, subtyping vs. functional composition (smart questioner waited several months for the right answer, so SO worked in this case), inductive vs. coinductive types (the illiterates even called Spolsky an idiot, and I corrected them in comments), etc..

Even I see people voting down the answer (in spite in a recent downvoting war) that I noted in the comments is the answer that the creator of the Scala language said is the correct one. Stupendously "intelligent" anonymous downvoting system.

The prevailing collective "wisdom", reminds me of Steve Jobs' infamous customer-is-wrong remark, "just don't hold it that way".

This "community is always right" (tyranny-of-the-MOB) is evident by the rain of downvotes on every Q&A about eliminating anonymous downvoting.

This is the crowd pyschology of the Iron Law of Political Economics. It is the delusion that we can always be nice (Lol), thus violate Coase's Theorem, and thus not have human nature spill out in unintended consequences.

Howard Katz died in 2010, and his family removed the specific blog post I want to link to, but basically he made the point that Germans prior to Hitler were striving for a system where everyone was nice and "socialized medicine" (health care) was for everyone, it bankrupted their society (as collectivism always does), and then all the pent up demand to "not be nice" came out in a mega-death eruption (as predicted by Coase's theorem).

Here is another quote from Katz: have probably come across references to the depreciation of the German mark in 1914-23. It went a trillion for one, and the German middle class was whipped out. But all of these references miss the important point. The important lesson of the depreciation of the German mark in 1923 was that the German people took it. They did not rebel against their government. They did not even vote it out of office. They did not even demand a gold standard. They didn’t have the guts to stand up for their own rights, and soon they had set out on a great quest to violate the rights of the rest of the world.

Katz makes a point about property and inalienable rights, that is analogous to the implicit right to own our free speech (i.e. as Joel Spolsky said no data jails and censorship):

the British Empire, the greatest in world history, was created because Britain recognized that people had rights, and other countries wanted to be under Britain because they wanted rights too. So they put up only token resistance, and this was their way of joining the British. (When Britain gave up her rights and adopted the welfare state between WWI and WWII, she soon lost her empire.)

How I might experiment with changing StackOverflow's game theory model to make relevancy more algorithmically convergent. (sort of analogous to Google's PageRank algorithm):

ADD: How ironic that "relevancy" is not a keyword tag. And I don't have the rep power to create one.

Dude, what is your problem? – slhck 1 hour ago

4 Sorry, I don't understand what you actually want to achieve here. You typed a lot of text, but still didn't succeed to bring over the point of your feature-request (I only know it is one because of the tag). – Paŭlo Ebermann 1 hour ago

@Paŭlo Click link at the end of the question. It enumerates the suggested changes. – Shelby Moore III 1 hour ago

@slhck Can you read the question? Do you have specific rebuttal point? – Shelby Moore III 1 hour ago

1 Then please add/quote them here for everyone to read and cut the rest that doesn't seem to have anything to do with it. – slhck 1 hour ago

5 @ShelbyMooreIII: (-1): I have no idea what you are proposing. If what you want implemented is in that last link you post, please provide the contents here (and if that is it, I hope I can downvote a second time) – Mat 1 hour ago

@slhck I think the rest is relevant. You can try to explain why you don't think so in an answer. You know how to click a link. – Shelby Moore III 1 hour ago

@Mat You can be lazy if you want. I can't stop you. The entire text of the question is relevant to explaining my suggested changes. So now we know you downvoted because you don't feel like reading. Intelligent. Keep proving my point. Thanks. – Shelby Moore III 1 hour ago

4 Why is there no close-reason "this is not a real feature-request"? – Paŭlo Ebermann 1 hour ago

4 If you want something changed, you should at least put that right on top of your post, so we can vote based on this, and not some philosophical explanations that might or might not justify what you're trying to accomplish. Yes, we know how to click a link, and no, you just don't want to understand how things normally work here, do you? – slhck 1 hour ago

@slhck The philosophy is essential for understanding the suggestions. Thanks for another downvote. Much appreciated. – Shelby Moore III 1 hour ago

1 I did not even downvote your question. Why do you think so? Something is terribly flawed in the way you want to communicate here. – slhck 1 hour ago

2 @ShelbyMooreIII: nice attitude. I did follow that link, why else would I have said I wouldn't support it if that was indeed what you were proposing? When multiple people tell you your post is not clear, whether it seems clear to you is irrelevant. You need to make it clear to the readers (unless you're writing to yourself). – Mat 58 mins ago

@Mat The point isn't that isn't clear. The point is that you want to tell me that if you don't feel like reading something long-winded, then you will just dimiss it. Some topics involve long-winded explanations. So you are simply proving the anti-pattern of least common denominator of "design by committee" (which I mentioned in my question). Attention Deficit Disorder syndrome. – Shelby Moore III 56 mins ago

4 "Each up and down vote requires a new discussion thread" ::boggle:: – dmckee 56 mins ago

I edited your post to include the only text that should have been in your post to begin with. Then I downvoted because your opinions are so ludicrously converse to the currently "ain't broke don't fix it" system that I have a hard time taking it seriously. – Toomai 55 mins ago

Awesome, Godwin's Law is satisfied in the original post! – tvanfosson 54 mins ago

1 @ShelbyMooreIII: I did read your question. I even followed that link. And even with that, I was confused about whether what you were suggesting as a feature request was the stuff you don't actually explain at all in your post. – Mat 54 mins ago

3 @dmckee Yeah don't throw away data. Just hide the noise by collapsing it. Did you know that I can edit any Wikipedia page and put anything I want on it and instantly get a permalink to my version of that official page? Wikipedia understands that deleting user data is violating their property rights. And such a model will never succeed. It will diverge into socialistic hell. – Shelby Moore III 53 mins ago

What the …? Even here, nothing is permanently deleted. It's about producing this "data". I don't think everybody wants a separate comment discussion thread for just a single vote. – slhck 51 mins ago

@Toomai That is my decision if I want a long-winded explanation. I am explaining the science behind my suggestion. Btw, thanks for editing the question and adding information. That shows a positive for knowledge formation. – Shelby Moore III 49 mins ago

@slhck Yes it is deleted, because the reader can't easily find it. And more importantly the fundamental principle of the internet is violated. I can't link to it. Data jail. – Shelby Moore III 47 mins ago

How is suggest that has 5 specific points not constructive? Oh it is my attitude that is not constructive? Thanks for proving my point guys. SO will collapse in socialism. Remember I told you so. – Shelby Moore III 46 mins ago

3 I was going to post a tl;dr comment, but I forced myself to read it and I still don't understand you point. Downvoting has, and always will be anonymous, otherwise we'll just get into petty votewars. The "question" was closed as it is, after all, not really contructive, and all that quoteing, referencing and psychobabble made it a hard read anyway. SO will collapse in socialism. SO is a website, not a country. If something isn't broken don't try to fix it. – tombull89 45 mins ago

@Mat I did explain very well the reasons for the suggested changes. Try reading a little bit more carefully and using your pre-frontal cortex. – Shelby Moore III 44 mins ago

3 @ShelbyMooreIII: for the last time: in your original post, you explained a lot of stuff. But you didn't say anything about what you were proposing to fix/address all the stuff you explained/showed/researched. Just put that on an external site when it is the core of your feature request. – Mat 42 mins ago

4 Your number (1), (2), and (5) have been suggested before. Search meta. Your number (4) is a recursive morass, and your number (3) is simply bats: if would require more words to be written about votes than about the questions people come here to ask. Nor do (3) and (4) scale very well. Note that Stack Overflow has more than 2 million extant questions and the sequence numbers exceed 8 million. – dmckee 41 mins ago

@Mat I disagree. You are trying to micro-manage my exposition style. Just read. You protesth too much. Make your points about the suggested items and the theory behind the suggestions that I presented. Instead you are more worried about being in control of my exposition style. That is socialism. With my suggestions, we can all say what we want, and we don't have to fight over who has authority. The algorithm will decide relevancy. Google can kick your butt if ever they apply their algorithmic smarts to this problem. – Shelby Moore III 36 mins ago

4 You wonder why this was closed? "> this question will likely solicit opinion, debate, arguments, polling, or extended discussion". – slhck 36 mins ago
@dmckee Thank you for the first constructive comment. I will look at those and then reply. Thanks very much. – Shelby Moore III 33 mins ago

1 @slhck That is the point of Meta. This isn't SO. Remember? – Shelby Moore III 32 mins ago

5 Yes, of course this is the place to discuss, but not to the point where it's not about the feature request itself anymore, but about the way it is presented or written. Or socialism. – slhck 28 mins ago

@dmckee since you didn't provide links to prior discussion, I will just reply to your points. (4) recursive morass is fine. It is collapsed, most readers will never expand it. The salient point you probably missed is the relevancy data it builds from the recursive votes. (3) doesn't require anything. It is a release valve that lets people air their rebuttals. They can then condense their final thoughts back into the answer. The recursive data remains for research and for PageRank style relevancy calculation. – Shelby Moore III 25 mins ago

@dmckee (3) & (4) scale economically no problem, Joel said in the interview I linked, you need only 1 in billion pages monetized to be profitable. More data gives you more participation. I expect that people will learn to respect their own time and the futility of debating points too far. Opportunity cost will anneal that tradeoff optimally. As it is now, you try to force people to not do what they need (and OBVIOUSLY want) to do, which is to have permanent discussion in order to fine-tune top-level Q&A. – Shelby Moore III 22 mins ago

@dmckee I think there was win for SO when it did not copy the noisy format of Digg, but the problem with Digg is you are just dumped into threaded discussion with no top level Q&A format. We need to marry the best of Digg, best of SO, and best of PageRank. The other important point I made is that the rep power as an ego thing is really not desirable for knowledge formation. – Shelby Moore III 20 mins ago

4 You must be joking me. – Can't Get Enough Mahna 16 mins ago

@ShelbyMooreIII Mods have the power to delete comments if they deem them to be offensive or spam. – Can't Get Enough Mahna 16 mins ago

2 There has been one deleted comment in this whole thread, and it wasn't yours (it was deleted by the person who posted it). – mmyers♦ 15 mins ago

1 No, it's likely to be normal users of the site flagging the comments(s) as "too chatty". As per the close reason "this question will likely solicit opinion, debate, arguments, polling, or extended discussion"...which it has done. If you do want to go on, create a chat room and anyone vaugely interested will join to see what you have to say. – tombull89 15 mins ago

@mmyers My mistake. Apologies. I deleted my erroneous comment. It is the system only showing voted comments by default now. – Shelby Moore III 14 mins ago

@slhck You have so many comments already, and you've said nothing factual about the feature request. That is my point. You are focused on attitude and control over my exposition style, and not on facts and substantive (i.e. constructive) work. – Shelby Moore III 11 mins ago

I am very happy for all the downvotes. I hope I can get a record number. Am I correct this Q&A will never be deleted? So I can link to this page permanently? And the comments will remain? I hope people here don't delete their comments later. Please be a man. Let it stay there for a permanent reminder of what works and what doesn't work. I will be using this page as an example that in many of my future writings. – Shelby Moore III 7 mins ago

@slhck I have no way of verifying if you didn't downvote. You could be lying. The system allows that. – Shelby Moore III 3 mins ago edit

Happy to help maximize your down vote count with this non-request-request! – Andrew Barber 1 min ago

@Toomai It is broken. I provided links to several examples. Look in the right bar and see all the complaints you are getting about downvoting. Yes it is true that your traffic is growing, and it is true that SO is providing useful Google hits for obscure questions. I am thinking (as I mentioned in my question), that SO is not relevant for general terms. Maybe that is the fix that is needed. SO is relevant for specific coding examples only. Is that a more constructive input? It was in my question, but you didn't read it slowly probably. – Shelby Moore III just now edit

@AndrewBarber I disagree. It is a feature request. I explained the logic for it with a long explanation. Then I gave 5 specific changes. I don't know how you are defining "not a feature request", but it probably has something to do with attitude and your desire for conformance to authority of the community. That is why I went into great detail about "nice" in my question. You are focused on making everyone "nice". That will end with everyone massively angry in the end, bcz the freedom to vent (rebutt) isn't allowed. - Shelby Moore III

The link the "prevailing collective 'wisdom'" in the prior question is linked to the following (just in case they delete it):

Shelby offered an answer:
SO could have a set of canned responses for common scenarios, and let you choose from these. These could be rendered and presented differently than a normal response, so as to maximize the learning effect, plus minimize confusion and clutter.

What does this have to do with handling a user who keeps posting/deleting a message to spam your SO inbox? Aside from being a way to make it easier for such spamming to happen? – Andrew Barber 13 hours ago

1 This... uh, doesn't answer the question? Besides, this has been proposed and declined already – Yi Jiang's 独角兽 11 hours ago

@AndrewBarber Read the other answers. It was suggested that he reply to the user and explain. I suggested these be canned responses. Thus the explaining would be more FAQ-ual. The IQ here is impressive. – Shelby Moore III 11 hours ago

@YiJiang's独角兽 a link? You claim. – Shelby Moore III 11 hours ago

1 @Shelby You seriously need to stop with the insults. – Andrew Barber 11 hours ago

@AndrewBarber you too, "@Shelby I'm sorry, but you seem to be utterly tone deaf here. Good luck to you. – Andrew Barber 57 mins ago". Then you come here to attack in other place. Go politics! Rah, rah, rah. – Shelby Moore III 11 hours ago

@Shelby and you need to start applying your extreme IQ to learning how to use the site properly. NULLuserException and I have both told you repeatedly tonight how you make feature suggestions. – Andrew Barber 11 hours ago

@Shelby You were and continue to be completely tone deaf about what is happening here. No insult there. – Andrew Barber 11 hours ago

@AndrewBarber I disagree. Meta is a place to express ourselves about these matters. You may not like that people express themselves. Good night. – Shelby Moore III 9 hours ago
And I have told you already that it is pointless for me to fight the politics. It is better to leave SO. I am sure you are happy if I leave. So why keep peskering me about why I didn't post suggestions when I already said that design by committee doesn't work well. As evident by how broken the SO game theory model is (IMO). – Shelby Moore III 9 hours ago

@Shelby You can express all you want. You continue to do things like posting feature requests as answers and comments, when you have been told how to properly post them. – Andrew Barber 9 hours ago

@AndrewBarber Please stop talking to me in a dictator tone. I do what I want. You do what you want. That is called freedom. If it doesn't work out here, I leave. No big deal. – Shelby Moore III 9 hours ago

@Shelby Please stop doing everything contrary to how the community operates, then being surprised when people have less and less patience for you. – Andrew Barber 9 hours ago

@AndrewBarber Please don't tell me what to do. I am not your slave. – Shelby Moore III 9 hours ago

@Shelby I do what I want. You do what you want. This is called freedom. Sound familiar? – Andrew Barber 9 hours ago

@AndrewBarber Thanks. So keep checking my comments. I won't always be doing what you told me to do. It isn't to make you angry. It is because this is a game model. You are gaming it in your way and I am gaming it my way. That is exactly what game theory expects. – Shelby Moore III 9 hours ago

@Shelby Of course it's a game model. Seems rather silly to think you need to say so. – Andrew Barber 9 hours ago

@AndrewBarber Yeah it is silly I needed to tell you so. I need more downvotes. Can you help me out? We can make SO look "intelligent". – Shelby Moore III 9 hours ago

@AndrewBarber You remind me of Steve Jobs, "just don't hold it the improper way". hahaha. Stupendous advice, thanks. Calling our emotionalites who are defending the collective, I need more down votes please. I want a negative rep. Can you do it? – Shelby Moore III 3 hours ago

@Shelby You have problems. – Andrew Barber 36 mins ago

@AndrewBarber What sort of problems are you alledging? Note I have saved this entire discussion, as well as the entire Q&A that was deleted. Google will never forget your name. – Shelby Moore III just now edit

@Shelby You need a hobby. Was that Google thing a threat or something? – Andrew Barber 9 mins ago

@Shelby as for your saving of everything; that's fine. See the network FAQ. Be sure you are following the requirements there. – Andrew Barber 4 mins ago

@AndrewBarber I have a right by law to save evidence of defamation (when I have already examples of being deleted). I have a right to save the trails of information to it. – Shelby Moore III just now

Here is the "expression vs. statement" link contents (again in case they delete it again, they already deleted the first set of discussion):

Most precisely, a statement must have a "side-effect" (i.e. be imperative) and an expression must have a value type (i.e. not the bottom type).

The type of a statement is the bottom type.

Void is not precisely the bottom type (it isn't the subtype of all possible types). It exists in languages that don't have a completely sound type system. That may sound like a snobbish statement, but completeness such as variance annotations are critical to writing extensible software.

Please don't redefine general technical terms 'expression' and 'statement'. My comments and answer are correct for C#. If f(); has the type void and has no side-effects, then it is a NOOP. A good compiler will not allow NOOPs. If f(); has no side-effects and its return value is not used, it is also a NOOP. I did answer the question w.r.t. C#. I answered with one precise sentence. That sentence is correct for C#. I then elaborated about what void in C# means in terms of type theory. Type theory applies to C#. – Shelby Moore III 9 hours ago

See my comments under Mark Cidade's answer, which explain why a statement is often in reality the bottom type and not the unit type. To say that a statement "does something" is incredibly imprecise, as an expression also "does something"-- it evaluates to a value. I know what people are trying to say, they just don't choose precise words and definitions. The precise word is (a statement must not be) referentially transparent (i.e. imperative). That is more precise than "does something" or "side-effect". – Shelby Moore III 9 hours ago

A statement need not have a side effect. For instance, in python pass is a statement. It is a no-op, and it does not evaluate to anything. – Matthew Schinckel 6 hours ago

@MatthewSchinckel If it doesn't have a side-effect, then it is either an expression or a NOOP. A NOOP does nothing, so it can be removed from the program. It is a simple process of logical elimination. If you don't define statement as requiring a side-effect, then statement is same as expression. What other attribute would you use to differentiate a statement from an expression? It is amazing to me that I would even have to point this out, because it is such a simple logic and so fundamental to computer science. But that is why I teach here and take downvotes from the illiterates. – Shelby Moore III 4 hours ago

Flagging your continued insults. – Andrew Barber 27 mins ago

@AndrewBarber Illiteracy is not an insult. It is state of learning. That is what SO is for. The downvotes from people who are still learning, is a fact of how SO operates. Now your allegation is an insult, because it is not factual. But I will not flag it. I will be saving all these comments, in case they get deleted. As further evidence of a defamation case against you, should it become necessary. – Shelby Moore III 1 min ago


Posts : 3107
Join date : 2008-10-21

View user profile

Back to top Go down

Complete solutions to the "Expression Pro​blem"?

Post  Shelby on Sat Dec 10, 2011 5:01 pm

They closed this, so I am afraid they might delete this, and this was very valuable research. So I am saving it here in the internal SO format. I can covert it later. I also scraped the comments.

The Expression Problem is a fundamental issue for achieving extensible programming, especially distributed and large-scale development, but it also applies in the small. Thus a complete solution is very important for the progress of computer science.

There is a related prior question, [What is the 'expression problem'?][1].

I am asking for **complete solutions** to the Expression Problem ([Wadler's definition][2]), as equivalently reformulated below.

> **“** The Expression Problem requires the capability to add a subtype (case)
> that interopts with preexisting function(s), and add a function that
> operates on both the preexisting subtype and the new subtype. This
> must be possible [without (modifying nor) recompiling][3] the
> preexisting subtype(s) and function(s), a.k.a. “separate compilation”
> or “independent extension”. Since static type safety must be retained,
> there must be no [default exceptions][4], and objects of the extended
> type must be [substitutable][5] for the preexisting non-extended type. **”**

**Note**: I am adding the vice versa requirement (objects of the preexisting non-extended type must be substitutable for the extended type), because _otherwise the extension is not interoperable_ with the API it is extending.

The Expression Problem doesn't exist in [dynamic (a.k.a. statically unityped)][6] languages, because they have only one static type.

I hope the best answer(s) may offer some explicit or implied insight into the tension between the tradeoff of [subtyping vs. functional (de)composition][7].


**Dynamic languages** (are off-topic)

I not asking about dynamically (untyped) languages. I don't want a subjective debate about the relative merits of dynamic vs. static typing. Perhaps the [declarative vs. imperative][8] tradeoff is as important and controversial.

I can state objectively that not having the Expression Problem doesn't necessarily make dynamically typed languages more extensible, it just means the invariants of extension are not checked by the compiler. So in that sense, dynamic languages never solve the Expression Problem.

I can also state objectively that new errors due to unchecked data type assumptions can manifest both in the preexisting code, as well as the new code. Thus unit testing [can't catch all][9] the errors (but to be fair, [neither will static typing][10]).

The only 'untyped solution' I know of is an oxymoron-- to limit extension to what is anticipated, i.e. ad-hoc, simulated typing at runtime. Or one could have started with a sound static type system. **“** [pay me now or pay me later][11] **”** may apply, but your mileage may vary.


@StefanKendall Afaik, nails galore of boilerplate tsuris to smash away (including at the language design layer, see my answer), Adapter pattern, Decorator pattern, Visitor pattern, extending an Interpreter pattern, … or did I not get your point? Afaik, the issue is fundamental and pervasive. – Shelby Moore III Dec 7 at 3:34
@StefanKendall here is an example of extinguishing boilerplate with multimethods language solution to the Expression Problem. – Shelby Moore III Dec 7 at 4:22

Putting a WORD JOINER between 'P' and 'r'. Clever. – Prateek Dec 7 at 4:49
@Prateek who provided that edit? I originally had 'Rroblem' in the title – Shelby Moore III Dec 7 at 5:16

It was edited by cobbal, as you can see in the revision history. – Prateek Dec 7 at 5:53

The authors of the paper Modular Visitor Components: A Practical Solution to the Expression Families Problem claim to have a solution. – michid Dec 7 at 10:54

@michid I am reading. On pg.3, he claims the EP doesn't require static interoperability between the distinct types due to extension, and names this the EFP requirement instead. Imho, it is necessarily follows due to the EP, that the types must interopt. On another point, my answer provided polymorphic (subtype and ad-hoc) but not a functional decomposition solutions, so I was planning to read this paper. I only showed in my answer that the functional decomposition wasn't trivially solved. – Shelby Moore III 2 days ago

@michid The visitor pattern is also covered in the simpler form. It appears to add more boilerplate than the direct method I provided in my answer. And for what benefit? Note I edited my answer to provide a fundamental tradeoff rule at the end of the "Mutable Partial Solution" section. I don't think any solution will escape that tradeoff, so I will lean towards those with less boilerplate and which are simpler to understand and explain. – Shelby Moore III 2 days ago

@michid Btw the reason I am nearly certain that tradeoff rule will apply to every possible solution, is because of my interpretation of how Russell's Paradox applies to subtyping. I am very satisfied how my answer ended up, showing clearly the tradeoff between the idiomatic Haskell solution and Scala's solutions. I even showed that with bidirectional interoperability, even Odersky's solution has default cases. It must be that way, else knowledge formation couldn't exist. – Shelby Moore III 2 days ago
@AndrewBarber It is encouraged actually, here, here, here, and here. Actually if you study the edits and times for my answer, you will see that I did not arrive at the complete answer until after thinking about the comments from michid and others in private email. I was doing a brain dump when I posted the initial Q&A, so I would organize & not lose my research to that point. Since SO, I loath blogs. – Shelby Moore III yesterday
@AndrewBarber My answer didn't change much, but the concept of the tradeoff rule was not evident to me when I initially asked and answered my question. I knew I was still researching it, my brain was overflowing with details that I wanted to write down once and in one format, so I chose SO. I posted the answer immediately (even it wasn't yet fully vetted), because I knew most would read only once when the question is posted. I loath blogs because their linear format and "no man is an island". Learning synergy gained by posting to SO (rep not important to me). SO a gift from the "hacker god" – Shelby Moore III

=================My first answer got 10 votes (before they started the downvote war ===================

Let's build from partial solutions using the Scala language, then end with Haskell.

**Add Function but not Case**

Given a _preexisting_ supertype `Interface` and subtype `Case`, with a `function`.

<!-- language: lang-scala -->

/*sealed */trait Interface
case class Case extends Interface

object function {
def apply : Interface => … = { case Case … case _ => error }

Without modifying the preexisting code above, below a `function2` can be added to the preexisting subtype `Case` (and potentially to a new subtype `Case2`).

But a new subtype `Case2` can't be added to the pattern matching of the preexisting `function` above. Thus a runtime typing error for the default case in `function` above would occur if we create the new subtype `Case2` below (thus violating the static type requirement of the Expression Problem).

The runtime typing error is eliminated by declaring above `sealed trait Interface`, which would generate a compiler error if the `case class Case2 extends Interface` declaration is attempted below.

<!-- language: lang-scala -->

// case class Case2 extends Interface

object function2 {
def apply : Interface => … = { case Case … /*case Case2 … */case _ => error }

**Add Case but not Function**

Given a _preexisting_ supertype `Interface` and subtype `Case`, with a `function`.

<!-- language: lang-scala -->

trait Interface {
def function : …

class Case extends Interface {
override def function : …

Without modifying the preexisting code above, below subtyping can add a new subtype `Case2` to the preexisting supertype `Interface`, and it can add a new `Interface2` and `function2` to the new subtype `Case2` but not to the preexisting subtype `Case` above.

<!-- language: lang-scala -->

trait Interface2 {
def function2 : …

class Case2 extends Interface with Interface2 {
override def function : …
override def function2 : …

**Immutable Partial Solution**

Given the preexisting subtype `Case` is an _immutable_ algebraic type.

<!-- language: lang-scala -->

class Case( val field ) extends Interface {
override def function : …

Without modifying the preexisting code above, below a conversion to a subtype of `Case` can add `function2`.

<!-- language: lang-scala -->

class CaseWithInterface2( field ) extends Case( field ) with Interface2 {
override def function2 : …

implicit def convert : Case => CaseWithInterface2
= (x) => new CaseWithInterface2( x.field )

Any function that is going to call `function2` must be supplied an argument that is a subtype of an `Interface with Interface2`, or a `Case` which can be implicitly converted.

With some compiler and VM tricks, it might not even be necessary to create a copy of the fields to [view][15] a `Case` as a `CaseWithInterface2`. I have had some private discussions with [Andrey Breslav about this][16]. Basically the vtable needs to swappable and orthogonal to the data fields of the class.

However, there is no surjective mapping (i.e. see the error case below) from `Interface` to `Interface with Interface2`, because in order to map it, `Interface` will need to be decomposed at runtime into its infinite possible runtime concrete implementations.

<!-- language: lang-scala -->

implicit def convert : Interface => Interface with Interface2 =
case x : Case => x
case x : Case2 => x
case _ => error

**Mutable Partial Solution**

Note that a _mutable_ `Case` couldn't be copied to a subtype `CaseWithInterface2` because the mutable state may not be [referentially transparent][19] (e.g. open file handle, closure in stored function, etc). Instead it would be wrapped in an adapter pattern class, which has the performance drawback that all methods must be doubly-dispatched. And any inheritance tree of `Case` is hidden in the wrapper.

As with the immutable solution, it is possible to subtype every type in the inheritance tree below and including the type that is extended with a new method (e.g. `trait Exp`[1]). Scala [facilitates this pattern][14][1].

But the problem remains of how to adapt a runtime object of the preexisting type `Case` to the extended subtype `CaseWithInterface2`. Scala's [implicit views][15] don't help, because the adaption problem remains, regardless that views are also not a [bijective contract][9].

The [issue of a default case in new methods][18], applies because for example an `Interface` might not have a conversion defined for the concrete class of the object referenced at runtime, as shown in the previous section.

One strategy is that every function that wants to interopt can input the [union type][17], e.g. of `Interface ∨ (Interface with Interface2)` (or the boxed `Either[Interface,Interface with Interface2]`), and provide a legacy functionality for `Interface` or return `None` (where `None` is analogous to a default case).

There is simply no way of avoiding that if there is virtual inheritance, and the family of possible subtypes is open, then there is no way to add functions that won't have a default case, and interopt fully. You will see this rule holds true for Haskell in the next section, as it gives up virtual inheritance in order to get global compile-time detection (as a compile error) of these default cases.

[1] [Independently Extensible Solutions to the Expression Problem][14], Zenger, Odersky, section 3.3 Operation Extension.

**Typeclass Solution Can't Virtually Inherit**

Haskell's `class` (a.k.a. typeclass) and `data` are roughly analogous to Java's `interface` and `class` respectively. A typeclass declaration can inherit from one or more typeclass(es), e.g. `(Super1 x, Super2 x) => class Sub x`.

The `data` type specifies the immutable field(s), if any, for each named constructor and optionally includes multiple constructors. The name of each constructor is analogous to a distinct Java `class`. Thus `data` type doesn't define method functions. The method signatures are declared in the typeclass and an `instance` attaches a typeclass and provides the implementation for a `data` type.

<!-- language: lang-hs -->

class Interface x where
function :: x -> …

data Case = Case field

instance Interface Case where
function (Case field) …

Without modifying the preexisting code above, below employing an `instance` declaration, a new `function2` can be added to a new `Case2` and preexisting `Case` `data` types, declaring each to be a subtype of a new typeclass `Interface2`.

<!-- language: lang-hs -->

class (Interface x) => class Interface2 x where
function2 :: x -> …

instance Interface2 Case where
function2 (Case field) …

data Case2 = Case2 -- constructor with no field

instance Interface2 Case2 where
function Case2 …
function2 Case2 …

The new `Interface2` has been inserted into the inheritance hierarchy between the preexisting supertype `Interface` and subtype `Case`, yet this [typeclass pattern][8][2] allows for **“** separate compilation **”** (i.e. doesn't require recompilation of the preexisting `Interface` and `Case`), because in Haskell an interface isn't attached to the runtime object (of a `data` type). There is no runtime VTable dispatch and all function calls are statically resolved at compile-time.

This flexibility is available because **Haskell can't do virtual inheritance**.

Thus, lists elements [cannot be heterogeneously subtyped][9], without complex constructions such as the non-extensible [existential types, convoluted HList][13][3], or [union types][12].

Also, for example an `Ord`(ering) of `Int` **“** [can only be done one way][10] **”**. An `OrdDivisible` can't be inserted in the inheritance hierarchy between a supertype `Ord` and subtype `Int` (to provide an alternative implementation of the methods of `Ord`). Thus an `Int` can't be an argument for a function that expects a parameter of type `OrdDivisible`. This [breaks compositionality][11], which is afaik one possible reason some functions in the Haskell Prelude have boilerplate (multiple definitions) to handle specific types.


> **“** A typeclass declaration can inherit from one or more typeclass(es),
> e.g. `(Super1 x, Super2 x) => class Sub x`. **”**

This is a compile-time constraint on the type parameter `x`, not runtime virtual inheritance, i.e there is no (cf. **“** [such as a][4] **”** ) VTable.

(Tangentially, where the `=>` [constrains a type parameter][4] of a `data` type, it is roughly analogous to Scala's `>:` [upper bound][7].)

To achieve this, the [multiple inheritance of interface][5] must flatten to a single implementation and not even [single-inheritance][6] of implementations.

In addition to providing the benefit of **“** separate compilation **”** of extension, this eliminates (compile-time and runtime) ambiguity caused by overloading, thus [facilitating global][2] type inference and the performance benefit of eliminating [invokevirtual][3] (respectively).


And a significant violation of single-point-of-truth in Haskell, is type parameter bounds for subtypes must match those of the supertype interface, i.e. the type parameter of the subtype may not have a more restrictive bound[4].

[2] [Software Extension and Integration with Type Classes][8], Lämmel, Ostermann, section 2.4 The expression problem.

[3] [Software Extension and Integration with Type Classes][13], Lämmel, Ostermann, section 4.4 Explicit vs. implicit subtyping.

[4] [Generics of a Higher Kind][20], Moors, Piessens, Odersky, section 7.3 Exceeding type classes.


Notice in the Mutable Partial Solutions section, I added a tradeoff rule that says all possible solutions that bijectively interopt, must either have default cases (runtime exception for missing case) or no virtual inheritance (a compile-time error for missing case). Thus I am correcting Odersky's claim that his solution doesn't have default cases, because it does when it is used with bijective interoption. Multmethods bijectively interopt, that is why they have a default case. See also my comments to michid under my answer. – Shelby Moore III 2 days ago

In the Mutable Partial Solutions section, I suggest the alternative coding style to use a union type to lift the match default case out of the function to the input parameter type, where the supported types are thus enumerated and type checked by the compiler. This is analogous to first-class concept in Extensible Programming with First-Class Cases. Thus, my tradeoff rule holds true for that research paper. None of this eliminates the "default cases". It just pushes them to different places. – Shelby Moore III 2 days ago

==============Someone else provided another answer (but he changed his username from his real name)======================

Did you have a look at Wouter Swierstra's [Data types à la carte][1] (J. Funct. Program. 18(4): 423-436, 2008) for a solution in Haskell? From the abstract:

> This paper describes a technique for assembling both data types and
> functions from isolated individual components. We also explore how the
> same technology can be used to combine free monads and, as a result,
> structure Haskell’s monolithic IO monad.


I had read it isn't symmetric. Also I linked the union in my answer to more comments from Oleq. – Shelby Moore III Dec 7 at 11:54

1 Please see my comments to michid underneath my question. – Shelby Moore III

======================my 2nd answer initially had 1 vote before downvote war started==================

The scientific method requires that if I state a new rule, I must try to break it.

In this respect, invalid answers can be a valid activity. This answer demonstrates why my "tradeoff rule" is likely correct.

I started to write this answer, thinking I had discovered a partial exception to the "tradeoff rule" that I provided in [my first answer][1]. But if you follow this to the end, you will see I did not.

Scala can combine a [Haskell-like typeclass][2], with virtual inheritance … well I thought almost. Start from the “Add Case but not Function” of my first answer.

<!-- language: lang-scala -->

class Case2 extends Interface {
override def function : …

trait Interface2[T <: Interface] { // typeclass
def function2 : T -> …

implicit object `Interface2Of(Case)` extends Interface2[Case] {
def function2 : Case -> … // no 'override' because the implicit
} // object is resolved at compile-time

implicit object `Interface2Of(Case2)` extends Interface2[Case2] {
def function2 : Case2 -> …

// Example use-site function, can input Case or Case2 (*plonk*!)
def test[T <: Interface](param: T)(implicit tc: Interface2[T]) =
param.function( … ; tc.function2(param …

So this means there are no ”default cases”[1], because they are checked for at compile-time and generate compile-time errors. The caller of `test` must provide the `Interface2[T]` argument explicitly or in the implicit scope. See section 21.2 Rules for implicits of Programming in Scala for the scoping rules.

[1] The term "default case(s)" means code path(s) for which we don't have the `function2` available.

So what is the caveat? Note that `trait Interface2[T <: Interface]` cannot be `trait Interface2[+T <: Interface]`, because `T` is used in the contravariant position, i.e. the input parameter of `function2`.

Thus, if for example `SubCase` is a subtype of `Case`, then an `implicit object` must be declared for it, even if it inherits the same `function2` implementation. So in that narrow sense of needing to write more boilerplate, virtual inheritance is lost. But virtual inheritance is retained in the important ways, e.g. heterogeneous lists of `Interface` (see my first answer).

This appears to demonstrate a unique power of Scala. The virtual inheritance tradeoff initially appears to be orthogonal and isolated to the typeclass axis, i.e. the selection of an alternate dictionary (a.k.a. vtable) only for the extended portion of the interface.

But I missed something essential, *plonk*! We may have no way to supply an `Interface` argument to the `test` function, because there might be no way to define an `implicit object` for `Interface`, because we may need to know the concrete class in order to implement `function2`.

Thus my "tradeoff rule" remains true. Virtual inheritance would be lost in important ways, e.g. can't apply `function2` to a heterogeneous list of `Interface`.

Tangentially, there is an [optional syntactical sugar][3] for writing the use-site function, although I am not unequivocally convinced it is more readable.

<!-- language: lang-scala -->

def test[T <: Interface : Interface2](param: T) =
param.function( … ; implicitly[Interface2[T]].function2(param …


This also demonstrates why checked variance annotations of Scala are a very important language feature, otherwise the type system is not sound, because without enforcing the invariance it could have let me do virtual inheritance where it would break at runtime. – Shelby Moore III


Posts : 3107
Join date : 2008-10-21

View user profile

Back to top Go down

Scala runs in the browser as a Java applet

Post  Shelby on Sun Jan 22, 2012 4:15 pm

That means if I can succeed to get Copute to compile to Scala, then Copute will run in the browser as a Java applet too.

That means if we could write how webpages in Copute and any libraries and DSLs that we create which might be superior to HTML and JavaScript.


Posts : 3107
Join date : 2008-10-21

View user profile

Back to top Go down

re: CyanogenMOD, the third-party, fully-open, bloatware-free port of Android, has recently passed a million installs

Post  Shelby on Sun Jan 29, 2012 11:49 pm

Shelby wrote:
On the issue of whether common users will replace their cell phone OS-- in the SMS capital of the world (Philippines), dumb phones used to be sold locked to the simm card of one carrier (i.e. Smart or Globe), and it was nearly ubiquitous for customers to have one of the hundreds of thousands of small cell phone shop make the cell phone "open line".

This may not apply in the USA where legal control over retail can be quite effective, but I think statistics show that the exponential smartphone growth is now in the anarcho-capitalistic (laissez-faire) "Wild West" of the developing world.

If 3rd party innovation of the OS ever accelerated beyond the rate at which Apple, Google, and vendors could pace, and these were popular innovations, then the wall garden would collapse. It would only take one very popular feature with vendors several months behind, e.g. analogous the "open line".


Posts : 3107
Join date : 2008-10-21

View user profile

Back to top Go down

Silicon valley corruption

Post  Shelby on Wed Feb 01, 2012 6:16 am


Posts : 3107
Join date : 2008-10-21

View user profile

Back to top Go down

Domain names more valuable than housing

Post  Shelby on Wed Feb 01, 2012 12:45 pm


Posts : 3107
Join date : 2008-10-21

View user profile

Back to top Go down

Declarative Programming with State

Post  Shelby on Tue Feb 07, 2012 1:41 am

David, I posted a comment to your blog about declarative programming. This updates my current thinking on our past discussions. What I didn't realize that my prior email to you, was essentially driving to the Actor model. My comment apparently ended up in Wordpress's spam queue, so I have duplicated it below.

Shelby wrote:
1. HTML is commutative when employing CSS 'position:fixed' or
'position:absolute' with distinct 'z-Index' properties.

2. Declaring an environment-independent order (e.g. not time-dependent) is a valid declaration that doesn't violate the concurrent and reactive properties, and thus should be allowed to selectively disable the commutative property. CSS 'position:relative' is declarative ordering with respect to the parent, analogous to a function call or an attribute argument list of the parent declaration.

3. HTML is not idempotent, not even when employing duplicate 'id' attributes, because duplicate 'id' attributes are illegal and have undefined behavior.

4. Conceptually analogous ditto #2 for #3, idempotence could be selectively disabled, for as long as there is no environment dependency and thus concurrent and reactive properties are not violated. For example, declaring an event handler that creates a new object. Otherwise how can declarative programming create new objects?

5. How can declarative programming most generally interopt with environmental state, i.e. what is the general model of declarative interoption of modules?

Assume a referentially transparent (RT) expression, that calls a pure function and that function inputs an immutable copy of the environment and returns a modified copy of the environment. Assume an non-RT expression which contains that RT expression and stores the value of the returned environment. This non-RT expression is equivalent (except for atomicity of multiple changes) to calling an impure function that inputs an immutable copy of the environment and within the function writes state changes to the environment. It is critical that this impure function does not read changes to the environment, i.e. it is pure other than written side-effects to the environment, thus the concurrent and reactive (and even parallelism) properties are not violated.

I have written about how to implement this with type safety using Scala dependent method types.

This impure function is analogous to an Erlang-style Actor. It sends messages (writes) to the environment, and responds to messages (reads) only from its arguments it is called. The key revelation of Actors is they interface with the environment declaratively, in that they can exchange state only via incoming messages and that the order messages are received is asynchronous (i.e. undefined, thus sends and receives are commutative).

An Actor that reads mutable state (not from the input message arguments), even if it is persistant (between input messages) state, is not pure and thus not reactive and thus not declarative. The read expressions are not RT, and thus are not modular for composition. This Serializer type of Actor is necessary to do coordination or to have deterministic persistant state (there is dynamic, stochastic and potentially resilient state in the distributed actors). Note that message sends are RT within the scope of processing a single input message, and thus are modular for composition of the programming an Actor's message processing function.

6. Persistent immutable data structures with structural sharing are the most efficient for exchanging mutated state. Rich Hickey discusses this (see 23:50min). The atomicity of state changes in the Actor model are handled either by the fact that a message receive is atomic, or for multiple coordinated Actors using an intermediary Serializer. The Lost Update Problem should be handled in the messaging protocol, e.g. "add to list if not already in list" or "write this value, if current value is this old value, else..." (include an edit id in immutable structures for faster distributed equality comparison).

7. Comments on Hickey's criticisms (see bullets in the "Message Passing and Actors" section).

* Deadlock should be impossible because there is no way for an Actor's message processing function to lock a resource on another Actor and wait before replying to the input. A deadlock requires two process to lock the same two resources in opposite order and wait for the locks. It is true that timeouts (stored in a Serializer for persistence) will be necessary on expected callback replies, which makes more resilient and modular programs, even if the persistent (shared between Actors by persisting between input messages) state is all on the local machine (e.g. crashed modules). Non-persistent local data can be r/w directly with no messaging. A non-serializer Actor's message handling function is pure (except for sending msgs to other Actors), thus it can be serialized to send it to a distributed instance, thus the bifurcation should not occur and should be handled in the Actor library.

* Afaics, the Actor library can be just as efficient between local Actors. I showed that function calls are equivalent to message passing in #5 above.

* Afaics, it is good modular, resilient design. The Serializer Actor enables coordination.

* Afaics, the Serializer Actor can be a local persistent state store to give same non-distributed semantics.

8. Comments on David Barbour's criticisms (see bullets in the "Some ActorsModel Skepticism" section).

* Why can't a timeout be placed on expected callback reply to a message? This can be stored in the Serializer. As for the code for the non-serializer Actor, this is a caching not a garbage collection issue, since it can have only one value. Distributed values are copies and can be discarded immediately upon return of Actor message processing function.

* What is wrong with a persistent serializer?

* In my vision, there is a serializer that is coordinating which Actors are responding to which events. So the CPS could update the behavior for an event at the Serializer.

9. I am adding the concept of a Future, which encapsulates a callback as an immutable value, so that multiple callbacks can be multiplexed as Future objects as arguments in pure functional composition within the Actor's message processing function. When the value is needed, it will callback on function supplied to the Future.get and then return from the Actor's message processing function.


Posts : 3107
Join date : 2008-10-21

View user profile

Back to top Go down

Programming Language Popularity

Post  Shelby on Wed Feb 15, 2012 8:19 pm


Posts : 3107
Join date : 2008-10-21

View user profile

Back to top Go down

Never (dead)lock, always fork (i.e. copy and edit); making changes first class

Post  Shelby on Sun May 06, 2012 10:00 pm

Copute doesn't need to be commercially viable, just needs to attract enough use to advance the language to being a professional tool. I am creating Copute, because I am sick of all the other languages. There are few critically important things I am fixing with Copute. Once I have the tool I want, then I will begin to create commercial products again.

Indeed Regex is not Turing complete, nor is HTML. But Javascript and most programming languages are Turing complete (i.e. unbounded recursion). And one use case is where we need to leave the data types open to extension (click here for an example). The reason that such virtual dispatch is open recursion, is that we can't prevent at *compile-time* the dynamic type from calling us. So I must disagree, unbounded recursion is every where in dynamic real life.

I had a breakthrough at 3am in a half-dream state. I realized "never lock, always fork (copy)". Distributed version control showed us that "resource contention" should be resolved socially, not by forcing centralization:

"I know, it’s strange... since 1972 everyone was thinking that we were manipulating versions, but, it turned out, surprisingly, that thinking about the changes themselves as first class solved a very important problem: the problem of merging branched code."

"The locking model was founded on two assumptions. First, that that modification conflicts would be frequent and severe enough that they could only be... ". ...automated. I think Eric is wrong. The problem is always that resource conflicts are a social issue, it is just that we haven't designed our data structures correctly. For example, if I want to post a tweet, it should no go in a centralized DB, but rather in my DB, and then my DB should send a notification to everyone on the watchlist in my DB. No locks needed.

I also realized how to handle the typical drag-n-drop event handling case without any impure functions. Click here for an impure way of doing it, that illustrates the problem (note Adobe software is cited as a use case).

The key is to put the list of events being watched in a data structure that is the input and output of the handler function. This data structure can be set into a GUI widget at construction time.

So the big win, is that I don't need deadlock prevention, and I can make the Copute language entirely pure. Thus I can simplify many things, such as never will there be an if without a matching else, which solves the dangling else ambiguity of impure programming languages. And I can eliminate many concepts, such as setters and getters. This was the big design win I had expected from the beginning, but when I was studying how to handle events purely, I somehow got sidetracked from my original thinking that it could be done with pure functions.

Note there are advances in making immutable data structures as efficient as mutable ones.

Regex are finite automa, not open to new states. They are static, and not dynamic.

It is interesting example of inverting a problem, when we convert an unsolvable local contention (e.g. local locks can never be guaranteed to not deadlock in a distributed case) into a global solvable one, as I explained previously. It seems conceptually analogous to how we use limits (i.e. approaching a point but never reaching it) in definite integrals, because when we find the area under a curve, we can't do it by sampling the area under each local point on the curve, because there are infinite such points, i.e. an unsolvable problem. This is because a point on a curve is infinitesimally small. And the inverse of the integral (derivative) gives us the slope at a point on the curve, without having to take the slope between the two points closest to either side of that point (because again there is no such two points, as there are infinite points between any two points on a curve).

Thus I had the thought that the essense of limits are to make the shape of the function's curve (slope) first-class, i.e. we don't even care if the functions have a value at the limit:


Posts : 3107
Join date : 2008-10-21

View user profile

Back to top Go down

Computer performance will not stop doubling every 18 months

Post  Shelby on Fri Oct 05, 2012 5:47 am

Shelby wrote:
Specialized processors are more efficient in terms of silicon expended for the task they do, so the equation is they are desired when the task they do is frequent enough that the silicon efficiency gained is positive overall, i.e. the duty cycle of the specialized task must be factored in (as well as other considerations such as I/O load on the general CPU, etc).

That silicon (and energy) efficiency equation can be applied vice versa, in that making the general CPU simpler (e.g. RISC) can lead to greater silicon efficiency, because the complex instruction sets have a lower duty cycle.

I expect that for some years or decades the number of cores will continue to increase in line with Moore's law. Some ideas I have seen using a material other than silicon, 3D circuits (Intel’s tri-gate technology), and making cores simpler.

Ultimately the amount of processing we can fit in a very small gadget will reach a limit:

However, there is solution to this. With near-field radio (e.g. Bluetooth, etc), we can put more cores some where on our body or clothing and offload processing from the gadget we hold in our hand. Hopefully we can charge it without wires too, so we don't have to think about it. Hopefully these spare processors become so cheap that they come standard in clothing and shoes, etc..

Identifying parallelism in software is not the same as concurrency:

And we can coax parallelism into a series of conditional operations on sets, by using a State monad and Traversable:


Posts : 3107
Join date : 2008-10-21

View user profile

Back to top Go down

End-to-end principle

Post  Shelby on Sat Oct 13, 2012 3:21 am

Shelby wrote:
End-to-end principle in two words: maximize degrees-of-freedom.

Degrees-of-freedom is a form of potential energy.

Noise is signal or vice versa, depending on the relative perspective (resonance) of the observer with the transmitter.

Don't fight the Second Law of Thermodynamics, which says the entropy of the universe trends to maximum (meaning *independent* possibilities).


Posts : 3107
Join date : 2008-10-21

View user profile

Back to top Go down

My discovery about type theory

Post  Shelby on Sun Oct 14, 2012 9:35 am

Wow, I have now contributed to fundamental type theory research:


Posts : 3107
Join date : 2008-10-21

View user profile

Back to top Go down

Why we need more granular competition in the Inverse Commons

Post  Shelby on Wed Oct 24, 2012 12:32 am

I am very happy to see that even the creator (promoter) of the term "open source" is now running into the problem I intend to solve:

And to achieve that granularity, the language was must be high-order typed (e.g. monads, etc), and Python is unityped (no compile-time typing).

I know what I am doing. I just need to execute more efficiently than I have been! (and I mean more efficiently!)


Posts : 3107
Join date : 2008-10-21

View user profile

Back to top Go down

When to close source

Post  Shelby on Thu Nov 01, 2012 4:47 am

Shelby wrote:
"The Catheadral and The Bazaar doesn’t offer any solution (proposed business model) for this."

The business models were presented in the Magic Cauldron, not CatB. There is a section "When to be Open, When to be Closed":

It states clearly that we share knowledge where the return on sharing (in the Inverse Commons) is greater than the return from hiding the knowledge. In the case of shared knowledge collaboration that doesn't organically materialize due to the transaction (mostly defocused communication overhead in this case of GUI stack programming) costs being greater than what a focused individual or small team can accomplish, then the Theory of the Firm predicts the corporation to be profitable by managing those costs, i.e. closed source wins. I covered this in my recent overview of the knowledge age:,%20Rise%20of%20Knowledge.html#KnowledgeInvesting

My takeaway from this is that as your programming language models become modular, the closed modules can be extracted with more granularity, thus sharing more modules. Eric mentioned this in the "Reasons for Closing Source" section:

"The separation of function would enable you to guard the crown jewels (the schema) while getting maximum benefit from open-sourcing the engine"


Posts : 3107
Join date : 2008-10-21

View user profile

Back to top Go down

Pure functions have opaque, systemic side-effects especially in lazy languages

Post  Shelby on Mon Nov 05, 2012 1:58 pm

Shelby wrote:
The complaint is more appropriate for lazy languages.

In a lazy evaluation strategy (a.k.a. call-by-need) language such as Haskell (which happens to be the language strives for the most strict pureness of functions), memory space and execution time leak determinism is quite opaque from the programmer's abstract model of the computation (thus can appear random or indeterminate), because the execution of functions does not proceed in the written nested order, but rather determined at run-time by the input to the program.

Whereas, in a eager evaluation strategy (a.k.a. call-by-value) language (as most other popular languages are), these systemic side-effects are transparent at compile-time and thus are significantly orthogonal in most cases (in the programmer's mind) to the abstraction contract that the pure function provides.


Posts : 3107
Join date : 2008-10-21

View user profile

Back to top Go down

Why Not Events (it's not a question)

Post  Shelby on Thu Feb 28, 2013 4:05 am

Shelby commented:
Is an example of declarative state as follows?

if mode and mousedown and joyleft: ...

Where the equivalent event model with local state would be as follows, assuming we have CPS transform for inversion-of-control[1].

joystate = none
while true: joystate = wait joychange
while true: if mode and wait mousedown and joystate == left: ...

The former can be implemented without local state either as a callback that runs periodically (e.g. picosec resolution) with the current states of mouse and joy as inputs, or watching for events on both mouse and joy, with the state of the other as input to the callback.

What I am trying to illustrate is that there is always an event occurring some where in code, the distinction is all about how we express the semantics of the program. Declarativity is about tighly coupling intended semantics[2] to the programming model.


Shelby replied:
To whatever extent you avoid eventful abstractions, there is (literally) less code you can point at and call eventful.

Correction accepted. Follows an eventful and a non-eventful example.

if menuishidden and mousedown: showmenu
else if menuisshown and nothover and mouseup: hidemenu

If hover or mousedown: drawmenu

The eventful example is toggling local menu state, thus is not spatial idempotent nor resilient. I refer to your blogs Comparing FRP to RDP[1] and Local State is Poison[2].

It is not enough to feed external state to a FRP, because local state can still be semantically achieved even it is accessed from a pure function.

The non-eventful example depends on a mousedown state change, yet the signal's result (whether menu is drawn) does not depend on catching the exact instant when the mouse went down in order to synchronous all the local state variables (an exponential permutation of complexity).

We should think of the local state variables as infinitesimally small samples of time, whereas the mousedown state variable is pseudo-continuous in time (discrete at greater than the picosec timer resolution).

I reject the popular, vague, useless idea that “intent” has any impact on whether expression of a model is “declarative” or not. My definition for declarative is based on objective, formal properties of expressions.

Disagree. For example, multiple duplicate instances of loop control in any order with same inputs will yield the same outputs, yet it is less declarative[3] than functionally expressed equivalent. To argue that HTML is less declarative because it doesn't have the unwanted noise of global instance ids seems counter productive to me.

non-declarative languages have extraneous semantic properties, such as order of expression, that poorly align with abstractions in the problem domain

The real culprit appears to be local state (you realized that recently with Local State is Poison), a.k.a. in the real world as bickering over local perspective. Eliminating all global state and order is the antithesis of reality. As a practical existential matter, there is no such thing as global state, because (we can't instantiate infinity so) the bottom type is not instantiable[4] (in a strict language and dually for top in a lazy language).

Tight coupling between intent and semantics is explained by having useful, problem-specific abstractions. Using ‘declarative’ as a synonym for ‘domain specific’ seems a waste of a fine word.

Your concern is a conflation of domain-specific declarative with general purpose declarative models, i.e. whether a problem space is domain constrained or general purpose is not related to whether the offered solution is declarative.


More semantically correct.

while hover or mousedown: drawmenu

The distinction between `drawmenu` and `showmenu` is the former doesn't save the boolean state of whether menu is shown.

You don't really want to eliminate events, e.g. your button state change is still an event, rather you want to eliminate callbacks, because they can't be composed without local state and unavoidable ordering (since each callback and local state represents an infinitesimally small period, i.e. a discontinuity).

By feeding the state changes paired with timestamps into a pure function as inputs and receiving any changes in the output[1], events can be composed over non-infinitesimally small periods of time, i.e. sampling multiple input states over a window of time that smooths the aliasing error in the system.

This has not eliminated events, rather eliminated local state. For example, the output pane of my HTML introduction[2] has to be reparsed on every change to the editor pane. The onchange event is still an event whether it is implemented with a callback, or as a pseudo-continuous state change input to a pure function.

This is why my original comment noted that there is a still an event occurring some where. You are eliminating local state not events. Had you explained it clearly like this last year, it would have saved me a lot of time trying to figure out the essence of your idea. Now that I understand the simplicity and elegance of your idea, I like it.

Hope that helps.



The reason your idempotent and commutative definition of declarative is meaningless to me, is because if there existed a programming language where adding duplicate instances and reordering instances had no effect, then the programming language would always do precisely one behavior for any set of instances regardless of the duplicates and ordering. I have decades of real world experience with programming and I look around me in the real non-programming world, and I can't think of any correlation with that definition of declarativity.

In the real world there are many cases where the order and/or duplication that is present does not matter to the task at hand. For example, it doesn't matter to me what order the 5 potatoes are counted that I need to cook french fries. The declaration is "fetch 5 potatoes". However, I do need to declare "fetch 5 potatoes" before I declare "slice the potatoes". How did it become less declarative in a way that matters, when I just violated the commutative property?

That is why I assert that idempotent and commutative restriction only applies to those details which are not relevant to the semantics. So the order that the potatoes are counted and whether some are exact copies, should not affect the outcome of my "fetch 5" declaration. Thus my language is declarative.

You conflate domain-specific with declarative in the sense that you imply that all languages that are tightly coupled to the semantics of the intended domain, will be declarative. Designing a language to be tightly coupled does not necessarily make it declarative, because this a complex design problem that does not Halt. Domain-specific refers to targeting a language to a domain.

Declarative refers to (the degree of) achieving that target, i.e. how well the domain-specific (or general purpose) language enables one to express only intended order and duplication in the domain (or general purposes) and not unintended order and duplication.

As another evidence that your definition is vacuous and circular, consider that it is possible to code in a low-level declaratively structured language that creates unintended order and duplication in the high-level semantics.

Declarativity is only meaningful in the way I have defined it.


A pure function is always benign in composition w.r.t. to any state the caller does not explicitly modify. A non-pure a.k.a. local state is not benign and causes non-declarative reasoning under composition.

I realize that ordering and state also occur with pure functions and the state is stored externally by the caller. The distinction is that such effects can be designed to be declarative, in the way I have defined declarative. Local state paradigm can never be designed to be declarative, because it forces unintended order.

Time-dependent behavior specified declaratively means we don't accidentally specify the (unintended) ordering (and duplication) that is irrelevant to the semantics we want to express.

So I agree that to be declarative with time-dependent behavior requires not only the elimination of local state, but also the tight coupling of intended time-dependent semantics.

Now we need to find the models for time-dependent semantics which are best fit to the applied domains. No simple task.

The challenge when designing a declarative framework is to maintain the necessary generality because software is alive and never static. New features must not require waiting on a standards committee, e.g. HTML 5.

Software development is accelerating and that technological unemployment shift is the <a href=''>fascinating underlying cause</a> of the current global sovereign debt crisis.


Pondering your comment about the different ways you are thinking about modeling events, e.g. button click, it occurs to me that the problems derive from the time-dependent orders implicit in any stored state.

When we are declarative, we inherently abstract away unnecessary state.

For example, instead of modeling a drag-n-drop operation as `drag on mousedown, loop on mousemove, drop on mouseup`, we can model as `while dragging then drop`. This converts the modal on drag initialization function that sets the new state to a pure function which returns the new state while dragging.

I guess I am realizing that we must define semantics which minimize state and make the unavoidable state very closing coupled to the intended semantics.

For example, if pressing two buttons together gives a different semantic than pressing one followed the other, then we need to have a semantic for modelling a two bottom press that doesn't require modeling the separate events with local stored state. David mentioned this already.

AFAIK, David's proposed point-free semantics (Arrows) for composing signals is a generalized paradigm for his engine to globally model the multi-signal stream. I still don't have a good metal model how this is beneficial as compared to for example having an API for consuming any two events as a single one over an allowed interval? What little of understand of it, feels very abstracted away from what the programmer wants to declare.

Your blog does not show me a "reply" button on your latter posts, so I can not reply under them indented properly. So I am forced to quote from your reply, so the reader can correlate which post of yours I am replying to.

“Fetch five potatoes” is not a declaration. It’s a command – literally, an imperative sentence. If it was a declaration, it would be commutative with other declarations, because declarative sentences are commutative

Your reply indicates you've entirely missed my point as to why your definition is circular, because you are now employing that circular strawman.

Any language that is Turing complete will be able to create order and duplication (even where there was a intention to isolate it, e.g. Haskell with its pure function). Even any non-Turning complete language that accomplishes any real world task will express order.

Thus your definition is impossible, unless you want your language to do precisely nothing.

Whereas my definition is not only possible, it is precisely how we benefit from declarative languages.

Using a correct definition is crucial, because it will impact the design thought about declarative models.

Please allow a link to the prior discussion[1] which you moved from these blog comments to a google doc. I already explained the logic in those comments.


When ordering is visible but required or implicit in the syntax, you can’t tell from semantics (denotational or otherwise) whether an ordering is accidental or not

That is what I mean by "can't see".

AFAICT, you’re effectively saying that a language is declarative so long as it correctly implements a denotational semantics.

No because typing can not (and should not) capture all of the semantics of a program. At the extreme such as Epigram, we lose Turing completeness. In my prior comments, I explained how your definition also similarly degenerates due to inconsistency (either you accept inconsistency or you give up generality with the extreme being a 100% declarative program does precisely only one thing-- that which was preprogrammed in its design).

And the above explains why you still don't get my point that your definition is vacuous. C.f. the Google doc of the removed comments for the logic.

Declarativity has nothing to do with the communitivity of the denotational semantics. It has to do with balancing accidental inconsistency with generality. One of the tools for achieving that is to not allow ordering dependencies in the low-level semantics that are not relevant to the denotational semantics.

Last edited by Shelby on Mon Mar 11, 2013 9:30 pm; edited 6 times in total


Posts : 3107
Join date : 2008-10-21

View user profile

Back to top Go down

Re: Computers:

Post  Sponsored content

Sponsored content

Back to top Go down

Page 10 of 11 Previous  1, 2, 3 ... , 9, 10, 11  Next

View previous topic View next topic Back to top

Permissions in this forum:
You cannot reply to topics in this forum