Eric,

Before we determine how best to deal with the UI side of IUP browser
interface, I think we need to get the basic framework for the browser
IUP driver working. Antonio didn't think this was a big deal when I
brought up the concept the first time around.

* Determine screen size, DPI, default font, ... 
* Work out callbacks. Some may be handled by the client and others off
loaded to the server.

Between HTML, CSS and JavaScript I think a desktop compatible UI could
be assembled and be a worthwhile effort on our part.

The other direction might be HTML5.

John


On Fri, 2017-01-20 at 05:52 -0800, Eric Wing wrote:
> 
> On 1/19/17, John Spikowski <supp...@scriptbasic.org> wrote:
> > 
> > 
> > Eric,
> > 
> > I'm not interested in using Emscripten of IUP C code to work on the
> > web. Try to translate a simple "Hello World" in C to JavaScript
> > using
> > Emscripten and you will be blown away how much support code is
> > generated.
> > 
> > My goal is building a 'HTML' IUP driver and use a popular
> > JavaScript
> > framework to produce the UI.
> > 
> > John
> Yes, I’ve tried Emscripten before. And I agree with you that there is
> quite a bit of bloat. (But I also am really picky and frustrated how
> slow and bloated software has become and things that are big to me
> are
> small to other people.)
> 
> This is an SDL program I wrote in pure C and then ported to the
> browser using Emscripten. Use Firefox or maybe Safari (I’m having
> problems with Chrome)
> http://playcontrol.net/tempdownload/BlurrrBinaries/FlappyBlurrrEM/Fla
> ppyBlurrr.html
> 
> 
> However, a few points to consider:
> 
> - Most web frameworks are pretty bloated too. There is some
> obfuscation of this fact because they dynamically download extra
> framework code on-demand sometimes, which sometimes masks the true
> extent of how much data they actually downloaded.
> 
> - Web browser cache hides most of the return visit reloading
> 
> - Content data like images and videos can quickly dominate over your
> code data. So if you have a rich media site, the code size is a
> rounding error in the total size of your web site.
> 
> 
> (If you don’t know much about ASM.js or Web Assembly, I highly
> recommend this talk, “The Birth & Death of JavaScript”. It’s both
> entertaining and informative.
> https://www.destroyallsoftware.com/talks/the-birth-and-death-of-javas
> cript)
> 
> 
> - Web assembly is where the browsers are going. ASM.js was intended
> as
> the prototype/proof-of-concept. And now all the web browser makers
> seem to have agreed to support Web Assembly as the standardized
> successor to asm.js. Once all the major browsers roll out support,
> expect an explosion of apps written from all languages (C, Python,
> Lua, Ruby, Swift, Go, etc.) being compiled for the web browser.
> 
>       - Everyone will just get used to it and accept the bloat, kind
> of as
> they do now with the big giant bloated web frameworks being used to
> create desktop apps, like Node WebKit, Electron, React, which are
> like
> 100MB just for Hello World. My above Flappy Blurrr Emscripten example
> was 10-15MB which is still a magnitude less than that and most of
> that
> is due to the data from the images and audio files, and not the code.
> 
> - Web assembly might have a tighter byte code format than what ASM.js
> has to do now (which is pure text JavaScript). Some of the code bloat
> could be reduced.
> 
> 
> 
> 
> Anyway, as to alternatives to Emscripten, I don’t think I understand
> your idea. I’m trying to figure out how you envision this, but I keep
> falling short. Can you explain to me the technical details of how
> this
> works, because in my head, I can only see two ways to make IUP work
> in
> the web browser.
> 
> 1) Emscripten-like technique that can compile IUP’s C source base
> (along with your app’s C source base) to JavaScript (or Web Assembly)
> 
> 2) Re-implement all of IUP in JavaScript. Your app must also be
> written in JavaScript. This has the major downside that you can’t
> easily compile a native app (Windows, GTK, etc.) any more.
> 
> 
> So for example, take this very basic IUP program:
> Ihandle* lbl = IupLabel("Hello,world!");
> Ihandle* btn = IupButton(“OK”, "");
> IupSetCallback(btn, "ACTION", (Icallback)DoSomethingCallback);
> Ihandle* vb = IupVbox(lbl, NULL);
> Ihandle* dlg=IupDialog(vb);
> IupShow(dlg);
> 
> It actually depends on quite a significant amount of IUP core
> procedural C logic to do work. In addition to creating the native
> widgets for Label, Button, and Dialog, there is a bunch of layout
> code
> computed in IUP’s core C base to figure out where to place the label
> and button in the dialog. While HTML may have some static layout
> capabilities to do relative layout, the first problem is that IUP’s
> implementation is dynamically computed. The code is re-running
> things,
> like to see if the size of each of the individual widgets has
> changed,
> or if the widget has special properties set that may affect its
> layout
> position. I am having trouble seeing how to detect. express and
> convert this more general, procedural, (and Turing Complete?) layout
> algorithm into something that can be expressed as static, declarative
> HTML.
> 
> 
> Next, the button action itself I’m not certain of. So in an IUP
> program like above, I have my DoSomethingCallback implemented in C.
> Again, how can express/convert the full power of that arbitrary C
> function procedural implementation to do the same thing in static,
> declarative HTML?
> 
> 
> 
> Or maybe I’m misunderstanding your statement entirely: “My goal is
> building a 'HTML' IUP driver and use a popular JavaScript framework
> to
> produce the UI.”
> 
> Maybe I’m over-emphasizing what you actually want to do with HTML?
> But
> the reason I’m doing that is because, otherwise, this is kind of what
> Emscrpiten already does:
> 
> Emscripten takes C code and converts it into JavaScript and HTML,
> creating a runnable website.
> 
> 
> 
> So the only remaining nuance I see is that maybe you want to
> emphasize
> that you want Emscripten’s Javascript output to generate 3rd party
> JavaScript API calls instead of the baseline official standardized
> APIs that all these libraries are built on top of.
> 
> I personally would be hesitant to do that since “the popular”
> Javascript framework seems to change every 6 months in the browser
> world. (We want the IUP implementation to last a long time and be
> stable.) And in the end, it doesn’t make the code size any smaller
> because you need Emscripten to convert code, and then you must add
> the
> 3rd party library Javascript implementation on top of it. And there
> may be redundancy in what IUP’s base can already do (like layout) and
> the 3rd party library can do, which means duplication bloat.
> 
> However, I’m not strongly opposed to the idea of using a 3rd-party
> JavaScript framework either. This is actually an implementation
> detail
> that is much finer detail than what I was originally describing. I
> was
> just trying to explain how the overall architecture works. The
> specific JavaScript backend implementation isn’t terribly critical in
> terms of the big picture of just getting IUP to work in the browser.
> (Caveat: I’m saying this as somebody who doesn’t really know web
> programming and differences between all the third party libraries, so
> I could be underestimating the design impact.)
> 
> And we could theoretically create sub-variants of Emscripten backends
> of IUP. So maybe one is based on pure baseline, official,
> standardized
> APIs, and another uses JQuery, and another uses Electron, and another
> uses React. There could be compiler instructions (#ifdefs) to select
> which JS backend to compile in.
> 
> 
> But anyway, I’m interested in understanding better your approach.
> 
> Thanks,
> Eric
> 
> -------------------------------------------------------------------
> -----------
> Check out the vibrant tech community on one of the world's most
> engaging tech sites, SlashDot.org! http://sdm.link/slashdot
> _______________________________________________
> Iup-users mailing list
> Iup-users@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/iup-users

------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, SlashDot.org! http://sdm.link/slashdot
_______________________________________________
Iup-users mailing list
Iup-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/iup-users

Reply via email to