« first day (2422 days earlier)   

5:00 PM
It's definitely an issue contributed to by overblown AAA budgets.
But at the same time, it's hard to produce the kind of (generally bleh) stuff people seem to want out of AAA without huge budgets.
 
DH.
Most of the cost of a AAA game is related to the graphics/art in it right?
 
I'm not sure if I'd say "most," but it is a huge cost.
 
It's general organizational bloat
productivity is logarithmic
 
There's a ton of contributing factors, and different studios suffer from different institutionalized failures
 
Like when the designer is on an ego trip and start over-promising stuff without asking the devs if it's realistic so he can get on camera and get funding...
And hiring many naive young devs that are "cheaper"
And lots of other factors...
 
5:06 PM
"not built here" syndrome
etc
 
or the "let's use that pre-made library/module that crashes and spend more time trying to not build here" syndrome...
 
DH.
I always thought that graphics would be the problem because I met an artist and he showed me that a good model, with textures and animation takes him weeks, if it's complex even months to finish
 
Sure, but OTOH, sometimes it takes a programmer weeks or months to "finish" something.
 
@StephaneHockenhull That's called the "built here" syndrome :P
 
Just saying, I've seen both cases
 
5:09 PM
If it has bugs it's not finished, remember.
 
@StephaneHockenhull Yup, anti-patterns FTW!
 
The worst offender of it are Arduino libraries and other device firmware libraries..
So many race conditions
The number of times I've spend more time trying to get one to not crash than rewriting the whole thing.
 
Or a related issue, the "we licensed this engine but we don't like how it does <core thing> so let's rewrite it so it does it slightly differently but is now subtly incompatible with the rest of the engine and we spend the rest of the project fixing bugs related to this"
 
Or some terrain library ends up being practically useless because it has so many rounding errors sections don't match.
 
Or "we love this middleware it's so pretty but the tech is bad and nobody internal understands it, but lets integrate anyway and waste hundreds of man-hours bugfixing"
 
5:14 PM
twitches
 
Most of these issues are fundamentally rooted in not thinking.
Which is turn is mostly a sign of the general immaturity of the industry, the desire that still exists to be viewed as "seat of the pants, cowboy developers"
Agile stuff, and the industry's misappropriation of it, hasn't helped
 
I think that has a lot to do that the people in control have no clue, are not actually devs and won't listen to experienced devs.
 
Picking out all the wrong things and ignoring the right ones, being overly dogmatic about some things but not others, etc
 
Because experienced devs tell them things they don't want to hear
 
Yea, or are experience developers who don't keep up with new stuff and insist on "its worked this way for the last ten years, it will keep working this way"
"get off my lawn"
 
5:16 PM
I think some devs like dev too much, and don't see that the company is there to make money...
 
@AlexandreVaillancourt That too
It's why I do my own engine in my spare time at home, takes that edge off :D
So at work I'm all let's just make money :P
 
"Oh yeah, that new paradigm looks nice, let's use that!" -- "oops, it' won't work; too bad we lost a year on that".
@StephaneHockenhull Not all game devs have that chance; some contracts prohibit from working on game projects at home..
 
DH.
I have a friend that works in the support of a publisher of games here on Brazil
 
@JoshPetrie Conversely, I had a junior dev replace an gamepad input module that worked fine for 3 years, had record&replay for debug, key repeat, code sequence processing, network play support... with one that had none of those features and required AIs to register callbacks, TWO per buttons (one on press, one on release) and keep their own button state that way.
 
DH.
They aren't allowed to talk about other games that hey don't publish, even on their social media
 
5:20 PM
And some don't have the ability to realize that they're going in the wrong direction "I think I'm close to have it working" "you said that four months ago"
 
@StephaneHockenhull Yeeeeeah.
 
Cue crashes due to people forgetting to unregister callbacks, no network support, no debugging replay, no key repeat, and a whole 2 days of entire dev team lost while they switch to the new input system.
on 3 projects
And that wasn't on his task list
But he heard that callbacks are good and gasp globals are bad at school
 
OTOH, who was mentoring him?
Certainly juniors (and even seniors new to a codebase) are going to be guilty of looking at code and saying "this sucks, I rewrite"
Everybody loves to write new cool stuff anyway, and historical context about why decisions were made don't usually show well in code.
 
Nobody, because mgmt think it's a waste of expensive senior time.
 
But especially for juniors, yeah. That
Nobody wants to set up a process to train newbies because it might distract seniors too much
 
5:23 PM
And mgmt also said let's not revert because we already spent so much time switching
 
(and to be fair not everybody is going to be good at teaching)
 
because revert takes so long .. .right.
 
