Jump to content

Needs for Commercial Developing


AKAC123
 Share

Recommended Posts

Hi, I have to say that I tested your tool and like this approach - especially because it seems to work very good.

 

But I have some questions, that are very important for me, because I have to decide if I can develop a commercial product based on your solution:

 

- I need some information about your timeline: When do you think the product is ready to use (1.0?)

- What kind of licenses will you sell and what will be the price (keep in mind that ext js is not free, and you should earn money from your work)?

- A source option would be interesting, so that the investement in your solution is future safe and maybe there is a chance to fix bugs on our own...

- Do you plan to support SENCHA TOUCH also?

- Will there be a chance to implement own components?

- Will there be a way to use the original components from EXT JS directly?

 

- I would prefer that it is possible to see with what kind of company I start a business partnership (e.g. adress, director). So a serious contact-page for FMSOFT would be great...

 

So again I have to say, that I like your product and I think that answers to these questions would be helpful for all of your futurue customers...

 

Best regards

Alex

  • Upvote 1
Link to comment
Share on other sites

  • Administrators

Hi, I have to say that I tested your tool and like this approach - especially because it seems to work very good.

 

Thanks a lot.

 

But I have some questions, that are very important for me, because I have to decide if I can develop a commercial product based on your solution:

 

- I need some information about your timeline: When do you think the product is ready to use (1.0?)

 

The timeline has been shifted for several months. Product is already usable and used in production environment. However, it can't be called a complete "product" yet. The exact release for 1.0 is somewhere in 2012. Hopefully in first half.

 

- What kind of licenses will you sell and what will be the price (keep in mind that ext js is not free, and you should earn money from your work)?

 

It will be a commercial license. Our plan is to keep the total price for a single developer seat below 1,000 USD. (Including Ext JS license price). It can be even lower for entry level SKUs.

 

- A source option would be interesting, so that the investement in your solution is future safe and maybe there is a chance to fix bugs on our own...

 

I'm aware of this. Source option can be available too. Whether it will be full or partial it will be decided later.

 

- Do you plan to support SENCHA TOUCH also?

 

It is planned yes, but little work is actually done towards it. We will seriously think about it after 0.90.0.

 

- Will there be a chance to implement own components?

 

Yes, of course. It is needed to published the receipt for it.

 

- Will there be a way to use the original components from EXT JS directly?

 

I have this option in mind. A way to create a generic uniGUI control which can wrap any ext js control.

 

- I would prefer that it is possible to see with what kind of company I start a business partnership (e.g. adress, director). So a serious contact-page for FMSOFT would be great...

 

It is a small software company located in Ankara / Turkey. I'm director/owner of the company. FMSoft main site is under serious re-construction, but I know, things should be accelerated.

 

So again I have to say, that I like your product and I think that answers to these questions would be helpful for all of your futurue customers...

 

Yes, no doubt that there are many questions in developers' minds. I'll try to be as open as I can. Answering most of the licensing issues is postponed to 0.90.0 version. So until then main focus is on technical development and improvement of the product.

 

We will be releasing 0.88.0 very soon which shows 0.90.0 is not that far.

 

Thanks

Link to comment
Share on other sites

It is a small software company located in Ankara / Turkey. I'm director/owner of the company. FMSoft main site is under serious re-construction, but I know, things should be accelerated.

 

If it is a physically reconstruction take care about earthquakes seriously.

Link to comment
Share on other sites

Thank you for your detailled answers! I'm looking forward to the new versions and infos!

 

---

 

There is one more question, because I've the need to migrate old VCL-Applications to the web and a big problem are the MesageBoxes (and other modal Dialogs that I use often as functions). I know that developing with ajax is always non-blocking and so I need to use CallBack-Functions.

 

But then I have to rewrite the existing logic. I don't like this, but do you think there is another way of solve this problem? I'mean do you have the chance to handle such calls in another way in your own framework?

 

Maybe I did not understoode the difference, as I see, I have only to split several function (looking only on standard-vcl-apps with modal dialogs).

 

Thank you

Alex

Link to comment
Share on other sites

But then I have to rewrite the existing logic. I don't like this, but do you think there is another way of solve this problem? I'mean do you have the chance to handle such calls in another way in your own framework?

There are anonymous functions in Delphi, and you can utilize them in your own forms as callbacks. Make your own showmessage and showdialog forms, and the difference will be minimal.

 

VCL code:

ShowMessage('hello!');
ProcessSomething; // executed after message is closed

 

UniGUI code with anonymous callback:

MyForm.ShowMessage('hello!', procedure
 begin
   ProcessSomething; // executed after message is closed
 end
);

 

Quite similar, isn't it?

Link to comment
Share on other sites

  • Administrators

Thank you for your detailled answers! I'm looking forward to the new versions and infos!

 

---

 

There is one more question, because I've the need to migrate old VCL-Applications to the web and a big problem are the MesageBoxes (and other modal Dialogs that I use often as functions). I know that developing with ajax is always non-blocking and so I need to use CallBack-Functions.

 

