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.
 
  • Post
  • Reply
xzzy
Mar 5, 2009

He does, but explaining the intricacies of when it is and isn't appropriate to make jokes would involve a long winded description of office politics so feel free to use your imagination.

Adbot
ADBOT LOVES YOU

FlapYoJacks
Feb 12, 2009
Every once in a while I will sneak in a git commit from: http://whatthecommit.com/

Volte
Oct 4, 2004

woosh woosh
The patch note is fine mostly, except the actual statement of the bug itself is wrapped in a joke, which makes it hard to discern if you're not already familiar with the bug. I didn't really know what the joke was until I figured out what the bug was, and then the joke became apparent (and also somewhat vice versa).

The MUMPSorceress
Jan 6, 2012


^SHTPSTS

Gary’s Answer

Subjunctive posted:

Perhaps!

Everywhere I've worked has had humor in commit messages at times, especially when dealing with the ridiculous. I'm sorry for your loss.

We used to have all sorts of fun names and comments in commits and are dev tracking system, but when we went international a lot of our international customers demanded we be ISO certified for some reason (I guess this is a big deal in Europe?) and one of the things ISO wants to see is how you track fixes to ensure quality. This meant we had some swiss auditor reading our commit messages and such, and now fun is forbidden because "<Feature> calculates interest in a really stupid way" is apparently not an appropriate or "quality" name for a bug record.

Munkeymon
Aug 14, 2003

Motherfucker's got an
armor-piercing crowbar! Rigoddamndicu𝜆ous.



Volte posted:

The patch note is fine mostly, except the actual statement of the bug itself is wrapped in a joke, which makes it hard to discern if you're not already familiar with the bug. I didn't really know what the joke was until I figured out what the bug was, and then the joke became apparent (and also somewhat vice versa).

That just means it's well-written

LeftistMuslimObama posted:

We used to have all sorts of fun names and comments in commits and are dev tracking system, but when we went international a lot of our international customers demanded we be ISO certified for some reason (I guess this is a big deal in Europe?) and one of the things ISO wants to see is how you track fixes to ensure quality. This meant we had some swiss auditor reading our commit messages and such, and now fun is forbidden because "<Feature> calculates interest in a really stupid way" is apparently not an appropriate or "quality" name for a bug record.

Maybe that's not the best example but "in a really stupid way" also isn't helpful to someone coming along later to try to figure out why you did what you did because now they have to read and understand two versions of the code instead of "calculates interest by recursively applying a multiple instead of using a constant-time formula". You could still turn that into a joke and the post that triggered this whole derail actually did because it's both descriptive and funny. It's just also long-winded, but oh well.

The MUMPSorceress
Jan 6, 2012


^SHTPSTS

Gary’s Answer

Munkeymon posted:

Maybe that's not the best example but "in a really stupid way" also isn't helpful to someone coming along later to try to figure out why you did what you did because now they have to read and understand two versions of the code instead of "calculates interest by recursively applying a multiple instead of using a constant-time formula". You could still turn that into a joke and the post that triggered this whole derail actually did because it's both descriptive and funny. It's just also long-winded, but oh well.

So, that was the title of what we call a QA note (our version of bugs). The actual body of the QA note had a detailed description of the issue and had lots of metadata describing it as well. The titles are basically the most meaningless part of our issue tracking system, so they were often used to be funny. ISO didn't like the idea that are issue tracking had humor in it at all, so now that's out the window. In other words, the bug title says "in a stupid way", but the first paragraph of the record describes specifically how the interest calculation is stupid.

loinburger
Jul 10, 2004
Sweet Sauce Jones
At my last job there was one particularly annoying programmer who was referenced in quite a few commit messages ("this commit does blah blah blah in reference to such and such ticket, also, gently caress you Mike"), other than that we kept them fairly kosher

EssOEss
Oct 23, 2006
128-bit approved
Oh wow, I just pieced together a long-standing mystery that was troubling me. Universal Windows Platform has the Smooth Streaming SDK for playback of Smooth Streaming video, which extends the native MediaElement to support the adaptive streaming format. Now, observe how you enable this SDK to work with your MediaElements:

