As was foretold, we've added advertisements to the forums! If you have questions, or if you encounter any bugs, please visit this thread: https://forums.penny-arcade.com/discussion/240191/forum-advertisement-faq-and-reports-thread/

[Programming] Kafkaesque rabbits in the queue at the pub

19495969799

Posts

  • EtheaEthea Registered User regular
    This is not to say I don't believe in the concept of technical debt and believe in removing it good policy.

    But I have seen dogmatic ideals being wrapped in the guise of technical debt / refactoring.

  • EtheaEthea Registered User regular
    On a side note had a funny interaction today.

    Brought up some old code that we are porting with the original developer. Was asking for clarification since the indentation and () made the order of operation sneaky.

    I walked out of the office with a entirely new algorithm that should solve the problem in half as many cycles.

    Sometimes it is handy to have the original developers around.

  • gavindelgavindel The reason all your software is brokenRegistered User regular
    The late night bug dance: Two users on the same system using the same credentials acting at the same time on the same version of the same server setup...One fails, one passes.

    Verdict: Black magic.

    Book - Royal road - Free! Seraphim === TTRPG - Wuxia - Free! Seln Alora
  • JasconiusJasconius sword criminal mad onlineRegistered User regular
    hi guys, I bet someone here knows the answer to this...

    I have a REST API that i want to pelt with Excel data (POST)

    Is there some app out there where I can load in my Excel, map the columns to API fields, and hit Go?

    I'm using Postman right now for one-off API calls, and it may well be hidden inside of this app... all these API interfaces use strange language I'm not familiar with, maybe there's a word for what I'm describing

  • dporowskidporowski Registered User regular
    Eh, try something here? https://www.getpostman.com/docs/postman/collection_runs/working_with_data_files

    I'm kinda loaded 'cause "trying to ship" but I feel like turning the .xls into a CSV or JSON (easy) then feeding it to a combination of that + postman's multiple iterations capability might do it for you.

    That said, if all else fails write a horrible hacky script to just loop it and DDOS the poor API by mistake.

  • EchoEcho ski-bap ba-dapModerator mod
    I swear the keyboard shortcuts in JetBrains IDEs were decided by asking "are we using a function key for this? If not, why not?"

    Ctrl-Shift-F8: List all breakpoints
    Ctrl-Alt-F8: stop extending display to second screen

    Thanks, IntelliJ and also Windows.

  • GnomeTankGnomeTank What the what? Portland, OregonRegistered User regular
    edited June 2017
    schuss wrote: »
    There's technical debt and there's refactoring because it isn't a devs preferred way to do something. I'm fully on your side, but if you're not working in a company run by software engineers you have to meet them halfway and help explain why you need to spend the time and why it's more efficient.

    Or you just wrap it in your general project costs and swear your tech team to secrecy ;).

    Here is a real world example I ran in to not long ago at my current position:

    We have a 15 year old monolith. It has .NET 1.1 code in it in places. It also mixes Linq2Sql and Entity Framework in really fragile ways. The latter has begun to bite us and actually slow development of new features in the areas where the bridge is necessary. We're watching velocities in that area tank, things taking 3 to 4x as much time as they should because of the debugging loop and needing to regress everything because of the brittleness. Now from an outside perspective the software "works". The business is feeling no pain from this (they really don't see the velocity drop because they don't look at metrics at that granularity), but we know as a development staff that sending developers in there is a black hole. We ask for a sprint or two to fix the issue, completely rip out L2S (which, btw, is completely unsupported and gets no security patches, another reason to ax it) and were denied because it "wasn't a business priority". In a functioning organization we wouldn't have needed to ask. Some of our time would be our own to do things that are necessary for the health of the platform. Instead 100% of our time is beholden to a business who wants us to deliver faster every day while giving us none of the breathing space needed to pay down our technical debt and build the new systems and processes necessary to produce at the speed they want us to.

    It has become 100% dysfunctional. It's created an animosity between the business and development that is toxic and is now driving talent away. Until businesses get over this ingrained attitude of "Oh you're just developers, let the business adults business now", they will continue to wonder why their development shops under perform, under deliver and hemorrhage talent like rats from a sinking ship.

    GnomeTank on
    Sagroth wrote: »
    Oh c'mon FyreWulff, no one's gonna pay to visit Uranus.
    Steam: Brainling, XBL / PSN: GnomeTank, NintendoID: Brainling, FF14: Zillius Rosh SFV: Brainling
  • DelzhandDelzhand Hard to miss. Registered User regular
    Echo wrote: »
    I swear the keyboard shortcuts in JetBrains IDEs were decided by asking "are we using a function key for this? If not, why not?"

    Ctrl-Shift-F8: List all breakpoints
    Ctrl-Alt-F8: stop extending display to second screen

    Thanks, IntelliJ and also Windows.

    Not programming related, but I've been using Qubicle for some voxel art stuff lately, and it has, bar none, my favorite system for handling shortcuts. It comes with no default shortcuts - if you want to set a shortcut, you mouse over the menu item for that command and press the shortcut you want.

  • schussschuss Registered User regular
    GnomeTank wrote: »
    schuss wrote: »
    There's technical debt and there's refactoring because it isn't a devs preferred way to do something. I'm fully on your side, but if you're not working in a company run by software engineers you have to meet them halfway and help explain why you need to spend the time and why it's more efficient.

    Or you just wrap it in your general project costs and swear your tech team to secrecy ;).

    Here is a real world example I ran in to not long ago at my current position:

    We have a 15 year old monolith. It has .NET 1.1 code in it in places. It also mixes Linq2Sql and Entity Framework in really fragile ways. The latter has begun to bite us and actually slow development of new features in the areas where the bridge is necessary. We're watching velocities in that area tank, things taking 3 to 4x as much time as they should because of the debugging loop and needing to regress everything because of the brittleness. Now from an outside perspective the software "works". The business is feeling no pain from this (they really don't see the velocity drop because they don't look at metrics at that granularity), but we know as a development staff that sending developers in there is a black hole. We ask for a sprint or two to fix the issue, completely rip out L2S (which, btw, is completely unsupported and gets no security patches, another reason to ax it) and were denied because it "wasn't a business priority". In a functioning organization we wouldn't have needed to ask. Some of our time would be our own to do things that are necessary for the health of the platform. Instead 100% of our time is beholden to a business who wants us to deliver faster every day while giving us none of the breathing space needed to pay down our technical debt and build the new systems and processes necessary to produce at the speed they want us to.

    It has become 100% dysfunctional. It's created an animosity between the business and development that is toxic and is now driving talent away. Until businesses get over this ingrained attitude of "Oh you're just developers, let the business adults business now", they will continue to wonder why their development shops under perform, under deliver and hemorrhage talent like rats from a sinking ship.

    Yeah, that's why prioritization should be a collaborative process. Any time my devs had (past tense, no longer in that role) told me things were blockers/bad, we'd do a quick calc on cost/benefit and get it into the next Sprint or both come to the conclusion we'd live with it

  • ElaroElaro Apologetic Registered User regular
    Greetings, from the land of Trying to Make Money with Procgen! I have many questions, mostly about webdev.

    I want server software that

    (1)lets a user log in securely to their account
    (2)lets a user securely communicate a multiline piece of text to the server
    (3)lets a user save said piece of text securely server-side
    (4)runs a jar file taking as arguments said piece of text and a filename on user's press of a button
    (5)plays the sound from the resulting MIDI file (but without actually letting the user download the MIDI file) client-side on the press of another button
    (5a)lets the user download an mp3 file of the music they generated (without requiring payment)
    (6)lets user download the MIDI file produced by the jar file if they've paid for it
    (7)lets users pay me

    Before I start on this grand adventure, the question though, is will you let me run it off the PAdev.net website? The jar file takes almost an instant to run on my machine, but I'm not really sure how computationally intensive it is. Also, how much memory does HashMap take up if it contains a finite set of variables, which I'm going to say are around 5-8 in number?

    Children's rights are human rights.
  • PhyphorPhyphor Building Planet Busters Tasting FruitRegistered User regular
    1-4 is trivial though depends on your definition of secure
    5 implies 5a as you will have to stream the mp3 to play sound anyway
    6,7 requires payment infrastructure

    @Infidel runs padev

  • YoshuaYoshua Registered User regular
    Elaro wrote: »
    Greetings, from the land of Trying to Make Money with Procgen! I have many questions, mostly about webdev.

    I want server software that

    [Snipped stuff I am not replying to]

    Before I start on this grand adventure, the question though, is will you let me run it off the PAdev.net website? The jar file takes almost an instant to run on my machine, but I'm not really sure how computationally intensive it is. Also, how much memory does HashMap take up if it contains a finite set of variables, which I'm going to say are around 5-8 in number?

    How big are the variables?

    The formulae I found says a hashmap will take 32 * size + 4 * capacity bytes. (http://java-performance.info/memory-consumption-of-java-data-types-2/)

    It will take more memory than an array, the savings is in the time it takes to search for and retrieve data. Though with so few elements, I doubt it would even be necessary.

  • DehumanizedDehumanized Registered User regular
    Having spent roughly a day in it building tools for a DSL my company is making, I really really like monaco/monarch.

  • JasconiusJasconius sword criminal mad onlineRegistered User regular
    finished setting up my dev/staging/production web environments tonight

    ngingx has been a dream to work with

    but then again I've not had to do anything hard yet...

  • EchoEcho ski-bap ba-dapModerator mod
    Man, some programmers are so far up their own ass they can see daylight.

    Guy shows up in a group I'm in, asks what he needs to "code homepages" and says he has no prior experience whatsoever.

    "Learn vim."

  • bowenbowen How you doin'? Registered User regular
    That sounds like an appropriate place to say "nah nano is the way you do it"

    not a doctor, not a lawyer, examples I use may not be fully researched so don't take out of context plz, don't @ me
  • OrcaOrca Also known as Espressosaurus WrexRegistered User regular
    When all you have is a modal text editor, everything looks like a command.

  • CarpyCarpy Registered User regular
    edited June 2017
    The conversation has moved a little but I want to add that I hate todos in code because I only ever see them go over of two ways:
    //Todo fix this
    Or
    //Todo Carpy, take another look at this
    
    which is absolutely worthless

    Or
    //Todo horrible hack for demo really need to redo this
    
    which was put there 2 years ago by Suzie, who now works on a different project in a different building and when I track her down and spend an hour figuring out what she meant we realize that comment has moved 50 lines because Johnny has worked on it in the past 2 years and the functionality she was referencing doesn't even exist anymore because the demo went poorly.

    If it's an issue it needs to be documented out side of code where it can get picked up by the regular processes in place.

    Carpy on
  • EchoEcho ski-bap ba-dapModerator mod
    // TODO: DB reconnection attempts, ref notifiers/jira#9
    

    I can go from the code to the issue in the repo to discuss it. I can go from the issue to the code because I have an issue reference to search for.

  • CarpyCarpy Registered User regular
    I'd take that. Provides documentation, dates, etc. So much better than the stuff I see in my codebase.

  • DehumanizedDehumanized Registered User regular
    we have a few team practices around todos (and similar breadcrumbs like NotImplementedExceptions) that keep them useful

    1. all todos must have the names of the pair of devs that placed it in the comment
    2. all todos in the codebase are periodically reviewed. during review, they must be either written up as a developer backlog work item or deleted
    3. the devs have complete control over the developer backlog, separate from anything prioritized by customer needs. we have the authority to pull a card from there with the expectation that as a team we meet all product backlog obligations.
    4. there is a hard cap on how many work items can be in the developer backlog. if we're at the cap, something has to get torn up to add a new thing. we make hard choices sometimes due to this but ultimately if something we removed proves to be important, it'll come back up

  • EtheaEthea Registered User regular
    A couple of projects I have worked on have gone with using bug number in the comment or commit. An interesting wrinkle was when one of the projects decided to transition to a new issue tracker.

    Unless we keep the old system running the bug numbers will not match! So we did the only sane thing, and imported all the old bugs making sure to keep consistent ids. Hopefully we never transition to a system that uses hashes...

  • gavindelgavindel The reason all your software is brokenRegistered User regular
    In a strange twist of fate, I have tests for a project based on its requirements before the project is implemented. Could this be the elusive TDD?!

    Book - Royal road - Free! Seraphim === TTRPG - Wuxia - Free! Seln Alora
  • DynagripDynagrip Break me a million hearts HoustonRegistered User, ClubPA regular
    I really like Swift and developing for iOS, but good lord I wish it was a more mature programming language, by like maybe 3 years. At least Swift 4 is supposed to be backwards compatible with Swift 3, at least, after you upgrade the Swift code to Swift 3.2. So far I've failed to make the transition.

  • a5ehrena5ehren AtlantaRegistered User regular
    At least C only iterates once a decade :P

  • DynagripDynagrip Break me a million hearts HoustonRegistered User, ClubPA regular
    but isn't it like fully backwards compatible with each update? I think C++ might be, but I haven't used it in about a year.

  • EchoEcho ski-bap ba-dapModerator mod
    Today in the dev chat: we are now discussing using floats as IDs.

    "You are roughly this user."

  • EchoEcho ski-bap ba-dapModerator mod
    And today's weird-ass issue:

    Things work locally with a string grabbed from environment used as credentials. One var has the format "123123123.123123123".

    Doesn't work on staging, the var gets truncated to two numbers after the period. I check and on staging it's "123123123.18".

    I double-check the env var in Ansible and yep there it's the correct "123123123.1755123123" wait a minute

    SSH into the image on staging. Yep, it's the truncated string there. Something between Ansible and it getting set as an env var parses the string as a float.

  • EtheaEthea Registered User regular
    Dynagrip wrote: »
    but isn't it like fully backwards compatible with each update? I think C++ might be, but I haven't used it in about a year.

    You should never treat C++ versions is being backwards compatible. At least versions 11, 14, 17 have changed sections of the language specification.

  • bowenbowen How you doin'? Registered User regular
    fuck backwards compatibility

    not a doctor, not a lawyer, examples I use may not be fully researched so don't take out of context plz, don't @ me
  • mightyjongyomightyjongyo Sour Crrm East Bay, CaliforniaRegistered User regular
    fuck backwards compatibility

  • a5ehrena5ehren AtlantaRegistered User regular
    Ethea wrote: »
    Dynagrip wrote: »
    but isn't it like fully backwards compatible with each update? I think C++ might be, but I haven't used it in about a year.

    You should never treat C++ versions is being backwards compatible. At least versions 11, 14, 17 have changed sections of the language specification.

    Yeah.

    I think C89->C99->C11 will basically always compile (your libc will probably warn about some deprecated functions though), but IIRC there's some legal C++03 code that is no longer so according to 11/14/17.

    And that's before getting into some GNU extensions that people think are part of the standard, but that's not happening as much now due to LLVM/Clang being competitive.

  • EtheaEthea Registered User regular
    edited June 2017
    legal C++98 code will not compile with C++11 ( see auto, extern, and other examples )
    legal C++11 code will not compile under C++14 ( changed the meaning of constexpr )
    legal C++14/11/98 will not compile under C++17 ( removed triagraph's ( no one but IBM really cared about this feature ) )
    legal C++14 will not compile under C++17 ( changed rules around unsupported attributes ).

    Edit:
    Misread the attribute changes.

    Ethea on
  • PhyphorPhyphor Building Planet Busters Tasting FruitRegistered User regular
    edited June 2017
    But in each of those cases, while technically breaking, I don't think anything actually broke in real code. I have never even seen C++98/03 code with auto variables

    I suppose technically removing trigraphs did really break IBM, but they can deal with it

    Phyphor on
  • a5ehrena5ehren AtlantaRegistered User regular
    I spent a few weeks messing around with the product code base at my company to see what would happen as part of a toolchain upgrade and we definitely had a few C++03 things that broke strictly due to changing to C++11 or 14. The const->constexpr change is a big one I remember, and we had a couple people who tried to use auto.

    The vast majority of required changes were from using an up-to-date compiler (GCC 4.6->4.9) that caught way more errors, though. We also did a concerted effort with UBSAN and ASAN after the upgrade that pretty dramatically improved our stability, too.

  • bowenbowen How you doin'? Registered User regular
    I remember fixing a foxpro application's errors and warnings and broke a program because it relied on its shitty broken code.

    not a doctor, not a lawyer, examples I use may not be fully researched so don't take out of context plz, don't @ me
  • EtheaEthea Registered User regular
    Phyphor wrote: »
    But in each of those cases, while technically breaking, I don't think anything actually broke in real code. I have never even seen C++98/03 code with auto variables

    I suppose technically removing trigraphs did really break IBM, but they can deal with it

    I agree most of the breaking changes are in dusty corners of the language, but some like the constexpr changes are easy to run into. More concerning for me are the changes that still are valid C++ but return different results ( auto initializer lists ). For all these reasons you should never consider moving between C++ language levels to be safe and need no verification.

    Also I can't find it, but didn't they change the rules around std::make_pair? Or was that just standard library bugs...

  • GnomeTankGnomeTank What the what? Portland, OregonRegistered User regular
    If the C++ standards process, naming and general conventions weren't so mushy it would be easier to manage. Apple's Swift has broken itself 3 times now, but they very clearly mark them as major version jumps and make clear through the tooling what you can and can't do. The C++ community not only didn't do that, they took things that already meant something and made them mean something else. The C++ standards process is a case study in what happens when committee/democratic rule goes awry in technology.

    Sagroth wrote: »
    Oh c'mon FyreWulff, no one's gonna pay to visit Uranus.
    Steam: Brainling, XBL / PSN: GnomeTank, NintendoID: Brainling, FF14: Zillius Rosh SFV: Brainling
  • thatassemblyguythatassemblyguy Janitor of Technical Debt .Registered User regular
    a5ehren wrote: »
    At least C only iterates once a decade :P

    I was p. excited when I could declare and initialize variables in-line in the code, tbh.

  • MelksterMelkster Registered User regular
    Carpy wrote: »
    The conversation has moved a little but I want to add that I hate todos in code because I only ever see them go over of two ways:
    //Todo fix this
    Or
    //Todo Carpy, take another look at this
    
    which is absolutely worthless

    Or
    //Todo horrible hack for demo really need to redo this
    
    which was put there 2 years ago by Suzie, who now works on a different project in a different building and when I track her down and spend an hour figuring out what she meant we realize that comment has moved 50 lines because Johnny has worked on it in the past 2 years and the functionality she was referencing doesn't even exist anymore because the demo went poorly.

    If it's an issue it needs to be documented out side of code where it can get picked up by the regular processes in place.

    When I see confusing code along those lines, I use `git blame` to find when the commit was made that added that line, and can see the surrounding context. In this case, I probably would have seen the original hack, realized it wasn't there any more, and could just delete the todo comment.

    git blame is pretty great.

This discussion has been closed.