What is the main technical difference between Web, Application, and Mobile programming? - mobile

I want to know what is the main technical difference between Web (ASP, PHP, Ruby, etc.),
Application (C, C++, .NET, Java), and Mobile (J2ME, Objective C) programming, and which is the hardest.
If someone learns one of these, can he easily switch over to one of the others?

First, from a technical perspective you should be asking the difference between Web Applications and Client Applications. Within each category, you can ask about the difference between standard Web Applications and Mobile Web Apps and standard Client Apps and Mobile Client Apps.
The difference between web and client applications is that web applications lack state: every page request is completely de-linked from every other page request. It is only through various technical work-arounds that web applications manage to maintain the illusion that a web app user is running a coherent application as they navigate from page to page. In ASP.NET, for example, the ASP.NET ISAPI DLL manages a "Session" object that pulls a session cookie from the user's page request and then provides uses it to identify the Session data appropriate for the handling of the request.
In a client application, by contrast, every aspect of the application is targeted at a single user and the "state" of the application is a given as you navigate from dialog to dialog. In addition, the tight integration of the application with the user's computer permits the use of on-board resources (memory, disk). In a web app, by contrast, there is little or no access to these resources except as mediated by the browser (which is a client application, not a web app).
Mobile web applications are, essentially, just web applications with two caveats: the screen size is considerably smaller and the browser capabilities are generally less robust. Thus, you'd write a mobile web app in pretty much the same way as a standard web app but you can not count on some of the capabilities that you usually have with a full-blown browser. This last constraint, by the way, is rapidly going away as mobile devices become more powerful.
Mobile client applications require a development environment, deployment strategy, etc. that is specific to the mobile device. The tools and techniques used in standard client application development don't map particularly well to the Mobile client. Instead, you'll need to learn new tools, controls and techniques. The only real exception to this rule are the tools available through .NET. Microsoft has attempted to provide as much commonality as possible although, even here, you'll find that you have a different mind set and different constraints than when developing a WinForms application.
Hope this helps!

It's the context in which these applications run.
Web Apps run on a server, intended to serve a large number of clients using a web browser. Even though the web-servers themselves run on some OS, the web applications that run on them are not tightly coupled to that OS.
Mobile and Desktop applications are usually more tightly coupled to the OS on which they run.

Mobile applications can be written identically to desktop applications, roughly as windows apps, console apps and browser apps (because most mobile platforms support a browser). But the mobile versions of most tools are more constrained; and there's usually communications involved, which often makes development more challenging trying to keep various kinds of State straight. And you usually have to be more sensitive to subtleties in the UI code.
There's really no particular dichotomy between Mobile apps and Web apps. The concepts aren't particularly orthogonal.

If you look at a programming framework like .NET, you'll easily be able to switch between Web (ASP.NET and Silverlight), Mobile (.NET mobile) and Desktop (.NET and WPF) as the languages are all based on the same core framework. You can write .NET in different languages, the most common of these are VB.NET and C#.
Personally I'd recommend C# if you are learning. You'll find more examples on the internet, and it will also be more similiar to languages that you may want to learn in the furture (JavaScript, Java etc)

Related

Can I run my mobile app's back end on Uffizzi?

So looking into Uffizzi, are there any restrictions as far as mobile goes? Specificially, it seems to deploy fine, but I wasn't sure if there are any more difficulties in connecting the back end for a mobile application than there are a Web app. I know permissions and those kinds of things are a bit different so wondered if Uffizzi handles this fine or is mainly for web apps?
The easiest way to answer this is to cover what can run on uffizzi - which is just about anything.
You can deploy any application (front and/or backend) built with any language that runs on Linux, including Javascript, Python, C# (via .NET Core), PHP, Ruby, Go, Java, Scala, Clojure and more.
APIs, Web Apps, Mobile Back-ends are a few use cases of what you can run on uffizzi.
https://uffizzi.cloud/faq/

Should I still use Silverlight/XBAP

