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 5 years ago.
Improve this question
We are running some heavy computations that can take a lot of time (even days). We have an architecture similar to that of a compiler (compiler + linker):
many blocks of data that need to be computed (they are computed by a solver.exe executable) - similar to a compiler
a gatherer application that combines all the results into the final form - similar to a linker
What I saw is that distcc does the distribution over the network quite nicely. Unfortunately distcc works under unix environment.
Is there a platform that can provide something similar to what distcc does, but under Windows (7+) platform?
LATER EDIT: Added C++ tag because if such framework exists we would benefit from our C++ coding experience.
I don't know of any free/open source solutions for Windows, but there are two commercial offerings which may help:
ElectricAccelerator from Electric Cloud. ElectricAccelerator was originally designed to accelerate software builds, but can distribute arbitrary processes to a network of computers for execution in parallel. Based on what you've said, it should be straightforward to use Accelerator for your needs. It is available on both Linux and Windows.
Xoreax Incredibuild was also originally designed to accelerate software builds, but like Accelerator, Incredibuild can distribute arbitrary processes. It is available only on Windows.
Disclaimer: I am the architect of ElectricAccelerator
FastBuild is free and opensource. It is available for Windows/Linux/OSX. It has its own language for build config files. You can setup workers on local network and a client that connects to workers and delivers work to them. FastBuild works for C++ and should probably work for any language, as you can setup any compiler executable and dependencies (compiler is distributed to workers, so that you don't need to setup compiler on every machine). The only drawback that I found is that in order to connect workers with clients you need to setup a Windows network share with writable folder, I think that's very inconvenient way to setup a build cluster, a better way would be to write a config with list of servers, maybe it will be fixed in the future. Also FastBuild cluster can be run only on local network, would be great to be possible to setup many computers though internet, it shouldn't be difficult to implement, also internet connection should be encrypted to secure secret sources.
Related
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've written a C++ software that can be used from the comand line and that, obviously, can be compiled and executed in different platforms (Linux, Windows and Mac).
This software in particular is very simple, it just displays a menu in the command terminal with a few options, takes input files (.csv) acordingly, runs in a few seconds, and prints back output files (also .csv).
Now I would like to write a platform-independent GUI for it without changing my original source code.
Which is the best language? C++? Java? Does anybody have experience or recommendations on this?
Thank you very much!
You will always have to change some of your C++ source code, in particular because GUI toolkits are all event-driven so are based upon some event-loop (often provided by the toolkit library).
Alternatively, you might have the GUI be a separate program (starting your command-line thing), communicating with some form of IPC -often pipes- with the command line program, which you probably still would have to extend
I suggest to use Qt5, which is a cross-platform (Linux, Windows, MacOSX, Android, ....) graphical user interface framework library for C++. If possible, use a recent version of Qt and code in C++11 (since closures become very useful).
Another approach (which still would require architectural changes) might be to make your software become a specialized web server, by using some HTTP server library like libonion or Wt (or perhaps POCO); then the GUI would be any recent Web browser. You'll probably need some web coding skills (AJAX, Javascript, ...) and you'll better understand the relation between continuations and web browsing. (See also this & that).
If your software is running quickly enough (e.g. less than some fraction of a second) you could make its core processing be a callback function (or a Qt slot) of your GUI program. But you should not have a function running for more than a few tenths of a second (otherwise, the user interface won't be responsive enough), at least not in the main GUI thread. Otherwise, split the computation in several parts or slices (e.g. "idle processing" in GUI toolkits, with CPS & coroutines being a relevant concept) to be sure that the event loop is frequently (at least 5 or 10 times per second) restarted, or adopt a multi-threaded approach (with a compute thread outside of the GUI main thread), which brings painful synchronization issues (e.g. you'll use mutexes).
BTW, the good question is not the "best" language but to find a good-enough approach, library and framework.
If You know C++ try QT,
Or look for different cross-platform GUI solutions.
You could expose some RPC-like services, and have the front end query your C++ back end. This way you could code your UI in another language, or even expose it on a web interface.
If you know C++ well,using WxWidgets would be good option.
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 looking for an IDE that I can collaborate with other people. I'd like to have real-time editing and color coordination (meaning if Bob is online and changes some code it will high lite his changes, similar to sharing a Document on Google).
I've tried searching via Google but I can't find anything that actually suits my needs. I'm currently a college student and have projects to do with other class mates, but using Pastebin is a bit cumbersome as I have to have an IDE open + a web browser, then copy paste, share etc.
Is there any IDE out there that will compile for C/C++, C#, .Net etc with real-time collaboration? If I have to set up a server on my desktop to make it work I have no problems doing so
I believe that in practical terms, using a distributed versioning system (like git, perhaps thru gitorious or github) is a wiser idea, at least for usual programming languages like C (and you need a social convention, at least like Bob is working on file foo.c or on function foofoo while Alice focuses on bar.c or on function barbar). You may want to communicate in real time using IRC, chat, pastebin, etc .... in addition of git. You probably won't edit the same line (or perhaps even the same function) two distant people at a time.
The semantics of programming language like C is not fit to the idea of a simultanous edition of a single source at the very same time. (Defining languages friendly to this co-development idea is still a research topic).
BTW, you don't need an IDE to code in C or C++ (especially on Linux, which gives you a lot of other tools emacs or perhaps vim or gedit or geany, grep, make, ctags, git, awk, ... to use together). A big lot of very large C or C++ free software programs (GCC, the Linux kernel, Gnome/GTK, Qt/KDE, LibreOffice ....) are coded by many qualified people without IDEs. This is IMHO quite significant.
I suggest to try:
http://moonedit.com/ - simple real-time editor
http://www.saros-project.org/DemoVideo - real-time editor for Eclipse (so you could use C++ there)
at http://en.wikipedia.org/wiki/Collaborative_real-time_editor there are plenty suggestions.
This is an old thread but in case others are still interested in this topic/capability there are a bunch of web based IDEs nowadays. If you Google "web ide", you'll get a decent list of collaborative web IDEs. For completeness, I'll list one that I've used and liked:
Cloud9 IDE
Aside from small homework assignments, you are better off using a version control system like GIT or Hg. Though they are overkill for most small homework assignments; especially if it's an intro class and most students are already having a hard enough time learning the programming material by itself.
One other note is that a web based IDE is not necessarily mutually exclusive to using VCS. You can use GIT inside of Cloud9 IDE.
Save yourself the trouble and use version control of some sort. Be it git, hg, svn, or what have you. Pick your poison, but this is a large part of what version control exists for. For communication? AIM, IRC, Skype, it doesn't really matter.
In this case, you can either have good version control, a good IDE, and a good Chat program or you can have one program that syncs your code, allows you to chat, and allows you to edit code, but does all of the above poorly.
Check out Squad:
http://squadedit.com/
Hosted service so setup is easy, and it supports C++ syntax highlighting.
Have a look at EFC, http://www.eclipse.org/ecf/.
More specifically Cola, http://vimeo.com/1195398.
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 2 years ago.
Improve this question
I'm trying to find a good library for calculating sha256. I found already a lot of options
crypto++ : http://www.cryptopp.com/
openSSL: http://www.openssl.org/
MIRACL: http://www.shamus.ie/
I would much prefer a library that's well-known, widely industrially used and works on all operating systems, rather than the most efficient one.
What do you recommend for me? (feel free to recommend on a library that I didn't mention here).
You should consider cryptlib
Works on all operating systems
Cryptlib is supplied as source code for AMX, BeOS, ChorusOS, DOS, DOS32, eCOS, µC/OS-II, embedded Linux, FreeRTOS/OpenRTOS, IBM MVS, µITRON, Macintosh/OS X, OS/2, PalmOS, RTEMS, Tandem, ThreadX, a variety of Unix versions (including AIX, Digital Unix, DGUX, FreeBSD/NetBSD/OpenBSD, HP-UX, IRIX, Linux, MP-RAS, OSF/1, QNX, SCO/UnixWare, Solaris, SunOS, Ultrix, and UTS4), uClinux, VM/CMS, VxWorks, Windows 3.x, Windows 95/98/ME, Windows CE/PocketPC/SmartPhone, Windows NT/2000/XP/Vista/Windows 7 (32- and 64-bit versions), VDK, and Xilinx XMK. cryptlib’s highly portable nature means that it is also being used in a variety of custom embedded system environments.
Widely industrially used
see Clients
It's not free for commercial use, though.
I've recently needed a small library to do some hashing.
After lots of searching, I found this little one : https://create.stephan-brumme.com/hash-library/ .
Its a tiny single-headered library (or bunch of standalone implementations really) that one can use. it supports sha1,sha256, sha3, etc.
Just include the header you need and you are done.
There is also s2n: a C99 implementation of the TLS/SSL protocols that is designed to be simple, small, fast, and with security as a priority. It is released and licensed under the Apache License 2.0.
s2n hash functions.
See also the implementation in Mbed TLS: https://tls.mbed.org/
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 5 years ago.
Improve this question
I was wondering if there was an API to do networking that would work on Windows, Mac and Linux. I would like to make a card game that 2 people can play through a TCP connection.
There are a few options for this, some easier to use than others:
APR (Apache Portable Runtime) - Very popular. Quite easy to use. Includes lots of additional features handy for network programming (threads, mutexes, etc.)
ACE - Popular among the embedded space. Personally, I found it quite a complicated API, and not very straightforward to use.
Boost - If you have a decent level of sophistication with C++ (templates, metaprogramming, etc.), then Boost libraries are generally very good. I'm not sure how popular the Boost asynchronous networking libraries are in the real world.
QT - Popular as a UI toolkit, but has a great set of threading, event management, networking libraries. IMO, this is by far the easiest to use.
It's important to stay away from using the berkeley sockets library, as the implementations across operating systems vary wildly, and you'll lose a fair bit of time to tuning them as you port your software across OSs.
My personal preference: APR.
most of the berkeley sockets api works everywhere.
You can use ACE or Boost.Asio:
About ACE:
Increased portability -- ACE components make it easy to write concurrent networked applications on one OS platform and quickly port them to many other OS platforms. Moreover, because ACE is open source, free software, you never have to worry about getting locked into a particular operating system platform or compiler configuration.
About boost:
Boost.Asio is a cross-platform C++ library for network and low-level I/O programming that provides developers with a consistent asynchronous model using a modern C++ approach.
The NRL has a really great library of networking methods that supports a large variety of platforms. They have excellent support from the actual developers on their mailing lists as well.
Protolib
For this simple application you can use the standard "Berkeley socket" functions that are mostly portable. You can also use Boost's abstractions.
If you needed security functions like SSL/TLS (which you don't need for a simple game I guess), there are open source libraries like OpenSSL, GNU TLS, Mozilla NSS.
I've got a feeling the Apache Portable Runtime might help with what you're looking for. Apache HTTPD used this library internally to abstract its platform-specific code so that the server code focuses on the logic and calls the methods in the APR and these translate to underlying operating system functions.
Of course, it might have more tools in it than you strictly need...
Synapse is good multiplatform network library. Open source and very easy to use.
http://www.ararat.cz/synapse/doku.php/download
SDL Net is a very simple abstraction layer on top of sockets, that's very easy to use. See http://www.libsdl.org/projects/SDL_net.
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 am writing a simple C++ application which might be installed on Linux or Windows, and which will connect to a database. I want my application to be compatible at least with Oracle and MySQL (or PostgreSQL).
Which C or C++ library would you recommend to handle the database queries: I am open to any library, whether it's very thin (just execute SQL queries) or very fat (a whole object persistence layer, clustering, etc.).
One library per answer, please. A little description (pros & cons) would be great. Thanks a lot.
I enjoy using SOCI, it's very C++ like. When it comes to performance with respect to Oracle database, it's comparable with native OCI. It provides backend to some RDBMS:
Oracle
PostgreSQL
MySQL
And some more in the CVS repository.
It's fairly simple to use, the documentation is thorough and rationale is pretty clear. It supports connection pooling, has nice extensible way of converting between datatypes.
I really liked QtSql
It has the advantage of being well designed and cross platform.
Disadvantage is that it's LGPLv3 (or commercial) licensed and that might not work for everybody.
You don't have to use a Qt GUI, but if you need a GUI library too it's wonderful.
This is exactly what ODBC was designed for. Yes, it was designed by Microsoft, but there are implementations on just about every platform and for just about every database product now.
I use SQLAPI++ and it's a great product. You can try it for free, it's simple to get started and their support is fantastic.
http://www.sqlapi.com/
Seriously? Data Providers.
Nothing beats customizing your data calls for each database. Generic solutions tend to have too many compromises IMO.
Actually, you would be wise to stay away from data provider API as time goes , you will suffer versioning and default parametrisation issues. Best would be to use SOCI when you really need full optimized backend otherwise stick to any facilitator like OTL4.0 for ODBC call.