So this question originates from a project my family is having done, which I can readily assume that you guys know relates to programming.
I'd love to get involved with the development in making this a very successful endeavor and I believe that much of the success will stem from the program itself. As I think about how it should be laid out and what not, a thought pops into my head. There must be elements/attributes that extremely successful programs share (ie. VLC Media Player vs. WMP, FF/Chrome vs. IE, Steam vs. any other digital distribution platform, etc.) whether it be the UI type, feedback form, DRM, update button, code type, etc.
Was there ever this one (or more) aspect(s) of a program that you've ever used that you were astounded by and wondered how every program could not possibly go without it?
So, what characteristics do you guys think amalgamate to make a very good looking, intuitive, efficient program of champions?
PS. Sorry if you thought my directive joke in the title was primitive. I tried!
Command line automation.
A custom and well-written string class.
typedefs of stl classes to your own type name beginning with the letter your program starts with
Tuuurb! <3
setjmp.h
No program is complete without it!
It must be easy to use and not bloated with useless features.
STL maps and vectors.
tetris easter egg
[QUOTE=Nigey Nige;31273440]tetris easter egg[/QUOTE]
Most excellent element.
If it's lightweight, doesn't litter my registry and starts quickly, I don't really care about the UI. Alternatively if it's a horrible behemoth (e.g. Visual Studio), I only tolerate it if I can have it open all the time and work with it constantly. Which means that the UI needs to be comfortable enough to use for multiple hours at a time, it needs to be stable, etc.
[editline]22nd July 2011[/editline]
I don't think Steam is a very good example. Personally I dislike many of the features (Steam Cloud, overlay, integrated browser...) and it just seems like a bloated shit, despite being pretty well done.
How is the overlay bloated shit? It lets you chat while in-game. Steam is made to play games.
[QUOTE=ThePuska;31274050]
[editline]22nd July 2011[/editline]
I don't think Steam is a very good example. Personally I dislike many of the features (Steam Cloud, overlay, integrated browser...) and it just seems like a bloated shit, despite being pretty well done.[/QUOTE]I agree that steam feels like a bloated pile of pants, but recently it's gotten a lot better, although it still locks up for about 10 seconds before launching a game.
[QUOTE=Jawalt;31284835]How is the overlay bloated shit? It lets you chat while in-game. Steam is made to play games.[/QUOTE]
It's definitely not minimalistic in design. I suppose someone might need the integrated browser, the clock, the achievement menus, the news services etc. but I don't. There's redundancy because connecting to servers, viewing achievements and reading news can often be done either through the game or via the overlay.
Chatting is the only thing I do with the overlay, but that's only one of the overlay's features, and the rest is useless features and thus bloat to me. I'd use a lite version if there was one.
The reason why I dislike Steam Cloud is because it's inconsistent with which settings carry over, especially when games themselves use multiple different files for settings. Heavily customizing something just tends to break your game if you try playing it on another computer. Luckily Steam lets you turn it off.
In Steam's defense they're not exactly shoving the overlay in your face, and it's disableable.
I am not a big fan os Steam cloud either because it syncs across OSes, when I played CSS on OSX, hardware mouse option was on, and my mouse did not work.
The only thing steam cloud should be saving really are save games.
[QUOTE=thomasfn;31288636]The only thing steam cloud should be saving really are save games.[/QUOTE]Save games and non-hardware related settings, IMO.
Some very good thoughts going on here, but going a bit off-topic.
[QUOTE=Downsider;31264360]A custom and well-written string class.[/QUOTE]
Why is this so much disagree? My string class can encrypt, decrypt, parse incoming packets, build outgoing packets, compress, decompress, tokenize, load and save to files, escape and unescape quotes, search inside itself, take apart substrings, and tons of functions for data packing and reading for byte-based formats and protocols. In my opinion, it makes sense to have all those things in a string class, because behind the scenes, they're all strings anyway :colbert:
[QUOTE=Downsider;31300617]Why is this so much disagree? My string class can encrypt, decrypt, parse incoming packets, build outgoing packets, compress, decompress, tokenize, load and save to files, escape and unescape quotes, search inside itself, take apart substrings, and tons of functions for data packing and reading for byte-based formats and protocols. In my opinion, it makes sense to have all those things in a string class, because behind the scenes, they're all strings anyway :colbert:[/QUOTE]
that is all waaaay outside the scope of what a string class should do
[QUOTE=Downsider;31300617]Why is this so much disagree? My string class can encrypt, decrypt, parse incoming packets, build outgoing packets, compress, decompress, tokenize, load and save to files, escape and unescape quotes, search inside itself, take apart substrings, and tons of functions for data packing and reading for byte-based formats and protocols. In my opinion, it makes sense to have all those things in a string class, because behind the scenes, they're all strings anyway :colbert:[/QUOTE]
The only things that your string class should do of those is tokenize, escape and unescape quotes, search inside it self and take apart substrings. The rest should be in different classes.
[QUOTE=Downsider;31300617]Why is this so much disagree? My string class can encrypt, decrypt, parse incoming packets, build outgoing packets, compress, decompress, tokenize, load and save to files, escape and unescape quotes, search inside itself, take apart substrings, and tons of functions for data packing and reading for byte-based formats and protocols. In my opinion, it makes sense to have all those things in a string class, because behind the scenes, they're all strings anyway :colbert:[/QUOTE]
This is a monolithic class. What if I just want to store some text? Nope, now I have this massive structure hanging around.
[QUOTE=Downsider;31300617]Why is this so much disagree? My string class can encrypt, decrypt, parse incoming packets, build outgoing packets, compress, decompress, tokenize, load and save to files, escape and unescape quotes, search inside itself, take apart substrings, and tons of functions for data packing and reading for byte-based formats and protocols. In my opinion, it makes sense to have all those things in a string class, because behind the scenes, they're all strings anyway :colbert:[/QUOTE]
Who told you that monolithic classes are good design?
Classes should be small and concise, and try to have only one responsibility. Where ever possible you should try to implement functionality external to the class, and use the public interface.
[editline]24th July 2011[/editline]
beaten by 3 people :frown: I should have refreshed
I would actually agree with Downsider if those features were in separate classes and he just tacked them on to the string class for convenience.
In my eyes, good design is something that works with minimal effort, and that's what I'm using my string class for. It's quick and easy to use. Self-documentation and having a perfectly modular project is cute and all, but getting the job done is the ultimate goal. When packets come in, I want to be able to transfer all that data into one string object, run a few commands to tokenize, and have my ultimate result.
In terms of efficiency, there is no difference, as there is no "massive structure hanging around". The only thing the string class actually holds in memory is the data of the string itself.
I can give you a perfect example of how this expedites development from the swear filter in the player's chat interface.
[code]int TServer::loadWordFilter() {
GString list;
int err = list.load(GString() << serverpath << "config/wordfilter.txt");
if (err) return err;
wordFilter = list.tokenize(" ");
return 0;
}[/code]
Well, shit, wasn't that really easy?
How about:
[code]void TServer::loadAllowedVersions() {
GString versions;
versions.load(GString() << serverpath << "config/allowedversions.txt");
versions.removeComments();
versions.removeAllI("\r");
versions.removeAllI("\t");
versions.removeAllI(" ");
allowedVersions = versions.tokenize("\n");
for (std::vector<GString>::iterator i = allowedVersions.begin(); i != allowedVersions.end(); ++i) {
int loc = (*i).find(":");
if (loc == -1) {
allowedVersionString << getVersionString(*i, PLTYPE_ANYCLIENT);
} else {
GString first = (*i).subString(0, loc);
GString second = (*i).subString(loc + 1);
allowedVersionString << getVersionString(first, PLTYPE_ANYCLIENT) << " - " << getVersionString(second, PLTYPE_ANYCLIENT);
}
}
}[/code]
I like my string class. It's convenient and fast to work with. If I was using so many different classes with these functions, it would be redundant and painful to write out. I'm not sure if you guys are self-taught, but whatever you're telling yourself is "proper C++" seems to be counter-productive, and you could be pushing out a lot more if you were a little more liberal with your design.
couldnt you just umm replace all whitespace with regex?
He probably has a fully featured regex engine built in to his string class too.
can his string class play crysis
[QUOTE=Jookia;31303259]He probably has a fully featured regex engine built in to his string class too.[/QUOTE]
No, I think his post said he emulated x86 and ran linuxes regex function for compatability in his string class.
[QUOTE=Downsider;31303132]In my eyes, good design is something that works with minimal effort, and that's what I'm using my string class for.
I'm not sure if you guys are self-taught, but whatever you're telling yourself is "proper C++" seems to be counter-productive, and you could be pushing out a lot more if you were a little more liberal with your design.[/QUOTE]
You do realize there has been a lot of researching about things like this, that can back up why having minimalistic classes is the better option? I've studied Object-oriented Design on college which took up exactly these kinds of issues.
Sorry, you need to Log In to post a reply to this thread.