You can subscribe to this list here.
2002 |
Jan
|
Feb
|
Mar
|
Apr
(4) |
May
(10) |
Jun
(6) |
Jul
(1) |
Aug
(10) |
Sep
(20) |
Oct
(5) |
Nov
(2) |
Dec
(4) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2003 |
Jan
(25) |
Feb
(6) |
Mar
(59) |
Apr
(9) |
May
(3) |
Jun
(13) |
Jul
(6) |
Aug
(16) |
Sep
(14) |
Oct
(12) |
Nov
(4) |
Dec
(10) |
2004 |
Jan
(16) |
Feb
(12) |
Mar
(53) |
Apr
(16) |
May
(43) |
Jun
(40) |
Jul
(48) |
Aug
(20) |
Sep
(23) |
Oct
(27) |
Nov
(33) |
Dec
(8) |
2005 |
Jan
(2) |
Feb
(20) |
Mar
(7) |
Apr
(9) |
May
(2) |
Jun
(6) |
Jul
(5) |
Aug
|
Sep
|
Oct
(3) |
Nov
(3) |
Dec
(6) |
2006 |
Jan
(6) |
Feb
(6) |
Mar
(1) |
Apr
(4) |
May
|
Jun
(1) |
Jul
|
Aug
(2) |
Sep
(1) |
Oct
|
Nov
|
Dec
|
2007 |
Jan
(1) |
Feb
(1) |
Mar
|
Apr
|
May
|
Jun
|
Jul
(2) |
Aug
(1) |
Sep
(8) |
Oct
|
Nov
|
Dec
|
2008 |
Jan
(5) |
Feb
|
Mar
|
Apr
|
May
(2) |
Jun
(2) |
Jul
(2) |
Aug
|
Sep
(1) |
Oct
(2) |
Nov
|
Dec
(2) |
2009 |
Jan
(2) |
Feb
|
Mar
(1) |
Apr
|
May
(4) |
Jun
(2) |
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2010 |
Jan
|
Feb
|
Mar
(1) |
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
(1) |
Nov
|
Dec
|
2015 |
Jan
|
Feb
|
Mar
|
Apr
|
May
(1) |
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
From: Ken A. <kan...@bb...> - 2004-07-19 16:13:52
|
At 11:54 AM 7/19/2004 -0400, Alan Donovan wrote: >On Mon, Jul 19, 2004 at 11:24:26AM -0400, Ken Anderson wrote: >> Tim, i'd like to propose this as a new definition of eqv? >> (define (atomicClass? c) >> (or (eq? c Boolean.class) >> (eq? c Byte.class) >> (eq? c Short.class) >> (eq? c Integer.class) >> (eq? c Long.class) >> (eq? c Float.class) >> (eq? c Double.class) >> (eq? c Symbol.class))) > >(and don't forget Character.class) > > >> (define (eqv? x y) >> (or (eqv? x y) >> (let ((c (.getClass x))) >> (and (atomicClass? c) >> (eq? c (.getClass y)) >> (.equals x y))))) > >I think there's a typo for 'eq?' on line 2. > >What about the #null value? This would (unfortunately) require extra >cases because (.getClass #null) fails. > > >> You're using case incorrectly. Your code expands into: >> (let ((temp var (String. "foo"))) >> (cond ((member temp var '(String. "foo")) #t) >> (else #f))) > >Right. I'm relatively new to Scheme ;-) Bit you're good enough to find errors in my code! >Thanks for your help! (Sorry if my comments above are pedantic.) >I'll subscribe to the list. Questions and comments are always welcome! BTW, i should mention to the group that Alan gave a great talk at BBN last week on JDK 1.5 and automatic conversion of 1.4 code to 1.5: http://pag.csail.mit.edu/~adonovan/pubs/slides-bbn-jul04.pdf |
From: Alan D. <ado...@cs...> - 2004-07-19 15:54:07
|
On Mon, Jul 19, 2004 at 11:24:26AM -0400, Ken Anderson wrote: > Tim, i'd like to propose this as a new definition of eqv? > (define (atomicClass? c) > (or (eq? c Boolean.class) > (eq? c Byte.class) > (eq? c Short.class) > (eq? c Integer.class) > (eq? c Long.class) > (eq? c Float.class) > (eq? c Double.class) > (eq? c Symbol.class))) (and don't forget Character.class) > (define (eqv? x y) > (or (eqv? x y) > (let ((c (.getClass x))) > (and (atomicClass? c) > (eq? c (.getClass y)) > (.equals x y))))) I think there's a typo for 'eq?' on line 2. What about the #null value? This would (unfortunately) require extra cases because (.getClass #null) fails. > You're using case incorrectly. Your code expands into: > (let ((temp var (String. "foo"))) > (cond ((member temp var '(String. "foo")) #t) > (else #f))) Right. I'm relatively new to Scheme ;-) Thanks for your help! (Sorry if my comments above are pedantic.) I'll subscribe to the list. cheers alan |
From: Ken A. <kan...@bb...> - 2004-07-19 15:25:17
|
Hi, please join the Jscheme-user mailing list! At 05:09 PM 7/18/2004 -0400, Alan Donovan wrote: >Hi Ken, I've had a little play around with JScheme this weekend and I >love it! Especially for building GUIs, interactive programming is >obviously the Right Way; it avoids the long library start-up times >since you never stop. There's also so much less "crap" to be typed in >to implement a simple event handler. It reminds me of interacting >with 'wish' (Tcl/Tk). Yes! I'm glad you like it. I find it a lot of fun! >I have a couple of questions though: > >1) How does "eq?" and "eqv?" relate to ".equals"? "eq?" seems to use > object identity and "eqv?" seems to implement 'equivalence', but > only for certain datatypes (e.g. Integer but not String). What's > going on here? > > For example: > > (eq? (Integer. 1) (Integer. 1)) = #f ;; reference equality > > (eqv? (Integer. 1) (Integer. 1)) = #t ;; interpreter knows > ;; equivalence relation of > ;; Integers (?) > > (eqv? (String. "foo") (String. "foo")) = #f ;; interp doesn't know > ;; about Strings > > (.equals (String. "foo") (String. "foo")) = #t ;; use Java equivalence > http://www.math.grin.edu/courses/Scheme/r5rs-html/r5rs_48.html (eq? x y) checks that x and y are the same object. However, JScheme caches small Integers and Characters, so they may sometimes be eq?: > (eq? 10 10) #t > (eq? 34141 34141) #f Also, JScheme uses Java semantics and interns string constants: > (eq? "foo" "foo") #t > (eq? "foo" (String. "foo")) #f (eqv? x y) is x and y are of the same atomic class and they are .equals? This is actully different than the current implementation. Currently, > (eqv? 3L 3) #t > (eqv? 3.0 3) #t which i think should both return #f. Tim, i'd like to propose this as a new definition of eqv? (define (atomicClass? c) (or (eq? c Boolean.class) (eq? c Byte.class) (eq? c Short.class) (eq? c Integer.class) (eq? c Long.class) (eq? c Float.class) (eq? c Double.class) (eq? c Symbol.class))) (define (eqv? x y) (or (eqv? x y) (let ((c (.getClass x))) (and (atomicClass? c) (eq? c (.getClass y)) (.equals x y))))) > Also, I don't understand how this interacts with 'case', which > according to R4RS, uses the semantics of the 'eqv?' relation. > Therefore: > > (case (String. "foo") > ((String. "foo") #t) > (else #f)) > > should yield the same as the eqv? expression above (#f) but does > not: it returns #t, which is surprising. Does 'case' use .equals? You're using case incorrectly. Your code expands into: (let ((temp var (String. "foo"))) (cond ((member temp var '(String. "foo")) #t) (else #f))) > I suspect that many Java programs don't implement equals() very > well, in particular, some classes throw an exception if the RHS > operand cannot be casted as expected -- i.e. equals is implemented > as a partial function in the RHS. I can see that this might be a > reason to avoid eagerly calling .equals. > >2) Do you have an Emacs scheme mode that correctly handles the > character literals #'(' etc? My standard scheme mode gets rather > confused. I use src/emacs/scheme-init.el, but it doesn't handle #'x' either. This might be worth looking into. >3) Do you have any JLib library + example code for building tree > widgets? I've never much liked the Swing API, it's super-complex > when most of the time you just want to make something simple. src/jsintc/jlib/demo/ClassBrowser.scm >4) Is there any online documentation of all the available library > procedures? http://jscheme.sourceforge.net/jscheme/doc/R4RSprimitives.html You can also do apropos. and describing a function with print its definition: car: {jsint.Primitive car[1]} set-car!: {jsint.Primitive set-car![2]} #f > (describe describe) Closure named describe (lambda (x) (if (eq? x '#null) (display (!{} '"" x '" is null ")) (describe-object x))) 26 |
From: Ken A. <kan...@bb...> - 2004-07-16 22:10:24
|
I just made the changes for this. The Gabriel benchmarks show a 3% improvement. I should have tried your benchmark. Toby, Can you test serialization and see if your patch is still needed. k At 11:08 PM 7/15/2004 -0400, Timothy John Hickey wrote: >On Jul 9, 2004, at 2:55 PM, Ken Anderson wrote: > >>Tim, >>Let me know what you think of this proposal. >> >>Currently a DynamicVariable has 3 fields >>Symbol name >>DynamicEnvironment dynamicenv - used to look up value in hash table. >>Object storedDynamicValue - only used during serialization. >> >>A DynamicEnvironment, DE, maps symbols to values. >>So every time we evaluate a DV, we do a hash lookup. >> >>I'd like to propose we >>1. put the DV's value in the storedDynamicValue field >>2. remove the dynamicenv field. >>3. Change DE to map from Symbol -> DV. >I agree. I'd thought about this optimization before and it makes great sense. > >>This means the DE will intern the DV for a symbol, but it can use its current hashtable to do that. getBindings and importBindings would have to clone all the DV's (or could they be shared?). >I think they could be shared. Modules are assumed to be locked (i.e. you can't change the bindings >of toplevel symbols) and so there would be no need to clone. >> >>The advantage is we'd get rid of a runtime hash lookup for every global value. >Yes. I tried to see whether this would make a dramatic difference by comparing two >expressions which differ only in their use of globally defined symbols: > >> (define fib > (lambda (n) > (if (< n 3) 1 (+ 1 (fib (- n 1)) (fib (- n 2)))))) > >> (define fib2 > (let ((+ +) (- -) (< <)) > (lambda(n) > (if (< n 3) 1 (+ 1 (fib (- n 1)) (fib (- n 2))))))) > >> (time (fib 25) 1) >(150049 (986 msec) (20776 bytes)) > >> (time (fib2 25) 1) >(150049 (916 msec) (3288 bytes)) > >Here the code in the closure of fib2 uses only local variables >and hence should be doing four fewer hash table lookups for >each procedure call, but I don't see much in the way of time >differences.... > >I really expected a bigger time difference. The regular approach gets >152K procedure calls per second (on a Powerbook G4 with jdk1.4) >and the fancier approach gets 163K pc/sec which is about a 7% improvement. > >---Tim--- |
From: Timothy J. H. <tim...@ma...> - 2004-07-16 03:08:45
|
On Jul 9, 2004, at 2:55 PM, Ken Anderson wrote: > Tim, > Let me know what you think of this proposal. > > Currently a DynamicVariable has 3 fields > Symbol name > DynamicEnvironment dynamicenv - used to look up value in hash table. > Object storedDynamicValue - only used during serialization. > > A DynamicEnvironment, DE, maps symbols to values. > So every time we evaluate a DV, we do a hash lookup. > > I'd like to propose we > 1. put the DV's value in the storedDynamicValue field > 2. remove the dynamicenv field. > 3. Change DE to map from Symbol -> DV. I agree. I'd thought about this optimization before and it makes great sense. > This means the DE will intern the DV for a symbol, but it can use its > current hashtable to do that. getBindings and importBindings would > have to clone all the DV's (or could they be shared?). I think they could be shared. Modules are assumed to be locked (i.e. you can't change the bindings of toplevel symbols) and so there would be no need to clone. > > The advantage is we'd get rid of a runtime hash lookup for every > global value. Yes. I tried to see whether this would make a dramatic difference by comparing two expressions which differ only in their use of globally defined symbols: > (define fib (lambda (n) (if (< n 3) 1 (+ 1 (fib (- n 1)) (fib (- n 2)))))) > (define fib2 (let ((+ +) (- -) (< <)) (lambda(n) (if (< n 3) 1 (+ 1 (fib (- n 1)) (fib (- n 2))))))) > (time (fib 25) 1) (150049 (986 msec) (20776 bytes)) > (time (fib2 25) 1) (150049 (916 msec) (3288 bytes)) Here the code in the closure of fib2 uses only local variables and hence should be doing four fewer hash table lookups for each procedure call, but I don't see much in the way of time differences.... I really expected a bigger time difference. The regular approach gets 152K procedure calls per second (on a Powerbook G4 with jdk1.4) and the fancier approach gets 163K pc/sec which is about a 7% improvement. ---Tim--- |
From: Timothy J. H. <tim...@ma...> - 2004-07-16 02:49:15
|
On Jul 15, 2004, at 7:42 PM, Ken Anderson wrote: > http://home.comcast.net/~bc19191/blog/040507.html > This describes htmlizing a common lisp page so that links to standard > procedures or forms point to their documentation. Nice idea! > This might be a good extension to your servletV mode. for your > computing course. I'll look into it, it shouldn't be too hard to implement. It would be easier if we had a routine for parsing a Scheme program that returned lexical objects (with information about where the lexeme begins, ends, and what type of lexeme it is! I've had a request for this from someone building a Scheme colorizer for Eclipse (Mike Head) The tricky part is that it assumes no standard procedures and macros have been rebound using set! but for beginners this is a safe bet! ---Tim--- > > k > |
From: Ken A. <kan...@bb...> - 2004-07-15 23:42:23
|
http://home.comcast.net/~bc19191/blog/040507.html This describes htmlizing a common lisp page so that links to standard procedures or forms point to their documentation. This might be a good extension to your servletV mode. for your computing course. k |
From: Toby A. <tob...@pe...> - 2004-07-11 19:06:43
|
On Fri, Jul 09, 2004 at 01:45:10PM -0400, Ken Anderson wrote: > At 12:22 PM 7/9/2004 -0400, Geoffrey Knauth wrote: > >On Jul 9, 2004, at 10:36, Ken Anderson wrote: > >>Q1`: > >>In src/jsint/Evaluator.java: > >>public DynamicEnvironment INTERACTION_ENVIRONMENT > >> > >>Should this be static final, or should it be named > >>interactionEnvironment? > > > >Would anyone ever override/replace the interaction environment? > >If yes, I vote the latter. If no, I vote the former. > > Yes, i think it should be an instance field. Yes, I forgot to change its name when I made the patch to make it an instance field. > The DV also has a field that is used to store the value during > serialization. > > This explanation has helped me understand this, and i found a slight > bug in serialization and i have a new proposal for DV and DE which > i'll send in my next message. I also have found a bug in the serialization of DynamicVariables, for which I as going to submit a patch this week. The one I found has to do with serializing DynamicVariables that are created as the result of Java-dot notation. My (not cleaned up) fix is below. Index: src/jsint/DynamicVariable.java =================================================================== RCS file: /cvsroot/jscheme/jscheme/src/jsint/DynamicVariable.java,v retrieving revision 1.4 diff -r1.4 DynamicVariable.java 5a6 > boolean isDefined; 19,20c20,23 < // create the binding < setDynamicValue(storedDynamicValue); --- > // create the binding if it was defined > if (isDefined) { > setDynamicValue(storedDynamicValue); > } 43c46,51 < out.writeObject(getDynamicValue()); --- > if (getDynamicEnv().isDefined(name)) { > out.writeBoolean(true); > out.writeObject(getDynamicValue()); > } else { > out.writeBoolean(false); > } 56c64,67 < storedDynamicValue = in.readObject(); --- > isDefined = in.readBoolean(); > if (isDefined) { > storedDynamicValue = in.readObject(); > } Toby. |
From: Ken A. <kan...@bb...> - 2004-07-09 22:36:11
|
We did something like this for a demo in the 80's once. But, luckily we turned something less lethal like a jeep into something else, like a submarine and had to add behavior, rather than subtract it. What the programmers should have done was make a superclass, though that doesn't seem quite right. Maybe some kind of behavioral architecture, like subsumption that would say something like "when under attack, flee to safety and if you can return fire". k >To: Ken Anderson <kan...@bb...> >From: Geoffrey Knauth <ge...@kn...> >Subject: Fwd: Mutant Marsupials >Date: Fri, 9 Jul 2004 12:32:06 -0400 >X-Mailer: Apple Mail (2.618) >X-Virus-Scanned: by amavisd-new .250 at suscom.net >Old-X-Spam-Status: NO >Old-X-Scanned-By: MIMEDefang 2.28 (www . roaringpenguin . com / mimedefang) >Old-X-Scanned-By: MIMEDefang 2.35 >X-MIME-Autoconverted: from quoted-printable to 8bit by zima.bbn.com id i69GXdT19569 >X-Scanned-By: Spam Assassin >X-Spam-Checker-Version: SpamAssassin 2.63 (2004-01-11) on zima.bbn.com >X-Spam-Level: >X-Spam-Status: No, hits=-4.8 required=5.0 tests=AWL,BAYES_00 autolearn=ham > version=2.63 > >The perils of object-oriented code reuse. --Geoff > >Forwarded message (from xBBN list): > >[ gra...@at... ] > >I saw this on a web site and thought, SIMNET!! > > Mutant Marsupials Take Up Arms Against Australian Air Force > >The reuse of some object-oriented code has caused tactical headaches for Australia's armed forces. As virtual reality simulators assume larger roles in helicopter combat training , programmers have gone to great lengths to increase the realism of the their scenarios, including detailed landscapes and -- in the case of the Northern Territory's Operation Phoenix -- herds of kangaroos (since groups of disturbed animals might well give away a helicopters position). > >The head of the Defense Science and Technology Organization's Land Operations/Simulations division reportedly instructed developers to model the local marsupials' movements and reaction to helicopters. > >Being efficient programmers, they just re-appropriated some code originally used to model infantry detachments reactions under the same stimuli, changed the mapped icon from a soldier to a kangaroo, and increased the figures' speed of movement. > >Eager to demonstrate their flying skills for some visiting American pilots, the hotshot Aussies "buzzed" the virtual kangaroos in low flight during a simulation. The kangaroos scattered, as predicted, and the Americans nodded appreciatively . . . and then did a double-take as the kangaroos reappeared from behind a hill and launched a barrage of stinger missiles at the hapless helicopter. (Apparently the programmers had forgotten the remove "that" part of the infantry coding). > >The lesson? Objects are defined with certain attributes, and any new object defined in terms of the old one inherits all the attributes. The embarrassed programmers had learned to be careful when reusing object-oriented code, and the Yanks left with the utmost respect for the Australian wildlife. > >Simulator supervisors report that pilots from that point onwards have strictly avoided kangaroos, just as they were meant to. > >...okay, so in essence it's true snopes.com puts in the real context... > >Graeme |
From: Ken A. <kan...@bb...> - 2004-07-09 18:55:21
|
Tim, Let me know what you think of this proposal. Currently a DynamicVariable has 3 fields Symbol name DynamicEnvironment dynamicenv - used to look up value in hash table. Object storedDynamicValue - only used during serialization. A DynamicEnvironment, DE, maps symbols to values. So every time we evaluate a DV, we do a hash lookup. I'd like to propose we 1. put the DV's value in the storedDynamicValue field 2. remove the dynamicenv field. 3. Change DE to map from Symbol -> DV. This means the DE will intern the DV for a symbol, but it can use its current hashtable to do that. getBindings and importBindings would have to clone all the DV's (or could they be shared?). The advantage is we'd get rid of a runtime hash lookup for every global value. How does that sound? k |
From: Ken A. <kan...@bb...> - 2004-07-09 17:45:19
|
At 12:22 PM 7/9/2004 -0400, Geoffrey Knauth wrote: >On Jul 9, 2004, at 10:36, Ken Anderson wrote: >>Q1`: >>In src/jsint/Evaluator.java: >>public DynamicEnvironment INTERACTION_ENVIRONMENT >> >>Should this be static final, or should it be named interactionEnvironment? > >Would anyone ever override/replace the interaction environment? >If yes, I vote the latter. If no, I vote the former. Yes, i think it should be an instance field. >>Q2: analyze() >>line 265: >> return new DynamicVariable((Symbol)x, dynamicEnv); >>This returns a new DynamicVariable for each use of a symbol in the body. >>Shouldn't it reuse one if there is one already like Symbol.intern()? >>Though that might require a synchronized method. > >By DynamicVariable I assume you mean a variable of local scope. If that is true, then I think you'd want a new one for each new binding, as opposed to each use. The word "dynamic" is a bit confusing to me, because it means one thing in the context of C or Java, another thing in Common Lisp. And here we are talking about a Scheme written in Java. > >Symbol.intern() -- wouldn't that let you have only one "x", instead of one at the top-level (global scope) and each lower local scope? Or, in the case of (define x 1) (let ((x 2)) ...), are the two x's guaranteed to have different Symbols, interned separately? Yes, the name isn't very informative. Originally, a Symbol had a name and a value field. The value was used to store the global value of the Symbol if any. Several people have contributed code so things are a bit different. A DynamicVariable has a symbol and a DynamicEnvironment which is a hash from symbol -> value. This is what lets the module system work. So if you type x to the REPL The reader returns a the symbol 'x, which the evaluator analyzes and turns into a Dynamic Variable in the evaluator's DynamicEnvironment. It then executes that DV to produce a value, by looking it up in the DV's DE. The DV also has a field that is used to store the value during serialization. This explanation has helped me understand this, and i found a slight bug in serialization and i have a new proposal for DV and DE which i'll send in my next message. k |
From: Geoffrey K. <ge...@kn...> - 2004-07-09 16:23:00
|
On Jul 9, 2004, at 10:36, Ken Anderson wrote: > Q1`: > In src/jsint/Evaluator.java: > public DynamicEnvironment INTERACTION_ENVIRONMENT > > Should this be static final, or should it be named > interactionEnvironment? Would anyone ever override/replace the interaction environment? If yes, I vote the latter. If no, I vote the former. > Q2: analyze() > line 265: > return new DynamicVariable((Symbol)x, dynamicEnv); > This returns a new DynamicVariable for each use of a symbol in the > body. > Shouldn't it reuse one if there is one already like Symbol.intern()? > Though that might require a synchronized method. By DynamicVariable I assume you mean a variable of local scope. If that is true, then I think you'd want a new one for each new binding, as opposed to each use. The word "dynamic" is a bit confusing to me, because it means one thing in the context of C or Java, another thing in Common Lisp. And here we are talking about a Scheme written in Java. Symbol.intern() -- wouldn't that let you have only one "x", instead of one at the top-level (global scope) and each lower local scope? Or, in the case of (define x 1) (let ((x 2)) ...), are the two x's guaranteed to have different Symbols, interned separately? Geoffrey -- Geoffrey S. Knauth | http://knauth.org/gsk |
From: Ken A. <kan...@bb...> - 2004-07-09 14:36:46
|
Q1`: In src/jsint/Evaluator.java: public DynamicEnvironment INTERACTION_ENVIRONMENT Should this be static final, or should it be named interactionEnvironment? Q2: analyze() line 265: return new DynamicVariable((Symbol)x, dynamicEnv); This returns a new DynamicVariable for each use of a symbol in the body. Shouldn't it reuse one if there is one already like Symbol.intern()? Though that might require a synchronized method. k |
From: Ken A. <kan...@bb...> - 2004-07-08 21:54:42
|
Nice reply. Now, that i'm reading Bruce's mind view, i think he muddies things up a lot more than i would have liked. Maybe this is the right approach, especially for people like him who have survived C++. At 02:23 PM 7/5/2004 -0400, Borislav Iordanov wrote: >The core argument for dynamic typing is actually one that I used to >convince myself to rely on dynamically typed languages more and more: we >need to test anyway so sacrificing expressiveness, readability and >development speed for the illusionary safety of static type checking is >simply not worth it. Types are good, but i think the real problem is "static". Imagine having to halt the internet everytime an interface changed. CORBA and RMI require both sides of a conversation agree on the types. Common Lisp lets you change the definition of a class dynamically, though i don't think this has been done across machines. I saw a nice NASA presentation once that used "frames" (nested alists) or almost XML to communicate across machines. That let them add a field to the output of one machine and other machines could ignore it until they were updated. Optimize for flexibility as Howie Shrobe would say. >But he misses two important (related) points in >favor of static typing: > >1) When a mistake is detected "statically", at compile time, not only is >a programmer informed about it, but the information is much more useful >- you know where it is in the code, you can more easily associate it >with a mistaken/misunderstood intent, program design/structure etc. In a >sense, a semantic constraint is really reduced to syntactic one which is >one level down in terms tractability by both humans and machines. I take this to mean that typing something like this in Java: Foo x = (Foo) foos.get(name); seems more like writing assembly language than saying Foo x = foos.get(name); There is no reason Java could not do this type inference. IN a dynamic language you could say x = foos.get(name); which does seem "higher level than assembly". >2) The rigor and expliciteness required by statically typed languages >become increasingly important with program size. This is a consequence >of the previous point: it is easy to track down a run-time exception >when the program is small and the behavior can be easily localized >within the code. For large systems, maintained and evolving over years >by many programmers, the extra fingering and design contraints enforced >by static typing can be life savers - ok, a test may detect that >something is wrong, but how long before the programmer goes from the >error produced by the test to the real problem? And what (how many?) >changes to the code would that prompt? So here i think you're arguing in favor of static typing. It keeps you honest longer. However, when i've changed large code bases i didn't understand, i make the smallest change i can and test it. Which suggests that it is really testing that leads to code longevity. >A problem I often have when programming with Jscheme is the error: >"Expected pair or '(), but found blabla....". I know in what function >this happens, I know where is the code expected the list, but god know >where I put the blabla instead of it. The positive aspect is that this >forces me to be much more attentive to the type of data I'm passing >around, a habit I'd lost (or probably never really aquired) with >languages like Java and C++. If you are criticizing JScheme, let me know, lets make it better. I have a way of finding where functions are defined, and i agree that backtraces can be hard to follow. I have begun to follow the PLT Scheme practice of writing a type signature before a procedure definition: ;;; sq: number -> number (define (sq x) "return x squared." (* x x)) you can use (describe sq) to see the definition and the documentation of sq. k |
From: Ken A. <kan...@bb...> - 2004-07-08 20:08:46
|
Tim, I downloaded GREWPedit today. I could not run the applet because of configuration issues on the two Windows machines i was using. However the jar worked fine, though i can't double click it. probably another configuration issue. Beginner issue: In the login window i kept changing my name in the upper left window and then start a server, which would log me in as guest because i need to change it below. Now i see that the top is a separate dialog to get to your server. From the GREWPsession window i couldn't figure out how to load a document. Eventually i figured out that if you name a document, you get a document window and can then load |
From: Gerald B. <lux...@ya...> - 2004-07-08 17:46:57
|
Hello, Jack D. Herrington has written an article published on the DevX site titled "Extend your Java Application with Embedded Languages" The summary states: A scripting engine, built in the language of your choice, and embedded into your application can make a huge difference to your customers, who have concerns about extensibility. Even better, creating a scripting engine is easy and fun. See three versions of a spam filter engine built in Groovy, Jython, and BeanShell. Full story @ http://www.devx.com/Java/Article/21456/1954?pf=true or http://www.devx.com/Java/Article/21456 - Gerald ------------------- Gerald Bauer XUL Alliance | http://xul.sourceforge.net United XAML | http://xaml.sourceforge.net The Thinlet World | http://thinlet.blog-city.com ______________________________________________________________________ Post your free ad now! http://personals.yahoo.ca ------------------------------------------------------- This SF.Net email sponsored by Black Hat Briefings & Training. Attend Black Hat Briefings & Training, Las Vegas July 24-29 - digital self defense, top technical experts, no vendor pitches, unmatched networking opportunities. Visit www.blackhat.com _______________________________________________ Beanshell-users mailing list Bea...@li... https://lists.sourceforge.net/lists/listinfo/beanshell-users |
From: Ken A. <kan...@bb...> - 2004-07-07 22:28:52
|
{ In one project, we keep our data in .zip files accesssible through an Apache web server. While one can read from a particular URL easily, there isn't a direct way to get a directory listing via HTTP. However, you can get an HTML page containing the directory listing. Then you could use javax.swing.text.html.HTMLEditorKit to read the page and then walk it, but that seems like a lot of work. Then I realized (.split) could be used to remove the HTML markup, and split lines so it would be easy to extract the information i wanted. Though, one problem is that you need to write extraction code specific to each web server. The procedure (urlDir) grinds up the HTML page to provide a directory listing, as a list of strings. It works for Apache and Tomcat servers. If you know of URLs that list directories on other servers, let me know. Example usage: (urlDir "http://openmap.bbn.com/~kanderso/") (urlDir "http://tat.cs.brandeis.edu:8090/sum04/cs2a/") } (load "elf/basic.scm") (load "using/run.scm") (define (urlDir url) (define (listApache url) (map (lambda (v) (vector-ref v 2)) (cdr (filter (lambda (v) (= (vector-length v) 4)) (stripHtml url))))) (define (listTomcat url) (map (lambda (s) (vector-ref (second s) 2)) (reverse (cdr (reverse (by 6 (cdddr (cdddr (cdddr (cdr (stripHtml url))))))))))) (let ((server (.get (.get (.getHeaderFields (.openConnection (URL. url))) "Server") 0))) (cond ((.startsWith server "Apache-Coyote") (listTomcat url)) ((.startsWith server "Apache") (listApache url)) (else (error {unknown server: [server]}))))) (define (stripHtml url) "Strip the HTML out of a url. Returns a list of vectors of strings. One for each line." (map* (lambda (line) (.split line " *<[^<]*> *")) (BufferedReader (.openStream (URL. url))))) |
From: Ken A. <kan...@bb...> - 2004-07-07 00:01:40
|
Wow! Geoffrey suggested i look at ANTLR, and it seemed like a good idea, and you've already implemented something way beyond what i was thinking of!! If we could work a description of your applcation into a JScheme use case, that would be great!. At 01:43 PM 7/6/2004 +0100, Harman, Peter wrote: >Hi > >Thought you might be interested that I am already using ANTLR with JScheme for a project. My (initial) reason for using JScheme is to create a computer-algebra library for use in Java [for rearranging / differentiating equations], computer algebra is best done in Lisp / Scheme and I have other code I want to interface with which is in Java, so JScheme was an obvious choice. Using ANTLR I can define the syntax for equations, and the parser will output the Abstract Syntax Tree in Lisp form, so "y = m*x + c" becomes "(= y (+ (* m x) c))", my scheme code can for instance rearrange this to "(= x (/ (- y c) m))" and this can be output as "x = (y - c) / m". > >The reason I say that was my initial reason for using JScheme is that I am also now using JScheme to generate code from the equations (to solve them numerically), for which the quasi-string notation is brilliant. > >Peter > > >-----Original Message----- >From: jsc...@li... >[mailto:jsc...@li...]On Behalf Of Ken >Anderson >Sent: 02 July 2004 22:19 >To: Jscheme Users >Subject: [Jscheme-user] new killer apps for jscheme? > > >Geoffrey sent me an article on ANTLR, a Java/C++ parser generator. >I normally avoid such tools because their manual doesn't fit in my head long enough between uses. Many common parsing problems are little more the lexing, such as tab delimited, fixed with fields, and i have good lexing technology in my head. The problem is i don't have a good parsing approach yet, and i've been waiting a long time. I'd like to use parser combinators but i've never worked on it enough to get a real example working. I have used Mitch Wand's LL1 generator to parse CORBA IDL. But ANTLR got me thinking... > >1. What if we could show some examples of using ANTLR and JScheme to get quick little mini languages, or Scheme like languages with alternative syntax, as Tim has been talking about. > >2. We could use ANTLR's lexer to generate a llexer and use JScheme to provide the little be more that you need than lexing to your data organized. > >3. Use Jscheme lexer in the above item. > >We aught to be able to take a specification like: >Here's a tab separated file. >The first line describes the fields. >The fields can be int, double, or String, you figure out which. >Write me a Java bean that describes each row. >Write me a reader that will read such a file and return a Vector of objects. > >k > > > >------------------------------------------------------- >This SF.Net email sponsored by Black Hat Briefings & Training. >Attend Black Hat Briefings & Training, Las Vegas July 24-29 - >digital self defense, top technical experts, no vendor pitches, >unmatched networking opportunities. Visit www.blackhat.com >_______________________________________________ >Jscheme-user mailing list >Jsc...@li... >https://lists.sourceforge.net/lists/listinfo/jscheme-user >- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - >This e-mail and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the sender immediately and delete this e-mail from your system. > >Please note that any views or opinions presented in this email are solely those of the author and do not necessarily represent those of Ricardo (save for reports and other documentation formally approved and signed for release to the intended recipient). > >Only Directors or Duly Authorised Officers are authorised to enter into legally binding obligations on behalf of Ricardo unless the obligation is contained within a Ricardo Purchase Order. > >Ricardo may monitor outgoing and incoming e-mails and other telecommunications on its e-mail and telecommunications systems. By replying to this e-mail you give your consent to such monitoring. > >The recipient should check this email and any attachments for the presence of viruses. >Ricardo accepts no liability for any damage caused by any virus transmitted by this email. > >'Ricardo' means Ricardo Plc and its subsidiary companies. > >Ricardo plc is a public limited company registered in England with registered number 00222915. The registered office of Ricardo plc is Bridge Works, Shoreham-by-Sea, West Sussex, BN43 5FG. > >- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > > >------------------------------------------------------- >This SF.Net email sponsored by Black Hat Briefings & Training. >Attend Black Hat Briefings & Training, Las Vegas July 24-29 - >digital self defense, top technical experts, no vendor pitches, >unmatched networking opportunities. Visit www.blackhat.com >_______________________________________________ >Jscheme-user mailing list >Jsc...@li... >https://lists.sourceforge.net/lists/listinfo/jscheme-user |
From: Harman, P. <Pet...@ri...> - 2004-07-06 12:43:53
|
Hi Thought you might be interested that I am already using ANTLR with = JScheme for a project. My (initial) reason for using JScheme is to = create a computer-algebra library for use in Java [for rearranging / = differentiating equations], computer algebra is best done in Lisp / = Scheme and I have other code I want to interface with which is in Java, = so JScheme was an obvious choice. Using ANTLR I can define the syntax = for equations, and the parser will output the Abstract Syntax Tree in = Lisp form, so "y =3D m*x + c" becomes "(=3D y (+ (* m x) c))", my scheme = code can for instance rearrange this to "(=3D x (/ (- y c) m))" and this = can be output as "x =3D (y - c) / m". The reason I say that was my initial reason for using JScheme is that I = am also now using JScheme to generate code from the equations (to solve = them numerically), for which the quasi-string notation is brilliant. Peter -----Original Message----- From: jsc...@li... [mailto:jsc...@li...]On Behalf Of Ken Anderson Sent: 02 July 2004 22:19 To: Jscheme Users Subject: [Jscheme-user] new killer apps for jscheme? Geoffrey sent me an article on ANTLR, a Java/C++ parser generator. I normally avoid such tools because their manual doesn't fit in my head = long enough between uses. Many common parsing problems are little more = the lexing, such as tab delimited, fixed with fields, and i have good = lexing technology in my head. The problem is i don't have a good = parsing approach yet, and i've been waiting a long time. I'd like to = use parser combinators but i've never worked on it enough to get a real = example working. I have used Mitch Wand's LL1 generator to parse CORBA = IDL. But ANTLR got me thinking... 1. What if we could show some examples of using ANTLR and JScheme to get = quick little mini languages, or Scheme like languages with alternative = syntax, as Tim has been talking about. 2. We could use ANTLR's lexer to generate a llexer and use JScheme to = provide the little be more that you need than lexing to your data = organized. 3. Use Jscheme lexer in the above item. We aught to be able to take a specification like: Here's a tab separated file. The first line describes the fields. The fields can be int, double, or String, you figure out which. Write me a Java bean that describes each row. Write me a reader that will read such a file and return a Vector of = objects. k ------------------------------------------------------- This SF.Net email sponsored by Black Hat Briefings & Training. Attend Black Hat Briefings & Training, Las Vegas July 24-29 -=20 digital self defense, top technical experts, no vendor pitches,=20 unmatched networking opportunities. Visit www.blackhat.com _______________________________________________ Jscheme-user mailing list Jsc...@li... https://lists.sourceforge.net/lists/listinfo/jscheme-user - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - = - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - = - - - - - - - - - - - - - This e-mail and any files transmitted with it are confidential and = intended solely for the use of the individual or entity to whom they are = addressed. If you have received this email in error please notify the = sender immediately and delete this e-mail from your system.=20 Please note that any views or opinions presented in this email are = solely those of the author and do not necessarily represent those of = Ricardo (save for reports and other documentation formally approved and = signed for release to the intended recipient).=20 Only Directors or Duly Authorised Officers are authorised to enter into = legally binding obligations on behalf of Ricardo unless the obligation = is contained within a Ricardo Purchase Order.=20 Ricardo may monitor outgoing and incoming e-mails and other = telecommunications on its e-mail and telecommunications systems. By = replying to this e-mail you give your consent to such monitoring. The recipient should check this email and any attachments for the = presence of viruses.=20 Ricardo accepts no liability for any damage caused by any virus = transmitted by this email.=20 'Ricardo' means Ricardo Plc and its subsidiary companies. Ricardo plc is a public limited company registered in England with = registered number 00222915. The registered office of Ricardo plc is = Bridge Works, Shoreham-by-Sea, West Sussex, BN43 5FG. =20 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - = - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - = - - - - - - - - - - - - -=20 |
From: Borislav I. <bor...@ko...> - 2004-07-05 18:23:10
|
The core argument for dynamic typing is actually one that I used to convince myself to rely on dynamically typed languages more and more: we need to test anyway so sacrificing expressiveness, readability and development speed for the illusionary safety of static type checking is simply not worth it. But he misses two important (related) points in favor of static typing: 1) When a mistake is detected "statically", at compile time, not only is a programmer informed about it, but the information is much more useful - you know where it is in the code, you can more easily associate it with a mistaken/misunderstood intent, program design/structure etc. In a sense, a semantic constraint is really reduced to syntactic one which is one level down in terms tractability by both humans and machines. 2) The rigor and expliciteness required by statically typed languages become increasingly important with program size. This is a consequence of the previous point: it is easy to track down a run-time exception when the program is small and the behavior can be easily localized within the code. For large systems, maintained and evolving over years by many programmers, the extra fingering and design contraints enforced by static typing can be life savers - ok, a test may detect that something is wrong, but how long before the programmer goes from the error produced by the test to the real problem? And what (how many?) changes to the code would that prompt? A problem I often have when programming with Jscheme is the error: "Expected pair or '(), but found blabla....". I know in what function this happens, I know where is the code expected the list, but god know where I put the blabla instead of it. The positive aspect is that this forces me to be much more attentive to the type of data I'm passing around, a habit I'd lost (or probably never really aquired) with languages like Java and C++. Cheers, Boris | -----Original Message----- | From: jsc...@li... | [mailto:jsc...@li...] On Behalf | Of Ken Anderson | Sent: Friday, July 02, 2004 4:43 PM | To: Jscheme Users | Subject: [Jscheme-user] Thinking about computing | | | This is Bruce Eckel's weblog: | http://www.mindview.net/WebLog | | He's written books on C++ and Java and now he's writing | Python, hates Java's checked exceptions, and likes dynamic typing! | | We should be able to make good use of his aguments. | | k | | | | ------------------------------------------------------- | This SF.Net email sponsored by Black Hat Briefings & | Training. Attend Black Hat Briefings & Training, Las Vegas | July 24-29 - | digital self defense, top technical experts, no vendor pitches, | unmatched networking opportunities. Visit www.blackhat.com | _______________________________________________ | Jscheme-user mailing list | Jsc...@li... | https://lists.sourceforge.net/lists/listinfo/jscheme-user | |
From: Timothy J. H. <tim...@ma...> - 2004-07-03 16:21:14
|
Begin forwarded message: > From: Timothy John Hickey <tim...@ma...> > Date: July 3, 2004 12:09:58 PM EDT > To: Geoffrey Knauth <ge...@kn...> > Cc: John T. Langton <ps...@br...>, Kenroy G. Granville > <kg...@cs...> > Subject: Re: [Jscheme-user] GrewpEdit in JScheme > > > On Jul 3, 2004, at 12:00 PM, Geoffrey Knauth wrote: > >> Windows XP Pro: >> -Java Web Start: >> -- Create Shortcut. Unable to create a shortcut for GroupEdit: v1.1 >> 7/2/04. Invalid filename. Please make sure the application title is >> valid. > Great. We'll rename the application. Should fix this bug. >> -- Seemed to work fine. >> -Signed applet: >> --WinXP Pro, IE6, via signed applet, double-clicked on visit-log, >> also single-clicked on visit-log & pressed JOIN, both times got this: >> >> ERROR in Action in reponse to an AWT >> eventjava.awt.event.ActionEvent[ACTION_PERFORMED,cmd=Join] on >> javax.swing.JButton[,0,0,59x28,layout=javax.swing.OverlayLayout,alignm >> entX=0.0,alignmentY=0.5,border=javax.swing.plaf.BorderUIResource$Compo >> undBorderUIResource@6c15a4,flags=1200,maximumSize=,minimumSize=,prefer >> redSize=,defaultIcon=,disabledIcon=,disabledSelectedIcon=,margin=javax >> .swing.plaf.InsetsUIResource[top=2,left=14,bottom=2,right=14],paintBor >> der=true,paintFocus=true,pressedIcon=,rolloverEnabled=false,rolloverIc >> on=,rolloverSelectedIcon=,selectedIcon=,text=Join,defaultCapable=true] >> is (undefined tag ()) > Ouch. I'll track it down. Thanks ! > >> >> Mac OS X: >> -Java Web Start: Clicking on this link in Safari triggered a download >> of grewp.servlet, after which nothing happened. I seem to recall >> that JWS apps on my Mac had .jlnp extensions. Am I remembering >> correctly? > Yes. I'll look into it for Safari.. > >> -Signed Applet: >> --Worked great EXCEPT (!!!) I was in a tab of Safari, and clicking >> Edit in the signed applet CLOSED MY SAFARI WINDOW (and thus, all the >> other web pages I happened to be visiting). It EXITED SAFARI too. > Ahh. We put in a System.exit, I'll get rid of that.... hmmmm > >> I'll have to try again with the signed applet in its own window. >> [...] I tried it again, it closes all of SAFARI. >> >> GNU/Linux (Fedora Core 1, FireFox 0.8 browser): >> - Java Web Start: Works great. > Great. >> - Signed applet. Everything I wrote about Mac OS X + signed applet >> applies, except the browser is FireFox instead of Safari. The >> behavior of the whole browser closing when I select File/Exit from >> the applet is the same. > OK... >> >> I'll have to try Solaris later. The kids want to go canoeing! > We're going out to the park too. > Thanks for the reports! It is really helpful and I greatly appreciate > it. > > Cheers, > Tim > >> >> Geoffrey >> -- >> Geoffrey S. Knauth | http://knauth.org/gsk >> >> On Jul 3, 2004, at 08:24, Timothy John Hickey wrote: >> >>> We are about to make a release of a Collaborative Editor >>> (GrewpEdit) implemented in JScheme and would appreciate >>> any feedback from the groupscheme and JScheme community about this >>> tool. >>> >>> http://tat.cs.brandeis.edu:8090/grewp >>> >>> We are releasing it as a Java Web Start (JWS) application, a signed >>> Java applet, >>> a double-clickable jar, and a source distribution. >>> >>> I am especially interested in seeing >>> >>> 1) whether the JWS and applet versions run on various Microsoft >>> operating >>> systems (we've tried one version of NT and it worked OK under >>> Netscape and IE) >>> >>> 2) whether there is a noticeable (or annoying!) lag time for people >>> using the editor far from Boston. (There is no noticeable lag >>> when I >>> use it from home. I'm about 10 routers and 10 miles away on a >>> wireless link to a DSL connection). >>> >>> The current version allows you to connect to a server in Boston just >>> by >>> supplying a username (any will do!). You can also create your own >>> Grewp server and have people connect to it. >>> >>> The client editors send scheme terms over a socket to a server which >>> resolves conflicts and sends back official transformed editing >>> operations. >>> The clients then apply these operations to their textfield. Thus, >>> this is a >>> full duplex model where a slow connection will cause a noticeable >>> lag. >>> Each character you type goes to the server, gets transformed and sent >>> back to your machine before it appears on the screen. >>> >>> We are working on building a Jupiter/NetEdit model that uses >>> speculation >>> to remove the lag time, but its not up yet. We are also working on a >>> mini-emacs >>> interface for the collaborative textarea (which would allow users to >>> define their >>> own emacs bindings in Jscheme ...) The next version of GrewpEdit >>> will allow >>> the user to select from a wide variety of widgets including >>> whiteboards, >>> cobrowsers, and other groupware widgets... >>> >>> Cheers, >>> ---Tim--- >>> >>> >>> >>> ------------------------------------------------------- >>> This SF.Net email sponsored by Black Hat Briefings & Training. >>> Attend Black Hat Briefings & Training, Las Vegas July 24-29 - >>> digital self defense, top technical experts, no vendor pitches, >>> unmatched networking opportunities. Visit www.blackhat.com >>> _______________________________________________ >>> Jscheme-user mailing list >>> Jsc...@li... >>> https://lists.sourceforge.net/lists/listinfo/jscheme-user >>> >> > |
From: Geoffrey K. <ge...@kn...> - 2004-07-03 16:00:33
|
Windows XP Pro: -Java Web Start: -- Create Shortcut. Unable to create a shortcut for GroupEdit: v1.1 7/2/04. Invalid filename. Please make sure the application title is valid. -- Seemed to work fine. -Signed applet: --WinXP Pro, IE6, via signed applet, double-clicked on visit-log, also single-clicked on visit-log & pressed JOIN, both times got this: ERROR in Action in reponse to an AWT eventjava.awt.event.ActionEvent[ACTION_PERFORMED,cmd=Join] on javax.swing.JButton[,0,0,59x28,layout=javax.swing.OverlayLayout,alignmen tX=0.0,alignmentY=0.5,border=javax.swing.plaf.BorderUIResource$CompoundB orderUIResource@6c15a4,flags=1200,maximumSize=,minimumSize=,preferredSiz e=,defaultIcon=,disabledIcon=,disabledSelectedIcon=,margin=javax.swing.p laf.InsetsUIResource[top=2,left=14,bottom=2,right=14],paintBorder=true,p aintFocus=true,pressedIcon=,rolloverEnabled=false,rolloverIcon=,rollover SelectedIcon=,selectedIcon=,text=Join,defaultCapable=true] is (undefined tag ()) Mac OS X: -Java Web Start: Clicking on this link in Safari triggered a download of grewp.servlet, after which nothing happened. I seem to recall that JWS apps on my Mac had .jlnp extensions. Am I remembering correctly? -Signed Applet: --Worked great EXCEPT (!!!) I was in a tab of Safari, and clicking Edit in the signed applet CLOSED MY SAFARI WINDOW (and thus, all the other web pages I happened to be visiting). It EXITED SAFARI too. I'll have to try again with the signed applet in its own window. [...] I tried it again, it closes all of SAFARI. GNU/Linux (Fedora Core 1, FireFox 0.8 browser): - Java Web Start: Works great. - Signed applet. Everything I wrote about Mac OS X + signed applet applies, except the browser is FireFox instead of Safari. The behavior of the whole browser closing when I select File/Exit from the applet is the same. I'll have to try Solaris later. The kids want to go canoeing! Geoffrey -- Geoffrey S. Knauth | http://knauth.org/gsk On Jul 3, 2004, at 08:24, Timothy John Hickey wrote: > We are about to make a release of a Collaborative Editor > (GrewpEdit) implemented in JScheme and would appreciate > any feedback from the groupscheme and JScheme community about this > tool. > > http://tat.cs.brandeis.edu:8090/grewp > > We are releasing it as a Java Web Start (JWS) application, a signed > Java applet, > a double-clickable jar, and a source distribution. > > I am especially interested in seeing > > 1) whether the JWS and applet versions run on various Microsoft > operating > systems (we've tried one version of NT and it worked OK under > Netscape and IE) > > 2) whether there is a noticeable (or annoying!) lag time for people > using the editor far from Boston. (There is no noticeable lag > when I > use it from home. I'm about 10 routers and 10 miles away on a > wireless link to a DSL connection). > > The current version allows you to connect to a server in Boston just by > supplying a username (any will do!). You can also create your own > Grewp server and have people connect to it. > > The client editors send scheme terms over a socket to a server which > resolves conflicts and sends back official transformed editing > operations. > The clients then apply these operations to their textfield. Thus, this > is a > full duplex model where a slow connection will cause a noticeable lag. > Each character you type goes to the server, gets transformed and sent > back to your machine before it appears on the screen. > > We are working on building a Jupiter/NetEdit model that uses > speculation > to remove the lag time, but its not up yet. We are also working on a > mini-emacs > interface for the collaborative textarea (which would allow users to > define their > own emacs bindings in Jscheme ...) The next version of GrewpEdit will > allow > the user to select from a wide variety of widgets including > whiteboards, > cobrowsers, and other groupware widgets... > > Cheers, > ---Tim--- > > > > ------------------------------------------------------- > This SF.Net email sponsored by Black Hat Briefings & Training. > Attend Black Hat Briefings & Training, Las Vegas July 24-29 - digital > self defense, top technical experts, no vendor pitches, unmatched > networking opportunities. Visit www.blackhat.com > _______________________________________________ > Jscheme-user mailing list > Jsc...@li... > https://lists.sourceforge.net/lists/listinfo/jscheme-user > |
From: Timothy J. H. <tim...@ma...> - 2004-07-03 12:24:56
|
We are about to make a release of a Collaborative Editor (GrewpEdit) implemented in JScheme and would appreciate any feedback from the groupscheme and JScheme community about this tool. http://tat.cs.brandeis.edu:8090/grewp We are releasing it as a Java Web Start (JWS) application, a signed Java applet, a double-clickable jar, and a source distribution. I am especially interested in seeing 1) whether the JWS and applet versions run on various Microsoft operating systems (we've tried one version of NT and it worked OK under Netscape and IE) 2) whether there is a noticeable (or annoying!) lag time for people using the editor far from Boston. (There is no noticeable lag when I use it from home. I'm about 10 routers and 10 miles away on a wireless link to a DSL connection). The current version allows you to connect to a server in Boston just by supplying a username (any will do!). You can also create your own Grewp server and have people connect to it. The client editors send scheme terms over a socket to a server which resolves conflicts and sends back official transformed editing operations. The clients then apply these operations to their textfield. Thus, this is a full duplex model where a slow connection will cause a noticeable lag. Each character you type goes to the server, gets transformed and sent back to your machine before it appears on the screen. We are working on building a Jupiter/NetEdit model that uses speculation to remove the lag time, but its not up yet. We are also working on a mini-emacs interface for the collaborative textarea (which would allow users to define their own emacs bindings in Jscheme ...) The next version of GrewpEdit will allow the user to select from a wide variety of widgets including whiteboards, cobrowsers, and other groupware widgets... Cheers, ---Tim--- |
From: Timothy J. H. <tim...@ma...> - 2004-07-03 12:06:04
|
On Jul 2, 2004, at 11:36 PM, Geoffrey Knauth wrote: > I found reference to JScheme in someone's Ph.D. dissertation. (I was > googling for an answer to a burning question...) > > http://www.cs.wisc.edu/~sastry/dissertation.pdf Thanks for the reference. It looks like he is using JScheme 1.4 (which was Peter Norvig's original Jscheme implementation from 1997). Its too bad he didn't try it on the latest version of JScheme. Still, the dissertation looks interesting and seems to point to ways in which JScheme could be optimized.... ---Tim--- > > Geoffrey > -- > Geoffrey S. Knauth | http://knauth.org/gsk > |
From: Ken A. <kan...@bb...> - 2004-07-02 21:30:41
|
Tim wrote a tiny version of JScheme, that used reflection extensively, without primitive procedures. Unfortunately, the performance of reflective methods is about 3 times worse than primitives for the -client JVM, though it seems better for the -sever JVM. This got me thinking ... Currently we primitives.scm is used to generate Primitive.java which provides all the JScheme primitives. It aught to be possible to take a class and through reflection, generate a class that provides primitive procedures that correspond to its methods. Take the Math.class for example. sin() would only work for a double, but max and min could work for all numeric types. k |