code:
var extensionManager = new MediaExtensionManager();
extensionManager.RegisterByteStreamHandler("Microsoft.Media.AdaptiveStreaming.SmoothByteStreamHandler", ".ism", "text/xml");
extensionManager.RegisterByteStreamHandler("Microsoft.Media.AdaptiveStreaming.SmoothByteStreamHandler", ".ism", "application/vnd.ms-sstr+xml");
Yes, that's all. Not a single reference to any MediaElement, you just new up an instance of some arbitrary class from the UWP core API (not the SDK), call a couple of magic functions with magic parameters and throw away the instance and the SDK is suddenly activated. There is no explanation or documentation for the values here - the documentation just points you at sample code with these three lines and makes no comment on the logic that might apply.

But okay, I can live with this - presumably Windows Media Foundation has some funny initialization expectations. Magic startup calls are not that crazy.

Now, this SDK extends playback with adaptive streaming functions - things like automatic quality level switching. Obviously, I want feedback - to show the user the current quality level, for example. How do I do this? In a sane world, I would expect there to be some call to get the SDK's view of the activities of a MediaElement, something similar this:

code:
var adaptive = AdaptiveStreamingSdk.GetAdaptiveApi(myMediaElement);
There are many ways to implement the above but something along these lines would make perfect sense. So what does the Smooth Streaming SDK offer? It has an AdaptiveSourceManager class with the expected API surface. Well, sort of - it's a bit clunky in that it has no nice API but does at least provide a stream of events that you can listen to. Good enough, not a horror on its own, for sure.

But how do you get an AdaptiveSourceManager? Aha, there's a very simple call.

code:
var asm = AdaptiveSourceManager.GetDefault();
Wait, what? Yes, it's a singleton. But that's not all! It doesn't work until you activate it with more magic! No idea what this PropertySet does but it sure needs to be there or the ASM class will do nothing at all!

code:
var asm = AdaptiveSourceManager.GetDefault();

var ps = new PropertySet();
ps["{A5CE1DE8-1D00-427B-ACEF-FB9A3C93DE2D}"] = asm;

var extensionManager = new MediaExtensionManager();
extensionManager.RegisterByteStreamHandler("Microsoft.Media.AdaptiveStreaming.SmoothByteStreamHandler", ".ism", "text/xml", ps);
extensionManager.RegisterByteStreamHandler("Microsoft.Media.AdaptiveStreaming.SmoothByteStreamHandler", ".ism", "application/vnd.ms-sstr+xml", ps);
Okay, so it's a singleton. What if I want to have multiple MediaElements in my app? There is not a hint about this in the documentation, of course. After some digging, I found it. Here's the logic flow required:

code:
var asm = AdaptiveSourceManager.GetDefault();

// Activate the SDK
var ps = new PropertySet();
ps["{A5CE1DE8-1D00-427B-ACEF-FB9A3C93DE2D}"] = asm;

var extensionManager = new MediaExtensionManager();
extensionManager.RegisterByteStreamHandler("Microsoft.Media.AdaptiveStreaming.SmoothByteStreamHandler", ".ism", "text/xml", ps);
extensionManager.RegisterByteStreamHandler("Microsoft.Media.AdaptiveStreaming.SmoothByteStreamHandler", ".ism", "application/vnd.ms-sstr+xml", ps);

// Register for Smooth Streaming SDK events.
asm.AdaptiveSourceOpenedEvent += (sender, args) => 
{
    if (args.AdaptiveSource.Uri == myVideoUrl)
    {
        // This event is for my MediaElement!
    }
};

// Start playback.
MediaElement.Source = myVideoUrl;
Yes, all the events of the SDK are just exposed via a singleton and you have to find the right ones from the stream by just picking it via the properties in the event arguments.

What if you have two MediaElements that try to play the same URL? I have no idea but I am going to find out because that's exactly what I need to do! Huh, come to think of it, that might explain some crashes I have encountered when playing the same video many times with Microsoft Player Framework...

