Mac Dartium expired, but downloading new one doesn't fix it.

183 views
Skip to first unread message

Josh Gargus

unread,
May 17, 2012, 1:02:30 PM5/17/12
to General Dart Discussion
I've been using Dart Editor 7552, but this morning when I try to run
my project, Dartium displays a white page with the text:

"This build has expired. Please download a new Dartium at
http://www.dartlang.org/dartium/index.html "

I updated to Dart Editor 7696, but this didn't fix the problem. I
then downloaded Dartium from the URL above, unzipped it and replaced
the Chromium it in the dart-sdk folder, as directed. Same result.

The Dartium is Version 21.0.1140.0 (137628). This version is the same
whether it is launched by double-clicking it, or by attempting to run
my project, so I don't think that OS X is launching an old version
stashed somewhere on my hard drive.

Any ideas?

Thanks,
Josh

Anton Muhin

unread,
May 17, 2012, 1:13:29 PM5/17/12
to Josh Gargus, General Dart Discussion
Josh,

that's probably related to my recent change. Looking into it immediately.

And sorry.

yours,
anton.

Anton Muhin

unread,
May 17, 2012, 1:16:33 PM5/17/12
to Josh Gargus, General Dart Discussion
Josh, may you wait another 5 mins and give it a try.

In meanwhile I am double checking on my side.

yours,
anton.

Anton Muhin

unread,
May 17, 2012, 1:30:38 PM5/17/12
to Josh Gargus, General Dart Discussion
Josh,

I hope everything should work fine now. Please, let me know if it's
not the case.

And thanks a lot for reporting and sorry for any inconvenience.

yours,
anton.

Josh Gargus

unread,
May 17, 2012, 1:52:34 PM5/17/12
to mi...@dartlang.org
I'm at work now but will try when I return home this evening. Thanks for responding so promptly!

Cheers,
Josh

Anton Muhin

unread,
May 17, 2012, 3:09:24 PM5/17/12
to Josh Gargus, mi...@dartlang.org
Sure and thanks again for reporting it.

yours,
anton.

Songhun Kim

unread,
May 18, 2012, 1:03:47 PM5/18/12
to General Dart Discussion
I met a same problem.
But now it works well. :)
Thanks.

sulliva...@gmail.com

unread,
May 22, 2012, 12:53:24 AM5/22/12
to mi...@dartlang.org
As I've discussed with Seth Ladd (and posted on the issues list), the short timeout on Dartium turned out to be a problem when I tried to introduce new CS students to imperative styles of programming (after a mostly Scheme course) using Dart, here at the University of Virginia. A version of Dartium that phones home for updates to the DVM would be great.

Anton Muhin

unread,
May 22, 2012, 1:41:30 PM5/22/12
to sulliva...@gmail.com, mi...@dartlang.org
Sullivan,

do you want to have longer timeout? or ability to disable timeouts altogether?

yours,
anton.

Kevin Sullivan

unread,
May 22, 2012, 2:06:11 PM5/22/12
to Anton Muhin, mi...@dartlang.org
Thank you for the follow-up. The ability to disable timeouts would be great, I think. At least at this stage, students don't need the most recent distribution, just something that works for simple cases without unnecessary enforcement of a discipline of regular updating. Better -- I'm sure it'll come eventually -- would be auto-updating of the Dart VM, but for now that'd be an extra, not essential.

Regards,
Kevin

Peter Ahé

unread,
May 22, 2012, 6:52:22 PM5/22/12
to Kevin Sullivan, Anton Muhin, mi...@dartlang.org
When I was a sysadmin at the local CS department, we tended to prefer major upgrades in the beginning of semesters (or just before they start).

We did this to avoid disturbing students that would be handing in assignments or taking exams based on this software.

This was when CS students wouldn't have laptops and perhaps not even a PC capable of running the course software.

But I think the principle still applies. The student installs a version of Dart which the teacher has based course material on. Once the student has installed a specific version, the last thing he needs is an update that invalidates all the course material. 

The student is trying to learn new stuff, not follow an otherwise cool and exciting language/platform development in progress.

Do it would seem that auto updating could also be a problem. 

Kevin, is this an accurate characterization?

Cheers,
Peter

Kevin Sullivan

