What is the name of this software design behavior? [closed] - performance

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
When a software has a set of functionality where some of the functionality is provided with multiple implementations and the software automatically decides which one to use. So for instance:
An image editor that has image effects and some its effects like Blur, Median, etc is provided with both CPU and GPU implementations but not directly exposed to the user as options but rather the software decides which one to use based on the user's hardware.
Or in another case where the software chooses which sorting algorithm to use based on the data it has on the items to sort.
I guess this only happens in performance related features.
But what's the name of this feature/idea when a software has this workflow?
Is it called transparent execution? Or context sensitive? I seem to recall a term used to describe this behavior.
EDIT: Btw I am also interested in hearing the marketing term for this? Like ProgramX supports transparent execution.

This is strategy pattern.
You pass the same object to multiple implementations where the difference is the algorithm. This is a classic case of strategy pattern.

Sounds like the facade design pattern, from the GOF book page 185:
Provide a unified interface to a set
of interfaces in a subsystem. Facade
defines a higher level interface that
makes the subsystem easier to use.

Related

How is the impl. of Rust's channels functionally different from Go's impl. of channels? [closed]

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 3 years ago.
Improve this question
I specifically intend to use the channel functionality of either language in developing a scalable web service. I am unclear at present about which one would be easier to implement but also which one would better fit the intended design, help maintain uptime, require minimal overhead etc.
I understand that the Go implementation uses CSP methodology, though I'm unclear exactly what the Rust implementation is based on and whether it is even analogous to the Go version.
Is there any similarity or are they too different to compare to each other?
Are there use-cases where both implementations would operate mostly the same?
There is no such thing as the Rust channel.
Whereas in Go channels are a language concept provided by the Go run-time, in Rust channels can be implemented in a library, and therefore there are as many channels implementations as there are libraries, each with different goals and trade-offs:
There is one MPSC (Multi-Producer, Single-Consumer) channel in the standard library.
There are MPMC (Multi-Producer, Multi-Consumer) channels in the crossbeam ecosystem and in the async-std crate1.
All of those implementations offer different interfaces, capabilities, and performance trade-offs.
1 Not an official crate, simply a port of std functionalities to async.

How is UI Evaluated? [closed]

Closed. This question needs details or clarity. It is not currently accepting answers.
Want to improve this question? Add details and clarify the problem by editing this post.
Closed 4 years ago.
Improve this question
I am new to software engineering and also I like to learn whatever new. I must be very thankful if someone help me to provide further information about How is a UI evaluated?.
Any help regarding to this matter is highly appreciated.
In common, evaluation of User Interface can be based on three common elements
• Functionality
• Aesthetics
• Performance
Functionality
Is the application usable?
Does it enable users to complete tasks?
Aesthetics
Style
How it influencing the users
How shown and presented?
How colors complement each other?
How UI elements convey their meaning?
Performance
Measured not only by speed, but also reliability.
Reliability (Even though an application looks good and feels great, crashes repeatedly, it likely won’t be very successful)
Should provide a user with full confidence.

Parallel computing: from theory to practice [closed]

Closed. This question needs details or clarity. It is not currently accepting answers.
Want to improve this question? Add details and clarify the problem by editing this post.
Closed 5 years ago.
Improve this question
I studied how to optimize algorithms for multiprocessor systems. Now I would understand in main lines how these algorithms can be transformed into code.
I know that exist some libraries MPI based that helps the developement of software portable to different type of systems, but is right the word "portable" that makes me confused: how the program can be authomatically adapted to an arbitrary number of processors at runtime, since this is an option of mpirun? How the software can decide the proper topology (mesh, hypercube, tree, ring, etc)? The programmer can specify the preferred topology through MPI?
you start the application with a fixed number of cores. Thus, you cannot automatically adapted to an arbitrary number of processors at runtime.
You can tune your software to the topology of your cluster. This is really advanced and for sure not portable. It only makes sense if you have a fixed cluster and are striving for the last bit of performance.
Best regards, Georg

Is there some reliable way of detecting fake Facebook profiles [closed]

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 9 years ago.
Improve this question
I believe this could be interesting for many Facebook developers. Is there some reliable way of detecting fake profiles on Facebook? I am developing some games and applications for Facebook and have some virtual goods for sale. If player wants to play more he can create another profile or many others and play as much as he like. The idea here is to somehow detect this and stop them from doing so.
Best Regards!
Put validation on no. of friends.. if no. of friends < A PARTICULAR THRESHOLD, disallow user, else continue. Well.. That's only an opinion, not a solution.. :)
You can try using anomaly detection.
Make your 'features' number of likes/spam/friends/other relevant features you've found helpful, and use the algorithm to detect the anomalies.
Another approach could be supervised learning - but will require a labeled set of examples of "fake" and "real" users. The 'features' will be similar to these for anomaly detection.
Train your learning algorithm using the labeled set (usually referred as training set), and use the resulting classifier to decide if a new user is fake or not.
Some algorithms you can use are SVM, C4.5, KNN, Naive Bayes.
You can evaluate results for both methods using cross-validation (this requires a training set, of course)
If you want to learn more about machine learning approaches, I recommend taking the webcourse at coursera.

How to write technical requirements [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 3 years ago.
Improve this question
What is the right way to write technical requirements for the UI component in an application? I guess it's not clear to me whether the technical requirement should dictate how the UI should be implemented or it should be as general as possible and describe what are required to satisfy the functional requirements and forget about the implementation details.
Here are my specific questions:
Should it state what technology the UI will be implemented in? (eg, ActiveX, WPF, HTML).
Should I describe the layout, the colors? (given that that can change)
Is it necessary to describe how the data is presented? (eg, does it need to say "data is displayed in a table or list format" or "a scrollbar shall appear is data cannot be fit on the screen"?)
Do I need to describe how the UI should react to user input if that is a functional requirement? (eg, the functional requirement says "it shall be clear to the user which action is current active"... should the technical requirement say "the button shall change color to Red when user selects option a.. Blue when user selects option b.. etc")
Is it necessary to state things that are common sense about the UI? For example,"it shall be position in such a way the entire content is visible"? or "it shall have shadow so that it stands out from the rest of the screen"? (note: these are not functional requirements but they apply to any UI in general)
There are no concrete rules here. The true answer is that it depends on what your team is composed of.
If the person writing the requirements is the technical lead, then it may well dictate the technology choice.
If however the person writing the requirements is a non-technical manager, then it's generally in the best interest to let the technical team decide on specifics while the manager merely dictates specific requirements that must be implemented.
Additionally, things like layout and colors probably don't have a place in technical requirements. Someone (whether it's the development team, or if available, a designer) should come up with mockups or wireframes to review with the users. This is an iterative process and can usually be done in parallel with some of the initial development (ie. developers can usually start writing domain models, database schemas, etc. while the designer iterates the UI with the users/stakeholders).
IMO, obvious things should be left out as they are just clutter, however, business rules such as validation, and screen states should absolutely.
Again, I want to reitorate that it entirely depends on the makeup of the team. The requirements doc is meant to communicate from one tier to another. And all decisions should be left to the tier best equipped to make those decisions.

Resources