As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center for guidance.
Closed 10 years ago.
At this moment, all of our reports are currently written in stored procedures. We want to start moving this away from a SQL platform and rather to focus most of the logic in .NET code. Reasons include the use of our ORM entities, ease of debugging, parallel processing, more unification with business logic, etc.
The problem we face is that by moving our report logic into .NET code, we cannot deploy support fixes as easily as running a script on our production environment. Releasing binaries means that the whole business has to stop using our application, which is almost impossible during office hours.
One solution is to separate each report into a new project and release just that DLL. The problem with this is that we have over 500 reports. Maintaining that will be a nightmare.
Has anyone experienced something similar or have any other solutions to this problem?
Thanks,
Dave
Why not use Reporting Services? It is made for this! You can even train people in the business (non-devs) to create reports for you and publish them. There are so many features that users can just leverage. Authentication/Authorization, subscribe, export (PDF, Excel, Word), etc.
I wouldn't invest in rebuilding Reporting Services if I was you. I always stir away from writing reports as part of you application or in 'code'.
If you really, really want to do this (which I totally think you shouldn't do) then I would develop a separate service that generates reports (on a separate end-point) that you can call from your main application. Put a queue in the middle that stores 'report requests' when you need to update and the requests can be served after a restart.
Other option would be to go with dynamically loading assemblies. Let a filewatcher watch a folder and as soon as there is a new dll load it dynamically. Unloading is more difficult. You could restart the service when it is not so busy to get remove the old reports from memory or you need to create separate appdomains that you can unload.
A lot of options, but again, you will be wasting time by building and testing a custom report framework. I would go for plain SQL, even if you really like C#, this way you can hire a BI person that can just create reports instead of a dev.
I agree with a lot #bart's answer. My first reaction is that this seems like a unneeded reinvention.
However if you do need .net code and and convenience of declarative code, then why not use a DLR based language like iron python?
We've stored iron python in the db and loaded it on demand. Once jitted it's no different than any non dlr based code, deploying fixes was a dream.
Related
As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center for guidance.
Closed 10 years ago.
I work at a small startup as a Data Scientist, and I'm looking for ways to make my analysis a bit more visible/useful to the organization. I'd like to be able to put up a simple web service which allows internal users to run my scripts remotely. They should be able to input a few parameters via a very simple UI, and they should have the option to have the results appear in the browser window (after a possibly long wait), or have them emailed. Results may be a few pdf figures, and they may be Excel spreadsheets (maybe more exotic in the future, but this is it for now).
The scripts are going to be all in Python, which will handle the analysis.
So, I'd like to know what the pros and cons are of using C#/WCF vs. something like Django or Python. I have significant experience in C# working in the Client-side code base here, but I have much less experience with WCF. All of my analysis work is done in Python (and R, to a lesser extent). The main goal is to not take all of my time building a fancy web service/UI---the front end just has to be friendly enough to not intimidate the marketing people. I don't have to worry about encryption, the server will be behind our firewall. I'm pretty platform agnostic, but I think the servers are all Windows based, if this helps.
Thanks in advance.
For extra credit, how does your answer change if some of my scripts are in F#?
You might consider using the Django web framework. You could set up a small app with your python scripts as different views. https://www.djangoproject.com/
And if you don't want to put that much effort into creating a friendly UI you could use twitter bootstrap. http://twitter.github.com/bootstrap/
Then just run the app internally to gather and display data either via HTTP GETs or via e-mail.
edit: I'm sorry I did not read carefully "pros and cons are of using C#/WCF vs. something like Django". I recently made a Django app and it was fairly straight forward.
As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center for guidance.
Closed 10 years ago.
I'm looking for a lightweight, easy to setup CI server that I can run on my laptop along with Visual Studio & Resharper. I'm obviously looking at all the big names like CruiseControl, TeamCity etc etc but the biggest consideration to me is ease of setup and to a lesser extent memory footprint.
Edit: I'd also like some suggestions for other solutions outside the big 2/3...
Edit: I'm about to accept an answer if no one else has anything to add?
I use TeamCity, and is really, really easy to setup and get it running.
Check the Demos and Documentation. You will have it up and running in less than one hour!
I have just started to use CruiseControl.NET.
With no prior knowlege I was able to get it up and running with a single test project using MSBuild, MSTest and Team Foundation Server (i.e. CodePlex) in a couple of hours. I posted a bunch of links to useful resources here Devsta 2008 Day 0: Source Control and CI
I can't help on memory footprint as my project was pretty small. I can tell you that while it's not doing anything (i.e. most of the time) it is using ~5MB on my system. In fact the Tray Icon notifier that comes with it takes up more memory than the service at about 6MB. That goes up when it does stuff of course.
Hudson (update: Jenkins 1) is extremely easy to set up, and managing jobs (projects) in it is certainly a breeze compared to e.g. CruiseControl. It works great for a solo developer too.
For more, see this answer about using Hudson specifically in a .NET environment.
(1 Background info about Hudson/Jenkins situation: How to choose between Hudson and Jenkins?)
For ease of use, I have found CruiseControl.Net to be very easy. Now when it comes to memory footprint, I'd have to say it does chew up my system. That is that a development box that also hosts CruiseControl.Net is not a good way to go. Unfortunately that is all I had access to when I used it in the past.
I can't speak to the other tools.
I use CI as a Solo Developer.
When I merge my dev branch into my test branch, CI grabs the code, compiles it, modifies the connection string, changes a couple of app settings, and copies it up via Beyond Compare to my test site for people testers to have a look at.
As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center for guidance.
Closed 10 years ago.
Basically I have to choose a project methodology.
The components are not big (we develop components mainly for SAP connecting), however the team is rather big , dislocated and and very unorganized.
Besides how big is the team
which other questions should be taken into consideration?
Thank you
I've made very good experiences with answering these questions first:
How does the team prioritize work?
(I would recommend putting todos into a sequence building a backlog)
How does the team track what needs to be done?
(I would recommend breaking things down step-by-step into User Stories and track them using a tool like PivotalTracker)
How can you make sure the team is self-organizing?
(Let the team pull work from the backlog, run daily status meetings and a retrospective every couple of weeks)
How can you optimize how fast features get delivered in optimal quality? (This way of thinking should replace the idea of maximizing capacity utilization)
How can you make the work visible? (Visibility builds trust and momentum - you can start collecting metrics and putting up a screen showing all kinds of graphs)
One very useful question to assist in choosing any sort of method is "What projects can this not help me with?" It can be very difficult to obtain an answer; the usual way that supporters of a particular method respond is "of course method X can help you with any project." Thus they are saying either that all projects are the same, which is obviously not the case; or that they don't know what are the limitations of their method, and so will not be able to recognise when their method is not appropriate.
You say your teams are fairly unorganised. One of the best ways of introducing any new method is to provide tools - even very basic tools - that make it easier to follow the standards than not. An example of this was trying to improve the quality of development reports in a very large organisation - we provided a number of word processing templates, that made it easier to write a report using the templates (and hence the standards) than to write the report from scratch.
Personal note on my choice of language: I have worked with software development methods for many years, and to me "methodology" is the study and comparison of different methods. A particular way of, for example, managing a project, is a method, not a methodology.
I guess this really depends on a number of factors, for instance some contracts require you to use PRINCE project management which is rather complex.
If you dont have any external factors regarding the methodology you choose I would just do a bit of research and see which you think fits your team best.
I havent had chance to use Agile yet although I took a course on it and I liked what I heard, it seemed fairly straightforward which is a bonus.
One thing to remember though is you dont have to stick to one methodology if you find something isnt working for you then make changes.
Questions I would consider though would be the length of the project, Size of the team, Are the team each working on individual parts of the project or are there multiple people working on the same area, Time it will take to implement a methodology, Any costs involved?, Any training involved?
As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center for guidance.
Closed 9 years ago.
What mainstream frameworks, patterns, and tools would you choose to develop two projects in parallel, one in C#, one in Java, in order to minimize the total effort. (Disregard the obvious cases of interchangeable or equivalent tools, like SCC, Unit Testing, etc. Also assume generic broad RDBMS support.)
"Mainstream" means the market in general won't disregard the result because it uses something untested they've never heard of, or arcane skills are required to implement and support it.
Assume a broadly applicable tactical business appication.
db4o uses an in house tool called sharpen to maintain one source repository (Java I think) and convert it automatically to C#.
As they say in thier blog post:
Before you start dreaming: sharpen is not a "magic wand". Don't expect to feed it an arbitrary Java app and receive a running .NET version at the push of a button. The translation process will require some design compromises on the Java side, and parts of the .NET code still have to be hand crafted and integrated into the converted sources.
However it is still quite a cool project. Also, I think it would work best for a new project. Released under the GPL but you have to register with developer.db4o.com to download it.
Edit: Here is an example blog post too.
That's tough. While there are some good libraries available ported to both platforms, when it comes to frameworks, there doesn't seem to be much commonality.
The drift I've gotten here on SO is that there isn't much deviation from the company line in the .NET world. It would be as if everyone in Java used only EJB, JSF, and JNDI, and never came up with Guice, Struts, or Hibernate.
If I could, I'd take a different tack: instead of developing the same system in parallel, develop one system, and put a wrapper around it to support the other platforms. The drawback to this is that the other platforms are doomed to lag behind the primary, e.g. Mono. This drawback also applies to ports of some libraries themselves, like Spring.net or Guice.net.
Or you could invent your own Wasabi.
I've read good things about Mainsoft applications, although I never had to use it myself.
Why would you want to develop for Java and C# in parallel?
You could just use Java and J#. The only problem is, that J# is stuck at Java 1.4 level, so you have two choices:
don't use this fancy stuff like enums, generics, for-each
use a tool like retroweaver to convert 1.5 back to 1.4
I've just finished building a mid-size application (about 80 classes / 30.000 lines) that runs nicely on Java and .NET this way.
As far as I know, the Java Classes compiled by J# are .NET-bytecode that is like any other .NET-bytecode, and can be used in C#. But you don't have to code your core classes twice.
Depending on the scale of the project I would suggest the following technologies and approaches:
Since UI in Java and C# are so different I would build an XML representation of UI for both projects... And then decide on one of two options
a) Static and single generatios of the source of UI classes for both projects on the basis of the common XML (this might be somehow integrated with your building process so that the whole process would ignite automatically)
b) Dynamic generation of UI in both cases (probably harder to realise)
To make the architecture of both project similar I would use Spring and Spring.NET
Also to draw as many similiarities I would decide on NHibernate and Hibernate
As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center for guidance.
Closed 10 years ago.
I need a tool that handle both on-screen and printed reports, via my C# application.
I'm looking for simple, standard and powerful.
I need to be able to give the user the ability to select which columns to display, formatting, etc... with my own GUI and dynamically build the report based upon their choices. Crystal does not fit the bill here because the columns cannot be added on the fly (and the column widths can not be adjusted on the fly).
I'm thinking of using HTML with the WebBrowser control in my app, but I will have very little control over printing and print preview.
Another option is go to .NET 3.5 (I'm using 2.0) and use XAML with Flow Documents.
What would you use?
We use SQL reporting services. HTML reports have their place but you dont get very much controlling over formatting.
SQL reporting services summary:
Advantages:
Basic version is free
Included with SQL express
Many exporting options pdf, html, csv etc
Can use many different datasources
Webservice which exposes various methods
SQL standard editon includes a report builder component to allow users create and share their own reports
Lots of features for querying formatting etc
Scheduling options
Extensibility import .net framework dlls for custom functionality
Familiar microsoft environment
Disadvantages:
An extra thing to setup
Seemless authentication between application and report server can be a pain depending on your setup
A little bit of a learning curve although its not too hard to pick up
Report model creator needs some work and doesnt automatically a-z fields
I have heard good things about DevXpress so may be worth looking into.
I used Crystal about 5 years ago and remember it being a pain to setup and was costly licence wise.
Check out the Report Viewer stuff in studio 2008 / .NET 3.5
This amazing site has the full scoop:
GotReportViewer
It's a nice build in reporting system that will show a report and print. It's not full blown like Crystal or SQL Reporting Services. If all you need is some lightweight reporting you can't beat the price.
Crystal = Big footprint, huge deployment, fast, good designer and support
MS ReportViewer = small footprint, slow, bad designer, support.. well, not so damn easy to search after reportviewer, a name all uses.. sigh.
We use ActiveReports.net here. They're OK and tend to get the job done pretty well, but I'm not sure if they would fit your definition of "Dynamic". But you can pretty much make them do anything though code.
I'm currently considering DevXpress XtraReports as a replacement for CR. So far I like what I see.
SQL Reporting Services probably aren't flexible enough for what you want as you don't really get a deep level of code manipulation.
Active reports let you get into the binding events and pretty much do whatever you want, however there are a couple of small bugs with active reports (like not being able to bind to a defaultview of a datatable) which make it a pain. Apart from that, it's highly flexible.
XtraReports are awesome but they're a lot pricier than Active Reports. Having said that, their support is fantastic and the reporting package is rock solid. I'd look at forking out the cash for them if possible.