Composable and/or pluginable web site architecture [closed] - html

Closed. This question does not meet Stack Overflow guidelines. It is not currently accepting answers.
We don’t allow questions seeking recommendations for books, tools, software libraries, and more. You can edit the question so it can be answered with facts and citations.
Closed 4 years ago.
Improve this question
I am doing some research/exploring into different site designs and architecture. Generally speaking, I would like to read up on different patterns and practices that are being done today for web sites.
Specifically, I am looking for a composable and/or plugin site design. The main purpose of this setup would be for it to allow each plugin or part of the site to be developed independently of the other parts. Hopefully with little working knowledge of the other pieces. I know there will be some knowledge spread between the peices for authentication and authorization. The main goal would be to limit the coupling between sections of the site and limit impact of code changes to other parts of the site.
I have a few ideas but I am not sure if they are piratical. That is why I am trying to find more info on what others have done.
Some ideas.
Idea 1 was to create a MVC site that allowed plugins to be deployed. There are a few ways to do this. Seen here, here and here. Plugins could be developed and run interdependently of the main site. Once completed could be dropped in and tested with the main core. One set of master pages, CSS, and whatever else. This is similar to the plugin model for most CMS systems (ex: wordpress)
The second idea would be a single sign on design. Every section of the site could be hosted as its own domain/site/ect. but auth would be done in a sign point. Some ideas on how to do this could be seen here. Master pages, CSS and other items would probably have to be repeated between the different sections.
And the 3rd idea was a mixture of the two. The "core" site would handle styling and layout. The content would be ajax calls to the different sections of the site which could be hosted on the same domain or not.
I have not flushed these ideas out or done any prototyping yet. I am in the brainstorming portion of this process. The only thing that is set in stone is it will be written with C#/asp.net mvc and there must be only one sign in between sections of the site. Other than that, everything is fair game.

I use RazorGenerator. It's installable via NuGet (plus an install of a VS tool) and all you have to do is set the Custom Tool property on your views.
Your core site would then have to use the virtual path provider idea. You can use Chris van de Steeg's approach for this as he's already built all the code you need.
The glue that makes it all work is the third and arguably the most important point: how do allow plugins to "expose" their end points (controllers and actions)? And how do you do this in the correct context and whereabouts on your site?
For this I use a framework DLL that exposes a ton of interfaces for different scenarios. The main site creates managers for the different types of end points, and I have several layouts and helper classes that call on the managers to render the end points at the correct location. At application start-up, I iterate over all the plugin DLLs in a pre-defined directory and use reflection to inspect their interfaces, then add them to the appropriate managers.
I have also created a "management" area in the site to disable end points so that admins can override the plugin's default behavior.
As far as I know, and as evidenced by my efforts to-date, there is no pre-existing project to handle this. Hope this helps in your direction.

I went with idea 1 above. Here is some example code of creating a plugin site for ASP.NET MVC that doesn't no require any 3rd party references. It also includes all site content to be embedded in the plugin dll. Enjoy!
https://github.com/Oobert/ASP.NET-MVC-Plugins

Related

What is the best method to make an interactive website with MySQL using existing code? [closed]

