I think it's just the concern of some teachers working from the buildings and they would want to have that information even if students aren't in them. So we're trying to get that as soon as we can. But, you know, I think that's the productive part of the conversations as Mr. Harrington indicated. Any other questions for our JLMSC reps? No. Okay. Would somebody like to make a motion? Move to adjourn the Amherst Regional School Committee meeting. Step one. Move by Spitzer, seconded by Stanser. I mean, we'll have no discussion and move to a roll call vote. Mr. Demling. No discussion. Right? Isn't that? Yeah, it is. I'm just teasing. Oh, it's only I. Mr. Harrington. Erin, good night. Ms. Kenney. Kenny, aye. Ms. Lord. Lord, aye. Ms. Digger. Digger, aye. Ms. Spitzer. Spitzer, aye. Ms. Stanser. Stanser, aye. Mr. Sullivan. Sullivan, aye. Go Hurricanes. And McDonald, aye. And the motion passes unanimously and we are adjourned.


I'm Godfrey. You can find me on the internet as at Schenken Code. And I work for a consulting agency in Vancouver called Brutals. We basically help people design and build stuff. So if you need help building your next Rails app or JavaScript app, please give us a call. We're a pretty awesome team. And as Luke mentioned, I am from Canada. And I'm a Canadian. From what I hear, we are basically known for free things among the Americans. The Canadian accent, health care, and Texas. I'm so sorry for the title, Wrong Texas. If you want to learn about or practice your Canadian accent, I made a jump for you. Simply jump and start Canada on your computer. And you'll be able to computer like a true Canadian would. So that takes care of the accent. About health care, to be honest, we don't actually talk about that much in Canada. And I really have no idea what health care is all about. So unfortunately, I can't tell you too much about it. But as for Texas, basically everyone hates it. I really do not enjoy doing accounting. And every year, I get really stressed out about it in April. Fortunately for me, I recently bought a Kindle. And I'll source all my bookkeeping to Amazon. So hopefully, things would get better from there. Bookkeeping, Amazon Kindle, bookkeeping, Kindle. OK, I am also a member of the Rails core team. As you learned from Eileen this morning, that means that I get a tweet from the Rails Twitter account. But beyond that, that basically adds zero credibility to what I'm about to tell you. And it's very important for you to remember that for the rest of the talk. What it actually means, though, is being on the Rails core team and means that I get to work alongside some really smart people like DHH, Aaron Patterson, and Eileen. On one hand, that's pretty awesome to be able to learn from these people. But on the other hand, it does make me feel inadequate sometimes. I mean, these are thought leaders and Ruby heroes, right? Like, what am I doing here? So I decided it is time for me to out my game and become a thought leader myself. Fortunately for me, there are a lot of resource out there these days for anyone that's willing to learn. You can probably find this book in your local library. The promise is to transform you from regular dummy to a thought leader. That's a little bit too basic for me, though. And my personal favorite is this other book from a different publisher. Because it's written by some of my favorite thought leaders in the industry. So I ordered a copy of this book on my Kindle. And I was really excited to find out what's in store for me and try it out. This book definitely does not disappoint. I only had time to read the first chapter on my flight here, but I already learned some very valuable lessons that I can apply to my talk today. Here, I learned that one common tactic among thought leaders is to create controversies. For example, David famously pronounced the death of TDD at his Rails confidant last year, which sparked a lot of controversies and made him really famous, even among people that doesn't know what Rails is. So I was really inspired by this, and I decided to make this talk as controversial as possible. And to start, I would like to pronounce death of something. And I would like to announce that thought leadership is now dead. My name is Godfrey, and I'm allowed to think whatever I want. Take that, thought leaders. Seriously, though, all the Rails contributors are really awesome people. And if you're interested in contributing to Rails or just keeping up with the latest changes in Rails in general, I help run this newsletter called This Week in Rails. You can subscribe to it on this website, or you can read it on Rails blog every Friday. You should also come talk to us at the conference. We would love to give you some pointers to help you get started. Anyway, that's enough about Canada and Rails. Let's get to the real talk. All right, let's talk about JavaScript. I know we all love Ruby. That's why we're here. But deep down, we all know it. Unlike JavaScript, Ruby is not web scale. Every once in a while, and you will need to get really close to the metal, and you have no choice but to use JavaScript. Let's talk about what makes JavaScript so fast. That's right. The secret is in the syntax. You see, JavaScript has a very fast syntax. I'll give you an example. JIT hints. Most of the JavaScript run times have a just-in-time compiler to make things really fast. But the JavaScript syntax allows you to drop in some hints for a compiler to make things even faster. For example, let's say you have a triangle. You know the length of side A and B, and you're wondering what this length of side C is. You might remember this from your high school geometry class. You can get the length of the first side by calculating the square root of A squared plus B squared. If that doesn't ring, don't worry about it. The actual purpose of this formula is irrelevant to the example. So let's implement the triangle formula in JavaScript. First, you probably stop by writing a function that computes the square of a number. And from there, you would write another function that actually implement the formula using the square function you implemented. So square root of A squared plus B squared. Pretty straightforward. What you might not know is that you can sprinkle in a few more lines of code, and your code will automatically become faster. Specifically, because JavaScript is a weekly type language, even though this is really obvious to you that the inputs are supposed to be numbers, it is not obvious to the compiler. But don't worry. By adding some unary plus operators here and there, your code will automatically become faster because the compiler now know what you expect from those inputs. And bam, now your code is 5% faster. Not too bad for just a few characters. All right. In case you don't believe me, I made a chart. As you can now clearly see, it is actually much faster. But as with most marketing charts, it did not start from zero. So that seems fine to me personally.  Anyway, as you can see, that's just a quick example. But like I already showed, case y, JavaScript is such a powerful language. So that got me thinking. What if we can combine the JavaScript syntax, which is very fast, with the Ruby virtual machine, which is full of magic. Perhaps maybe we'll just get the best of both worlds, and everything will be awesome. So if you are already sold after this introduction, the code is already published on the internet. You can get it by running German-style JavaScript. If you're impatient, you can just download that now and ignore me for the rest of the talk. But for the rest of you, we'll build this thing together right now. Let's talk about Java for a moment. Let's say, hypothetically, you have a Hello World program written in Java. And it's OK if you don't know Java. This is basically the standard Hello World example copy from the Java website. Now, what do you think would happen if we save this file with a .rb extension and run it with Ruby? Would it just work in print Hello World? Or would it give you a syntax error? Or would it give you a runtime error? Let's fault. Who thinks it's going to be A, some small amount of hints? Who thinks it's going to be B, more hints? And C? OK, a few hints. As it turns out, the correct answer is B. It's a syntax error. But what does that even mean? Well, to understand that, we have to understand how Ruby works. From your perspective, you just write some Ruby code and you throw it at the interpreter and it runs the code for you. But what actually happens on your hood at a very high level is a two-step process. The first step is for the interpreter to try to understand your code at a syntactical level, which we call parsing. And once it understood your code, it can actually evaluate them for you. If at the parsing step, the interpreter thinks that your code is so broken that it doesn't even understand it, they will refuse to continue and throw a syntax error, which is what we got earlier. Obviously, since your code is not even runnable, a syntax error is not something that you can rescue and recover from within the code that cost it. On the other hand, if the interpreter understands the basic meaning and structure of your code, but they found problems with it later on at execution time, it would give you a runtime error. This could be anything from a divide by zero error or no method error. And that's probably something that you're more used to dealing with on a day-to-day basis as a Ruby programmer. Fortunately for us, because our code is now running in the Ruby VM, we can actually anticipate these errors and rescue from them and try to recover from the error states. Enough of our Ruby, let's talk about JavaScript. Hypothetically, let's say you have a hollow out example written in JavaScript. What do you think would happen if you save that as JavaScript.rb and try to run it with Ruby? Would it just work? Would it give you a syntax error? Or would it give you a runtime error? Let's vote. Who thinks it is A? Okay, no one. B? C? Okay, wow, most of you are really smart. The correct answer is C. This is a runtime error. This is a good news because now that we are in the second stage, the Ruby interpreter actually understands how code is syntactic level and so we can possibly recover it from this and try to make it work. To do that, we need to understand how Ruby sees this piece of code. First, it thinks that you're trying to find a local variable or method named console and you're trying to take the result of that variable lookup or method call and call a lock method on it and we know that parentheses are optional in Ruby so we ignore these and finally, we are passing a single argument to the method called lock and in this case, the argument is the string literal hello world. And at the end, we have a semicolon that we know that semicolons are optional in Ruby so we can also ignore it. So looking at the error message again, Ruby is basically complaining that it doesn't know what console refers to. That's easy enough to fix. We can just define a class with an instance method called log and then we can assign an instance of this class to the local variable called console and if we save this, run it again, it would do exactly what we expected and we'll print hello world to the screen and with that, we have successfully executed our first line of JavaScript in the Ruby VM success. If you look at it closely though, there's a problem. We are first of all leaking a top level variable which is not very nice and we're also mixing the Ruby code with the JavaScript code which is like a little bit annoying to read. Ideally, we want to keep all the boilerplate in a file that we require and then maybe keep all the JavaScript code in block for bonus points. In other words, we are trying to write domain-specific language in Ruby. Fortunately, this is a really well-established frontier in the Ruby community. If you remember rake, rspec, or even rouse.rb in your Rails app, these are all examples of Ruby DSLs and the number one weapon for writing Ruby DSLs is using instance exec which lets you take a block and run it in the context of an arbitrary object or in other words, you can change what the self pointer points to when executing the block. This is really handy so we can basically just define a class called contacts.  Because Ruby allows you to omit the self-cured when calling a method on the same object, this essentially allows you to provide arbitrary global methods to the JavaScript block without actually using global methods which is pretty neat, so success. Let's talk about variables. This is how you define a variable in JavaScript. var message equals hello world. What do you think would happen when we try to run this code? Would it just work? Or would it give you a syntax error? Or maybe a no method error or name error? Now before you vote, I would like to point out that no method error and name errors are specific examples of runtime errors and you can basically assume that for the rest of the talk. Like anything that's not a syntax error you can assume that's a runtime error. So who would like to vote for A? No one and any hands for B? Any hands for C? And any hands for D? Okay, the correct answer according to the Ruby interpreter is C, no method error. But if you voted for a name error you're still technically correct because no method error is a class of name error. So just one of them is more specific than the other. But any who, regardless of what the error is it's great news because there's a runtime error and not a syntax error. So that means we can fix this. So to do that let's look at how Ruby looks at a code. Now this doesn't really look like Ruby code to me but how come we're not getting a syntax error? Well, it turns out that if you look at this in the right way this is actually plausible Ruby code. Ruby assume that we're trying to call method called var here which can be make more obvious by inserting those optional parentheses. And let's start from the back. So first we have the optional semicolon and then we have those optional parentheses that we just inserted for clarity and we have a string literal which we then assign to a local variable called message and then we call the method var with whatever happens inside those parentheses. It turns out that variable assignments in Ruby has a value. So the value of an assignment expression in Ruby is basically the value being assigned which is the thing on the right hand side or in this case string literal hello world. So we can basically rewrite this as message equals hello world and then we call var with message. So hopefully that makes more sense now as you can see because Ruby doesn't require any special syntax for declaring a local variable. The first line basically did all we wanted to accomplish. So we don't actually need the var method to do anything. We just need it to not blow up. And if you look at the error message again Ruby is complaining that we have not defined a method called var. So that's pretty easy to fix. We can just define a method called var that does nothing and if we run the code again, it will work and more success. Let's talk about an initialize variables. In JavaScript it is possible to declare a variable without actually initializing it to anything. As you can see that's like var message on the top and you didn't assign it to any value when you declared a variable. What do you think would happen if we run this code? Do you think it would just work? Or do you think we'll get a syntax error this time? Or maybe a no method error or maybe a name error? Who thinks it is A? Okay, we have a few hands. Who thinks it is B? No hands for B. C, okay, we have some hands. And D, okay, we have roughly the same amount of hands for C and D. The correct answer is a name error this time. Why is that? Well unlike JavaScript, Ruby has no variable hoisting. So since we never defined a local variable called message before the first line, Ruby is assuming that we're trying to call a method called message. Which we can make clear by inserting those optional parentheses. We then, yeah, we then like do a second line which is completely irrelevant. And we just basically assign hello to a local variable message. So those are two messages that they refer to different things. The first is a method call and the second is a local variable. And just like before, we are passing the result of message to var, whatever message is. And in this case, we can see all we want to do is to declare a variable called message without assigning it to anything. But Ruby doesn't really require you to do that anyway. And the variable would be created whenever you first assign it. So we don't actually need the first line to do anything. Once again, we just want it to not blow up and let our code run. And if you look at the error message, Ruby is complaining that we did not have a method called message. Of course we can go ahead and define method called message but that would be cheating because we really want this to work with any arbitrarily named variables, right? Fortunately for us, Ruby has a hook for us to handle these cases and that's called method missing. All we need to do here is define a method missing that doesn't do anything. And it will capture all the unhandled method calls and suppress the errors. So with that, our code works again. The first line var message doesn't do anything and then when you run a message equal to all of it, it assigns it and then the first line uses the local variable because it's been created. So success. Let's talk about functions. This is how you define a function in JavaScript. Function, hello, fold by the function body and then when you want to call it, you just do hello, which is pretty similar to Ruby. What do you think would happen if we try to run this code? Would it just work? Would we get a syntax error, no method error, or name error? So who thinks it is A? B? C? D? Okay, of course, this is actually a trick question. The correct answer is nothing happens. As you can see, the code runs fine, there are no errors, but there is no output. Why is that? Well, let's take a look at how Ruby understand this code because this does not look like Ruby to me. Well, again, we will start from the right to the left. Here Ruby thinks that we're calling a method called hello and we're not passing any positional or keyword arguments to the method hello, but we are passing a block argument to the method hello and the curly braces actually has a high precedent, so that binds to hello instead of the other thing that we'll talk about later. So usually you would do end, but then like curly braces does more or less the same thing. So this is actually a block that you're passing to hello. And then finally, we are passing whatever the hello method returns and to this method called function, which we can rewrite for clarity like this, or maybe if we introduce a temporary variable, things will be a little bit more clear. But then there's something pretty strange here. We never defined a method called hello or method called function. So how come this works? Well, it turns out that we're being trolled by our own code. The method missing we defined earlier is silently swallowing all errors. Perhaps that was a bad idea, but it got us pretty far, so we can probably fix this. So here's what I came up with. Let's walk it through. So we know that when we are trying to define a function, we'll pass a block argument. So in a method missing, we can just see that if there's a block, we know that we're defining a function, so we can just define a method on the context class. So yes, like I said before, when we start from the right, when you call hello, it would trigger method missing, and then we'll see that there's a block and then we'll see that there's a block and we'll go ahead and define a function called hello with the block that's being passed to method missing. And then when, okay, then Ruby will call this function called, sorry, this method called function, which doesn't do anything. And finally, when we call hello, Ruby will notice that there's actually a method called hello on the current context. So it would just run that for us. And with that, we have thought, Ruby, how to define and invoke JavaScript functions, success. All right, finally, let's talk about function arguments. Of course, function is not very useful if they cannot pick arguments. So let's do this. This is how you define a function that takes an argument in JavaScript. So function hello, and then you can take a name as an argument and you can use that inside the function. And of course, when you call it, you would pass the argument into the function as you would expect. So what do you think would happen when we try to run this code? Would it just work or would it give you a syntax error? Maybe an argument error this time or perhaps a name error. Or I would even give you the final option, maybe nothing happens again. So let's see some hints. A, okay, no hints, B, C, D and E. Okay, we have a pretty even distribution among C, D and E. Well, well. I'm glad that I got you thinking about these completely useless problems, but I am out of time, so you would have to figure it out on your own. This is, there are actually a lot more cool stuff from the gem I would like to show you, but I can only fit so much into a half an hour talk. If you find this interesting, we should chat like at the hallway track. And like I said, the code is available on the internet on GitHub. You can also find a link to it from the RubyGems page. The version on GitHub actually does a lot more than what I just showed you here, and it is actually surprisingly robust for what it is. I mean, I wouldn't write production code with that, but you can do a fair amount of JavaScript-looking thing in Ruby as it turns out. And we even have tests. And so I heard that if you want to make your encouraged ability to contribute to your open source project, you should write tests and good documentation. So I have both. Hopefully you would contribute to this project now. At this point, you're probably wondering, why clearly this is completely useless? And you're probably right, but well, why not? As programmers, I think we're often too caught up with building something useful, and it is very easy if we get to have fun sometimes. We probably all started doing programming because we had a lot of fun building things on the computer. And I think it's very important for us to not lose that passion over time. So this is basically me coming up with ridiculous ideas on a Saturday and essentially playing a single player mode of code ping pong with the Ruby interpreter. And that actually kept me amused for a really long time. It's almost embarrassing to admit that. As an aside, I actually learned a surprising amount of stuff about Ruby and JavaScript from doing this. For example, did you know how Ruby actually distinguished between the local variable and a method call when you don't use parentheses? Or did you know what happens when you try to have a return statement within a block? Surprisingly, I can actually point you to real places in the Rails code base where these knowledge has helped me to understand the code and fix bugs for better or worse. While these particular piece of knowledge might not be very useful to you, my point is, I didn't really start out with the set goal to learn about these specific things in mind. So it just happened organically along the journey.   If you are into collecting magic cards, maybe you can build a thing that scans your card and like use artificial intelligence to recognize the card for you. Yeah, so hopefully you'll learn something new from doing these kind of exercise, but most importantly, I hope it will help you find a passion you have in programming again. And if nothing else comes out of it, you can at least go to conferences and make people listen to you for half an hour. So that's all I have. And finally, please remember this. If Shen can code, then so can you. Thank you very much.


