Earlier quoted context omitted.
Don't know how to put this... The tech/tools you enumerate give me the impression that your problems are not directly related to (commercial) software development.
Why not? They're tools, not fashion items. If you dig a bit deeper you'll find an entire category of people writing software using powerful, mature tools. The reason it's not as commercially feasible is that most problems are not really that difficult any more. And since the software won't break every three months because of moving targets, no one will call for your help once it's in place.
I miss Delphi
181–190 of 194 posts
Re: I miss Delphi
#182Earlier quoted context omitted.
Don't know how to put this... The tech/tools you enumerate give me the impression that your problems are not directly related to (commercial) software development.
If I was ever asked "why are you sitting around on the computer all day instead of going and doing something productive", I'd say that I was gaining exposure and experience. Limiting that exposure means less of a general ability to easily orient yourself when dropped into unfamiliar circumstances or situations. Driving around randomly uses gas and contributes to maintenance costs, but gives you an irreplaceable spati…
Re: I miss Delphi
#183Earlier quoted context omitted.
We let the kids run the show and turn a platform for interactive documents into some sort of VM.
Well the bigger problem is it's (apparently) what the customer demands. The problem being that we, the old and better developers, didn't come up with a better solution than these kids.
Re: I miss Delphi
#184Earlier quoted context omitted.
I had a quick look and decided to try the audio player. The volume control isn't draggable. Also, I was a bit baffled at the framework's decision to inline the page font, which is unlikely to change. It looks like you're using your own HTTP server solution which doesn't seem to have caching, so all content is being redownloaded each visit. ETags and Last-Modified are very easy to implement, FWIW. (Note: I say that fr…
Thanks for the feedback, it is always appreciated. I'll take these one at a time: 1) The "volume control" is a cheat - I created that demo and used a progress bar instead of an actual draggable horizontal gauge (not available). 2) The font is the icon font (a trimmed-down version of Font Awesome) used for the icons in the applications. It's the preferred way of doing vector icons in Elevate Web Builder, at least for…
> 1) The "volume control" (...) used a progress bar instead of an actual draggable horizontal gauge (not available).
Ah, that's the name of what I was looking for. I think HTML5 sliders can be styled similarly to how the volume control looks, but I understand you're targeting a wide variety of Web browsers here.
The reason I mentioned it was because I'm used to being able to drag volume controls directly - I'm not used to them being output-only. I guess I was deliberately looking for cracks in the design, to be honest :)
> 2) (...) [Y]ou also have the option of turning off both embedding of the icon font and whether the icon font is included at all (both are compiler options). In general, Elevate Web Builder always tries to keep the number of requests required to load the application to a minimum, hence the very aggressive in-lining of everything.
Oh, loading as a separate resource is is available as an option. Cool.
While somewhat unintuitive, I have indeed learned that fewer bigger requests can load quicker than many small requests - which does makes sense, I guess obsessing about caching isn't everything. (https://news.ycombinator.com/item?id=13601451 / https://danluu.com/web-bloat/ - particularly the 3G bits, since lots of people tether)
> 3) The If-Modified problem is a bug, and a really embarrassing one at that (I'm installing a fixed server this afternoon). There's a millisecond file timestamp comparison issue that is causing the If-Modified to never kick in.
Ah, I see. Comparison between 1488416112 and 1488416112.336420126? Completely understandable.
> The web server that we provide is just a "nice to have" thing because it automatically handles the database JSON API for loading datasets and consuming transactions, so that's how it's typically used, with less usage for static resources.
Ah, I see, that's the app server.
> Larger customers typically implement their own back-end database handling for IIS, Apache, etc. It's pretty easy to implement and the JSON API is very simple.
That makes perfect sense.
> 4) In terms of interoperability with JS, you can include external JS source with any project and it will get deployed with the project. After that, you also need an external interface to the JS code so that the compiler knows how to resolve any of the JS symbols: (...)
Oh, nice! So you do have interop. That makes quite a lot more possible.
Now I'm wondering whether your UI architecture is abstracted enough that end-users could build UI components out of JS... hmm, that probably wouldn't work, the UI designer wouldn't be able to control them. (I'm guessing you can design your own controls in Pascal?)
> 5) As for issues and how they are resolved: we're pretty responsive regarding support/bugs, but Elevate Web Builder includes source code to the entire run-time and component library, so you're free to modify most of the product and we're able to give immediate hot fixes for most issues (~90% of issues/bugs are in this code and not in the IDE/compiler). In fact, you could take the command-line compiler that we separately provide and use it to create your own Object Pascal JS IDE/product.
That's a great development model, and one I've considered myself (providing source to a large portion of the codebase to accelerate urgent fixes).
I was wondering how the Pascal bit worked for a while there. I'm curious if you pulled in another language implementation or built your own; I'm guessing you went full crazy and made your own implementation, considering you compile to JavaScript? :) (not sure though, Wikipedia mentions that Smart Mobile Studio have a JS-targeting implementation)
> 6) We've mentioned the product here before and it's received mixed reactions. It is, without a doubt, an odd product for most developers coming from traditional web development. :-)
Yep. I can see the niche for this though. Plus, diverging from the mainstream means you get to neatly sidestep the frenetic insanity associated with the cutting edge, which can be really really nice if you find something that pays well. :) (Still looking for my own one of that)
> There are a lot of design choices that go against what one would recommend when hand-coding an HTML/JS/CSS application, but work beautifully when you're talking about a compiler doing the work for you.
Unfortunately modern Web development has gotten so caught up with layers and layers of tooling and compilation, even hand-coded apps are beginning to resemble sprawling enterprise apps. :/
But you make a good point.
> The main point of the product is to capture the productivity that Delphi provided in the desktop arena and bring it to web applications. This means an intense focus on performance, reducing dependencies and deployment issues, and ensuring that one can concentrate on the business task at hand.
Yeah.
> Here is a "Hello World" in Elevate Web Builder:
> (...)
> Contrast that with the setup/coding involved to get any sort of hand-coded web application up and running. You can see how this works in more detail here: (...)
Before I watched the video I was half-scared this was a slightly more built-out Pascal-based iteration of the old BAT2EXE "batch compilers" that could never do anything. My apologies :)
I can now see this is essentially a GUI builder connected to a Pascal>JS transpiler. That's really cool.
And yeah, this is much quicker than finding a grid display library that actually works, building an efficient data model to load data into it, handling network issues... hides under box
> If you download a trial version, you can get a feel for the technology in the product by looking at the WebUI unit (WebUI.wbs).
With signing up... really like the "Real name" vs "Displayed name" vs "User ID" distinction! Hm, idea: s for the input fields on the new user form... oh, and what's the automatic signup rate with your current captcha?... ahh, consider NOT sending the user password back through failed forms... definitely definitely consider HTTPS for at least the signup form (!!!)... and maybe redirect the user to the page they were on when they clicked the signup link. The site design is very nice though.
(Regarding the captcha system, you have me confused and very curious. Are you hashing the current time, or adding hash codes to a DB...? The PNG URL has no parameters in it! :P)
> It's a ~13k-line UI layer that implements both the design-time external interface and a run-time virtual DOM that allows for very fast performance due to its BeginUpdate..EndUpdate reference-counted update cycle functionality. The run-time avoids interrogating or touching the DOM like it has the plague. ;-)
It could be very fun to pit your virtual DOM against React's. :D
I wouldn't be surprised at all if yours won out - I think React tries to "guess" by itself when to push its virtual DOM to the screen, and it constantly gets it wrong of course. A reference-counted approach with "don't update for a minute" boundaries sounds very simple and elegant. So I'm serious, benchmarking your system against React's could be quite interesting; but the problem would of course be in finding React-based controls to compare against.
Also, Pascal doesn't actually look that bad. I've been meaning to get around to having at least a passing knowledge of it for a while...
> It will also show how the animation primitives work
Ah, the world of HTML4.999999999999
> along with how the control interfaces are implemented. The control interfaces allow you to selectively skin controls on a per-control, per-project basis, with on-demand loading of the customized skins for each project at design-time.
Huh, very nice. That's really cool.
---
I thought I'd mention: the designer itself seems to actually work in Wine (in that it didn't crash on me, and is in fact running in another virtual desktop right now), but I got an error message that the web server failed to bind. Happy to do further digging if you like.
Also, shift+scroll doesn't scroll horizontally in the designer. Something I've gotten used to from Chrome, thought I'd mention it.
---
I was also curious: have you ever considered pitching this for mobile UI development? With a pixel-perfect grid-based system like this (that does admittedly offer some very impressive snapping options) the only way would be to create mobile-specific forms - but such an approach could potentially work quite well. The only other thing I can think of would be (re)designing controls that play nice with primarily touch-based environments, and implementing views with slide animations and such. I don't think this would be a doomed idea, I'm guessing you've already thought about it.
Re: I miss Delphi
#185Re: I miss Delphi
#186Earlier quoted context omitted.
webassembly + full page canvas. games already work like that. hopefully sanity is just around the corner.
I personally suspect that actually, Henry Spencer's famous prediction is more likely what's looming around the corner. You just wait - there will be a terminal emulator written with webassembly+Canvas eventually. Perhaps powered by the already existing Emscripten port of Linux.
Re: I miss Delphi
#187Twenty years ago, I wrote an application for the taxation office to help businesses calculate payroll tax. It was written in Delphi for maximum portability, because it had to run on Windows 3.1x, 95 and NT and was distributed to 16,000 businesses on 3.5" diskettes. Talk about old school.
Re: I miss Delphi
#188In short: because the web is inherently stateless and it's much harder to deal with than stateful UIs. I last used Delphi back around the turn of the century, so I'm remembering it as a drag-and-drop Windows UI framework/builder. ASP.NET WebForms is the most similar thing I've used (and it's been at least 5 or 6 years since I last really used it). I would not recommend investing a lot of time in it. WebForms is great…
Re: I miss Delphi
#189Earlier quoted context omitted.
Thanks for the feedback, it is always appreciated. I'll take these one at a time: 1) The "volume control" is a cheat - I created that demo and used a progress bar instead of an actual draggable horizontal gauge (not available). 2) The font is the icon font (a trimmed-down version of Font Awesome) used for the icons in the applications. It's the preferred way of doing vector icons in Elevate Web Builder, at least for…
Wow, thanks for taking the time to reply! > 1) The "volume control" (...) used a progress bar instead of an actual draggable horizontal gauge (not available). Ah, that's the name of what I was looking for. I think HTML5 sliders can be styled similarly to how the volume control looks, but I understand you're targeting a wide variety of Web browsers here. The reason I mentioned it was because I'm used to being able to…
There are some valid points to be made about bloat, and Elevate Web Builder's monolithic applications do tend to be on the larger side. However, the big issue is always perceived load time, and that's what we always work on improving first. The size of the application itself only really matters on the first load after a change/re-compile/re-deploy, provided that you don't have a bug in your web server that complete negates this performance improvement. ;-)
> Ah, I see, that's the app server.
Yeah, and it's going to be getting some attention before summer, specifically with GZip and SSL support. The general idea is that (eventually) we're going to be adding the Object Pascal run-time engine that is currently used in the IDE at design-time to the web server, thus offering the same language for the entire stack. When you work with controls/components in the designers in the IDE, the run-time actually executes code from the component library, which is why scrollbars work and you can click on buttons in controls to add new sub-controls, etc. It's nice for a control/component developer because they only need to set a simple flag that indicates that they want design-time events for a given control, and the IDE/component library takes care of the rest.
> Now I'm wondering whether your UI architecture is abstracted enough that end-users could build UI components out of JS... hmm, that probably wouldn't work, the UI designer wouldn't be able to control them. (I'm guessing you can design your own controls in Pascal?)
That's a very astute observation, and 100% correct. :-) The easiest way to use external JS controls in Elevate Web Builder is to use a TBrowser control, which is simply an iframe control that will isolate the control from the "normal" UI controls. However, it's also very easy to just create a wrapper control in Object Pascal that interfaces with the JS, which is what we did with the TMap control for Google Maps support.
The whole IDE is designed around the idea of creating and installing your own controls/components, just like in Delphi. And, more importantly, it is a lot easier because there are simple UI element building blocks (in the virtual DOM) to use for building up controls, with the UI elements doing all of the heavy lifting and modifications being simple property changes/method calls.
> That's a great development model, and one I've considered myself (providing source to a large portion of the codebase to accelerate urgent fixes).
It's pretty much been the "Delphi" way of doing things since it was first created and sold by Borland, so we can't really take credit for it. It' funny, though, because it pre-dates open source. I never used Turbo Pascal, but I think it did something similar, and it really pre-dates open source.
> I was wondering how the Pascal bit worked for a while there. I'm curious if you pulled in another language implementation or built your own; I'm guessing you went full crazy and made your own implementation, considering you compile to JavaScript? :) (not sure though, Wikipedia mentions that Smart Mobile Studio have a JS-targeting implementation)
We had some experience doing an interpreter in our SQL implementations for our database engine products, so it was a natural move for us. The most difficult portion was building the run-time execution engine, mentioned above.
(continued below)
Re: I miss Delphi
#190Earlier quoted context omitted.
Thanks for the feedback, it is always appreciated. I'll take these one at a time: 1) The "volume control" is a cheat - I created that demo and used a progress bar instead of an actual draggable horizontal gauge (not available). 2) The font is the icon font (a trimmed-down version of Font Awesome) used for the icons in the applications. It's the preferred way of doing vector icons in Elevate Web Builder, at least for…
Wow, thanks for taking the time to reply! > 1) The "volume control" (...) used a progress bar instead of an actual draggable horizontal gauge (not available). Ah, that's the name of what I was looking for. I think HTML5 sliders can be styled similarly to how the volume control looks, but I understand you're targeting a wide variety of Web browsers here. The reason I mentioned it was because I'm used to being able to…
> Yep. I can see the niche for this though. Plus, diverging from the mainstream means you get to neatly sidestep the frenetic insanity associated with the cutting edge, which can be really really nice if you find something that pays well. :) (Still looking for my own one of that)
It's doing pretty well, and we're slowly but surely building up a decent customer base. Plus, we're a very small company, so we don't need much revenue.
> With signing up... really like the "Real name" vs "Displayed name" vs "User ID" distinction! Hm, idea: s for the input fields on the new user form... oh, and what's the automatic signup rate with your current captcha?... ahh, consider NOT sending the user password back through failed forms... definitely definitely consider HTTPS for at least the signup form (!!!)... and maybe redirect the user to the page they were on when they clicked the signup link. The site design is very nice though.
Yeah, try to ignore the web site issues for now. It's a little dated, and is about a decade old now. We're going to be "dog-fooding" the whole thing with Elevate Web Builder, once the web server is updated to include the Object Pascal run-time and the GZip/SSL support is added. It will make a good example that customers can use to build their own sites, etc. It will be a mix of back-end-generated pages with mini Elevate Web Builder apps for various sections that now use plain HTML forms. Having said that, we're going to move the logins on to HTTPS sooner than that.
> (Regarding the captcha system, you have me confused and very curious. Are you hashing the current time, or adding hash codes to a DB...? The PNG URL has no parameters in it! :P)
Yes, it's performing some machinations on the time to generate the code. Essentially the code/PNG is stored and then deleted after it has been used. Again, not our finest work, but we don't have too many people trying that hard to sign up on the web site with robots. :-)
> I wouldn't be surprised at all if yours won out - I think React tries to "guess" by itself when to push its virtual DOM to the screen, and it constantly gets it wrong of course. A reference-counted approach with "don't update for a minute" boundaries sounds very simple and elegant. So I'm serious, benchmarking your system against React's could be quite interesting; but the problem would of course be in finding React-based controls to compare against.
I've also wondered the same. Besides what you point out, my concern with React is that it might stress the GC too much, but that's based upon my limited understanding of how its diffing algorithm generates what it needs to update the DOM. In contrast, Elevate Web Builder only needs to track a simple change set per UI element and enforce one simple rule: no UI element will actually apply its DOM updates until all parent elements are no longer being updated. The initial application load results in only one pass of DOM updates because there is a BeginUpdate..EndUpdate block around the application "surface" (body element) during the application load. And, more importantly, elements are created once and stay created.
Elevate Web Builder 2.06 actually adds some more optimizations in this regard, including the concept of "local change blocks" whereby layout and measurement are delayed until the EndUpdate call (where UpdateCount=0) on a per-element basis without taking into account the parent update status. This provides a much-needed reduction in how many calls are necessary to compute the width/height of UI elements that are auto-sized. The measurement functionality touches the DOM (off-screen, but still part of the DOM), hence it's very slow. So, the general design is that local updates control when layout/measurement occurs (there's also a method to force this), and global updates (including parent update status) control when DOM updates are applied.
> Also, Pascal doesn't actually look that bad. I've been meaning to get around to having at least a passing knowledge of it for a while...
It's actually quite a nice language, although the Elevate Web Builder variant is a little more restricted than Delphi, due to some of the limitations of JS. We've written database engines, ODBC drivers, PHP extensions, web servers, general applications and libraries, and an IDE/compiler using it, so it's pretty versatile. More importantly, it has GUI options on the desktop, which is where a lot of languages fall down. It is often the case that "just use an embedded browser" is not a viable solution for a professional application, and then you're stuck using some tacked-on GUI toolkit that may or may not work particularly well with your language.
> Ah, the world of HTML4.999999999999
:-)
> I thought I'd mention: the designer itself seems to actually work in Wine (in that it didn't crash on me, and is in fact running in another virtual desktop right now), but I got an error message that the web server failed to bind. Happy to do further digging if you like.
It's probably just the binding to port 80, which is a bit naive, but can be changed pretty easily:
http://www.elevatesoft.com/supportfaq?action=view&category=e...
(if you want to follow up on this via email, you can contact us at support@elevatesoft.com)
> Also, shift+scroll doesn't scroll horizontally in the designer. Something I've gotten used to from Chrome, thought I'd mention it.
Thanks, I'll check that out and make sure that it's added.
> I was also curious: have you ever considered pitching this for mobile UI development? With a pixel-perfect grid-based system like this (that does admittedly offer some very impressive snapping options) the only way would be to create mobile-specific forms - but such an approach could potentially work quite well. The only other thing I can think of would be (re)designing controls that play nice with primarily touch-based environments, and implementing views with slide animations and such. I don't think this would be a doomed idea, I'm guessing you've already thought about it.
We also target mobile, fully support touch, and there are a lot of responsive flow options in the layout functionality, but yes, it's normally best to create separate mobile/desktop versions simply so that one can take advantage of the unique functionality on each platform. This isn't as bad as it sounds, however, because one can easily share units between projects, including database units that include database model functionality. There are also simple method calls for aggregate animation operations such as sliding:
http://www.elevatesoft.com/manual?action=viewmethod&id=ewb2&...