Recommended implementation for a desktop web monitoring client? [closed] - programming-languages

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
Background
I have a business idea, one component of which involves a client that would be downloaded & installed by thousands of users via a web page.
Application Requirements
Version 1:
The application must:
monitor internet usage on the user's desktop with the following areas monitored:
browser used,
hours used
sites accessed
takes into account which browser tab is 'active'
Produce a report of this usage (in CSV or another easily exportable format)
It needs to be easily monitored by the user (e.g., in Windows via an icon in the system tray allowing the user to pause or stop the program).
Easily upgradable via automatic updates.
Needs to be lightweight with regards to memory usage.
Needs to be easily and quickly installed,
Must be able to be uninstalled completely.
Cannot adversely impact browser or user's system performance experience
For Version 2:
be able to present graphical outputs (pie & bar charts)
be multi-platform (version 1 will target Windows only)
Integrate an online component
Question
Given these requirements, what technical implementation would you recommend, and what platform/language architecture would you recommend? The key aspects are functionalities and broadly defined low impact on users. ETA or cost are less critical.

Sounds like C# would suit your needs, as long as it's limited to a Windows client.

I built something very similiar to this last year. I used C#. Initially it leveraged some of the 3.5 framework, but I had to scale it back to the 2.0 framework due to installation size restrictions. It's currently monitoring about 13,000 machines. collecting and sending back to a report server around 3MB of data per minute.
The client machines range from Pentium 4 boxes with 256MB of RAM running XP on up to dual core 2GB machines.
The app I built was not to be touched by the end user, so it runs as a combination of a windows service and a browser helper object plug in for IE. The BHO was necessary to capture exactly what was going on in the browser.
The only real challenges were in making it work under XP and Vista (all service pack levels) and in IE 6 and 7. XP and Vista have different security implications to take into account; IE 6 and 7 also have different access models.
Finally, we punted on dealing with Firefox or other browsers because the customer just didn't care about it.
UPDATE
Firefox only supports javascript, c++, and xul to code extensions in; using c# would be a complete PITA. I'd probably try javascript if it would do what I needed just because it's easier.
As far as Chrome, they only recently started supporting extensions (March 19,2009). You have to change the shortcut startup properties to even be able to run them. So, I'd probably skip that browser until it matures a bit. I imagine there will be a lot of changes to how plugins are built for it over the next year.
Concerning the amount of data per minute, that's an aggregate value. Each individual client only checks in once every fifteen minutes or so; or upon reconnect to the network when working disconnected. So, individual traffic is pretty low and has no impact on the user experience.
Firewalls
The reason a firewall really doesn't matter for us is that the data is transmitted back to our reporting server over port 80 using web services. If 80 is blocked, then they can't browse anyway so there's nothing to collect... As far as bandwidth, limit what you collect and broadcast back out. XML with long descriptive attribute / value names are NOT your friend.

Qt and C++ are good for cross-platform clients -- esp. if they need to be "memory frugal" in a way that no solution in a garbage-collected language (i.e. basically all others;-) usually is.

We need more information:
Is Time to develop an issue? With C#, you can quickly develop such an application; but it wouldn't necessarily have the same low level performance as C++. You could develop certain parts in C++ (the memory intensive bits) and others in C#, but then your clients would have to have the .NET framework installed; not to mention they could reverse-engineer the C# parts rather easily.
There's a project triangle, and we need to know which two are most important to you:

Related