Closed. This question needs to be more focused. It is not currently accepting answers.
Want to improve this question? Update the question so it focuses on one problem only by editing this post.
Closed 6 years ago.
Improve this question
Straight to the point: What is the best method to make an interactive website with a database connection? My current path is to code it all by myself (cue the song). How would you tackle this situation with today’s methods and possibilities?
I already have read into HTML5 and CSS3. I’ve “finished” the homepage with html and wrote the main-css (here is the fiddle).The sections on the frontpage should contain elements from the database in the future. The bacon ipsum is just an inadequate place-holder. :P
<section>
<h2>Newest entries</h2>
<p>Bacon ipsum ....</p>
Currently I’m looking at JS, JQuery and PHP but it’s all relatively new to me. During my studies we looked at JavaEE but I’m unsure if it’s the right approach for this. The attached diagram shows what classes my website should support. The website should enable collaborative writing of stories between multiple people.
What I would like to know is: Which is the best way to create a functional site? I know one option is to code it all by myself but I have a very strong feeling that all the functionality which I need is already available. Could someone give me a nudge in the right direction?
My hosting-provider supports MySQL 5, subdomains, Website Redirect, Cronjobs, Domain Mapping in root, Website Directory Indexing, PHP 4, PHP 5 mit SOAP Support, Perl, Python, RealAudio, Ruby 1.8.7, ImageMagick, Ghostscript, Zend Optimizer, Gd
The provider also offers following 1-click installations:
WordPress, Joomla, Concrete 5, bbPress, BuddyPress, Drupal, phpBB2 & 3, Elgg Social Network System, MODX, Vanilla Forums, Pligg Social Networking, Moodle, CMS Made Simple, Piwik, Simple Machines Forum (SMF), Zenphoto, StatusNet, LimeSurvey. MantisBT, PHProjekt, Pixelpost, phpMyFAQ, Textpattern,Open Web Analytics, Geeklog Blog, Nucleus Blog, Mambo CMS, Locked Area Lite Password Manager, Eblah Online Discussion Forum, TYPO3 Content Management System, Crafty Syntax Live Help, phpCoin Web Hosting Billing System, Revive Adserver, dotProject - Project Management, osTicket - Ticket System, Postcards,Form to Email with CAPTCHA, Custom 404 and 500 Error Pages, Search Engine, Free For All Links page, Banner Advertising System, Online Auction - Just Like eBay, Domain Name Checker, Coppermine Online Photo Gallery, Web Calendar, Web Survey, Gallery2, RoundCube Webmail, MediaWiki, SugarCRM
Looking forward to your recommendations.
I have used Drupal and build some sites with it. It's really powerful and there are a lot of free modules you can use. I'm not sure if there is a module to write collaborative content, but maybe you can tune the workflow module. Anyway if you need it you can code a new module by yourself, but only for the specific functionality you need.
Drupal is very modular and simple, obviously it has a learning curve but I think it is not very hard and it is well documented.

Technology stack for building a web application [closed]

Closed. This question is opinion-based. It is not currently accepting answers.
Want to improve this question? Update the question so it can be answered with facts and citations by editing this post.
Closed 9 years ago.
Improve this question
I'm an old C++ / algorithm guy who is making a first attempt at building a web application. I could use the community's help in making correct architectural / tech stack decisions. Here's what we're trying to do:
There is a simple relational model for the data. Most of the application is simple CRUD, with a high usability and variety of UI controls needed to match a fairly complex workflow a company follows. Often data from multiple tables need to be displayed / edited in one page - think of an editable dashboard that takes full advantage of large monitors (grids, drag-drop, tree displays of data, etc.). There is a bit of server-side text processing to be done as well, with Python being the company's processing language of choice.
The company wants to use open source where possible but wants the best UI controls/widgets and will pay for a commercial UI package. They want to make sure there is a good-sized community of developers who use all the technologies involved so they never have trouble finding someone else to maintain/enhance the app once it has been built. There will be under a dozen concurrent users.
I've read various questions/answers here, done some research on my own, and talked with a few colleagues who build web apps in an effort to decide on a proper technology stack for this application. Here is what I've come up with:
Sencha ExtJS for the UI
JSON for data transmission
Django as the web application framework on the server
Apache as the web server
MySQL as the RDBMS
Linux as the O/S
Github for the development repository
Webfaction for the app hosting (full shell access, long-run process support, Linux/Apache/MySQL/Django support, etc.)
Authentication via username/password in database
I'd love to get this tech stack validated by a few experienced people. If you've built high-usability CRUD-style web apps, please let me know what you think of my intended choices, and also please let me know if I am leaving anything important out.
Thanks!
Ron
It will come down to what you are comfortable with as you go along -- don't lock in your combination too early. I believe you've listed a very usable stack. I don't have any experience with Sencha ExtJS, but the rest is solid stuff. Django is a beautiful thing, and even if you don't have Python experience it is really easy (and fun!) to learn.
But as you go you will find some things don't feel right just because of your background, or because of the way it fits with other pieces of your stack, and may find something more suited to your situation.
I've actually come to the conclusion that these days, the pieces available for a web stack are so well evolved and so well explored that you (almost) can't go wrong -- what is far more important is the application design. People tend to get wrapped up in technology decisions and lose focus on the app itself.

I've made something that might be useful to the community. Now what? [closed]