Why would you ever publish an API like that? This sort of design is completely unintelligible - you get an SDK that has no obvious way to actually use it. This is my 3rd try at understanding the behavior, I just gave up the first 2 times I started digging into this. I have worked with players for over 5 years - I doubt a random Windows Store app developer is going to have any idea WTF is going on.

This is an SDK that is only usable by copy-pasting Microsoft sample projects that use it.

Edit: oh, of course you need to do string parsing when handling events from this SDK. This snippet is from Microsoft Player Framework.

code:
void AdaptiveSrcManager_AdaptiveSourceStatusUpdatedEvent(AdaptiveSource sender, AdaptiveSourceStatusUpdatedEventArgs args)
{
	lock (adaptiveSourceLock)
	{
		if (IsOpen && ActiveAdaptiveSource == args.AdaptiveSource)
		{
			switch (args.UpdateType)
			{
				case AdaptiveSourceStatusUpdateType.BitrateChanged:
					var videoStream = VideoStream;
					if (videoStream != null)
					{
						var bitrateInfo = args.AdditionalInfo.Split(';');
						var bitrate = uint.Parse(bitrateInfo[0]);
						var timeStamp = long.Parse(bitrateInfo[1]);
						// snip
					}
					break;
				// snip
			}
		}
	}
}
Edit 2: Jesus gently caress. I just noticed the continuation of the above snippet. The bitrate change events don't say which stream's bitrate changed (audio, video, text, whatever) so can you ensure that it really was the video bitrate that changed?

code:
var selectedTrack = videoStream.SelectedTracks.FirstOrDefault(t => t.Bitrate == bitrate);
if (selectedTrack != null)
{
    // Must be the video bitrate since there exists a track with this bitrate.
}
Yes, just compare bitrates and assume any match is a valid match. So if I have both audio and video at 256 kbps, for example, the logic will presumably count audio switching from 128->256 as video switching from 2000->256.

EssOEss fucked around with this message at 13:37 on Dec 22, 2015

Che Delilas
Nov 23, 2009
FREE TIBET WEED
Aint nobody got time for design when they have to play office politics for the "Excellent" stack ranking.

Suspicious Dish
Sep 24, 2011

2020 is the year of linux on the desktop, bro
Fun Shoe
Yikes. I've seen some really lovely media APIs in my time, but holy moly.

vOv
Feb 8, 2014

Registering an event handler using += is also a very... interesting design choice.

