Slashdot is powered by your submissions, so send in your scoop

 



Forgot your password?
typodupeerror
×
Programming Graphics Open Source Software

Tao3D: a New Open-Source Programming Language For Real-Time 3D Animations 158

descubes (35093) writes "Tao3D is a new open-source programming language designed for real-time 3D animations. With it, you can quickly create interactive, data-rich presentations, small applications, proofs of concept, user interface prototypes, and more. The interactivity of the language, combined with its simplicity and graphical aspects, make it ideal to teach programming.

Tao3D also demonstrates a lot of innovation in programming language design. It makes it very easy to create new control structures. Defining if-then-else is literally a couple of lines of code. The syntax to pass pass blocks of code to functions is completely transparent. And it is fully reactive, meaning that it automatically reacts as necessary to external events such as mouse movements or the passage of time.

The source code was just made available under the GNU General Public License v3 on SourceForge [as linked above], GitHub and Gitorious."
This discussion has been archived. No new comments can be posted.

Tao3D: a New Open-Source Programming Language For Real-Time 3D Animations

Comments Filter:
  • It looks like an INI file for describing different layers in windows.

    • Where did you see an example of the language? The links went to sourceforge (I didn't want to install the package just to see the language) and a marketing video.

      Defining if-then-else is literally a couple of lines of code.

      I'm curious how anyone thought that if/then/else was a difficult enough construct in popular languages such that it needed improving. I mean, it's a couple of lines of code in *any* language, isn't it? Anyone know how this language supposedly improved on the concept?

      The syntax to pass pass blocks of code to functions is completely transparent.

      So, functions are first class data members? Is it weakly typed then, like Lua?

      • by descubes ( 35093 ) on Saturday November 01, 2014 @07:24AM (#48286525) Homepage

        Where did you see an example of the language? The links went to sourceforge (I didn't want to install the package just to see the language) and a marketing video.

        There are a few code examples in the marketing video. There are several additional examples on the Taodyne web site [taodyne.com], but I'm pretty sure it can't take a slashdotting.

        I'm curious how anyone thought that if/then/else was a difficult enough construct in popular languages such that it needed improving. I mean, it's a couple of lines of code in *any* language, isn't it? Anyone know how this language supposedly improved on the concept?

        The idea is that in other languages, if-then-else is a built-in construct. You can't do something similar yourself without hacking the compiler. In Tao3D, if-then-else is a library element like printf in C. So you can change it.

        Let's say you often use a specific kind of for loop. In Tao3D, you simply add the notation you need, and now your code is shorter and more concise. Once you decide that one of the language objectives is that you can extend it yourself and create your own domain-specific languages, it's obvious that a good test for that feature is to use the basic programming language constructs found in other languages, like if-then-else or for loops.

        So, functions are first class data members? Is it weakly typed then, like Lua? In that language, defining a function is just syntactic sugar for assigning a chunk of code to a variable of the assigned name, so you can use it just like any other variable.

        The part that is always verbose in existing functional languages (except maybe Lisp) is how you pass code to another function. For example, in Javascript, you'd pass a callback with 'function() { ... }'. In Tao3D, I got rid of everything but ..., and the language is smart enough to figure things out. This means that you can define a slide by passing bullet points, and it almost looks like Markdown, whereas if I was in JavaScript, I would need layers and layers of code. This particular aspect is detailed in an article called "Storytelling, the web is doing it wrong [taodyne.com]"

        In Tao3D, you define the notations you want first, you design the (domain-specific) language around your notations second. In existing languages, it's the other way round, the notation is imposed by the language you chose.

        I'm also curious what this particular brings to the table that a library couldn't have accomplished. Learning a new language is a fairly big hurdle for someone to take to develop for a particular platform. Part of the reason I think we have so many computer languages is that programmers simply love writing new languages, not that it really solved any new problem. Nothing wrong with that, but then again, don't expect us to care unless there was a good reason for the new language.

        That's a very good point. The reason for XLR (the language underlying Tao3D) was that we have to invent new languages all the time, not because we like to, but because existing languages are very bad at accepting something that is not already in their DNA. You could not get lambda functions in C++ until the language committee sat around a table, standardized it, and then all compiler vendors had to implement it. But if what you need is for example a notation for symbolic derivative, or a notation for slides, or a notation for a specific kind of for-loop, you are stuck. So progress in programming languages is very slow, because each language adds its own little features, but drops tons of other features that already exist in other languages.

        The idea with XLR was to create a language where the fundamental process was extending the language. And Tao3D is an example of a relatively large scale domain-specific language (specifically around 3D and animations). Most of it is precisely in a library. But you wouldn't know from using it. It feels "native".

        • by narcc ( 412956 )

          In Tao3D, you define the notations you want first, you design the (domain-specific) language around your notations second. In existing languages, it's the other way round, the notation is imposed by the language you chose.

          If by "existing languages" you're purposefully ignoring the countless languages that did this before, like Joy, Forth, Rebol, etc.

        • by Paul Fernhout ( 109597 ) on Saturday November 01, 2014 @08:41AM (#48286739) Homepage

          http://en.wikipedia.org/wiki/S... [wikipedia.org]
          "Control structures do not have special syntax in Smalltalk. They are instead implemented as messages sent to objects."

          Smalltalk still has one of the best programming syntaxes, IMHO because it clearly tags each argument in a complex message like "widget placeAtX: 10 y: 20.". And Smalltalk is gradually being reinvented piece by piece ranging from things like the Java JVM to things like JavaScript's object literals and JSON, e.g. the Smalltalk looking: {x: 10, y: 20}. As another comment pointed out, Forth, Joy, Lisp and other languages also support this in various ways (Lisp very painfully compared to the others via hard-to-write macros).

          Also, why do people keep making new languages with new syntax (generally with poor to missing error messages, debuggers, IDEs, documentation, and libraries) when we would so much more benefit from improved FOSS libraries for existing ones? I'd be a lot more excited about Tao if it was a JavaScript library that just supported some special format INI files. It seems like Tao has some impressive libraries for real time graphics that would be nice for anyone to use. Why hide the library for most users behind some new syntax? Most of the hard work must have been creating the library I would guess?

          Of course, I know the answer to that. :-) Writing new programming languages is fun, and I have done it before myself more than once. I still have some more ideas I'd like to try out, like to take Smalltalk and have it use C-like comments and string and have a different (hopefully faster) approach to dispatching messages. And to some extent, every major programming problem we solve requires writing a sort of mini-language in terms of function names and such to define a problem space and possible solutions.

          It's sad that we got stuck with JavaScript and all its warts just because someone had to rewrite Scheme from scratch with a C syntax in two weeks to stick it in an early browser. Brendan Eich made an unfortunate choice about default variable scope and not including modules from the start based on the idea it would only be for small one page scripts (plus various other warts and complexities like relating to closures and variable scopes, variable hoisting, and so on).

          Looking at a bit of the Tao overview video on SourceForge, it looks like variables don't need to be declared (ick!). Also, requiring "locally" seems to imply that it has one of the worst "features/bugs" of JavaScript design for default globals? Or maybe I did not understand "locally". The main aspects of the language (like what is a code block, what is an argument) don't seem clear at first glance to me, perhaps because of various keywords being defined or seeing commas some places and not others?

          I find the use of a comma without inner parentheses interesting for functions and arguments, where the comma in a sense is doing what Smalltalk keyword colons are doing. Still, it misses labelling arguments like Smalltalk, and why not drop the commas and just have all arguments separated by spaces and instead require nested expressions to be surrounded by parentheses if you are going in that direction? For example: "translate -500 100 (10 + x)"

          I like the clean looking syntax without semicolons at the end of lines. I'm assuming it uses indentation after a comma to define code blocks? Although maybe not, since I only see that at the top level? So, some interesting ideas and I wish it well. It it ran on JavaScript, maybe I'd try it today...

          If you're the author, despite any criticism above (just half-baked opinions from watching the video for a few minutes on-and-off while writing this), I'd still encourage you to keep moving forwards with it. Looks like a lot of fun! And it is exploring some new ideas and the library looks amazing. There is no question popular computer languages (Java, JavaScript, C++) have many warts and someday it would be great to have better langua

          • by descubes ( 35093 )

            Your post is long, so I'll only address a few snippets by lack of time.

            Also, why do people keep making new languages with new syntax (generally with poor to missing error messages, debuggers, IDEs, documentation, and libraries) when we would so much more benefit from improved FOSS libraries for existing ones? I'd be a lot more excited about Tao if it was a JavaScript library that just supported some special format INI files.

            The answer is complex. I try to address it in this article [wordpress.com]. It's not just for the sake of inventing a new language, it's because what I wanted to do I could not do with JavaScript.

            Looking at a bit of the Tao overview video on SourceForge, it looks like variables don't need to be declared (ick!).

            Variables need to be declared, but an assignment does declare a variable in that scope.

            Also, requiring "locally" seems to imply that it has one of the worst "features/bugs" of JavaScript design for default globals? Or maybe I did not understand "locally".

            The 'locally' function does not concern variables, but graphic state. It's a way to say "I don't want this rotation to escape this block". In OpenGL terminology, you can thin

            • Thanks for the reply, especially explaining "locally" (I was starting to wonder afterwards if it indeed was about 3D transformations not variables). Interesting point on commas vs. parens for clarity; I'll have to think about that.

              Could not easily find a Google ref for "Buddda". :-)

              On JavaScript, it is a frustrating language to work with, with several major design flaws. I'm using it right now for a mid-size project (dozens of pages in a single-page app, collecting 500+ different pieces of data, using Dojo)

            • Also, requiring "locally" seems to imply that it has one of the worst "features/bugs" of JavaScript design for default globals? Or maybe I did not understand "locally".

              The 'locally' function does not concern variables, but graphic state. It's a way to say "I don't want this rotation to escape this block". In OpenGL terminology, you can think of it as a PushMatrix/PopMatrix pair (and same for other attributes).

              So does this mean that Tao3D is call-by-value by default, and this explicitly breaks it to (effectively) call-by-value, rather than leaving the programmer to hack around with statics or constants and individual copies of arguments?

              I like the clean looking syntax without semicolons at the end of lines. I'm assuming it uses indentation after a comma to define code blocks?

              Yes.

              Semantic whitespace makes me sad. :-(

              • by descubes ( 35093 )

                Semantic whitespace makes me sad. :-(

                Maybe you never had to work in a large project where the project most productive guy did no care about indentation at all. Whitespace has a semantics for our brain, so we might as well make that consistent with the code. It reduces syntactic noise, in concept programming jargon.

                • Semantic whitespace makes me sad. :-(

                  Maybe you never had to work in a large project where the project most productive guy did no care about indentation at all. Whitespace has a semantics for our brain, so we might as well make that consistent with the code. It reduces syntactic noise, in concept programming jargon.

                  I like to let my IDE correct my indentation in such situations. I know what's coming next... "ah, but the diffs..." but that's a problem with the diffs, not the code. If the diff algorithm treated non-semantic whitespace non-semantically (ie multiple whitespace treated as single whitespace, as an HTML parser does) then it wouldn't be a problem, and the diffs would show up the actual material differences (the changes in start-block and end-block markers), and my IDE could set the indentation depths to my pre

              • by descubes ( 35093 )

                So does this mean that Tao3D is call-by-value by default, and this explicitly breaks it to (effectively) call-by-value, rather than leaving the programmer to hack around with statics or constants and individual copies of arguments?

                The locally function is conceptually equivalent to running its argument surrounding it with graphics state save/restore code. That's about it. So you can't deduce anything about call-by-value from it.

                Now, to address your question in short, XL uses call-by-reference, and lazily evaluates the arguments as required to perform the call. Cases where you need to evaluate include: having to check against a type that is not "tree", comparing against a pattern, comparing for identity between arguments. For more deta

        • That's a very good point. The reason for XLR (the language underlying Tao3D) was that we have to invent new languages all the time, not because we like to, but because existing languages are very bad at accepting something that is not already in their DNA. You could not get lambda functions in C++ until the language committee sat around a table, standardized it, and then all compiler vendors had to implement it. But if what you need is for example a notation for symbolic derivative, or a notation for slides, or a notation for a specific kind of for-loop, you are stuck. So progress in programming languages is very slow, because each language adds its own little features, but drops tons of other features that already exist in other languages.

          The idea with XLR was to create a language where the fundamental process was extending the language. And Tao3D is an example of a relatively large scale domain-specific language (specifically around 3D and animations). Most of it is precisely in a library. But you wouldn't know from using it. It feels "native".

          Common Lisp macros allow you to create complex language extensions which are not library functions. They perform as though they are built in. Before anyone writes a "new" language they should at least survey the already existing solutions.

          • by descubes ( 35093 )

            Common Lisp macros allow you to create complex language extensions which are not library functions. They perform as though they are built in. Before anyone writes a "new" language they should at least survey the already existing solutions.

            Yes. You can actually see XLR as a Lisp without the parentheses.

          • Common Lisp macros allow you to create complex language extensions which are not library functions. They perform as though they are built in. Before anyone writes a "new" language they should at least survey the already existing solutions.

            Yes, but unfortunately it still leaves you programming in Common Lisp. Lisp was not designed for humans -- it was designed to be easy for the computer to parse. Worse, ukasiewicz's prefix notation may be known as "Polish notation" now, but he called it "parenthesis-free notation" when he invented it (and that was his whole purpose in inventing it), and yet the guys who invented Lisp used prefix with mandatory parenthesis. Lisp was an interesting idea at the time, and dealt with the constraints of the time,

        • Thanks for the blog link and detailed responses - that gives me a lot more information than the summary for digestion.

          After an admittedly quick read over the blog post, I would suspect that perhaps most of what Taos3D does could be done through libraries, but it would probably sacrifice some elegance and require a lot more boilerplate code. Domain-specific languages do have the advantage of being able to tailor the language for specific use cases, of course, and XLR seems like a pretty interesting way to d

        • The idea is that in other languages, if-then-else is a built-in construct. You can't do something similar yourself without hacking the compiler. In Tao3D, if-then-else is a library element like printf in C. So you can change it.

          Let's say you often use a specific kind of for loop. In Tao3D, you simply add the notation you need, and now your code is shorter and more concise.

          Am I the only one who thinks this is a fucking terrible idea? It's a recipe for obfuscated, unmaintainable code.

          Dear Programmers: Quit filling your code with goddamn macros. Use the language as implemented, so everybody else can figure out what the fuck you're doing.

          Thank you.

          • by Jeremi ( 14640 )

            Dear Programmers: Quit filling your code with goddamn macros. Use the language as implemented, so everybody else can figure out what the fuck you're doing.

            What, and make ourselves easily replaceable? In the absence of unions, code obfuscation is the only job security we've got. ;^)

          • Nah, I have found that English doesn't really suit my needs, so over time I've have extended it with additional info-enhancefic-features that allow me to wrt +>concs.ly n x that m.mess.g is +>qwk.
  • Defining if-then-else is literally a couple of lines of code.

    I'm curious, when is the definition of a content-free if-then-else statement more than a couple of lines? A random line from a .ddd template [sourceforge.net] (end of file) in their source code seems to indicate they're using an if( <condition> ) then block with no attached end statement, with whitespace presumably being meaningful (though in the sample I linked the indenting doesn't seem to be very consistent at the end). This seems like an odd thing to boast.

    • by descubes ( 35093 )

      I'm curious, when is the definition of a content-free if-then-else statement more than a couple of lines?

      The point is that you define the if-then-else control structures. If you wish, if-then-else is a macro in Tao3D, not a built-in.

      (though in the sample I linked the indenting doesn't seem to be very consistent at the end)

      Can you tell me where you think it's not consistent?

      • Me thinks "descubes" has a vested interest in the language being the poster and responding to posts in an inquisitive manner. The quote "Defining if-then-else is literally a couple of lines of code." is silly (as already mentioned). Is there a formal language definition? The documentation for the language seems to be lacking.
        • by descubes ( 35093 )

          Yes, of course, I have a vested interest. But I'm not inquisitive, I want to know if there is a (real or perceived) inconsistency in the indentation.

          • Well, nothing wrong with that, but if that's the case, I think that a link to a blog post or article that introduces or describes the language along with it's features and benefits would be a lot more interesting than posting a link to sourceforge and saying "look, new language". The marketing video is slick, but tells us zero about the language, which seemed to be the point of the posting.

            I don't think there's anything wrong with being inquisitive either. I'm not sure why you denied that, since you're wa

    • by descubes ( 35093 ) on Saturday November 01, 2014 @06:29AM (#48286345) Homepage

      The actual definition of if-then-else can be found here [github.com]. It looks like this:

      // If-then-else statement
      if true then TrueBody else FalseBody -> do TrueBody
      if false then TrueBody else FalseBody -> do FalseBody

      if true then TrueBody -> do TrueBody
      if false then TrueBody -> false

      The definition of the 'for' loop is more convoluted and is actually found in C++ code [github.com]. It looks like this:


      FORM(IntegerForLoop, tree,
                "for Var in Low:integer..High:integer loop Body",
                PARM(Var, tree, "")
                PARM(Low, integer, "")
                PARM(High, integer, "")
                PARM(Body, source, ""),
                return xl_integer_for_loop(context,self, &Var, Low, High, 1, &Body), )
      FORM(IntegerForLoopStep, tree,
                "for Var in Low:integer..High:integer by Step:integer loop Body",
                PARM(Var, tree, "")
                PARM(Low, integer, "")
                PARM(High, integer, "")
                PARM(Step, integer, "")
                PARM(Body, source, ""),
                return xl_integer_for_loop(context,self, &Var, Low,High,Step, &Body), )
      FORM(RealForLoop, tree,
                "for Var in Low:real..High:real loop Body",
                PARM(Var, tree, "")
                PARM(Low, real, "")
                PARM(High, real, "")
                PARM(Body, source, ""),
                return xl_real_for_loop(context,self, &Var, Low, High, 1.0, &Body), )

    • by narcc ( 412956 )

      From the (horrible) documentation:

      3.1.1Rewrite declarations
      The infix -> operator declares a tree rewrite. Figure 21 repeats the code in Figure 3 illustrating how rewrite declarations can be used to define the traditional if-then-else statement.

      if true then TrueClause else FalseClause -> TrueClause
      if false then TrueClause else FalseClause -> FalseClause

      Figure 21. Examples of tree rewrites

      The tree on the left of the -> operator is called the pattern. The tree on the right is called the implementation of the pattern. The rewrite declaration indicates that a tree that matches the pattern should be rewritten using the implementation.

      Not exactly what I expected. For example, in Forth, you'd do something like this:
      : branch fromr dup tor @ fromr + tor ;
      : notbranch not fromr dup tor @ 1 - * fromr + 1 + tor ;
      : if immediate ' notbranch , here 0 , ;
      : else immediate ' branch , here 0 , swap dup here swap - swap ! ;
      : then immediate dup here swap - swap ! ;

      Less clear, without question, but also way less magic. The documentation, unfortunately, doesn't provide enough information for me to have implemented thei

    • I'm curious, when is the definition of a content-free if-then-else statement more than a couple of lines? A random line from a .ddd template [sourceforge.net] (end of file) in their source code seems to indicate they're using an if( <condition> ) then block with no attached end statement, with whitespace presumably being meaningful (though in the sample I linked the indenting doesn't seem to be very consistent at the end). This seems like an odd thing to boast.

      Looks like the "then" is the same as running code inside "{ }". Could be wrong, then again, couldn't care less about whitespace reduction, it usually costs in readability for minimal gains. I like my Brackets, makes code clear and concise.

  • by Anonymous Coward

    If you try it right out of the bat, you'll get tons of error messages like "no form match". Seems to be the good old "Huh?" in Tao3D.

    But there are a few interesting video tutorials on the YouTube channel. This one is to build a DNA strand [youtube.com]. Another one shows how you can animate 3D objects [youtube.com]. And there's an couple of interesting ones about GLSL real-time shaders [youtube.com].

    Apparently, it's quite powerful, but it may take quite a bit of learning to master.

    • "right out of the bat"? I think you meant "box".
  • Good effort but I really don't see the point. What you have here is a scripting language sitting on top of a 3D engine. It would be more useful to produce a rich interface to a 3D engine that could be used by existing scripting languages, like JS, than to create a whole different one.
    • by descubes ( 35093 )

      Porting to a web platform is something I'd like to see happen. When we started Tao3D, WebGL and even Javascript were not mature enough, and it would have been unreasonable to do so. Today, I don't know. There are still a few things in Tao3D I think Javascript would have a hard time doing. Feel free to try. That's one of the reasons we opened the code.

      • by narcc ( 412956 )

        Not mature enough it 2011? My BlackBerry Playbook had excellent support for WebGL in 2011. Not a whole lot has changed since then. Hell, my old Playbook still handles modern WebGL demos without a hitch. What, exactly, were you missing back then?

        • by descubes ( 35093 )

          The project actually started in 2009. And I'm not even sure that WebGL is mature enough today for some of the things we do. It's not so long ago that Microsoft adopted it. And hey, it can't even display the background shaders on http://tao3d.sourceforge.net..... [tao3d.sourceforge.net] Enough people started complaining that I had to remove them.

          So if WebGL is not good enough for a web page, I doubt it would be good enough for many of the features in Tao3D. But one benefit of open source is that you can try and transcode it in Java

          • by narcc ( 412956 )

            I'm really interested to see you display 3D extruded arabic text on your 2011 Blackberry ;-)

            Why would that be complicated? 3D extruded text is pretty simple, and handling RTL has nothing to do with WebGL.

            • by descubes ( 35093 )

              Sorry, my example was confusing. It's not about RTL it's about number of polygons. Writing most non-latin scripts in small font size tends to create zany numbers of polygons. Same thing with a few contorted latin fonts.

              • by narcc ( 412956 )

                What algorithm are you using? There may be a more efficient approach (er, as in fewer triangles, not less time).

                That still doesn't answer my question about what you think is lacking in WebGL.

                • by descubes ( 35093 )

                  For the algorithms, I'll let you look at the code :-) It's mostly in path3d.cpp [github.com], text_drawing.cpp [github.com] and glyph_cache.cpp [github.com].

                  There are several algorithms that are activated separately depending on: whether you draw flat text or extruded 3D text; whether there's a texture or not; the size of the font; and more. The primary ones are: render to textures and draw quads, render polygons for the outline and play that back, or extrude the outline with triangle strips. Then there are some tricks to minimize the number of

                  • by narcc ( 412956 )

                    The text of the previous paragraph is 69475 triangles in Arial, 138950 when extruded, 171298 polygons in font "Amaze" not even extruded,

                    Not extruded? Why not render the text as a texture and slap it on a triangle strip? Why not render the glyphs as a large texture and make clever use of UV's? (You'd use more triangles, 2 per character, but that's still way fewer than the approach you're using.)

                    You might also want to look at other, clearly more efficient, solutions. Take a look at three.js's ShapeGeometry. and ExtrudeGeometry -- A quick test shows great quality, with far fewer triangles.

                    That being said, if you want the text to look any good, you have to emit a large number of triangles for even relatively simple text.

                    On the basis of my experience, I strongly disagree.

                    • by descubes ( 35093 )

                      Just to clarify, the poly counts I gave were actual triangles processed by the card when disabling texture-based rendering in Tao3D. This is the only case that always works, so it's both the fallback scenario and the worst case scenario. Therefore, that's the one I'm most interested in.

                      Not extruded? Why not render the text as a texture and slap it on a triangle strip?

                      Obviously, Tao3D does that [github.com] when that's possible.

                      Why not render the glyphs as a large texture and make clever use of UV's?

                      Tao3D also does that [github.com] when it makes sense.

                      (You'd use more triangles, 2 per character

                      Hmm, how do you draw a glyph with only one triangle per character? Or do you mean that we can use two triangles for multiple characters?

                    • by narcc ( 412956 )

                      May I suggest that you should study how the Tao3D code works a little more before being so dismissive

                      I can only go by what you tell me. I have no interest in digging through your code base for Slashdot discussion.

                      Quick test with what? How did you create a text mesh with Three.js to start with?

                      With my computer, a code editor, and the (easily accessible) documentation. It took about 10 minutes. Interestingly, it took less time to write and run that test than it took to find the bit of the documentation for Tao3D I quoted in another post.

                      First, I'd like to point out that even if you can do texture-based rendering, you still need to first render to a texture with polygons or, alternatively, with triangles and a shader doing the Bezier fill.

                      That statement is either completely false or incoherent. Care to give it another go?

                      you still need a decent number of polygons per glyph or any non-basic font looks like crap.

                      Sure. What I'm saying is that, from the numbers you've provided,

                    • by descubes ( 35093 )

                      With my computer, a code editor, and the (easily accessible) documentation. It took about 10 minutes.

                      I meant: you probably have some code that looks like:
                      var geom = new THREE.TextGeometry(T, { size : S, height: H, curveSegments: CS, font: F });
                      I was interested in the parameters to that code.

                      That statement is either completely false or incoherent. Care to give it another go?

                      Unless you are rendering bitmap fonts, at some points, your glyph outlines are first rendered to the texture. It may be 2D, chances are it's still done by the graphic card on modern systems.

                      Sure. What I'm saying is that, from the numbers you've provided, your product clearly lots of room for improvement. Even with basic Latin, you're averaging 128 triangles/character for flat text!

                      Actually, you are right, the code I quickly implemented was counting the array elements, not the polygons. So, roughly, the number

                    • by narcc ( 412956 )

                      I'm not comparing three.js to Tao3D. I was using it as an example of a system that, from the information I had from you, produced 3d extruded text more efficiently.

                      There are other 3d presentation offerings: Aurora 3D, intuiFace, Presente3D, Ventuz, and a host of others -- no programming language (obscure or otherwise) required -- that support video & display walls, live data driven graphics and video feeds, etc.

                      What does Tao3D offer over competing products like these?

                    • by descubes ( 35093 )

                      from the information I had from you, produced 3d extruded text more efficiently.

                      Then you misinterpreted the information I gave you, because my point was that designer, ideographic or Arabic font have complex outlines. AFAICT, Three.js cannot use such fonts (maybe there's a trick I don't know).

                      What does Tao3D offer over competing products like these?

                      These are all great products. What Tao3D offers is:
                      1. It's notably cheaper, and now there's also a free software version.
                      2. It's a programming language. That being said, I know Ventuz can at least be scripted, not sure about the other two.
                      3. Stereoscopy and auto-stereoscopy are just a mouse click

                    • by descubes ( 35093 )

                      Sure. What I'm saying is that, from the numbers you've provided, your product clearly lots of room for improvement. Even with basic Latin, you're averaging 128 triangles/character for flat text!

                      While it's only 128 edges (not triangles, I had misinterpreted what I was counting), it was still worth investigating. And I modified the way Tao emits polygons [sourceforge.net] to be more aggressive for small sizes. I also added user-controllable parameters in case the defaults are not suited for a specific use case. Code reviews and comments are welcome.

                      Thank you for your input.

      • I looked at the link you mentioned in another post: http://www.taodyne.com/shop/de... [taodyne.com]
        "Taodyne's current technology is written in C++. It uses Qt for the user interface, and OpenGL for the drawing code. It also uses other components that might be a bit difficult to adapt to a web environment, notably LLVM. We can think of a few possible strategies to adapt this technology to the web: ..."

        For a port to the web, you could try asm.js and emscriptem:
        http://en.wikipedia.org/wiki/A... [wikipedia.org]
        http://en.wikipedia.org/wiki/E [wikipedia.org]

  • This is not going to do your project a lot of good. You author the post, and put it on Slashdot, being lucky that you got on the front page. From that point on, it is *very* counterproductive to interfere with the discussion yourself. As other commenters already pointed out: you appear to have a vested interest in your subject, which - in the minds of many /.ers - influences the discussion in an unwanted, "steering" sort of way. Don't be surprised if your post goes into the history of Slashdot with a low nu
    • by descubes ( 35093 )

      I try to answer questions to be helpful. Sorry if that bugs you.

      BTW, some people see 'descubes' where he isn't ;-)

    • by descubes ( 35093 )

      By the way, what I'm looking for is contributors to the project. So yes, I steer. I don't care about the whiners on Slashdot. Their numbers increased steadily over the past few years. It's too bad. I still remember when it was not hard to find interesting comments on Slashdot.

      • Agree with your remark on the number of whiners, wholeheartedly even. Yet, any message should be tailored, in form and in content, to its potential public; a thing that, I think, you treated a bit lightheartedly. Moreover, if you want contributors, "steering" is going to bring you nowhere. If what you want is the open source paradigm, then give up steering. If you absolutely want to steer, then give up on the whole open source idea. Speaking from experience here.
  • Drop GPL v3, most everyone I know isn't going to touch you with a 10 foot pole if you use GPLv3. Just like using GPL is a matter of principle, NOT using v3 is a matter of principle for many people. Yes, some people like GPLv3, most don't. Do you really want your entire user base to be composed of rabid fanboys?

    Fix your shitty website. You point people to source forge ... which is crappy by modern standards, and then link to your website ... which has basically no useful information what so ever on the

    • by descubes ( 35093 )

      What are the objections of the people you know to GPLv3 for a new project? I know of the objections for Linux. I also know why I like GPLv3.

      The website uses Reveal.js, a presentation framework for the web. I find it useful for tutorials and such. You don't have to like it any more than you have to like the GPL v3.

      I am the author of XL. So I guess I don't get it twice then ;-)

    • Drop GPL v3, most everyone I know isn't going to touch you with a 10 foot pole if you use GPLv3. Just like using GPL is a matter of principle, NOT using v3 is a matter of principle for many people.

      Perhaps. But the important question is: are these the kind of people you want within 10 feet of your code, or anything valuable for that matter? After all, GPLv3 was made to close loopholes in GPLv2, so the cynic in me wonders just why one would object to it, unless one was looking towards to exploiting these loo

  • Descubes, did you think of putting up a formal grammar for your "language"? E.g. one in BNF ? Or a grammar readable by a widely-used parser generator tool such as ANTLR ? Seriously... !
    • by descubes ( 35093 )

      It's a recursive descent parser, which is technical jargon for "I know enough about parsing to drop Lex and Yacc".

      There is a for XLR, work in progress (both the language and the doc). [sourceforge.net]

      • Don't care if it's recursive descent or not ( having noted the somewhat high-nosed, arrogant tone of your answer ). I want a grammer. BNF, EBNF, whatever. Anyone into compiler construction and wanting to / trying to use your language would want a grammar.
        • by descubes ( 35093 )

          having noted the somewhat high-nosed, arrogant tone of your answer

          Too bad you failed to note how high-nosed and arrogant your own "Seriously...!" sounded :-)

          Anyone into compiler construction and wanting to / trying to use your language would want a grammar

          Let me disappoint then. I don't think you can even write a valid EBNF for XL, it's too dynamic for that. Let me explain why.

          First, scanning and parsing are really very simple. The scanner [sourceforge.net] is 747 lines of code with comments. The parser [sourceforge.net] is 659 lines of code with comments. The scanner produces a stream of tokens. The parser produces an abstract syntax tree built with exactly 8 node types: integer, real, text, name, infix

          • Let me disappoint then. I don't think you can even write a valid EBNF for XL, it's too dynamic for that. Let me explain why.

            [....]

            Again, it's "yuck" for formal grammar nazis. But again, I don't care, because it just works.

            Except when it doesn't just work and you have to debug, because then what you describe as "dynamic" starts to feel like "unpredictable" and it takes far longer to work through than it should. I've only looked at a very small example, but I cannot imagine myself ever trying to teach how to program in this language. How do you teach someone to think like something with very little internal logic or consistency?

            • by descubes ( 35093 )

              Except when it doesn't just work and you have to debug, because then what you describe as "dynamic" starts to feel like "unpredictable" and it takes far longer to work through than it should. I've only looked at a very small example, but I cannot imagine myself ever trying to teach how to program in this language. How do you teach someone to think like something with very little internal logic or consistency?

              The fact that its grammar cannot be expressed as EBNF (like Ada) does not mean that it's not precise and consistent. You look at some input and at the xl.syntax file, and you know exactly what parse tree you are getting out of that input. You look at the various rewrite rules (the things given by the rewrite operator -> and you know exactly what's going to be executed and why.

              Overall, the grammar is much more consistent than most other languages, if only because it's so small. As I indicated elsewhere in

              • The fact that its grammar cannot be expressed as EBNF (like Ada) does not mean that it's not precise and consistent.

                I wasn't objecting to the fact that it can't be expressed in EBNF, but the reason you gave -- that so much of the language can be redefined at will. Suddenly you have to look in dozens of different places to verify what the most basic features of the language are.

                Overall, the grammar is much more consistent than most other languages, if only because it's so small. As I indicated elsewhere in this discussion, scanner and parser together represent some 1500 lines of C++ code, and a syntax file [github.com] that is currently 62 lines long. A complete and precise description [github.com] of the core language in plain english takes about 50 pages. Compare that to the 700 pages for the C++ standard, and tell me which one is easier to teach?

                Lisp has a tiny grammar and a small standard, and that leaves us buggering about with a visual confusion of brackets and parentheses. The point of high-level languages is to impose a more human-freindly logic over the CPU's instruction set.

                What I n

                • by descubes ( 35093 )

                  Suddenly you have to look in dozens of different places to verify what the most basic features of the language are.

                  Not really. The parsing is defined by xl.syntax, a file that currently contains 62 lines, so it's not complicated. The semantics, on the other hand, comes from libraries, including some that are built-in. In the case of base XL, the library components implemented in XL are in builtin.xl, and the components implemented in C++ are in basics.tbl.

                  But XL and Tao3D put way more in libraries than regular languages. Remember when we moved from BASIC to C? In BASIC, the 'PRINT' statement was a keyword. In C, 'printf

  • In my experience, a lot of the best talks I see are the ones with the most simple slides (e.g. little text and little distracting material). Speakers who pull this off are generally the ones who know their shit and are good at conveying it. Talks with too much text, too many images on one slide, or too many effects (ahem) are less likely to be good. These really over-the-top presentations are like excalamation marks after the punchline of jokes. If what you have to say isn't interesting then you won't make
    • http://www.npr.org/blogs/allte... [npr.org]
      "He says it was as if "we removed the PowerPoint slide, and like a big glass barrier was removed between the speaker and the audience. "The communication became a lot more two-way instead of just the speaker speaking at length for 15, 20 minutes. The audience really started to come alive, to look up from their laptop computers and actually start participating in the discussion, which is what we were really trying to foster.""

      That said, I still think more tools for empowering

  • I wonder if the Unity + (JavaScript | Boo | C#) combination would produce better results and in less time. The nice thing about using Unity is that you will eventually be able to run the apps in a browser without a plugin. http://arstechnica.com/gadgets... [arstechnica.com]

He has not acquired a fortune; the fortune has acquired him. -- Bion

Working...