Closed. This question needs to be more focused. It is not currently accepting answers.
Want to improve this question? Update the question so it focuses on one problem only by editing this post.
Closed 7 years ago.
Improve this question
If the specifics are important, I made a cruisecontrol.net publisher plugin that notifies a series of phone numbers via voice, announcing the current state of the build. It uses Twilio to do so.
I'd like to avoid getting hung up on the specifics of what it is I've made, as I have this question a lot, with a number of little hobby one-offs. What's the state of the art as far as making my hobby output available to the world at large?
There seem to be a lot of options for open-source project hosting, community features, and what role to take in all of this. It's a little bewildering. What I'm looking for is to put this out into the wild for free and basically take a hands-off approach from there. Is that realistic? Which project hosting service can I use for free to allow developers to at least download the code, report issues and collaborate with each other to improve the product?
What snags have you run into that could make me regret this decision? I'm interested in war stories, advice and guidance on making this little product available to the community where it can be used.
GoogleCode is a decent self repository for open source code. Very easy to use and contains the ability to create a wiki for the project. It also has a very easy to use and understand bug reporting/forum style issue management system.
One easy way to quickly get code on a publicly accessible host is github.com. Hosting is free if everything you host is available to the public. People would be able to grab latest, and notify you when they have updates they think are worth merging.
You would include documentation as a README.
CodeProject is cool, sites like that would allow more community discussion then what I've seen on Github.
If it's just a small example, or a small piece of code, you might think about just posting an ariticle on a site like "Code Project", or a blog.
There's a lot of overhead with releasing an open-source project, and if you want to be hands-off, you might have an easier time just writing an article, and providing a .zip to download the code example.
Take a look at SourceForge.net, which is a website where programmers can create their open-source projects. It allows you to add new users which may have different rights on your project (from just being a contributer to being a full administrator) and it features many tools which you might want to use for your project, such as a bug tracker and SVN.
CodePlex is another good place for posting projects. There's lot's of C#/.NET there. In addition to all the basic project hosting stuff one of the nice things about it is that they support a whole slew of source control clients.

Becoming a Web Designer: CMS, or by hand [closed]

Closed. This question needs to be more focused. It is not currently accepting answers.
Want to improve this question? Update the question so it focuses on one problem only by editing this post.
Closed 7 years ago.
Improve this question
I'm biting the bullet and becoming a Web Designer, there are just too many good opportunities out there. I'm a professional SW engineer, so I want approach this correctly. So far I'm fairly good at HTML/CSS/Javascript all completely by hand. I'm also good with jQuery and Django with mySql. I've made some cool sites but it takes TOO LONG if I want to do this for many sites.
Here is my question: Do I learn a CMS really well and use it (and be stuck with it) or do I spend that time developing some reusable HTML/CSS templates and do everything by hand?
So far my CMS experience is that there is overhead setting it up, and it you want a lot of customization you're doing CSS anyway.
If I go the CMS route -- which one?
What is the "best method" for Web Dev? I intend on creating a very diverse array of sites as well...
Thanks!!!
The future of web publishing is clearly in Content Management Systems for everything larger than a small personal site. People are not buying sites anymore for which they have to pay a professional every time a paragraph needs changing.
Make sure you know your HTML, CSS, and Javascript, but get familiar with one or more CMS's on the market, preferably one of the big ones that get you a big community, and the advantage of a widely known standard that it is easy to find people for. Learn how to customize it, how to build templates for it quickly and effectively.
One of the biggest flagships in enterprise-level CMS'es is certainly Drupal. From personal experience, I also know Joomla, but I'm not sure whether I'd recommend it to get started with - it tends to be a bit dirty on the code side sometimes. WordPress is successfully used as a CMS by many.
Look around on SO what systems people are happy with; if you want to get to know the concept of a certain CMS check out openSourceCMS who provide live demos of many CMS'es. There are also very robust commercial products out there that are better maintained than the open source projects.
There isn't a single correct answer for this IMHO. Basically, it comes down to:
Use the best tool for the job.
The best thing you can do for yourself is learn about what tools are available, and what they are capable of. Try to match each one to a scenario you think might be particularly suitable for a given solution.
You will find that if you invest a lot of time in learning something like Python / Django you will be able to create just about any site you can imagine, but then you might find that if all your client requires is a simple, mostly static company info site that something like Drupal might be more appropriate.
The baseline technologies like (X)HTML, JavaScript, CSS and SQL are used across all of them, so knowing these tools well in a generic context is also extremely valuable.
A truly well-equipped toolbelt is invaluable.
If you need a little number of pages, without any dynamics, render your site with your favorite language and numerous templates to html files and don't deal with anything but www-server.
Once you need a rather big site - use a tool which you already know well. (I using django and happy with it).
When a site is really huge - make your own CMS. But at first have a practice with tool like django. Until you know how it works - try not to deal with big projects at all.
I can advice to use statically typed language for anything, but i'm sure that you know benefits and caveats.
Python and Django is suitable almost for anything.
I am a Web Designer and recently I began using Wordpress. I've found it great so far, once I have my site ready in xHTML and CSS it only takes me a couple of hours to make the content editable.
I have also created about 3-5 themes my self, I've found creating Child Themes and using Themes like Twenty Ten as a parent, so I can use their functions etc.
I would highly suggest that you look into wordpress, especially if you want to speed up the process for creating websites.
Those two choices aren't mutually exclusive.
You should build reusable code regardless of which option you choose. With a CMS, there will already have some design decisions made for you of course, but I find myself building APIs and interfaces using Drupal all the time. In fact it's a measurement of quality.
There are also some frameworks that you might like too that will let you custom build and increase productivity. See The Zend PHP framework, Ruby on Rails, Kohana, Nanoc and the 960 CSS/HTML grid. You could say they are the best of both worlds!
If you are going to implement web sites for the general public, I'll go with Joomla. I managed to implement 9 websites in one year with this CMS. In my opinion, it is important to know PHP, HTML, CSS and Javascript pretty well before using Joomla (which you seem to know), or any other open source CMS for that matter. This way, you will be able to customize all aspects of the website (both frontend and backend) with ease. For example, when I don't find a plugin which does what I need, I just create the plugin myself.
However, if your aim is more on Web Applications rather than web sites, I'd go with ASP.NET and ExtJS, which seems to be today's trend for web applications since you will be combining the power of ASP.NET with the power of AJAX (ExtJs).
IMO, Python is more targeted for very large and complex projects (look at Google or Amazon).

