Bestand wählen

The Arcane Art of Error Handling

Zitierlink des Filmsegments
Embed Code

Automatisierte Medienanalyse

Erkannte Entitäten
the end here and it or high everyone thanks for sticking around this later I'm not sure if you're actually thinking around see me or if that's because this is the room where the serving the happy hour after my talk hopefully see me so thank you I'm my name is Brad your money I work it broke or a we make it tougher for the construction industry i it's a huge suite of tools Brokaw is um a giant little so many tools and so many features that I'll think 1 person knows at all it's 1 of the oldest largest most mature Rails apps on earth it's I I think is about 2 million lines of code and it has I think you know 90 or 100 people working on it every single day we deploy a 4 or 5 times a day and and we get a lot of errors and that is not a because not careful or anything just because we release a lot really really advanced business tools and were constantly shocked at the where customers you then they use and all sorts of really interesting creative ways that we can often predict so we often find ourselves so surprised by some exceptions a part of our lives and stuff when customers these things around expecting them to do we have to react to have to react very quickly because we love our customers and our goal is to make our customers happy but quite frankly they pay a lot of money for the software so they expect us to like be there right there on the phone answering a simple questions and we are are and and so a lot of the content of the spot came out of us some techniques that I learned in that our team has learned over the years in order to make it is more useful in order create a architectures that make it easier to all that trouble shoot potential problems and I just dislike allows little easier I really like the subjects but kind we like it really excited about error handling you know maybe it's because when I go to sleep at nite at least I know something goes wrong at least will it will be of the troubleshooting easily in figure out kind of what happened by the way like on so this is rails scarf right everyone can makes a presentations can funny before means in their in their talk and they're very good at like picking out means like the technical content comes naturally to to me but not like finding of the humor in putting out the Whitechapel as and I put somebody like means in here and then it in my comes to come out so I put all at the end so stick around the end and this is the a random selection of completely irrelevant means I don't like I said I actually the couple in and I hope the timing and he went on let's see this talk it starts off as come about fundamentals of starts up with some basic some real simple things obligates advanced pretty quickly so if you're here for some more advanced architectures that stick around but because their answer other so a little more caution like
before I dive into this is that we start talking about what you can do with errors exceptions and then explain the difference in the 2nd it's really easy overdo it on the show you a lot of kind of like tools the things that you had your application that quite frankly add complexity all but you want to make sure that that is necessary complexity that you're not doing this for no reason if you doing vanilla rail like NEC lot of credit don't go using the thing I'm showing you here this is uh these architectures that are best done sort of reactively when you discover gaps in your knowledge of year airports are coming through when you don't have the context that you need on to go on add them after that becomes a problem right this is a good thing to do reactive architecture is inevitably seen from junior engineers senior engineers will acquire that this new power from the stuff bread taught me in they don't create something really elaborate that's not necessary right so don't overdo it and by the way
of this most is techniques applied any language that supports exceptions on fact like the best literature on this if you a silly deeper discussed from the job world a really originates all the way back in the C + + days on and so
users like a simple just to get started on without raise 0 no and this is how we raise an error in Ruby on we can just pass a string right so that is the same as this running time yeah . new right runtime on is is a class just like any errors are adjusted class in Ruby of so those are equivalent really in which you have 3 sin taxes so all these 3 into do exactly the same thing and then a new because neurons Ruston when also anyway I'm in errors in Ruby are a hierarchy right you can see that at the top of the hierarchy we have an exception right so exception is the root class then everything below a kind of extends exception including what you see the standard error standard error the classroom also going to be dealing with the day so I mention exception versus there's the difference is that there is a subclass of exception also support a
more visually inclined among you write this is a hierarchy this is a tree so and ask spoiler were going to be creating our own tree whatever we create our own tree or exception hierarchy a little bit later on but you can imagine like this right standard extends exception and a lot of those like classes you know all those other there's the in the framework like 0 division and they extend standard error OK so will we rescue we can rescue just like this and that is actually equivalent to art rescuing standard error now we said standard error is a subclass of exception right that will not rescue for instance if you just raise exception that would not rescue would only rescue standard error and subclasses of standard error also just like recap right when you raise you raise runtime error right when you rescue the default level standard error since runtime error extends standard error just using rescue will quick will catch runtime error and anything that extends into those classes of but it never do this notice I've rescued exception which is the real case right which is the root of the topic hierarchy because you rescue all kinds of crazy things like systems that care which is what happens when you get a stack overflow if you really wanna see what happens when you program runs out of memory and you continue executing right that's what happens with no memory error signal exception oscillatory press Ctrl-C that's with gets razor prevent you from actually quitting a program and script there actually could start as a syntax in your programs don't rescue exception because includes all of those were a standard error does not you can make our own right like a really serious alike out of natural there that would be terrible right just by extending standard error bucket and this bond worth mentioning like inside the framework on assigned although popular gems using at rails itself most of them have their own sort of exception hierarchy so this is what the exception hierarchy their hierarchy from Active Record looks like OK so let's talk about real so this is 1 place like I had a mean and that had good mean right so yeah check this
out I didn't use the term life the 2 lectures me by the way if any of you are thinking of having children don't do it because you have to watch this insufferable cartoon called Thomas the Tank Engine which will drive you bonkers right but if you do have to make sure they watch it because it's about the strains on the island of sort on cooperate I to god is the perfect parable for like a good functioning dev team but if you want child-abuse offer developer Thomas the Tank Engine will like to sum all the proper principles of cooperation working together so the video
so some anyway when there's like a typical RISC controller this is just like straight from the scaffold right no surprises here I would call user that say which triggers the validations on well this ever so yeah turns out can write some very very unexpected things like what if you just can't claim to connect your database right this assigns some completely predictable air but it can happen even though . save doesn't have the bank that will layers right is the possible so if you really wanna rescue anything you might be tempted to do something like this where you start tho a rescue the bottom on the this is an example of like not good error handling and I'm going to get into it some honest slowly explain like as a go on collide with the problems of this are on but you might be tempted to do inference is like 1 if there is like something in your state process there for a new user that does occasionally air like what if like in after save callback your contacting a third-party service in the occasionally that's a 3rd party services and available and you can always recover from it you might be tempted to do this but this is lacking a lot ways in a minute why OK so rule number 1 here then is um don't rescue just because you can in some cases right what I'm showing here is level showing is what happens in the where and when and why you might rescuers when it's good but the 1st row here is that sometimes you don't wanna do that all also so just remember that in the latter cases it totally unexpected comes up with the best answers just let them come up and so their page right that generic 500 air page so
when we talk about this right we have to like focus on who you are and where audiences and really have 3 audiences right we got users and we want to sort of direct and indirect we will show proper error message is redirect the right pages of possible we got developers and computers right so
on on the users like I said right that messages we have to worry about we have control flow whether they get redirected the right pages for developers we want to develop a facing descriptive error messages so we can figure out what's going on additional metadata which is often a given to right we will make sure that those are reported to our error logging system we will make sure that they're show up in the log so that we can troubleshoot them computers right those are like you can see the could be consumers of our API in which case you when there's the properly return the correct status codes for Marie API as a set dresser people can program against API eyes or in the case of your program on initial class hierarchies from version control flow so we have a
few goals here right I just like I mentioned user-facing error messages on them and then a bomb we want to control status codes error messages can add contextual data and I will talk a little bit about notifications high you can make sure that I'm using that e-mails and SMS messages and slack billiard team proper ways given given the proper on these relations of logging and we'll talk about like how the chains and a of Austria sound so the but use our method again right and I said that this has problems was 1 of them already right so we can only see 1 of them which is that 1 of our audiences developers as developers we rely on tools they're reporting tools and logs and you'll notice that this is not the end up in any logs so if I do this images rescue it I never know what happened this gets swallowed as we say right because there's never any Annan's evidence that occurs so here's another rule
do not swallow areas ever write never make sure that if something bad happens that there is always a trace of it somewhere your system I don't think this like snake was like a scary enough so
like although the really scary snake right to run and do not swallow areas and honestly just like the labor the point the
scariest like a snake alright do not swell there's not sure there's no doubt
1 of them anyway but I
under-reporting right so 1 of things 1 is awesome rituals we have is reporting and all these wonderful
solutions these days of these third-party systems and the old is before these like we use that to build the stuff ourselves and was always awful now you can just by 1 of these there's a 3rd parties are services that you can integrate into a program right there are some that you really really wonderful things and I'm it so you have to take advantage of these are a little bit more than you might already be doing
so it is like an example of of of like an airport this is bugs like these bugs nagging it's been a good reliable for the like it on the Rashid paying you to this stuff but that's the story on so this is like an example of an aim of an error message it comes up with something goes wrong and you can see that they got this great graphs and charts and wonderful tools but they
have also like a really alumni my search of features and filtering features and things like that
come out of the box there really configurable they know where they are and staging the development production and then behave differently was the news drop the jamming you gem biologist just kind works and you don't have to do much conveyed and like that for your honey prodded something like that is usually a really nice free tier to take advantage From the couple power features that I think most people don't realize is their people don't utilize quite enough that can really fine to usage of these products are in ways that you might not be aware of severity level and custom metadata initially well so back to this again right now we know that this is not going to our error reporting solution up but there are some cases this may not be 1 but there are some cases we want to rescue an air but still get it into our reporting system right so well I recommend 1st is you start with a class specifically for that so whenever I saw like a new project right well the 1st thing they do is create sort of like a utility classes just has a class mythical handle bomb and into just the start officers gonna look like this I was just going after that jam for whatever you're for a solution is a cause that jam we build on this work and put more in here in a bit of which is to start right all we're doing is using it to notify our reporting solutions guy we will prove that a little bit less like a little bit further as I said most of these systems reports encounter like severity level so that an optional argument here pass severity OK the last 1 is a particular right it's on user create some other users might be predictable like like an example like a several third-party services that we know that's gonna happen occasionally is so it's kind of a Airbus slightly predictable 1 we mean I will be bothered every time it happens so the default severity levels air we can turn it down a notch warn was nice is that in those a reporting systems right they have all kinds of configurable filters of money on my gum what shows up in your e-mail right so we have like SMS slack alerts that you can generally filter them out by severity level so already using this tool you know in a more powerful way that gives us a little more control we pass that down to the genome and all you gently did users may vary but almost all and support something like this from the other thing is never sort analog right sometimes depend on log files so those to get in there and got the logs on to really try to see what happens we wanna make sure that that ends in that we end up with a a lot to do so we had to this class just some logging in and you can get a lot more sophisticated with that you can you know based on severity levels other things channel 2 different logs and there's no end to what you can do Boris started bills are a powerful framework here now I've got an area handling analogs so that's nice OK now added something else here but only people work on a big book of department with more than 1 team were squad right we have I think 20 like I said like 80 developers and guess what not all layers are all relevant all developers when we pull up our your about morning is a nice way to filter on these so I've added something else you notice I've edited metadata property unanswered tool onboarding well this is another really convenient filtering options something that I can use to tailor alerts to tailor e-mails and various other things and makes working on a team a lot more powerful on and metadata is like an arbitrary property it's it's a free-for-all perhaps we can pass in where everyone but blue that almost all air recording told him less right it will actually show
up in Europe on some of the crazy like about that you can actually use the metadata like add new tabs to the Porter kinds of things but check the box for years because you can probably do this and it's probably searchable filterable and reuse can be used to tailor ads and things like that so there is a very powerful feature for you right
so what of we accomplished already ranking textual data and we've given its flexibility notifications just with a few lines of code in so getting a little more
advanced here right and I mentioned we 1 of build our own hierarchies but you don't wanna do this for no reason at all but there's some cases where creating customer classes and things like that make your mechanical architectural out more
powerful the most common case not the only case the most common case this comes useful so you have applications with very deep call stacks so like in this example like imaginative fictional most online shoe store all you might have like them you know if you're doing and we see this is not this is like the controller calls model and that's it you don't need this but in more advanced flows of like a lot of business logic and progress certainly has a lot of business logic on you might have a scanner scenario where you like that approaches class which like you know cause a few methods of call the method with which reaches out to an item classes reaches out to a warehouse class and I got all the way down at the bottom there you've got this like check available so this is a shoe store checking to see if like the shoes in inventory and there's a lot that could go wrong there way deep in the call stack away far away from the controller from so it's possible that someone checks out was my shoe and she does not exist so we know way down the bottom a call stack that we need to display an error message now we tell the user what's going on but the problem is linear so its way up in the controller is where we have control over that we can actually affect changes so the use of a message right now
I what's nice about this is like a the it's either a ability the feature or something the detriment of is that all those layers in middle don't need to know about that air sums invested some say that's bad right that's receptions allow you do is allow you to raise an away at the bottom of the call stack ignored in the middle and catch all the way to the top of other languages don't work like that
France's go takes it to the extreme that it does not support exceptions every function that might have a possible error and it returns to values resulted in and then there's like a conditional and you would have to pass errors like all the way up the call stack which is a lot of extra boilerplate right but also a lot less magic on sources to trade off a marketer saying 1 is better than the other the good thing about errors convenience unless boilerplate the bad thing about them is that sometimes they come out of nowhere we're not expecting I you know that it takes
a different slightly different take on this where they encourage this sort of pattern matching tape which is similar to the goal approach in which you have to pass the air all of the call stack was got this nice you know pattern matching and syntax that makes it a lot more but will work with so weirdly it also supports exceptions I'm only they can make up their minds about what's better I would be surprised to scene taken up honestly but Ruby we have exceptions regardless we think about them we have them so what we can do is
raise here and rescue weapon controller
OK so far this sort of creating a hierarchy in Example 1 might look like this you can see that I've started with largest a generic store error right I've got a purchase error which is anything related to the checkout process of my shopping cart on and that's an inventory years inadequate inventory or like and out of season I just made that up but others in my example air hot air hockey you can see that also extending purchase here without a coupon here that might include that might also have subclasses for instance coupon expired or invalid coupon right OK so
here's a controller like for a purchase over time this the control of when the user clicks like purchase shoes right on we create this area in the class like I said but we changed the 0 we change the severity level down to warn why is that well actually some of these are like kind of expected we would expect sometimes someone enter an invalid coupon we would expect sometimes somewhat to try to buy something is out of stock ideally they might they would probably know that a stock before they could purchase maybe there's a race condition maybe to customers checked that at the same time right and 1 that the shoe in 1 we came just a little too late so these are sort of unlikely but these are unlikely errors but unlikely things happen we know that right now I want you also say something else right which is CP that user message but notice that I'm not using is user message and that message but this is a little and took I learned over the years a little bit of wisdom which is don't use aired out message for users user-facing errors on is a lot more convenient to have the really not the same thing right error messages or for developers those are those computer language things for us software engineers whereas the messages force the face users are completely different story using user messages that a message in the something and women myself which I will show you a 2nd but now I got a lot of flexibility in this controller because none of them tobacco muscle because here we cut purchase there and if you remember purchase errors only at the
2nd level of the hierarchy that includes inventory here's a coupon errors but that might not be enough control for you because of what he wanted you to different things depending on what kind of areas
it's an inventory in my where redirect back to the shopping cart path if it's a coupon if you want a redirect to a coupon code page so now I've changed 1 rescuing and rescuing a subclass of purchasing in this case inventory a coupon air and now I can take different actions you can already see that the air hierarchy I created is giving us more power to control flow and slightly different things depending on what kind of error occurred like I said user message right don't use you there that message from the
fact that it might even be a security alert you could potentially contain information about the internals of your program a few expose use about mass are exception message right the standards message is unlikely but if possible it's better to have that this is totally separate thing OK is another like slightly different example also over a hierarchy of rolling a lot of our own like on the authentication notification but authorization really on features and things like that of to allow provisions certain pages we might have to create a hierarchy for that this is a little different in that could occur on any page where that those purchases are only and check right this can occur on any page so it can do here in this case is up at the top of the controller we can rescue from store unauthorized error which is up near the middle of the hierarchy and in this way we can capture is the had no matter what controller action thereon in fact we might even take this out of this controller and move it all the way up to the application control also applies to all pages so now we have the power to not only control per action basis but what the result is when something unexpected occur as we can now apply this the application wide you notice with the status on authorize roster changing HTTP status code on when this occurs that's osserva API responses right I talked about having 1 of the audiences we have is not only us this developers and users but also computers were not affecting the status code till the end it's worth saying that the framework that does this quite a bit right on the other side of the framework is is quite a bit Active Record for instance are automatically chooses status good for you so if you like financial that's not there right because they're not billion answers in the world unfortunately but they will automatically
change the status code for you to a 404 and i if you knew like cheese is
familiar with the next user's level is only 100 it record invalid of which gives us a for 22 so the famous doing this worth is doing the same thing the framework is doing which is using OERs to control HTTP status code responses and if you're doing if you're doing energies on API that creates is nice but it does for you which is pretty slick are more if you want something different you have the ability to control this now OK and you find
things like this is just go from rack for instance where you can see that our Ruby on Rails or a Arak and this automatically matching up classes the status of OK so I'd much of this hierarchy this is back to a producer 1 I'm a show you what this class action look like on the show you of Donald on the left side there air purchaser inventory air and inadequate inventory here what implementation of these might look like so
use use the top of the hierarchy right of the generic story where you can see that passing a message I had that generic metadata Haskell metadata and civil call severity way and then we've seen this before have only these are the same parameters I passed in the custom and the class I made only now and passing them in in this construct your arguments to the air détente also well-ordering here actually is now we have the ability to not only add these things at the point where I rescue the air but also where I raise them also remember I said use use user message as per a 4 hour customer-facing errors not only have I invite you know put that into effect also got the ability to internationalize it right for a non-English speaking people some writing at new abilities here and then see how that had a axis at the top with metadata and severity believe in not whatever Error reporting solution using at least most of them just the fact that I have those are the axis is up there will automatically add to my error reports no coding required it's usually built into the genomes of these things are the solutions are probably using is the automatic ability to just have that just work so that's really cool here's the next 1
in the hierarchy purchase there there's no coordinates is basically an abstract class right is just inheriting but that doesn't mean it's not useful we sort example me rescuing this in my controller of because I want a cheap purchase order Purchase errors are different from other types of random who knows where there's and then that had a subclass which was inventory error which is also completely empty this is also useful even those completely empty because remember I had have an example where I rescued inventory air separately from coupon error due to different things so this because the class is nothing but extend my purchase air the news not useful at in the very useful and they never actually stand this class in user by itself and there's been abstract class but still very handy tool so here is that the bottom
tree inadequate inventory Air Act passed in some actual useful data here things i want my report product name requested quantity and available quantity and add them to that metadata hatch so now it's going on that we show them my airport which is cool because when this happens I'm I wonder what's going on like it should be possible for someone to order something that's not in inventory right usually they should be warned before they check out but in certain cases race conditions among them it might happen and I kind of wanna know what's going on because I'm I can support call about it and this will help me now that this is in the airport and already use message for a better more descriptive message welcome the so back to a
controller here I'm I'm catching purchaser and resting purchase air and displays a message and but OK
so what went on your own remember don't worry raise added some metadata had product name had requested quantity realize that that's all the way down at the bottom of the stack I did that with constructor arguments of my error user ID actually on a date but user ID or whatever else I want I can pass up at the top in my ear Himmler so I've created an architecture now with the error handler class and the customary to add additional metadata additional things i want whether it's at the site of the rays or at the site of the rescue what from the from the middle right maybe there's a coupon code being applied in there somewhere in the middle of the stack in my business logic I can
basically rescue and we raise eventually this the presumably about an add metadata fields of any class right I can always we raise if I wanna add additional context on the way out so why rescue raised to add metadata of worth pointing out there something else going on here right in addition like in this purchase process I may be removing ions military applying a coupon clearing the cotton processing payments of all those involved database inserts all of them can fail when if I get through the 1st 3 in that process payment it fails I got new inserted rows in my database right they're not valid where 0 roll back right I realize that there's a affecting this by having a there's bubble out from the base class I have to do anything special except use a transaction that I'm also getting a role that behavior based on my airflow but there are other times Y I showed you raising right arresting controller so there's some places we will raise an error but then also continue the program execution word like something unexpected happened but we can recover and so the user pages normal you have get shipping price I can call from UPS guess what the UPS API goes down I historically commas it happens to do it was still a take the user's money and purchase the transactions and in the shoes of UPS is down yes right so returning 699 gers blanket charging 699 for no reason that is the real number so this is the case that is size of 7 bucks for shipping delays I want I want that order you know I mean so here's a good case where you want where as rescue and you might continue we have that special hand the class it because we also want to know it happened so when we you know it's orders like 50 pounds issues like a hundred dollars that were charging them 7 dollars for shipping won't know what went on so we want that in a always so we've got that perform in the class to give that to us OK so we have raisin forget right we got the best behaviors razor forget which are unknown system connectivity errors or raise rescue controller that we do that so we can change of status code customize error software pet messages which and the show you are and sometimes you raise rescuing continue which is anything is a problem not enough to stop us from continuing was my shipping price example the 3 color distinct ways the sword handle these things let them fly just show the 500 page recover so something nice for continuous if nothing wrong that wrapping
errors I always forget mucus year that
all wrapping arrogated because like it would be an error to wrap a cat in wrapping paper highlight reels come a cat means
cool and so I hope so here's our call stack again on the check available that the bonds is that a single resolve imagine instead of doing like were growing our own database this had a third-party API beautiful oral micro-services are made of a third-party service right things to be a little different because we might
have something like this were raising REST Client to make an API request to something else well that is from a generous a genome would get when I get back in and his request timeout but we could just let that would file at the top of the current request primary controller when we sure what to do with their our short Durkheim came from we don't have a lot of data to go with it right and we might not be able to direct the user where they should be going so well in rescue that 1 and raise our own inventory unknown error rate OK if we
rescued out right Ruby by default has this great property called the that cause without is doing anything because in that case will be the original exception the rest client request cannot exception it does that automatically the really runtime gives you that automatically and most of
the 0 40 solutions also will show that so we got a call stack on top which is the cost of a 1 exception and that has caused by and there's the inner exception and we have to call stacks for each error and is reported solutions are show so now we can really check things down so that's really useful in most you don't really have to do anything to get back to work OK so why wrap exceptions adding metadata on we might choose to catch 1 error raise others so that in the case of if this is an API for instance we can change the HTTP status code by using logical controllers we get better control flow here is a real world example
of the case were doing something like this like using some pretty advanced air logic so this is a consensus from Brokaw This is a construction budget this is like what the world's most complicated web page and it but the 3rd click you make on this page so this cascade of business logic you know they calls 100 methods from 100 if in classes it's really really complex to calculate some of budget see there over on the left the to ones but is in between 1 there's a gray button just in order to no affect but is enabled whether it's porringer with the first one the query the joins across 6 tables then based on the results in a third-party API service which faces an integration partner if the result back from that and then decide whether the but should be or degree this is a real world example I guess what we're not doing all that the controller it's 25 levels deep down the call stack and like way libraries and guess what third-party service that can go down campaign right so well in this case is we do how I showed you which is capture the rest area right rabbit on our own air which is like third-party service unavailable air then we have special logic way up controllers in the application controller in fact so that affects every page so that instead of just showing a blanket 500 blow up we can get some assuming nice this is like a
soft error page right we're actually gives people like a little knowledge on where to go a link so they can check the settings you know what I mean so this is a good real example of why you use customer hierarchies in the call stacks a little
exercise of things that I didn't have time to uh to Adams you like a little teaser for this
stuff but some people like to add a custom like a like a unique identifier at the Rays site so if you have like a randomly generated string of some kind of identifier that allows like easy searching through logs you know but you could like correlates certain areas with pages in your documentation or maybe you could get a unique identifier and have some kind of mapping file that maps a unique ID to an error your documentation so you could provide someone in automatic way links to pages that help them figure out what went on the I'm and we've
accomplished quite a bit here have a we or go over we did we've changed the user-facing message we have complete control over what we say to the users in a way that's internationalized and totally configurable on we better programmer facing messages by raising our own hierarchies of by by creating a hierarchy by creating our own air classes we make our lives more intelligible to us so we can actually comb through their more quickly figure out of this is actually a real problem that we need to address something we can safely ignore we changing the HTTP status code for our computer consumers of the CPIs right the need to act on on proper status code you have full ability to control those I'm without a contextual metadata which is everything related to what was going on when there was raised you now have the bility both of the cyber we raise the air through passing things perception and the forward rescue it through a customer and the class to add anything we want to that a report because we've added severity levels in various metadata we can filter rounding not completely configurable notifications so that we can make sure that the right team gets the right message you think I up to build other cell that you get that with these solutions we got in the laws we have full control over the logging and we have this control flow is gaze control flow abilities were we can either I continue execution we can decide whether will fail at the page blow up or we can show some kind like soft messages more appropriate message to get to the users you might wonder if you get really like
complex Jerry like some kind a diagram like this because it gets complicated and hard to keep track of this is a fictional a fictional 1 but if you really get into this if you need it right I'm going to reiterate my original warning which was don't do this stuff if you don't need it is only a really complicated big apps that this stuff becomes important in that you need we while a diagram like this just to show just to keep track of it all because it's hard to keep track of sometimes a few further below
further reading other some great posts online I'd like to hear about treat these slides and we can read more about this stuff and learn a little bit more about some of the capabilities of these tools and I can build the stuff yourself and read your idea love Twitter can add a file file you back of the collective you on maintained on if you're in a mass lounges like as new head cool decentralized funded table social network I feel free to connect with me and that's all like I said I work in Santa Barbara at pro-poor we make construction software we have 1 like the cooler sources teams of all time I love my job and were hiring like crazy growing like crazy and I'd like to talk to you this is the
view from the offices tropical paradise it's sunny all the time it's gorgeous come with us by the end of our so check
on my coworker Derek is giving a talk tomorrow about about how we built out a really complex and really powerful API structure on Mr. catch that 1 and the use means like
a horribly relevant right all this appears in the sunglasses nanoaggregates
all alone prosper erodes public right this is kind the rest in political be careful with some of the
source of this and then something rails that should earn as the train and on its
catalytic he's got plastic a when the man and I think that's all I've got really analysis ruse so that I wouldn't have time for questions so pitch thank you bye marketing questions after where the her
hat prefer binds
Gewichtete Summe
Schreiben <Datenverarbeitung>
Ungerichteter Graph
Service provider
Skript <Programm>
Gleitendes Mittel
Analytische Fortsetzung
Quantisierung <Physik>
Ordnung <Mathematik>
Computerunterstützte Übersetzung
Lesen <Datenverarbeitung>
Tabelle <Informatik>
Mathematische Logik
Demoszene <Programmierung>
Weg <Topologie>
Reelle Zahl
Endogene Variable
Binder <Informatik>
EINKAUF <Programm>
Wort <Informatik>
Prozess <Physik>
Inferenz <Künstliche Intelligenz>
Computerunterstütztes Verfahren
Komplex <Algebra>
Wurzel <Mathematik>
Lineares Funktional
Physikalischer Effekt
Konfiguration <Informatik>
Arithmetisches Mittel
Hierarchische Struktur
Projektive Ebene
Extreme programming
Software Engineering
Web Site
Hierarchische Struktur
Zellularer Automat
Kontextbezogenes System
Physikalisches System
Speicher <Informatik>
Bildgebendes Verfahren
Leistung <Physik>
Einfach zusammenhängender Raum
Fundamentalsatz der Algebra
Physikalisches System
Gesetz <Physik>
Deskriptive Statistik
Trennschärfe <Statistik>
Metropolitan area network
Suite <Programmpaket>
App <Programm>
Kategorie <Mathematik>
Güte der Anpassung
Kontextbezogenes System
PASS <Programm>
Dienst <Informatik>
Rechter Winkel
Grundsätze ordnungsmäßiger Datenverarbeitung
Klasse <Mathematik>
Arithmetische Folge
Inhalt <Mathematik>
Elektronische Publikation
Eigentliche Abbildung
Konfiguration <Informatik>
Formale Sprache
Snake <Bildverarbeitung>
Kartesische Koordinaten
Arbeit <Physik>
Prozess <Informatik>
Figurierte Zahl
Konstruktor <Informatik>
Filter <Stochastik>
Billard <Mathematik>
Verkettung <Informatik>
Twitter <Softwareplattform>
EINKAUF <Programm>
Keller <Informatik>
Kombinatorische Gruppentheorie
Framework <Informatik>
Zusammenhängender Graph
Automatische Differentiation
Keller <Informatik>
Endogene Variable
Mapping <Computergraphik>