loinburger
Jul 10, 2004
Sweet Sauce Jones
Sunk cost time! We've got an Oracle database that's in the wrong format for a third party application to read it, so we've written a program that lets a user request some data to be dumped from the primary database into a reformatted Oracle database so that the third party application can read it; I was tasked with implementing archive and staging tables so that we'd have a record of our data dumps and so that we could (more or less) atomically update the reformatted database tables (a data dump could take over an hour and we didn't want users to see a partial update). (FWIW I wanted to use something like Cassandra for the reformatted database since one of Cassandra's use cases is time series data, but I was overruled for the reasonable reason that we've got a billion Oracle admins and zero Cassandra admins.)

My boss had written some proof of concept code several months ago that implemented archiving/staging with several dozen lines of SQL; this had the downside that we had to manually create archiving and staging versions of all of our tables and that any change to the live table would necessitate a change to the archiving/staging tables, and more importantly it had the downside of using a single global staging table that might get all hosed up if we tried to execute two or more data dumps concurrently.

My implementation is about a half dozen lines of code and uses Oracle's Workspace Manager; archiving/staging tables get created automatically and ordinarily aren't visible to the user, and concurrent data dumps operate on separate workspaces so nothing will break (if two data dumps change the same data i.e. if the user screwed up when submitting their batch jobs then the first dump will merge successfully but the second dump will refuse to merge until the user resolves any conflicts in the data).

Anyway, now I've got to go back and re-implement everything using my boss's lovely proof of concept code because otherwise minutes of his life will have been wasted, but I'm willing to bet that he's not going to fire me if I just ignore him.

ninjeff
Jan 19, 2004

vOv posted:

Registering an event handler using += is also a very... interesting design choice.

That's just C# and not part of this particular horror.

Soricidus
Oct 21, 2010
freedom-hating statist shill

EssOEss posted:

Oh wow, I just pieced together a long-standing mystery that was troubling me. Universal Windows Platform has the Smooth Streaming SDK for playback of Smooth Streaming video, which extends the native MediaElement to support the adaptive streaming format. Now, observe how you enable this SDK to work with your MediaElements:

code:

var extensionManager = new MediaExtensionManager();
extensionManager.RegisterByteStreamHandler("Microsoft.Media.AdaptiveStreaming.SmoothByteStreamHandler", ".ism", "text/xml");
extensionManager.RegisterByteStreamHandler("Microsoft.Media.AdaptiveStreaming.SmoothByteStreamHandler", ".ism", "application/vnd.ms-sstr+xml");

Yes, that's all. Not a single reference to any MediaElement, you just new up an instance of some arbitrary class from the UWP core API (not the SDK), call a couple of magic functions with magic parameters and throw away the instance and the SDK is suddenly activated. There is no explanation or documentation for the values here - the documentation just points you at sample code with these three lines and makes no comment on the logic that might apply.

But okay, I can live with this - presumably Windows Media Foundation has some funny initialization expectations. Magic startup calls are not that crazy.

Now, this SDK extends playback with adaptive streaming functions - things like automatic quality level switching. Obviously, I want feedback - to show the user the current quality level, for example. How do I do this? In a sane world, I would expect there to be some call to get the SDK's view of the activities of a MediaElement, something similar this:

code:

var adaptive = AdaptiveStreamingSdk.GetAdaptiveApi(myMediaElement);

There are many ways to implement the above but something along these lines would make perfect sense. So what does the Smooth Streaming SDK offer? It has an AdaptiveSourceManager class with the expected API surface. Well, sort of - it's a bit clunky in that it has no nice API but does at least provide a stream of events that you can listen to. Good enough, not a horror on its own, for sure.

But how do you get an AdaptiveSourceManager? Aha, there's a very simple call.

code:

var asm = AdaptiveSourceManager.GetDefault();

Wait, what? Yes, it's a singleton. But that's not all! It doesn't work until you activate it with more magic! No idea what this PropertySet does but it sure needs to be there or the ASM class will do nothing at all!

code:

var asm = AdaptiveSourceManager.GetDefault();

var ps = new PropertySet();
ps["{A5CE1DE8-1D00-427B-ACEF-FB9A3C93DE2D}"] = asm;

var extensionManager = new MediaExtensionManager();
extensionManager.RegisterByteStreamHandler("Microsoft.Media.AdaptiveStreaming.SmoothByteStreamHandler", ".ism", "text/xml", ps);
extensionManager.RegisterByteStreamHandler("Microsoft.Media.AdaptiveStreaming.SmoothByteStreamHandler", ".ism", "application/vnd.ms-sstr+xml", ps);

Okay, so it's a singleton. What if I want to have multiple MediaElements in my app? There is not a hint about this in the documentation, of course. After some digging, I found it. Here's the logic flow required:

code:

var asm = AdaptiveSourceManager.GetDefault();

// Activate the SDK
var ps = new PropertySet();
ps["{A5CE1DE8-1D00-427B-ACEF-FB9A3C93DE2D}"] = asm;

var extensionManager = new MediaExtensionManager();
extensionManager.RegisterByteStreamHandler("Microsoft.Media.AdaptiveStreaming.SmoothByteStreamHandler", ".ism", "text/xml", ps);
extensionManager.RegisterByteStreamHandler("Microsoft.Media.AdaptiveStreaming.SmoothByteStreamHandler", ".ism", "application/vnd.ms-sstr+xml", ps);

// Register for Smooth Streaming SDK events.
asm.AdaptiveSourceOpenedEvent += (sender, args) => 
{
    if (args.AdaptiveSource.Uri == myVideoUrl)
    {
        // This event is for my MediaElement!
    }
};

// Start playback.
MediaElement.Source = myVideoUrl;

Yes, all the events of the SDK are just exposed via a singleton and you have to find the right ones from the stream by just picking it via the properties in the event arguments.

What if you have two MediaElements that try to play the same URL? I have no idea but I am going to find out because that's exactly what I need to do! Huh, come to think of it, that might explain some crashes I have encountered when playing the same video many times with Microsoft Player Framework...

Why would you ever publish an API like that? This sort of design is completely unintelligible - you get an SDK that has no obvious way to actually use it. This is my 3rd try at understanding the behavior, I just gave up the first 2 times I started digging into this. I have worked with players for over 5 years - I doubt a random Windows Store app developer is going to have any idea WTF is going on.

This is an SDK that is only usable by copy-pasting Microsoft sample projects that use it.

Edit: oh, of course you need to do string parsing when handling events from this SDK. This snippet is from Microsoft Player Framework.

code:

void AdaptiveSrcManager_AdaptiveSourceStatusUpdatedEvent(AdaptiveSource sender, AdaptiveSourceStatusUpdatedEventArgs args)
{
	lock (adaptiveSourceLock)
	{
		if (IsOpen && ActiveAdaptiveSource == args.AdaptiveSource)
		{
			switch (args.UpdateType)
			{
				case AdaptiveSourceStatusUpdateType.BitrateChanged:
					var videoStream = VideoStream;
					if (videoStream != null)
					{
						var bitrateInfo = args.AdditionalInfo.Split(';');
						var bitrate = uint.Parse(bitrateInfo[0]);
						var timeStamp = long.Parse(bitrateInfo[1]);
						// snip
					}
					break;
				// snip
			}
		}
	}
}

Edit 2: Jesus gently caress. I just noticed the continuation of the above snippet. The bitrate change events don't say which stream's bitrate changed (audio, video, text, whatever) so can you ensure that it really was the video bitrate that changed?

code:

var selectedTrack = videoStream.SelectedTracks.FirstOrDefault(t => t.Bitrate == bitrate);
if (selectedTrack != null)
{
    // Must be the video bitrate since there exists a track with this bitrate.
}

Yes, just compare bitrates and assume any match is a valid match. So if I have both audio and video at 256 kbps, for example, the logic will presumably count audio switching from 128->256 as video switching from 2000->256.

Developers! Developers! Developers!

canis minor
May 4, 2011

Oh, SO... :eng99:

quote:

I have two functions one is PHP second is JQuery. I want them to activate on same button click. But I want fisrt to activate PHP function and then JQuery. How can I do this?

xzzy
Mar 5, 2009

My brain broke just trying to come up with a snotty response to that. How do people get hired to write code that have such a poor grasp of the technology?

Makes me feel like I could qualify for a senior development position somewhere.

Hammerite
Mar 9, 2007

And you don't remember what I said here, either, but it was pompous and stupid.
Jade Ear Joe

xzzy posted:

My brain broke just trying to come up with a snotty response to that. How do people get hired to write code that have such a poor grasp of the technology?

Makes me feel like I could qualify for a senior development position somewhere.

Why do you presume that the person has a job writing code?

Suspicious Dish
Sep 24, 2011

2020 is the year of linux on the desktop, bro
Fun Shoe
In any other development environment, that would be a sane question. In fact, there are frameworks that try to make that transparent, Meteor.js being the hot new HN ones, but ColdFusion did that for years, as has frameworks in the PHP space.

Plorkyeran
Mar 22, 2007

To Escape The Shackles Of The Old Forums, We Must Reject The Tribal Negativity He Endorsed

Suspicious Dish posted:

In any other development environment, that would be a sane question. In fact, there are frameworks that try to make that transparent, Meteor.js being the hot new HN ones, but ColdFusion did that for years, as has frameworks in the PHP space.

The fact that people keep trying to build frameworks which make network calls transparent could itself be considered a horror. I get why it sounds appealing, but when people have been trying to do something for a few decades without ever making it work well, perhaps you should try to actually come up with a solution to the problems the previous attempts ran into rather than just assuming they were too dumb to make it work.

Karate Bastard
Jul 31, 2007
Probation
Can't post for 6 hours!
Soiled Meat
Hey now, that's "just" an assumption in the same way that the theory of evolution is "just" a theory.

Subjunctive
Sep 12, 2006

✨sparkle and shine✨

Plorkyeran posted:

The fact that people keep trying to build frameworks which make network calls transparent could itself be considered a horror. I get why it sounds appealing, but when people have been trying to do something for a few decades without ever making it work well, perhaps you should try to actually come up with a solution to the problems the previous attempts ran into rather than just assuming they were too dumb to make it work.

Network filesystems do a pretty good job of making programs work without knowing there's a network involved. You can run into edge cases, but you can do that with local filesystems too.

Plorkyeran
Mar 22, 2007

To Escape The Shackles Of The Old Forums, We Must Reject The Tribal Negativity He Endorsed
I/O to a disk and I/O over a high-quality local network are pretty similar in terms of speed and latency, and while the network adds more ways for things to fail, they're not all that different from the pre-existing error cases. Network filesystems over the public internet are a janky mess where programs regularly lock up for 30 seconds and everything is so unpleasant that you just make a local copy of all the files you need.

Similarly, RPC works reasonably well for processes on one machine, or between servers on a decent network, and not so well on an unreliable network.

loinburger
Jul 10, 2004
Sweet Sauce Jones
I had an interview with a company that gave me a few programming assignments that I implemented and then discussed with them over google chat - one assignment was to see if I understood hashing and another was to see if I understood concurrency, but the third was something I hadn't seen before in an interview programming question: "here's a bad spec for a stupid problem, let's see how you deal with it." It turns out that at some point a programmer working for this company who drew the short straw had to write an ugly program to turn a bunch of Ant projects into Maven projects (or something like that), and so they decided that it would be fun to incorporate that project into their interviewing process to see if the person they were interviewing was able to write functional but lovely code.

loinburger fucked around with this message at 08:51 on Dec 24, 2015

xzzy
Mar 5, 2009

"Unreliable" meaning any network with unix hosts on it until 2005 or so when they started getting less lovely about getting unrecoverably stuck because a share went away for a little while. Exorcising hubs and finishing the migration to gigabit helped a lot too.

People wanting NFS cross mounts all the gently caress over the place because "it makes my job easy and I need those files everywhere!" were a constant source of frustration. Rebooting one host meant rebooting several others because who wants to listen to the engineers/admins, they never know what they're talking about.

Doctor w-rw-rw-
Jun 24, 2008

Subjunctive posted:

Network filesystems do a pretty good job of making programs work without knowing there's a network involved. You can run into edge cases, but you can do that with local filesystems too.

I don't know about that. I'd say more that the commercial solutions do a pretty good job of making the pain of network filesystems less visible, but the suckiness is still there.

NFS is a shitshow where NFSv3 vs. NFSv4 is or was (as of a couple years ago) still a legitimate question, with NFSv4 of highly questionable stability, such as a Linux server with an NFS mount hanging forever on the storage server on the same switch to respond (and failing to realize the server went back up after it went down and resume whatever it was trying to do, thereby hanging the system completely), or FreeBSD kernel panics on the storage server because of too many exports, and a bunch of miscellaneous edge cases – which weren't that obscure for non-corporate, self-configured servers that targeted a couple of tens of active users + several hundred to a couple thousand users overall – all this on server hardware with server-grade RAID controllers.

Of course, they're a huge pain to set up in the first place, which is why companies can so profitably sell storage appliances that at least configure a bunch of the problems away.

Off the top of my head, MogileFS is written in Perl and (I could be wrong) not really suitable for workstation usage. I don't know anything about GlusterFS but it's still rather new.

Not sure what serious alternatives there are for networked filesystems. SSHFS (through FUSE) is a joke and will break if you sneeze too hard.

And just to cover my bases, I wouldn't count networked object storage like S3 since the files can't be seeked/manipulated in a really fine grained manner (also if you've ever tried to set up OpenStack it's hilariously convoluted), and I wouldn't count iSCSI (which can work pretty okay) because it just moves/virtualizes disks, not the filesystem.

And then for high availability you may want to back your iSCSI with DRBD for redundancy's sake too, if you're not going the "just RAID your disks" route.

It's just...I dunno. Network storage is so complex and messy. I'd go further than to say "you can run into edge case" and say that not encountering an edge case is the edge case.

xzzy posted:

"Unreliable" meaning any network with unix hosts on it until 2005 or so when they started getting less lovely about getting unrecoverably stuck because a share went away for a little while. Exorcising hubs and finishing the migration to gigabit helped a lot too.
It got bad again when stuff started moving to NFSv4. Maybe it improved again later.

Plorkyeran posted:

I/O to a disk and I/O over a high-quality local network are pretty similar in terms of speed and latency
More like, people don't usually have disks fast enough or network equipment good enough for the network overhead to be the major bottleneck.

Doctor w-rw-rw- fucked around with this message at 07:40 on Dec 24, 2015

Karate Bastard
Jul 31, 2007
Probation
Can't post for 6 hours!
Soiled Meat
This is a good time to post this:

https://www.usenix.org/system/files/1311_05-08_mickens.pdf

Contains phrases like "I had the modest goal of translating a file read into a network operation", and "I HAVE NO TOOLS BECAUSE I’VE DESTROYED MY TOOLS WITH MY TOOLS".

Horrors abound. Merry Christmas you guys :)

