• Activity
  • Votes
  • Comments
  • New
  • All activity
  • Showing only topics with the tag "recurring". Back to normal view
    1. What are you reading these days? #17

      What are you reading currently? Fiction or non-fiction, any genre, any language! Tell us what you're reading, and talk a bit about it. Past weeks: Week #1 · Week #2 · Week #3 · Week #4 · Week #5 ·...

      What are you reading currently? Fiction or non-fiction, any genre, any language! Tell us what you're reading, and talk a bit about it.

      Past weeks: Week #1 · Week #2 · Week #3 · Week #4 · Week #5 · Week #6 · Week #7 · Week #8 · Week #9 · Week #10 · Week #11 · Week #12 · Week #13 · Week #14 · Week #15 · Week #16

      26 votes
    2. This week's album and EP releases

      Here's a list of a lot of things that came out in this past week, including many which are set to release on Friday. Of course, there's no way to be completely comprehensive with this and I...

      Here's a list of a lot of things that came out in this past week, including many which are set to release on Friday. Of course, there's no way to be completely comprehensive with this and I avoided including things where information was too lacking, so feel free to mention anything that isn't on here that you think is worth mentioning. Beyond that, if you have any thoughts of any of these albums, it would be great to hear them :)

      (oh and don't bully me for the genre tags, a lot of these things have very limited resources available and I couldn't individually listen to everything and determine what fits best, so I'm pulling from third parties and an artist's past work a lot of the time)

      Thanks for the help this week, @Cleb!


      88GLAM - 88GLAM2.5 (Trap Rap)

      Aaron Lewis - State I’m In (Contemporary Country)

      ALL TVVINS - Just To Exist (Alternative Dance, Indie Rock)

      All Your Sisters - Trust Ruins (Industrial Rock, Post-Punk)

      Anderson .Paak - Ventura (Neo-Soul, Contemporary R&B)

      Andy Black - The Ghost of Ohio (Pop Rock)

      Astrid - Fall, Stand, Dance (Indie Pop, Pop Rock)

      Band of Skulls - Love Is All You Love (Garage Rock Revival, Alternative Rock)

      Bars Of Gold - Shelters (New Wave, Indie Rock, Post-Hardcore)

      Beat Music - Beat Music! Beat Music! Beat Music! (Jazz-Rock, Electronic)

      Bibio - Ribbons (Folktronica, Hypnagogic Pop)

      Big Business - The Beast You Are (Hard Rock, Heavy Metal)

      Big Search - Slow Fascination (Indie Pop)

      Black Flower - Future Flora (Afro-Jazz, Jazz-Funk)

      Broken Social Scene - Let's Try the After - Vol. 2 (Indie Pop, Indie Rock)

      Bruce Hornsby - Absolute Zero (Art Pop, Singer/Songwriter)

      BTS - Map of the Soul: Persona (K-Pop)

      The Budos Band - V (Jazz-Funk, Heavy Psych, Afrobeat)

      Caskey - Black Sheep 4 (Trap Rap)

      The Chemical Brothers - No Geography (Big Beat, Acid House)

      The Cradle - The Glare of Success (Indie Folk)

      Cris Jacobs - Color Where You Are (Singer/Songwriter, Acoustic Blues)

      Damien Jurado - In the Shape of a Storm (Indie Folk, Singer/Songwriter)

      Eli "Paperboy" Reed - 99 Cent Dreams (Soul, Rhythm & Blues)

      Emily Reo - Only You Can See It (Indie Pop)

      Emma Bunton - My Happy Place (Pop Soul)

      Eric Reed - Everybody Gets The Blues (Jazz)

      Fontaines D.C. - Dogrel (Post Punk Revival)

      Glen Hansard - The Wild Willing (Singer/Songwriter, Electronic)

      Gone Cosmic - Sideways In Time (Psychedelic Rock)

      ​iann dior - nothings ever good enough (Emo Rap)

      Intellexual (Nico Segal & Nate Fox of The Social Experiment) - Intellexual (Indie Pop)

      Inter Arma - Sulphur English (Post Metal)

      Jesse Rutherford - GARAGEB& (Alternative R&B, Electropop)

      Jess Ribeiro - Love Hate (Singer/Songwriter)

      John Paul White - The Hurting Kind (Singer/Songwriter, Folk Rock)

      Junodream - Terrible Things That Could Happen EP (Indie Rock)

      Khalid - Free Spirit (Contemporary R&B, Neo-Soul)

      KSI & Randolph - New Age (UK Hip Hop)

      The Leisure Society - Arrivals & Departures (Chamber pop, Indie pop)

      Lloyd - Black Haze (Pop Rock)

      Lowly - Hifalutin (Indie Pop)

      LSD - Labrinth, Sia & Diplo Present… LSD (Psychedelic Pop, Electronic)

      Marshmello & SOB X RBE - Roll the Dice - EP (Pop Rap)

      Melby - VCR (Psychedelic Pop, Indie Pop)

      Melissa Etheridge - The Medicine Show (Pop Rock, Singer/Songwriter)

      M Huncho - Utopia (Trap Rap)

      MISSIO - The Darker the Weather // The Better the Man (Electropop)

      MONKEY3 - Sphere (Stoner Rock, Space Rock)

      Mystery Skulls - Back to Life (Electropop)

      Native Harrow - Happier Now (Indie Folk, Folk Pop)

      Norah Jones - Begin Again (Jazz Pop)

      NUMENOREAN - Adore (Atmospheric black metal)

      Odonis Odonis - Reaction EP (Electro-Industrial, Industrial Rock)

      Pixel Grip - Heavy Handed (Synthpop)

      Reese McHenry - No Dados (Garage Rock)

      RiFF RAFF - PiNK PYTHōN (Trap Rap)

      Rory Fresco - True Story (Pop Rap)

      Sara Evans - The Barker Family Band (Country Pop)

      Sebastián Yatra - FANTASÍA (Reggaeton)

      Shovels & Rope - By Blood (Alt. Country)

      Sophie Auster - Next Time (Singer/Songwriter)

      Tellavision - Add Land (Electronic, Pop)

      Theories - Vessel (Grindcore)

      Thomas Henley - Epoque EP (Electronic)

      Through The Noise - Dualism (Nu Metal, Post Hardcore)

      Tom Speight - Collide (Singer Songwriter)

      Walking On Cars - Colours (Pop Rock)

      Yours Truly - Afterglow EP (Progressive Pop)

      Zvi - Deer Pink (Drone Metal, Experimental Rock)

      16 votes
    3. What have you been watching/reading this week? (Anime/Manga)

      What have you been watching and reading this week? You don't need to give us a whole essay if you don't want to, but please write something! Feel free to talk about something you saw that was...

      What have you been watching and reading this week? You don't need to give us a whole essay if you don't want to, but please write something! Feel free to talk about something you saw that was cool, something that was bad, ask for recommendations, or anything else you can think of.

      If you want to, feel free to find the thing you're talking about and link to its pages on Anilist, MAL, or any other database you use!

      12 votes
    4. What have you been listening to this week?

      What have you been listening to this week? You don't need to do a 6000 word review if you don't want to, but please write something! If you've just picked up some music, please update on that as...

      What have you been listening to this week? You don't need to do a 6000 word review if you don't want to, but please write something! If you've just picked up some music, please update on that as well, we'd love to see your hauls :)

      Feel free to give recs or discuss anything about each others' listening habits.

      You can make a chart if you use last.fm:

      http://www.tapmusic.net/lastfm/

      Remember that linking directly to your image will update with your future listening, make sure to reupload to somewhere like imgur if you'd like it to remain what you have at the time of posting.

      13 votes
    5. What have you been listening to this week?

      What have you been listening to this week? You don't need to do a 6000 word review if you don't want to, but please write something! If you've just picked up some music, please update on that as...

      What have you been listening to this week? You don't need to do a 6000 word review if you don't want to, but please write something! If you've just picked up some music, please update on that as well, we'd love to see your hauls :)

      Feel free to give recs or discuss anything about each others' listening habits.

      You can make a chart if you use last.fm:

      http://www.tapmusic.net/lastfm/

      Remember that linking directly to your image will update with your future listening, make sure to reupload to somewhere like imgur if you'd like it to remain what you have at the time of posting.

      15 votes
    6. This week's album and EP releases

      Here's a list of a lot of things that came out in this past week, including many which are set to release on Friday. Of course, there's no way to be completely comprehensive with this and I...

      Here's a list of a lot of things that came out in this past week, including many which are set to release on Friday. Of course, there's no way to be completely comprehensive with this and I avoided including things where information was too lacking, so feel free to mention anything that isn't on here that you think is worth mentioning. Beyond that, if you have any thoughts of any of these albums, it would be great to hear them :)

      (oh and don't bully me for the genre tags, a lot of these things have very limited resources available and I couldn't individually listen to everything and determine what fits best, so I'm pulling from third parties and an artist's past work a lot of the time)


      &More - Ethel Bobcat (Hip Hop)

      Ady Suleiman - Thoughts & Moments Vol. 1 Mixtape (Neo Soul)

      Ages and Ages - Me You They We (Indie Pop, Indie Folk)

      Alma - Have You Seen Her? (Dance-Pop, Electropop)

      BAND-MAID - BAND-MAIKO (Hard Rock)

      Big Eyes - Streets Of The Lost (Power Pop, Garage Rock)

      BLACKPINK - Kill This Love (K-Pop)

      Bogdan Raczynski - Rave 'Till You Cry (Drum and Bass, IDM)

      Brass Box - The Cathedral (Shoegaze)

      Brooks & Dunn - Reboot (Country)

      Bryce Dessner (of The National) - El Chan (Modern Classical)

      bülow - Crystalline (Electropop, Alternative R&B)

      Callum Easter - Here or Nowhere (Alternative R&B, Indie Pop)

      Cassia - Replica (Indie Pop)

      CHEN (EXO) - April, and a flower (K Pop)

      Cherry Pickles - Cherry Pickles Will Harden Your Nipples (Pop Punk, Surf Rock)

      Christian Löffler - Graal (Ambient, Techno)

      Circa Waves - What's It Like Over There? (Indie Rock)

      Cities of Mars - The Horologist (Post-Metal, Doom Metal)

      COCAINE PISS - Passionate and Tragic (Crust Punk, Noise)

      Conjurer - Sigils (Doom Metal, Stoner Metal)

      Crown of Autumn - Byzantine Horizons (Black Metal, Doom Metal)

      Datura4 - Blessed is the Boogie (Blues Rock, Hard Rock)

      DJ DB405 - Trillden United (Christian Hip Hop, Trap)

      Don Felder - American Rock 'N' Roll (AOR)

      The Drums - Brutalism (Indie Pop, Synthpop)

      Eluveitie - Ategnatos (Celtic Metal, Melodic Death Metal)

      Evan Greer - She/Her/They/Them (Folk Punk, Riot Grrrl)

      Flying Fish Cove - At Moonset (Indie Rock)

      Foie Gras - Holy Hell (Drone)

      Girli - Odd One Out (Electropop, Dance-Punk)

      Good Morning - The Option (Indie Pop)

      GRiZ - Ride Waves (Glitch Hop, EDM)

      Gurr - She Says EP (Jangle Pop, Indie Rock)

      Hannah Grace - The Bed You Made EP (Singer-Songwriter)

      Idlewild - Interview Muisc (Indie Rock, Alternative Rock)

      I Know Leopard - Love Is A Landmine (Indie Pop, Dream Pop)

      The Infamous Stringdusters — Rise Sun (Bluegrass)

      IZ*ONE - HEART*IZ (K Pop)

      Jackie Venson - JOY (Contemporary R&B, Indie Pop, Neo-Soul)

      Jai Wolf - The Cure to Loneliness (Synthpop, Synthwave)

      Jasmine Thompson - Colour EP (Teen Pop)

      JAWS - The Ceiling (Indie Pop)

      Jelly Boy - Everybody is a Universe (Indie Rock)

      Jimbo Mathus - Incinerator (Country, Americana)

      John Vanderslice - The Cedars (Electronic, Indie Pop, Indie Rock)

      Jonathan Larson - The Jonathan Larson Project (Film Score, Show Tunes)

      Kendrick Scott Oracle — A Wall Becomes A Bridge (Jazz)

      Khalid - Free Spirit (Alternative R&B)

      Kiefer — Bridges (Electronic, Jazz)

      Kings Kaleidoscope - Zeal (Indie Rock)

      Lady Lamb - Even in the Tremor (Singer/Songwriter, Indie Rock)

      Larry “Ratso” Sloman — Stubborn Heart (Indie Folk)

      Lee Fields & The Expressions - It Rains Love (Soul)

      Lena - Only Love, L (Pop)

      Lissie - When I'm Alone: The Piano Retrospective (Pop Country)

      Luke Sital-Singh - A Golden State (Singer/Songwriter)

      Mana — Seven Steps Behind (Electronic)

      MARINA - LOVE (Electropop, Dance-Pop)

      Matt Maeson - Bank On The Funeral (Singer/Songwriter)

      Matt Simons - After The LandsIide (Pop)

      Mike Mains & The Branches — When We Were In Love (Indie Rock)

      Molly Tuttle — When You’re Ready (Progressive Bluegrass)

      Night School — Disappear Here (Indie Pop, Dream Pop)

      Partner — Saturday The 14th EP (Power Pop)

      Periphery - Periphery IV: HAIL STAN (Progressive Metal)

      The Prescriptions — Hollywood Gold (Alternative Country, Folk Rock)

      Priests — The Seduction Of Kansas (Post-Punk, Noise Rock)

      PUP - Morbid Stuff (Pop Punk, Power Pop)

      Ramriddlz - RamReaper (Alternative R&B)

      Reba McEntire — Stronger Than The Truth (Contemporary Country)

      Rescue Rangers — Divisive (Stoner Rock)

      Rod Melancon — Pinkville (Country, Blues)

      Rose Elinor Dougall — A New Illusion (Indie Pop, Dream Pop)

      Rozi Plain — What A Boost (Indie Folk)

      Sara Bareilles - Amidst the Chaos (Singer/Songwriter, Pop)

      Savoir Adore — Full Bloom (Indie Pop)

      Sego - Sego Sucks (Indie Pop)

      Shana Cleveland — Night Of The Worm Moon (Folk)

      Sharkmuffin — Gamma Gardening EP (Garage Punk, Riot Grrrl)

      Social Club Misfits - MOOD. (Christian Hip Hop)

      Spoony Bard — Old Friends (Hip-Hop, Electronic, Jazz)

      Tayla Parx — We Need To Talk (Contemporary R&B)

      Ten Tonnes - Ten Tonnes (Singer/Songwriter)

      Tory Lanez - International Fargo (Pop Rap)

      Tyler Ramsey — For The Morning (Contemporary Folk)

      Uncle Meg — Butterfly EP (Emo Rap)

      Weyes Blood - Titanic Rising (Art Pop, Baroque Pop)

      Yarrow - A Mild Circus EP (Post-Punk)

      Yung Garzi - Nothing To Something (Pop Rap)

      Yung Van - Blackwater (Emo Rap)

      Zaytoven - Make America Trap Again (Trap)

      12 votes
    7. What are you reading these days? #16

      What are you reading currently? Fiction or non-fiction, any genre, any language! Tell us what you're reading, and talk a bit about it. Past weeks: Week #1 · Week #2 · Week #3 · Week #4 · Week #5 ·...

      What are you reading currently? Fiction or non-fiction, any genre, any language! Tell us what you're reading, and talk a bit about it.

      Past weeks: Week #1 · Week #2 · Week #3 · Week #4 · Week #5 · Week #6 · Week #7 · Week #8 · Week #9 · Week #10 · Week #11 · Week #12 · Week #13 · Week #14 · Week #15

      21 votes
    8. What have you been watching/reading this week? (Anime/Manga)

      What have you been watching and reading this week? You don't need to give us a whole essay if you don't want to, but please write something! Feel free to talk about something you saw that was...

      What have you been watching and reading this week? You don't need to give us a whole essay if you don't want to, but please write something! Feel free to talk about something you saw that was cool, something that was bad, ask for recommendations, or anything else you can think of.

      If you want to, feel free to find the thing you're talking about and link to its pages on Anilist, MAL, or any other database you use!

      6 votes
    9. What are you playing this week?

      Inspired by @Whom's music and anime threads What have you been playing to this week? You don't need to be playing the latest games, nor do you have to write gigantic essays. This is just a space...

      Inspired by @Whom's music and anime threads

      What have you been playing to this week? You don't need to be playing the latest games, nor do you have to write gigantic essays. This is just a space to talk games!

      Feel free to give recommendations, thoughts, opinions. Chat about playstyles and habits! Reminisce about games and mechanics long gone, or coming back!

      27 votes
    10. What have you been listening to this week?

      What have you been listening to this week? You don't need to do a 6000 word review if you don't want to, but please write something! If you've just picked up some music, please update on that as...

      What have you been listening to this week? You don't need to do a 6000 word review if you don't want to, but please write something! If you've just picked up some music, please update on that as well, we'd love to see your hauls :)

      Feel free to give recs or discuss anything about each others' listening habits.

      You can make a chart if you use last.fm:

      http://www.tapmusic.net/lastfm/

      Remember that linking directly to your image will update with your future listening, make sure to reupload to somewhere like imgur if you'd like it to remain what you have at the time of posting.

      13 votes
    11. Conceptualizing Data: Simplifying the way we think about complex data structures.

      Preface Conceptual models in programming are essential for being able to reason about problems. We see this through code all the time, with implementation details hidden away behind abstractions...

      Preface

      Conceptual models in programming are essential for being able to reason about problems. We see this through code all the time, with implementation details hidden away behind abstractions like functions and objects so that we can ignore the cumbersome details and focus only on the details that matter. Without these abstractions and conceptual models, we might find ourselves overwhelmed by the size and complexity of the problem we’re facing. Of these conceptual models, one of the most easily neglected is that of data and object structure.


      Data Types Galore

      Possibly one of the most overwhelming aspects of conceptualizing data and object structure is the sheer breadth of data types available. Depending on the programming language you’re working with, you may find that you have more than several dozens of object classes already defined as part of the language’s core; primitives like booleans, ints, unsigned ints, floats, doubles, longs, strings, chars, and possibly others; arrays that can contain any of the objects or primitives, and even other arrays; and several other data structures like queues, vectors, and mixed-type collections, among others.

      With so many types of data, it’s incredibly easy to lose track in a sea of type declarations and find yourself confused and unsure of where to go.


      Tree’s Company

      Let’s start by trying to make these data types a little less overwhelming. Rather than thinking strictly of types, let’s classify them. We can group all data types into one of three basic classifications:

      1. Objects, which contain key/value pairs. For example, an object property that stores a string.
      2. Arrays, which contain some arbitrary number of values.
      3. Primitives, which contain nothing. They’re simply a “flat” data value.

      We can also make a couple of additional notes. First, arrays and objects are very similar; both contain references to internal data, but the way that data is referenced differs. In particular, objects have named keys while arrays have numeric, zero-indexed keys. In a sense, arrays are a special case of objects where the keys are more strictly typed. From this, we can condense the classifications of objects and arrays into the more general “container” classification.

      With that in mind, we now have the following classifications:

      1. Containers.
      2. Primitives.

      We can now generally state that containers may contain other containers and primitives, and primitives may not contain anything. In other words, all data structures are a composition of containers and/or primitives, where containers may accept containers and/or primitives and primitives may not accept anything. More experienced programmers should notice something very familiar about this description--we’re basically describing a tree structure! Primitive types and empty containers act as the leaves in a tree, whereas objects and arrays act as the nodes.


      Trees Help You Breathe

      Okay, great. So what’s the big deal, anyway? We’ve now traded a bunch of concrete data types that we can actually think about and abstracted them away into this nebulous mess of containers and primitives. What do we get out of this?

      A common mistake many programmers make is planning their data types out from the very beginning. Rather than planning out an abstraction for their data and object architecture, it’s easy to immediately find yourself focusing too much on the concrete implementation details.

      Imagine, for example, modeling a user account for an online payment system. A common feature to include is the ability to store payment information for auto-pay, and payment methods typically take the form of some combination of credit/debit cards and bank accounts. If we focus on implementation details from the beginning, then we may find ourselves with something like this in a first iteration:

      UserAccount: {
          username: String,
          password: String,
          payment_methods: PaymentMethod[]
      }
      
      PaymentMethod: {
          account_name: String,
          account_type: Enum,
          account_holder: String,
          number: String,
          routing_number: String?,
          cvv: String?,
          expiration_date: DateString?
      }
      

      We then find ourselves realizing that PaymentMethod is an unnecessary mess of optional values and needing to refactor it. Odds are we would break it off immediately into separate account types and make a note that they both implement some interface. We may also find that, as a result, remodeling the PaymentMethod could result in the need to remodel the UserAccount. For more deeply nested data structures, a single change deeper within the structure could result in those changes cascading all the way to the top-level object. If we have multiple objects, then these changes could propagate to them as well. And what if we decide a type needs to be changed, like deciding that our expiration date needs to be some sort of date object? Or what if we decide that we want to modify our property names? We’re then stuck having to update these definitions as we go along. What if we decide that we don't want an interface for different payment method types after all and instead want separate collections for each type? Then including the interface consideration will have proven to be a waste of time. The end result is that before we’ve even touched a single line of code, we’ve already found ourselves stuck with a bunch of technical debt, and we’re only in our initial planning stages!

      To alleviate these kinds of problems, it’s far better to just ignore the implementation details. By doing so, we may find ourselves with something like this:

      UserAccount: {
          Username,
          Password,
          PaymentMethods
      }
      
      PaymentMethods: // TODO: Decide on this container’s structure.
      
      CardAccount: {
          AccountName,
          CardHolder,
          CardNumber,
          CVV,
          ExpirationDate,
          CardType
      }
      
      BankAccount: {
          AccountName,
          AccountNumber,
          RoutingNumber,
          AccountType
      }
      

      A few important notes about what we’ve just done here:

      1. We don’t specify any concrete data types.
      2. All fields within our models have the capacity to be either containers or primitives.
      3. We’re able to defer a model’s structural definition without affecting the pace of our planning.
      4. Any changes to a particular field type will automatically propagate in our structural definitions, making it trivial to create a definition like ExpirationDate: String and later change it to ExpirationDate: DateObject.
      5. The amount of information we need to think about is reduced down to the very bare minimum.
      6. By deferring the definition of the PaymentMethods structure, we find ourselves more inclined to focus on the more concrete payment method definitions from the very beginning, rather than trying to force them to be compatible through an interface.
      7. We focused only on data representation, ensuring that representation and implementation are both separate and can be handled differently if needed.

      SOLIDifying Our Conceptual Model

      In object-oriented programming (OOP), there’s a generally recommended set of principles to follow, represented by the acronym “SOLID”:

      • Single responsibility.
      • Open/closed.
      • Liskov substitution.
      • Interface segregation.
      • Dependency inversion.

      These “SOLID” principles were defined to help resolve common, recurring design problems and anti-patterns in OOP.

      Of particular note for us is the last one, the “dependency inversion” principle. The idea behind this principle is that implementation details should depend on abstractions, not the other way around. Our new conceptual model obeys the dependency inversion principle by prioritizing a focus on abstractions while leaving implementation details to the future class definitions that are based on our abstractions. By doing so, we limit the elements involved in our planning and problem-solving stages to only what is necessary.


      Final Thoughts

      The consequences of such a conceptual model extend well beyond simply planning out data and object structures. For example, if implemented as an actual programming or language construct, you could make the parsing of your data fairly simple. By implementing an object parser that performs reflection on some passed object, you can extract all of the publicly accessible object properties of the target object and the data contained therein. Thus, if your language doesn’t have a built-in JSON encoding function and no library yet exists, you could recursively traverse your data structure to generate the appropriate JSON with very little effort.

      Many of the most fundamental programming concepts, like data structures ultimately being nothing more than trees at their most abstract representation, are things we tend to take for granted and think very little about. By making ourselves conscious of these fundamental concepts, however, we can more effectively take advantage of them.

      Additionally, successful programmers typically solve a programming problem before they’ve ever written a single line of code. Whether or not they’re conscious of it, the tools they use to solve these problems effectively consist largely of the myriad conceptual models they’ve collected and developed over time, and the experience they’ve accumulated to determine which conceptual models need to be utilized to solve a particular problem.

      Even when you have a solid grasp of your programming fundamentals, you should always revisit them every now and then. Sometimes there are details that you may have missed or just couldn’t fully appreciate when you learned about them. This is something that I’m continually reminded of as I continue on in my own career growth, and I hope that I can continue passing these lessons on to others.

      As always, I'm absolutely open to feedback and questions!

      15 votes
    12. This week's album and EP releases

      Here's a list of a lot of things that came out in this past week, including many which are set to release on Friday. Of course, there's no way to be completely comprehensive with this and I...

      Here's a list of a lot of things that came out in this past week, including many which are set to release on Friday. Of course, there's no way to be completely comprehensive with this and I avoided including things where information was too lacking, so feel free to mention anything that isn't on here that you think is worth mentioning. Beyond that, if you have any thoughts of any of these albums, it would be great to hear them :)

      (oh and don't bully me for the genre tags, a lot of these things have very limited resources available and I couldn't individually listen to everything and determine what fits best, so I'm pulling from third parties and an artist's past work a lot of the time)


      03 Greedo & Mustard - Still Summer in the Projects (West Coast Hip Hop, Trap Rap)

      1TEAM - HELLO! (K Pop)

      A Brilliant Lie - Threads: Weaver (Alternative Rock, Pop Punk)

      American Pleasure Club - Fucking Bliss (Post-Industrial, Ambient Pop, Drone)

      Ben Platt - Sing To Me Instead (Pop)

      Betty Carter- The Music Never Stops (Vocal Jazz)

      Billie Eilish - When We Fall Asleep, Where Do We Go? (Alternative R&B, Electropop)

      Borleone - Hard to Kill (Trap Rap)

      Brutus - Nest (Post-Hardcore, Alternative Rock)

      C Duncan - Health (Indie Pop, Indie Rock)

      Carcer City - Silent War (Metalcore)

      Chris Cohen - Chris Cohen (Singer-Songwriter, Indie Pop)

      Clint Alphin - Straight to Marrow (Singer-Songwriter, Bluegrass)

      Coughy - Ocean Hug (Indie Pop)

      DJ Muggs & Mach-Hommy - Tuez-Les Tous (East Coast Hip Hop)

      Devin Townsend - Empath (Progressive Metal, Avant-Garde Metal)

      Facs - Lifelike (Post-Punk Revival)

      Fennesz - Agora (Ambient, Electroacoustic)

      Fredo Bang - Big Ape (Trap)

      Garcia Peoples - Natural Facts (Psychedelic Rock, Roots Rock)

      George Strait - Honky Tonk Time Machine (Country)

      I Prevail - TRAUMA (Metal Core)

      ILL BILL - Cannibal Hulk (East Coast Hip Hop, Hardcore Hip Hop)

      Ian Simmonds - All That's Left (Downtempo, Jazz)

      JBJ95 - Awake (K Pop)

      Jake Miller - Based on a True Story. EP (Pop)

      Jake Owen - Greetings from...Jake (Bro Country)

      Jamie Lawson - The Years In Between (Singer Songwriter)

      Jo Schornikow - Secret Weapon (Ambient Pop, Indie Pop)

      K Á R Y Y N - The Quanta Series (Art Pop, Glitch Pop)

      L.A. Guns - The Devil You Know (Hard Rock, Glam Metal)

      LION BABE - Cosmic Wind (Contemporary R&B)

      La Bouquet - Sad People Dancing (Contemporary R&B)

      Laura Stevenson - The Big Freeze (Indie Folk, Folk Rock)

      Lil Debbie - Bay Chronicles (Trap Rap)

      Logic - Supermarket (Soundtrack) (Indie Pop, Pop Rap)

      M. Lockwood - Communion In The Ashes (Alt-Country, Indie Folk, Power Pop)

      MaHaWaM - Is an Island (Hip Hop, House, Indie Pop)

      Magic Circle - Departed Souls (Traditional Doom Metal, Heavy Psych)

      Marvin Gaye - You’re the Man (Soul)

      Matthew Herbert Big Band - The State Between Us (Big Band, Electronic)

      Mdou Moctar - Ilana: The Creator (Tishoumaren)

      Mechanical God Creation - The New Chapter (Death Metal)

      Mekons - Deserted (Art Punk)

      Melii - phAses (Pop)

      Monsta X - Shout Out (K Pop)

      Moodie Black - MB I I I. V MICHOA (Industrial Hip Hop)

      Moon Tooth - Crux (Progressive Metal)

      Musket Hawk - Upside of Sick (Grindcore, Doom Metal)

      NEIKED - Best Of Hard Drive (Dance Pop)

      Nightmarathons - Missing Parts (Pop Punk)

      O.A.R. - The Mighty (Pop Rock)

      OWEL - Paris (Emo, Indie Rock)

      Ohtis - Curve of Earth (Indie Folk)

      Okey Dokey - Tell All Your Friend (Indie Pop)

      Oshiego - The Book of Wonders (Death Metal, Thrash Metal, Grindcore)

      PENTAGON (Korea) - Genie:us (K Pop)

      Park Ji Hoon - O'CLOCK (K Pop)

      pH-1 - HALO (K Pop)

      Pink Sweat$ - Volume 2 EP (Singer Songwriter)

      Quelle Chris - Guns (Abstract Hip Hop)

      Randy Randall - Sound Field Volume One (Ambient, Drone)

      Reaches - Wherever The Internet Goes, Sorrow Follows (Dance Pop, House)

      Saweetie - ICY EP (Trap Rap)

      Section H8 - Phase One (Hardcore Punk, Heavy Metal)

      Show Me The Body - Dog Whistle (Hardcore Punk)

      Simple Creatures - Strange Love (Pop Rock, Electropop)

      Small Feet - With Psychic Powers (Indie Pop, Indie Folk)

      Son Volt - Union (Americana, Alt-Country)

      Soulja Boy Tell 'Em - Tell Ya (Pop Rap)

      Stella Parton - Survivor (Country)

      Steve Earle & The Dukes - GUY (Americana, Country Rock)

      Stray Kids - Clé 1: MIROH (K Pop)

      Suzi Quatro - No Control (Hard Rock)

      TAEYEON - Four Seasons (K Pop)

      Tay Iwar - GEMINI (Singer Songwriter)

      The Bobbleheads - Myths and Fables (Pop Rock, Indie Rock)

      The Maine - You Are OK (Pop Rock, Alternative Rock)

      The Strumbellas - Rattlesnake (Indie Rock, Folk Rock)

      The Underground Youth - Lust & Fear (Psychedelic Rock, Gothic Rock)

      The XCERTS - Wildheart Dreaming EP (Power Pop )

      Tom Williams - What Did You Want To Be? (Indie Rock)

      Triumvir Foul - Urine of Abomination (Death Metal)

      Unkle - The Road: Part II (Art Pop, Trip Hop)

      White Denim - Side Effects (Indie Rock, Psychedelic Rock)

      Whitechapel - The Valley (Deathcore, Groove Metal)

      Wincent Weiss - Irgendwie anders (Pop)

      Yelawolf - Trunk Muzik III (Southern Hip Hop)

      Yngwie Malmsteen - Blue Lightning (Neoclassical Metal)

      woods + segal (Billy Woods & Kenny Segal)- Hiding Places (East Coast Hip Hop)

      12 votes
    13. What have you been watching/reading this week? (Anime/Manga)

      What have you been watching and reading this week? You don't need to give us a whole essay if you don't want to, but please write something! Feel free to talk about something you saw that was...

      What have you been watching and reading this week? You don't need to give us a whole essay if you don't want to, but please write something! Feel free to talk about something you saw that was cool, something that was bad, ask for recommendations, or anything else you can think of.

      If you want to, feel free to find the thing you're talking about and link to its pages on Anilist, MAL, or any other database you use!

      9 votes
    14. What are you reading these days? #15

      What are you reading currently? Fiction or non-fiction, any genre, any language! Tell us what you're reading, and talk a bit about it. Past weeks: Week #1 · Week #2 · Week #3 · Week #4 · Week #5 ·...

      What are you reading currently? Fiction or non-fiction, any genre, any language! Tell us what you're reading, and talk a bit about it.

      Past weeks: Week #1 · Week #2 · Week #3 · Week #4 · Week #5 · Week #6 · Week #7 · Week #8 · Week #9 · Week #10 · Week #11 · Week #12 · Week #13 · Week #14

      16 votes
    15. This week's album and EP releases

      Here's a list of a lot of things that came out in this past week, including many which are set to release on Friday. Of course, there's no way to be completely comprehensive with this and I...

      Here's a list of a lot of things that came out in this past week, including many which are set to release on Friday. Of course, there's no way to be completely comprehensive with this and I avoided including things where information was too lacking, so feel free to mention anything that isn't on here that you think is worth mentioning. Beyond that, if you have any thoughts of any of these albums, it would be great to hear them :)

      (oh and don't bully me for the genre tags, a lot of these things have very limited resources available and I couldn't individually listen to everything and determine what fits best, so I'm pulling from third parties and an artist's past work a lot of the time)


      American Football - American Football (Midwest Emo)

      Andrew Bird - My Finest Work Yet (Chamber Pop, Singer/Songwriter)

      Anteros - When We Land (Indie Pop)

      Aoratos - Gods Without Name (Black Metal)

      Apparat - LP5 (Techno)

      Aubrey Logan - Where The Sunshine Is Expensive (Vocal Jazz)

      Avey Tare - Cows on Hourglass Pond (Neo-Psychedelia, Psychedelic Folk)

      Bad Suns - Mystic Truth (Alternative Rock, Indie Pop)

      Ballout - T.I. (Drill)

      Battle Beast - No More Hollywood Endings (Heavy Metal, Power Metal)

      Bill MacKay - Fountain Fire (Folk Rock)

      Blue Angels - Sue EP (Ambient Folk)

      Bonnie Tyler - Between The Earth And The Stars (Pop Rock)

      Brian Carpenter’s Beat Circus - These Wicked Things (Avant Prog, Dark Cabaret)

      Brim Liski - Duels (Shoegaze, Electronica)

      Cellar Darling - The Spell (Folk Metal)

      Christian Scott aTunde Adjuah - Ancestral Recall (Jazz Fusion)

      Crows - Silver Tongues (Post Punk)

      Dean Lewis - A Place We Knew (Singer-Songwriter, Pop)

      Delta Heavy - Only in Dreams (Drumstep)

      Dominanz - Let The Death Enter (Death Metal)

      Donna Grantis (of 3rdEyeGirl) - Diamonds & Dynamite (Hard Rock)

      Dos Monos - Dos City (Experimental Hip Hop)

      Emily Wells - This World Is Too ____ For You (Chamber Pop)

      Everglow - Arrival of Everglow (K-Pop, Dance-Pop)

      Ex Hex - It's Real (Power Pop, Alternative Rock)

      Extortionist - Sever the Cord (Deathcore)

      Famous Dex - Wave Creator (Trap Rap, Pop Rap)

      Flora Cash - Press (Indie Folk)

      Flume - Hi This Is Flume (Wonky)

      Fred Everything - Long Way Home (Deep House)

      From Sorrow to Serenity - Reclaim (Deathcore, Groove Metal, Metalcore)

      Heize - She's Fine (K-Pop, Contemporary R&B)

      Ian Daniel Kehoe - Secret Republic (Pop)

      Ibibio Sound Machine - Doko Mien (Afro-Funk)

      Jayda G - Significant Changes (Deep House)

      Jenny Lewis - On the Line (Pop Rock, Indie Pop)

      Jeon Se Woon - Plus Minus Zero (K-Pop)

      Johnny Booth - Firsthand Accounts (Metalcore)

      Kevin Garrett - Hoax (Singer-Songwriter)

      La Casa Azul - La Gran Esfera (Bubblegum, Indie Pop)

      La Dispute - Panorama (Emo)

      Lafawndah - Ancestor Boy (Alternative R&B, Art Pop)

      Lambchop - This (is what I wanted to tell you) (Sophisti-Pop, Art Pop)

      Leiva - Nuclear (Pop)

      Lil Xan - Heartbreak Soldiers pt. 2 (Trap Rap, Emo Rap)

      Lil Yee - Live 4 It, Die 4 It EP (West Coast Hip Hop)

      Lucy Rose - No Words Left (Singer/Songwriter, Contemporary Folk)

      Luther Dickinson And Sisters Of The Strawberry Moon - Solstice (Southern Rock, Blues)

      Mary Lattimore And Mac McCaughan (of Superchunk) - New Rain Duets (Electroacoustic)

      Matt Anderson - Halfway Home By Morning (Blues)

      Maverick Sabre - When I Wake Up (Neo-Soul)

      Mayfield - Careless Love (Post-Hardcore)

      Meridian - Margin of Error (Heavy Metal)

      Momoland - Show Me (K-Pop, Dance-Pop)

      NAV - Bad Habits (Alternative R&B, Trap Rap, Pop Rap)

      Niggght - Violent Delicacy EP (Doom Metal, Blues)

      Nilüfer Yanya - Miss Universe (Indie Pop, Indie Rock)

      No Win - Downey (Indie Rock, Power Pop)

      Obsidian Sea - Strangers (Progressive Rock)

      Orville Peck - Pony (Singer/Songwriter, Alt-Country)

      Parting Gift - Ensom (Alternative Rock)

      PnB Rock - TrapStar Turnt PopStar (Trap Rap)

      Problem Daughter - Grow Up Trash (Pop Punk)

      Queen Key - Eat My Pussy Again (Trap Rap)

      RPWL - Tales From Outer Space (Progressive Rock)

      Rachael Sage - PseudoMyopia (Singer Songwriter)

      Red Sun Rising - Peel EP (Post Grunge)

      Rich the Kid - The World Is Yours 2 (Trap Rap, Southern Hip Hop)

      Ritual Howls - Rendered Armor (Gothic Country, Gothic Rock, Post-Punk)

      Robin Trower - Coming Closer To Day (Blues Rock)

      Ruth B - Maybe I'll Find You Again (Singer/Songwriter)

      Sermon - Birth of the Marvellous (Alternative Metal, Progressive Rock)

      Shawn James - The Dark & The Light (Contemporary Rock)

      Shlohmo - The End (Electronic)

      Sleep In. - The Stars On Your Ceiling (Emo)

      Sleeper - The Modern Age (Britpop)

      Slow Caves - Falling (Indie Rock)

      Spiral Stairs (Pavement’s Scott Kannberg) - We Wanna Be Hyp-No-Tized (Alternative Rock)

      Stillhound - Stillhound (House, Indie Rock)

      Strand of Oaks - Eraserland (Indie Folk, Indie Rock)

      Suzi Wu - Error 404 EP (Indie Pop)

      Taali - I Am Here (Art Pop)

      Tamaryn - Dreaming The Dark (Synth Pop, Dream Pop)

      Terry Allen And The Panhandle Mystery Band - Pedal Steal + Four Corners (Singer Songwriter)

      The Flaying - Angry, Undead (Death Metal)

      These New Puritans - Inside The Rose (Art Pop, Darkwave)

      They Hate Change - Clearwater EP (Experimental Hip Hop)

      Trevor Daniel - Restless (Pop Rap, Emo Rap)

      Truth Corroded - Bloodlands (Thrash Metal, Death Metal)

      Tyson Meade - Robbing The Nuclear Family (Indie Rock)

      VAV - Thrilla Killa (K-Pop, Dance-Pop, Electropop)

      Vendredi sur mer - Premiers émois (Electropop, French Pop)

      Wallows - Nothing Happens (Indie Rock, Indie Pop)

      We Show Up On Radar - Zanzibar Whip Coral (Indie Pop)

      Wild Belle - Everybody One of a Kind (Pop Reggae, Indie Pop)

      Yawners - Just Calm Down (Indie Rock)

      Yerin Baek - Our Love Is Great (K-Pop)

      13 votes
    16. What have you been watching/reading this week? (Anime/Manga)

      What have you been watching and reading this week? You don't need to give us a whole essay if you don't want to, but please write something! Feel free to talk about something you saw that was...

      What have you been watching and reading this week? You don't need to give us a whole essay if you don't want to, but please write something! Feel free to talk about something you saw that was cool, something that was bad, ask for recommendations, or anything else you can think of.

      If you want to, feel free to find the thing you're talking about and link to its pages on Anilist, MAL, or any other database you use!

      11 votes
    17. What have you been listening to this week?

      What have you been listening to this week? You don't need to do a 6000 word review if you don't want to, but please write something! If you've just picked up some music, please update on that as...

      What have you been listening to this week? You don't need to do a 6000 word review if you don't want to, but please write something! If you've just picked up some music, please update on that as well, we'd love to see your hauls :)

      Feel free to give recs or discuss anything about each others' listening habits.

      You can make a chart if you use last.fm:

      http://www.tapmusic.net/lastfm/

      Remember that linking directly to your image will update with your future listening, make sure to reupload to somewhere like imgur if you'd like it to remain what you have at the time of posting.

      19 votes
    18. What have you been listening to this week?

      What have you been listening to this week? You don't need to do a 6000 word review if you don't want to, but please write something! If you've just picked up some music, please update on that as...

      What have you been listening to this week? You don't need to do a 6000 word review if you don't want to, but please write something! If you've just picked up some music, please update on that as well, we'd love to see your hauls :)

      Feel free to give recs or discuss anything about each others' listening habits.

      You can make a chart if you use last.fm:

      http://www.tapmusic.net/lastfm/

      Remember that linking directly to your image will update with your future listening, make sure to reupload to somewhere like imgur if you'd like it to remain what you have at the time of posting.

      14 votes
    19. What have you been watching/reading this week? (Anime/Manga)

      What have you been watching and reading this week? You don't need to give us a whole essay if you don't want to, but please write something! Feel free to talk about something you saw that was...

      What have you been watching and reading this week? You don't need to give us a whole essay if you don't want to, but please write something! Feel free to talk about something you saw that was cool, something that was bad, ask for recommendations, or anything else you can think of.

      If you want to, feel free to find the thing you're talking about and link to its pages on Anilist, MAL, or any other database you use!

      12 votes
    20. what creative projects are you working on?

      it's been a month since the last thread, so i think it's time for a new one of these. here you can share some of the projects that you're working on (of any kind, be they digital, physical, or...

      it's been a month since the last thread, so i think it's time for a new one of these. here you can share some of the projects that you're working on (of any kind, be they digital, physical, or whatever) that wouldn't really work as its own post.

      12 votes
    21. What have you been watching/reading this week? (Anime/Manga)

      What have you been watching and reading this week? You don't need to give us a whole essay if you don't want to, but please write something! Feel free to talk about something you saw that was...

      What have you been watching and reading this week? You don't need to give us a whole essay if you don't want to, but please write something! Feel free to talk about something you saw that was cool, something that was bad, ask for recommendations, or anything else you can think of.

      If you want to, feel free to find the thing you're talking about and link to its pages on Anilist, MAL, or any other database you use!

      9 votes
    22. What have you been watching/reading this week? (Anime/Manga)

      What have you been watching and reading this week? You don't need to give us a whole essay if you don't want to, but please write something! Feel free to talk about something you saw that was...

      What have you been watching and reading this week? You don't need to give us a whole essay if you don't want to, but please write something! Feel free to talk about something you saw that was cool, something that was bad, ask for recommendations, or anything else you can think of.

      If you want to, feel free to find the thing you're talking about and link to its pages on Anilist, MAL, or any other database you use!

      7 votes
    23. Workshop Wednesday II: we're back!

      Hey everyone, thanks to you who posted in the original Workshop Wednesday; I think it went really well! Here we are for week 2 (sorry it took me til noon, I was busy this morning!) Some questions:...

      Hey everyone, thanks to you who posted in the original Workshop Wednesday; I think it went really well! Here we are for week 2 (sorry it took me til noon, I was busy this morning!)

      Some questions:

      • do we need a new topic every week? Or will one be enough?
      • any other comments/suggestions?

      Please begin your comment with [META] to discuss these. Otherwise, I'll copy and paste the guidelines from last week.


      What's a workshop?

      Basically, a workshop is when you have a bunch of people with poems or stories they've written, and everyone gets together, reads everyone's work, and comments on it, sharing what they got out of it and what the author could do to improve the work for publication. I used to do a lot of them in college, and I've missed the dynamic since graduating. I thought others might also be interested, so here goes nothing.

      How this'll work (for now, anyway)

      Each week, I'll post a "Workshop Wednesday" post. If you have a poem or (short) story you'd like workshopped, post that as a top comment. Then, read others' top comments and reply with what works/doesn't work/questions you have/ideas you have for the piece that could make it better. If you post some writing, try to comment on at least two other people's pieces as well -- we're here to help each other improve.

      10 votes
    24. What have you been listening to this week?

      What have you been listening to this week? You don't need to do a 6000 word review if you don't want to, but please write something! If you've just picked up some music, please update on that as...

      What have you been listening to this week? You don't need to do a 6000 word review if you don't want to, but please write something! If you've just picked up some music, please update on that as well, we'd love to see your hauls :)

      Feel free to give recs or discuss anything about each others' listening habits.

      You can make a chart if you use last.fm:

      http://www.tapmusic.net/lastfm/

      Remember that linking directly to your image will update with your future listening, make sure to reupload to somewhere like imgur if you'd like it to remain what you have at the time of posting.

      21 votes
    25. Workshop Wednesday: Post a poem/story/writing-thing and get feedback!

      So I was talking to @cadadr in this thread about starting a workshop on Tildes, and since today makes for an alliterative title, I thought I'd start one now. What's a workshop? Basically, a...

      So I was talking to @cadadr in this thread about starting a workshop on Tildes, and since today makes for an alliterative title, I thought I'd start one now.

      What's a workshop?

      Basically, a workshop is when you have a bunch of people with poems or stories they've written, and everyone gets together, reads everyone's work, and comments on it, sharing what they got out of it and what the author could do to improve the work for publication. I used to do a lot of them in college, and I've missed the dynamic since graduating. I thought others might also be interested, so here goes nothing.

      How this'll work (for now, anyway)

      Each week, I'll post a "Workshop Wednesday" post. If you have a poem or (short) story you'd like workshopped, post that as a top comment. Then, read others' top comments and reply with what works/doesn't work/questions you have/ideas you have for the piece that could make it better. If you post some writing, try to comment on at least two other people's pieces as well -- we're here to help each other improve.

      Going forward

      Since this is the first one, obviously we can change the format or do something else. Please start meta-discussions with the word [META] so that we know it's not a poem you're trying to workshop!

      I'm excited. Let's do this!

      20 votes
    26. What have you been listening to this week?

      What have you been listening to this week? You don't need to do a 6000 word review if you don't want to, but please write something! If you've just picked up some music, please update on that as...

      What have you been listening to this week? You don't need to do a 6000 word review if you don't want to, but please write something! If you've just picked up some music, please update on that as well, we'd love to see your hauls :)

      Feel free to give recs or discuss anything about each others' listening habits.

      You can make a chart if you use last.fm:

      http://www.tapmusic.net/lastfm/

      Remember that linking directly to your image will update with your future listening, make sure to reupload to somewhere like imgur if you'd like it to remain what you have at the time of posting.

      14 votes
    27. What are you reading these days? #14

      What are you reading currently? Fiction or non-fiction, any genre, any language! Tell us what you're reading, and talk a bit about it. Notes: I could not start the thread yesterday on Friday like...

      What are you reading currently? Fiction or non-fiction, any genre, any language! Tell us what you're reading, and talk a bit about it.

      Notes: I could not start the thread yesterday on Friday like I used to, I'm sorry for the delay.

      Past weeks: Week #1 · Week #2 · Week #3 · Week #4 · Week #5 · Week #6 · Week #7 · Week #8 · Week #9 · Week #10 · Week #11 · Week #12 · Week #13

      16 votes
    28. What have you been listening to this week?

      What have you been listening to this week? You don't need to do a 6000 word review if you don't want to, but please write something! If you've just picked up some music, please update on that as...

      What have you been listening to this week? You don't need to do a 6000 word review if you don't want to, but please write something! If you've just picked up some music, please update on that as well, we'd love to see your hauls :)

      Feel free to give recs or discuss anything about each others' listening habits.

      You can make a chart if you use last.fm:

      http://www.tapmusic.net/lastfm/

      Remember that linking directly to your image will update with your future listening, make sure to reupload to somewhere like imgur if you'd like it to remain what you have at the time of posting.

      12 votes
    29. Code Quality Tip: Cyclomatic complexity in depth.

      Preface Recently I briefly touched on the subject of cyclomatic complexity. This is an important concept for any programmer to understand and think about as they write their code. In order to...

      Preface

      Recently I briefly touched on the subject of cyclomatic complexity. This is an important concept for any programmer to understand and think about as they write their code. In order to provide a more solid understanding of the subject, however, I feel that I need to address the topic more thoroughly with a more practical example.


      What is cyclomatic complexity?

      The concept of "cyclomatic complexity" is simple: the more conditional branching and looping in your code, the more complex--and therefore the more difficult to maintain--that code is. We can visualize this complexity by drawing a diagram that illustrates the flow of logic in our program. For example, let's take the following toy example of a user login attempt:

      <?php
      
      $login_data = getLoginCredentialsFromInput();
      
      $login_succeeded = false;
      $error = '';
      if(usernameExists($login_data['username'])) {
          $user = getUser($login_data['username']);
          
          if(!isDeleted($user)) {
              if(!isBanned($user)) {
                  if(!loginRateLimitReached($user)) {
                      if(passwordMatches($user, $login_data['password'])) {
                          loginUser($user);
                          $login_succeeded = true;
                      } else {
                          $error = getBadPasswordError();
                          logBadLoginAttempt();
                      }
                  } else {
                      $error = getLoginRateLimitError($user);
                  }
              } else {
                  $error = getUserBannedError($user);
              }
          } else {
              $error = getUserDeletedError($user);
          }
      } else {
          $error = getBadUsernameError($login_data['username']);
      }
      
      if($login_succeeded) {
          sendSuccessResponse();
      } else {
          sendErrorResponse($error);
      }
      
      ?>
      

      A diagram for this logic might look something like this:

      +-----------------+
      |                 |
      |  Program Start  |
      |                 |
      +--------+--------+
               |
               |
               v
      +--------+--------+    +-----------------+
      |                 |    |                 |
      |    Username     +--->+    Set Error    +--+
      |    Exists?      | No |                 |  |
      |                 |    +-----------------+  |
      +--------+--------+                         |
               |                                  |
           Yes |                                  |
               v                                  |
      +--------+--------+    +-----------------+  |
      |                 |    |                 |  |
      |  User Deleted?  +--->+    Set Error    +->+
      |                 | Yes|                 |  |
      +--------+--------+    +-----------------+  |
               |                                  |
            No |                                  |
               v                                  |
      +--------+--------+    +-----------------+  |
      |                 |    |                 |  |
      |  User Banned?   +--->+    Set Error    +->+
      |                 | Yes|                 |  |
      +--------+--------+    +-----------------+  |
               |                                  |
            No |                                  |
               v                                  |
      +--------+--------+    +-----------------+  |
      |                 |    |                 |  |
      |   Login Rate    +--->+    Set Error    +->+
      | Limit Reached?  | Yes|                 |  |
      |                 |    +-----------------+  |
      +--------+--------+                         |
               |                                  |
            No |                                  |
               v                                  |
      +--------+--------+    +-----------------+  |
      |                 |    |                 |  |
      |Password Matches?+--->+    Set Error    +->+
      |                 | No |                 |  |
      +--------+--------+    +-----------------+  |
               |                                  |
           Yes |                                  |
               v                                  |
      +--------+--------+    +----------+         |
      |                 |    |          |         |
      |   Login User    +--->+ Converge +<--------+
      |                 |    |          |
      +-----------------+    +---+------+
                                 |
                                 |
               +-----------------+
               |
               v
      +--------+--------+
      |                 |
      |   Succeeded?    +-------------+
      |                 | No          |
      +--------+--------+             |
               |                      |
           Yes |                      |
               v                      v
      +--------+--------+    +--------+--------+
      |                 |    |                 |
      |  Send Success   |    |   Send Error    |
      |    Message      |    |    Message      |
      |                 |    |                 |
      +-----------------+    +-----------------+
      

      It's important to note that between nodes in this directed graph, you can find certain enclosed regions being formed. Specifically, each conditional branch that converges back into the main line of execution generates an additional region. The number of these distinct enclosed regions is directly proportional to the level of cyclomatic complexity of the system--that is, more regions means more complicated code.


      Clocking out early.

      There's an important piece of information I noted when describing the above example:

      . . . each conditional branch that converges back into the main line of execution generates an additional region.

      The above example is made complex largely due to an attempt to create a single exit point at the end of the program logic, causing these conditional branches to converge and thus generate the additional enclosed regions within our diagram.

      But what if we stopped trying to converge back into the main line of execution? What if, instead, we decided to interrupt the program execution as soon as we encountered an error? Our code might look something like this:

      <?php
      
      $login_data = getLoginCredentialsFromInput();
      
      if(!usernameExists($login_data['username'])) {
          sendErrorResponse(getBadUsernameError($login_data['username']));
          return;
      }
      
      $user = getUser($login_data['username']);
      if(isDeleted($user)) {
          sendErrorResponse(getUserDeletedError($user));
          return;
      }
      
      if(isBanned($user)) {
          sendErrorResponse(getUserBannedError($user));
          return;
      }
      
      if(loginRateLimitReached($user)) {
          logBadLoginAttempt($user);
          sendErrorResponse(getLoginRateLimitError($user));
          return;
      }
      
      if(!passwordMatches($user, $login_data['password'])) {
          logBadLoginAttempt($user);
          sendErrorResponse(getBadPasswordError());
          return;
      }
      
      loginUser($user);
      sendSuccessResponse();
      
      ?>
      

      Before we've even constructed a diagram for this logic, we can already see just how much simpler this logic is. We don't need to traverse a tree of if statements to determine which error message has priority to be sent out, we don't need to attempt to follow indentation levels, and our behavior on success is right at the very end and at the lowest level of indentation, where it's easily and obviously located at a glance.

      Now, however, let's verify this reduction in complexity by examining the associated diagram:

      +-----------------+
      |                 |
      |  Program Start  |
      |                 |
      +--------+--------+
               |
               |
               v
      +--------+--------+    +-----------------+
      |                 |    |                 |
      |    Username     +--->+   Send Error    |
      |    Exists?      | No |    Message      |
      |                 |    |                 |
      +--------+--------+    +-----------------+
               |
           Yes |
               v
      +--------+--------+    +-----------------+
      |                 |    |                 |
      |  User Deleted?  +--->+   Send Error    |
      |                 | Yes|    Message      |
      +--------+--------+    |                 |
               |             +-----------------+
            No |
               v
      +--------+--------+    +-----------------+
      |                 |    |                 |
      |  User Banned?   +--->+   Send Error    |
      |                 | Yes|    Message      |
      +--------+--------+    |                 |
               |             +-----------------+
            No |
               v
      +--------+--------+    +-----------------+
      |                 |    |                 |
      |   Login Rate    +--->+   Send Error    |
      | Limit Reached?  | Yes|    Message      |
      |                 |    |                 |
      +--------+--------+    +-----------------+
               |
            No |
               v
      +--------+--------+    +-----------------+
      |                 |    |                 |
      |Password Matches?+--->+   Send Error    |
      |                 | No |    Message      |
      +--------+--------+    |                 |
               |             +-----------------+
           Yes |
               v
      +--------+--------+
      |                 |
      |   Login User    |
      |                 |
      +--------+--------+
               |
               |
               v
      +--------+--------+
      |                 |
      |  Send Success   |
      |    Message      |
      |                 |
      +-----------------+
      

      Something should immediately stand out here: there are no enclosed regions in this diagram! Furthermore, even our new diagram is much simpler to follow than the old one was.


      Reality is rarely simple.

      The above is a really forgiving example. It has no loops, and loops are going to create enclosed regions that can't be broken apart so easily; it has no conditional branches that are so tightly coupled with the main path of execution that they can't be broken up; and the scope of functionality and side effects are minimal. Sometimes you can't break those regions up. So what do we do when we inevitably encounter these cases?

      High cyclomatic complexity in your program as a whole is inevitable for sufficiently large projects, especially in a production environment, and your efforts to reduce it can only go so far. In fact, I don't recommend trying to remove all or even most instances of cyclomatic complexity at all--instead, you should just be keeping the concept in mind to determine whether or not a function, method, class, module, or other component of your system is accumulating technical debt and therefore in need of refactoring.

      At this point, astute readers might ask, "How does refactoring help if the cyclomatic complexity doesn't actually go away?", and this is a valid concern. The answer to that is simple, however: we're hiding complexity behind abstractions.

      To test this, let's forget about cyclomatic complexity for a moment and instead focus on simplifying the refactored version of our toy example using abstraction:

      <?php
      
      function handleLoginAttempt($login_data) {
          if(!usernameExists($login_data['username'])) {
              sendErrorResponse(getBadUsernameError($login_data['username']));
              return;
          }
      
          $user = getUser($login_data['username']);
          if(isDeleted($user)) {
              sendErrorResponse(getUserDeletedError($user));
              return;
          }
      
          if(isBanned($user)) {
              sendErrorResponse(getUserBannedError($user));
              return;
          }
      
          if(loginRateLimitReached($user)) {
              logBadLoginAttempt($user);
              sendErrorResponse(getLoginRateLimitError($user));
              return;
          }
      
          if(!passwordMatches($user, $login_data['password'])) {
              logBadLoginAttempt($user);
              sendErrorResponse(getBadPasswordError());
              return;
          }
      
          loginUser($user);
          sendSuccessResponse();
      }
      
      $login_data = getLoginCredentialsFromInput();
      
      handleLoginAttempt($login_data);
      
      ?>
      

      The code above is functionally identical to our refactored example from earlier, but has an additional abstraction via a function. Now we can diagram this higher-level abstraction as follows:

      +-----------------+
      |                 |
      |  Program Start  |
      |                 |
      +--------+--------+
               |
               |
               v
      +--------+--------+
      |                 |
      |  Attempt Login  |
      |                 |
      +-----------------+
      

      This is, of course, a pretty extreme example, but this is how we handle thinking about complex program logic. We abstract it down to the barest basics so that we can visualize, in its simplest form, what the program is supposed to do. We don't actually care about the implementation unless we're digging into that specific part of the system, because otherwise we would be so bogged down by the details that we wouldn't be able to reason about what our program is supposed to do.

      Likewise, we can use these abstractions to hide away the cyclomatic complexity underlying different components of our software. This keeps everything clean and clutter-free in our head. And the more we do to keep our smaller components simple and easy to think about, the easier the larger components are to deal with, no matter how much cyclomatic complexity all of those components share as a collective.


      Final Thoughts

      Cyclomatic complexity isn't a bad thing to have in your code. The concept itself is only intended to be used as one of many tools to assess when your code is accumulating too much technical debt. It's a warning sign that you may need to change something, nothing more. But it's an incredibly useful tool to have available to you and you should get comfortable using it.

      As a general rule of thumb, you can usually just take a glance at your code and assess whether or not there's too much cyclomatic complexity in a component by looking for either of the following:

      • Too many loops and/or conditional statements nested within each other, i.e. you have a lot of indentation.
      • Many loops in the same function/method.

      It's not a perfect rule of thumb, but it's useful for at least 90% of your development needs, and there will inevitably be cases where you will prefer to accept some greater cyclomatic complexity because there is some benefit that makes it a better trade-off. Making that judgment is up to you as a developer.

      As always, I'm more than willing to listen to feedback and answer any questions!

      25 votes
    30. This Week's Releases 01/03 - Solange, Pond, 2-Chainz and more.

      Releases of the week 23/02/2019 - 01/03/2019 Featured Release Solange - When I Get Home (Neo-Soul, Alternative R&B) Solange has unveiled her new album, When I Get Home. Spanning 19 tracks, it...

      Releases of the week 23/02/2019 - 01/03/2019


      Featured Release

      Solange - When I Get Home (Neo-Soul, Alternative R&B)

      Solange has unveiled her new album, When I Get Home. Spanning 19 tracks, it marks Solange’s fourth album to date and serves as the follow-up to her 2016 opus, A Seat at the Table.
      When I Get Home was written, performed, and executive produced by Solange herself, but she was hardly in the studio. Among the album’s many contributors were Earl Sweatshirt, Panda Bear, Tyler the Creator, Blood Orange’s Dev Hynes, Sampha, Pharrell Williams, Gucci Mane, Playboi Carti, Raphael Saadiq, Metro Boomin, The-Dream, Cassie, Abra, and The Internet’s Steve Lacy.
      “Y’all! I’m filled w so much joy right now!!! Wow! I can’t thank y’all enough for this moment and for all the feelings i feel in my body!” Solange wrote in a tweet. “I’m bringing home w me everywhere I go yalll and I ain’t running from shit no more. Your love lifts me up so high. Thank you!”

      Source: Consequence of Sound

      Listen to single

      Stream

      Other Notable Relases

      Pond - Tasmania (Neo-Psychedelia, Psychedelic Pop)

      Listen to single
      Stream

      2 Chainz - Rap or Go to the League (Trap Rap, Southern Hip Hop)

      Listen to single
      Stream

      Sun Kil Moon - I Also Want To Die In New Orleans (Contemporary Folk, Spoken Word)

      Listen to single
      Stream

      T-Pain - 1UP (Alternative R&B, Trap Rap)

      Listen to single
      Stream

      Feel free to discuss or feature any and all other releases in the comments below

      Discussion Points

      Have you listened to any of these releases?
      What are your thoughts?
      What are you looking forward to listen to?
      What have you enjoyed from these artists in the past?

      // All feedback on this format welcome.

      7 votes
    31. what creative projects are you working on?

      this seems like a good time to bring back this question and maybe make it more consistent and recurring since there's just been an influx of new people. i last asked this about three months ago...

      this seems like a good time to bring back this question and maybe make it more consistent and recurring since there's just been an influx of new people. i last asked this about three months ago and i'm sure there are both new people to answer this question and new ideas that people who already answered or would answer have come up with since.


      for my part, i did this post just now as a short little thing. on the larger scale, i've been intending to get back into editing my personal worldbuilding wiki because there's a bunch of shit i want to do with that, but college isn't exactly leaving a lot of time for it and every time i try to start on stuff gets tedious so i've been holding off on it for a little bit. i've also been chipping away at the fun that will be one of several religious books, but i don't really know how i want to structure it yet so the verses pictured and others are liable to get shuffled around at this point.

      33 votes
    32. What have you been watching/reading this week? (Anime/Manga)

      What have you been watching and reading this week? You don't need to give us a whole essay if you don't want to, but please write something! Feel free to talk about something you saw that was...

      What have you been watching and reading this week? You don't need to give us a whole essay if you don't want to, but please write something! Feel free to talk about something you saw that was cool, something that was bad, ask for recommendations, or anything else you can think of.

      If you want to, feel free to find the thing you're talking about and link to its pages on Anilist, MAL, or any other database you use!

      15 votes
    33. What are you reading these days? #13

      What are you reading currently? Fiction or non-fiction, any genre, any language! Tell us what you're reading, and talk a bit about it. Notes: I could not start the thread yesterday on Friday like...

      What are you reading currently? Fiction or non-fiction, any genre, any language! Tell us what you're reading, and talk a bit about it.

      Notes: I could not start the thread yesterday on Friday like I used to, I'm sorry for the delay.

      Past weeks: Week #1 · Week #2 · Week #3 · Week #4 · Week #5 · Week #6 · Week #7 · Week #8 · Week #9 · Week #10 · Week #11 · Week #12

      23 votes
    34. What have you been listening to this week?

      What have you been listening to this week? You don't need to do a 6000 word review if you don't want to, but please write something! If you've just picked up some music, please update on that as...

      What have you been listening to this week? You don't need to do a 6000 word review if you don't want to, but please write something! If you've just picked up some music, please update on that as well, we'd love to see your hauls :)

      Feel free to give recs or discuss anything about each others' listening habits.

      You can make a chart if you use last.fm:

      http://www.tapmusic.net/lastfm/

      Remember that linking directly to your image will update with your future listening, make sure to reupload to somewhere like imgur if you'd like it to remain what you have at the time of posting.

      31 votes
    35. What have you been watching/reading this week?

      I'm gonna move this to Fridays from now on, it's easier for me to remember to post. Anyway, what have you been watching/reading this week? Feel free to talk about something you saw that was cool,...

      I'm gonna move this to Fridays from now on, it's easier for me to remember to post.

      Anyway, what have you been watching/reading this week?

      Feel free to talk about something you saw that was cool, something that was bad, ask for recommendations, or anything else you can think of.

      If you want to, feel free to find the thing you're talking about and link to its Anilist, MAL, or any other anime/manga database you use!

      10 votes
    36. What have you been watching/reading this week? (Anime/Manga)

      Picking these threads up from @Cleb after talking to her about it :) What have you been watching and reading this week? You don't need to give us a whole essay if you don't want to, but please...

      Picking these threads up from @Cleb after talking to her about it :)

      What have you been watching and reading this week? You don't need to give us a whole essay if you don't want to, but please write something! Feel free to talk about something you saw that was cool, something that was bad, ask for recommendations, or anything else you can think of.

      If you want to, feel free to find the thing you're talking about and link to its pages on Anilist, MAL, or any other database you use!

      20 votes
    37. What have you been listening to this week?

      What have you been listening to this week? You don't need to do a 6000 word review if you don't want to, but please write something! If you've just picked up some music, please update on that as...

      What have you been listening to this week? You don't need to do a 6000 word review if you don't want to, but please write something! If you've just picked up some music, please update on that as well, we'd love to see your hauls :)

      Feel free to give recs or discuss anything about each others' listening habits.

      You can make a chart if you use last.fm:

      http://www.tapmusic.net/lastfm/

      Remember that linking directly to your image will update with your future listening, make sure to reupload to somewhere like imgur if you'd like it to remain what you have at the time of posting.

      17 votes
    38. What are you reading these days? #12

      What are you reading currently? Fiction or non-fiction, any genre, any language! Tell us what you're reading, and talk a bit about it. Edit 2019-01-16: Add the link for Week #11 below. Past weeks:...

      What are you reading currently? Fiction or non-fiction, any genre, any language! Tell us what you're reading, and talk a bit about it.

      Edit 2019-01-16: Add the link for Week #11 below.

      Past weeks: Week #1 · Week #2 · Week #3 · Week #4 · Week #5 · Week #6 · Week #7 · Week #8 · Week #9 · Week #10 · Week #11

      11 votes
    39. What have you been watching/reading this week? (Anime/Manga)

      Feel free to talk about something you saw that was cool, something that was bad, ask for recommendations, or anything else you can think of. If you want to, feel free to find the thing you're...

      Feel free to talk about something you saw that was cool, something that was bad, ask for recommendations, or anything else you can think of.

      If you want to, feel free to find the thing you're talking about and link to its Anilist, MAL, or any other anime/manga database you use!

      11 votes
    40. What have you been watching/reading this week? (Anime/Manga)

      Forgot to post the thread yesterday. Feel free to talk about something you saw that was cool, something that was bad, ask for recommendations, or anything else you can think of. If you want to,...

      Forgot to post the thread yesterday.

      Feel free to talk about something you saw that was cool, something that was bad, ask for recommendations, or anything else you can think of.

      If you want to, feel free to find the thing you're talking about and link to its Anilist, MAL, or any other anime/manga database you use!

      6 votes
    41. What have you been listening to this week?

      What have you been listening to this week? You don't need to do a 6000 word review if you don't want to, but please write something! If you've just picked up some music, please update on that as...

      What have you been listening to this week? You don't need to do a 6000 word review if you don't want to, but please write something! If you've just picked up some music, please update on that as well, we'd love to see your hauls :)

      Feel free to give recs or discuss anything about each others' listening habits.

      You can make a chart if you use last.fm:

      http://www.tapmusic.net/lastfm/

      Remember that linking directly to your image will update with your future listening, make sure to reupload to somewhere like imgur if you'd like it to remain what you have at the time of posting.

      10 votes
    42. What have you been listening to this week?

      What have you been listening to this week? You don't need to do a 6000 word review if you don't want to, but please write something! If you've just picked up some music, please update on that as...

      What have you been listening to this week? You don't need to do a 6000 word review if you don't want to, but please write something! If you've just picked up some music, please update on that as well, we'd love to see your hauls :)

      Feel free to give recs or discuss anything about each others' listening habits.

      You can make a chart if you use last.fm:

      http://www.tapmusic.net/lastfm/

      Remember that linking directly to your image will update with your future listening, make sure to reupload to somewhere like imgur if you'd like it to remain what you have at the time of posting.

      15 votes
    43. What are you reading these days? #11

      What are you reading currently? Fiction or non-fiction, any genre, any language! Tell us what you're reading, and talk a bit about it. Past weeks: Week #1 · Week #2 · Week #3 · Week #4 · Week #5 ·...

      What are you reading currently? Fiction or non-fiction, any genre, any language! Tell us what you're reading, and talk a bit about it.

      Past weeks: Week #1 · Week #2 · Week #3 · Week #4 · Week #5 · Week #6 · Week #7 · Week #8 · Week #9 · Week #10

      14 votes
    44. What have you been watching/reading this week? (Anime/Manga)

      I'd say something here about thinking a monthly thread for this is better or something, but that would be a lie and the truth is that I was busy during Christmas and subsequently forgot to post...

      I'd say something here about thinking a monthly thread for this is better or something, but that would be a lie and the truth is that I was busy during Christmas and subsequently forgot to post this thread for about three weeks running. Sorry about that.

      Feel free to talk about something you saw that was cool, something that was bad, ask for recommendations, or anything else you can think of.

      If you want to, feel free to find the thing you're talking about and link to its Anilist, MAL, or any other anime/manga database you use!

      9 votes
    45. This Week's Releases 18/01 - James Blake, Sharon Von Etten, Future and more.

      Releases of the week 12/01/2019 - 18/01/2019 Featured Release James Blake - Assume Form (Alternative R&B, Art Pop) "After dropping two new songs yesterday — the subtle trapper “Mile High” and the...

      Releases of the week 12/01/2019 - 18/01/2019


      Featured Release

      James Blake - Assume Form (Alternative R&B, Art Pop)

      "After dropping two new songs yesterday — the subtle trapper “Mile High” and the haunting “Lullaby For My Insomniac” — James Blake reveals today the entirety of Assume Form, his fourth full-length to date and follow-up to 2016’s The Colour In Anything. It’s available to stream in full below via Apple Music and Spotify.
      The album spans 12 tracks, including last year’s excellent “Don’t Miss It”, and features guest spots from Travis Scott, Metro Boomin, Rosalía, André 3000, and Moses Sumney. Blake previously contributed to the most recent full-length efforts from Oneothrix Point Never and Travis Scott, as well as on singles from Kendrick Lamar, André 3000, and Moses Sumney.”

      Source: Consequence of Sound

      Listen to single

      Stream

      Other Notable Relases

      Sharon Van Etten - Remind Me Tomorrow (Indie Pop, Synth)

      Listen to single
      Stream

      Future - The WIZRD (Hip Hop, Trap)

      Listen to single
      Stream

      Deerhunter - Why Hasn’t Everything Already Disappeared (Neo-Psychedelia, Indie Rock)

      Listen to single
      Stream

      Toro Y Moi - Outer Peace (Alternative R&B, Synth Funk)

      Listen to single
      Stream

      Feel free to discuss or feature any and all other releases in the comments below

      Discussion Points

      Have you listened to any of these releases?
      What are your thoughts?
      What are you looking forward to listen to?
      What have you enjoyed from these artists in the past?

      // All feedback on this format welcome below.

      4 votes
    46. A Brief Look at Webhook Security

      Preface Software security is one of those subjects that often gets overlooked, both in academia and in professional projects, unless you're specifically working with some existing security-related...

      Preface

      Software security is one of those subjects that often gets overlooked, both in academia and in professional projects, unless you're specifically working with some existing security-related element (e.g. you're taking a course on security basics, or updating your password hashing algorithm). As a result, we frequently see stories of rather catastrophic data leaks from otherwise reputable businesses, leaks which should have been entirely preventable with even the most basic of safeguards in place.

      With that in mind, I thought I would switch things up and discuss something security-related this time.


      Background

      It's commonplace for complex software systems to avoid unnecessarily large expenses, especially in terms of technical debt and the capital involved in the initial development costs of building entire systems for e.g. geolocation or financial transactions. Instead of reinventing the wheel and effectively building a parallel business, we instead integrate with existing third-party systems, typically by using an API.

      The problem, however, is that sometimes these third-party systems process requests over a long period of time, potentially on the order of minutes, hours, days, or even longer. If, for example, you have users who want to purchase something using your online platform, then it's not a particularly good idea to having potentially thousands of open connections to that third-party system all sitting there waiting multiple business days for funds to clear. That would just be stupid. So, how do we handle this in a way that isn't incredibly stupid?

      There are two commonly accepted methods to avoid having to wait around:

      1. We can periodically contact the third-party system and ask for the current status of a request, or
      2. We can give the third-party system a way to contact us and let us know when they're finished with a request.

      Both of these methods work, but obviously there will be a potentially significant delay in #1 between when a request finishes and when we know that it has finished (with a maximum delay of the wait time between status updates), whereas in #2 that delay is practically non-existent. Using #1 is also incredibly inefficient due to the number of wasted status update requests, whereas #2 allows us to avoid that kind of waste. Clearly #2 seems like the ideal option.

      Method #2 is what we call a webhook.


      May I see your ID?

      The problem with webhooks is that when you're implementing one, it's far too easy to forget that you need to restrict access to it. After all, that third-party system isn't a user, right? They're not a human. They can't just give us a username and password like we want them to. They don't understand the specific requirements for our individual, custom-designed system.

      But what happens if some malicious actor figures out what the webhook endpoint is? Let's say that all we do is log webhook requests somewhere in a non-capped file or database table/collection. Barring all other possible attack vectors, we suddenly find ourselves susceptible to that malicious actor sending us thousands, possibly millions of fraudulent data payloads in a small amount of time thanks to a botnet, and now our server's I/O utilization is spiking and the entire system is grinding to a halt--we're experiencing a DDoS!

      We don't want just anyone to be able to talk to our webhook. We want to make sure that anyone who does is verified and trusted. But since we can't require a username and password, since we can't guarantee that the third-party system will even know how to make use of them, what can we do?

      The answer is to use some form of token-based authentication--we generate a unique token, kind of like an ID card, and we attach it to our webhook endpoint (e.g. https://example.com/my_webhook/{unique_token}). We can then check that token for validity every time someone touches our webhook, ensuring that only someone we trust can get in.


      Class is in Session

      Just as there are two commonly accepted models for how to handle receiving updates from third-party systems, there are also two common models for how to assign a webhook to those systems:

      1. Hard-coding the webhook in your account settings, or
      2. Passing a webhook as part of request payload.

      Model #1 is, in my experience, the most common of the two. In this model, our authentication token is typically directly linked to some user or user-like object in our system. This token is intended to be persisted and reused indefinitely, only scrapped in the event of a breach or a termination of integration with the service that uses it. Unfortunately, if the token is present within the URL, it's possible for your token to be viewed in plaintext in your logs.

      In model #2, it's perfectly feasible to mirror the behavior of model #1 by simply passing the same webhook endpoint with the same token in every new request; however, there is a far better solution. We can, instead, generate a brand new token for each new request to the third-party system, and each new token can be associated with the request itself on our own system. Rather than only validating the token itself, we then validate that the token and the request it's supposed to be associated with are both valid. This ensures that even in the event of a breach, a leaked authentication token's extent of damage is limited only to the domain of the request it's associated with! In addition, we can automatically expire these tokens after receiving a certain number of requests, ensuring that a DDoS using a single valid token and request payload isn't possible. As with model #1, however, we still run into problems of token exposure if the token is present in the URL.

      Model #2 treats each individual authentication token not as a session for an entire third-party system, but as a session for a single request on that system. These per-request session tokens require greater effort to implement, but are inherently safer due to the increased granularity of our authentication and our flexibility in allowing ourselves to expire the tokens at will.


      Final Thoughts

      Security is hard. Even with per-request session tokens, webhooks still aren't as secure as we might like them to be. Some systems allow us to define tokens that will be inserted into the request payload, but more often than not you'll find that only a webhook URL is possible to specify. Ideally we would stuff those tokens right into the POST request payload for all of our third-party systems so they would never be so easily exposed in plaintext in log files, but legacy systems tend to be slow to catch up and newer systems often don't have developers with the security background to consider it.

      Still, as far as securing webhooks goes, having some sort of cryptographically secure authentication token is far better than leaving the door wide open for any script kiddie having a bad day to waltz right in and set the whole place on fire. If you're integrating with any third-party system, your job isn't to make it impossible for them to get their hands on a key, but to make it really difficult and to make sure you don't leave any gasoline lying around in case they do.

      8 votes
    47. What have you been listening to this week?

      What have you been listening to this week? You don't need to do a 6000 word review if you don't want to, but please write something! If you've just picked up some music, please update on that as...

      What have you been listening to this week? You don't need to do a 6000 word review if you don't want to, but please write something! If you've just picked up some music, please update on that as well, we'd love to see your hauls :)

      Feel free to give recs or discuss anything about each others' listening habits.

      You can make a chart if you use last.fm:

      http://www.tapmusic.net/lastfm/

      Remember that linking directly to your image will update with your future listening, make sure to reupload to somewhere like imgur if you'd like it to remain what you have at the time of posting.

      7 votes
    48. What have you been listening to this week?

      What have you been listening to this week? You don't need to do a 6000 word review if you don't want to, but please write something! Feel free to give recs or discuss anything about each others'...

      What have you been listening to this week? You don't need to do a 6000 word review if you don't want to, but please write something!

      Feel free to give recs or discuss anything about each others' listening habits.

      You can make a chart if you use last.fm:

      http://www.tapmusic.net/lastfm/

      Remember that linking directly to your image will update with your future listening, make sure to reupload to somewhere like imgur if you'd like it to remain what you have at the time of posting.

      16 votes
    49. What are you reading these days? #10

      What are you reading currently? Fiction or non-fiction, any genre, any language! Tell us what you're reading, and talk a bit about it. Past weeks: Week #1 · Week #2 · Week #3 · Week #4 · Week #5 ·...

      What are you reading currently? Fiction or non-fiction, any genre, any language! Tell us what you're reading, and talk a bit about it.

      Past weeks: Week #1 · Week #2 · Week #3 · Week #4 · Week #5 · Week #6 · Week #7 · Week #8 · Week #9

      14 votes
    50. What have you been listening to this week?

      What have you been listening to this week? You don't need to do a 6000 word review if you don't want to, but please write something! Feel free to give recs or discuss anything about each others'...

      What have you been listening to this week? You don't need to do a 6000 word review if you don't want to, but please write something!

      Feel free to give recs or discuss anything about each others' listening habits.

      You can make a chart if you use last.fm:

      http://www.tapmusic.net/lastfm/

      Remember that linking directly to your image will update with your future listening, make sure to reupload to somewhere like imgur if you'd like it to remain what you have at the time of posting.

      11 votes