digitalmars.D - How D may replace PHP & ASPX on the Web!!!
- Matthew Ong (61/61) Jul 18 2011 Hi All,
- Adam Ruppe (31/38) Jul 18 2011 Yes, I've had to work with it's code before... it was so brutally
- Matthew Ong (56/94) Jul 19 2011 Yes. I am well aware that PHP is slow because of 3-tier approaches.
- Graham Fawcett (12/20) Jul 19 2011 That makes no sense to me at all. What on earth does the server-side
- Matthew Ong (32/58) Jul 26 2011 This is because most web framework only takes in standard HTTP FORM POST...
- Adam D. Ruppe (10/16) Jul 26 2011 Yeah, this is why web.d does envelopeFormat=json and format=json
- Adam Ruppe (42/53) Jul 19 2011 Go's offering for web apps is very, very poor (at least it was last
- Matthew Ong (28/81) Jul 26 2011 CGI is ok. I played with CGI back in the days of perl in unix+apache htt...
- Adam D. Ruppe (12/16) Jul 26 2011 http://arsdnet.net/apidemo.zip
- Robert McGinley (9/34) Jul 27 2011 Hi all,
- Adam D. Ruppe (24/26) Jul 27 2011 You should take a look at the zip in my last post:
- Robert McGinley (3/37) Jul 27 2011 Ah, That makes sense I'll have to play around with it.
- Adam D. Ruppe (98/98) Jul 27 2011 Just being brief here, but something web.d can actually do right
- Kagamin (3/6) Jul 28 2011 You don't want customers for your site?
- Adam D. Ruppe (2/4) Jul 28 2011 I have no idea what you're talking about.
- Matthew Ong (26/29) Jul 29 2011 http://download.oracle.com/docs/cd/A60725_05/html/comnls/us/pjm/ovpjm.ht...
- Adam D. Ruppe (5/7) Jul 29 2011 I've already done it, for both client and server.
- Andrei Alexandrescu (7/14) Jul 29 2011 Adam, you've shown great virtuosity with D, web apps, and your
- Adam D. Ruppe (22/24) Jul 29 2011 Yeah, once it's nailed down. Right now though, the "design"* is
- Matthew Ong (8/11) Jul 29 2011 Thanks very much, I will download and tries this out.
- Adam D. Ruppe (3/5) Jul 29 2011 Search for the header CGI setup:
Hi All, Here are some ideas of how to position D that may actually capable of replacing some major web framework like PHP/ASPX. Many PHP and ASPX sites are being used because they are easy to support development with IDE like(ASPX) or PHP with plenty of ready made platforms like nuke/joomla/others... They may not be high performance or mission critical, but they are welcome by plenty of novice developers and also many professional one also. I am NOT trying to sell a CRM product here, so https://www.sugarcrm.com/crm/ondemand_eval.html This is a rather comprehensive professionally implemented CRM coded in PHP. Now, SugarCRM is being use not because all web pages are CRM product, but to show how a professional product is implemented in PHP. Have a look into this TOC: https://www.sugarcrm.com/crm/support/documentation/SugarCommunityEdition/6.2/-docs-Developer_Guides-Sugar_Developer_Guide_6.2.0-toc.html Developer Tools --> Module Builder D in the web page rendering may wish to provide: 1) Support for international users group via a single standardize: 1.1) standardize the locale config and switching. 1.2) currency format 1.3) date time format / timezone automatically calculated. 1.4) others.. 2) Support skin theme switching and customization. This will 3) Support User Logins and ACLs of Menu and web forms. There is a build in session tracking ability. There should be at least these type of user control level: - Admin (administrator of website, aka super user) - back office staffs (simple non-it staff that can) - registered user (provide login/password/registration) - public user 4) Support customization of forms and also building new module on the fly. See: Developer Tools --> Module Builder in sugarcrm below. Those modules can be easily develop on one machine and zip up for exporting to another machine via uploads. 5) Allow developer to paste in new code updates into some form of hooks that connects to a form post or button events. Business Logic Hooks. https://www.sugarcrm.com/crm/support/documentation/SugarCommunityEdition/6.2/-docs-Developer_Guides-Sugar_Developer_Guide_6.2.0-Sugar_Developer_Guide_6.2.0.html#9003722 6) Support Extension like plugins to be developed. 7) Support multiple platforms including some mobiles devices. This is NOT to say that other people will not be permitted to use D to build a web framework, but if there is a compilable and working reference implementation that demonstrate such abilities, it will point D web developers to the right directions. That document is easy to read and also has already a working product along with data samples to play around with. Because PHP is a runtime interpreted language, the module builder is able to create sometime on the fly during development. However, I do see that D already has this ability with the new TryNow buttons. The whole idea about building a programming language is to have many of adoptions by the developers and is visible by plenty of end users that does not know nor care about programming language. But, they will recommend to others. PHP server if you do not have one installed already. https://www.sugarcrm.com/crm/download pick the FastStack Installer. http://www.sugarcrm.com/crm/download/helper.html?dl=/frs/download.php/8274/sugarcrm-CE-6.2.1-windows-installer.exe Love to hear some comments about this one. -- Matthew Ong email: ongbp yahoo.com
Jul 18 2011
Matthew Ong wrote:Now, SugarCRM is being use not because all web pages are CRM product, but to show how a professional product is implemented in PHP.Yes, I've had to work with it's code before... it was so brutally slow and overcomplicated that we ended up deciding to just throw more hardware at the problem instead! It was moderately painful hooking it into the external application too. Blargh.1.3) date time format / timezone automatically calculated.What I did for timezone was to use a little javascript to set a cookie based on the users' local clock. Incredibly simple and worked very well.2) Support skin theme switching and customization. This willWith my D sites, I was able to express the vast majority of changes in css, and the rest through a DOM post-processor and separate template directories when appropriate. The post-processor is the special thing - most apps treat templates as strings, which maybe could do these things, but I doubt it'd be as clear and easy as with the higher level structures.Support customization of forms and also building new module on thefly. web.d attacks this by letting you alias in other classes to your main app, and of course, with dom templates editing forms is easy.5) Allow developer to paste in new code updates into some form of hooksweb.d exposes your public functions via javascript, which makes this pretty simple. When I integrated sugarcrm with my D application, I used web.d's javascript functionality and a standard onclick handler to bring the D functions in very easily. Dealing with PHP made it harder than it had to be, but it was still pretty simple. (that thing goes both ways btw - web.d's functions are easily accessed with a small PHP library too, that uses curl.)7) Support multiple platforms including some mobiles devices.Any website that doesn't work on mobile devices already is garbage. The whole point of the web is device independence! BTW: I started writing a higher level explanation of my cgi.d. http://arsdnet.net/web.d/cgi.d.html Still a work in progress, of course. Once it's done, I'll write a similar document for web.d.
Jul 18 2011
On 7/19/2011 2:00 AM, Adam Ruppe wrote:Matthew Ong wrote:Yes. I am well aware that PHP is slow because of 3-tier approaches. The KEY idea that I am trying to suggest is the modeling of the D Web Framework that could beat google go. It is about how many build in ability within the existing framework that is shown here in SugarCRM as a single example for discussion points for what may needs to be in the new Web framework from D. Not as a product to be build by a developer. PHP by itself is rather primitive, it does not have all those feature listed in my previous message. However PHP developer has nuke, joomla, sugarcrm... already there to ride on top off. D is currently not the case, I think. A single post pass over http server, next php engine before it reaches the core processing of the application. It actually passes via at least 2 process id runtime before the request is ever handled. What I am showing here is Not to use the SugarCRM over all architecture, but rather, build a list of supported nice features directly within the webframework in D. What would be nice is the D- Webframework itself will provide a minimum http/s secure server to serve the framework and can be configure within the framework. The framework itself should be a single pid within the OS. That way, a single request is only handled within one single pid process all the way until the response packet. Not doing the traditional CGI approaches. But more like the Java Tomcat JSP approaches in the framework level. JSP is slower than D because of JVM. So, DSP(D version of JSP) would be processed within a single PID.Now, SugarCRM is being use not because all web pages are CRM product, but to show how a professional product is implemented in PHP.Yes, I've had to work with it's code before... it was so brutally slow and overcomplicated that we ended up deciding to just throw more hardware at the problem instead! It was moderately painful hooking it into the external application too. Blargh.That is needed within the logic of the server to track data for security purpose and also tx time. Browser site time format might allow hacker to mess the time info of attacks.1.3) date time format / timezone automatically calculated.What I did for timezone was to use a little javascript to set a cookie based on the users' local clock. Incredibly simple and worked very well.Skin in PHP Joomla & SugarCRM uses css and images within a well-know layout and also name. This is a nice feature that may be adopted to ease designers for customizing and deployment.2) Support skin theme switching and customization. This willWith my D sites, I was able to express the vast majority of changes in css, and the rest through a DOM post-processor and separate template directories when appropriate.The post-processor is the special thing - most apps treat templates as strings, which maybe could do these things, but I doubt it'd be as clear and easy as with the higher level structures.I actually in favor the Microsoft asmx + aspx approaches here, but the aspx and asmx must be within the same SINGLE PID memory space. A single asmx code to be call within the same DSP process without soap-xml but when the asmx code is call without the process, soap-xml is used. SEE: http://msdn.microsoft.com/en-us/magazine/cc163674.aspx By using asmx as the controller and call direct (NO Soap-xml) by view from within the SAME process, things can happen really fast. When a call to controller from outside the process it uses Soap-Xml. That way, we can separate the testing and also integrations to other languages. http://www.asp.net/mvc/tutorials/understanding-models-views-and-controllers-csSupport customization of forms and also building new module on thefly. web.d attacks this by letting you alias in other classes to your main app, and of course, with dom templates editing forms is easy.I am in favor of asmx model. See the explanation above.5) Allow developer to paste in new code updates into some form of hooksweb.d exposes your public functions via javascript, which makes this pretty simple. When I integrated sugarcrm with my D application, I used web.d's javascript functionality and a standard onclick handler to bring the D functions in very easily. Dealing with PHP made it harder than it had to be, but it was still pretty simple. (that thing goes both ways btw - web.d's functions are easily accessed with a small PHP library too, that uses curl.)True, but many many web application is currently not yet mobile ready because they are stuck in the CGI model(Aspx/JSP/Strut) rather than the full MVC model like asmx + aspx.7) Support multiple platforms including some mobiles devices.Any website that doesn't work on mobile devices already is garbage. The whole point of the web is device independence!BTW: I started writing a higher level explanation of my cgi.d. http://arsdnet.net/web.d/cgi.d.html Still a work in progress, of course. Once it's done, I'll write a similar document for web.d.Good job, modeling the right approach will position the framework for success. With the GUI like form base creation of webform of SugarCrm where all the backend code handles the database creation and also default HTTP IO handler code. Programming D on the web may change how D development market is structured in the future. FYI, come up with something catchy for your framework. It helps to get attention. I am on +0800GMT what time zone you are on? -- Matthew Ong email: ongbp yahoo.com
Jul 19 2011
On Tue, 19 Jul 2011 23:59:34 +0800, Matthew Ong wrote:That makes no sense to me at all. What on earth does the server-side "model" have to do with how a mobile device renders a Web page? Furthermore, how is JSP or Strut anything like "CGI", and how is "MVC" an alternative to "CGI"? If there is value in your post, I think you are obscuring it by making confusing statements like these. Pointing at a CMS or a set of diverse tools and saying, "D should have something like this!" is not terribly productive. Perhaps you could start by offering an itemized list of (clear, specific) features that you think a D Web framework ought to support. GrahamTrue, but many many web application is currently not yet mobile ready because they are stuck in the CGI model(Aspx/JSP/Strut) rather than the full MVC model like asmx + aspx.7) Support multiple platforms including some mobiles devices.Any website that doesn't work on mobile devices already is garbage. The whole point of the web is device independence!
Jul 19 2011
On 7/20/2011 1:21 AM, Graham Fawcett wrote:On Tue, 19 Jul 2011 23:59:34 +0800, Matthew Ong wrote:Hi Graham,That makes no sense to me at all. What on earth does the server-side "model" have to do with how a mobile device renders a Web page? Furthermore, how is JSP or Strut anything like "CGI", and how is "MVC" an alternative to "CGI"? If there is value in your post, I think you are obscuring it by making confusing statements like these. Pointing at a CMS or a set of diverse tools and saying, "D should have something like this!" is not terribly productive. Perhaps you could start by offering an itemized list of (clear, specific) features that you think a D Web framework ought to support. GrahamTrue, but many many web application is currently not yet mobile ready because they are stuck in the CGI model(Aspx/JSP/Strut) rather than the full MVC model like asmx + aspx.7) Support multiple platforms including some mobiles devices.Any website that doesn't work on mobile devices already is garbage. The whole point of the web is device independence!True, but many many web application is currently not yet mobile ready because they are stuck in the CGI model(Aspx/JSP/Strut) rather than the full MVC model like asmx + aspx.This is because most web framework only takes in standard HTTP FORM POST type request and give browser dependent HTML/XHTML type of respond to the caller. Full MVC asmx + aspx will separate the View(V) logic from the Business logic Controller(C) of handling different database table Model(M). I suspect even SugarCRM is not handling it that way. Could be wrong, I have yet to dig into its detail.Furthermore, how is JSP or Strut anything like "CGI", and how is"MVC" an alternative to "CGI"? I think Adam in the respond explained this part. I am in favor of a thread pool or pre-started processes pool concepts because it takes CPU and OS time to load new process and new thread it memory and CPU queue. Nothing to do with D it is more like OS behavior. However, how that is modeled will impact how each request and respond is handled. What I am not suggesting is that there is only one PID per web application instance. There can be an external monitoring process to restart the pool of threads if the main pool crashes. Sorry for not being too clear about this in previous posting.Pointing at a CMS or a set of diverse tools and saying, "D should have something like this!"My apologies, what I do see is existing PHP developers taking existing framework and hack it to be deployed for the client as a customized projects. Eg: Joomla, PhpNuke, and others. However, PHP does not defines this as part of PHP standard web framework. What I can see is those feature that I have highlighted some really useful build in facilities within a known product. Perhaps you may want to setup a simple pre-can sugarCRM and play with it to see what are the facilities already in there. What I am not for is to direct copy from sugar but rather see what model are good to keep and re-innovate and what part is not good and re-innovate. -- Matthew Ong email: ongbp yahoo.com
Jul 26 2011
Matthew Ong wrote:This is because most web framework only takes in standard HTTP FORM POST type request and give browser dependent HTML/XHTML type of respond to the caller.Yeah, this is why web.d does envelopeFormat=json and format=json in addition to document/html. If you can return proper data structs or objects, it will work well without extra effort. If you want to do more customization, it also has a Page function that can return a Document.I am in favor of a thread pool or pre-started processes pool concepts because it takes CPU and OS time to load new process and new thread it memory and CPU queue.Those costs aren't too big, but what you described is how FastCGI works. FastCGI is supported by my cgi.d code without needing modification in your app code. Just recompile.
Jul 26 2011
Matthew OngThe KEY idea that I am trying to suggest is the modeling of the D Web Framework that could beat google goGo's offering for web apps is very, very poor (at least it was last I checked when they did that "web apps in go" advertisement). It seemed content with offering only the bare minimum. D is already much better.The framework itself should be a single pid within the OS.Why? Note btw: D already has this. My cgi.d can be used with an embedded http server, meaning all data is handled by a single process. But I recommend against it because that's less robust. If the one process dies, everyone suffers. It also doesn't scale as well as a multiple process approach, but this is surely my implementation more than anything else. There are things I kinda like about single process, but the robustness is a huge hit against it.Browser site time format might allow hacker to mess the time info of attacks.No, you still use one time format inside the app. Timezone translation is only done for user input and output.I actually in favor the Microsoft asmx + aspx approaches here, but the aspx and asmx must be within the same SINGLE PID memory space.It looks like that has a lot in common with web.d. In web.d, you implement a service like this: === class MySite : ApiProvider { int add(int a, int b) { return a+b; } string sayHello(string name) { return "Hello, " ~ name ~ "!"; } } === If you're in the same process, you can call the functions directly: === auto api = new MySite(); assert(api.add(1, 2) == 3); === It's just a regular class, so you call methods normally if you're local. If you are on a remote server, a very similar interface lets you call the functions remotely. Javascript example: MySite.add(1, 2).get(alert); // calls alert(3); You can also do other languages, nested calls, custom formats, etc. Anyway, this is super fast if local - it's just a method call - and reasonably fast and accessible if remote, while giving nice looking code. It gets really cool when you start using enums, alias, and structs though.True, but many many web application is currently not yet mobile ready because they are stuck in the CGI model(Aspx/JSP/Strut) rather than the full MVC model like asmx + aspx.Meh, those fancy sites tend to work worse in my experience.I am on +0800GMT what time zone you are on?I'm at GMT - 0400
Jul 19 2011
On 7/20/2011 1:24 AM, Adam Ruppe wrote:Matthew OngThat is great news.The KEY idea that I am trying to suggest is the modeling of the D Web Framework that could beat google goGo's offering for web apps is very, very poor (at least it was last I checked when they did that "web apps in go" advertisement). It seemed content with offering only the bare minimum. D is already much better.CGI is ok. I played with CGI back in the days of perl in unix+apache httpd.The framework itself should be a single pid within the OS.Why? Note btw: D already has this. My cgi.d can be used with an embedded http server, meaning all data is handled by a single process.But I recommend against it because that's less robust. If the one process dies, everyone suffers.If there is way of handling the session from This is what I have in mind with three processes: 1) Httpd with thread pools that handles multiple request and respond including web services. 2) Login/ACL/SessionID handling process that can do IPC(No network) and logs some activities. Routinely save the sessionID info into a file base database. Interact with (1) for authentication and session. 3) Monitoring (1) & (2) using some IPC to probe both the process health and may execute some garbage collection instructions.It also doesn't scale as well as a multiple process approach, but this is surely my implementation more than anything else. There are things I kinda like about single process, but the robustness is a huge hit against it.Are you able to zip up those into a single file that is compilable and email it to me for testing? Show me how to setup, perhaps we can take it further into better level. I am new to D, but have seen many enterprises environment. Does the webservices give some thing like this or a proper WSDL? http://www.webservicex.net/ws/wscatlist.aspx Another thing: The java script works on IE, Chrome and firefox? If yes, that is great. If not, please have generate WSDL that can allow java/.NET/PHP to interact with. That will open up the D WebFramework integrations. I am currently working for a purely .NET environment company and can have resources to test that out. Java and PHP is free.Browser site time format might allow hacker to mess the time info of attacks.No, you still use one time format inside the app. Timezone translation is only done for user input and output.I actually in favor the Microsoft asmx + aspx approaches here, but the aspx and asmx must be within the same SINGLE PID memory space.It looks like that has a lot in common with web.d. In web.d, you implement a service like this: === class MySite : ApiProvider { int add(int a, int b) { return a+b; } string sayHello(string name) { return "Hello, " ~ name ~ "!"; } } === If you're in the same process, you can call the functions directly: === auto api = new MySite(); assert(api.add(1, 2) == 3); === It's just a regular class, so you call methods normally if you're local. If you are on a remote server, a very similar interface lets you call the functions remotely. Javascript example: MySite.add(1, 2).get(alert); // calls alert(3); You can also do other languages, nested calls, custom formats, etc. Anyway, this is super fast if local - it's just a method call - and reasonably fast and accessible if remote, while giving nice looking code. It gets really cool when you start using enums, alias, and structs though.They did not model it properly. Perhaps D community could.True, but many many web application is currently not yet mobile ready because they are stuck in the CGI model(Aspx/JSP/Strut) rather than the full MVC model like asmx + aspx.Meh, those fancy sites tend to work worse in my experience.-- Matthew Ong email: ongbp yahoo.comI am on +0800GMT what time zone you are on?I'm at GMT - 0400
Jul 26 2011
Matthew Ong wrote:Are you able to zip up those into a single file that is compilable and email it to me for testing?http://arsdnet.net/apidemo.zip go into the demo folder and run: dmd apidemo.d -J. arsd/web.d arsd/dom.d arsd/cgi.d arsd/sha.d It will build a CGI file by default. Drop it into your cgi-bin on apache or make one on IIS and you can run it. (I've tested this program on Windows Vista IIS and Linux Apache so it should work for you too)Does the webservices give some thing like this or a proper WSDL?No. Might not be hard to add though, but it's not something I've wanted so I haven't done it.The java script works on IE, Chrome and firefox?Yes. I've also written code so you can access the functions from PHP and Bash shell. It's not hard to write more language access to it.
Jul 26 2011
Hi all, New to D and the mailing list. I'd actually like to see something = closer to CherryPy for D. That is a framework that is an http server = with url mapping instead of a cgi library. Not a fan of apache (true I = could use Nginx). I think it would have great application in highly = scalable web apps. (Much better then compiling PHP into C++ and then to = machine code ala Facebooks HipHop.) Rob On Jul 26, 2011, at 1:33 PM, Adam D. Ruppe wrote:Matthew Ong wrote:Are you able to zip up those into a single file that is compilable and email it to me for testing?=20 http://arsdnet.net/apidemo.zip =20 go into the demo folder and run: =20 dmd apidemo.d -J. arsd/web.d arsd/dom.d arsd/cgi.d arsd/sha.d =20 =20 It will build a CGI file by default. Drop it into your cgi-bin on apache or make one on IIS and you can run it. (I've tested this program on Windows Vista IIS and Linux Apache so it should work for you too) =20Does the webservices give some thing like this or a proper WSDL?=20 No. Might not be hard to add though, but it's not something I've wanted so I haven't done it. =20The java script works on IE, Chrome and firefox?=20 Yes. I've also written code so you can access the functions from PHP and Bash shell. It's not hard to write more language access to it.
Jul 27 2011
Robert McGinley wrote:That is a framework that is an http server with url mapping instead of a cgi library.You should take a look at the zip in my last post: http://arsdnet.net/apidemo.zip The way my web.d works is it builds on top of cgi.d to do that url to object mapping. class SiteDemo : ApiProvider { // found at / Document _defaultPage() {... } // this method is at /hello string hello(string name) { return "hello, " ~ name; } // this object is at /SomeObject/ID class SomeObject : ApiObject { this(SiteDemo a, string id) {} } // this is at /SubObject/ class SubObject : ApiProvider {} } cgi.d is actually more than just cgi - it also works fine with fastcgi or an embedded http server. (the embedded needs add on modules netman.d and httpd.d from http://arsdnet.net/dcode them compile with -version=embedded_httpd My httpd.d is single threaded though, so I don't recommend using it in production at this time. But, if you deploy on Apache or IIS, it's easy to do that, and just a recompile to switch backends later if you want. Don't have to edit your app.)
Jul 27 2011
Ah, That makes sense I'll have to play around with it. Rob On Jul 27, 2011, at 1:52 PM, Adam D. Ruppe wrote:Robert McGinley wrote:That is a framework that is an http server with url mapping instead of a cgi library.You should take a look at the zip in my last post: http://arsdnet.net/apidemo.zip The way my web.d works is it builds on top of cgi.d to do that url to object mapping. class SiteDemo : ApiProvider { // found at / Document _defaultPage() {... } // this method is at /hello string hello(string name) { return "hello, " ~ name; } // this object is at /SomeObject/ID class SomeObject : ApiObject { this(SiteDemo a, string id) {} } // this is at /SubObject/ class SubObject : ApiProvider {} } cgi.d is actually more than just cgi - it also works fine with fastcgi or an embedded http server. (the embedded needs add on modules netman.d and httpd.d from http://arsdnet.net/dcode them compile with -version=embedded_httpd My httpd.d is single threaded though, so I don't recommend using it in production at this time. But, if you deploy on Apache or IIS, it's easy to do that, and just a recompile to switch backends later if you want. Don't have to edit your app.)
Jul 27 2011
Just being brief here, but something web.d can actually do right now that might be cool is plugging in modules to build your site. ==== import arsd.web; import some_blog_module; import some_forum_module; class MySite : ApiProvider { alias SomeBlogModule blog; alias SomeForumModule forum; alias _sitemap sitemap; Document _defaultPage() { redirect("sitemap"); return new Document; } } mixin FancyMain!MySite; ==== If some_x_module existed, that would compile and run a site with: / -> redirect to /sitemap -> which is an automatically generate tree of links of all site functions. /forum -> the Forum object /blog -> the Blog object Those sub-objects can be completely independent, and still integrate into your site with ease! I actually fairly hate web services. The whole idea strikes me as rather blarghy; my data is mine, and I really don't want you to have it. But, the main alternative is downloading some app then spending hours trying to integrate it into the rest of your site. Ever tried to build a coherent site out of WordPress, PHPBB, some other thing and custom code on top of it? I have. Pain in my ass, even if I'm willing to take some shortcuts. Each one has their own login function. Each has their own styles and template systems. Each has their own user database. And, of course, each has their own code that can't be brought together. Try including a Wordpress file in phpbb. You'll wanna slit your wrists. The beauty of the web.d approach here is that those modules are now brought into your class, with the magic of alias. That means they share a number of fundamental functions! Providing a _getGenericContainer on the outer level can apply to those inner classes. Your _postProcess is run even on the inner class methods. What that means is styling them is fairly trivial - it automatically puts the content inside the skeleton you provide, and your modifications after-the-fact are still done. (_postProcess() can be thought of a way of a server side alternative unobstructive javascript - it presents you with the final DOM tree and you can modify it as you see fit before the output is written. _getGenericContainer is the starting point - when building a final document, it calls that to get a reference to a specific place in your HTML template as to where to put the main content.) If that isn't enough, you can still use inheritance to override methods in the provided classes, or to add more. Or, you can call their methods directly. No need to mess with some php plugin to auto post to the forum, just call forum.makePost() directly. One question comes to mind: what if you need to add configuration to those modules? Can't do that with alias.... or can you? If the modules were templates... alias SomeBlogModule!(config, info) blog; that should work right now. One point of power might be to pass typeof(this) as a template arg, so it can access your top level class' special methods. Using template constraints, it can let you know what you need to implement for best results. Some good interfaces might be getLoggedInUser() and getDatabaseHandle() to make integration that much easier. Some questions remain: what about stylesheets? If you write websites like I do, the .css file is a necessity. Adding it in the postProcess section could work. Or, something I've really liked doing recently is this: ====== void _catchAll(string path) { if(path == "/style.css") { cgi.setResponseContentType("text/css"); cgi.setCache(true); // unlimited client side caching cgi.write(import("style.css")); return; } super._catchAll(path); } ==== That is - serve up the css file from inside the application. It makes deployment slightly easier, and I can concatenate data on the server if need be: string style = import("style.css"); version(special) style ~= import("other-style.css"); cgi.write(style); This concatenation is what you can do with child objects. If ApiProvider had a style() method, you could call it for each child. Then, of course, overriding it or providing another stylesheet later on or with greater specificity gives you full control, along with sensible defaults. I think I'll add this as a standard thing soon. (like how "functions.js" is built in to web.d to provide the JS api. Just link to that name from your template html and you can use all your D functions via AJAX type calls.) All we've gotta do is write up some of these modules and see if the idea works as well in practice as I hope!
Jul 27 2011
Adam D. Ruppe Wrote:I actually fairly hate web services. The whole idea strikes me as rather blarghy; my data is mine, and I really don't want you to have it.You don't want customers for your site? BTW real software like PHPBB processes the customer's data, not your.
Jul 28 2011
Kagamin wrote:You don't want customers for your site? BTW real software like PHPBB processes the customer's data, not your.I have no idea what you're talking about.
Jul 28 2011
On 7/28/2011 12:57 PM, Adam D. Ruppe wrote: Hi Adam,I actually fairly hate web services. The whole idea strikes me as rather blarghy; my data is mine, and I really don't want you to have it.http://download.oracle.com/docs/cd/A60725_05/html/comnls/us/pjm/ovpjm.htm If you look at this diagram: http://download.oracle.com/docs/cd/A60725_05/html/comnls/us/pjm/oapps.gif Many different modules within an enterprise levels applications may need to be able to exchange information with each others. Sale Force Automation is most likely something like: SugarCRM/MS Dynamic CRM. Financial will be using something like Oracle as ERP. Supply Chain/Manufacturing software might be SAP. They all will have some exchange data among themselves from various physical locations and various physical servers behind different firewalls. SOA (Webservices / JMS/ MQ) is used with XML for data information sharing for such purposes. TIBCO is one of the major application that does just that. http://download.oracle.com/docs/cd/A60725_05/html/comnls/us/pjm/oapps.gif BizTalk Server from MS is also within this segment of market. Applications that are build on JAX-WS + strut / asmx + aspx MVC model are very much welcome and accepted in various industry because that replaces the very old RPC and EAI + Middleware approaches. Hopefully you might consider doing something about it for even PHP has some form of Webservices support. -- Matthew Ong email: ongbp yahoo.com
Jul 29 2011
Matthew Ong wrote:Hopefully you might consider doing something about it for even PHP has some form of Webservices support.I've already done it, for both client and server. The point of that last post is I want an easy to use *alternative* using the same code. HTTP web apis aren't as easy to use as D inheritance.
Jul 29 2011
On 7/29/11 9:09 AM, Adam D. Ruppe wrote:Matthew Ong wrote:Adam, you've shown great virtuosity with D, web apps, and your framework. Do you think you'd consider packaging your work as a proposal for inclusion in Phobos? Andrei P.S. Hi again everyone... I've been busy with work and then sick. I'm still busy, but feeling better now.Hopefully you might consider doing something about it for even PHP has some form of Webservices support.I've already done it, for both client and server. The point of that last post is I want an easy to use *alternative* using the same code. HTTP web apis aren't as easy to use as D inheritance.
Jul 29 2011
Andrei Alexandrescu wrote:Do you think you'd consider packaging your work as a proposal for inclusion in Phobos?Yeah, once it's nailed down. Right now though, the "design"* is still volatile and the implementation pretty ugly. There's some weird limitations too (Nick has started helping to fix these though, so this situation will probably change rapidly) so not suitable for the stdlib at this point. * I say "design" because it's actually more of an evolution of "hey that might be cool" tempered by a handful of small real apps using it than an actual "this is a good idea" design. cgi.d might be phobos ready though with some documentation. I've started writing that up a week or so ago. Started using github too, so check out the README here to see what I have documented so far: https://github.com/adamdruppe/misc-stuff-including-D-programming-language-web-stuff I spend more time on "Why?" in documentation than "how" though! But that's because I tend to believe that libraries represent and added cost in general, so the benefit really needs to be justified for every little hassle it puts you through. With some luck, once you understand why I did it the way I did, the usage will be easier to remember too, since you can always go back to these principles rather than memorizing a list of functions.
Jul 29 2011
On 7/27/2011 1:33 AM, Adam D. Ruppe wrote:http://arsdnet.net/apidemo.zip go into the demo folder and run: dmd apidemo.d -J. arsd/web.d arsd/dom.d arsd/cgi.d arsd/sha.dThanks very much, I will download and tries this out. Could you also show me how to do configuration within Vista IIS and also Apache? I have not done both server for a long while. Getting old... :) -- Matthew Ong email: ongbp yahoo.com
Jul 29 2011
Matthew Ong wrote:Could you also show me how to do configuration within Vista IIS and also Apache?Search for the header CGI setup: http://arsdnet.net/web.d/cgi.d.html
Jul 29 2011