Doctor w-rw-rw-
Jun 24, 2008

quote:

It’s like, French is a great idea, but nobody is going to invent French if they’re constantly being attacked by bears. Do you see? SYSTEMS HACKERS SOLVE THE BEAR MENACE. Only through the constant vigilance of my people do you get the freedom to think about croissants and subtle puns involving the true father of Louis XIV.
Okay.

Horse Clocks
Dec 14, 2004


loinburger posted:

I had an interview with a company that gave me a few programming assignments that I implemented and then discussed with them over google chat - one assignment was to see if I understood hashing and another was to see if I understood concurrency, but the third was something I hadn't seen before in an interview programming question: "here's a bad spec for a stupid problem, let's see how you deal with it." It turns out that at some point a programmer working for this company who drew the short straw had to write an ugly program to turn a bunch of Ant projects into Maven projects (or something like that), and so they decided that it would be fun to incorporate that project into their interviewing process to see if the person they were interviewing was able to write functional but lovely code.
:psyduck: why would you want to use that as your yardstick? "Oh, your lovely code is slightly less lovely than that other guys. I guess we'll hire you".

Whenever I'm given a coding test for a job, I refuse. whatever the test is, it's either going to take too long, or isn't going to representative of my skills. I don't work for free, and there's more than enough of my code to look at on github. More often than not, I end up getting an apology.