How PWA can be useful rather than developing a Simple web Application [closed]

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 1 year ago.
Improve this question
I know I am very bad at asking a question so please tell me rather than downvote me...thanx
Q1: How Is Progressive Web Application Useful?
Q2: What Type of Application Should be Built using PWA is there any Specific Application which contains a lot of CPU utilization or Simple Static Pages with just small interaction with Server?
Q3: What should be the Application Architecture? In General?
There are a lot of reason for using PWA rather than web-apps or native applications.
A1:To answer your first question there are some articles found on internet, here I recommend some of them to read:
Google Developers PWA documentation
What is PWA?
Important tips about PWA
A2: There are no limitation and restriction on app you wanna develop. (Also you should pay attention to the key things like caching, which are considerable and important in native/web apps, too.)
A3: The architecture is very similar to web-apps except it must have some additional files:
manifest.json (Which is used to declare something like application name, the icons and etc. and it must be placed in the root of the project)
serviceWorker.js (Which gives you additional features like push notification, background works and etc.)
NOTE: As it obvious your Progressive Web App should be responsive to support different resolution of mobile screens.
PWA is not a single technology or a framework , set of features in web which helps to improve your application progressively.
It means if you have a modern browser you will get an awesome user experience else those features just not support it , your application will have existing features remains as it is.
Let's talk about what all the features we can use to enhance our existing or new web application .
You can bring native look and feel of mobile device apps on your web
pages. It's not the responsiveness of web page but you can access the
native features such as camera , accessing geo location, push
notifications.
Offline Capability when your internet connection get lost through caching.
Background Synchronization of data
Icon on the home screen , you don't need to install the application
from the app store to place it on your home screen.
There are three import things I want to summarize about the progressive web application.
Reliable : Application will load instantly even in a uncertain condition and provide offline functionality through caching.
https://developers.google.com/web/progressive-web-apps/#reliable
Fast : Respond quickly as possible based on the user interactions.
https://developers.google.com/web/progressive-web-apps/#fast
Engaging : Feels like a native app on mobile devices.
https://developers.google.com/web/progressive-web-apps/#engaging
Q1: Progressive web applications (particularly the service worker part of them) are useful because they can (a) be very fast and (b) work offline. Using a service worker to cache resources (HTML, JS, CSS) on the user's device can create almost instant page-load times on subsequent visits to your site. In addition, this can make your site available even without a network connection. Progressive web apps (with a manifest file) can also be installed on the device home screen, making them easily accessible, like native apps.
I'm not sure I understand Q2 and Q3, so I'll leave those for someone else to answer.

IO performance in windows and linux

We want to build a web service to return some images (like google map tiles).
And the source data is organized as the esri compact cache format,the key of our service is to read the tiles from the bundles.
I am not sure how to choose the platform,windows or linux?
It is said that the linux have a bettor IO reading/writing performance than that of windows.
However java is our only choose if we choose linux,so I want to know if there is any points we should know to impove the IO reading performnce in linux?
PS:
In winodws platform,we will build the service based on .net4 using c#,and deploy the service use iis.
In linux,we will build the service using java (maybe based on spring mvc or some other mvc framework),and deploy the service using tomcat.
Update:
We may have the following source compact files in different folds:
L1
RxxCxx.bundle
RxxCxx.bundlx
L2
RxxCxx.bundle
RxxCxx.bundlx
And the request from the client may looks like this:
http://ourserver/maptile?row=123&col=234&level=1.png
For this requst,we will go in to the fold L1 since the level is 1,then read the RxxCxx.bundlx file first,since this file is the metadata that till tell us the position(the offset and length in RxxCxx.bundle) of the data for render the image(row=123&col=234),then we will read the RxxCxx.bundle according to the offset and length. Then we render the data to an image by write them to the response and set the content type to "image/png" or something else.
This is a whole procceed to handle a request.
Then I wonder if there is any documents or exist demos which can show me how to handle these type of IO reading?
The only situation where you have to have Windows servers in your environment is when you choose MS SQL Server DBMS (it is almost a Sybase but is a way cheaper), in which case have Windows box for the DB and *nix server for middle tier.
There are many situations where Windows can be used. Beginning with the declaration "have to have Windows" reveals an existing bias and is then followed by many groundless statements. But at least you clearly recognized this as the case.
Java is the best technology for millisecond grade middleware, mainly for the amount of mature standartized open source technologies available. Everything from coding (Eclipse, NetBeans, Idea) to manual (ant, maven) and automatic (teamcity, hudson/jenkins) builds, testing, static code analysis is there, is standartized, is open source, and is backed up by a multimillion size community.
I feel it necessary to say Visual Studio/C# (because OP mentioned as an alternative) offers everything you mentioned above with the exception of being open source. That said, the .NET Framework (or .NET Core) is now open source. Get information here. Based on your above comment, I think I can conclude that the only viable solutions are available through the open source community.
Quote I once heard that has a lot of truth: "It's only free if your time is worthless."
Also, counting the entirety of the open source community is a bogus argument. You'd have to take one development tool/API and compare the community support with another. For example, compare the community size/quality for Visual Studio with that of Eclipse. Or that of the .NET Framework vs. Java.
By the way, I've experienced no better intellisense implementation than with Visual Studio/Windows. When Eclipse does work you have rely on the quality of the open source libraries you reference to have anything meaningful. I've found the .NET Framework requires fewer 3rd party libraries than Java to accomplish the same goal.
Linux is the best server side platform for performance, stability, ease of maitenance, quality of the development environment - an extremely powerful command line based IDE. You can expect multimonth uptime from a Linux server, but not from Windows.
We have many Windows servers running services processing "big data" that have a system up-time since 5/30/2014 (nearly a year) and several more running without interruption since 2013. The only times we experience up-time problems is when hardware is aged/failing or the application-layer software we wrote contains bugs.
Tomcat/Servlet (or Jetty/Servlet) is a classic industrial combination in many financial institutions where stability is the #1 priority.
IIS is also used: job posting for IIS developer at financial institution
And lastly, the IO performance concern: a high quality user space non-blocking IO code will be CPU and hardware bandwidth bound, so OS will not be determining factor. Though fancy things like interrupts affinity, threads pinning, informed realtime tuning, kernel bypass I believe are easier to do on Linux.
Most of these variables are defined by each OS. It sounds like you have a lot of experience with threads, but also I would posit the developer can optimize at the application layer just as easily in both environments. Changing thread priority, implementing a custom thread pool, configuring BIOS, etc. are all available in the Windows world as well. Unless you want to customize the kernel which Unix/Linux allows, but then you have to support your own custom build of Unix/Linux.
I don't think commercial software should be vilified or avoided in favor of open source as a rule.
I understand this may sound as a groundless statement, but use *nix unless you have to use Windows. The only situation where you have to have Windows servers in your environment is when you choose MS SQL Server DBMS (it is almost a Sybase but is a way cheaper), in which case have Windows box for the DB and *nix server for middle tier.
Java is the best technology for millisecond grade middleware, mainly for the amount of mature standartized open source technologies available. Everything from coding (Eclipse, NetBeans, Idea) to manual (ant, maven) and automatic (teamcity, hudson/jenkins) builds, testing, static code analysis is there, is standartized, is open source, and is backed up by a multimillion size community.
Linux is the best server side platform for performance, stability, ease of maitenance, quality of the development environment - an extremely powerful command line based IDE. You can expect multimonth uptime from a Linux server, but not from Windows.
Tomcat/Servlet (or Jetty/Servlet) is a classic industrial combination in many financial institutions where stability is the #1 priority.
And lastly, the IO performance concern: a high quality user space non-blocking IO code will be CPU and hardware bandwidth bound, so OS will not be determining factor. Though fancy things like interrupts affinity, threads pinning, informed realtime tuning, kernel bypass I believe are easier to do on Linux.

