Using GWT Places and Activities or not in very large project - gwt

Imagine a very big gwt project of application. This is just a some form of scientific environment on the web. So for each user it stores the state of app and there is nothing related to browser history or bookmarks. History is something that can't even be applied to application itself (like CAD systems or whatever, having no intuitive "back button"). We are considering whether to use or not modern Activities And Places along with MVP. What are the pro and cons of Activities and Places if history management doesn't have sense? Could this framework give some advantages in code maintaining and code's modularity comparing to traditional MVP+DI without any Places and Activities? Taking in account that app is going to provide and API for some form of plugins

Given that Places are only about navigation within the app (not necessarily tied to browser history, but still very similar), and Activities build on Places a a way to modularize and decouple building blocks of your UI, with a lifecycle tied to the Places, then I don't see any benefit in using them in your case.
N.B.: Activities and Places have absolutely nothing to do with MVP, it's all about navigation, as the official documentation says:
GWT 2.1 introduced a built-in framework for browser history management. The Activities and Places framework allows you to create bookmarkable URLs within your application, thus allowing the browser's back button and bookmarks to work as users expect. It builds on GWT's history mechanism and may be used in conjunction with MVP development, though not required.
Source:
https://developers.google.com/web-toolkit/doc/latest/DevGuideMvpActivitiesAndPlaces

Related

Outsourcing web content versus maintaining local content

I am developing a full web application...
I am considering using prismic.io to outsource some web content which I will query through graphQL. But I would store personal information about users in a local instance of mongoDB.
Whats the long term benefit? If I can just store all of the content myself through an instance of mongodb which holds it all for me.
This is mostly my opinion, if you're a developer working alone or just with other developers, and are only looking for a place to store data, then you're probably better off not using a CMS. One of a CMSs main purposes is to extend the ability to significantly modify an application to non-technical individuals. For example, building a website for a local restaurant, and wanting to allow them to change their menu, without you having to build out a UI to enable it. With a CMS they'd be able to easily change the text and other content on their platform, whereas interacting with a mongo backend might be a bit less straightforward for them. For a more industrial example, say you have a marketing team, who need to run A/B tests to determine the optimal content for a site, they can perform their tests, and have their changes reflect into a template you set up, without them (and you if you set it up cleverly) having to write any extra code. There are more advantages and disadvantages to using a CMS, but I think accessibility is the main reason reason to consider one, especially long-term.

Evaluate Asp.Net Enterprise CMS (Sitefinity vs N2CMS)