Zopotantor
Feb 24, 2013

...und ist er drin dann lassen wir ihn niemals wieder raus...

Karate Bastard posted:

This is a good time to post this:

https://www.usenix.org/system/files/1311_05-08_mickens.pdf

Contains phrases like "I had the modest goal of translating a file read into a network operation", and "I HAVE NO TOOLS BECAUSE I’VE DESTROYED MY TOOLS WITH MY TOOLS".

Horrors abound. Merry Christmas you guys :)

This guy knows. However:

quote:

THERE IS NO HARDWARE ARCHITECTURE THAT IS ALIGNED ON 7.
I have actually had to work on a system that had 7-byte aligned memory. The hardware guys had forgot to account for ECC in their design, and they "solved" the problem by using 1 byte out of every 8 for the ECC bits. The ECC bits were hidden and had no address.

loinburger
Jul 10, 2004
Sweet Sauce Jones

xlevus posted:

:psyduck: why would you want to use that as your yardstick? "Oh, your lovely code is slightly less lovely than that other guys. I guess we'll hire you".
The yardstick was whether the person writing the code could (more or less) decipher the shity spec without wasting everybody else's time. The spec was basically "move these files from point A to point B using this ambiguous pattern, here's a couple of examples, go to it," which was inevitably going to result in a few thousand IOExceptions being thrown - as long as the interviewee handled this in a reasonable way (which could be "log all of the exceptions and move on") then they were good to go, with two red flagged approaches being "send a ton of email to the interviewer asking for clarifications on the lovely spec" or "write a humongous mess of nested if-else or try-catch blocks"

