Register a SA Forums Account here!
JOINING THE SA FORUMS WILL REMOVE THIS BIG AD, THE ANNOYING UNDERLINED ADS, AND STUPID INTERSTITIAL ADS!!!

You can: log in, read the tech support FAQ, or request your lost password. This dumb message (and those ads) will appear on every screen until you register! Get rid of this crap by registering your own SA Forums Account and joining roughly 150,000 Goons, for the one-time price of $9.95! We charge money because it costs us money per month for bills, and since we don't believe in showing ads to our users, we try to make the money back through forum registrations.
 
  • Locked thread
Bloody
Mar 3, 2013

all i have gotten out of my rear end backwards nightmare is a drinking problem

Adbot
ADBOT LOVES YOU

eschaton
Mar 7, 2007

Don't you just hate when you wind up in a store with people who are in a socioeconomic class that is pretty obviously about two levels lower than your own?

Bloody posted:

all i have gotten out of my rear end backwards nightmare is a drinking problem

I wouldn't really call it a "problem"

The MUMPSorceress
Jan 6, 2012


^SHTPSTS

Gary’s Answer

Bloody posted:

all i have gotten out of my rear end backwards nightmare is a drinking problem

going to a bar this weekend with one of my qaers where i will be getting a beer flight that is 25 4oz glasses of craft beer on a plank. this is a normal way to spend a saturday

Bloody
Mar 3, 2013

well you're in Wisconsin what else is there

The MUMPSorceress
Jan 6, 2012


^SHTPSTS

Gary’s Answer

Bloody posted:

well you're in Wisconsin what else is there

lots of music in Madison, and sports, but we get really drunk for those too so

VikingofRock
Aug 24, 2008




LeftistMuslimObama posted:

y know, i don't think i did. it's not too hard and ive been at work since 6am so i guess ill take a break and write one now :)

this is an incomplete list of basic commands in MUMPS. note that each command can be written in full or abbreviated to 1 or 2 letters. also note that there are no reserved words in MUMPS so you are free to name tags, routines, variables, etc with the names of any of the commands. whether it's a command or a name is determined by its position in the expression. also, commands aren't case sensitive even though identifiers are. our house style is to do lower case for commands and uppercase for system functions.

D or DO. This command is used to call a routine, subroutine, or function for which you don't want a return value. For example:
code:
d do
calls the tag named "do" within the routine you're in. to call a tag (i'll explain tags more later) in another routine, you have to use the fully-qualified name. if "do" is in a routine called "butts", i'd write:
code:
d do^butts
house style is to make routine names always be allcaps to avoid stupid mistakes with capitalization errors. a routine is logically equivalent to a source code file, though in fact it's actually a data element within the MUMPS database that contains the code to be executed. that's right, the database contains the code that runs on the database. smart!

S or SET. this command sets a variable (or array, or global, or subscript of either of those) to the value on the rhs of an = expression. for example:
code:
s var="hello"
sets the variable "var" to "hello". if var didnt exist before, it's implicitly created at the scope. if var existed at a previous scope and wasnt passed in as a parameter, var's value is permanently mutated. if var was passed in as a parameter, this is treated as pass-by-value and the assignment wouldn't affect the caller. you can also explicitly pass-by-reference if you do want that to happen.

N or NEW. this command declares a variable and initializes it to null (the empty string ""). scope on variables behaves basically how you would expect if you've used an curly brace language.
code:
n var
creates a variable named "var". if there was a variable with the same name in a higher scope, this variable shadows that one.

Q or QUIT. this command is fuckin' overloaded to hell and back. within a loop it acts as a CONTINUE statement. in the control expression of a loop it acts as a conditional break statement. in the outer scope of a function it's a RETURN statement (and can return a value or not, with no requirement that all quits in a function return a value. a quit with no value is implicitly a return of "").

i'm going to use inline comments in this code block. note that comments in MUMPS start with a ";" instead of a "//".
code:
;this function returns 3
threeFunc
     q 3

;this function returns null (if you call it as a function. any tag can be called as either a function or a subroutine)
nullFunc
     q
before i show the other uses of q, lets talk about control structures.