But then I have to rewrite the existing logic. I don't like this, but do you think there is another way of solve this problem? I'mean do you have the chance to handle such calls in another way in your own framework?

 

There are several places that you will need to rewrite your app logic. Modal views are one of them. Currently you the only way to handle modal results is using callback functions.

Link to comment
Share on other sites

There are anonymous functions in Delphi, and you can utilize them in your own forms as callbacks. Make your own showmessage and showdialog forms, and the difference will be minimal.

 

VCL code:

ShowMessage('hello!');
ProcessSomething; // executed after message is closed

 

UniGUI code with anonymous callback:

MyForm.ShowMessage('hello!', procedure
 begin
   ProcessSomething; // executed after message is closed
 end
);

 

Quite similar, isn't it?

Wow. I need some eye bleach after seeing that. :D

Link to comment
Share on other sites

There are anonymous functions in Delphi, and you can utilize them in your own forms as callbacks. Make your own showmessage and showdialog forms, and the difference will be minimal.

 

VCL code:

ShowMessage('hello!');
ProcessSomething; // executed after message is closed

 

UniGUI code with anonymous callback:

MyForm.ShowMessage('hello!', procedure
 begin
   ProcessSomething; // executed after message is closed
 end
);

 

Quite similar, isn't it?

 

Yes, I know this - but the "quite similar" is my problem: So I have to rewrite my source code and therefore I have to maintain 2 difference source bases. I am talking her not about my View-Logik, this is clear for me. But I build up a business-logic that works a lot with calls to dialogs or message boxes.

 

I don't know exactly how UniGUI works but it seems to me, that there is a Delphi-Representation of the ExtJS-Objects. And therefor I am wondering, if it is not possible to solve these situations (above) in UniGUI: e.g. The MessageHandler is handled internal and maybe there is a second thread where my source logic is inside where I have to wait until the ShowMessage returns with the well known results.

 

Then it would be pure VCL-Logic inside the web ;o)

 

If the session is closed then maybe with exceptions it would be possible to exit my thread, too.

 

Alex

Link to comment
Share on other sites

Yes, I know this - but the "quite similar" is my problem: So I have to rewrite my source code and therefore I have to maintain 2 difference source bases.

You don't have to rewrite your code, only "refactor" it a bit. Callbacks work in VCL the same way, so it is still 1 code base to maintain. And the lastest UniGUI version has a built-in support for anonymous callbacks, so you dont even need to create your own forms for dialogs and messages.

 

I don't know exactly how UniGUI works but it seems to me, that there is a Delphi-Representation of the ExtJS-Objects. And therefor I am wondering, if it is not possible to solve these situations (above) in UniGUI: e.g. The MessageHandler is handled internal and maybe there is a second thread where my source logic is inside where I have to wait until the ShowMessage returns with the well known results.

ExtsJS is representation library for JS (JavaScript), UniGUI is a library for ExtJS, so in general UniGUI is a library for JS too. JavaScript is asynchronous (no blocking code), so every library based on JS has the same asynchronous nature, be it ExtJS, JQuery, Dojo, ExtGWT, UniGUI or anything else.

Why is JavaScript asynchronous? Would you like your browser to halt while browsing internet besause some js code called internally a blocking function?

I guess no, user experience (no lags) is way more important than lazy programmers, isn't it? There are no threads in javascript, only callbacks. You either use them, or don't write for web at all.

 

You propose to put all logic in a separate thread in UniGUI application and you can since Delphi (WinAPI actually) has threads, but here comes another problem of the Web. In ordinary desktop app when you say "I want to show a message" you just do it and BAM! it appears on the screen instantly, because you app and what user sees on screen is the same thing, or single layer.

In web you have 3 layers: your app (server), web browser (client) and a network (internet/lan) beetwen them. When you say "I want to show a message" client browser doesn't give a fuck (excuse me for that, but it suites this perfectly) about what you want. You must somehow tell it to show message, and to do that you need to pass the network layer, and here comes another problem...

HTTP protocol used for WWW is one-sided - client always initiates connections to server, not the other way. You can't connect to client browser from your app and say "I want to show a message". The technology to move some information from server to client is called "pushing", and there are only 3 ways known to execute that:

1. Return information in the same connection. When user pushes some button in browser on web page, javascript generates a connection from browser to server, assignes a callback function to process any information that server may return, and returns without blocking so web page won't stall waiting for a response from server. This is called AJAX. And the first "A" letter stands for Asynchronous, the rest is pretty obvious. Thats how ExtJS works, how UniGUI works, how 99% of js libraries work in gereneral. Thats why ShowMessage in uniGUI doesn't block execution, or client browser will never know that he must show that damn message. You want UniGUI to handle it internally, but how? Can you imagine it? It must return from event or browser won't show a message, so it must assign some internal callback to force browser to make another connection when message is closed, and only then it somehow needs to find an entry point to code that is located after showmessage... Well, perhaps it is possible, I'm not that good at assembler since it requires some freaking machine code magic and mambo-jambo with CPU registers to do that, not worth it. By making anonymous function you tell UniGUI yourself "execute that code", and everyone is happy.