unread,
May 22, 2012, 8:50:57 PM5/22/12
to Peter Ahé, Anton Muhin, mi...@dartlang.org
Peter,

If an update to Dartium  -- and what I assume is at issue here really is the Dart VM -- if such an update had the effect of breaking programs that the students were writing or had already written that term, well, yes, that could cause a problem. As far as I'm concerned, at least for a first course, and particularly one like the one I taught in which Dart gets introduced late (and thus just used a bit), the language and tools are already fine. Thus a stable build with a Dartium that doesn't time out would seem be enough.

For what it's worth, the other issue that has "bothered" us a bit is lack of an Eclipse plug-in version of the dev tools. We use Eclipse all over our curriculum, and also in many of our graduate research projects and classes. It'd be really great to have access to Dart within an already set up / configured version of Eclipse, rather than in a closed & dedicated build of Eclipse.

For a very first course, the closed environment is actually ok, but for any more advanced courses, in our environment in any case, there'd be significant value in having an E. plug-in.

Great work by the way over there at Google. I'm a real fan of Lars B, Gilad B, and surely others who are also great who I don't yet know.

Kevin

Peter Ahé

unread,
May 23, 2012, 2:06:13 AM5/23/12
to Kevin Sullivan, Anton Muhin, mi...@dartlang.org
I don't think we intend to provide a plugin. This open source, and I'm sure we will accept patches to make it easier for someone outside the Dart project to publish plugins and deal with all the complications. We didn't want to deal with that.

My personal opinion on Eclipse is that it is a horrible product. As far as I'm concerned, it still lacks key features of 30+ year old technology like Smalltalk. The basic UI of Eclipse is preventing us from doing some cool things we would like to do, and the internals of Eclipse make it hard to anything at all.

My personal opinion is that the sooner we can get rid of Eclipse, the better. Unfortunately, I don't see that happening anytime soon.

Cheers,
Peter

Peter Ahé

unread,
May 23, 2012, 10:51:21 AM5/23/12
to Kevin Sullivan, Anton Muhin, mi...@dartlang.org
Hi Kevin,

On Wed, May 23, 2012 at 2:50 AM, Kevin Sullivan
<sulliva...@gmail.com> wrote:
> Great work by the way over there at Google. I'm a real fan of Lars B, Gilad
> B, and surely others who are also great who I don't yet know.

Thank you for the kind words.

Cheers,
Peter

Phil Quitslund

unread,
May 23, 2012, 12:14:31 PM5/23/12
to Kevin Sullivan, Peter Ahé, Anton Muhin, mi...@dartlang.org
Hi Kevin,

For what it's worth, the other issue that has "bothered" us a bit is lack of an Eclipse plug-in version of the dev tools. We use Eclipse all over our curriculum, and also in many of our graduate research projects and classes. It'd be really great to have access to Dart within an already set up / configured version of Eclipse, rather than in a closed & dedicated build of Eclipse.

For a very first course, the closed environment is actually ok, but for any more advanced courses, in our environment in any case, there'd be significant value in having an E. plug-in.


I was going to point you to the relevant issue, but I see you already chimed in.  Thanks for that!  Net-net: this feature request is very much on our radar.  We'll bes sure and update the ticket as soon as we have any more to add.  Similarly, if you have any more thoughts feel free to append them there.  Again, thanks!



--
Phil Quitslund
Software Engineer
Google, Inc.

Kevin Sullivan

unread,
May 23, 2012, 1:04:58 PM5/23/12
to Phil Quitslund, Peter Ahé, Anton Muhin, mi...@dartlang.org
Another issue: not a request, but just feedback at this point. A graduate research group that I'm leading is now trying to decide whether to base a major rewrite of a collaborative modeling and analysis environment that we're developing using Dart or Javascript/JQuery. I'm trying gently to push my graduate students to Dart, but they're pushing back, particularly about the lack of richer frameworks / libraries for development: things like JQuery on the client side and Restlet on the server side. I *completely* understand that there's a sequence to a major project like Dart, and that you're just not there yet, but for what it's worth I wanted to let you know that at least in this small group, the question "should we adopt" is being held up a bit by the question of likely availability of libraries and frameworks. I'm sure this comes as no surprise, but at least it's another data point.

