The Official Status Thread
-
: D
-
-
@adynathos said in The Official Status Thread:
@pie_flavor said in The Official Status Thread:
month-long assignment
What is the task?
Infiltrate a government facility and retrieve FOI data
-
@heterodox said in The Official Status Thread:
As far as I can tell the vulnerability in the "TCP/IP Protocol" (which is mentioned upwards of fifty times in the paper) is a.) the fact that TCP/IP networks can talk to each other
In other news: Officials discover that roads allow thieves to drive to their victims homes!
-
@cursorkeys said in The Official Status Thread:
Status:
Unit Attention - SCSI bus reset occurred
x9999It's home time FFS, why does the disk have to fail now.
Edit: It decided to properly go to SAS-drive heaven about 5 milliseconds after I posted that. Hot-spare came online and everything rebuilt fine, so the array is now
degraded
rather thancritical
. New drive on order for tomorrow on a before-10am. Hopefully it can put off having any more drive failures until then.Maybe you should have ordered 2 to ensure no more fail?
-
@adynathos said in The Official Status Thread:
@pie_flavor said in The Official Status Thread:
month-long assignment
What is the task?
Eat 30 chocolates, at the rate of one per day.
-
@lorne-kates said in The Official Status Thread:
@adynathos said in The Official Status Thread:
@pie_flavor said in The Official Status Thread:
month-long assignment
What is the task?
Eat 30 chocolates, at the rate of one per day.
Oh, I can accelerate that and finish the task in ONE day
-
@cursorkeys Doing some extra backups, because I'm paranoid and:
I would be worried about corruption if it was any other program but it's Sage so...
-
What the fuck do you mean SonarQube doesn't support SQL 2012?
God damnit I draw the line at installing my own database engine
-
@dcon said in The Official Status Thread:
@lorne-kates said in The Official Status Thread:
@adynathos said in The Official Status Thread:
@pie_flavor said in The Official Status Thread:
month-long assignment
What is the task?
Eat 30 chocolates, at the rate of one per day.
Oh, I can accelerate that and finish the task in ONE day
I can do that in a lot less. I'd regret it a lot afterwards, but it'd be worth it. :face_savouring_delicious_food:
Except then I'd have to make my diet even stricter. :(
-
Status: Just noticed how shitty the artwork is in today's Google doodle.
-
Status: Startin to get reeeeeeeeeally sick of this new Google ad engine that bugs you to either turn off your adblocker or buy "ad credits", otherwise once you've loaded 10 pages it brings up a big full-page thing that bugs you to turn off your adblocker. TVTropes apparently bought into it and that's one of the more common ways I find to waste bits of time while at work...
-
@dcon said in The Official Status Thread:
@cursorkeys said in The Official Status Thread:
Status:
Unit Attention - SCSI bus reset occurred
x9999It's home time FFS, why does the disk have to fail now.
Edit: It decided to properly go to SAS-drive heaven about 5 milliseconds after I posted that. Hot-spare came online and everything rebuilt fine, so the array is now
degraded
rather thancritical
. New drive on order for tomorrow on a before-10am. Hopefully it can put off having any more drive failures until then.Maybe you should have ordered 2 to ensure no more fail?
I actually did order two :)
I think I may have an issue though. I rang Dell first as in an emergency it made sense to just use the vendor support, but they have none in stock and can't order any.
So I took the model from the failed drive and found a supplier with the exact model available and ordered those.
Next I went looking for the procedure to replace a drive on my RAID controller, it would be a shame to get a new drive and stuff up the install somehow. I started seeing people complain about 'non certified' drives not becoming array members. Looks like Dell have custom firmware on the drives and the RAID card may or may not mount the disk depending on firmware combos, phase-of-the-moon etc.
There is a tool for updating drive firmware but it won't work unless the drive has Dell firmware already.So I need to send them back and order drives from Dell...who will never have any of these drives ever again
-
@adynathos said in The Official Status Thread:
@pie_flavor said in The Official Status Thread:
month-long assignment
What is the task?
Go to a specific bunch of different places on campus, ask about all the different services they offer, and write a mini-essay on each; print out about thirty forms; answer a bunch of questions that can only be found by digging through policies or talking to various advisers; and sign up for the university's job service. Not impossible to do in a week, but impossible to do in a week with my schedule and the departments' schedules.
-
Status: Working out how I fucked up an SQL cursor such that it apparently completes all of my transactions, but at the end seemingly did not...
-
@tsaukpaetra Are you sure that you're looking at the right database both times?
-
@pie_flavor said in The Official Status Thread:
@tsaukpaetra Are you sure that you're looking at the right database both times?
It's one right after the other in the same batch, so... probably?
-
@tsaukpaetra said in The Official Status Thread:
probably
Found it. Off-by-one error. The outer cursor was setting the action number to 4 when it should have been 5, in effect, running the wrong code path (it was attempting to approve a store transaction and complete it, when it should have been cancelling it, specifically because it was unable to be approved).
-
@tsaukpaetra said in The Official Status Thread:
how I fucked up
@tsaukpaetra said in The Official Status Thread:
an SQL cursor
You answered your own question there...
-
@izzion said in The Official Status Thread:
@tsaukpaetra said in The Official Status Thread:
how I fucked up
@tsaukpaetra said in The Official Status Thread:
an SQL cursor
You answered your own question there...
Problem is, I'm really not certain how else to implement this stupid behemoth (for this codebase) stored proc. It's 400 lines long, and technically only half implemented (refunding/reversal doesn't work).
-
Status: 5 minutes late for a project kickoff / scoping call, followed by 5 more minutes of technical difficulties getting the call going, followed by scotching the project in the next 5 minutes.
And then I called my mechanic since they had recently done some work that involved getting in behind the windshield washer fluid reservoir, and the windshield washer fluid stopped spraying immediately thereafter, so obviously they had broken it... and then while I was taking the car that way I figured that despite the bluish tint to the reservoir which obviously meant it had fluid, I might as well get some fluid anyway just to double check... and the reservoir was, in fact, quite empty and there's a much darker bluish color when it's full.
And, to top off my best afternoon EVAH, it's finally spring, which means my everything-above-the-shoulders aches. Hooray me.
-
@tsaukpaetra said in The Official Status Thread:
only half implemented (refunding/reversal doesn't work).
The most important part works then
-
@timebandit said in The Official Status Thread:
@tsaukpaetra said in The Official Status Thread:
only half implemented (refunding/reversal doesn't work).
The most important part works then
You're not technically wrong. If people can't get refunds, that's win win, right? :P
-
@tsaukpaetra
Well, in general, the two solutions I've seen to cursors are- Split the logic up in the web/application layer so that it's making single atomic calls to the database (within a distributed transaction if necessary so it can roll the whole thing back)
- Figure out that what you're doing can actually be done in a single set-based operation instead of looping through rows in a cursor and rewrite the SQL appropriately.
Roughly 50/50, in my experience, as to whether the problem can be solved with approach #2 or if it requires approach #1 (or the cursor).
-
Status: Due to me having Fridays off regularly (lucky stroke this semester!) and next Tuesday being a holiday and next Monday being a "movable" holiday, I'll have to return to school only next Wednesday.
Also wrestled the GrandMa2 into submission for the school's concert. There was beer involved. Feeling juuuust fine.
-
@dkf said in The Official Status Thread:
@dcon said in The Official Status Thread:
@lorne-kates said in The Official Status Thread:
@adynathos said in The Official Status Thread:
@pie_flavor said in The Official Status Thread:
month-long assignment
What is the task?
Eat 30 chocolates, at the rate of one per day.
Oh, I can accelerate that and finish the task in ONE day
I can do that in a lot less. I'd regret it a lot afterwards, but it'd be worth it. :face_savouring_delicious_food:
Except then I'd have to make my diet even stricter. :(
Not with good chocolate. Crappy chocolate-flavored candy I'll pig out on (if I eat it at all), but good chocolate should be savored; I'll rarely have more than one or two squares a day.
-
@izzion said in The Official Status Thread:
@tsaukpaetra
Well, in general, the two solutions I've seen to cursors are- Split the logic up in the web/application layer so that it's making single atomic calls to the database (within a distributed transaction if necessary so it can roll the whole thing back)
This is the code that runs in that single atomic call to the database (essentially, it's the logic that runs when a transaction is approved, a la
exec UPDATE_Txn_Log SET Status = 4
).
That single atomic call does the following:- Checks that the transaction record is in a state that can move into the desired state (i.e. if it's already approved you shouldn't try approving it again)
- Reads through the different lines in the transaction, applying other atomic actions to other tables (for example "insert X inventory item into the player's inventory")
- Oh, did I mention we have a bundling system in which you can effectively have a subtransaction that holds a predetermined set of products? Cursor within a cursor, baby, yeah! Make sure they're named uniquely!
- If that failed, rollback that last operation, otherwise update that transaction line that all is well and done with that line
- After processing all lines, aggregate the results and check for all-OK, all-failed, or mixed.
- If mixed success is acceptable and the above operations were partially successful (or everything was successful regardless), update the character's currency balance, and update the transaction to the desired state.
- If not, rollback the whole damn thing and return the resultant state of the transaction record (which may have been updated anyways if certain other options were specified).
- Figure out that what you're doing can actually be done in a single set-based operation instead of looping through rows in a cursor and rewrite the SQL appropriately.
Hehe, not much, since depending on the product type in the transaction lines you may end up altering one table or another.
Roughly 50/50, in my experience, as to whether the problem can be solved with approach #2 or if it requires approach #1 (or the cursor).
The question is: Do I make the application responsible for walking through the transaction process, or let the database itself handle all consistency in one operation?
-
@e4tmyl33t said in The Official Status Thread:
TVTropes ... waste bits of time
Off by orders of magnitude. More like exabytes of time.
-
@hardwaregeek Eh. I mitigate it by having it open alongside other timewasters like various bits of fanfiction, NotAlwaysRight (which also had that ad engine for a little while), Ars Technica, Popehat, random wikis, a webcomic or two...and sometimes actual work stuff as well :P
-
@e4tmyl33t said in The Official Status Thread:
sometimes actual work stuff as well
Edit: Why is it named "weary cat face"? What about a screaming cat face looks "feeling or showing tiredness, especially as a result of excessive exertion or lack of sleep" to the namers?
-
@tsaukpaetra Maybe it's supposed to be yawning, not screaming?
-
@hardwaregeek said in The Official Status Thread:
@tsaukpaetra Maybe it's supposed to be yawning, not screaming?
Hmm... perhaps.
Nothing seems more appropriate for tired_face or sleepy_face, so the jury is out on that one.
-
@tsaukpaetra said in The Official Status Thread:
The question is: Do I make the application responsible for walking through the transaction process, or let the database itself handle all consistency in one operation?
The SQL Server DBA's answer to that question would be make the application responsible - web server CPUs are cheap, whereas server CPU time is $2000+ per core in licensing costs (and $7000 per core if you're using Enterprise features). Though obviously, in the real world, that varies based on whether you're using SaaS or an open source database that doesn't have that licensing cost, etc... but even then, most web/application server languages are much better at handling looping & forking logic than SQL Server cursors are, so you'd still be spending less CPU time to do it in the web/application layer (as a general rule of thumb, YMMV, etc etc etc).
From a Microsoft stack "infrastructure" perspective (aka you're not dealing with all SaaS platforms but have actual servers be they physical, virtual, or IaaS), setting up the Microsoft Distributed Transaction Coordinator itself is very simple. The only real challenge involved is making sure you have valid SPNs for the SQL server, and that both the SQL server and the application server can resolve each other's computer names by DNS (which is where most DTC related excitement occurs and why you sometimes see suggestions of HOSTS file all the things!!!!). At which point the web/application tier can manage the transaction itself and get the same level of atomicity as you're getting with the cursor stored procedure currently.
But yeah, without more technical details, all I can really do is faff about yelling at you damn cursor loving kids to get off the lawn...
-
@weng said in The Official Status Thread:
What the fuck do you mean SonarQube doesn't support SQL 2012?
God damnit I draw the line at installing my own database engine
Status: Installing pgsql...
-
@izzion said in The Official Status Thread:
The SQL Server DBA's answer to that question would be make the application responsible - web server CPUs are cheap, whereas server CPU time is $2000+ per core in licensing costs (and $7000 per core if you're using Enterprise features). Though obviously, in the real world, that varies based on whether you're using SaaS or an open source database that doesn't have that licensing cost, etc... but even then, most web/application server languages are much better at handling looping & forking logic than SQL Server cursors are, so you'd still be spending less CPU time to do it in the web/application layer (as a general rule of thumb, YMMV, etc etc etc).
Eh. This would end up meaning I would have to code it on the web server and the game engine (and maintain two versions of the same code), or switch everything to HTTP instead of direct DB calls (which, for some reason, are way less performant somehow). Will have to try it and see how much more effective it is when I'm bored.
@izzion said in The Official Status Thread:
From a Microsoft stack "infrastructure" perspective (aka you're not dealing with all SaaS platforms but have actual servers be they physical, virtual, or IaaS), setting up the Microsoft Distributed Transaction Coordinator itself is very simple. The only real challenge involved is making sure you have valid SPNs for the SQL server, and that both the SQL server and the application server can resolve each other's computer names by DNS (which is where most DTC related excitement occurs and why you sometimes see suggestions of HOSTS file all the things!!!!). At which point the web/application tier can manage the transaction itself and get the same level of atomicity as you're getting with the cursor stored procedure currently.
This is all in Azure, so I'm assuming it's one-click? Doing a rather quick google search seems to indicate it might work, but nothing about how to set it up (on some guides they mention "If you're doing Enterprise, surprise! You're already using it!" ), and seemingly introduces another level of complexity I dread to teach to any of my successors (be there any that step up to the challenge).
-
Status: Getting closer to 'functional' with my forum thing. Still no client side code.
-
@tsaukpaetra said in The Official Status Thread:
outer cursor
If ever two words were a code smell...
-
www.stat.us: The right-hand mirror on my motorcycle is loose, for the third time in the past week. I'm about ready to Loctite the motherfucker and hope I never need to adjust it again.
-
Status: I hate null reference exceptions in Linq lambdas...
Which thing out of 500 had no object reference set to an instance of an object? Can you debug that? No, why would you want to know something like that?
-
-
-
@tsaukpaetra said in The Official Status Thread:
This would end up meaning I would have to code it on the web server and the game engine (and maintain two versions of the same code)
One word: library.
This is a classic case for “put your implementation in a library and stop worrying about it”. Yes, the library versions can get disconnected between the two deployments, and yes, you should be making sure that doesn't happen already so adding one more chunk to the pile doesn't hurt that much…
-
@tsaukpaetra I eventually just stuck it in a table, with the brackets inside their own <td>s. And then I couldn't get the Content label to align correctly, so I just removed it.
-
@dkf said in The Official Status Thread:
@tsaukpaetra said in The Official Status Thread:
This would end up meaning I would have to code it on the web server and the game engine (and maintain two versions of the same code)
One word: library.
This is a classic case for “put your implementation in a library and stop worrying about it”. Yes, the library versions can get disconnected between the two deployments, and yes, you should be making sure that doesn't happen already so adding one more chunk to the pile doesn't hurt that much…
Then I get to learn how to PInvoke on Asp.NET, since .Net won't be available on the game servers, and I'd get to learn how to use UE4's dll importing functionality too!
No thanks....
-
@tsaukpaetra said in The Official Status Thread:
Then I get to learn how to PInvoke on Asp.NET, since .Net won't be available on the game servers, and I'd get to learn how to use UE4's dll importing functionality too!
No thanks....Oh well, then you use a custom server and protocol (if HTTP is too slow; mind you, that points to something else being horribly wrong) that you strictly firewall off from the outside world. Writing a custom client for that sort of thing should be trivially easy; the basics are within what I'd consider for a mettle-like test for potential hires (with no fault for looking stuff up online)…
Having to duplicate complex code is definitely an indication of something badly off.
-
@dkf said in The Official Status Thread:
@tsaukpaetra said in The Official Status Thread:
Then I get to learn how to PInvoke on Asp.NET, since .Net won't be available on the game servers, and I'd get to learn how to use UE4's dll importing functionality too!
No thanks....Oh well, then you use a custom server and protocol (if HTTP is too slow; mind you, that points to something else being horribly wrong) that you strictly firewall off from the outside world. Writing a custom client for that sort of thing should be trivially easy; the basics are within what I'd consider for a mettle-like test for potential hires (with no fault for looking stuff up online)…
Having to duplicate complex code is definitely an indication of something badly off.
But that's the thing: by putting it into the database I don't duplicate code. I don't need to write a custom protocol. I don't need to make a custom client. Everything I need is already here, working, and fast. Why go out of my way to make more work for myself?
-
@dkf said in The Official Status Thread:
(if HTTP is too slow; mind you, that points to something else being horribly wrong)
HTTP is very slow. That's why WTDWTF doesn't use it unless it absolutely has to.
HTTP only supports one request per connection at a time (unless you use pipelining which every major browser disabled after they found out it broke tons of legacy HTTP servers), and even with pipelining, all the responses have to come in order.
-
@ben_lubar said in The Official Status Thread:
one request per connection at a time
Which lead inadvertently to the precursor to CDNs and hosting files splattered across different domains to trick the browser into opening more connections...
-
@ben_lubar said in The Official Status Thread:
HTTP is very slow.
You wait until you compare with FTP…
-
@dkf said in The Official Status Thread:
@ben_lubar said in The Official Status Thread:
HTTP is very slow.
You wait until you compare with FTP…
Or SCPover ssh!