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 8 years ago.
Improve this question
Some years ago I tried programming in C# and at the time it seemed to offer a flexible way to construct user interfaces. For instance there was an editor for creating UIs.
I just downloaded Visual Studio Express 2013 and it seems to have completely changed. There is no UI editor anywhere that I can see, and there is a strange XAML file that is not documented anywhere obvious, and there are no sample programs from Microsoft that seem to be compatible with Visual Studio Express 2013.
How can I create a UI and control its appearance down to the pixel? Or is that no longer allowed?
Should I contemplate skipping Visual Studio Express entirely and just build with a Makefile?
Thanks.
Professional Windows UIs are not created using drag and drop techniques.
What you used back in time is called "winforms". It is a really old technology that is not intended to create rich, highly interactive UIs. And no, it is nowhere near "flexible". It doesn't allow any kind of customization and it forces you to either use the default, ugly stuff, or resort to an endless hell of horrible hacks in order to customize anything. It exhibits a "do less with more code", procedural type of approach as opposed to the "do more with less", declarative beauty you find in XAML-based technologies.
It is not recommended for any new projects, only to maintain legacy applications.
If you're serious about Windows UI design, you need to learn XAML and use any of the XAML-based technologies such as WPF or WinRT.
If you're serious about application structure and correctly architecting the different layers of a Windows application, you need to learn MVVM and DataBinding.
If you want to create a completely custom UI, you need to create custom Styles and Templates for your controls. You can use Expression Blend if you want, or create these in pure hand-written XAML.
There is abundant documentation on all these subjects, both on MSDN and in non-official sources (such as StackOverflow). Refer to all the linked sources in this answer.
If you still prefer a drag and drop approach to create Windows UIs, you can do so using the Visual Studio Designer for XAML-based UIs, however be aware that this approach has an important number of drawbacks:
Drawbacks of using the Visual Studio designer drag and drop approach to create XAML-Based UIs.
I'm not entirely sure what you are talking about, but there are two separate UI frameworks within Visual Studio and C#. Winforms, which you probably used some years ago, and WPF (Windows Presentation Foundation) which is a much newer technology that uses XAML markup to define your interface.
Both provide a visual editor in Visual Studio by clicking the .cs (for WinForms) or .xaml (for WPF) file. When creating a project please confirm which of the two you selected.
Also I'd like to note that Visual Studio defaults to opening the visual UI editor when you select and create either of these types of projects.
If you'd like to learn about the latter technology (WPF) please see here: http://msdn.microsoft.com/en-us/library/aa970268(v=vs.110).aspx
Related
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 am beginner in programming, bit knowledgeable in C, MySQL, HTML (+little CSS, CGI and JS). C is my main language. I was already able to make decent websites with basic functionalities and simple games. But I am missing something.
I can add logic to a designed page with the mentioned languages. But how can I make an app that has the design of HTML and logic of C, but does not need a browser and server (XAAMP) to be viewed?
I want to make a legit app (exe). I know it can be with only C but integrating graphics to it is really hard (unlike HTML w/ CGI & JS).
I hope you get what I mean - what is this next step in programming I should learn?
(Btw, I also tried programming in Excel VBA, but I really want to code something that runs without any needed other software)
Thanks!
I think the correct answer to your question is dependent upon what you want to do next. You have said in your question that you wish to make apps that do not run in the browser. So from here you have different learning paths depending upon the platform for which you wish to build apps. In general some languages like Java and C# are versatile and can be used on many platforms. Some specific options for you could be:
Native iOS or OS X Apps - Objective C
Native Android Apps - Java. C/C++ if using the Android NDK.
HTML5 Mobile Apps - JavaScript and HTML
Native Windows Phone Apps - .Net, C#
Apps that run on Arduino - C
Apps for Raspberry Pi - Python
I think this is just a small list. There are lots and lots of platforms out there for which you can build apps. The Tech Stack that you need to learn will depend only on the platform that you choose. In my opinion, in order to be a versatile and an adaptive programmer you should add 1 Object Oriented Language like Java or C++, one scripting language like Python and 1 database query language like SQL to your arsenal. Once you are comfortable with these languages and their paradigms, you will easily be able to transition to other languages for platforms that do not support these.
Not sure what are your plans. Depending on what you want to develop, you chose the appropriate language/ framework.
If you want to design standalone "exe"s with complex graphics, you can learn C#, JAVA, Phyton and/or VBNET. You can develop using several frameworks like visual studio, java, or even with the "new" HTML5/CSS3.
Also, depending on your needs, you can develop standalone apps for mobile using java, C++ or object-C (for Android or iOS), or even HTML5 apps on any of both.
Hope this helps
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
I am new to app development and chose C# and xaml for apps. But things didnt quite go well. I aint a full time programming freak; can just manage an hour or two a day after college studies and with xaml my head really hurts.
Recently i came to know that even html5 can be used to make apps. So my question is this :
Should i continue with xaml or switch to html5 ?
Ref : http://devchic.azurewebsites.net/?p=581
https://stackoverflow.com/questions/11147012/should-i-choose-html5-or-xaml-for-metro-development
My requirements are :
1) Shouldn't be too time consuming
2) I will currently focus on light and simple apps ( Games maybe, but not in near future)
3) They should be available to both wp8 as well as desktop, and if possible to other platforms as well.
(I happen to know c++ and Java at intermediate level.)
While either solution could work, here are some things to consider. I'm going to assume you mean Windows Store applications when you said "desktop."
1) Shouldn't be too time consuming
That's very difficult to say. If you're not familiar with C# and Xaml, there will be a learning curve. You mentioned you know Java though, so the language shouldn't be too much of a challenge. If you're interested in quick to build, I'd suggest you start with Xaml and C# and use the Xaml visual designer to gain some experience and ignore the Xaml output at first. By default, like a web page, the layout system is not absolute and often uses various types of panels (grids, dock panel, etc.) for layout.
Microsoft has a lot of great examples on MSDN that would allow you to both learn more about your options, but even contrast the coding techniques. Having taught someone at work in a little more than an hour how to get started and be productive, you might want to give Xaml another go.
2) I will currently focus on light and simple apps ( Games maybe, but not in near future)
Your definition of light and simple isn't specified. You could create applications that meet that requirement with either platform. If you're building games, the answer changes and becomes more complex. As you're still learning though, I'll not talk about that here.
3) They should be available to both wp8 as well as desktop, and if possible to other platforms as well.
Today, there are 4 common ways of developing an application for Windows 8.1 desktop:
Xaml/C# (C++ is also an option here)
WinJS/HTML/JavaScript (WinJS is a Windows store application-only framework)
Either of the above, hosting a web page (either from a web server or local in-app)
C++/DirectX (for games)
Currently, there isn't a way to use WinJS or the same code for option 4 on Windows Phone. So, you'd likely narrow your options to Xaml or a web page view. While you can't take Xaml and necessarily use the same Xaml on both platforms, the patterns and development experience are very close. By using a "portable class library", it's now possible to share the common business logic between the platforms.
A Xaml approach would allow, without extra effort, the application to be a native experience. Th application would have the appearance and behaviors of a Windows Store application. If you went with just an embedded web page approach, you'd be on your own. I will not take on the experience and look of Windows. If you aren't familiar with doing reasonably complex HTML and CSS, an embedded web page solution may be too time consuming.
(I happen to know c++ and Java at intermediate level.)
Here's a few links that might help you:
Getting started developing apps for Windows Phone and Windows 8
Develop Windows Store apps
This will likely help you with either choice.
Traditional Windows Desktop applications
If you want to build a traditional Windows desktop application and not a Store application, your options are similar, with the exception that you might choose to build your application using WPF. windows Presentation Foundation was the predecessor to the Xaml used in Windows Phone and Store applications. It's not identical, but the knowledge of one transfers well. You can also host an web page inside of a "desktop" application. I've done it frequently. If you're trying to build someone "modern" though, learn the Windows Store frameworks.
If XAML hurts, I say go HTML5. I don't understand XAML very well myself, so I use HTML5 for my Win8 apps.
Regarding your requirements, HTML5 fits 1&2 perfectly. It's not very common to write desktop apps in HTML5 though, so your options there will be quite limited.
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 4 years ago.
Improve this question
I want to increase my skills in web development. I have already picked up a book on JQuery and Entity Framework. Is their anything else I should read up on?
The MVC Pattern is the best thing going for web dev these days. Ruby on Rails and ASP.NET MVC are both implementations of the pattern. Learning the concepts will be useful on either platform.
Get Firebug if you don't already have it. It will save you a lot of pain and suffering.
Sounds like you've decided on the MS Stack, so I'll stay within that.
If you want to do Internet work, I'd say read up on ASP.net MVC2 Beta (good starting place would be http://haacked.com/archive/2009/11/17/asp.net-mvc-2-beta-released.aspx).
If you want to do internal IT sites, I'd say hit SharePoint. It is built on ASP.net WebForms and seems to be really taking off.
That is how the market SEEMS to be breaking down at the moment, not me saying "you should only do MVC on the web and SharePoint for corporate work". You can use either, I'm just suggesting where I think you'll find the most jobs...
I'd recommend Linq if you haven't worked with it yet. You can get a lot of mileage out of Linq. Linq To Entities (for Entity Framework), Linq To SQL (if you don't like EF), Linq to XML, Linq to Objects, heck even Linq To Flickr.
If you haven't already I'd also get yourself up to speed using an Inversion of Control container. (Castle Windsor for instance).
I would say MVC and pattern, also I don't know in which language you are programming but a cookbook for that language would be good also.
You should pay a visit to the Mix09 website. It has lots of cool videos of new and hot (Microsoft) technologies.
Also, I recommend you have a look at ASP.Net MVC.
Don't forget to take a look at the opensource MVC projects.
Eg.
NerdDinner
A lot more dot net open source projects can be found at that site (codeplex), that contain interesting MVC and other (entity, Silverlight, ...) sources.
And my last tip would be,
It's better to be very good at one programming language, than to have basic knowledge of 3 programming languages :)
Keep learning!
You must have
A good server side platform I will advice "Ruby On Rails"
Strong Javascript knowledge and one good js library Jquery is great
One ORM tool. With rails it is activeRecord. if you choose .Net then Entity FrameWork or Nhibernate is good.
Final and most important point you must have a very good knowledge of Http protocol . I will suggest this book
http://www.amazon.com/HTTP-Definitive-Guide-David-Gourley/dp/1565925092
Be familiar with some enterprise patterns http://martinfowler.com/eaaCatalog/
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
I need some resources that talk about how to design your software to be extensible, i.e. so that other people can write add-ons/plug-ins that adds functionality to it.
What do you recommend? Any books out there that discuss the subject?
I would prefer something that's short and to the point; a bit of theory and a bunch of concrete examples.
I'm not targeting a specific language, I want to be able to understand the core idea so that I can implement it in any language.
And for the same reason, I prefer not to do it using a framework that someone else built (unless the framework is not very high-level, i.e. doesn't hide too much), at the moment I only want to educate myself on the subject and experiment with various ways to implement it. Plus, a framework usually assumes user's knowledge about the subject.
UPDATE
I'm not asking about OOP or allowing my classes to be inherited. I'm talking about designing an application that will be deployed on a system, such that it can be extended by third-party add-ons AFTER its been deployed.
For example, Notepad++ has a plug-in architecture where you can place a .dll file in the plugins folder, and it adds functionality to the application that wasn't there, such as color-picking, or snippet insertion, or many other things (a wide range of functionality).
IF we're talking .NET, try Scripting .NET applications with VBScript over on CodeProject. Lots of concrete examples there.
Below are sites implementing various application extension techniques
ClearScript - Makes V8, VBScript and JScript available to .NET apps
CS-Script - The C# Script Engine
Plugin Architecture using C#
Opinio plugin architecture
Notes on the Eclipse Plug-in Architecture
Plug-in Architecture Framework for Beginners
Gecko plugin architecture
Fungimol plugin architecture
OSGI is a good practical example of a technical framework allowing to do what you are after.
The theory is here.
The (free!) book is there.
Extensibility and the ability to write plugin must deal with service lifecycle
adding / removing service/plugin on the spot
managing dependencies between services
managing states of services (declared, installed, started, stopped,...)
What is OSGI for ?
One of the main functions of a module is as a unit of deployment… something that we can either build or download and install to extend the functionality of our application.
You will find a good introduction here, on the central notion of service (which is related to your question, and which explain some problems around services, key component for extensibility).
Extract:
Why are services then so important if so many applications can be built without them? Well, services are the best known way to decouple software components from each other.
One of the most important aspects of services is that they significantly minimize class loading problems because they work with instances of objects, not with class names. Instances that are created by the provider, not the consumer. The reduction of the complexity is quite surprising
Not only do services minimize configuration, they also significantly reduce the number of shared packages.
Implement SOLID principles in your application.
1. Single responsibility principle: A class should have only a single responsibility (i.e. only one potential change in the software's specification should be able to affect the specification of the class
2.Open/closed principle: Software entities … should be open for extension, but closed for modification
3. Liskov substitution principle: Objects in a program should be replaceable with instances of their subtypes without altering the correctness of that program
4. Interface segregation principle: Many client-specific interfaces are better than one general-purpose interface
5. Dependency inversion principle: One should Depend upon Abstractions. Do not depend upon concretions
Stackoverflow questions:
Example of Single Responsibility Principle
Is the Open/Closed Principle a good idea?
What is the Liskov Substitution Principle?
Interface Segregation Principle- Program to an interface
What is the Dependency Inversion Principle and why is it important?
You try to reach two competing goals:
The components of your software must expose a lot of themselves, so they can be reused
The components of your software must expose very little of themselves, so they can be reused
Explanation: To encourage code reuse, you should be able to extend existing classes and call their methods. This isn't possible when the methods are declared "private" and the classes are "final" (and can't be extended). So to meet this goal, everything should be public and accessible. No private data or methods.
When you release the second version of your software, you will find that many of the ideas of version 1 were plain wrong. You need to change many interfaces or your code, method names, delete methods, break the API. If you do this, many people will turn away. So in order to be able to evolve your software, the components must not expose anything that is not absolutely necessary - at the cost of code reuse.
Example: I wanted to observe the position of the cursor (caret) in an SWT StyledText. The caret is not meant to be extended. If you do it, you'll find that the code contains checks like "is this class in the package org.eclipse.swt" and a lot of methods are private and final and whatnot. I had to copy about 28 classes out of SWT into my project just to implement this feature because everything is locked down.
SWT is a nice framework to use and hell to extend.
Of course there is the famous Open Closed Principle - http://en.wikipedia.org/wiki/Open/closed_principle
Well it depends on the language.
In C/C++ I'm pretty sure there is a loadlibrary function that allows you to open a library at runtime and invoke it's exported functions. This is typically how it's done in C/C++.
In .NET, there is Reflection, which is offers similar (but more broad) to loadlibrary. There is also entire libraries built on Reflection like Managed Extension Framework, or Mono.Addins that does most of the heavy lifting for you already.
In Java, there is also Reflection. And there is the JPF (Java Plugin Framework) which is used in stuff like Eclipse IIRC.
Depending on what language you use I could recommend some tutorial/books. I hope this was helpful.
Plugin architecture is becoming very popular for its extensibility and thus flexibility.
For c++, Apache httpd server is actually plugin based, but a concept of module is used instead. Most of apache features are implemented as modules, like cache, rewrite, load balancing, and even threading model. It is a very modular software I ever saw.
And for java, Eclipse is definitely plugin based. The core of Eclipse is an OSGI module system which manage bundles, another concept for plugin. Bundle can provide extension points on which we can build modules with less efforts. The most intricate thing in OSGI is its dynamic characteristic, which means bundles can be installed or uninstalled at runtime. No stop-the-world syndrome any more!
Since I dont have enough rep points to leave a comment, I am posting this as an answer. SharpDevelop is an IDE for developing applications in C#/VB.NET/Boo. It has a pretty impressive architecture that allows itself to be extended in a number of ways - right from new menu items to development support for whole new languages.
It uses a bit of XML configuration to act as a glue layer between a core of the IDE and the plugin implementation. It handles locating, loading and versioning of plugins out of the box. Deploying new plugins is matter of simply copying in the new xml configuration file and the required assemblies (DLLs) and restarting the application. You can read more on this in the book "Dissecting a csharp application" by the original author(s) - Christian Holm, Mike Krüger, Bernhard Spuida of the application from here. The book doesnt seem to be available on that site, but i found a copy that might still be around here
Also found a related question here
Checkout "CAB" - Microsoft's Composition Application Building blocks Framework. I think they've got a "web version" of that too...
I have just started to develop a smart client application. These are two options I am considering.
Using Microsoft's System.AddIn namespace. Looks very promising, however it may be a little complex for our end solution.
Or the Smart Client - Composite UI Application Block from Microsoft
Recently, i have looked at taking components both the Composite UI Application Block and the System.AddIn namespace to build my own. Since source code is available for the CAB it is easy to extend. I think our end solution will be a light weight version of the CAB, definatly using the Unity Application Block
If you work with .Net, our research yielded two approaches: scripting and composition.
Scripting
You extend the functionality of what your classes can do by orchestrating them using scripts. That means exposing what is compiled in your favorite .Net language in a dynamic language.
Some options we found worth exploring:
IronPython
IronRuby
JavaScript: Jint, Jurassic and JavaScript .Net are good starting points.
Script.Net -> this one was the first one to call our attention.
Composition
If you start a project with .Net 4 or above, you must take a good look at the Managed Extensibility Framework (MEF). It allows you to extend the functionality of your apps in a plugin way.
The Managed Extensibility Framework (MEF) is a composition layer for
.NET that improves the flexibility, maintainability and testability of
large applications. MEF can be used for third-party plugin
extensibility, or it can bring the benefits of a loosely-coupled
plugin-like architecture to regular applications.
Managed Add-in Framework is also a good read.
MSDN: http://msdn.microsoft.com/en-us/library/dd460648.aspx
Codeplex: http://mef.codeplex.com/
Rather than re-inventing the wheel, use the frameworks in hand. Eclipse and Netbeans both support plugin based extensions. You have to work in Java though.
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
It looks interesting and I've played around with it some --- but the development IDE in a web browser seems to be nightmare eventually.
Does anyone have experience using it and what are your thoughts?
We evaluated GI a few months ago for a project but didn't end up selecting it.
The IDE-in-a-browser (which is itself build with GI) actually works surprisingly well, though there are some features you normally expect from an editor that it lacks, most notably (and irritatingly) an Undo command. It's also impossible to do things like subdocument includes (practically a necessity for team development) from the IDE, though you can do them manually in the underlying XML and the IDE will respect them.
In the end the main reason we didn't go with it was that it was difficult to make the resulting web application look as good as the designers really wanted. It was relatively easy to build functionality, but the components were very restrictive in look and feel. The way GI renders its own document model to HTML involves a lot of style attributes which makes skinning in CSS all but impossible. It seems to prefer making web applications that look like applications, instead of web applications that look like websites.
So it would probably be great for building intranet type applications where look and feel isn't a huge issue, but I probably wouldn't use it to make a public facing site.
By the way for those that don't know, TIBCO GI is a completely separate product from the rest of TIBCO's SOA business integration stuff - General Interface was a separate company that was acquired by TIBCO a couple of years ago.
From a coworker who used to work at TIBCO:
TIBCO is a complicated, hard to use system because it's used for complicated, hard to solve problems.
Kieron does a good job of summarizing GI. It's really for enterprise web applications, not consumer-y widgets. The overhead of loading the entire GI framework and waiting a second or two for it to load doesn;t seem like much if you're firing up a call center or an employee provisioning application you're going to use for the next few hours. But, it seems like forever if you're waiting for a widget to load into an existing web page. And, even though, GI supports some nice functional and performance QA tools, they really are overkill unless you're working on something important and complex. So, if all you want is to toss a sexy looking datepicker on screen, use something else for sure.
Yup, couldn't agree more. I have developed a few applications with TIBCO GI and integrated it with TIBCO CIM. I work for TIBCO and GI is something I have been working with quite heavily doing some complicated stuff. Whilst doing it, I came across the odd sides of GI, things you sometimes can't explain but are just the way they are, working with JavaScript and dealing with multithreading issues can be a nightmare etc. It's good to create something quick without being too fussy about the sexiness of the application hence good for internal apps but not for consumers unless you want to get lost in a jungle of crazy CSS styling. The XML Mapping utility is a great feature saving you lots of time to implement SOA applications. The other good part is that deployment is really easy - GI apps use a combination of XML, XSLT, X-Path and JavaScript. In GI 3.8 there are also a couple of testing tools. Unfortunately, development inside GI's editor is slow and painful, so I recommend using an external editor like Notepad++.
you dont need to run tibco-GI from a web-browser, but you need to run the Programfile GI_Builder.exe which is an ActiveX application. just double-click on it and run-it.