2. Polling. Client browser has a timer that periodically calls server to get information about any updates. Your method of separate thread for business logic must use polling to inform client just about anything: appearing messages, forms, dataset changes etc. And all those updates will happen with a delay because you can't poll every 1ms and network also has a latency on top of that. Imagine - you add a row to dataset, and client will only see it 1-2 seconds later, that UI will be horrible. So polling is used only for updates that tolerate delays like chatting, messengers, notifications and other unnecessary stuff.

3. WebSockets. Its a new technology, supported only by several browsers, has problems with network infrastructure (firewalls) and many more. However it can become the future of web, who knows. But not now.

 

p.s. It was a brief and very simplified info just for you :rolleyes:

Link to comment
Share on other sites

  • 7 months later...

You don't have to rewrite your code, only "refactor" it a bit. Callbacks work in VCL the same way, so it is still 1 code base to maintain. And the lastest UniGUI version has a built-in support for anonymous callbacks, so you dont even need to create your own forms for dialogs and messages.

 

 

ExtsJS is representation library for JS (JavaScript), UniGUI is a library for ExtJS, so in general UniGUI is a library for JS too. JavaScript is asynchronous (no blocking code), so every library based on JS has the same asynchronous nature, be it ExtJS, JQuery, Dojo, ExtGWT, UniGUI or anything else.

Why is JavaScript asynchronous? Would you like your browser to halt while browsing internet besause some js code called internally a blocking function?

I guess no, user experience (no lags) is way more important than lazy programmers, isn't it? There are no threads in javascript, only callbacks. You either use them, or don't write for web at all.

 

You propose to put all logic in a separate thread in UniGUI application and you can since Delphi (WinAPI actually) has threads, but here comes another problem of the Web. In ordinary desktop app when you say "I want to show a message" you just do it and BAM! it appears on the screen instantly, because you app and what user sees on screen is the same thing, or single layer.

In web you have 3 layers: your app (server), web browser (client) and a network (internet/lan) beetwen them. When you say "I want to show a message" client browser doesn't give a fuck (excuse me for that, but it suites this perfectly) about what you want. You must somehow tell it to show message, and to do that you need to pass the network layer, and here comes another problem...

HTTP protocol used for WWW is one-sided - client always initiates connections to server, not the other way. You can't connect to client browser from your app and say "I want to show a message". The technology to move some information from server to client is called "pushing", and there are only 3 ways known to execute that:

1. Return information in the same connection. When user pushes some button in browser on web page, javascript generates a connection from browser to server, assignes a callback function to process any information that server may return, and returns without blocking so web page won't stall waiting for a response from server. This is called AJAX. And the first "A" letter stands for Asynchronous, the rest is pretty obvious. Thats how ExtJS works, how UniGUI works, how 99% of js libraries work in gereneral. Thats why ShowMessage in uniGUI doesn't block execution, or client browser will never know that he must show that damn message. You want UniGUI to handle it internally, but how? Can you imagine it? It must return from event or browser won't show a message, so it must assign some internal callback to force browser to make another connection when message is closed, and only then it somehow needs to find an entry point to code that is located after showmessage... Well, perhaps it is possible, I'm not that good at assembler since it requires some freaking machine code magic and mambo-jambo with CPU registers to do that, not worth it. By making anonymous function you tell UniGUI yourself "execute that code", and everyone is happy.

2. Polling. Client browser has a timer that periodically calls server to get information about any updates. Your method of separate thread for business logic must use polling to inform client just about anything: appearing messages, forms, dataset changes etc. And all those updates will happen with a delay because you can't poll every 1ms and network also has a latency on top of that. Imagine - you add a row to dataset, and client will only see it 1-2 seconds later, that UI will be horrible. So polling is used only for updates that tolerate delays like chatting, messengers, notifications and other unnecessary stuff.

3. WebSockets. Its a new technology, supported only by several browsers, has problems with network infrastructure (firewalls) and many more. However it can become the future of web, who knows. But not now.

 

p.s. It was a brief and very simplified info just for you :rolleyes:

 

This information is very useful. We really need documentation like this. Thank you.

Link to comment
Share on other sites

Time changes so fast... WebSockets technology now is mainstream (as other HTML5 features), supported nearly by all browsers be it mobile or desktop. There are quite a lot of online browser games using it and some interesting js libraries developing steadily

Socket.IO

SockJS

Nice list to check in general.

 

I don't know if ExtJS4 has anything to do with WebSockets, but adding it's magic to UniGUI can indeed provide some interesting functionality.

Link to comment
Share on other sites

  • 1 month later...
  • 1 month later...
  • 11 months later...

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...