Oh, hey today, Davidson, reality without reference. When we left it last time was saying that we could maybe accept Wittgenstein's point that use is more basic than knowledge of truth conditions. You can't derive how to use the term from your knowledge of truth conditions, but say that there's still a role for truth conditions in making the use intelligible, that in these cases like tonk or these different kinds of offensive language or even some kinds of benevolent language. There's a sense in which if you don't know what the truth condition is, if you don't know what it takes for this sentence to be literally true, then you really don't understand what it's saying so that you can't just set up any use for a sentence that you like. I hear protest. No. Nonetheless, the idea is that knowing what has to be the case for a sentence to be true, although Wittgenstein's point about not being able to derive use from truth condition is correct, still knowing what has to be so for the sentence to be correct for truth of the sentence to be true is still at the center of your understanding of the sentence because it's what provides you with your knowledge of what you're about in using the words the way you do. It gives you your knowledge of your objective in using the sentence as you do. Knowing what has to be the case for the sentence to be true is what provides you with your knowledge of what you're trying to verify when you have a way of finding that whether the sentence is correct and what you're drawing your conclusions from when you take the implications of a sentence. Okay, that's what I think we left it last time is if that doesn't completely make sense and this is your chance to protest. Okay, okay. So let's look at Davidson and a basic question we haven't really asked so far. What is a theory of meaning? Question made famous by Michael Dummit but here we're gonna look at Davidson's answer. Now, when you talk about theory of meaning, in general, there are two kinds of things you can mean and we haven't really precisely distinguished them, explicitly distinguished them so far in the class. One thing you can mean when you're talking about a theory of meaning is just general refractions and what meaning is something like Fodor's causal asymmetry theory, you could say is a theory of meaning. It's giving some general account of what's going on with truth and reference, how they're connected to the physical world, how truth and reference are connected to the use that we make of language which comes first and so on. And on the other hand, by a theory of meaning, you could mean something much more specific. You could mean a way of stating for each of the terms of some particular language what it means. So in this second way of using theory of meaning, a theory of meaning is always a theory of the meanings of the signs of some particular language. So these are two different ways you can use the notion of theory of meaning. That's okay, that makes perfect, yes. No, I mean, you could cover both for the specific vocabulary of the language, what each term specifically means. But of course, in doing that, you might want to distinguish between general categories of term and say what kinds of meaning each of them has. Is that addressing your question? Whereas the first thing is not really language specific, it would be directed to any languages in general. Well, one of the things that was new about Davidson's approach to language is to say the way you do the theory of meaning in general, the way you do the philosophy of meaning in general is to ask how would you do the specification of the meaning of each term of some particular language? That's to say you address question one by addressing question two. The way to give some discipline to this idea of general reflections about the nature of meaning is to ask, how would you do a theory of the second kind? How would you, in general, give a specification for each of the terms of some particular language of what that term means? And Davidson had a beautifully simple general way of approaching this. Okay, just to frame this, I need a little bit of background vocabulary. So I know that I always feel in this class everything's happening a little bit early in the day. But anyway, bear with me. We need an ocean of the meta language. So suppose we're studying some particular language as it might be English or French, right? So we get English here then. We need a language in which to talk about the language we're studying. So if this is Chinese or Korean or something, then over here we might be using, let us say, just want to take an example, English as our language in which to talk about it. Or if we've got English as our target language, we might still want to use English as a language in which we talk about English. Is that all right? You see what I mean? Okay, so the meta language is the language we use to talk about the language we're studying, the object language. Meta comes from the Greek word, of course, the language you use to talk about the language you're studying. Okay, so consider the word true. Is that a term of the object language or the meta language? It is a term of the meta language because it's a term that you apply to sentences of the object language. It's a term that you use to talk about the sentences of the language you're studying. Truth is a property that some of those sentences have and that some of those sentences don't have. So true is a word of the meta language. Why not both? It could be both. In principle, it could be both, yeah. You could study a language in which true is a word in that language, yeah. So if you say the following sentence is true, then that sentence itself might be true. That's your point. Okay, there are a number of subtle general points here that we gloss over for the moment, right? I'll come back to that next time. In principle, it could be both, yeah. But on the face of it, when you use the word true, you're commenting on the sentences of some other language. Yeah, that's really the only point I want to have, okay. Okay, so the meta language, if you're going to be able to specify the meanings of every sentence in your object language, the meta language had better be very big. If you see what I mean, because it's got to have, for every sentence of the object language, it's got to have a sentence that's rich enough to state the meaning of that sentence of the object language. So in some sense, it's got to be at least as big, and in fact, actually a little bit bigger than the object language. For every sentence in your object language, you need to have at least a translation, or if the meta language is just a bigger version of the object language, a copy of every sentence in the object language. How about that? Does that make sense? And obviously if I started out with, suppose I started out with a sentence just containing a language, just containing half a dozen names and half a dozen predicates, and then I tried in that language to give a theory of meaning for the whole of English. Well, I mean, just kind of obviously wouldn't work. Yeah, it wouldn't be big enough. So the meta language has to be big, yes? Really big. Bigger than your object language, and you will want the word true, you will want a name for every sentence in your object language, and you will want vocabulary that you can use to specify the meaning of every sentence in the object language. And you'll probably want some logical vocabulary, like if and then and so on, because you always want that. Yeah? Yeah, a meta language. Yeah, it will be the meta language that you're using to study some particular language. Yes? In linguistics. What they're doing in linguistics is using some kind of meta language to specify the characteristics of the object language. If it's a meta language that's going to be rich enough to state the meanings of every term in your target language, then it will need to be this big. I mean, if you only had syntactic classifications, but no vocabulary, yeah? That would be a very nice language, but it obviously wouldn't be rich enough to say what every term in the object language meant. It would be enough to give you a grammatical analysis of it, but that's all. But linguistics is actually a logical set of things. And... Yes? There are multiple meta languages. There are multiple meta languages, sure. Because after all, if you think about linguistics as using a meta language to study the language it's talking about, you have linguists in Korea, you have linguists in China, you see what I mean? And they all do linguistics in all these different languages. So you can take any language you like, and in principle, use any other language provided it's rich enough to study it. You see what I mean? Yeah. About the logical vocabulary.  I mean, I may be blinkered by a philosophical training, but I don't see really how you could get by without it.  You know, they don't just say syntactic terms, they say, well, if this, then that, and... You see what I mean? But we'll come on in a second to just the specific bits of logic that I think you need. Yep. Couldn't be at least those ideas that don't know what to write. That's right. I can assume that they're... Yes. The second brand needs to know what to mean for some of the things. Right. Maybe it's just like that, the language just has to be big in that sense that it can describe the other language. That's right. Very good. We wouldn't need to have exactly that device in the language. You could have a language like Cells in which every time you use the same name again, it has to refer to something different, yeah? You could have a language in which that was the rule, but your meta language wouldn't need to have that rule in it. Is that your point? You can still specify what's going on in the object language. I was just trying to... It's just the describing abilities. That's exactly right.  There are a translation, there are a copy of every sentence of the object language. Yeah. A copy is just like the minimal, the limiting case where you're using the cat is on the mat as your sign translating for cat is on the mat. You see what I mean? Yeah. And you're right. You could get that effect without having every device that's in the object language mimicked in the meta language. Do you want to come back about that thing about logic? Because there's something here I'm missing. I will try to say in a second what exactly, what logic seems to be equal out here. But is that... This is just some framing ideas, is it? Okay. So a name for every object language sentence. Let's just pause on that a second. Suppose you've got snow is white as a sentence in your object language, in the language you're studying. You could give that sentence a name, right? Let's give it a name. We can call it max. But obviously, you have lots of sentences in your object language. How many sentences are there in English? 20? Sorry, is that what you said? 30? Any advance? Look, there are obviously infinitely many sentences in English, right? Because there are all these things like my father, the father of my father. The father of my father of my father. The father of my father of my father of my father, right? End of three many devices like that. 3 plus 2, 3 plus 2 plus 3, 3 plus 2 plus 3 plus 4, right? You can generate infinitely many sentences in English. Any question about that? Okay, so if you use this technique of saying max, Fred, Simon, Rumpelstiltsken, as all your names for English sentences, right? You're going to run out of sentences pretty quickly. And it's going to be hard to keep track of which one's which. Yes? So there's a much simpler way of naming sentences which is to use quotation marks. So what sentence does this sign name? It names the sentence, no, it's right, right? The one at the top. So if you use quotation marks, that gives you lots of names of sentences. So in the meta language that you're studying your language in, you got a name for every sentence in your object language, and you got a translation of every sentence in your object language. And if you've got that, then you can name the sentence and then say what it means. Look at that, isn't that great? That's what you need, right? That's just what you need. Okay, I mean, if you think this is a relentless spelling out of the obvious, you're correct, right? But it's worth spelling it out, I promise you. Okay, so in your meta language, you want a name for every sentence in your object language and a translation or a copy of every sentence in your object language. You see that's gonna be what you need, and if you've got that, that you'll be well on your way to being able to specify the meaning of every term in your object language, yeah? Okay, well, suppose that we do this, suppose that S is the name of a sentence in your object language. So usually, a quotational name, right? What replaces S is the name of a sentence in your object language, and what replaces P is the translation or copy that you have of that sentence in the object language. Is that all right so far? Okay, here is a general condition on pairing up of names of your sentences in your object language, and translations of sentences in your object language. When you put the right replacements for S and P, then S is true if and only if P, that will come out correct, okay? That all right? So if you write snow is white, if you put the quotational name snow is white, it's true. If you'd max is true if and only if snow is white, that would be correct. If you had snow is white, it's true if and only if snow is white, that would be correct, yeah? And that will in general be true. Follow me very closely here, is that all right? Okay, Davidson made the following bold proposal. You should give the theory of meaning for a language by giving a truth theory for that language. A truth theory is a set of axioms that generates each individual instance of S is true if and only if P from a finite set of axioms. Write this down, this is very important, it really is. Guys, is that the GSIs, is that important? I mean, I think it is fair to say that this was the dominating idea throughout the 70s if any philosopher wanted to do philosophy of language, you did it by looking at how you would give a truth theory for language and now it is no longer even controversial. That is just how everyone does the theory of meaning. Yeah? Is there a single idea in the whole philosophy of language more important than this? Maybe the causal theory is as important. The real following is maybe as, I don't know, maybe as important. There is nothing that's clearly more important than this idea. Okay, so the general idea is the way to specify the meanings of all the terms of a language is to provide a truth theory for that language. So, let me give an example.  Suppose you have a language with two names and two predicates, right? So you get the names, Rolly, Isaac, Smokes, and Fishes. So if you and I are trapped in a desert island and we wish you have a conversation using this language, you might say, well, Rolly Smokes and I might come back with Isaac Fishes. And you never as a loss say, well, Isaac Smokes and I say, Rolly Fishes. But at that point, we've really run aground, right? There's nowhere else to go. We only have four sentences in the language. So it's quite a simple language, yeah? But could we specify the, so let's just do this as an exercise.  How would you specify the meanings of each of the signs in the language? Well, Davidson's way of doing it is, here's four axioms. The name Rolly refers to, can you guess? Rolly, Isaac refers to Isaac. The term Smokes applies to something if it smokes and the term Fishes applies to something if it fishes. Now so far, this doesn't explicitly tell us anything about what it takes for a sentence involving any of those terms to be true. Okay? We need to join it up somehow. So we join it up by saying, if you got a sentence of the form A is F, then that's true if and only if is F applies to what A refers to. None of this is controversial, yeah? If I'm explaining this correctly, it should still be laboring the obvious, okay? Does that make sense? Okay. Then how does it go for Rolly Smokes? Suppose you want to know about the meaning of the sentence Rolly Smokes. Well, Rolly refers to Rolly, so let's see. The sentence Rolly Smokes is true if and only if Smokes applies to what Rolly refers to. And what Rolly refers to is Rolly. So the sentence Rolly Smokes is true if and only if Smokes applies to what Rolly refers to, which is Rolly. So it's true if and only if Smokes applies to Rolly. But what does it take for Smokes to apply to Rolly? Can you read it off here? Let me spell it out for you. Let me take you through this gently. Rolly has to Smoke, okay? So the sentence Rolly Smokes is true if and only if Rolly Smokes. And if we do, so we derive that from those axioms. And if we do this for Isaac Fishes, Isaac Fishes will come out as true if and only if Isaac Smokes. Fishes, okay. Okay, so we just gave a theory of meaning for a little language. We could also do this for Rolly Smokes, for Rolly Fishes and for Isaac Smokes, but I don't want to go through too much technicality. Okay, so this is about doing this for a very simple language. When I say that people through the 1970s, through the 1980s and so today, a theory of meaning typically takes the form of trying to see how you could do this kind of exercise for ever more complex or subtle stretches of language. This is just a very simple case where it's very obvious how everything's gonna work. There are many cases where it's not at all obvious how you do this kind of exercise. In fact, if you just take a quantifier, it's not obvious how you do this exercise. Yeah, a sentence like someone smokes. Yeah, but that's okay so far. That's what a theory of meaning is. You get a bunch of axioms about references of terms and then you derive from that theorems of the form, S is true if and only if P, yeah. Okay, there's something a little bit confusing about this, which is I'm using English as the meta language, right? Which presupposes that you're ready to understand English. Yeah, if I was using, if I was doing this in French and said, how should I say, I suppose you never heard of Raleigh, right, okay? Suppose it's Pierre Potfoum, is that right? Okay, and you have no idea what this means, right? If I can then get you the conclusion that that's true if and only if Pierre smokes, now you've learned something. You haven't learned anything? That's right, you have no idea what's going on. That's right, but suppose I told you, now here's what it takes for it to be true. Yeah, there are two different things here. If you don't have the concept of smoking or of Raleigh at all, this will not explain to you what it is for someone to be Raleigh or someone to smoke. That's right. So there's something very carefully minimal about this. It's presupposing that you've got the concept of Raleigh and you've got the concept of smoking is just telling you what it is that you know when you understand this sentence. It's telling you the outcome is not giving you a process by which you could come to get the outcome, you could come to achieve that outcome. Yeah, for that you really might need. Oh, well, here's Raleigh, here's some cigarettes. This is what smoking is, I need a demonstration. This is just minimally telling you what the outcome, the desired upshot of that learning process would be is not itself specifying a learning process. There are many questions you might have in mind here. Is that addressing one of them? Yeah, okay. Yeah, good, yeah. So it seems like the idea is to me is true only if you know it. If that's the way it's derived from the true theory, that's right. Yeah, okay. There are lots of further issues here. Everything, I mean, I'm skating over some issues here that I will come back to, but basically what you're saying is correct. Yeah, the spirit of what you're saying is certainly correct. Yeah, okay. Any other questions about that? This should seem like a very simple idea, and I hope it seems reasonable. Oh, it seems reasonable, yeah, yeah. Okay, so the picture is you're gonna have a set of axioms. Here are four axioms from which you derive these S's true, definitely, of P theorems. And for English, for real English, you will have infinitely many theorems, not just four sentences, but infinitely many sentences, and you will have a finite stock of axioms about the references of all your terms because there are only finitely many words in English even though there are infinitely many sentences, yeah? So, is that really okay? I mean, someone once described to me a talk by saying we could all see his point. What his point was, because the talk was perfectly clear, but we couldn't see the point of his point. So, if that's the situation, that's fair enough. The thing is this gives a very simple general framework for doing theory of meaning. So let's look at how that might apply to, how that might bear on physicalism when you're trying to explain what reference is. Suppose you've got a theory of meaning for a language like this. I mean, suppose you are in an axiom for and, yeah? So A and B, what will the axiom for A and B be? It will be A and B is true, even only if A is true and B is true. And then you can break that down and A might be Roddy Smokes and B might be Isaac Fishes, yeah? Once you've got this clause in, how many sentences do you have in the language? Six. Any advance in six? You have infinitely many sentences in the language because look, suppose you and I are in our desert island again, yeah? And you say to me, Rolly Fishes. And I say, well, Isaac Smokes. And you say, well, Rolly Smokes. And I say, well, Rolly Fishes, or whatever it is. And then I can say, well, Rolly Fishes and Isaac Smokes. And you can come back with Rolly Fishes and Isaac Smokes and Rolly Fishes. I didn't say it was clever. I mean, I just said you're something new to say, right? And I can say, well, Rolly Smokes and Rolly Smokes and Rolly Smokes, yeah? So obviously there's no bound to that. So now just by doing that, we have infinitely many sentences in the language. Yeah? So we really can keep our conversation going until one of us decides to end it all. Okay? Okay? So we've got five axioms here and we've got infinitely many sentences in the language. Well, think about how this relates to the causal theory of reference. We've got all the facts about truth and meaning stated for our language, yeah? And it's all been explained in terms of these simple axioms about reference. So now how are we to interpret those axioms about reference themselves? And basically we've got laws here, like physical laws, explaining how from the facts about the references of the terms, we can get facts about the truth conditions of the sentences. So you might compare here. There are these, I mean, it's a while since I did chemistry, but my impression is that when you're combining two elements, two elements in chemistry, like hydrogen and oxygen, say, there are characteristic ratios in which the two elements combine. Yeah? And classically, I think around 1900 or so, all the elements were given valence numbers. So given the valence number of an element, you've got finitely many elements and you can give each of them a valence number and then from the valence numbers of any two elements, you can read off in what ratios they're going to combine. So chemistry back around 1900 could state valence numbers for each element, a valence number for each element and then that would let you predict how any two elements would, what ratios to any elements would combine in. Yes? Is that right? Are there any chemistry majors here? I have a sense, we're not very strong in chemistry majors, but okay, that's how it used to be anyhow, yeah? Okay, so this is like the thing about reference here. You get these facts about reference that you can use to explain how terms combine to yield sentences with particular truth conditions and the facts about the valence of elements which explains how the elements combine to yield compounds and particular ratios of the elements combining. And then you say, well, what is valence anyhow? What is valence, does anybody know what valence is? I'll tell you what I think it is. But the idea was chemistry got reduced to physics by giving a definite of valence in physical terms. So the definition of valence is something like gaps in the outer electron cloud. Is that right? Do you know? Okay, that's, I took high school chemistry too, but. So we may have a battle of the joints here. Right, okay, so there are some, the electron's missing from the outer cloud, something like that. Okay, and in some sense missing, but anyway. Okay, and that's the valence number. So the thing is that that's a physical characteristic of the atoms constituting the element, yeah? And from the general physical laws governing the behavior of atoms, you now have these much more general laws from which you can predict the ratios in which the elements are going to combine, yeah? So by reducing valence to this physical notion of gaps in the outer electron cloud, you reduce the laws of chemistry to laws of physics. You show that chemistry is just a branch of physics, yeah? And it would really have been kind of mysterious if that had turned out not to be possible, if chemistry had turned out to be some domain on its own, quite distinct from physics that couldn't be reduced to physics in this way. Now you're doing very perplexing, yeah? So something like that, I mean, when Rutherford said there is only physics, all the rest is stump collecting. What he meant was once you know all the physical laws, there are these points about the way elements combine, these are the special cases of the general physical laws. So the question is if that's how it goes for chemistry and physics, you've got these facts about the valences of elements, you've got these facts about the ratios in which any pair of elements will combine, and then you reduce these facts about valence to physics, so you reduce the whole subject to physics, then can you do something similar with semantics? You've got these facts about reference that dictate how the words will combine to generate sentences with particular truth conditions. So can we now reduce the talk about reference to some physical talk so that you can see that there are just more general physical laws at work here and what is going on with the combination of terms into sentences is just a special case of the more general physical laws. So you can explain why a sentence is a truth condition it does by looking back at the references of the terms. But then we want to explain how come it has those references, can't we do that in physical terms? So then just as you define valence in terms of gaps in the electron cloud, what you could do in semantics is reduce talk about reference to physical terms and then say what's at work in meaning is just a special case of more general physical laws. It was Hartree Field who suggested this analogy and the idea is that we explain the laws that link truth and reference in terms of much more general laws. Or are we really dealing with a non-physical aspect of reality? Well, Davidson has a quite radical take on this kind of line of questioning. In a way, this is what we were doing when looking at causal theories of reference and so on. But let's look at another analogy, another analogy than the chemical one. Suppose you think of Ptolemaic astronomy as it was seen by medieval thinkers. Ptolemaic astronomy said everything goes in perfect circles. All the heavenly bodies go in perfect circles. And in order to get the appearances to come out right, they had very complex sets of circles simultaneously being described by every heavenly object. And people back in the Middle Ages did not think that those talk about lots of perfect circles in which things were moving. They did not think that that's any dynamical reality. They did not think that that was really talking about the causes of things. They thought, this talk about epicycles gives you a way of predicting the appearances. It's an instrument for predicting the appearances. When Galileo was first had up for saying that the earth moved, it was suggested to him by the church loop, this is not a dynamical reality. This is just a convenient way of predicting what you're going to see when you look at the night sky. And all these different ways of predicting what you'd see when you look at the night sky, they were all pretty good. I mean, they'd been working on this theory of epicycles since the Babylonians that had a long time to get it right. So people knew what you're going to see in the night sky every night. They could predict that. But the question was, was any of this getting at the causes? And the idea was, no, it's just a convenient fiction. It's an instrument for predicting the appearances. So when you're thinking of it like that, then there's no difference between any two convenient fictions. So long as they make the same predictions about what you're going to see in the night sky, that was what Galileo objected to. He said, this is not just another convenient fiction that the Earth is moving. This is the way it really is. So if you thought that the talk about epicycles was really just a convenient fiction, that's all you meant by it, then there'd be no point in going mad about what the physical reality is here. It's just a gadget. It's just a gizmo for predicting what you're going to see. And you could similarly think of reference like that. You could think of the talk about references in the axioms of a theory here, the talk about Raleigh referring to Raleigh or the smokes applying to something just of its smokes. Don't think of these as reflecting some underlying physical reality. Just think of it as a gadget. Just think of it as a kind of abacus for predicting what the truth conditions of sentences will be. It doesn't in any sense explain what the truth conditions of the sentences are. So if you think of it like that, there's no need to give a physicalist account of what reference is. When people talked about valence, they thought they were explaining why the chemicals combine in the ratios they do. So they needed to do this kind of thing. But if you don't think you're explaining why words combine the way they do, then there's no difference between any two convenient fictions about references that make the same predictions about the truth conditions of sentences. If you could get two different ways of saying what the references of all the terms are that gave the same predictions about what the truth conditions of the sentences would be, there would be no real difference between them. And you wouldn't need any account of what references beyond its role in generating statements of truth conditions. So on this kind of picture, even though we'd say that as against Wittgenstein that truth is a central notion in an account of meaning, reference would not be a central account in an ocean of meaning. All that really matters are the truth conditions of sentences. And that is Davidson's picture. The guiding idea here is really a remark of Freggis. Freggis said it's only in the context of a sentence that words have meaning. That's to say, in communication, in actually using language and talking, you can only ever do it by means of a sentence. And sometimes you just use a single word, but when that happens, the single word is always standing in for a particular whole sentence. You've got to use sentences when you talk to people. It's only by using sentences that you can communicate. So any talk about the references of words is just has something to do with what those words are going to do in the context of a whole sentence. Here's Davidson. Words have no function save as they play a role in sentences. Their semantic features are abstracted away from the semantic features of sentences. Now the building block method is the one I've been just describing on analogy with a valence. The building block method says, having explained directly the semantic features of proper names and simple predicates, we could go on to explain the references of complex singular terms and complex predicates and finally truth. So you'd start out by saying, what does it take for a term to have a particular reference? You'd say, well, maybe that's got something to do with a causal chain or a cluster of descriptions you associate with the term. Let's explain the reference of the singular terms in that sense, or you say there's a sense associated with the name. And then you go on to the harder thing, explaining complex singular terms like the father of my father or terms like that, complex predicates and finally truth. And that's what Davidson's calling the building block theory. That's the theory we've worked with right up until, and actually including when we came to Wittgenstein, right, that you explain the meanings of the terms first and then in terms of that, you explain the meanings of the complex terms and the sentences. That's the building block theory. It has often been tried and it is hopeless. We explain macroscopic phenomena by postulating an unobserved fine structure. The phenomena that an account of meaning, that an account of language has to deal with are phenomena at the level of whole sentences. Quick question. I think it's fair to say that Davidson is rejecting that. You don't get an explanation here. The data for a theory are facts like, whatever your sentence was, blue dog cheese or something like that. That doesn't make sense. This is the basic fact. The theory is tested at the macroscopic level. You can give a systematization of the language that will derive meanings for some sentences and not a meaning for that one. That's fine, you can do that. The analogy here is really with an instrumentalist conception of microphysics. Some people think, well, atoms don't exist, electrons don't exist. Talking about atoms and electrons is just a convenient mathematical model for predicting what the results of experiments will be. The hard facts here are facts about the meanings of sentences. We know all there is to know about the concept of reference, when we know how it operates to characterize truth. So when we got the connection between this set of axioms and these theorems, when we know how these axioms generate these theorems, that's all there is to know about what reference is. You don't need some deep physical explanation of it. We don't need the concept of reference and nor do we need reference itself, whatever that may be. Reference drops out. It plays no essential role in explaining the relation between language and reality. And on that, bum shell.