loinburger fucked around with this message at 15:00 on Dec 24, 2015

Asymmetrikon
Oct 30, 2009

I believe you're a big dork!
Asking for clarifications on a bad specification is a red flag? What is this terrible company, so none of us ever have to suffer there?

KaneTW
Dec 2, 2011

loinburger posted:

with two red flagged approaches being "send a ton of email to the interviewer asking for clarifications on the lovely spec"

In TYOOL 2015, communication is a bad thing.

ErIog
Jul 11, 2001

:nsacloud:
Hey, at least it's probably more representative of working there than whiteboarding out some random algorithm to demonstrate logical thinking.

raminasi
Jan 25, 2005

a last drink with no ice
That question seems like it's supposed to evaluate how candidates operate when a particular type of obstacle is in their way.

loinburger
Jul 10, 2004
Sweet Sauce Jones

loinburger posted:

"send a ton of email to the interviewer asking for clarifications on the lovely spec"
I meant for this to be interpreted as "an excessive number of of emails / questions"

loinburger posted:

"write a humongous mess of nested if-else or try-catch blocks"
I meant for this to be interpreted as "an excessive number of if-else or try-catch blocks"

In either case, a reasonable number of emails / questions / if-else blocks / try-catch blocks was permitted/expected

M31
Jun 12, 2012
How common are these interviews that have whiteboard exercises? I've never been asked to do this, and I have never asked anyone to do them either. It seems like a giant waste of time unless maybe you are scraping the bottom of the barrel.