Also, one student was concerned about lack of asynchrony in your WebSocket implementation, to date. Again I know it's new (and I haven't actually looked at the issue myself).

I hope these comments are useful.

Regards,
Kevin


Peter Ahé

unread,
May 23, 2012, 1:17:06 PM5/23/12
to Kevin Sullivan, Phil Quitslund, Anton Muhin, mi...@dartlang.org
Hi Kevin,

This kind of feedback is always welcome. Thank you for letting us know. I think we are mostly aware of these issues, but it doesn't hurt repeating it.

Cheers,
Peter 

On Wednesday, May 23, 2012, Kevin Sullivan wrote:

Seth Ladd

unread,
May 23, 2012, 2:13:45 PM5/23/12
to Kevin Sullivan, Phil Quitslund, Peter Ahé, Anton Muhin, mi...@dartlang.org
Thanks Kevin. The upcoming pub package system will hopefully galvanize the library ecosystem. There's already libraries cropping up, but it's hard to find them. The real question is how and when will a Dart app be able to use an existing JavaScript library. For something like jQuery, we're refactoring dart:html to be jQuery-esque. If there's specific areas of jQuery that your students love, that would be good feedback.

I'd also like to ask more about "lack of asynchrony of Web sockets". The web socket library on the client (and server) is all driven by callbacks. Can you elaborate?

Thanks, we really appreciate your support and feedback,
Seth

Kevin Sullivan

unread,
May 23, 2012, 2:20:20 PM5/23/12
to Seth Ladd, Phil Quitslund, Peter Ahé, Anton Muhin, mi...@dartlang.org, Matthew Hall, Ashwin Raghav Mohan Ganesh
Seth et al.,

Let me ask graduate students Matthew Hall and Ashwin Ganesh (copied) to provide brief, carefully crafted responses to your two questions below:

(1) What are the most essential "features" of JQuery
(or examples thereof) that would have to be supported by Dart (or Dart libraries) to justify a switch? (Matthew)

(2) Where is the weakness in asynchrony in the Dart WebSocket implementation? (Ashwin)

Kevin

Ashwin Raghav Mohan Ganesh

unread,
May 23, 2012, 3:05:51 PM5/23/12
to Kevin Sullivan, Seth Ladd, Phil Quitslund, Peter Ahé, Anton Muhin, mi...@dartlang.org, Matthew Hall
I'l take the second question:
To answer your second question, Dart does support asynchronous callbacks on the server end. The problem is that some of the dart-based web-socket server side api does not have callback for certain options (like say, push simultaneously to multiple clients listening on a channel). These are wrappers that you can expect to find only on already established software.

Since there are no wrappers, there are points where you are forced to write synchronous code since the system does not have provisions to call you back on those actions. It could well be argued that if you require these kinds of callbacks, you are probably not doing things the way they have been advocated by asynchronous paradigms. But... eh.

That said, most basic functionality you would need with web-socket server api is provided by dart in an asynchronous way. There should be no trouble.

Josh Gargus

unread,
May 23, 2012, 4:50:05 PM5/23/12
to Ashwin Raghav Mohan Ganesh, Kevin Sullivan, Seth Ladd, Phil Quitslund, Peter Ahé, Anton Muhin, mi...@dartlang.org, Matthew Hall
(not on the Dart team nor speaking for it...)

I'm not sure that I understand what you're getting at... if you want to multicast to a number of listeners, can't you trivially iterate over them?

var listeners = new List();  // add/remove listener not shown.
WebSocketHandler handler = howeverYouWantToObtainOne();
handler.onOpen (WebSocketConnection ws) {
    ws.onMessage = (message) {
        listeners.forEach((each) => each.onMessage(message));
    }
    // skipping onClosed etc.
}

Perhaps I'm misunderstanding your use-case, because I don't understand how you're "forced to write synchronous code".  Can you elaborate?  If I you properly, it doesn't seem appropriate to push this functionality into the core API when it can easily be layered on top, either in application code or in middleware. 

Cheers,
Josh

Ashwin Raghav Mohan Ganesh

