I have a project at work where I need to create a management information reporting dashboard that pulls data from various business applications.
I will be using REST API, as well as SQL for different systems. I was wondering if the best way to create a UI for this would be web based?
I am also learning Python and wonder if it could be a good opportunity to create a software solution to this - or is that over engineering the situation? If a web based UI will be suitable?
What other options do you have, than going for web based UI ? But looks like, you are creating a whole new system, so a lot of the decisions depend on your specific requirements...
Related
I'm a data scientist, and I make apps using python. Where I make a lot of connections with databases, build and deploy my code on the cloud and I use models training and visualization.
My question is:
Is Django useful for making non-web apps?
if not are they any other frameworks? (similar to spring-boot for java)
Best regards
Django is a web framework which comes with many preinstalled apps. This will make your application bulkier than it is required.
For your usecase, you need not to use any frameworks. Just code it in python and you can use the available library to perform db operations.
If you are deploying your app on the cloud, and want expose some endpoints to trigger any of your internal functions, go with Flask framework. It is a light weight micro web framework
I would contrast the first answer and say absolutely you can use Django with no intentions of building a front end. The ORM is so powerful and easy to use along with the out-of-the-box signaling system among many other features. In my opinion a little extra "bulk" is worth the tools you have at your disposal with it. And of course you always have the option to add the front end later if you like.
Background: I have a desktop app that I've written in Python27x that uses wxPython for the UI and requests with xml.etree.ElementTree to retrieve open data from a RESTful service and present the data in meaningful ways to the user.
I am currently re-writing my app using PySide. I am fairly certain that I can present my data-candy in HTML5 and I would eventually like to provide a web-app using web2py and JavaScript.
The PySide and web2py versions both need to support:
aquiring a lock on a Throttle object that I've made to handle the fair-usage policy of the service.
presenting the analyzed data in tables with links or buttons for retrieving or donwloading more related data.
presenting lists of related data and highlighting groups of items on mouse-over of any member of the group.
presenting text documents and providing automatic searching / highlighting of keywords / part-of-speech tagging using NLTK.
providing basic graphs and charts of various stats on the data.
Question: Given what I've told you about my app, and assuming web2py and HTML5 can meet my user-interface / presentation needs, what steps can I take / widgets should I use in making my PySide desktop app to maximize re-use when porting over to web2py? What should I be sure to avoid when writing the desktop version?
You need to separate your data and data-processing from the user interface. Qt (and thus PySide) has a very strong focus on this Model-View approach (see e.g. http://qt-project.org/doc/qt-4.8/modelview.html), and provides models to organize your data, and views to present the data. Within Qt, this approach allows to easily use multiple views on the same data sets, without having to worry about how to get the data in the view.
Admittedly, the Qt models take some time to get used to, but the aforementioned tutorial should give you some pointers and references to get you started. In your case, I would go for the following approach:
Find/extend a suitable Qt model to manage your data
Use this data with standard/custom views in your PySide application
Develop web2py-based view to present the data in your webapp
I'm not familiar with web2py, so I can't assess how hard/easy this last step would be. However, I can recommend to invest some time (if you have it) in getting to know the Qt Model-View framework, as it can save you huge amounts of time in the future (at least, in my experience).
In my opinion, you may be over-thinking this.
Basically you will have two methods of presenting data to the end-user;
1) Via a GUI
2) Via your HTML5-candy
Surely the limiting factor will be whatever limitations (if any), web2py/HTML5 place on presenting the data?
If I were writing such an app, which used both PySide and web2py to present the same data but using their respective methods (gui, web), I'd probably want to abstract the data to be presented in such a way that you can feed the same stream into either the GUI function(s) or the Web function(s), with each taking that in and using their respective methods to present the data.
Another alternative I can think of, is embedding a web view in your GUI presentation. Perhaps you can then dispense with a lot of concern of what widgets to use/avoid, merely by using your html5-candy in the embedded web view?
We have a new client who would like us to develop a custom CRM for their employees.
The main features they would like are:
Ability to save forms
Send reminders to employees by email and text messages
Basic charting capabilities
Automatic backup online
So as we see, saving data, and then reminding the employees are the most important functions of this CRM.
Now my main question is -- I've been meaning to learn Python since a while. I think this CRM should be doable by a person who is learning Python. I have good experience in PHP, jQuery and a little bit of .NET
So does anyone here think that I should go ahead with Python as a platform for this project ? Or should I go for any other platform, which might have features that Python won't provide me ?
I wouldn't re-invent the wheel, if I were you. Instead I will aim to leverage one of the existing open source CRMs to build the system. A well known open source CRM is SugarCRM. There are more available, most of them built with PHP, so your PHP experience will be useful.
I'm particularly fond of the way the following SAAS companies have enabled application development through-the-web. Many of them allow, through-the-web definition of tables, views, relationships, forms, dashboards, email-notifications, charts, calendars, cross-tabulations, and role based security. They are:
DabbleDB
Zoho
TeamDesk
InfoDome
Caspio
Other Interesting PAAS
TIBCOSilver
I've also found these open source products that offer through-the-web application development. These tend to use Javascript components that interface via a REST interface. The Javascripts components can typically be switched into "development" mode and configured to have custom data sources, respond to events, and be styled.
WaveMaker (Open Source Java)
SmartGWTPro
AribaWeb
Are there any other through-the-web application development frameworks? I'm especially looking for the closest thing offered by Ruby or Python?
Depends on what you mean with development.
Zope 2 is the original through-the-web (I'll say TTW from now on) development platform, and has done TTW dev since 1998 or so. It's in Python and is awesome in many ways. The TTW development is not one of those ways. :)
Creating forms and schemas, and editing the workflow etc TTW is a great idea. Calling it development is, well, not so great. :) Zope lets you write Python code. That is real TTW development, and it's a bad idea for many reasons.
You can't use a proper editor.
You can't use a debugger.
You can't use a real version control system.
etc etc for ever.
Now big, advanced deep configuration TTW, including schemas and workflows, yes. TTW Development, no. Bad idea.
The excellent CMS Plone, which runs on Zope 2, is moving away from TTW development (although it's still possible and supported in Plone 4, just frowned upon), but still allows TTW configaration of large parts, including workflow, forms and with Dexterity (which is it's new content type framework) also content type Schemas.
Looking into Netzke http://demo.netzke.org/
Check out Zenbase platform as well.
It's web-based platform for non-coders to create data-driven web apps using a simple GUI.
Some of it's features:
Built-in cloud CRUD-ready database solution based on phpGrid.
User management - role and table-based permissions allow for strict data control.
Data imports of CSV files to build new tables or add data to existing ones.
Interactive and easy to generate reports.
If you are looking for tools allowing you to create a software without coding, you have different tool categories:
"low code" platforms (or workflow platforms), such as SalesForce, Appian/Mendix/OutSystems...
online database generators, such as DBFace
code generators, such as PHPMaker -windows tool- (i'm using it, very productive !) or ScriptCase (web based)
and obviously dashboarding tools, such as KlipFolio, InfoCaptor (saas tool, but can be downloaded on your desktop/server)
In OpenSource :
you have the CMS Drupal, allowing you to create you data structure, then display listings (with module "Views") and forms...
You can create a complete Web based Software with Drupal and his tons of modules...
You can install and test Drupal online here : https://simplytest.me/
I'm doing a tech review and looking at AMF integration with various backends (Rails, Python, Grails etc).
Lots of options are out there, question is, what do the Adobe products do (BlazeDS etc) that something like RubyAMF / pyAMF don't?
Other than NIO (RTMP) channels, LCDS include also the "data management" features.
Using this feature, you basically implement, in an ActionScript class, a CRUD-like interface defined by LCDS, and you get:
automatic progressive list loading (large lists/datagrids loads while scrolling)
automatic crud management (you get object locally in flash, modify it, send it back and DB will get updated automatically)
feature for conflict resolution (if multiple user try to updated the same record at the same time)
if I remember well, also some improved integration with the LiveCycle ES workflow engine
IMO, it can be very fast to develop this way, but only if you have only basic requirements and a simple architecture (forget SOA, that otherwise works so well with Flex). I'm fine with BlazeDS.
The data management features for LCDS described here are certainly valid, however I believe they do not let you actually develop a solution faster. A developer still has to write ALL the data access code, query execution, extracting data from datareaders into value objects. ALL of this has been solved a dozen of times with code generators. For instance the data management approach in WebORB for Java (much like in WebORB for .NET and PHP) is based on code generation which creates code for both client side AND server-side. You get all the ActionScript APIs out of the code generator to do full CRUD.
Additionally, WebORB provides video streaming and real-time messaging features and goes WAY beyond what both BlazeDS and LCDS offer combined, especially considering that the product is free. Just google it.
Adobe has two products: Livecycle Data Services ES (LCDS) and BlazeDS. BlazeDS contains a subset of LCDS features and was made open source. Unfortunately NIO channels (RTMP NIO/HTTP) and the DataManagement features are implemented only in LCDS, not BlazeDS.
BlazeDS can be used only to integrate Flex with Java backend. It offers not only remoting services using AMF serialization (as RubyAMF) but also messaging and collaboration features - take a look at this link (http://livedocs.adobe.com/blazeds/1/blazeds_devguide/help.html?content=lcoverview_3.html). Also I suppose that the support is better compared with RubyAMF/pyAMF.
If your backend is JAVA and you want to use only a free product you can also use GraniteDS or WebORB (BlazeDS competitors)
Good question. I'm not a ruby guy (i use java with flex), but what I believe differentiates blazeds vs commercial livecycle ds is
Streaming protocol support (rtmp) - competition for comet and such, delivering video
Some advanced stuff for hibernate detached objects and large resultset caching that I don't fully understand or need
support?
Might be others but those are the ones I know off the top of my head.