Hmm .. looks like doing this "UI-thing" without some harder/clearer
separation of data and UI/presentation is a huge mistake (or a huge
_lack_ in SW currently).
I'm experimenting with some ideas here:
http://common-lisp.net/~lnostdal/programming/lisp/symbolicweb-mvc/src/model-view-controller.lisp
..I'm thinking perhaps just blindly forwarding the call/message to the
view(s) is a mistake; I should probably let the model code deal with
this forwarding .. or maybe the model code should just handle special
cases..
..a container model of some sort (base class):
http://common-lisp.net/~lnostdal/programming/lisp/symbolicweb-mvc/src/container-model-base.lisp
..a concrete model (data stored in an in-Lisp list):
http://common-lisp.net/~lnostdal/programming/lisp/symbolicweb-mvc/src/container-model-list.lisp
..how to draw/present container models in most common cases:
http://common-lisp.net/~lnostdal/programming/lisp/symbolicweb-mvc/src/container-view-base.lisp
..and specifically for, uh, "lists":
http://common-lisp.net/~lnostdal/programming/lisp/symbolicweb-mvc/src/container-view-list.lisp
..and the "controller"(?) is what exports or defines the user API ..
http://common-lisp.net/~lnostdal/programming/lisp/symbolicweb-mvc/src/container-controller-base.lisp
Ok, so that just forwards or converts the call to a generic mvc-handler
call which propagate through the "network" of methods based on the
multiple argument types, method-combinations (maybe later?) etc. ..
This is horribly broken in some places, still -- how do people (or,
Lispers) do this? I figure the general idea or goal is to be able to
do something like this:
(let* ((model (make-instance 'container-model-list))
(widget-1 (make-instance 'combo-box :model model))
(widget-2 (make-instance 'simple-pane :model model)))
(iappend "item-1" model)
(iappend "item-2" model))
..then have both the combo-box and simple-pane widgets update
automatically and present the data added to their common, shared,
model in some way, or an other.
I've been looking at things like Context. I think layers etc. might
belong at a higher level, above "widget-stuff"; more for
"is-the-user-logged-in-as-admin-layer" type things .. but I'm not sure.
--
Lars Rune Nøstdal || AJAX/Comet GUI type stuff for Common Lisp
http://nostdal.org/ || http://groups.google.com/group/symbolicweb
Lars Rune Nøstdal wrote:
> Hmm .. looks like doing this "UI-thing" without some harder/clearer
> separation of data and UI/presentation is a huge mistake (or a huge
> _lack_ in SW currently).
>
>
> I'm experimenting with some ideas here:
> http://common-lisp.net/~lnostdal/programming/lisp/symbolicweb-mvc/src/model-view-controller.lisp
>
> ..I'm thinking perhaps just blindly forwarding the call/message to the
> view(s) is a mistake; I should probably let the model code deal with
> this forwarding .. or maybe the model code should just handle special
> cases..
>
>
> ..a container model of some sort (base class):
> http://common-lisp.net/~lnostdal/programming/lisp/symbolicweb-mvc/src/container-model-base.lisp
>
>
> ..a concrete model (data stored in an in-Lisp list):
> http://common-lisp.net/~lnostdal/programming/lisp/symbolicweb-mvc/src/container-model-list.lisp
>
>
> ..how to draw/present container models in most common cases:
> http://common-lisp.net/~lnostdal/programming/lisp/symbolicweb-mvc/src/container-view-base.lisp
>
>
> ..and specifically for, uh, "lists":
> http://common-lisp.net/~lnostdal/programming/lisp/symbolicweb-mvc/src/container-view-list.lisp
>
>
> ..and the "controller"(?) is what exports or defines the user API ..
> http://common-lisp.net/~lnostdal/programming/lisp/symbolicweb-mvc/src/container-controller-base.lisp
>
>
> Ok, so that just forwards or converts the call to a generic mvc-handler
> call which propagate through the "network" of methods based on the
> multiple argument types, method-combinations (maybe later?) etc. ..
>
> This is horribly broken in some places, still -- how do people (or,
> Lispers) do this? I figure the general idea or goal is to be able to
> do something like this:
>
>
> (let* ((model (make-instance 'container-model-list))
> (widget-1 (make-instance 'combo-box :model model))
> (widget-2 (make-instance 'simple-pane :model model)))
> (iappend "item-1" model)
> (iappend "item-2" model))
>
>
> ..then have both the combo-box and simple-pane widgets update
> automatically and present the data added to their common, shared,
> model in some way, or an other.
I'm falling asleep over here! You call that a /problem/? That ain't no
stinkin problem!
I am not smart like you people so I am not sure how to use big words
like isomorphism and abstraction and delegation or anything, but any
decent reactive system will let you quite naturally simply express any
number of views each on any number of models and even other models and
views. This will be done without thinking most of the time, you just say
this grid as a row for every student in the class, and when you add a
student to the class the grid will grow a new row. This is done simply
by saying something like:
(make-instance 'grid
:rows (the-formula
(loop for student in (model self) ;; a class
collect (make-instance' row :model student)))
You can get fancy efficient by checking the cached value for the
existing rows of all other existing students(the extant value for a
running rule is visible to the rule) and simply recollect the same
instance -- this then being a bit hairier than the usual rule
whichsimply computes a brand new value, but it is just:
(or (find 'student .cache :key 'model)
...make a new one...
So now there is no concern over how to propagate information, one just
reads the manifesto.txt provided with all good reactive systems and see
the subtleties of the ordering of changes to help you see thru the magic
-- magic is productive but no one wants to program with it until they
know the trick.
As for MVC, in my case I /do/ have an image class (you say "view", I say
"image") with a slot for the model, and I have a separate class
hierarchy for control and I make UI classes by multiply inheriting from
view and maybe control and stick anything I want in a model slot. A
Family class has a kids slot and I use trees for GUI as well as model
representation. So I am not a complete lunatic but I just never think
about MVC in terms of how I can pipe state change around.
>
> I've been looking at things like Context.
I looked at ContextL and based on what I saw I wouldn't trust it. For
one, it uses CLOS a *lot*.
> I think layers etc. might
> belong at a higher level, above "widget-stuff"; more for
> "is-the-user-logged-in-as-admin-layer" type things .. but I'm not sure.
Celtk and its derivative Cells-Gtk and even the bit of OpenAIR that is
out there would be especially instructive because they not only do model
and view, they also take the view and recreate it in another
environment: Tcl/Tk, GTk, or a browser. And not just structure, but
attributes such as color. In this case the propagation is more manual:
the developer of the glue between systems has to call an API or pipe
commands over a socket or stuff it into HTTP requests to get the magic
to happen. But once it is done, one forgets it is there and just
programs the Lisp side.
cheers,ken
ps. Did you look at Dojo at all? They have /great/ hype, and even beat
jquery in googlefight. kt
On Sun, 2008-10-26 at 00:49 -0400, Kenny wrote:
> Lars Rune Nøstdal wrote:
> > Hmm .. looks like doing this "UI-thing" without some harder/clearer
> > separation of data and UI/presentation is a huge mistake (or a huge
> > _lack_ in SW currently).
> >
> >
> > I'm experimenting with some ideas here:
> > http://common-lisp.net/~lnostdal/programming/lisp/symbolicweb-mvc/src/model-view-controller.lisp
> >
> > ..I'm thinking perhaps just blindly forwarding the call/message to the
> > view(s) is a mistake; I should probably let the model code deal with
> > this forwarding .. or maybe the model code should just handle special
> > cases..
> >
> >
> > ..a container model of some sort (base class):
> > http://common-lisp.net/~lnostdal/programming/lisp/symbolicweb-mvc/src/container-model-base.lisp
> >
> >
> > ..a concrete model (data stored in an in-Lisp list):
> > http://common-lisp.net/~lnostdal/programming/lisp/symbolicweb-mvc/src/container-model-list.lisp
> >
> >
> > ..how to draw/present container models in most common cases:
> > http://common-lisp.net/~lnostdal/programming/lisp/symbolicweb-mvc/src/container-view-base.lisp
> >
> >
> > ..and specifically for, uh, "lists":
> > http://common-lisp.net/~lnostdal/programming/lisp/symbolicweb-mvc/src/container-view-list.lisp
> >
> >
> > ..and the "controller"(?) is what exports or defines the user API ..
> > http://common-lisp.net/~lnostdal/programming/lisp/symbolicweb-mvc/src/container-controller-base.lisp
> >
> >
> > Ok, so that just forwards or converts the call to a generic mvc-handler
> > call which propagate through the "network" of methods based on the
> > multiple argument types, method-combinations (maybe later?) etc. ..
> >
> > This is horribly broken in some places, still -- how do people (or,
> > Lispers) do this? I figure the general idea or goal is to be able to
> > do something like this:
> >
> >
> > (let* ((model (make-instance 'container-model-list))
> > (widget-1 (make-instance 'combo-box :model model))
> > (widget-2 (make-instance 'simple-pane :model model)))
> > (iappend "item-1" model)
> > (iappend "item-2" model))
> >
> >
> > ..then have both the combo-box and simple-pane widgets update
> > automatically and present the data added to their common, shared,
> > model in some way, or an other.
>
> I'm falling asleep over here! You call that a /problem/? That ain't no
> stinkin problem!
>
> I am not smart like you people so I am not sure how to use big words
> like isomorphism and abstraction and delegation or anything, but any
> decent reactive system will let you quite naturally simply express any
> number of views each on any number of models and even other models and
> views. This will be done without thinking most of the time, you just say
> this grid as a row for every student in the class, and when you add a
> student to the class the grid will grow a new row. This is done simply
> by saying something like:
>
> (make-instance 'grid
> :rows (the-formula
> (loop for student in (model self) ;; a class
> collect (make-instance' row :model student)))
Hmm, yeah .. what happens when the grid instance is GCed in some way or
another?
I suppose I could, in combination with Cells(?), use weak pointers and
point them in "both directions"; source - target(?). Then remove the
link whenever it tries to propagate a value to something that has been
GCed (link is determined to be broken when access is attempted) .. but
using a weak hash-table does this automatically for me in cases where I
cannot predict how long something (target cell?) will exist.
>
> ps. Did you look at Dojo at all? They have /great/ hype, and even beat
> jquery in googlefight. kt
lol .. yeah .. there's just too much stuff out there. I haven't looked
at Dojo, but there sure is a lot of hype around it. I guess they are all
looking for resources; mind-share - or something. Same with MS
and .Net .. they are pushing that stuff hard.
I have been keeping my eye on qooxdoo, as a higher-level widget-based
library.
..but I keep falling back to just doing or generating almost
_everything_ on the server-side, in Lisp, even though it probably is
less effective etc. .....who cares; I can change it later (sub-class
"fast-xxx-widget") by moving stuff to JS/client side when really needed.
Also a relatively new, much lower-level and smaller, at least at the
core, library Ra-Ajax has been getting some of my attention. Not so much
for its higher-level widgets (which are defined/written in server-side
C#), but just the core part of it. It's extremely small and lean; much
smaller than jQuery even.
--
Lars Rune Nøstdal || AJAX/Comet GUI type stuff for Common Lisp
http://nostdal.org/ || http://groups.google.com/group/symbolicweb
Lars Rune Nøstdal wrote:
> On Sun, 2008-10-26 at 00:49 -0400, Kenny wrote:
>
>>Lars Rune Nøstdal wrote:
>>
>>>Hmm .. looks like doing this "UI-thing" without some harder/clearer
>>>separation of data and UI/presentation is a huge mistake (or a huge
>>>_lack_ in SW currently).
>>>
>>>
>>>I'm experimenting with some ideas here:
>>>http://common-lisp.net/~lnostdal/programming/lisp/symbolicweb-mvc/src/model-view-controller.lisp
>>>
>>>..I'm thinking perhaps just blindly forwarding the call/message to the
>>>view(s) is a mistake; I should probably let the model code deal with
>>>this forwarding .. or maybe the model code should just handle special
>>>cases..
>>>
>>>
>>>..a container model of some sort (base class):
>>>http://common-lisp.net/~lnostdal/programming/lisp/symbolicweb-mvc/src/container-model-base.lisp
>>>
>>>
>>>..a concrete model (data stored in an in-Lisp list):
>>>http://common-lisp.net/~lnostdal/programming/lisp/symbolicweb-mvc/src/container-model-list.lisp
>>>
>>>
>>>..how to draw/present container models in most common cases:
>>>http://common-lisp.net/~lnostdal/programming/lisp/symbolicweb-mvc/src/container-view-base.lisp
>>>
>>>
>>>..and specifically for, uh, "lists":
>>>http://common-lisp.net/~lnostdal/programming/lisp/symbolicweb-mvc/src/container-view-list.lisp
>>>
>>>
>>>..and the "controller"(?) is what exports or defines the user API ..
>>>http://common-lisp.net/~lnostdal/programming/lisp/symbolicweb-mvc/src/container-controller-base.lisp
>>>
>>>
>>>Ok, so that just forwards or converts the call to a generic mvc-handler
>>>call which propagate through the "network" of methods based on the
>>>multiple argument types, method-combinations (maybe later?) etc. ..
>>>
>>>This is horribly broken in some places, still -- how do people (or,
>>>Lispers) do this? I figure the general idea or goal is to be able to
>>>do something like this:
>>>
>>>
>>>(let* ((model (make-instance 'container-model-list))
>>> (widget-1 (make-instance 'combo-box :model model))
>>> (widget-2 (make-instance 'simple-pane :model model)))
>>> (iappend "item-1" model)
>>> (iappend "item-2" model))
>>>
>>>
>>>..then have both the combo-box and simple-pane widgets update
>>>automatically and present the data added to their common, shared,
>>>model in some way, or an other.
>>
>>I'm falling asleep over here! You call that a /problem/? That ain't no
>>stinkin problem!
>>
>>I am not smart like you people so I am not sure how to use big words
>>like isomorphism and abstraction and delegation or anything, but any
>>decent reactive system will let you quite naturally simply express any
>>number of views each on any number of models and even other models and
>>views. This will be done without thinking most of the time, you just say
>>this grid as a row for every student in the class, and when you add a
>>student to the class the grid will grow a new row. This is done simply
>>by saying something like:
>>
>> (make-instance 'grid
>> :rows (the-formula
>> (loop for student in (model self) ;; a class
>> collect (make-instance' row :model student)))
>
>
> Hmm, yeah .. what happens when the grid instance is GCed in some way or
> another?
Anchor these structures in globals, they ain't goin anywhere.
>
> I suppose I could, in combination with Cells(?), use weak pointers and
> point them in "both directions"; source - target(?). Then remove the
> link whenever it tries to propagate a value to something that has been
> GCed (link is determined to be broken when access is attempted) .. but
> using a weak hash-table does this automatically for me in cases where I
> cannot predict how long something (target cell?) will exist.
I confess one downside of Cells is that it requires manual GC, although
Cells itself automates that so it is not really manual. Let's just say
it is not in the spirit of Lisp GC but I never think about it.
A aingle tree defines my entire application. The model grows and
contracts with ruled clots that have an optional :owning attribute. As
models contract the Cells engine kicks off quiescence of the dearly
departed. This includes dependents disconnecting from their dependencies.
>
>
>
>>ps. Did you look at Dojo at all? They have /great/ hype, and even beat
>>jquery in googlefight. kt
>
>
>
> lol .. yeah .. there's just too much stuff out there.
How many are backed by IBM?
I haven't looked
> at Dojo, but there sure is a lot of hype around it. I guess they are all
> looking for resources; mind-share - or something. Same with MS
> and .Net .. they are pushing that stuff hard.
>
> I have been keeping my eye on qooxdoo, as a higher-level widget-based
> library.
Oooh, no HTML and no CSS, I like that. Separation of model and view is
completely overrated.
>
> ..but I keep falling back to just doing or generating almost
> _everything_ on the server-side, in Lisp, even though it probably is
> less effective etc.
I don't know, maybe there is a performance advantage with big widgets
like datagrids. I always worry about missing out on Chrome compilation
cuz I am sending over JS in tiny bits, but it certainly is the best way
to let the developer forget anything other than Lisp exists.
kt
Kenny wrote:
> Lars Rune Nøstdal wrote:
>
>> I have been keeping my eye on qooxdoo, as a higher-level widget-based
>> library.
>
>
> Oooh, no HTML and no CSS, I like that. Separation of model and view is
> completely overrated.
Hmmm, dojo wins 4m to 120k in googlfight. The Lisp of Web tools?
kt
Kenny wrote:
> Kenny wrote:
>> Lars Rune N�stdal wrote:
>>
>>> I have been keeping my eye on qooxdoo, as a higher-level widget-based
>>> library.
>>
>>
>> Oooh, no HTML and no CSS, I like that. Separation of model and view is
>> completely overrated.
>
> Hmmm, dojo wins 4m to 120k in googlfight. The Lisp of Web tools?
Take a look at what is called "dojo", too:
http://images.google.com/images?q=dojo
I guess the word "qooxdoo" is not used for something other than the
framework.
--
Frank Buss, ··@frank-buss.de
http://www.frank-buss.de, http://www.it4-systems.de
Frank Buss wrote:
> Kenny wrote:
>
>
>>Kenny wrote:
>>
>>>Lars Rune N�stdal wrote:
>>>
>>>
>>>>I have been keeping my eye on qooxdoo, as a higher-level widget-based
>>>>library.
>>>
>>>
>>>Oooh, no HTML and no CSS, I like that. Separation of model and view is
>>>completely overrated.
>>
>>Hmmm, dojo wins 4m to 120k in googlfight. The Lisp of Web tools?
>
>
> Take a look at what is called "dojo", too:
>
> http://images.google.com/images?q=dojo
>
> I guess the word "qooxdoo" is not used for something other than the
> framework.
>
I lied, I actually googlefought dojo+web and qooxdoo+web. Fascinatingly,
lead with web on both terms and the results drop to 420k vs 70k.
Well, their Web page said all the right things and even makes IBM's
support look like a negative. I think I'll see if I can sell them on a
JS port of Cells, tho I am sure thay have rolled their own. Everyone is
jumping on the reactive bandwagon these days.
kt
On Sun, 2008-10-26 at 04:13 -0400, Kenny wrote:
> Kenny wrote:
> > Lars Rune Nøstdal wrote:
> >
> >> I have been keeping my eye on qooxdoo, as a higher-level widget-based
> >> library.
> >
> >
> > Oooh, no HTML and no CSS, I like that. Separation of model and view is
> > completely overrated.
Yeah, they are using some other method to style things:
http://qooxdoo.org/documentation/general/styling_without_css_know-how
>
> Hmmm, dojo wins 4m to 120k in googlfight. The Lisp of Web tools?
>
> kt
Heh, yeah, perhaps .. they seem to be eating their own dog food (hype
and user-count don't matter much there):
http://qooxdoo.org/community/real_life_examples
..the GMX mail-client is very nice in particular; sure beats the GMail
UI.
--
Lars Rune Nøstdal || AJAX/Comet GUI type stuff for Common Lisp
http://nostdal.org/ || http://groups.google.com/group/symbolicweb
On Sun, 26 Oct 2008 10:17:31 +0100, Lars Rune Nøstdal wrote:
> ..the GMX mail-client is very nice in particular; sure beats the GMail
> UI.
My mail client is written in C and it's way better than any webmail I
have seen. Does it mean that C is a particular cool thing backed by an
awesome framework?
So far the only web-wannabe-local-apps I know can be only categorized
into "painfull" and "less painfull". Including my own, of course.
regards,
Marek
On Sun, 2008-10-26 at 15:32 +0000, Marek Kubica wrote:
> On Sun, 26 Oct 2008 10:17:31 +0100, Lars Rune Nøstdal wrote:
>
> > ..the GMX mail-client is very nice in particular; sure beats the GMail
> > UI.
>
> My mail client is written in C and it's way better than any webmail I
> have seen.
How do I install it?
Does it run on my brothers Mac too?
How do you distribute it? How do you distribude updates?
What happens to my config/settings etc. when I buy a new computer?
Just questions -- and the web browser ("UI-library") happens to be
written in C++ btw.
> Does it mean that C is a particular cool thing backed by an
> awesome framework?
What? Is this some sort of competition?
On Mon, 2008-10-27 at 03:19 +0100, Lars Rune Nøstdal wrote:
> On Sun, 2008-10-26 at 15:32 +0000, Marek Kubica wrote:
> > On Sun, 26 Oct 2008 10:17:31 +0100, Lars Rune Nøstdal wrote:
> >
> > > ..the GMX mail-client is very nice in particular; sure beats the GMail
> > > UI.
> >
> > My mail client is written in C and it's way better than any webmail I
> > have seen.
>
> How do I install it?
>
> Does it run on my brothers Mac too?
>
> How do you distribute it? How do you distribude updates?
>
> What happens to my config/settings etc. when I buy a new computer?
>
> Just questions -- and the web browser ("UI-library") happens to be
> written in C++ btw.
>
>
> > Does it mean that C is a particular cool thing backed by an
> > awesome framework?
>
> What? Is this some sort of competition?
>
PS: I now have to quit and then restart this thing for it to download
new messages.
In general all software == crap. There is not a single good thing out
there -- I can't think of anything; nothing. Windows sucks .. Linux
sucks .. C sucks .. Lisp sucks .. C# sucks .. Java sucks .. JavaScript
sucks .. C++ is fucking _evil_, _vile_, _crap_ .. .. _all_ libraries and
applications; ..everything, is shit.
..at least I want to be able to friggin fix things here, while at home,
and not have to guess what SHIT some idiot on the other end has
installed that caused conflicts or problems he does not have the skill,
knowledge or care to see or detect or report properly.
"Duuuh .. VPS access? Port forwarding?" .. have you tried to debug an
application remotely lately? Maybe it works if the infrastructure is
there already, but the web is the best thing that has ever happened for
developers as far as I'm concerned. Even if it sucks and is grossly
incomplete wrt. UI and whatnot.
Lars Rune Nøstdal wrote:
> On Mon, 2008-10-27 at 03:19 +0100, Lars Rune Nøstdal wrote:
>
>>On Sun, 2008-10-26 at 15:32 +0000, Marek Kubica wrote:
>>
>>>On Sun, 26 Oct 2008 10:17:31 +0100, Lars Rune Nøstdal wrote:
>>>
>>>
>>>>..the GMX mail-client is very nice in particular; sure beats the GMail
>>>>UI.
>>>
>>>My mail client is written in C and it's way better than any webmail I
>>>have seen.
>>
>>How do I install it?
>>
>>Does it run on my brothers Mac too?
>>
>>How do you distribute it? How do you distribude updates?
>>
>>What happens to my config/settings etc. when I buy a new computer?
>>
>>Just questions -- and the web browser ("UI-library") happens to be
>>written in C++ btw.
>>
>>
>>
>>>Does it mean that C is a particular cool thing backed by an
>>>awesome framework?
>>
>>What? Is this some sort of competition?
>>
>
>
> PS: I now have to quit and then restart this thing for it to download
> new messages.
>
> In general all software == crap. There is not a single good thing out
> there -- I can't think of anything; nothing. Windows sucks .. Linux
> sucks .. C sucks .. Lisp sucks .. C# sucks .. Java sucks .. JavaScript
> sucks .. C++ is fucking _evil_, _vile_, _crap_ .. .. _all_ libraries and
> applications; ..everything, is shit.
>
> ..at least I want to be able to friggin fix things here, while at home,
> and not have to guess what SHIT some idiot on the other end has
> installed that caused conflicts or problems he does not have the skill,
> knowledge or care to see or detect or report properly.
Ah, my never-ending dialog with the idiot at the other end of the
software I use. Fortunately as rare with AllegroCL as it is non-stop
with ASDF, impressive since ASDF has one trivial task to perform most of
which is provide by CL itself.
Are you as bad as me? Do you believe no one but you should be allowed to
program computers? Aside from Edi, of course.
>
> "Duuuh .. VPS access? Port forwarding?" .. have you tried to debug an
> application remotely lately? Maybe it works if the infrastructure is
> there already, but the web is the best thing that has ever happened for
> developers as far as I'm concerned. Even if it sucks and is grossly
> incomplete wrt. UI and whatnot.
>
It seems qooxdoo has us once removed from the JS. ick.
I think what I want to do is have Lisp, JS, and...no, that's it.
:onClick "evalRequest('/event?id='+this.id+...more event info);"
For a key event, the window's ID (or the body's?) is used.
evalRequest looks like this:
function evalRequest(url) {
var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState==4 && xmlhttp.status==200) {
console.log('eval '+ xmlhttp.responseText);
eval(xmlhttp.responseText);
}
}
xmlhttp.open("GET", url, true);
xmlhttp.send(null);
}
Or is that slow? I stole it off some blog. We kicked this around, I
think you said this was slow. I tried stuffing it as a script tag in a
div, browsers were unimpressed. Comet left as an exercise.
Then I just handle one URL and drive my app framework the same as I do
any cells framework, parsing the event and dispatching it appropriately
to the moused widget or to the keyboard focus, which is tracked Lisp-side.
I have a CLOS class for each HTML tag, slots for each attribute, exact
same as for CelTk. Now all I need to do is the same thing I did when
Celtk was using the same pipe scheme as LTk: there for each settable
attribute I piped the Tcl code to set the attribute over to Tcl. Same
with JS/HTML. And as widgets come and go it was pack and unpack for Tk
and DOM manipulation for JS/HTML.
The wicked cool thing is that after it matures one can forget one is
programming anything other than Lisp, tho we understand the classes and
slots map onto tags and attributes and we still need to provide
reasonable values thereto. The nice thing here being the HTML doc is
still the doc.
Ooh! I just noticed: look ma, no HTML generator. No CSS, and there is no
need for fancy JQuery chaining and DOM addressing or anything, it is all
happening on the Lisp side where Cells is supporting a declarative model
for authoring HTML meaning one just describes how the world should be
(on the Lisp side) and Cells does two things: it propagates change
throughout the Lisp model and it propagates change over to the mirror
HTML model.
No need for ParenScript, I am writing Lisp, not JS.
But maybe there is value in building atop Dojo? Well, that can be
dropped in later.
kt
ps. My favorite is when I delete a 2k text file on Windows and
apparently the disk drives are sleeping or the OS got swapped out so it
takes Windows about a minute to delete the one 5-line text file but it
starts by putting up the progress indicator which shuttles document
afetr document to the trash can for a full minute in a perfect
impersonation of an accidental delete of one's entire HD. I heard they
actually have high school kids doing the programming, and I believe it. k
On Mon, 2008-10-27 at 01:04 -0400, Kenny wrote:
> Lars Rune Nøstdal wrote:
> > On Mon, 2008-10-27 at 03:19 +0100, Lars Rune Nøstdal wrote:
> >
> >>On Sun, 2008-10-26 at 15:32 +0000, Marek Kubica wrote:
> >>
> >>>On Sun, 26 Oct 2008 10:17:31 +0100, Lars Rune Nøstdal wrote:
> >>>
> >>>
> >>>>..the GMX mail-client is very nice in particular; sure beats the GMail
> >>>>UI.
> >>>
> >>>My mail client is written in C and it's way better than any webmail I
> >>>have seen.
> >>
> >>How do I install it?
> >>
> >>Does it run on my brothers Mac too?
> >>
> >>How do you distribute it? How do you distribude updates?
> >>
> >>What happens to my config/settings etc. when I buy a new computer?
> >>
> >>Just questions -- and the web browser ("UI-library") happens to be
> >>written in C++ btw.
> >>
> >>
> >>
> >>>Does it mean that C is a particular cool thing backed by an
> >>>awesome framework?
> >>
> >>What? Is this some sort of competition?
> >>
> >
> >
> > PS: I now have to quit and then restart this thing for it to download
> > new messages.
> >
> > In general all software == crap. There is not a single good thing out
> > there -- I can't think of anything; nothing. Windows sucks .. Linux
> > sucks .. C sucks .. Lisp sucks .. C# sucks .. Java sucks .. JavaScript
> > sucks .. C++ is fucking _evil_, _vile_, _crap_ .. .. _all_ libraries and
> > applications; ..everything, is shit.
> >
> > ..at least I want to be able to friggin fix things here, while at home,
> > and not have to guess what SHIT some idiot on the other end has
> > installed that caused conflicts or problems he does not have the skill,
> > knowledge or care to see or detect or report properly.
>
> Ah, my never-ending dialog with the idiot at the other end of the
> software I use. Fortunately as rare with AllegroCL as it is non-stop
> with ASDF, impressive since ASDF has one trivial task to perform most of
> which is provide by CL itself.
>
> Are you as bad as me? Do you believe no one but you should be allowed to
> program computers? Aside from Edi, of course.
Nah, I suck. My code is in a state of evolving, complex, organic mess
headed in ten different directions at the same time, all the time.
But somehow, I _do_ manage to pull myself together and tie all the loose
ends together to get an actual application & backend (thnx Postmodern! I
love that thing) up and running when someone puts a knife to my throat.
The context-switching required is driving me up the wall at times
though; "noooooo, I want to finish this cool-but-impossible feature X
first!". :)
PS: I've deleted all the documentation in one of the more recent
branches I'm working on .. again. I gave up; English is way harder to
read (and type) compared to Lisp.
> >
> > "Duuuh .. VPS access? Port forwarding?" .. have you tried to debug an
> > application remotely lately? Maybe it works if the infrastructure is
> > there already, but the web is the best thing that has ever happened for
> > developers as far as I'm concerned. Even if it sucks and is grossly
> > incomplete wrt. UI and whatnot.
> >
>
> It seems qooxdoo has us once removed from the JS. ick.
>
> I think what I want to do is have Lisp, JS, and...no, that's it.
>
> :onClick "evalRequest('/event?id='+this.id+...more event info);"
>
> For a key event, the window's ID (or the body's?) is used.
>
> evalRequest looks like this:
>
> function evalRequest(url) {
> var xmlhttp = new XMLHttpRequest();
> xmlhttp.onreadystatechange = function() {
> if (xmlhttp.readyState==4 && xmlhttp.status==200) {
> console.log('eval '+ xmlhttp.responseText);
> eval(xmlhttp.responseText);
> }
> }
> xmlhttp.open("GET", url, true);
> xmlhttp.send(null);
> }
>
> Or is that slow? I stole it off some blog. We kicked this around, I
> think you said this was slow.
Creating a temporary script-tag is what jQuery does it seems. The
getScript function in jQuery has been fast enough for my uses. It's one
of those; "optimize later when/if needed" things again. Also; caching a
"JS-lambda" (response) on the client is possible of course.
Around line 2891 in jquery-1.2.6.js:
if ( type == "script" )
jQuery.globalEval( data )
..and globalEval is defined around line 629. The code is a mess isn't
it? I'd love to get rid of the run-time dispatching wrt. browser type ..
ohwell; later.
> I tried stuffing it as a script tag in a
> div, browsers were unimpressed. Comet left as an exercise.
>
> Then I just handle one URL and drive my app framework the same as I do
> any cells framework, parsing the event and dispatching it appropriately
> to the moused widget or to the keyboard focus, which is tracked Lisp-side.
>
> I have a CLOS class for each HTML tag, slots for each attribute, exact
> same as for CelTk. Now all I need to do is the same thing I did when
> Celtk was using the same pipe scheme as LTk: there for each settable
> attribute I piped the Tcl code to set the attribute over to Tcl. Same
> with JS/HTML. And as widgets come and go it was pack and unpack for Tk
> and DOM manipulation for JS/HTML.
>
> The wicked cool thing is that after it matures one can forget one is
> programming anything other than Lisp, tho we understand the classes and
> slots map onto tags and attributes and we still need to provide
> reasonable values thereto. The nice thing here being the HTML doc is
> still the doc.
Yeah, this is awesome stuff. I have full support (I think...) for CSS in
SW:
(add-to (root) (mk-div "Hello World"
:background-color "red"
:color "blue"
:font-weight "bold"))
..etc. .. based on:
http://common-lisp.net/~lnostdal/programming/lisp/symbolicweb/src/widgets/css.lisp
..padding, borders etc. .. ..
>
> Ooh! I just noticed: look ma, no HTML generator. No CSS, and there is no
> need for fancy JQuery chaining and DOM addressing or anything,
Yep. I just "chain" calls to plain simple jQuery functions.
> it is all happening on the Lisp side where Cells is supporting a declarative model
> for authoring HTML meaning one just describes how the world should be
> (on the Lisp side) and Cells does two things: it propagates change
> throughout the Lisp model and it propagates change over to the mirror
> HTML model.
Yes! Any state change of "DOM-stuff" on the server is mirrored on the
client in real-time (if the widget is determined to be visible on the
client atm. though, ofc).
> No need for ParenScript, I am writing Lisp, not JS.
Yup. :) ..just optimize for larger chunks of "JS-updates" in-one-go
later; when actually needed.
> But maybe there is value in building atop Dojo? Well, that can be
> dropped in later.
>
> kt
>
> ps. My favorite is when I delete a 2k text file on Windows and
> apparently the disk drives are sleeping or the OS got swapped out so it
> takes Windows about a minute to delete the one 5-line text file but it
> starts by putting up the progress indicator which shuttles document
> afetr document to the trash can for a full minute in a perfect
> impersonation of an accidental delete of one's entire HD. I heard they
> actually have high school kids doing the programming, and I believe it. k
..lol..yeah
On Mon, 2008-10-27 at 03:34 +0100, Lars Rune Nøstdal wrote:
> On Mon, 2008-10-27 at 03:19 +0100, Lars Rune Nøstdal wrote:
> > On Sun, 2008-10-26 at 15:32 +0000, Marek Kubica wrote:
> > > On Sun, 26 Oct 2008 10:17:31 +0100, Lars Rune Nøstdal wrote:
> > >
> > > > ..the GMX mail-client is very nice in particular; sure beats the GMail
> > > > UI.
> > >
> > > My mail client is written in C and it's way better than any webmail I
> > > have seen.
> >
> > How do I install it?
> >
> > Does it run on my brothers Mac too?
> >
> > How do you distribute it? How do you distribude updates?
> >
> > What happens to my config/settings etc. when I buy a new computer?
> >
> > Just questions -- and the web browser ("UI-library") happens to be
> > written in C++ btw.
> >
> >
> > > Does it mean that C is a particular cool thing backed by an
> > > awesome framework?
> >
> > What? Is this some sort of competition?
> >
>
> PS: I now have to quit and then restart this thing for it to download
> new messages.
>
> In general all software == crap. There is not a single good thing out
> there -- I can't think of anything; nothing. Windows sucks .. Linux
> sucks .. C sucks .. Lisp sucks .. C# sucks .. Java sucks .. JavaScript
> sucks .. C++ is fucking _evil_, _vile_, _crap_ .. .. _all_ libraries and
> applications; ..everything, is shit.
>
> ..at least I want to be able to friggin fix things here, while at home,
> and not have to guess what SHIT some idiot on the other end has
> installed that caused conflicts or problems he does not have the skill,
> knowledge or care to see or detect or report properly.
>
> "Duuuh .. VPS access? Port forwarding?"
..i meant VNC of course..
On Mon, 27 Oct 2008 03:19:40 +0100, Lars Rune Nøstdal wrote:
> How do I install it?
How can I login? Why is it sending my passwords in clear text? Whats this
cookie thing?
> Does it run on my brothers Mac too?
Why does it look crappy on my iPhone? And even worse on my Openmoko?
And why does it look broken on every IE I have tried?
> How do you distribute it? How do you distribude updates?
Point taken. How about XSS, CSRF, clickforging?
> What happens to my config/settings etc. when I buy a new computer?
What happens to my data if the provide disappears?
>> Does it mean that C is a particular cool thing backed by an awesome
>> framework?
>
> What? Is this some sort of competition?
No, not really. But I never understood the point of reinventing the wheel
poorly and going all excited over it.
regards,
Marek
On Oct 28, 1:32 am, Marek Kubica <·····@xivilization.net> wrote:
> On Mon, 27 Oct 2008 03:19:40 +0100, Lars Rune Nøstdal wrote:
> > How do I install it?
>
> How can I login? Why is it sending my passwords in clear text? Whats this
> cookie thing?
HTTPS. Cookies and JS is enabled by default; if the user has disabled
(read: directly and knowingly) these things, I can detect this and
inform the user (and/or me).
>
> > Does it run on my brothers Mac too?
>
> Why does it look crappy on my iPhone? And even worse on my Openmoko?
> And why does it look broken on every IE I have tried?
General problem that doesn't apply to web-UIs in particular. Native or
semi-native apps can also look like shit.
> > How do you distribute it? How do you distribude updates?
>
> Point taken. How about XSS, CSRF, clickforging?
Not impossible to solve or deal with.
> > What happens to my config/settings etc. when I buy a new computer?
>
> What happens to my data if the provide disappears?
General problem; the same thing applies to a client written in Gtk+,
but
see what I write about running a HTTP-server on LAN/localhost below.
> >> Does it mean that C is a particular cool thing backed by an awesome
> >> framework?
>
> > What? Is this some sort of competition?
>
> No, not really. But I never understood the point of reinventing the wheel
> poorly and going all excited over it.
If you don't see the ubiquity and the instant
"infrastructure-is-already-there" part of a browser/web/Internet based
UI + HTTP as a new wheel (or road?), then I have nothing to add (or
I'd
very much like to hear about this already-existing-wheel), but I can
try:
The combination web/browser (presentation/UI) and HTTP (communication)
is the only thing that has:
* Basically 99.9% (or so) ubiquity: IE6+(Windows), FF2+(Linux)
and Mac(Safari). I think the 0.1% missing is _way_ less
missing
coverage "globally" than anything based on, say, Gtk+ or Qt
-
_when_ combined with the points below. Aiming for the
largest
coverage (first) makes sense in so many ways.
* 0 install required. Show me anything else that allows me to
scribble down an 8 letter word (URL) on a post-it note and
invite the world (all 99.9% of it) _instantly_ and combine
this with
the other points. This, is real power - it has significance;
it
allows anyone and everyone to participate. People with low
technical skills (or low on time/patience there) can be very
strong in other areas.
* 100% real-time, full two-way/duplex (yes, really - I'm doing
this; no plugins), through all router/firewall/NAT thingies
--
with _no_ trouble. Globally(#2).
I doubt wheels like these already exist in "C-land" (or whatever) of
UI-development with the same ubiquity and scale as something
Internet/web-based + HTTP.
The user can, if he _really_ needs to, run a server on his LAN or even
on localhost (say, his laptop).
People have a tendency to think; server == some closed "Google thing"
on
the "other end", but this is just a mental barrier. A "server" really
is
just software(#1) also; it can run, right here. It's not impossible.
CLISP is quite portable (Win32) and it has a small overhead.
#1: Downloadable, as in a package+installer, like your-app+Gtk+/Qt is.
#2: I've had visitors/users of my web-based UI stuff from all over the
world; USA, Brazil, Russia, Germany, France, Norway, Australia --
even China (big firewall thingie).
On Tue, 28 Oct 2008 10:45:45 -0700, Lars Rune Nøstdal wrote:
> On Oct 28, 1:32 am, Marek Kubica <·····@xivilization.net> wrote:
>> On Mon, 27 Oct 2008 03:19:40 +0100, Lars Rune Nøstdal wrote:
>> > How do I install it?
>>
>> How can I login? Why is it sending my passwords in clear text? Whats
>> this cookie thing?
>
> HTTPS. Cookies and JS is enabled by default; if the user has disabled
> (read: directly and knowingly) these things, I can detect this and
> inform the user (and/or me).
But most apps don't bother, because it puts quite a load on the server.
Encrypted connections are more or less standard now, see SMTP+TLS, IMAP
+TLS and Jabber (which usually is encrypted per default). On the other
hand, when I type in some Web2.0 thingie and add a https before it, I
mostly get nothing to see.
This was partly a problem because one could run only one HTTPS-Server per
IP and port and has been fixed since using SNI, but it is not yet a
common thing.
>> > Does it run on my brothers Mac too?
>>
>> Why does it look crappy on my iPhone? And even worse on my Openmoko?
>> And why does it look broken on every IE I have tried?
>
> General problem that doesn't apply to web-UIs in particular. Native or
> semi-native apps can also look like shit.
Right. But you sound like you never tried to get a web site look good in
Firefox and IE at the same time. With the rise of mobile web with rather
small displays this gets even more problematic. The web site that was
"optimized for 1024x768" will most likely be problematic with browsers on
small display. Yeah, there is zooming, but how often can you zoom out and
it. This is the web, not Google Earth.
>> > How do you distribute it? How do you distribude updates?
>>
>> Point taken. How about XSS, CSRF, clickforging?
>
> Not impossible to solve or deal with.
Most Web2.0 things don't and preventing this is quite a bit of work which
makes programming for the web which was once trivial pretty hard. And
then there might be new techniques that can be exploited, so you always
have to keep up with your app.
>> > What happens to my config/settings etc. when I buy a new computer?
>>
>> What happens to my data if the provide disappears?
>
> General problem; the same thing applies to a client written in Gtk+, but
> see what I write about running a HTTP-server on LAN/localhost below.
Local backups are possible and trivial. Even Apple ships a backup
solution as a part of their OS. Backupping online data only easy for the
provider, if you want to have an offsite-backup of your stuff, you need
to write a program which scrapes out your data and saves it. Not that
many people would bother anyway, but I believe data safety is still
important.
> The combination web/browser (presentation/UI) and HTTP (communication)
> is the only thing that has:
>
> * Basically 99.9% (or so) ubiquity: IE6+(Windows), FF2+(Linux)
> and Mac(Safari). I think the 0.1% missing is _way_ less
> missing
> coverage "globally" than anything based on, say, Gtk+ or Qt
> -
> _when_ combined with the points below. Aiming for the
> largest
> coverage (first) makes sense in so many ways.
Depends on what you write. While I agree that a community site does have
some use (but then, it does not need fancy application-like features) but
mail clients, IRC clients (or some even worse propietary thingie) and
slide generator (280Slides, I'm looking at you!) are just plain silly.
They don't need the coverage. Their advantage is that data can be
accessed from anywhere, but web drives exist. Not to mention that more
and more people have USB sticks, cellphones and nettops with them, so
there is not that much need for storing data on the internet.
> * 0 install required. Show me anything else that allows me to
> scribble down an 8 letter word (URL) on a post-it note and
> invite the world (all 99.9% of it) _instantly_ and combine
> this with
> the other points. This, is real power - it has significance;
> it
> allows anyone and everyone to participate. People with low
> technical skills (or low on time/patience there) can be very
> strong in other areas.
Package managers are easy to use too, last time I looked installing a
Ubuntu package needed only some clicks which are no harder than clicking
on stuff on a web site to register.
> * 100% real-time, full two-way/duplex (yes, really - I'm doing
> this; no plugins), through all router/firewall/NAT thingies
> --
> with _no_ trouble. Globally(#2).
Two-way duplex with COMET is a toy, polling is just a bad joke. Been
there, tried that. I still prefer good-old BSD sockets. Which are by the
way more efficient. For saving data from local applications one can also
use HTTP, see XML-RPC or plain old POST-ing of data to some remote
location.
> The user can, if he _really_ needs to, run a server on his LAN or even
> on localhost (say, his laptop).
Sure, but where does he get the server from? Most web sites don't provide
sources, they don't need to and if they would, that might split the
community because it is centralized on one instance of the server.
Interoperability with other instances is not built-in. Most code is not
AGPL-licensed, which would force people to publish their code (I'll leave
it up to the reader to decide whether this is good or bad).
> People have a tendency to think; server == some closed "Google thing" on
> the "other end", but this is just a mental barrier. A "server" really is
> just software(#1) also; it can run, right here. It's not impossible.
> CLISP is quite portable (Win32) and it has a small overhead.
See, CLISP is portable so are other languages. So why not write the app
in CLISP/portable language? There are many and performance is *usually*
enough (most of the time better than with JS).
While Ido agree that for some things it might be useful, I look around
and see what I and other people use (to get instantly in touch with
others). For example Usenet. For example Jabber. For example Email. For
example IRC. I wouldn't want to post via Gmane, chat via Meebo, mail via
GMail etc. I do use web forums - true. But that are mostly plain HTML
with a little bit of application logic. Usually not somehow sophisticated
applications.
regards,
Marek
On Wed, 2008-10-29 at 10:37 +0000, Marek Kubica wrote:
> On Tue, 28 Oct 2008 10:45:45 -0700, Lars Rune Nøstdal wrote:
>
> > On Oct 28, 1:32 am, Marek Kubica <·····@xivilization.net> wrote:
> >> On Mon, 27 Oct 2008 03:19:40 +0100, Lars Rune Nøstdal wrote:
> >> > How do I install it?
> >>
> >> How can I login? Why is it sending my passwords in clear text? Whats
> >> this cookie thing?
> >
> > HTTPS. Cookies and JS is enabled by default; if the user has disabled
> > (read: directly and knowingly) these things, I can detect this and
> > inform the user (and/or me).
>
> But most apps don't bother, because it puts quite a load on the server.
> Encrypted connections are more or less standard now, see SMTP+TLS, IMAP
> +TLS and Jabber (which usually is encrypted per default). On the other
> hand, when I type in some Web2.0 thingie and add a https before it, I
> mostly get nothing to see.
Yeah, of course -- but it's there; it's up to me, the developer, to use
it. It's not like a C based client in Gtk+ can be written in a sloppy
way also.
>
> >> > How do you distribute it? How do you distribude updates?
> >>
> >> Point taken. How about XSS, CSRF, clickforging?
> >
> > Not impossible to solve or deal with.
>
> Most Web2.0 things don't and preventing this is quite a bit of work which
> makes programming for the web which was once trivial pretty hard. And
> then there might be new techniques that can be exploited, so you always
> have to keep up with your app.
Yeah, good thing I don't have to worry about distributing upgrades etc.
then.
> >> > What happens to my config/settings etc. when I buy a new computer?
> >>
> >> What happens to my data if the provide disappears?
> >
> > General problem; the same thing applies to a client written in Gtk+, but
> > see what I write about running a HTTP-server on LAN/localhost below.
>
> Local backups are possible and trivial. Even Apple ships a backup
> solution as a part of their OS. Backupping online data only easy for the
> provider, if you want to have an offsite-backup of your stuff, you need
> to write a program which scrapes out your data and saves it.
PostgreSQL dump .. done.
> Not that many people would bother anyway, but I believe data safety is still
> important.
>
> > The combination web/browser (presentation/UI) and HTTP (communication)
> > is the only thing that has:
> >
> > * Basically 99.9% (or so) ubiquity: IE6+(Windows), FF2+(Linux)
> > and Mac(Safari). I think the 0.1% missing is _way_ less
> > missing
> > coverage "globally" than anything based on, say, Gtk+ or Qt
> > -
> > _when_ combined with the points below. Aiming for the
> > largest
> > coverage (first) makes sense in so many ways.
>
> Depends on what you write.
Sure.
> > * 0 install required. Show me anything else that allows me to
> > scribble down an 8 letter word (URL) on a post-it note and
> > invite the world (all 99.9% of it) _instantly_ and combine
> > this with
> > the other points. This, is real power - it has significance;
> > it
> > allows anyone and everyone to participate. People with low
> > technical skills (or low on time/patience there) can be very
> > strong in other areas.
>
> Package managers are easy to use too, last time I looked installing a
> Ubuntu package needed only some clicks which are no harder than clicking
> on stuff on a web site to register.
>
> > * 100% real-time, full two-way/duplex (yes, really - I'm doing
> > this; no plugins), through all router/firewall/NAT thingies
> > --
> > with _no_ trouble. Globally(#2).
>
> Two-way duplex with COMET is a toy, polling is just a bad joke. Been
> there, tried that.
Nah, it works great. I don't care what ("you") people say about this
anymore at all 'cause I've heard it all before.
What matters is not the opinion of you "tech-people" with mental
barriers unable to see through even a _single_ layer of
abstraction/indirection (often, it seems, in both low- and high-level
areas!) to reach a goal; "it's not a _real_ socket" -- and that's the
end of that (for you).
What matters, is the result; and it works great. It is stable, reliable,
leads to very low latency -- and scalability is very good. My
non-threaded backend (epoll-based) scales to 10000++ concurrent
sessions/clients with _no_ trouble at all.
Toy? I think not. Go play with your Qt/Gtk+ toy-client in C. :)
> For saving data from local applications one can also
> use HTTP, see XML-RPC or plain old POST-ing of data to some remote
> location.
Yeah, of course.
> > The user can, if he _really_ needs to, run a server on his LAN or even
> > on localhost (say, his laptop).
>
> Sure, but where does he get the server from? Most web sites don't provide
> sources,
This isn't about "them"; it's about what you or me would or could
do. ..heh.
You gotta think outside of the box here; it's impossible to explain
otherwise. Maybe you understand already though.
> they don't need to and if they would, that might split the
> community because it is centralized on one instance of the server.
Sure; that might be something they/I/we want. Same thing applies to any
client/server scenario here.
> Interoperability with other instances is not built-in.
Uh, providing a text-input with a "Connect to new host:" label is not
impossible.
> Most code is not AGPL-licensed, which would force people to publish their code (I'll leave
> it up to the reader to decide whether this is good or bad).
Actually, it is the opposite; AGPL is what forces people to publish the
code of their networked applications.
> > People have a tendency to think; server == some closed "Google thing" on
> > the "other end", but this is just a mental barrier. A "server" really is
> > just software(#1) also; it can run, right here. It's not impossible.
> > CLISP is quite portable (Win32) and it has a small overhead.
>
> See, CLISP is portable so are other languages. So why not write the app
> in CLISP/portable language? There are many and performance is *usually*
> enough (most of the time better than with JS).
Because, the coverage wrt. targeting a browser is _huge_, _immense_ ..
compared to hoping the user will bother installing a custom client.
Even businesses seem to strongly prefer web-based clients these days.
(This might just be me of course; I pay more attention to this part of
the industry. )
> While Ido agree that for some things it might be useful, I look around
> and see what I and other people use (to get instantly in touch with
> others). For example Usenet. For example Jabber. For example Email. For
> example IRC. I wouldn't want to post via Gmane,
Me neither. But why?
> chat via Meebo,
Me neither. But why?
> mail via GMail etc.
I do, sometimes. I also use Google Groups UI at times -- because this
friggin thing does only seem to work 50% of the time (might be my ISP
though).
> I do use web forums - true. But that are mostly plain HTML
> with a little bit of application logic. Usually not somehow sophisticated
> applications.
Yeah, usually. But why?
Because they all suck; that's why.
So fix it!
I would _love_ to have Open Source email-, irc-, msn/jabber-,
mailinglist- "UI-server-apps" running on my VPS at http://nostdal.org/
with _excellent_ UIs and features instantly accessible from anywhere.
I think this is possible; maybe that's the difference between you and
me.
On Wed, 2008-10-29 at 12:38 +0100, Lars Rune Nøstdal wrote:
> On Wed, 2008-10-29 at 10:37 +0000, Marek Kubica wrote:
> > On Tue, 28 Oct 2008 10:45:45 -0700, Lars Rune Nøstdal wrote:
> >
> > > On Oct 28, 1:32 am, Marek Kubica <·····@xivilization.net> wrote:
> > >> On Mon, 27 Oct 2008 03:19:40 +0100, Lars Rune Nøstdal wrote:
> > >> > How do I install it?
> > >>
> > >> How can I login? Why is it sending my passwords in clear text? Whats
> > >> this cookie thing?
> > >
> > > HTTPS. Cookies and JS is enabled by default; if the user has disabled
> > > (read: directly and knowingly) these things, I can detect this and
> > > inform the user (and/or me).
> >
> > But most apps don't bother, because it puts quite a load on the server.
> > Encrypted connections are more or less standard now, see SMTP+TLS, IMAP
> > +TLS and Jabber (which usually is encrypted per default). On the other
> > hand, when I type in some Web2.0 thingie and add a https before it, I
> > mostly get nothing to see.
>
> Yeah, of course -- but it's there; it's up to me, the developer, to use
> it. It's not like a C based client in Gtk+ can be written in a sloppy
> way also.
..agh .. i meant "can't" .. i think; blah, tired.. :P
>
>
> >
> > >> > How do you distribute it? How do you distribude updates?
> > >>
> > >> Point taken. How about XSS, CSRF, clickforging?
> > >
> > > Not impossible to solve or deal with.
> >
> > Most Web2.0 things don't and preventing this is quite a bit of work which
> > makes programming for the web which was once trivial pretty hard. And
> > then there might be new techniques that can be exploited, so you always
> > have to keep up with your app.
>
> Yeah, good thing I don't have to worry about distributing upgrades etc.
> then.
>
>
> > >> > What happens to my config/settings etc. when I buy a new computer?
> > >>
> > >> What happens to my data if the provide disappears?
> > >
> > > General problem; the same thing applies to a client written in Gtk+, but
> > > see what I write about running a HTTP-server on LAN/localhost below.
> >
> > Local backups are possible and trivial. Even Apple ships a backup
> > solution as a part of their OS. Backupping online data only easy for the
> > provider, if you want to have an offsite-backup of your stuff, you need
> > to write a program which scrapes out your data and saves it.
>
> PostgreSQL dump .. done.
>
>
> > Not that many people would bother anyway, but I believe data safety is still
> > important.
> >
> > > The combination web/browser (presentation/UI) and HTTP (communication)
> > > is the only thing that has:
> > >
> > > * Basically 99.9% (or so) ubiquity: IE6+(Windows), FF2+(Linux)
> > > and Mac(Safari). I think the 0.1% missing is _way_ less
> > > missing
> > > coverage "globally" than anything based on, say, Gtk+ or Qt
> > > -
> > > _when_ combined with the points below. Aiming for the
> > > largest
> > > coverage (first) makes sense in so many ways.
> >
> > Depends on what you write.
>
> Sure.
>
>
>
> > > * 0 install required. Show me anything else that allows me to
> > > scribble down an 8 letter word (URL) on a post-it note and
> > > invite the world (all 99.9% of it) _instantly_ and combine
> > > this with
> > > the other points. This, is real power - it has significance;
> > > it
> > > allows anyone and everyone to participate. People with low
> > > technical skills (or low on time/patience there) can be very
> > > strong in other areas.
> >
> > Package managers are easy to use too, last time I looked installing a
> > Ubuntu package needed only some clicks which are no harder than clicking
> > on stuff on a web site to register.
> >
> > > * 100% real-time, full two-way/duplex (yes, really - I'm doing
> > > this; no plugins), through all router/firewall/NAT thingies
> > > --
> > > with _no_ trouble. Globally(#2).
> >
> > Two-way duplex with COMET is a toy, polling is just a bad joke. Been
> > there, tried that.
>
> Nah, it works great. I don't care what ("you") people say about this
> anymore at all 'cause I've heard it all before.
>
> What matters is not the opinion of you "tech-people" with mental
> barriers unable to see through even a _single_ layer of
> abstraction/indirection (often, it seems, in both low- and high-level
> areas!) to reach a goal; "it's not a _real_ socket" -- and that's the
> end of that (for you).
>
> What matters, is the result; and it works great. It is stable, reliable,
> leads to very low latency -- and scalability is very good. My
> non-threaded backend (epoll-based) scales to 10000++ concurrent
> sessions/clients with _no_ trouble at all.
>
> Toy? I think not. Go play with your Qt/Gtk+ toy-client in C. :)
>
>
> > For saving data from local applications one can also
> > use HTTP, see XML-RPC or plain old POST-ing of data to some remote
> > location.
>
> Yeah, of course.
>
>
> > > The user can, if he _really_ needs to, run a server on his LAN or even
> > > on localhost (say, his laptop).
> >
> > Sure, but where does he get the server from? Most web sites don't provide
> > sources,
>
> This isn't about "them"; it's about what you or me would or could
> do. ..heh.
>
> You gotta think outside of the box here; it's impossible to explain
> otherwise. Maybe you understand already though.
>
>
> > they don't need to and if they would, that might split the
> > community because it is centralized on one instance of the server.
>
> Sure; that might be something they/I/we want. Same thing applies to any
> client/server scenario here.
>
>
> > Interoperability with other instances is not built-in.
>
> Uh, providing a text-input with a "Connect to new host:" label is not
> impossible.
>
>
> > Most code is not AGPL-licensed, which would force people to publish their code (I'll leave
> > it up to the reader to decide whether this is good or bad).
>
> Actually, it is the opposite; AGPL is what forces people to publish the
> code of their networked applications.
..just ignore me.. lol
> > > People have a tendency to think; server == some closed "Google thing" on
> > > the "other end", but this is just a mental barrier. A "server" really is
> > > just software(#1) also; it can run, right here. It's not impossible.
> > > CLISP is quite portable (Win32) and it has a small overhead.
> >
> > See, CLISP is portable so are other languages. So why not write the app
> > in CLISP/portable language? There are many and performance is *usually*
> > enough (most of the time better than with JS).
>
> Because, the coverage wrt. targeting a browser is _huge_, _immense_ ..
> compared to hoping the user will bother installing a custom client.
>
> Even businesses seem to strongly prefer web-based clients these days.
> (This might just be me of course; I pay more attention to this part of
> the industry. )
>
>
> > While Ido agree that for some things it might be useful, I look around
> > and see what I and other people use (to get instantly in touch with
> > others). For example Usenet. For example Jabber. For example Email. For
> > example IRC. I wouldn't want to post via Gmane,
>
> Me neither. But why?
>
>
> > chat via Meebo,
>
> Me neither. But why?
>
>
> > mail via GMail etc.
>
> I do, sometimes. I also use Google Groups UI at times -- because this
> friggin thing does only seem to work 50% of the time (might be my ISP
> though).
>
>
> > I do use web forums - true. But that are mostly plain HTML
> > with a little bit of application logic. Usually not somehow sophisticated
> > applications.
>
> Yeah, usually. But why?
>
> Because they all suck; that's why.
>
> So fix it!
>
> I would _love_ to have Open Source email-, irc-, msn/jabber-,
> mailinglist- "UI-server-apps" running on my VPS at http://nostdal.org/
> with _excellent_ UIs and features instantly accessible from anywhere.
>
> I think this is possible; maybe that's the difference between you and
> me.
>
Lars Rune Nøstdal <···········@gmail.com> writes:
[Why are web applications not used as much as desktop applications?]
> Because they all suck; that's why.
> So fix it!
> I would _love_ to have Open Source email-, irc-, msn/jabber-,
> mailinglist- "UI-server-apps" running on my VPS at http://nostdal.org/
> with _excellent_ UIs and features instantly accessible from anywhere.
> I think this is possible;
I don't think this will be possible. I understand your motivation and
I wondered why this can't work. One of the showstoppers, I think, are
key bindings / shortcuts. AFAIK there is no way to define key bindings
for actions in a browser interface. Just try to reimplement (the base
user-interface of) Gnus as a web applications. You can mimic the
layout, response times may be no problem, but what about direct user
inputs? How to make a web application completly controllable only be
keyborad without a mouse?
Another problem are multiple windows including modal dialogs. You can
try to mimic them (like HOP and others), but it's just not the
same. Is it really sensible to completly reinvent the whole desktop
metaphor in plain JavaScript inside a browser window?
So even for data-centric applications (without much use for special
APIs like Direct3D, special multimedia features etc) like e-mail
clients, you will never beat the user experience of classical desktop
applications (unless browsers/JavaScript offer much more control than
today).
--
Stefan.
On Sat, 2008-11-01 at 08:05 +0100, Stefan Nobis wrote:
> Lars Rune Nøstdal <···········@gmail.com> writes:
>
> [Why are web applications not used as much as desktop applications?]
> > Because they all suck; that's why.
> > So fix it!
>
> > I would _love_ to have Open Source email-, irc-, msn/jabber-,
> > mailinglist- "UI-server-apps" running on my VPS at http://nostdal.org/
> > with _excellent_ UIs and features instantly accessible from anywhere.
>
> > I think this is possible;
>
> I don't think this will be possible. I understand your motivation and
> I wondered why this can't work. One of the showstoppers, I think, are
> key bindings / shortcuts. AFAIK there is no way to define key bindings
> for actions in a browser interface. Just try to reimplement (the base
> user-interface of) Gnus as a web applications. You can mimic the
> layout, response times may be no problem, but what about direct user
> inputs? How to make a web application completly controllable only be
> keyborad without a mouse?
http://code.google.com/p/js-hotkeys/wiki/about
http://jshotkeys.googlepages.com/test-static-01.html
> Another problem are multiple windows including modal dialogs. You can
> try to mimic them (like HOP and others), but it's just not the
> same. Is it really sensible to completly reinvent the whole desktop
> metaphor in plain JavaScript inside a browser window?
I'm not trying to create a desktop; that's silly and not very useful.
> So even for data-centric applications (without much use for special
> APIs like Direct3D,
Yeah, I'm after the "boring data-centric application" segment, but Adobe
has added (or will add) support for hardware accelerated 3D in Flash.
> special multimedia features etc)
HTML5 has some - but if _really_ needed I don't mind using Flash to play
music, display video or display charts..
http://teethgrinder.co.uk/open-flash-chart/
http://finance.google.com/finance?client=ob&q=NASDAQ:GOOG
..or whatever.
> like e-mail
> clients, you will never beat the user experience of classical desktop
> applications (unless browsers/JavaScript offer much more control than
> today).
..I can can get pretty darn close.
Marek Kubica <·····@xivilization.net> writes:
> On Mon, 27 Oct 2008 03:19:40 +0100, Lars Rune Nøstdal wrote:
>
>> How do I install it?
>
> How can I login? Why is it sending my passwords in clear text? Whats this
> cookie thing?
>
>> Does it run on my brothers Mac too?
>
> Why does it look crappy on my iPhone? And even worse on my Openmoko?
> And why does it look broken on every IE I have tried?
Worse, why does it run so slow, give me a meaningless progress
indicator that may never return, and requires an Internet connection
(or some strange third-party virtual machine to emulate being
connected to the Internet)?
>
>> How do you distribute it? How do you distribude updates?
>
> Point taken. How about XSS, CSRF, clickforging?
The Linux kernel isn't a hosted app and it does just fine.
In answer to the question, Internet and Internet.
>> What happens to my config/settings etc. when I buy a new computer?
>
> What happens to my data if the provide disappears?
Really important.
>>> Does it mean that C is a particular cool thing backed by an awesome
>>> framework?
>>
>> What? Is this some sort of competition?
>
> No, not really. But I never understood the point of reinventing the wheel
> poorly and going all excited over it.
Precisely.
And re-inventing the wheel poorly.
Why does anyone think using a scripting language to hack a text-markup
language into a GUI rendered by memory-hogging browser on top of a
memory hogging virtual machine is a great idea?
The ability to build efficient cross-platform desktop applications is
already available. Libraries and languages that do it better and
faster are more accessible now than ever and have been developed for
years. Fewer layers between the application and the metal is better
for everyone.
> regards,
> Marek
Cheers,
J Kenneth King
·····@agentultra.com
On Sun, 2008-10-26 at 02:39 +0200, Lars Rune Nøstdal wrote:
> Hmm .. looks like doing this "UI-thing" without some harder/clearer
> separation of data and UI/presentation is a huge mistake (or a huge
> _lack_ in SW currently).
>
>
> I'm experimenting with some ideas here:
> http://common-lisp.net/~lnostdal/programming/lisp/symbolicweb-mvc/src/model-view-controller.lisp
>
> ..I'm thinking perhaps just blindly forwarding the call/message to the
> view(s) is a mistake; I should probably let the model code deal with
> this forwarding .. or maybe the model code should just handle special
> cases..
>
>
> ..a container model of some sort (base class):
> http://common-lisp.net/~lnostdal/programming/lisp/symbolicweb-mvc/src/container-model-base.lisp
>
>
> ..a concrete model (data stored in an in-Lisp list):
> http://common-lisp.net/~lnostdal/programming/lisp/symbolicweb-mvc/src/container-model-list.lisp
>
..so this just updates the server side data or "model"..
> ..how to draw/present container models in most common cases:
> http://common-lisp.net/~lnostdal/programming/lisp/symbolicweb-mvc/src/container-view-base.lisp
..generates some JS-code and sends it to the viewport(s) (might be
multiple browser sessions, windows and/or tabs)..
>
> ..and specifically for, uh, "lists":
> http://common-lisp.net/~lnostdal/programming/lisp/symbolicweb-mvc/src/container-view-list.lisp
>
..this one is basically empty; just inherits from the one above..
>
> ..and the "controller"(?) is what exports or defines the user API ..
> http://common-lisp.net/~lnostdal/programming/lisp/symbolicweb-mvc/src/container-controller-base.lisp
>
>
> Ok, so that just forwards or converts the call to a generic mvc-handler
> call which propagate through the "network" of methods based on the
> multiple argument types, method-combinations (maybe later?) etc. ..
>
> This is horribly broken in some places, still -- how do people (or,
> Lispers) do this? I figure the general idea or goal is to be able to
> do something like this:
>
>
> (let* ((model (make-instance 'container-model-list))
> (widget-1 (make-instance 'combo-box :model model))
> (widget-2 (make-instance 'simple-pane :model model)))
> (iappend "item-1" model)
> (iappend "item-2" model))
>
>
> ..then have both the combo-box and simple-pane widgets update
> automatically and present the data added to their common, shared,
> model in some way, or an other.
>
> I've been looking at things like Context.
..I meant ContextL.
> I think layers etc. might
> belong at a higher level, above "widget-stuff"; more for
> "is-the-user-logged-in-as-admin-layer" type things .. but I'm not sure.
>
>