Oh the praise I bestow upon any developer who writes "longer" code block to make it instantly readable to anyone reading in future..... 1000000000 top dev points donated to ya man.
This is awesome! We were actually thinking about having two versions of our application (one beta to rollout new features and one production so our big clients have more tested features) but this is infinitely better =)
How do you feel about the "git flow" approach? My team uses git flow features and hot-fixes within releases to avoid releasing development and target only finished features
It's not all that important that you know the role of each character - the argument is important. However, the glasses actually ARE the labels - if you're interested in reading about the characters, they are modeled on Edward De Bonos Six Thinking hats, and the glasses have the same color. I could put the full description of each color next to the glasses but that would be incredibly annoying, I think.
Brilliantly presented! Though I have one question, is there anything that this is providing that can't be done via normal yaml? At least from a Java perspective most containers will load yaml into environment variables. myNewFeature.enabled: true if (Boolean.getBoolean(System.getProperty("myNewFeature.enabled"))) { // Execute code for myNewFeature } Is there any additional benefit that Launch Darkly provides other than the above? If not it truly feels like overkill?
This is elaborated on in part 3 a bit, but conceptually, we discover later that it is a too simplistic view of reality to consider sortOrder a state property - it is actually a derived state from selected sort order and what the default sort order happens to be. We don't do it in this series, but in the real-life version of this app, we also had the concept of a persisted (in local storage) sorting order from previous sessions.
Fun Fun Function It seems like setting the default value on the initial set state (or the onFeatureFlag function, which is essentially the initial set state) is a simpler way to handle default values. Then the rest of your component doesn't even need to know the difference. There was a lot of extra code added in render just to make the default vs. selected distinction. That could be removed, you wouldn't need two state variables, and the component would be easier to understand. Btw, I love the channel. Thanks for taking the time to reply to my original comment :)
Fun Fun Function I was thinking this would work with a value from local storage as well, and just forgot to mention it. But thinking about it more, I get why you'd need selected and default values: so that if you set the selected value from local storage on the constructor setState call, you wouldn't overwrite it in your onFeatureFlag setState call. I still wonder if there's a simpler solution (maybe deferring all of set state to the onFeatureFlag call, and figuring it out there). Then at least it would be compartmentalized and render would be less confusing.
Hello! This is a pre-written response for comments about my use of paper in the videos - sorry about that but I’ve replied to this soooo many times. It’s great that you think about how to improve our environment, I do too! The recyclable paper I use on videos, however, is such a miniscule part of my environmental footprint that getting rid of it would just be superficial virtue signaling. This is especially true if I had replaced it with a whiteboard, as many paper-waste-commenters suggest, since a whiteboard would consume resources equivalent to many years worth of paper to produce - don’t get me started on the people suggesting tablets! If you genuinely care about making changes that will impact your footprint in an actual, not symbolic, way, then I invite you to consider joining me in going vegan (I did after reading www.cowspiracy.com/facts/ If veganism is too much for you, then you can back climate offset projects corresponding to your own footprint at: GoClimateNeutral.org
Oh the praise I bestow upon any developer who writes "longer" code block to make it instantly readable to anyone reading in future.....
1000000000 top dev points donated to ya man.
I thought that "the louder one shouts the faster pages load" was just a rumor, urban legend of some sort. Now I know it's true! Thanks! :)
This is awesome! We were actually thinking about having two versions of our application (one beta to rollout new features and one production so our big clients have more tested features) but this is infinitely better =)
I've never put the distinction between deploy and rollout into words before... Gheez. This changes ääääverything
How do you feel about the "git flow" approach? My team uses git flow features and hot-fixes within releases to avoid releasing development and target only finished features
That's nice for Git management but still requires you to do a deployment when you want to enable a feature
Dale Race , very true
Any chance of a label saying which viewpoint each character represents? I lose track quite a bit of this awesome story feature ;-)
It's not all that important that you know the role of each character - the argument is important. However, the glasses actually ARE the labels - if you're interested in reading about the characters, they are modeled on Edward De Bonos Six Thinking hats, and the glasses have the same color. I could put the full description of each color next to the glasses but that would be incredibly annoying, I think.
Omg, I'm having that learning feeling again!
Great job as usual MPJ!
Brilliantly presented!
Though I have one question, is there anything that this is providing that can't be done via normal yaml?
At least from a Java perspective most containers will load yaml into environment variables.
myNewFeature.enabled: true
if (Boolean.getBoolean(System.getProperty("myNewFeature.enabled"))) {
// Execute code for myNewFeature
}
Is there any additional benefit that Launch Darkly provides other than the above? If not it truly feels like overkill?
what vscode package are you using to show the gzipped size of the imported libraries??
Sorry, don't remember. I've uninstalled it since since it was distracting for me and the audience.
I'm assuming it's this one: Import Cost marketplace.visualstudio.com/items?itemName=wix.vscode-import-cost
Why not set sortOrder to "added" when doing the setState that sets the feature flag (i.e. in the onFeatureFlag call)?
This is elaborated on in part 3 a bit, but conceptually, we discover later that it is a too simplistic view of reality to consider sortOrder a state property - it is actually a derived state from selected sort order and what the default sort order happens to be. We don't do it in this series, but in the real-life version of this app, we also had the concept of a persisted (in local storage) sorting order from previous sessions.
Fun Fun Function It seems like setting the default value on the initial set state (or the onFeatureFlag function, which is essentially the initial set state) is a simpler way to handle default values. Then the rest of your component doesn't even need to know the difference. There was a lot of extra code added in render just to make the default vs. selected distinction. That could be removed, you wouldn't need two state variables, and the component would be easier to understand. Btw, I love the channel. Thanks for taking the time to reply to my original comment :)
Fun Fun Function I was thinking this would work with a value from local storage as well, and just forgot to mention it. But thinking about it more, I get why you'd need selected and default values: so that if you set the selected value from local storage on the constructor setState call, you wouldn't overwrite it in your onFeatureFlag setState call. I still wonder if there's a simpler solution (maybe deferring all of set state to the onFeatureFlag call, and figuring it out there). Then at least it would be compartmentalized and render would be less confusing.
You should buy something to hold the "slides" for you, it feels unconfortable for you be holding that paper for a few minutes hehehe
Love this - not only is the content great but... this is Johnny Depp as a web developer!
Howd you do the multi select change at once?!!?!!?!?!!?!?!?
crtl + d for each variable instance.
Programming is better with sound effects.
Settings are evil - MPJ's Musings - FunFunFunction #62
th-cam.com/video/glZ1C-Yu5tw/w-d-xo.html
love the new glasses
Really appreciate what you are doing and I like your videos but at the same time I feel like you should be better prepared.
Nope. I like to watch his debug process. Including him saying "Damnit!" in the middle. There's plenty of heavily scripted walk though tutorials.
great
omg get a whiteboard and stop wasting paper/cardboard
Hello! This is a pre-written response for comments about my use of paper in the videos - sorry about that but I’ve replied to this soooo many times.
It’s great that you think about how to improve our environment, I do too! The recyclable paper I use on videos, however, is such a miniscule part of my environmental footprint that getting rid of it would just be superficial virtue signaling. This is especially true if I had replaced it with a whiteboard, as many paper-waste-commenters suggest, since a whiteboard would consume resources equivalent to many years worth of paper to produce - don’t get me started on the people suggesting tablets!
If you genuinely care about making changes that will impact your footprint in an actual, not symbolic, way, then I invite you to consider joining me in going vegan (I did after reading www.cowspiracy.com/facts/ If veganism is too much for you, then you can back climate offset projects corresponding to your own footprint at: GoClimateNeutral.org