unread,
May 23, 2012, 5:26:47 PM5/23/12
to Josh Gargus, Kevin Sullivan, Seth Ladd, Phil Quitslund, Peter Ahé, Anton Muhin, mi...@dartlang.org, Matthew Hall
In the sample code that you have sent, what happens when I have a 1000 listeners. Iterating over the listeners and generating the "onMessage" events is sybchronous although these event-handlers themselves are asynchronous.

On the other hand here is some hypothetical code that you may find interesting. Pardon the ruby style pseudo code.

var listeners = new Channel()//not just a regular List
//var listeners = new List();  // add/remove listener not shown.


WebSocketHandler handler = howeverYouWantToObtainOne();
handler.onOpen (WebSocketConnection ws) {
    ws.onMessage = (message) {
        listeners.push(message);
    }
    // skipping onClosed etc.
}

class Channel
{
    //subscribe and unsubscribe code omitted
    def push(message)
       Schedule_on_the_reactor{@subscibers.forEach((each) => each.onMessage(message))}//the iterations are sequential but asynchronous with the event loop.
    end
}

Hypothetically, the channel will schedule all operations on the main reactor thread for thread safe reactor operations. How would you make it possible to iterate asynchronously? (i do not mean parallel execution of each item which would be a different problem but just schedule the iterations so that the event-loop can continue without being blocked.)

I could have just missed out on a trick in Dart to accomplish this.

Josh Gargus

unread,
May 23, 2012, 6:22:56 PM5/23/12
to Ashwin Raghav Mohan Ganesh, Kevin Sullivan, Seth Ladd, Phil Quitslund, Peter Ahé, Anton Muhin, mi...@dartlang.org, Matthew Hall
On Wed May 23 14:26:47 GMT-700 2012, Ashwin Raghav Mohan Ganesh <am...@virginia.edu> wrote:
In the sample code that you have sent, what happens when I have a 1000 listeners. Iterating over the listeners and generating the "onMessage" events is sybchronous although these event-handlers themselves are asynchronous.

On the other hand here is some hypothetical code that you may find interesting. Pardon the ruby style pseudo code.

var listeners = new Channel()//not just a regular List
//var listeners = new List();  // add/remove listener not shown.


WebSocketHandler handler = howeverYouWantToObtainOne();
handler.onOpen (WebSocketConnection ws) {
    ws.onMessage = (message) {
        listeners.push(message);
    }
    // skipping onClosed etc.
}

class Channel
{
    //subscribe and unsubscribe code omitted
    def push(message)
       Schedule_on_the_reactor{@subscibers.forEach((each) => each.onMessage(message))}//the iterations are sequential but asynchronous with the event loop.
    end
}

Hypothetically, the channel will schedule all operations on the main reactor thread for thread safe reactor operations. How would you make it possible to iterate asynchronously? (i do not mean parallel execution of each item which would be a different problem but just schedule the iterations so that the event-loop can continue without being blocked.)

Now I understand what you're getting at, but I'm not sure what it buys you.  Lets say that it would take 1000ms for the 1000 listeners to synchronously process the message, but only 1ms to iterate through the listeners and queue up an async task for them to process the message.  Any other events that occur after 1ms (eg: other incoming web-socket messages, async disk reads, etc.) will be added to the event-loop after the 1000 already-enqueued tasks... they will still have to wait for the 1000ms to elapse before they are processed.

In a single-threaded event-loop (eg: Node.js), the point of such asynchronous APIs is to keep the CPU busy as long as there is work to do, which is accomplished by not blocking on I/O operations.  The event-loop isn't any less blocked if an incoming message is queued behind 1000 messages that occupy the CPU for 1ms each, or behind a single message that occupies the CPU for 1ms.

This assumes that the event-loop does not have multiple prioritized queues.  If async I/O events are higher-priority than explicitly-deferred user tasks, then what I wrote above no longer holds.  Is this maybe what you're talking about?

I could have just missed out on a trick in Dart to accomplish this.
 
A related use-case is to schedule an event to occur in the future, like the Window.setTimeout() method in dart:html.  AFAIK, there's no way to do this in server-side Dart right now.

Cheers,
Josh

Matthew Hall

unread,
May 23, 2012, 9:56:35 PM5/23/12
to Kevin Sullivan, Seth Ladd, Phil Quitslund, Peter Ahé, Anton Muhin, mi...@dartlang.org, Ashwin Raghav Mohan Ganesh