FOR or F. this is the basic for loop. it looks not unlike the curly-brace for loop, but with a couple differences. a for loop on its own just increments the counting variable in whatever way it's told. it won't actually do any code unless a DO command is on the same line (the line is the fundamental unit of code in MUMPS), in which case on each iteration the loop will do the code within the "do blocK". a "do block" is a bunch of code after a DO where the lines start with periods. you can tell what scope level you're in by the number of periods at the start of a line. in a FOR loop, the "DO" can have pre and post conditional statements. the preconditional is evaluated before the DO is executed and causes the loop to terminate before entering the DO block if true. the postconditional is checked after the DO is complete but before the next iteration and also terminates the loop.

also I or IF is an if statement. you should know how this works.
code:
;this for loop counts  2-100 but quits preconditionally if var isn't 0 and quits postconditionally if a flag is set

f i=2:1:100 q:'(var=0) d  q:flag
. s var=i#2 ;# is modulo, lol
. i (i#3)=0 s flag=1 q ;like C, bools are just ints. 0 or null is false, everything else (?, not sure about negative values actually) is true.
. w "butt "_i ;w=write, prints to the terminal, underscore is string concatenation
This code should output "butt 2" and then quit. this is because on the second iteration i#3=o, so flag gets set to one and then the q on that line acts as a CONTINUE, which takes us into the postconditional q:flag. the "command:" syntax means "do this command if the following expression is true", so in this case "quit if flag (equals true)".

An interesting feature of this loop code is that there's a single space between all commands on a line except between the "d" and the postconditional. whitespace has meaning in MUMPS. the double-space there mans that the do block should be executed before the rest of the current line is executed. im not sure what happens if you only single-space there as our in-house linter won't let you even save code that makes that error.

there's also a while loop in MUMPS but we dont use it because for is always faster (lol) and you can just write "f d q:condition" to get the same behavior.

i think ive explained arrays and globals elsewhere itt, so i won't go over the $o and $ q loops. instead let's discuss tags so that i can finish off with functions and nesting.

a tag is essentially a label you place on a section of code within a routine. think of a routine as a BASIC program except that you only have to put the numbers in front of lines of code that define the beginning of a logical unit. tags are defined by writing an unindented string. all executable code is indented by a tab. it's common style to "new" all the variables a tag uses on the same line as the tag name. you define args with parentheses. passing an arg by reference is essentially treated by the runtime as newing variables with the args' names and then setting their values. you can pass an argument into a tag by reference by prefixing its name with a period.

tags can be called or fallen through into (although fallthough tags are discouraged these days). you use a tag as a function by prefixing its name with "$$" and using it on the RHS of an assignment or boolean expression.

code:
main n refVar,valVar ;this is a tag named main with two variables declared in its scope.
     s refVar="test",valVar="salvia" ;when expressions are chained with commas, they're all executed via the preceding command.
     d mangle(.refVar,valVar) ;calling mangle as a subroutine
     d writeTag
     s valVar=$$mangle(.refVar,valVar);setting valVar's value to mangle's return called as a function.
     ;
     ; you cant have blank lines in MUMPS, so it's customary to use empty comments to add some whitespace for readability
writeTag ;there's no quit at the end of main, so it falls through to writeTag. when called with d, it is a new scope but
    ; can access non-shadowed variables main's scope. when fallen through to, it's just continuing on within main's scope.
    w refVar," ",valVar,! ;! is a newline. write can take an unlimited number of comma-delimited args and print them in order
    q ;here we just quit, returning us to the calling scope.
mangle(ref,val)
    w ref," ",val,!
    s ref="smoke", val="weed"
    q "sweet mexican black tar heroin"
[code]

This program should have the following output when called via "d main^routinename"
[code]
test salvia
smoke salvia
smoke salvia
smoke sweet mexican black tar heroin
finally, you can have multiple dot-levels inside a do block, so you can have poo poo like this (the worst i've seen was 13 dot-levels)
code:
i 1 d
. i 1 d
.. i 1 d
... w "we're really in the poo poo now",!
.. w "we're in 2 feet of poo poo now",!
. w "we're in 1 foot of poo poo now",!
this is the equivalent of like:
code:
{
  {
    {
    }
  }
}
in curly brace land.

i think ive covered all the other features of the language at some level somewhere itt, but let me know if you want more :)

Every MUMPSpost is fascinating. Thanks for the write-up!

raminasi
Jan 25, 2005

a last drink with no ice
when i read the mumps post the paragraph descriptions sounds almost reasonable (in an old language kind of way) and then i see the code examples and my brain just nopes out

VikingofRock
Aug 24, 2008




GrumpyDoctor posted:

when i read the mumps post the paragraph descriptions sounds almost reasonable (in an old language kind of way) and then i see the code examples and my brain just nopes out

Honestly MUMPS doesn't seem *that* much worse than FORTRAN 77, which I occasionally have to work with. That is, it seems like it pre-dates modern conventions (which are there for good reason), but it isn't necessarily horrible by the standards of its time.

Deep Dish Fuckfest
Sep 6, 2006

Advanced
Computer Touching


Toilet Rascal
i've done some amount of physics in college, which obviously means i did end up touching fortran 77 less than a decade ago. i don't remember it being anywhere close to what mumps seems to be in terms of being bad, but then it was all for numerical simulation code which is its strength, and just for fairly simple stuff, so maybe i would have a different opinion if i had dealt with giant codebases of the stuff instead

JimboMaloi
Oct 10, 2007

uncurable mlady posted:

I think TDD is a good idea wrapped up in a bunch of dumb dogma. the kernel of "write tests against spec, then write function until tests pass" is a pretty useful maxim and something anyone can glom onto even if they don't really have experience with the unit test framework.

the thing that needs to really be changed is the dev attitude towards testing, and the industry treatment of QA as a hellpit for idiots and women.

the problem with the first one is that every dev I've ever met is incredibly resistant to changing their process, so they don't want to do things differently. when you give them a test framework, their goal is to try and jack it into their existing workflow and make things complicated, which fucks over your QA people who aren't devs and then they can't write tests any more. I'm in the middle of this right now and it sucks.

tdd is great precisely because it forces a level of respect for tests, though youre right that trying to convince a dev to start writing tests is an unreasonably challenging task. im curious though, how do the devs gently caress with your test framework? your typical xUnit framework is pretty straightforward and im having a hard time imagining how people gently caress it up other than retaining state so your execution order matters.

mekkanare
Sep 12, 2008
We have detected you are using ad blocking software.

Please add us to your whitelist to view this content.

Bloody posted:

well you're in Wisconsin what else is there

Cheese.



I'm in an OS class where the majority took all the Java classes, so for an insane reason the prof lets people choose whether to write programs in C or Java.
Anyway, today a classmate came up to me and asked about how to do threading, and when I replied that I don't use Java he asked how I made a thread to "capture a class".
When I told him I just used the POSIX lib and didn't need to set up a class, just call the function to work on the data instead, he looked at me like a deer in headlights.
I don't know who is the most terrible programmer here.

The MUMPSorceress
Jan 6, 2012


^SHTPSTS

Gary’s Answer

mekkanare posted:

Cheese.



I'm in an OS class where the majority took all the Java classes, so for an insane reason the prof lets people choose whether to write programs in C or Java.
Anyway, today a classmate came up to me and asked about how to do threading, and when I replied that I don't use Java he asked how I made a thread to "capture a class".
When I told him I just used the POSIX lib and didn't need to set up a class, just call the function to work on the data instead, he looked at me like a deer in headlights.
I don't know who is the most terrible programmer here.

lol, c was mandatory in my OS class and we implemented threading from scratch on a kernel that didnt have threading support. your classmate would have been hosed.

also, the actual language mumps is terrible. the strength, if there is one, is that b-trees are a native data structure with extremely efficient builtin functions for traversing them. nowadays, that's still not a a great reason to pick it if you're starting from scratch, but in the 70s that was a huge win for its specific use case, and theres not a compelling reason to force all our customers to migrate their core systems to a new platform.

plus we're singlehandedly keeping a lot of greybeard cache/unix admins employed :D

fritz
Jul 26, 2003

YeOldeButchere posted:

i've done some amount of physics in college, which obviously means i did end up touching fortran 77 less than a decade ago. i don't remember it being anywhere close to what mumps seems to be in terms of being bad, but then it was all for numerical simulation code which is its strength, and just for fairly simple stuff, so maybe i would have a different opinion if i had dealt with giant codebases of the stuff instead

the way i remember it is if youre not trying to do anything fancy with things like "input and output" and "talking to things" fortran77 is ok for numerics

Blinkz0rz
May 27, 2001

MY CONTEMPT FOR MY OWN EMPLOYEES IS ONLY MATCHED BY MY LOVE FOR TOM BRADY'S SWEATY MAGA BALLS

uncurable mlady posted:

I think TDD is a good idea wrapped up in a bunch of dumb dogma. the kernel of "write tests against spec, then write function until tests pass" is a pretty useful maxim and something anyone can glom onto even if they don't really have experience with the unit test framework.

the thing that needs to really be changed is the dev attitude towards testing, and the industry treatment of QA as a hellpit for idiots and women.

the problem with the first one is that every dev I've ever met is incredibly resistant to changing their process, so they don't want to do things differently. when you give them a test framework, their goal is to try and jack it into their existing workflow and make things complicated, which fucks over your QA people who aren't devs and then they can't write tests any more. I'm in the middle of this right now and it sucks.

it's pretty simple if you really think about it. write test stubs based on spec. if you want to do tdd, write your tests first and then try to make them green. if you don't, write your code first then write tests that follow the description in the stubs.

qa is designed to test workflows and behaviors, not code.

in summary, write tests. write all the tests.

Blinkz0rz
May 27, 2001

MY CONTEMPT FOR MY OWN EMPLOYEES IS ONLY MATCHED BY MY LOVE FOR TOM BRADY'S SWEATY MAGA BALLS
shaggar, you do emr stuff.



write tests.

The MUMPSorceress
Jan 6, 2012


^SHTPSTS

Gary’s Answer
Seriously, we built a unit test framework for loving mumps. You can write tests for whatever poo poo you're using.

HoboMan
Nov 4, 2010

LeftistMuslimObama posted:

lol, c was mandatory in my OS class and we implemented threading from scratch on a kernel that didnt have threading support. your classmate would have been hosed.

also, the actual language mumps is terrible. the strength, if there is one, is that b-trees are a native data structure with extremely efficient builtin functions for traversing them. nowadays, that's still not a a great reason to pick it if you're starting from scratch, but in the 70s that was a huge win for its specific use case, and theres not a compelling reason to force all our customers to migrate their core systems to a new platform.

plus we're singlehandedly keeping a lot of greybeard cache/unix admins employed :D

goddamn, where were those classes in my college? i would have loved to do that. all my cs classes were worthless down to some of my profs straight teaching the wrong definition of things

i still don't feel like i know the right words for stuff

ahmeni
May 1, 2005

It's one continuous form where hardware and software function in perfect unison, creating a new generation of iPhone that's better by any measure.
Grimey Drawer

Blinkz0rz posted:

in summary, write tests. write all the tests.

kitten emergency
Jan 13, 2008

get meow this wack-ass crystal prison

JimboMaloi posted:

tdd is great precisely because it forces a level of respect for tests, though youre right that trying to convince a dev to start writing tests is an unreasonably challenging task. im curious though, how do the devs gently caress with your test framework? your typical xUnit framework is pretty straightforward and im having a hard time imagining how people gently caress it up other than retaining state so your execution order matters.

our test framework uses xUnit but we have a broad 'functional' testing framework that essentially is a XML DSL that can run arbitrary code or scripts or selenium that was built by interns years ago and it's exactly as bad as you might imagine

send booze

kitten emergency
Jan 13, 2008

get meow this wack-ass crystal prison
also I just spent like 3 hours refactoring 4 lines of code in aforementioned framework and I'm only pretty sure I didn't break anything so I definitely belong itt

The MUMPSorceress
Jan 6, 2012


^SHTPSTS

Gary’s Answer

uncurable mlady posted:

also I just spent like 3 hours refactoring 4 lines of code in aforementioned framework and I'm only pretty sure I didn't break anything so I definitely belong itt

honestly, ive always found that the hardest/most time consuming work involves tiny chunks of code, because typically if youve zeroed in on that tiny chunk its doing something loving stupid that cant be fixed in a straightforward way because half your codebase is broken by the stupid and the other half expects it and implements workarounds that are broken when you unfuck the code.

eschaton
Mar 7, 2007

Don't you just hate when you wind up in a store with people who are in a socioeconomic class that is pretty obviously about two levels lower than your own?

yosmas starting early this year

JimboMaloi
Oct 10, 2007

uncurable mlady posted:

our test framework uses xUnit but we have a broad 'functional' testing framework that essentially is a XML DSL that can run arbitrary code or scripts or selenium that was built by interns years ago and it's exactly as bad as you might imagine

send booze

:barf:

do you have the story on how that came to exist?

Jerry Bindle
May 16, 2003
hello XML DSL test framework buddy

how did it come about? not very carefully

Maluco Marinero
Jan 18, 2001

Damn that's a
fine elephant.
lol java script:

http://www.reapp.io/
An easier, faster way to build apps with React and JavaScript.

vs

https://github.com/reapp/reapp
NOTICE: Needs contributors, current broken, don't open a ticket open a PR


I swear people are making the splash site for their library well before they worry about getting it stable.

tef
May 30, 2004

-> some l-system crap ->

HoboMan posted:

so what the gently caress is DevOps?

it's like agile. it means whatever the gently caress you want it to mean. it means both different from the status quo and also the status quo.

so, agile means "we can change the project overnight and the rest of you need to pick up the slack", devops means "well, someone's gotta take the pager, well, i guess it's you, dev"

or sometimes devops means "well, we automated installing the ruby app, but we haven't worked out how to turn it on an off automatically"

here's some material i'm trying out: mazlow's heirarchy of operations

(but it's upside down)

- snowflakes (production is special and unique. good luck)
- playbooks (copy and paste to install rather than googling)
- pets (pre-existing and shared production, staging, manual provisioning)
- builds (make me an X)
- configuration (change X, change all X, or 'parallel ssh')
- reporting (state changes, metrics for throughput, latency, cost, and event/change logs)
- recovery (high availability, backups, restore, rewind, replay, merge)
- provisioning (api, replicas, multi tenanancy, formations)
- platform-as-a-service (notifications, maintenance windows, plans, configuration, topology, policy)
- managed platform (the same, but you pay someone else to do it)

in some ways devops is trying to push towards 'managed platforms', but most of the time we stop around 'parallel ssh' and hack the rest of the poo poo up

tef fucked around with this message at 06:03 on Apr 13, 2016

tef
May 30, 2004

-> some l-system crap ->

HoboMan posted:

this is the first thing i looked at after google "tef blog": http://programmingisterrible.com/
i don't know if it's his, but it looks like it belongs here

it's me

Bloody posted:

all i have gotten out of my rear end backwards nightmare is a drinking problem

"programming is terrible, lessons learned from a life wasted"

that second part is an in-joke about how self destructive i am ha ha

tef
May 30, 2004

-> some l-system crap ->
to save you some time, here are the only things that people have linked to

http://programmingisterrible.com/post/65781074112/devils-dictionary-of-programming

this did the rounds and i hear the 'framework' definition occasionally

http://programmingisterrible.com/post/139222674273/write-code-that-is-easy-to-delete-not-easy-to

this is basically a very edited yopost

Asymmetrikon
Oct 30, 2009

I believe you're a big dork!

Maluco Marinero posted:

https://github.com/reapp/reapp
NOTICE: Needs contributors, current broken, don't open a ticket open a PR

Last real commit 7 months ago, no pull requests, but 3,346 stars and 174 forks? what the gently caress is going on in there?

Maluco Marinero
Jan 18, 2001

Damn that's a
fine elephant.

Asymmetrikon posted:

Last real commit 7 months ago, no pull requests, but 3,346 stars and 174 forks? what the gently caress is going on in there?

No idea. Only got told to look at it because we're do some settingsy modal stuff, but I lolled it off pretty quickly. Javascript frameworks never change.

triple sulk
Sep 17, 2014



it's cool to get paid to work on open source stuff

ahmeni
May 1, 2005

It's one continuous form where hardware and software function in perfect unison, creating a new generation of iPhone that's better by any measure.
Grimey Drawer

triple sulk posted:

it's cool to get paid

hackbunny
Jul 22, 2007

I haven't been on SA for years but the person who gave me my previous av as a joke felt guilty for doing so and decided to get me a non-shitty av

LeftistMuslimObama posted:

lol, c was mandatory in my OS class and we implemented threading from scratch on a kernel that didnt have threading support

oh, lucky you, our OS class was all about fork and sysv ipc, the project was about writing a silly toy task dispatcher. in our study group we called it bogotron 2000 because it did a lot of work to accomplish nothing :pram:. I had the honor of having to explain the name to the professor lol

Wheany
Mar 17, 2006

Spinyahahahahahahahahahahahaha!

Doctor Rope

Bloody posted:

lol if u cant just leave when ur sick of the poo poo

we use punchcards. well not literally, but a web form where you have to click on a button when you arrive and leave.

this is separate from the timesheets where you still need to go type your hours

you can be drat sure that i loving beeline for the login button as soon as i come in from the front door. and after i click the logout button, i leave behind a cartoonesque dust cloud where i was standing.

Wheany
Mar 17, 2006

Spinyahahahahahahahahahahahaha!

Doctor Rope

Maluco Marinero posted:

Javascript frameworks never change.

the exact opposite, really :grin:

kitten emergency
Jan 13, 2008

get meow this wack-ass crystal prison

JimboMaloi posted:

:barf:

do you have the story on how that came to exist?

probably the same way it comes about everywhere else, organically. some years ago, when the company was still a fledgling, people decided that we needed a way for the nascent QA department (which was like 3 people) to write tests. our product is rather complex, and wasn't written with testability in mind, so you had to actually deploy it to really make sure things were working. some interns started working on a project that would allow for the automation of standalone utilities (like an application that populated the app with data, etc.) into a series of tests. it wasn't terribly complex at first, but over time, it grew. now it's a morass of stuff that isn't really well understood even by the two of us that work on it, there's random code everywhere that never executes and there's no real explanation why (c.f., one of the core classes has a run and a runFast method that seem to do the same thing, but only run is ever called. why does runFast exist? we've never bothered trying it out).

the real problem that it causes is that since it's all the QA people know how to use, they try to fit everything into a Selenium RC shaped box, even when what they're trying to test could be accomplished via calling APIs through a script or something. every time they do something in Selenium RC, it adds to our 8000+ module backlog of selenium modules that we want to port to a webdriver framework. Unfortunately, the webdriver framework is somewhat complicated in part by it being the product of someone who is now a product dev and is honestly a pretty clever guy. The code for the framework is, unexpected, also very clever. Clever code is a loving PITA to maintain or understand what the gently caress it's doing.

the really hilarious part of this is that one of the reasons there's so much cruft and bullshit is that for the longest time (literally years) they had developed all sorts of hacky-rear end workarounds to deal with the fact that a potential configuration of the product in the wild involved using AD federation to an external user store. out of the box, the EUS ADFS would try to do basic auth when you logged in. since basic auth popups aren't managed by the browser, selenium couldn't interact with them. this lead to thousands of LOC written in order to use AutoIT to enter a username/password in that popup and click 'OK'. imagine everyone's surprise when I noted that you could change the behavior of the external user store by editing the web.config and changing one line to tell it to present a signin page rather than a basic auth popup...

redleader
Aug 18, 2005

Engage according to operational parameters

redleader posted:

over the last couple of days i wrote a truly hideous sql function that does some annoying business logic stuff. it's going to be a maintenance nightmare for the poor bastard who has to deal with it later. i mean, i wrote the drat thing and i'm not sure that i can fully explain all of it. it sort of... evolved organically, in that i understood each change to the function individually, but if you asked me to walk you through the whole thing i'd have to hand wave and mumble a lot

and this is after a rewrite from an even earlier attempt

oh well, it seems to work and passed code review! and of course there's no time to have another attempt at writing it better


... i think i just might be a terrible programmer

to absolutely no one's surprise, i had to almost totally rewrite that awful sql function because the client's requirements weren't what we thought they were

it's slightly better now, so that's nice

Bloody
Mar 3, 2013

Wheany posted:

we use punchcards. well not literally, but a web form where you have to click on a button when you arrive and leave.

this is separate from the timesheets where you still need to go type your hours

you can be drat sure that i loving beeline for the login button as soon as i come in from the front door. and after i click the logout button, i leave behind a cartoonesque dust cloud where i was standing.

lol if you havent written a program that "clicks" the button at 9 AM and again at 5:30 PM M-F for the rest of eternity

creatine
Jan 27, 2012




Bloody posted:

lol if you havent written a program that "clicks" the button at 9 AM and again at 5:30 PM M-F for the rest of eternity

look at this amateur who doesn't slightly randomize the times by +/- 5 mins so it doesn't seem out of place

Adbot
ADBOT LOVES YOU

Bloody
Mar 3, 2013

today in terrible programmerism, verilog is a horrendous tightly-coupled pile of rear end so i have to "refactor" a gigantic monolithic mess into a slightly different gigantic monolithic mess

refactor in this case probably means "delete and start over"

  • Locked thread