|
Quote: CPP files are hateful. You have duplicate too much. Too many potentials for getting that wrong and it's annoying to have to flip back and forth between files if you forget a signature while making the CPP.
With the right tools none of these things ever become an issue. And the advantages of having clean and minimalistic headers easily outweighs the minimal overhead of maintaining additional files and maybe having to actually bind a library to your program rather than just header files.
But as I said earlier, you can only start to really appreciate the benefits of cpp files once the projects get bigger, so I guess we'll never share the same view on this. Let's just leave it at that.
GOTOs are a bit like wire coat hangers: they tend to breed in the darkness, such that where there once were few, eventually there are many, and the program's architecture collapses beneath them. (Fran Poretto)
|
|
|
|
|
Stefan_Lang wrote: I guess we'll never share the same view on this
I might, if I had the same requirements you did. I wouldn't like it, however.
I'm happy to agree to disagree though. However, you said something that particularly caught my interest:
Stefan_Lang wrote: With the right tools none of these things ever become an issue.
Okay so I use VS Code primarily for C++ development just because I like it better than Visual Studio for that.
Now, it's easy enough for me to open up another window to the right for my header file.
But what about the code duplication. You said you had tools for this? I'd love to know what you use.
Real programmers use butterflies
|
|
|
|
|
I haven't tried many tools, but VisualAssist for Visual Studio offers a function to change the signature of a function. This will change the function not only in the header and cpp file, it will also rename (if needed) any function calls in the rest of the code, and if you add a function argument, it will insert ToDo comments to help you locate code you need to adapt.
Not sure whether there's a version you can use with VSCode.
GOTOs are a bit like wire coat hangers: they tend to breed in the darkness, such that where there once were few, eventually there are many, and the program's architecture collapses beneath them. (Fran Poretto)
|
|
|
|
|
P.S.: here's a description of the function I mentioned: Change Signature[^]
GOTOs are a bit like wire coat hangers: they tend to breed in the darkness, such that where there once were few, eventually there are many, and the program's architecture collapses beneath them. (Fran Poretto)
|
|
|
|
|
Quote: and all the headers have to be included in a very particular order Don't feel bad. You tried. If any build order that satisfies the partial ordering determined by their #include directives doesn't work, they deserve not to be helped, but horsewhipped.
modified 2-Jul-21 18:01pm.
|
|
|
|
|
It could just be me. I'm rough around the edges using make and cmake is almost entirely new to me.
But when i've tried to yank all the source files out and assemble them myself, i can't get anywhere at all.
One of the problems is that you have to include the main header and then a secondary header this way
#include <freetype/ftbuilds2.h>
#include FREETYPE_H
or some such
It's a zoo
Real programmers use butterflies
|
|
|
|
|
I feel ya...
Sometimes, when something is too complicated for what it's worth, I also like to roll my own!
However, I am surprised the difficult part is the build process, how disappointing!
|
|
|
|
|
It's just that I don't have an author who can sit me down and walk me through the source tree.
If someone had a few hours to do that with me I could do it no problem.
The issue - or one of them is that the includes don't include prerequisite includes - they expect them to have already been included upstream so..
in one file you might have
#include <stdlib.h>
#include <math.h>
#include <string.h>
int do_something(float x,float y);
and then later on you have another include file that uses do_something() without ever explicitly including the first file. That only works because some file included both of them before. Does that make sense?
So basically I can't unwind which includes depend on what, much less figure out what all the defines are supposed to be without completely reverse engineering their make and cmake files.
And there's many of them, and it's just a maze.
Real programmers use butterflies
|
|
|
|
|
Ha yes that jog some memory... I did have similar problem with GNUstep long time ago....
Which reminds me, on a totally different, yet vaguely related topic, I really like how they handle the dependency in the new C# project file format in visual studio..
|
|
|
|
|
I haven't played with it yet. I've only been using VStudio a little here and there. I've been neck deep in C++ and I use VS Code for that.
Real programmers use butterflies
|
|
|
|
|
"If you build it, they will come..."
For/From an (Indie) software development perspective, does this sentiment even slightly hold true?
Assuming you have identified some need and have found a good/efficient way of providing a (software) solution that works well and is user friendly, how do you get people to:
0) Find it
1) Try/Evaluate it (for free)
2) Get sufficiently engaged in it (i.e. post on message boards / forum / read documentation)
3) Buy or license it
asking for a friend..
|
|
|
|
|
My perspective, from a somewhat different point of view:
When I create a new way I want things done I introduce it gently at first and then cut the cord and the old way is gone. I already learned years ago, that where I work, users want to do it they way they were doing it = even if it's stupid, irrational, and/or mistake-prone. I'm not overstating this.
So, pretty much I, my fearless leader, and our upcoming (welcome) third wheel make the decisions ourselves and that's how things are.
"Resistance is Futile"
Ravings en masse^ |
---|
"The difference between genius and stupidity is that genius has its limits." - Albert Einstein | "If you are searching for perfection in others, then you seek disappointment. If you seek perfection in yourself, then you will find failure." - Balboos HaGadol Mar 2010 |
|
|
|
|
|
As Jerry Pournelle used to write in the Chaos Manor column in Byte magazine (Yes I know I’m old!) -
‘Good enough is the enemy of better.’
If you can't laugh at yourself - ask me and I will do it for you.
|
|
|
|
|
I'd want more context for that quote.
I interpret it as meaning that a less-expensive product which is "good enough" will out-sell a "better" product which costs significantly more.
Just as MS-DOS outsold OpenVMS, and Ford outsells Porsche -- in numbers at least, if not dollars.
If so, then the quote also applies to "feature creep"; few will pay more for a product simply because it has more features if those features aren't required.
The result being that a developer who's trying to compete can't simply keep adding features in the hopes of gaining market share.
The quality (is job one) and price must remain competitive.
|
|
|
|
|
So let me throw this out there...
Hypothetically...
My software can do perhaps 10% of the things that my (closest/big) competitor can do, but I am offering it at 1% of the cost.
Assuming that the user base spans a sufficiently broad spectrum (not all of them need all of the features), if they currently have 10k users, would you expect my user base to be 100 or 1M?
|
|
|
|
|
I doubt you'd be pulling current customers away from them.
Would your mother buy a copy?
|
|
|
|
|
wasn't strictly speaking about pulling away, thinking about new customers given a choice...
No, she wouldn't. But my dad has asked for a key... probably just being polite
|
|
|
|
|
The bigger issue (in my opinion) is that if it is at least moderately successful, others will try to duplicate it and undercut you. You will have done a lot of market research and such for them at no cost. Feedback about what's good/bad/missing will be available for others to react to.
Your ability to respond to feedback and make updates available quickly will be critical in staying ahead of the competition.
Releasing a product doesn't mean you'll have time to relax.
|
|
|
|
|
The only place where success comes before work is in the dictionary
"I have no idea what I did, but I'm taking full credit for it." - ThisOldTony
"Common sense is so rare these days, it should be classified as a super power" - Random T-shirt
AntiTwitter: @DalekDave is now a follower!
|
|
|
|
|
I assume you're asking about software that would be released commercially. I also assume there's no budget for advertising, so it has to spread by word of mouth. Two common approaches are to offer a free version of the software that (a) expires after a trial period or (b) only provides a subset of the full functionality. Both approaches aim at getting users to pay for either a license or the extra features.
|
|
|
|
|
Your assumptions are correct...
I see the issue as not being able to sufficiently attract people in the first place. Yes, advertising is a big deal, but short of giving google some $100/mo to get clicks, low cost software cannot justify high cost advertising, especially for a niche app.
The Freemium model does partially work, but I have found that the free, time limited trial is often a better way to go.
|
|
|
|
|
Do you have experience offering a limited trial? If so, I'm curious how you enforced it, and more curious as to how you mitigated the risk of the executable being hacked to make it permanently free.
|
|
|
|
|
Yes, some..
the previous approach I took was to use a 3rd party library (cryptoLicensing) which gave me so~so results. Nothing truly problematic, but some inflexibility and other issues related to how I was/am using it.
The current approach I am using is a completely hand-rolled option which requires an online user account (on my domain) and the executable interacting with the server on a random basis. Don't want to give away too many details, but there is randomized 256bit encryption between the app and the server and the exe is obfuscated, with the main library 'testing' the others for their integrity during use. Not completely un-hackable, but even with knowledge of the code, I am not sure I could do it, even if it wasn't obfuscated.
So the basic time limit is enforced by the server side (to prevent users turning back their clocks and similar).
|
|
|
|
|
Interesting. Thanks.
|
|
|
|
|
Put a free version on SourceForge or GitHub, and later offer a paid version with more features.
|
|
|
|