Resources for getting started with web development? [closed]

Closed. This question does not meet Stack Overflow guidelines. It is not currently accepting answers.
We don’t allow questions seeking recommendations for books, tools, software libraries, and more. You can edit the question so it can be answered with facts and citations.
Closed 8 years ago.
Improve this question
Let's say I woke up today and wanted to create a clone of StackOverflow.com, and reap the financial windfall of millions $0.02 ad clicks. Where do I start?
My understanding of web technologies are:
HTML is what is ultimately displayed
CSS is a mechanism for making HTML look pleasing
ASP.NET lets you add functionality using .NET(?)
JavaScript does stuff
AJAX does asyncronous stuff
... and the list goes on!
To write a good website to I just need to buy seven books and read them all? Are Web 2.0 sites really the synergy of all these technologies?
Where does someone go to get started down the path to creating professional-looking web sites, and what steps are there along the way.
While I have built my knowledge largely based on using the internet to search out what I want to know (w3schools.com helped a lot, as did A List Apart), a few good books have helped me along the way, though they have been platform/language-specific, so I'll avoid mentioning them unless someone is curious. For me, at least, having a book open so that I don't have to resize windows or switch between them is very valuable.
The first part of your list is ok, but the last few items need tweaking. ASP.NET adds server-side functionality (for the most part) to your application. This lives outside of the browser and is thus quite powerful and easily shared with a variety of end-users.
The problem (some say) with server-side processing is that your application must make a new HTTP request when you ask for an action to be performed. So if you click on a link to a page that yields a new set of data, you don't get instant results. The page reloads, or loads a separate page.
Javascript solves this to a degree--it allows you to respond to user input instantaneously. Do you want to display the sum of two numbers when the user clicks a button? You can do it with Javascript.
The problem with Javascript is that it can't talk directly to databases, or explore your server's file system, or other stuff like that. It lives in the browser--period.
AJAX bridges the gap between your user's browser and your server. With AJAX, Javascript makes the HTTP request without refreshing your page or loading a new one. Javascript talks to a server-side script (not necessarily ASP, either--works with PHP, Rails, Coldfusion, etc.) and sends and receives information. And because Javascript isn't dependent on page loads, a quick, snappy AJAX script can almost give the feeling of a common desktop application, in which you don't have to wait for HTTP requests when performing simple actions on your application's data.
I think that this series of Opera Articles will give you a good idea of web standards and basic concepts of web development.
2014 update: the Opera docs were relocated in 2012 to this section of webplatform.org:
http://docs.webplatform.org/wiki/Main_Page
Ian's answer has a lot of weight. You could buy all those books and read them all and know nothing about web development. What you really need to do is start with something that is not nearly as big as Stack Overflow. Start with your personal site. Read some web dev/css articles on a list apart. Learn about doctypes and why to use them. Add some css and change the colors around. Go over to quirksmode and peruse the site. Add some js. Follow some links on Crockfords site. You will probably stumble across his awesome video lectures, which you should watch. Then after that go back to all the js that you wrote and rewrite it. Then pick a server side language that you want to learn. Python is pretty easy, but it really doesn't matter what you pick. Then come back and integrate all those together in your site. At this point you will at least be getting started with web development and will have worked with several different technologies.
EDIT: I forgot to mention. READ BOOKS.
Many developers that I have worked with in the past have gotten through their career without really advancing after a certain point. I could be totally wrong, but I attribute it to not reading enough books and relying on using their same bad code over and over.
You could go out and buy a bunch of books and start reading them and quickly get overwhelmed in the seemingly massive learning curve it takes to go from nowhere, which is where it appears you are, to a rich internet entrepreneur, which is where you want to be.
Alternatively, and what I would suggest is, you could define a problem you want to solve, and then go about finding the solution to that problem. Start with something small. "I have a problem: I don't have a web site about myself.". Define what you need to do to solve that problem, learn the basics, and do it. Then, define a new problem, which probably relies on the solution to the first problem, find what you need to do, and do it.
This is how all technology professionals evolve. My first website was a personal site with nothing but text. Then I added some jokes and some movie quotes. Then I got tired of man-handling all the updates to I learned how to put them into a database and retrieve them from the database for display. It goes on and on.
Call me when you've got more money from your financial windfall than you know what to do with.
If you really just want to jump in with both feet, I would suggest looking at ColdFusion from Adobe. The developer edition is free and runs on windows, os x and linux. The documentation is authoritative and extensive, there is a very active developer community and only a few books you might want to dig into. The definitive guide is a series of books that can be found on Amazon
The nice thing about ColdFusion is that you can use it as a stepping stone to other languages and remain productive along the way. You can even mix it together with Java since it is itself written in java. There are also lots of goodies built in that you would have to scour the web for or pay more for in other languages. Things like full text indexing, graphing, server monitoring, ajax based controls, flash/flex integration, asynch os calls, etc.
You even have the choice of building object oriented code or procedural code, although some people would not count that as a benefit. Those people rarely agree on which style should win, though.
Cheers!
I think sitepoint is the best resource for learning best practices in web development. They have great articles, good references, and probably one of the best forums. However the people there can be a bit grumpy. ;)
If you are a real nerd, reading the specs for HTML 5 and CSS is also a good way to learn.
I'm with Ian on this one. Reading books is all well and good, but nothing beats getting stuck in. I actually started with a Dummies Guide to ASP (that'd be "classic" ASP), back in 1999.
If I was going to start from scratch today I'd be looking at something that covered a full stack solution, whether Apache/PHP/MySQL, RoR or whatever.
ATM I have no experience of Rails, but it might be a pretty good place to start as it includes a lot of stuff that you'd have to figure out early on otherwise (integration with a Scriptaculous, a JS framework) - you can always learn what going on under the hood at a later date.
.NET is always an option, and if you're comfortable with Visual Studio it may be the way to go, but it's not the easiest thing to pick up otherwise.
If you know a bit of HTML but are basically new to server-side programming you might look at ColdFusion. It's actually extremely powerful and like Rails includes lots of "out of the box" benefits. There's a Swiss company called Railo who are currently in the process of releasing an Open Source ColdFusion engine that is affiliated with JBoss.
Last and not least - don't forget databases! Sooner or later you'll need to get to grips with some pretty serious SQL...
CFML (aka "ColdFusion" even though that's really an Adobe product, not the language) is definitely easy to learn, and if you want FOSS for CFML, in addition to Railo you can use Open BlueDragon which is a GPL CFML engine.
Designing with Web Standards is a great first read!
http://www.zeldman.com/dwws/
I would recommend this book:
http://www.amazon.com/MCTS-Self-Paced-Training-Exam-70-528/dp/0735623341/ref=sr_1_1?ie=UTF8&s=books&qid=1218830714&sr=8-1
I have just read it to take the exam, and although I knew the web theory part, I found it to be of great value.
This of course is a ASP.NET specific book, but that is what I would recommend learning anyways.
After you learn all the ASP.NET stuff, I would suggest reading up on JQuery.
Happy coding :)