But it can contribute to problems
 
i like to do that.
 
@JoshPetrie It was the classic case of middle management was slowly purging all the senior devs that didn't tell them what they wanted to hear in favor of newbs they could push around.
So they could blame the newbs for every missed milestones
while overpromising things on timelines
 
5:25 PM
The best leaders are the ones that have no understanding of what they are leading.
 
and please upper managment that way
They couldn't do that with the senior devs because we'd tell them when it was unrealistic and keep track of communications.
 
Steve Job explained it pretty eloquently .. at some point a company becomes very marketing heavy and loses track of the innovation that created them
And the marketing / management type people end up making decisions
 
yep
@AlexandreVaillancourt I know, but that's a personal choice if they choose to bend over and sign that contract or not...
 
@StephaneHockenhull Yep. But I guess that working for some of these companies, you don't even have time to do that, crunch mode all the time.
 
Besides, those contracts clauses are rarely enforced. Just take Fez for example...
 
5:33 PM
Fez got a grant from the canadian government
hired 1 programmer
treated him like shit
 
The thing is if your game is popular a large studio trying to beat down on you is not going to look good. You got them between a rock and a hard place.
 
@StephaneHockenhull Because they're not enforceable, from what I understand. Their only option is to find a reason to lay you off.
 
And if your game is making it big, what do you have to care? :D
No big studio want to be seen legally beating down a small dev who hasn't stolen anything. (last part important)
It would hurt their sales much more than what they would recoup from a lawsuit.
 
Nintendo claims indie developer's house
"We took over his life because he used pokemon characters in a fan game"
fuck that guy!
Did you know this guy staged some sort of personal strike because Nintendo did not let him put his game on the Gameboy Advanced?
 
I think I remember that guy/story
 
riiiiiiiiiiiight yes :D
 
this game looks like a really cool world with nothing in it
"I cannot leave this viridian room. The door is locked and barricaded from the outside. I am sleeping behind the camera, and yes- I've got a shower. Food is delivered once a week by a friend...This is my 100 day protest to Nintendo!"
he livestreamed this.
 
I remember
Such a tantrum over nothing.
 
here is the source code
a passion project.
 
Organization :|
That means "NO FORKS"
I want to fork it Just Because now.
 
5:42 PM
lol
 
Somebody didn't read their GitHub license agreement!
 
He had so many other options but WAAAH! I WANT TO PUT IT ON GAMEBOY ADVANCE!
He could have even made his own unlicensed GBA carts, but nooooooo. let's throw a fit.
 
hehe
he released it
and no one liked it.
and that, was the end of the story.
I'm glad nintendo didn't make throwing a tantrum the new standard for submitting a game.
 
LOL OMFG can you imaging if Nintendo rewarded that ?
 
there used to be this website called "makemeking.com" where a challenge was put up and you had to video yourself doing it
The most popular ones of course took it to the extreme
 
5:47 PM
A quarter of tje RPG Maker community streaming tantrums?
 
beat yourself up -- you had guys hitting themselves in the face as hard as they could for example.
bloodied themselves up
You win!
 
sigh Humanity is still a while away from adjusting to youtube / internet...
 
i watched this entire video the other night - it was very interesting lol
 
is there any git gurus there?
 
nothing good can come of a question like that :)
 
5:53 PM
LOL
@PaulD No, I just google the few commands I need to clean up when I mess up.
 
yeah when i screw up i try to reverse it
 
if I can't reverse it I try to fix it
if I can't fix it, i just delete the entire thing
reupload it fresh
lol
In most cases, you can just revert to a previous check in state.
but ask your question.
 
I got 4 repo clones/backups on 4 machines. the worst case I just wiped and copied back one of the older repo
and then resubmitted my changes after fixing the files
Git is like a nuclear reactor. If you mess up, just abort and run :)
I hate how git will let you accidentally pull from a completely unrelated repo.
git repo after accidents like that :P
@AlexandreVaillancourt I blame those [no home projects] contracts in part for forcing me to deal with jrs who decide to experiment on in-production projects...
 
what do you think of the hand of god?
i'm going to make them more aware of it as well
 
DH.
6:10 PM
Looking good
Remembers me of the cursor from FF
 
I can't really tell if its a thumb or an index. finger might need to be a bit longer.
 
Yeah looks great
 
@StephaneHockenhull I blame it to the fact that they have too much free time and don't need money enough when they're in school :P
 
Looks great otherwise
 
thanks guys
actually does anyone here have a touch based windows pc?
i guess i'll just add an option to hide the cursor.
 
DH.
6:13 PM
I don't, but I could hijack into the university to be able to test it kek
 
