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
Scenario
I have recently graduated from university with a degree in Computer Science.
My degree mainly focused on C#.
I want to learn more and get better at what I do.
I notice a lot of companies always want their developers to know and use 3rd party tools.
Question
If I was developing C# Windows Forms applications, what 3rd party tools/libraries/controls etc. would be of use to me and for what reason?
The answer to this question depends on how you define "3rd party tools". I usually take that to mean products from companies other than MS but excluding free open source software. When it comes to 3rd party products (for-profit) I cannot think of any common products that I've used or been asked to learn over the last decade that I've been doing .Net development. Most MS shops I've worked with turn to MS solutions (for good or ill depending on your personal view).
That said, in recent years the number and quality of the various FOSS solutions out there has risen dramatically. I use the following whenever I can:
Logging: log4net
Inversion of Control Container (plus more): Castle Windsor
ORM: NHibernate
Unit Testing: NUnit
Mocks for unit testing: Rhino Mocks
For most of these projects there are many other options, these are just my current favorites. Learn to use these (and WHY they are needed) and you'll be many steps above the average .Net developer (sad but all to true).
The DevExpress and Telerik controls are pretty popular, but not free.
Some 3rd party .Net component providers that I've seen used in companies most often:
Telerik
Infragistics
They are not free. These kinds of providers offer large libraries of controls that you'd pick from to achieve your specific goals.
Many good suggestions here, I would also add a few other categories of tools:
Software configuration management/version control: CVS, Subversion, Git/Mercurial/Bazaar, Perforce, etc. Good use of SCM is essential for professional software development.
Issue tracking: Bugzilla, Trac, FogBugz, etc. I would also consider an issue tracking system to be a critical piece of software.
Documentation: Like it or not, it becomes very handy to know your way around Microsoft Word. Knowing how to manipulate styles, headings, numberings, cross-references, etc. can make your life a lot easier when writing documentation.
You'd probably want to have a look at Silverlight. It's a Microsoft alternative to Flash and uses C#. WPF are also something to look at for interfacing.
It might also be worthwhile looking at MOSS.
I've always liked the Xceed controls. In a lot of cases you could always build your own controls. The biggest advantage to using some of these packages is that it saves you the time and they have also been well tested (if not by the company then by the people that are using them).
I've used a couple of different packages over the years and found that if you can use one it's not that hard to use another. The biggest thing is knowing what is available out there so you don't spend two weeks building something that you could have just paid a few hundred dollars for.
You should know about resharper (helper for VS)
Crystal reports - for reports,
Some Grid tools (google it, there are many - I wouldn't bother to learn until need one)
and study advanced topics like: WCF, WPF
Cruise control or other building tool, bugnet or trac - bug management tools...
And of course - AQtime or other Profiling tools.
.NET Reflector
Hawkeye - The .Net Runtime Object Editor
Infragistics
I'd throw mono in there as well. Since you're looking to give yourself an advantage over other developers and improve your value to companies - having cross platform experience is advantageous as well.
There are a lot of 3rd party controls that will help you achieve more in less time. But I don't think many of them will really improve your coding skills (calling someone else to do all the work doesn't teach you much about how to actually do thise things yourself, but familiarity with them and the ability to learn new libraries is a good skill to practice)
Resharper is good for improving your coding skills (code analysis), coding style (autoformatting), and it's a great refactoring tool. It's expensive, though.
Microsoft do some free code analysis tools for Visual Studio (FXCop for code analysis, and there is also a Static Analysis addin) which will help improve your code quality.
AtomineerUtils (my own addin) encourages excellence in documentation and generally improves your code quality (by encouraging good naming style, etc)
Focus more on the tools used in the software development process. Enterprise Architect is used for designing applications from a high level. Once you design you application's business classes you can generate your classes' skeletons. You will be responsible for you code implementation once the class structure has been created.
For implementation purposes look at several C# platforms mentioned earlier. You want to focus Microsoft's WPF, WCF, WF. WPF is ok but it can not be used prior to .net 3.0 so check your client's requirements. I'm working on a project that targets the .net 2.0 because of restrictions by the client so the applicaiton was designed in WinForms. Silverlight is an option as well.
In addition, read up on design patterns as this will help you avoid creating high maintenance applications. A good book is Design Patterns in C#.
For testing look at the Visual Studio TFS system or third party programs like NUnit. You can google NUnit. This will help you ensure that your code does what you intended it to do on a granular scale.
Also, take a look at some of the source control software avaialbel like Subversion, Rational ClearCase, Visual SourceSafe. For large projects with multiple developers you'll need a source control tool that has multiple branches so that each developer has his or her own sandbox within the source control system.
I'm a big proponent of ComponentOne and use it in my new applications regularly. I find that if you're proficient in .NET winforms in general, C1 are very easy to pick up on and usually do what you want with little effort.
A couple people mentioned Telerik. I demoed it fairly extensively and found them to be a bit more complicated because they contain a ton of configuration options for look and feel. Awesome if you're some sort of graphic designer, but unless you're building the next Windows Media Player, I think it's overkill. The learning curve for the theming seemed a bit much for what I was trying to accomplish.
C1 and Telerik both run about $1000 to $1300 depending on what license you get.
You should also check out the Krypton toolkit. It free and has a lot of nice controls.
Related
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 7 years ago.
Improve this question
I am a final year computer science student from Mumbai University, India.
The topic of our undergraduate project is SOA.
Under this project we are supposed to build 3 service components and one example website that uses those components.
I am quite good with Java and have no experience whatsoever with C# or .NET.
I am having hard time deciding the language and platform for our project.
Can you please suggest what platform I should go for?
Please give me a brief comparison between Java/Java EE and C#.NET/ASP.NET in terms of complexity, ease of development, ease of deployment etc.
Edit:
The original reason why I put this question is:-
We have to do final year project in group of three. My both partners want to do this project in C# and asp.net and I want to do it in java. Since our project is more of server side, java holds some advantages like cross platform over C#
Also this point:-
What if we implement 2 parts in C#.net(which they will build) and 1 part in Java(which i will build) and then use them to build a sample website.
What level(kind) of difficulty it will accompany?
I am quite good with Java and have no experience whatsoever with C# or .NET.
Well then, do you have a particular desire to extend your knowledge into C# and .NET, or do you want to concentrate solely on the actual project.
People can make all sorts of arguments about C# vs Java, but in your case the pertinent facts are that C# will be much better at teaching you a new language, and Java will be much better at not requiring you to learn a new language.
Edit: Following the edit to the question, mixing the languages like you suggest as a possibility has the added advantage of needing you to show how to mix the use of two different languages, which might or might not be useful in itself.
Overall I would say that is is much easier to get started in Asp.NET. With Java EE, just setting a dev environment to do Hello World, can be a lot of work. In Asp.NET, you launch visual studio, create a project, and are ready to go. If you are using Netbeans and Glassfish, then Hello World is no longer a nightmare, but deployment is still a lot trickier.
Architecturally they are pretty similar, Java EE is a bit rustier, but has borrowed from many of the newer ideas of ASP.net.
Once you get up to speed in Java EE, it isn't that bad, so for a long term commercial project, it is a viable choice. For a short term student project it isn't worth the effort, and I would go with ASP.NET, but if I had a choice I wouldn't recommend either platform.
I would build my application in a dynamic language like python, ruby, or maybe groovy. The difference in productivity between static and dynamic languages is huge. Even if all 3 of your team members are new to the language I would expect you accomplish more in less time.
I would recommend looking into the following frameworks: django, pylons, rails, grails. I'm biased towards the python frameworks, but rails is also an excellent choice. Grails is a pretty cool clone of Rails written in groovy, but unless you have to have Java integration, I would stick with the other 3.
I am quite good with Java and have no experience whatsoever with C# or .NET.
If by that you mean you also have experience with building services and site, then use Java, no point in discussing it any further. The only possible reason is if You Want to learn .NET (a great reason imho though), but not at all because you should change to it.
Note that personally I prefer .NET vs. Java, but I would never / ever make a team experienced in Java change to .NET in the scenario you described.
If you do go with .NET, use ASP.NET MVC. It gets you closer to the right skills to learn regardless of the platform / HTML, CSS, JS, HTTP considerations, etc.
What if we implement 2 parts in
C#.net(which they will build) and 1
part in Java(which i will build) and
then use them to build a sample
website. What level(kind) of
difficulty it will accompany?
If the interface between these parts is a widely-accepted standard like SOAP or REST/JSON, then the language the individual components are developed in will matter very little - this is the whole point of such standards, and an important part of the SOA idea as well. I'd even consider such a heterogenous application a better example for what you're supposed to learn.
The only real downside will be that you'll have a harder time helping each other when you encounter problems.
Ill approach this idea by idea:
Platform: You are familiar with Java, I would recommend for the time being staying within Java for the time being.
J2EE do you mean Java EE? J2EE is quite old by today's standards.
There are not many, if any, fundamental differences between .NET and Java platform code. It comes down to a matter of preference and what Operating System you are primarily working on, imo. If it is only Windows development I would lean towards .NET, however if you need portability lean towards Java.
Also I wanted to point out SOA is more of a buzz word consultants use. You will see this as you gain experience in the industry. Cloud is the new SOA, this is purely opinion.
It may be worth your while to do the other components in something you don't know as having that experience could make you more marketable to industry. Look at job offers for a field you'd like to do work in. What experience are they asking for? Maybe use something they ask for as one of your components. I've never seen a job ad that asked solely for Java experience, it's usually accompanied by other technologies like scripting languages and framework experience.
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 7 years ago.
Improve this question
There is a group here using Java, server-side and client-side, with Swing for the client UIs. I plan to suggest that they change the front end to C# and WinForms or WPF, but I want to come prepared with:
A list of benefits to be had from moving to Winforms / WPF from Swing.
A list of Swing benefits that might get thrown back at me over using WinForms / WPF (the only one I can think of off the top of my head is the ability to share more code across server and client due to being the same language - given the fact that the server side will stay Java).
I'll preface this by saying I'm a .net developer so the following might be heretical.
It sounds like your company already has a significant investment in java. People, software licenses, and code base.
If my company (or group) was primarily java and we were successful in meeting business demands, then quite frankly there would be no way I'd switch.
The only way I'd consider switching technology stacks is if the stack we were on was truly dead. Meaning that it was very difficult to find programmers for, it could no longer meet business needs, we had a high number of failed projects, and/or the language itself was no longer evolving.
Switching just because someone prefers one language over another is non-starter and ultimately wouldn't make any business sense. The very act of a change like that will mean that the company is going to lose those people who are still committed to the old stack. Replacing people is extremely expensive just in terms of knowledge lost.
Another thing, if you don't already know what the hard reasons are for switching platforms then you shouldn't even try to encourage it. Take the accountants point of view, what really would this provide?
1) Swing stinks. (Almost just kidding, but really, in my opinion, it's pretty awful.) Even if you're going to develop in Java, use SWT or some other decent looking/behaving toolkit. Moving to Windows Forms or WPF will (potentially) give you a lot more powerful user interface options on Windows, but only on Windows.
2) You're tying yourself to Windows, and losing the cross platform nature of Java+Swing. You're potentially losing some ability for shared code. You're having to redevelop in non-java, which may mean a lack of experience/training/knowledge on the part of other developers on your team.
Performace & startup time. You just can't compare Swing to Winforms/WPF in the performace/startup time aspect.
Really don't know... if you have a high qualified Java team that does not know .Net APIs, stick to Swing, otherwise, don't think twice... Use Winforms. About "the ability to share more code across server and client due to being the same language", don't bother... there is zillions of ways to make two different applications from different languages that each other.
The performance of the GUI should be faster with a .NET winform app compared to a Swing app running on Windows. It's not really a huge difference at this point for most apps though, computers these days can run Java pretty fast.
Either way you would still be talking to the Java backend code. Depending on what they've done you may be better off just sticking with the Swing front end.
If it's an option you should think about a web front end. If it can be made in XHTML/Javascript/CSS, you would retain the cross platform benefits that the Java GUI gives you.
But really, you need to think about why you want to change to Winforms instead of Java. Is there something about the existing Java app that you don't like that would be better and worth the cost of redeveloping in another language? Is it something that can be fixed without a full rewrite?
Do you have any custom components which would be a pain to migrate from Swing to .net? Do you have staff that are expert at developing custom Swing components (Java2D expertise, familiarity with Swings input subsystem etc.) who know little about WinForm custom development?
If the answer either to these questions is yes then you should probably stick with Swing.
1) It is easier to make a Winforms app feel like a Windows app. Java applications usually feel "funny" if you aren't careful.
2) Everything you are programming is using Java. Having one component that is not Java means that the project is harder to work with. Overall maintenance will also be more annoying. Currently, everyone on your project team needs to know Java only in order to be able to work with anyone else on your project team. From a recruiting and maintainability perspective, this is convenient. Personally, I be against switching the GUI unless you were getting some other benefit out of it.
You have not provided any reasons why you plan to make your proposal.
If using windows .net is the better choice because yo have:
1. Good designer in Visual studio, good documentation and examples
2. Better startup, CPU and memory usage at runtime: see http://www.codeproject.com/KB/dotnet/RuntimePerformance.aspx
If using Linux, you have Mono versus Java, but it is more complicated to make a comparison there due to the large number of distros.
The big advantage are free libraries you can use in java.Most of the nosql systems are written in java , the best of all Neo4j (only java will give you ability to run these products embedded). This is something dot net can't do, and these will give your applications ability no winforms, wpf can have.
Closed. This question does not meet Stack Overflow guidelines. It is not currently accepting answers.
Questions asking us to recommend or find a tool, library or favorite off-site resource are off-topic for Stack Overflow as they tend to attract opinionated answers and spam. Instead, describe the problem and what has been done so far to solve it.
Closed 9 years ago.
Improve this question
I'm searching for a User Interface Design tool to visualize a possible GUI in a documentation. I must not generate code. I know that Microsoft Visio provides a functionality. But are there any alternatives?
Which software do you use for visualizing a GUI?
PS. Another well-known tool is The Pencil Project.
An awesome and easy one is balsamiq: http://www.balsamiq.com/
I also quite like Axure.
Give a look to Firefox Pencil Extension, is a basic tool for GUI prototyping and simple sketching....
I am posting here a summary of recommendations based on my 10-years experience as a UX designer/information architect. The original article can be found here:
[Best prototyping tools out there? A review of Axure, Justinmind, and other UX tools] (http://www.humaneinterface.net/best-prototyping-tools/)
With interfaces becoming more and more dynamic, interactive prototypes are the best way to provide an in-depth, contextual and responsive documentation. If you are a professional designer, I’d recommend using either Axure RP Pro or Justinmind Prototyper for both static, low-fidelity prototypes and more sophisticated, interactive ones. Both offer rather affordable licenses.
If you are not a professional designer and you are looking for a tool that is cheap and allows to create static wireframes once in a while, I’d recommend Moqups as a quick prototyping tool. I prefer it over Balsamiq. WireframeSketcher is also an interesting alternative.
If you are looking for something not as complex as Axure/Justinmind but more powerful than Moqups/Balsamiq, you could also consider Infragistics’ Indigo Studio (which can import static mockups from Balsamiq and make them interactive) and Protoshare. Both of them, and in particular Indigo Studio, offer price plans that are not so convenient, and considering the limited set of functionality, I wouldn’t recommend them as a first choice. A third option is UXpin, which boasts the most elegant, clean and user-friendly interface I’ve seen so far, in the whole landscape of the UX tools available today.
For mobile prototyping, you can use both Axure and Justinmind if you want full control, the second seems to be a better choice at the time of writing (even though I did not test it directly). If you are looking for an easy way to build prototypes that are not too complex, you can consider the above mentioned Indigo Studio, or the more affordable Proto.io.
If your client is an organization that can afford a very expensive license, you can also consider iRise, a very comprehensive design platform for enterprises.
If you need to design static diagrams to represent user journeys, you might consider tools such as Draw.io or LucidChart, but Axure still provides decent diagramming tools that can reference to portions of your prototype. Justinmind seems a bit limited. Microsoft Visio (now part of Office 365 as a web app, and therefore also available on a Mac) is still great if you need maximum flexibility and want to draw very elegant flowcharts.
Keep an eye on JQuery UI components, even if you are not going to incorporate javascript libraries into your prototype. If you like to code directly, but you don’t necessarily need to reuse your code, you can also consider using CSS frameworks in combination with WYSIWYG editors such as Jetstrap.
Use paper to play with origami rather than prototyping.
You may want to have a look at Joel's article The Iceberg Secret, Revealed, as well as the articles discussion.
I don't know wether this is relevant to yout task, but since reading it I definitely prefer to use handdrawns sketches of a UI if I want to present it to a customer. (A 'Pencil Project' in the true sense of the meaning ;-)
If you are in Linux you might try Glade.
Take a look at the tools mentioned in the answers to this question:
Prototyping Tools for non-programmers - Expression?
I'd still recommend Balsamiq Mockups. The resulting GUI mockups look like sketches, making it a great tool for communicating the idea that this is not the final GUI, but merely a visualization of GUI concepts.
The "must not" seems odd... if you use an IDE designer to throw some controls down, but don't use the code, is that sufficient?
Or use "blend" - that generates xaml, which is just layout - no code.
justinmind prototyper may work for you. It gives you an HTML to check how an interface will work.
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 7 years ago.
Improve this question
I'm a C# developer looking to get into home automation as a hobby. I have done a little research, but was wondering if anyone knows of a good .NET library that supports Insteon hardware. I'd rather use Insteon than X10 due to reliability issues.
My ultimate objective at this point is to have a simple home automation server (maybe lights and climate control) with a secure ASP.NET web application interface. I'm more interested in actually building it and learning about it rather than finding an existing solution.
Thanks for any suggestions or comments.
Edit:
Thanks for the help, everyone.
Does anyone have experience with Z-wave technology? Seems promising - appears to be higher quality hardware, includes a core library, supports .NET, etc. ControlThink appears to have a pretty good controller and SDK.
Here's an interesting application to consider: Stall Status: Know Before You Go
We found there really wasn't much developer support for Insteon unless you wanted to buy their SDK and agree to their rather heavy-handed license agreement. Rather than go that route, we wrote our own .NET library called FluentDwelling and we open-sourced it. You can find a download link, and some get-you-started code samples if you follow that link.
The source code comes with a full suite of unit tests (requires NUnit, also free), so you can add improvements and make changes if you like.
I would avoid X10 like the plague. Between things like modern TV's and power strips, bridged power junction boxes and just plain strange wiring, X10 signals tend to just "disappear" and never get to their destination.
If you really want to give X10 a shot, I've got a box of X10 stuff in the garage that was worth $250+ new and it's all completely useless in my house, so you can have it. Some of it worked in my old house, but it won't so much as turn a light on 2 outlets away where I live now.
X10 is viewed by most modern electronics as "noise" on the line (which, technically, it is) and something to be filtered out rather than passed along or left alone.
I can't remember if it covers the specific technologies you mention but you should definately check out this episode of .NET Rocks. They talk about all the different stuff you can do with home automation and a lot about how to do it. I believe one of the main points was that Microsoft Robotics Studio was a good tool to use, as it uses a lot of the same abstractions as you would otherwise use.
I know it's been a long time since this post was made, however I was wondering if you'd picked a route, and what you've ended up doing with home automation since.
I've been doing this kind of stuff with many of the technologies available, but I've always done it on top of a product called homeseer. .net plug-ins and vb.net and c# scripting can be done on top of this foundation. I've been thinking of rolling my own similar to what you were describing. Any thoughts, tips, decisions you've made etc?
A bit off topic, but listen to the latest episode of dot net rocks, one of the finalists of my .net story built an home automation solution that really made me want to dive into home automation again.
Totally awsome solution.
http://www.dotnetrocks.com/default.aspx?showNum=518
I think this would bee a place to start
insteon sdk
Some research via Google looking for an Insteon SDK only yields stuff from way back in 2005. There's only information on serial port interfaces (no USB) and the only language mentioned is something called DockLight scripting that also looks like it hasn't been updated since 2005.
X10, on the other hand, boasts support for C++, VisualBasic, VB Script, and JavaScript. No .Net listed, but VisualBasic/VB Script likely implies a COM object you can easily import for use in C#. They're also much more USB friendly, and the kit costs 1/4 of the Insteon kit ($50 vs $200).
If you were actually building a product I would understand the reliability concern. But since this is a home project I think you'll have much better luck with X10.
you can try C-bus by Clipsal(schneider) it's free.
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 8 years ago.
Improve this question
My boss thinks the VS 2008 IDE Window Manager(autohiding, docking of Solution Explorer, Properties, etc) is the best thing since sliced bread. I can't find a control that resembles that functionality in the Toolbox. Is there a control like that available that you know of? Or should I go ahead and implement it myself? Btw, we're using VS 2008 Express.
You don't have to create something that looks like the VS window manager - you can use the actual VS one with the Visual Studio Shell.
I believe it's aimed at creating developer tools, but I see no reason why it would have to be used that way. It's a bit like the Eclipse RCP, as I understand it.
I implemented in a real project the DockPanel Suit by Weifen Luo that worked very well and it is in production right now on a quite complex application (it is an application for the financial market that had very strict UI requirements in terms of performance and stability). It is really a very good implementation.
I even had to do some custom modifications and found the code to be very understandable and well written.
I'm sure there are several comparable comercial implementations from companies like Infragistics and similar, but if you are short on cash or just don't care for commercial support services for your components you can give it a try:
http://sourceforge.net/projects/dockpanelsuite
I just hope you're not developing a standard line of business app for non-technical users.
I was involved in a line of business app. that tried using the Magic library (from memory) and implemented property windows etc, so it looked "just like Visual Studio".
Then we released a prototype to the end users and they hated it. These were non-technical finance and accounts type people, some even power users. The major complaints were "windows don't stay in the same place", "too easy to accidently drag windows", "too fiddly" "my window keeps disappearing" etc etc.
Just because your boss thinks the Visual Studio IDE is great doesn't mean a thing if your target user group don't.
Don't forget that Visual Studio was designed/built by developers for developers. If your users aren't going to be overly technical it might be very wise to do some prototyping with them first.
There is a very good opensource project just for this. Look on SourceForge for DockingSuite Dock Panel Suite.
You should check out SandDock. The older versions were freely licenced (dunno if they are still available) and the newer versions are relatively cheap, especially considering the amount of time/money/sanity they would save you.
I would strongly recommend against trying to roll your own VM component. There is just too much work involved, and it wouldn't be worth it, if it wasn't your primary product.
Magic Libary
Dock Panel Suite
Dock Container
I personally think Magic Library is the best. Can't remember if it's OSS though.