We are looking for a Asp.net CMS to integrate in our existing Enterprise-Webapplication. Some requirements:
Full integration in Visual Studio 2010 and our existing Application (so no Umbraco)
Common ASP.NET Web Forms Developing practices (Global.asax, Masterpages, User-/Custom-Controls)
Security (FormsAuthentication, custom Membership-/RoleProvider)
Very flexible and extendable (good API)
Lightweights CMS with good performance (thousands of simultaneous requests)
Easy content editing
At the moment we are looking at Sitefinity and N2CMS.
I really like the N2CMS approach (Integrate CMS engine in application) but is it mature enough for "real" usage scenarios? Is there another alternative to N2CMS?
Yes, N2 is mature. Company I work for is using it for more than three years now for various projects, and it is still our platform of choice. Best thing about it is that it is not CM System in a classic manner but rather CM Framework with several layers, meaning you have many things implemented, but they are not part of the core. As a result, you can change almost anything that is not usually changeable in other CMSes.
Also, whole architecture is organized in such a way that you can easily override almost any system behavior with your own implementation. Example? Imagine you reached 100s of news entries under News folder in site tree, and you decide to completely hide them from site tree, instead implementing plugin for manipulating them. Solution? Attribute-decorated class with 10 lines of code for hiding items in a tree based on your custom rule expressed in C# code.
I think N2 is pretty polished product and that you can go for it without too much worries.
We too are using N2. We've used it for a campaign site and now we are building our companies corporate website and the 20-or-so country specific subsidiary sites.
It is very fast to develop on (if you are a .net programmer it is a treat, an html-guy might find it difficult). Extremely flexible and extensible. And so far it seems to be very mature and stable. It has less features in terms of workflow-management than e.g. sitecore, but then again most customers put a lot of emphasis on those things, when they evaluate options, but end up not using them. So I don't think that is a problem.
The problem we are having is that it doesn't properly support preview, so website editors cannot preview their changes before publishing them. It is supposed to be done at some point, but there is no word on when.
Full disclosure, I work for Telerik and I'm the Sitefinity Evangelist.
Full integration in Visual Studio 2010 and our existing Application (so no Umbraco)
This is a difficult item to claim with a blanket statement.
I don't know much about your existing application. Our customers have accomplished a lot of Sitefinity integrations with various applications. This could be done through web services, custom controls or simply accounting for external URL's in Sitefinity's sitemap. Feel free to post to our Sitefinity forums for recommendations for your specific scenario.
Regarding Visual Studio integration, Sitefinity includes Telerik RadControls and OpenAccess ORM. We also try to align ourselves closely with traditional ASP.NET technologies.
Common ASP.NET Web Forms Developing practices
Sitefinity Templates = ASP.NET Master Pages
Editable CMS regions = ContentPlaceHolders
Sitefinity Widgets = ASP.NET Controls
Sitefinity Themes = ASP.NET Themes
We make the marketing claim "if you know ASP.NET, then you know Sitefinity". However, realistically all products comes with some learning curve. As much as possible we try to align ourselves with the experience ASP.NET developers already have.
Security (FormsAuthentication, custom Membership-/RoleProvider)
Sitefinity's authentication is based on traditional ASP.NET Membership & Role providers. We've included a couple (Sitefinity & Active Directory) but you can extend with your own.
Very flexible and extendable (good API)
Our API is LINQ enabled and we also have a Fluent API. We also have a full RESTful web service API.
Lightweight CMS with good performance (thousands of simultaneous requests)
Our own Telerik web sites run on Sitefinity, and many of our customers support web sites that handle a large volume of traffic.
However, I'm not sure what constitutes "lightweight". Many CMS's have little overhead, but also do very little. We've tried to deliver a lot of features and end-user friendliness with Sitefinity. This comes at the cost of some overhead.
Managing the balance between a CMS that "helps you" and "gets out of your way" is a constant challenge. The best I can promise is that we're aware of the challenge and we're doing our best to deliver effective results.
Easy content editing
Judge for yourself. Even better, download the product and let your content editors experiment. We welcome the comparison. Over & over again, this becomes our differentiator.
--
Hopefully this post doesn't sound like a lot of evangelist BS. I've tried to be accurate with my answers. Best of luck with your project.

Cakephp and facebook

I have a site built with cakephp (1.3), where users can manage lists of items.
I now want to develop a facebook app that will work with the data of my web-based site.
The facebok-app is to replicate many of the web-site's functionality (basic CRUD and more), so I would like to reuse as much code as I can from my current cake- just use a different layout, or maybe change the views.
My question is: from a software design perspective, what's the best way to go about that? Some ideas I had in mind are:
Add branching code in my actions to behave differently if it's running as facebook iframe
externalize lots of action-logic into libs, and create different actions for the facebook app which will reuse those libs, as well as views
Would love if you can come up with other ideas.
Rather than munging your core functions, could you not develop a generic 'hook' in system and then develop your facebook functionality in a separate API to take advantage of the hooks, this would be more scalable long term and keep both apps logic separate.

What is the most flexible Open Source Content Management System?