I have one but I kinda gave it to my brother
 
Hands are so hard to do. I messed up the ones on my character
 
when i was going to university people were stealing the projectors
back then projectors where very expensive.
you would go to class and the projector was gone and the teacher had to resort to draconian measures such as a whiteboard
 
jgallant: I do.
"Gorb" is it?
 
OK, you are my official tester
yeah i'll send you a steam key
 
6:15 PM
It's a GPD Win with an Intel integrated...
 
perfect
this should run on a dozen potatoes
 
I bought it in part to use as a windows test machine. it's pretty cheap considering all the weirdness it has. I'd need $3K of regular PC hardware to have similar testing hardware :P
If something runs on it it'll probably run on anything more sane :P
@jgallant I have to leave to go pick up the rental car in about 20mins. Will be back later.
 
i didn't mean now
 
soon enough though, i still have some stuff to do
 
6:30 PM
first day after two years in gym feeling exhausted :/
 
6:45 PM
So I wrote this nifty little mousecursor script for unity
it just persists across all scenes and manages itself, its pretty nice
auto sizes based on the zoom level of the camera as well
 
@JoshPetrie You around?
If you are do you know how to pass a compile-time value to a function template or similar?
So that the function will work using that constant value
 
You mean like: template<int V> int F() { return V; } ?
 
Yes
 
std::cout << F<32>(); // prints 32
 
6:52 PM
Exactly that
Read IBM's article on veradic templates, but it didn't seem like what I needed
27
Q: C++ Template Specialization with Constant Value

tadmanIs there a straightforward way for defining a partial specialization of a C++ template class given a numerical constant for one of the template parameters? I'm trying to create special constructors for only certain kinds of template combinations: template <typename A, size_t B> class Example { ...

Trying that atm, but not sure if works for functions
 
What is it you are trying to do?
 
Creating a wrapper around a method call in a library I'm using
Where most of the values are constant, but I dont want to just copy the function
Oh so that works... Was far easier than I'd hoped for. Don't even need C++11
(unless g++ defaults to that?)
 
Dunno, but it's definitely not a C++11 feature.
 
Nope, thanks though :)
 
 
1 hour later…
8:19 PM
The weird thing is that C++ refuses floats as template parameters. You can use ints, long ints, you can even hand-encode the float into an integer. But letting you use the float directly?

NOPE.
You can even use a pointer/reference
But not a float.
Because reasons.
 
if it's floating, just catch it
 
ew, I'd rather flush again and hope it goes.
 
DH.
It remembers me the problem I had in the past that dynamic arrays can't be used as parameters in Pascal, but if you make a type that is a dynamic array and nothing more, it works
No idea why tho
 
:|
I feel like I'm spoiled when using C#
 
8:25 PM
In my case it was to pass an epsilon value to a templated function. Had to resort to passing it on the stack.
Which is disappointing, most of the time the default epsilon value is just fine and could be "hardcoded" into the compiled code, saving cycles and reducing code size.
Also wanted to do it for the Clamp() function but that's less of an issue as that one always gets inlined so it comes down to the same thing.
 
aye, hardcoding and saving time is all good
 
They still haven't added C99's hex floats to C++ have they?
oh wait! they did in C++17
 
DH.
0x1.fp3 = (1 + 15/16)^3
Wtf, it's just making stuff harder, why would you use that?
 
0x1.fp3 = (1 + 15/16)<<3
Because it's exact
 
99
A: Why can't I use float value as a template parameter?

Filip Roséen - refpTHE SIMPLE ANSWER The standard doesn't allow floating points as non-type template-arguments, which can be read about in the following section of the C++11 standard; 14.3.2/1      Template non-type arguments      [temp.arg.nontype] A template-argument for a non-type, non-template templat...

good reason for not letting you do this
 
8:38 PM
no it's not. Might as well ban floats altogether
Also, the example is wrong. 1/3.f and 2/6.f are supposed to give the exact same result according to IEEE standard
And since C++ says that the same file compiled by two different compilers don't need to be compatible at all, the argument against float template parameters is pretty weak.
If the floating point result is different, then the template will be a different template. I don't see an issue there.
That would be the whole point
If different CPUs give different results that's like trying to prevent a C++ compiler from giving different object files when compiled on a machine with defective RAM.
Someone can turn that floating point into a fixed point and the C++ compiler will accept it even tho you may hit the same issue with rounding errors.
 
ok
I recommend telling the answerer that though. :)
 
It's on the same level of not supporting the % operator for floating point but every compiler has fmod() as dictated by the standard.
 
I ran into the problem.. Ended up using int TOP, int BOTTOM
float ratio = static_cast<float>(TOP) / BOTTOM
 