loinburger
Jul 10, 2004
Sweet Sauce Jones
I've had a fair number of "write some code without us looking over your shoulder and later we'll review it on Skype / Google hangouts / whatever" exercises where the problems can be moderately difficult (e.g. one was "write an encoder that removes the zero-bytes from a byte array, and a decoder to transform the encoded byte array back into the original byte array"), for for whiteboard exercises they're always fizzbuzz type questions.

Subjunctive
Sep 12, 2006

✨sparkle and shine✨

M31 posted:

How common are these interviews that have whiteboard exercises? I've never been asked to do this, and I have never asked anyone to do them either. It seems like a giant waste of time unless maybe you are scraping the bottom of the barrel.

Pretty common. Some ask trivia, but a well-done one can gauge fluency in the person's language of choice as well as their ability to translate their thinking to code and structure the most common scale of code: a handful of functions. You might be surprised (I was) to discover how many people can do well on a conversational screen but can't code their way out of a paper bag.

I'm not big on algorithmic quiz shows, but it's reasonable to expect people to understand big-O, sorting, common data structures, the rough cost and operation of key parts of their preferred language.

sarehu
Apr 20, 2007

(call/cc call/cc)

M31 posted:

How common are these interviews that have whiteboard exercises? I've never been asked to do this, and I have never asked anyone to do them either. It seems like a giant waste of time unless maybe you are scraping the bottom of the barrel.

What do you experience then? Non-whiteboard exercises? Conversations about the weather?

One interview experience I had, at a startup in Boston, the CEO came in, pulled out a laptop, visited my web site, clicked on the page with "gently caress" in an <h1>, clicked back... and then the next guy came in and... was extremely sleep-deprived and hatefully grouchy and talked a bunch, and then the next guy came in and... talked about how she spent a bunch of time programming the UPS instead of doing the image recognition stuff the company was ostensibly about, and then the office manager came in and did a "psychological" interview.

This is what the non-whiteboard approach is like (I'm guessing).

sarehu fucked around with this message at 19:52 on Dec 24, 2015

Adbot
ADBOT LOVES YOU

loinburger
Jul 10, 2004
Sweet Sauce Jones
In my most recent job search I interviewed with four companies for remote positions, so most of it was done over the phone / email / google hangout. Two had me write some code offline that they reviewed offline with a thumbs up or thumbs down, the third had me write some code offline and had three developers review it / grill me on it over google hangout, and the fourth had me do a team programming thing with one of their developers over google hangout. All four conducted non-whiteboard technical phone / skype screens of some kind in addition to HR "talk about your most recent job(s)" interviews, usually something along the lines of "say some bullshit about string matching" or "say some bullshit about garbage collection" or whatever.

  • 1
  • 2
  • 3
  • 4
  • 5
  • Post
  • Reply