We need to create an application that can be used via the browser but that can also be used while offline.
The browser Version will be used by our customer to do calculations. Each customer needs to log into the application with a username and Password.
The offline version will be used by our own employees. They need to be able to use this Version while not connected to a Network.
The data that is needed for the application will be stored in XML files.
We are mainly programming with C# and the .NET-Framework. We thought about using WPF for the client version.
I have read that you can use Silverlight or XBAP to create a browser Version of the WPF application. AFAIK Silverlight is a dying Technology. How about XBAP? Would you still invest into this Technology?
The other solution would be to create two front end applications: The WPF application as an offline application and a web application (e.g. ASP.NET MVC) as a web application. Thought, this would mean that we would have to create two frontends (more work).
Is there another alternative?
Would it be better to create an HTML/JavaScript application (e.g. with AngularJ or something similar)?
As a former Silverlight Developer I can only recommend not to use Silverlight for new application development. Microsoft has suspended the further development of Silverlight and you will not get any new features (only security fixes). I really liked the technology and the similarity to WPF but for me it is deprecated.
Even some Browsers (like Chrome) do not support Silverlight anymore and you need a workaround to get it running (See also Chrome doesn't support silverlight anymore? How to solve this?)
Develop a Backendsystem that provides a REST-API (using ASP.NET WebApi as an example) for your clients and develop a Browser client application using modern HTML/CSS/JavaScript Frameworks. If needed/required a desktop application using WPF that consumes the REST-API.
Silverlight may be dying, but that does not mean you should avoid using it. Silverlight is still a viable technology that you can use, however browser trends seem to be phasing out Silverlight support. As far as I know, Microsoft Edge browser is no longer supporting Silverlight, so you will need to use Internet Explorer. This isn't the end of the world, but it's something to think about.
As for WPF, this too is being replaced by Windows Universal Apps, albeit slowly. However this isn't too much of an issue as the skills you have learnt in WPF are easily transferrable. WPF itself is not receiving as many new features as it used to, you could say it's finished.
It isn't always easy to keep up with the latest trends, and there will always be something cool and hip just around the corner, however one thing is for sure, the .NET Platform, including the new refactored Universal App APIs are here to stay, and won't die any time soon.
The current trend sees Web Technologies, such as ASP.NET playing a much bigger role than traditional desktop/tablet/phone applications. I would say that developing for a web browser is certainly a popular choice.
That being said, Windows Universal Apps is also a good choice, in fact, any technology that makes use of the .NET Framework is ideal.
As for my recommendation, I would suggest looking into an ASP.NET web application or Web API to which a desktop application, such as WPF (still a viable technology for enterprise applications) or Universal Windows App can hook into. An ideal scenario would be that both applications share the same back-end code, which is certainly possible as they both use the .NET Framework.
For your requirements, it may even be possible to avoid having to create a desktop application altogether, a web application can be hosted on a machine on the local network and clients can still use the web app. This is assuming that these clients don't have internet access of course.
TL;DR: .NET is legit, use ASP.NET.

Winform application for tablet?

I have a customer who wants an application for his travels where he can update an online DB, he doesn't want to buy a laptop, he wants a tablet or something similar. I have no knowledge nor desire in creating special apps for mobile devices, I want to create a winform just like I always did when it was targeted for pc. Tablet pcs (which from what I understood is just a regular pc?) are still very expensive in my country.
Is there a simple adjustment to make winform app run on a tablet with android or I have to build a special app for it? Any other solution? (I began in writing a web page for it, but it's much easier using winforms)
Native WinForms applications will not run directly on Android (or any non-Windows platform). You may want to begin by looking into MonoDroid for porting .NET code Android (and Mono in general for porting .NET code to non-Windows platforms).
A successful port across platforms will require that the application be structured in a very de-coupled manner. Core business logic in the abstract part of the application should be easily ported, but concrete implementations (specifically views and data/service access) will require some re-implementation for the different concrete platforms. So the overall architecture needs to be very de-coupled and pluggable.
Is a Windows tablet an option? Using various new technologies at Microsoft (Windows 8, Metro UI, etc.) you could build an application that would target multiple Microsoft-based platforms. This could easily satisfy the requirement of being "a tablet" (if the requirement isn't more specifically "an Android tablet"). However, it won't be the old WinForms style of applications.
In general you'll find that the industry has been steadily moving away from WinForms for, well, this exact reason. It doesn't port to other platforms, and there's a wide variety of platforms in demand today.
Forget convertion i was in a similar position years ago and i did something easier faster and i think smarter.
just make a winform with nice big controls take care of docking scaling anchors etc so that it will look nice and can be used with small smart devices.
Make sure you pass some start program parameters in your app and when a special parameter is passed instead of opening the main typically desktop form of your app open that new one in fullscreen.
Now the tricky parts isnelsewhere. I hade setup a tiny windows 2008 r2 server that allows remote apps to be run on it.
Create a user account that you will allow access to that server and only that app of yours with the specific parameter we talked about. (Ex myapp.exe -remote)
The what ever device he will get you can download the free app like 2x rdp or microsoft rdp in android. Make a new connection to your server (you can use any free ddns you like if you dont have a static ip) and connect with that windows server account you did before.
This account if has been properly setuped will only run your app and will only show that new mini winform you did..
The end user will do a simle click and from his internet connection will do a simple remote desktop that is linited to your app only. (Router configuration is needed once)
That way you will keep maintain just one source code and he will have low bandwidth cost and can continue his work without data loose in case of disconnection.
I use that for years in mobiles tablets and pos systems. Its fast its stable its secure its easy to maintain (nothing on the client side) and you don't waste months of learning wpf or doing xamarin converting.

WPF Browser Applications vs WPF Desktop Applications

I want to know what are the differences between a WPF Browser Application and WPF Desktop Application. I know that the browser application runs on IE and FF, but about the technology, is the same? I mean, we can do exactly the same by the two ways? (Of course, maybe with different UI)
I have this doubt because I'm looking for a book about WPF Browser Applications, but I only see books about WPF (I don't know if is in general or is only for desktop applications :S)
A WPF Browser Application uses exactly the same framework as a WPF desktop application and could run with the same UI, but with restrictions on trust which means that some APIs are not available. There a number of challenges in developing Browser application. A Browser app must be signed with a certificate. Some of the trust restrictions are not enforced at compile time and are only discovered at run time.
In the time since Browser Applications were first introduced, Microsoft developed Silverlight which uses a similar though not identical XAML technology. Silverlight is easier to deploy than a WPF Browser Application and may be appropriate depending upon your requirements.
A Browser Application not only runs in the browser but also with less authority. If you need to read and write local files then go WPF. Browser is good is you want rapid deployment to lots of PCs. Other wise I will take WPF Desktop every time. Most WPF books with have a chapter on XBAP. I like McDonald from Apress.

Windows FORMS for Intranet instead of Web Based

Can we implement a enterprise wide intranet application completely with WinForms instead of Browser based Web apps?
What are pros and cons and which is preferred over other?
Some stuff on my mind:
WinForms Pros
Richer user experience
More responsive
Usually easier to write interactive processes
Web App Pros
Centralized maintenance (easy to update, ...)
Centralized data access security
Easier to access over the Internet and on the go
Does not rely on anything except a browser on the client (so the client platform doesn't matter)
We developed a lot of winforms apps at the place I used to work. ClickOnce made things a lot easier in the case of deployment.

Resources