DH.
There's a comment on another answer that says part of what he said
 
8:54 PM
I bet you it's because someone on the C++ committee is like "But what about muh PDP-11?!"
 
hahah
 
Pretty sure the reason is a lot more pedestrian.
 
Oh noes, we wont be able to support C++17 on the IBM 7070, my gawd the world will end!!
 
open-std.org/jtc1/sc22/wg21/docs/papers find me the paper where somebody even cared to propose it
 
the % operator?
 
8:58 PM
I don't think the maintainer of that website knows that google exists
 
Most of those papers originate on mailing lists, because Old School.
 
I remember Bjarne whats-his-name mention something about the % operator and floats... IIRC it boiled down to they had more important things to argue over.
 
But it really would be nice if somebody would dump them all into something searchable.
It's a pain right now
I'd agree there are more important things to argue about adding to C++ than % for floats.
But if you don't, you can write the paper :)
 
But man is that a pain in the butt when creating templates.
 
(Having followed the process of many of these papers, that sounds like way more work than I'd ever care to take on)
 
9:00 PM
Everyone is fixing it by creating a Modulo<TypeA, TypeB>() template...
that maps to either % operator or fmod
@JoshPetrie exactly.
 
@JoshPetrie google.dk/…
That works? :D
 
It's not as bad as trying to submit a patch to an FOSS project, but it's pretty darn close
 
I dunno.
I submitted a patch to LLVM
It was pretty painless. I was surprised.
 
"I was surprised" LOL and why may I ask? :D
LLVM may be the exception. I haven't been that lucky.
 
9:04 PM
Yes, but not on floats
or any other basic types
unless you put another custom type in the mix
I also have a template to do shift left and shift right on floats...
(conceptually speaking)
 
struct float_proxy{ float v; operator float() { return v; } };
 
So that if it's a fixed point it does the bit shift, if it's a float it multiplies
 
overload float % float_proxy. Profit.
 
but you have to wrap one side of the % into that class/struct, which eliminates the convenience.
 
That's what the implicit conversions are for
 
9:09 PM
no, the compiler will catch it and error before.
because it's an existing overload of %, but one that causes an error.
and the compiler has to take the most direct route
 
yeah, true, but you could probably knock something up using the <cross> hack or custom literal extensions to eliminate the "float_proxy(1.0f)" bit
 
or rather, if one direct route exists it takes it, if there's no direct and more than one indirect it throws a fit about ambiguity
oh, yeah for literals but that wouldn't work inside a template with two float variables.
 
Mm, probably not.
I've never used them at all.
 
I mix a lot of fixed point and floating point math, I keep hitting those compiler annoyances.
 
There was some talk about fixed point stuff in the SG14 group a while back.
I think..
 
9:21 PM
that must have been dismissed very quickly...
 
Not really.
I think they're just more interested in working on container and allocator improvements.
Or maybe they just moved the discussion to one of the other study groups where they could get more traction
 
and constraints. those would be really good.
 
But I understand why constraints would take forever to settle on.
 
EWG is doing constraints I think
or at least, that would be their domain
 
9:25 PM
yes
The thing to make template errors make more sense to whoever causes them
heck, even my own template errors confuse me when it's 4 template classes down, caused by accidentally converting a vec3 to a (const float *) or something silly like that...
or the compiler chose to use (const &float *) rather than (float *) version for whatever reason that's beyond me :P
They're still working on constraints, there's lots of odd cases and interactions that they're trying to mesh together in a consistent way. Now, that I understand why they'd take their time with it.
 
struct float_proxy{
  float v;
  float operator %(float other){
    return fmod(v, other);
  }
};

float_proxy operator ""_f(long double f){
  float_proxy tmp;
  tmp.v = f;
  return tmp;
}

int main(int argc, char ** args){
  cout << 2.0_f%2.0f << endl;
  return 0;
}
Some of this new C++ stuff is interesting :P The literal MUST be long double(can't be double, nor float)
 
oh, now I remember the big issue I keep hitting with my vec template. It has a operator bool() that the compiler sometimes decides to use.
 
Why does it have that
 
so you can do StrLen() on an array of 3d vectors.
(or 2d vectors)
 
strlen on vectors?
 
9:39 PM
yeah. if you change "null-terminated" to "false-terminated" then an StrLen() template applied to anything makes sense.
I can do StrLen(array_of_pointers) and it gives me the length to the null (false) pointer
or if I have an array of anything that will cast to bool and return false for the termination.
Like, a zero-terminated array of normals.
I don't use it a lot but sometimes it's nice to have it.
 

« first day (2422 days earlier)