Do you use 30 day trial servers to do development work? [closed]

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 know this is an odd question but I need to ask it to get information to present to a client. Their lead network admin wants me to work on 30 day trial servers like Sharepoint & SQL Server to develop projects for their clients. While I will do as they ask, I'm not convinced this is the best way to go about developing software or troubleshooting previously developed software. To be honest, I've never worked on custom development for any server/software using a trial version.
What arguements are there for and against working on trial software/servers?
Pro: It enables you to mock up a concept and see if it seems like the development path will be easy before you shell out large amounts of money for the real deal.
Cons: It could trap you in a vicious cycle of wiping your virtual machine and re-installing the OS, the trial version, and your product (you do use source control, correct?) if they are hoping that this will alleviate the need for ever paying for the real product.
Suggestion: If you don't mind unsolicited advice, then I would determine why the lead admin wants to use the trial versions -- and then go from there. Until you know the reasons you cannot respond to them.
If they are doing it for the pro reason, then determine if you feel comfortable working with the possibility of switching technologies 30 days into your build. (Can you do it efficiently?)
If they are doing it to avoid spending money, present some of the alternate open source / free options that you are comfortable developing with. If they will not change their modus operandi at that point, then do what is necessary, knowing what you will be walking away from / getting in to.
(And if you don't mind one more bit of unsolicited advice -- if they are doing it for the con reason and will not change WALK AWAY)
Point them at BizSpark. Microsoft is begging people to use their stuff. A hunny will get you everything on the map for 3 years or until you start making money.
Oh, to answer your question: If I need to get funding for technology not present in the infrastructure or to do a proof of concept I would not think twice about using evals. That is what they are for. I would be evaluating the suitability of the product for use with my designs. Seems easy to me. Maybe I am just, hold on, i have to give my parrot a cracker... ;-)
Apart from the ethical arguments, there are practical ones:
What are you supposed to do if development overruns? Start reinstalling everything, wasting several days doing so?
Additionally, if the client is so strapped for cash that they want to do this, how can you be certain they will pay you (either due to cash flow problems, or simply because of their shady ethics)?
I'm pretty sure that that kind of use is a violation of license terms. Trial editions of servers are for evaluating a product. And if you are in fact creating a product, then you have gone way beyond evaluation.
I would never work under such terms. If you are developing a concrete product, get proper licenses for the development tools. I know that the developer edition of SQL server is not hugely expensive (compared to a version licensed for production use), so I would imagine that the same counts for Sharepoint.
And then there is of course, as already mentioned, what do you do when the trail period expires?
I wouldn't mind doing this so long as the job is shorter than 30 days. Make sure your work contract they're paying for the time worked and not specific deliverables, because your deliverables are time-bombed.
Also be prepared to walk away. If this company doesn't have resources to get the right software, you don't want to be there longer than 30 days anyhow.
Microsoft provides several pre-built virtual machines, that contains full stacks.
(Server 2008/Sql 2008/Sharepoin) (Server 2003/Sql/Project Server) etc.
They are time bombed, but often (not always) Microsoft will provide a new image after the time out.
The benefit of using these images is that they are already configured and good to go.
As an example here is a beta of sharepoint 2010 (http://www.microsoft.com/downloads/details.aspx?FamilyID=0c51819b-3d40-435c-a103-a5481fe0a0d2&displaylang=en).
If the project has a quick timeline, it provides the developers access to the configured stack right away, with no ramp up time of building new virtual machines.
Esp when working on beta/early release software this is great.
The SQL Server evaluation's download page mentions that the evaluation license is good for 180 days, and specifically advertises it as a tool you can use for mission-critical applications. This tells me MS is fine with your using it for development work.
To answer a question with more questions:
How long does this project run?
What phase of the effort are you in now?
Is this an internal/proof-of-concept project, or something that your customer(s) will be using for a long time?
If you are going to need to use SQL Server for Operations & Maintenance support months past the initial evaluation period, you ought to get a license for the full version of it. And also consider what your customers are using so that you can reproduce any bugs that come back from them.
I don't think it's ethical to continually renew evaluation licenses to have a longer evaluation period. Companies call them "evaluations" as a try-before-you-buy, not a keep-trying-without-buying.
I'm not sure what others are seeing as unethical here. If the project is short enough to be completed within the 30 day trial, I don't see any issues. I think that's a great use of trials - if they can't handle a clients applications then they aren't a good option and you can use something else.
I think others here have given some good advice regarding the longer than 30 days projects and some good contract ideas.
How in-house do the servers have to be? Would a hosted solution work for them? (Dreamhost, Amazon Web Services, whatever)? Some hosting systems provide pretty complex machine images (lots of stuff pre-installed--definitely AWS, presumably most others), decreasing setup time/effort. I think those come with licenses, though I don't honestly know. Plus, in at least some cases, you (they) only pay for what you (they) use.
Obviously no good if the physical machine needs to be in-house, or if things are otherwise super-sensitive.

when to start performance tuning a website [closed]

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
i have a asp.net mvc website and the volume of traffic is increasing. I have the site pointing to a backend sql server 2008 database.
at what point, do i need to figure out what the bottleneck of the system and look to review if i need to load balance machines, or change the way i am doing database connection management.
are there specific tools and thresholds that are indicators that the current model isn't scalable or is hitting a breaking point (besides just observations of a slow site.
When you start noticing performance issues.
There are some very easy things you can do to increase performance with so little work, it's easier to do them that see if you need to yet ;)
First and foremost is putting all static images and other media on a separate server. That eliminates a whole lot of queries on the boxen running the dynamic parts of the web server.
Next in line is make sure you are using as many hard drive spindles as possible. Of course you want your database on a separate machine, let alone a separate hard drive, but you also want your web server logs written to a separate hard drive. That prevents a lot of jumping around of the hard drive heads.
As far as "how do you know when you need to performance tune", I will give a different answer than George Stocker: When there is a cost associated with your performance that outstrips the cost of looking into it. I say it this way because your customers may be a little unhappy if your website is a little sluggish, but if it doesn't prevent anyone from using it, or recommending it to others, then it may not be worth looking into. People put up with sub-optimal performance all the time.
There are a plethora of tools available to address the plethora of possible bottlenecks. A decent performance tuning strategy starts with measurement and consistent instrumentation of the given system.
But performance tuning requires precious time and resources, and should only be pursued when it gives you the most bang for the buck, i.e. it provides the greatest improvement to achieving your website's objectives given the work required. If your website supports (or is) a business or organization, you must continuously evaluate the business landscape and plan the next allocation of resources. This is entirely dependent on the particular industry.
An engineer might focus on continual refinement of an existing system, but the project commissioners (be they an external client, or your company's management) must weigh the costs and benefits of all types of development, from improving an existing featureset, to adding new features, to addressing technical limitations affecting product usability (including performance issues). That's not to say engineers have no say in resource allocation, but their perspective is just one of many contributing to success.
When you have doubts that the website would survive a doubling in max usage. One common line of thought where I am from is that you should have the performance capacity to support at least 2x the number of users you expect.
Determining whether or not you can support 2x is something better left to load testing though, rather then speculation. One comment from your other comment though: chances are a website performance problem is going to affect everyone using the web site, including you on a local machine... unless it's a bandwidth problem and you're connected to a local network. Barring cable cuttings, it's not going to be 'just the people in Asia'.

Why is Internet Explorer 6 still a corporate favorite in some organizations? [closed]

Closed. This question is off-topic. It is not currently accepting answers.
Want to improve this question? Update the question so it's on-topic for Stack Overflow.
Closed 13 years ago.
Improve this question
... or
How can I convince my organization to ditch Internet Explorer 6?
Having to maintain Internet Explorer 6 compatibility when developing web applications is a nightmare - but until my client decides to ditch it as the official browser, I am stuck with it. I am trying to convince our system administrators to change. I've seen a long list of arguments against using Internet Explorer 6 in any environment, and I am trying to anticipate their arguments rebuttals.
So far, the only perceived advantages I can see in Internet Explorer 6 are:
Central management through group policies
Legacy application compatibility
Both of these are addressed by Internet Explorer 7 or later (AFAIK).
Are there any advantages that Internet Explorer 6 has that are not already addressed by Internet Explorer 7 or later?
Internet Explorer 6 has been around for ages, and the vast majority of websites and web applications work correctly with it.
In order to change to a different browser (which, BTW, will probably be Internet Explorer 7), you need to, first of all, do a cost benefit analysis to justify this decision to everyone's bosses.
A really high level summary:
Cost:
Test all web applications.
Check all third-party websites actually work in the new browser.
Check all other software, to see if there are any underlying issues with moving to a new browser.
Benefits:
Multi tabs?
Honestly, I can't see this happening, unless a corporation is doing a desktop refresh which happens periodically.
Why bother changing if IE does what it's supposed to do: browse the internet. The so-called benefits of newer browsers, which to us actually mean something, have little to no value in the minds of the people who run the corporate environments you describe.
In other words: ignorance and/or apathy
I wouldn't exactly call it a "favourite" among any organisations. In my mind, it's simply that large companies consider it a big effort to upgrade everyone to IE7 (or in fact IE8 now that it's recently been released). It's a benefit versus cost decision that many executives seem to think has the simple answer that it just doesn't matter to the business. This may even be the truth in many cases if there's no system set up for automatically upgrading the (possibly vast number of) computers on the network. Many people (including myself) would argue having even a moderately decent browser (i.e. IE7 onwards, Firefox, or Safari) is would be a worthwhile thing for any business. The fact that IE8 has just been released, which now makes IE6 outdated by two versions is certainly going to encourage companies to start upgrading. The problem here is that as long as there's a significant market share for IE6, the vast majority of web designers are going to keep on designing sites to be compatible with IE6, regardless of it's poorness as a browser. Finally, if you're really keen on getting everyone to upgrade from IE6, I ought to point you to the Stop living in the past website. Perhaps if you campaign strongly enough within your organisation, you may just convince the people who make the decisions to upgrade, though I wouldn't like to bet on it...
The switch from IE6 is a painful one, because they would have to apply it to every single computer in the company.
Depending on the number of exployees, that becomes a logistical nightmare.
Also, they will commonly use whatever browser comes with the default install of the OS they use for new computers.
Changing default programs introduces unknown risk, and the benefit of switching must outweigh that risk. Currently the hassle of attempting to upgrade every single computer probably outweighs the convenience of having a better browser, especially when most of the users will not take advantage of any of the new features.
Unless they find any strong business case or advantage I don't think a company will agree to spend time on upgrading. What is the use? Also Internet Explorer 6 is little faster than the new versions and business users (who don't care about the version as long as it does the job) may complain.
If you are a developer then you have the reason to have all/latest browsers installed.
I thought mine was the only one to use Internet Explorer 6 ;-)
We actually have a bunch of legacy applications on our intranet, some written in house, others that we quite a lot of money for, which don't work well on IE7 (or IE8, or Firefox, or Safari, or ...)
Yes, Mercury, I'm looking at you...
IE6 market share is rapidly dropping, so I'd expect that in a year or so authors of AJAX UI libraries will stop testing against IE6 (just like now they don't test against IE5.5). When that happens corporations will have no choice, but to adapt.

Resources