Formale Metadaten

Titel The Arcane Art of Error Handling
Serientitel RailsConf 2017
Teil 12
Anzahl der Teile 86
Autor Urani, Brad
Lizenz CC-Namensnennung - Weitergabe unter gleichen Bedingungen 3.0 Unported:
Sie dürfen das Werk bzw. den Inhalt zu jedem legalen und nicht-kommerziellen Zweck nutzen, verändern und in unveränderter oder veränderter Form vervielfältigen, verbreiten und öffentlich zugänglich machen, sofern Sie den Namen des Autors/Rechteinhabers in der von ihm festgelegten Weise nennen und das Werk bzw. diesen Inhalt auch in veränderter Form nur unter den Bedingungen dieser Lizenz weitergeben.
DOI 10.5446/31289
Herausgeber Confreaks, LLC
Erscheinungsjahr 2017
Sprache Englisch

Inhaltliche Metadaten

Fachgebiet Informatik
Abstract With complexity comes errors, and unexpected errors lead to unexpected unhappiness. Join us and learn how to add contextual data to errors, design error hierarchies, take charge of control flow, create re-usable error handlers, and integrate with error reporting solutions. We'll talk about recoverable versus irrecoverable errors and discuss how and how not to use exceptions. From internationalization to background jobs, we'll cover the gamut. Regardless of your Rail proficiency, you'll learn why expecting the unexpected makes for happier developers, happier businesses and happier users.

Ähnliche Filme