Which CMS is the most flexible and/or easily modifiable in the following ways:
Have multiple clients access the CMS with multiple users per client. And each client can control multiple sites.
Control the layout of created pages based on certain criteria. Criteria such as which
section/sub-section the user would like to put the page in. e.g. - if the section for the page chosen is Clothing->Womens->Shorts then only allow certain layouts to be chosen.
It would go something like this:
- The user creates a new page within the CMS
- They choose the section or subsection of the page
- Based on that selection, we control if they are allowed to use the chosen layout/template.
Reason for this is that we want to control the UI of the top level pages (where the user enters the site from). And, have less control on the lower nested pages.
2 very flexible Php based CMS frameworks are Drupal and Joomla. Both are built upon plugin architectures where you can customize you application by downloading, installing and configuring the appropriate plugins for things like blogs, forums, search indexing, RSS, storing & playing video etc...
Drupal refers to their plugins as Modules. There are thousands of modules available (over 700 in the Utilities category alone). Warning - the modules are version dependant and not all modules have been upgraded to run in the current production versions of Drupal so pay attention to the version support.
Joomla refers to their plugins as Extensions. At time of posting, they had over 4500 extensions available. I haven't used Joomla myself so I can't talk to it's quality or ease of use, but it does seem to be another very popular, flexible product.
I just found this post that compares 10 Java based opensource cms products. I don't know if you have a particular technology in mind, but if Java's your thing one of these might help you out.
http://blog.taragana.com/index.php/archive/top-10-java-content-management-software/
Have a look at Jahia (www.jahia.com) - java open source based cms. The features you are describing are indeed typical of "site factories" which is a main business case for that CMS.
read http://www.jahia.com/jahia/webdav/site/jahiacom/shared/products/Jahia%20Sitefactory_WhitePaper.pdf and test yourself the features with the online demo.
I'm using Jahia with Alfresco as document repository using Communitiy release (without Alfresco connector, not too easy but it's possible using REST).
It's really a good solution because with Jahia you could add some Java Spring dynamic modules.
i think Wordpress is one of the best content management system. that provides much better flexibility as compared to other CMS.

How do you CM an application with managed content

We have a web application which contains a bunch of content that the system operator can change (e.g. news and events). Occasionally we publish new versions of the software. The software is being tagged and stored in subversion. However, I'm a bit torn on how to best version control the content that may be changed independently. What are some mechanisms that people use to make sure that content is stored and versioned in a way that the site can be recreated or at the very least version controlled?
When you identify two set of files which have their own life cycle (software files on one side, "news and events" on the other, you know that:
you can not versionned them together at the same time
you should not put the same label
You need to save the "news and event" files separatly (either in the VCS or in a DB like Ian Jacobs suggests, or in a CMS - Content Management system), and find a way to link the tow together (an id, a timestamp, a meta-label, ...)
Do not forget you are not only talking about two different set of files in term of life cycle, but also about different set of files in term of their very natures:
Consider the terminology introduced in this SO question "Is asset management a superset of source control" by S.Lott
software files: Infrastructure information, that is "representing the processing of the enterprise information asset". Your code is part of that asset and is managed by a VCS (Version Control System), as part of the Configuration management discipline.
"news and events": Enterprise Information, that is data (not processing); this is often split between Content Managers and Relational Databases.
So not everything should end up in Subversion.
Keep everything in the DB, and give every transaction to the DB a timestamp. that way you can keep standard DB backups and load the site content at whatever date you want if the worst happens.
I suppose part of the answer depends on what CMS you're using, and how your web app is designed, but in general, I'd regard data such as news items or events as "content". In other words, it's not part of your application - it's the data which your application processes.
Of course, there will be versioning issues between your CMS code and your application code. You could manage this by defining the interface between the two. Personally, I'd publish the data to the web app as XML, which gives you the possibility of using XML schema to define exactly what the CMS is required to produce, and what the web app should expect to process.
This ought to mean that most changes in the web app can be made without a corresponding alteration in the rendering of the data. When functionality changes require this, you can create a new version of the schema and continue to make progress. In this scenario, I'd check the schema in with the web app code, but YMMV.
It isn't easy, and it gets more complicated again if you need additional data fields in your CMS. Expect to plan for a fairly complex release process (also depending on how complex your Dev-Test-Acceptance-Production scenario is.)
If you aren't using a CMS, then you should consider it. (Of course, if the operation is very small, it may still fall into the category where doing it by hand is acceptable.) Simply putting raw data into a versioning system doesn't solve the problem - you need to be able to control the format in which your data is published to the web app. Almost certainly this format should be something intended for consumption by software, and therefore not usually suitable for hand-editing by the kind of people who write news items or events.