For the first question:

 

The essential feature of jQuery missing from Dart is its user interface library. So, not a deficiency of Dart itself, but rather a reflection on the infancy of the language -- I'm sure this will change with time. Unfortunately, the absence of basic UI components (both "behavioral" like drag-and-drop or sort, and "widget" like tabs and tables) is a huge blocker to effective Web 2.0 development in Dart -- "rolling your own" UI components just isn't feasible for most projects.

 

I am nervous about the lack of browser support for Dart, and hence the requirement that it be cross-compiled down to JS. I have seen several examples mentioned in docs where code executed on the Dart VM behaves differently from the same code compiled to JS (presumably this is due to bugs in the compilers which will be fixed). More subtly, I haven't seen a study evaluating the cross-browser support of Dart-sourced JS. Especially given the large amount of JS code that gets generated, do all the major modern browsers execute it the same? This is one of the big selling points of jQuery -- browser support is excellent and predictable. And, admittedly, the lack thereof is one of the worst flaws in "vanilla" JS.

 

I do miss the terse $ function syntax from jQuery, but that's pure personal preference and not important.

 

Cheers,

Matthew

Vadim Tsushko

unread,
May 24, 2012, 12:16:37 AM5/24/12
to General Dart Discussion
2 Josh Gargus:

>A related use-case is to schedule an event to occur in the future, like the
>Window.setTimeout() method in dart:html.  AFAIK, there's no way to do this
>in server-side Dart right now.

I believe dart:io Timer do just that on server-side Dart.

Peter Ahé

unread,
May 24, 2012, 2:11:39 AM5/24/12
to Matthew Hall, Kevin Sullivan, Seth Ladd, Phil Quitslund, Anton Muhin, mi...@dartlang.org, Ashwin Raghav Mohan Ganesh
Hi Matt,

Re terseness of $, try adding this to your program:

get $() => document.query;

Re compiling to JS.

The code we generate is actually pretty simple, except when it comes to our dart:html library. I think the order of complexity for that is equivalent to jQuery.

Right now, dart2js frequently break compilation to Firefox and Internet Explorer. This is because we aren't testing it yet. We are still testing those platforms only with frog. Naturally this will have to change.

It is quite interesting, actually, when frog was developed, the initial focus was more on cross-browser support, code-size, and performance, whereas dart2js initially focused on performance, but quickly shifted to specification compliance and test coverage.

I think this is great, because frog and dart2js have each contributed solutions to the puzzle that is: how can we compile Dart to compact and efficient JS code?

So to some extent, the Dart team has demonstrated various aspects of compilation to JS, but now we need to put all the pieces together. The end result must be much better than both frog and dart2js are today: correct, compact, compatible, fast JS code.

There is one place where we still lack a good solution for compiling to JS. This is integers. The VM supports arbitrarily large integers, but when we compile to JS, we use double. This is a cause of concern, but we don't  have a solution yet.

Cheers,
Peter

Anton Muhin

unread,
May 24, 2012, 12:11:34 PM5/24/12
to Kevin Sullivan, mi...@dartlang.org
Kevin,

sorry for a delay.

So, for now you may want a simple workaround: if instead of dart.js
script, you'll use <script>navigator.webkitStartDart()</script>, you
should be okay.

I'll think about better solution.

yours,
anton.

Seth Ladd

unread,
May 24, 2012, 3:52:03 PM5/24/12
to Ashwin Raghav Mohan Ganesh, Josh Gargus, Kevin Sullivan, Phil Quitslund, Peter Ahé, Anton Muhin, mi...@dartlang.org, Matthew Hall
Hi Ashwin,

I haven't benchmarked this at all (if you do test this, I'd love to hear your feedback), but after talking to the team about your question, you may find this method to be what you are looking for:

ws.onMessage = (message) {
  for (var listener in listeners) {
    new Timer(0, (t) => listener.send(message));
  }
}

This will place a new event onto the event loop for every "re-broadcast" of your message. This code only works on the server/command-line, because Timer only works on the command-line Dart VM.

Give it a shot, we'd love empirical data. :)

Seth
Reply all
Reply to author
Forward
0 new messages