Hello. So I'm going to talk about where I see our replication, the Postgres replication scenario being today and where I think it should go and where we know it's going and just how those play together. So just to understand where that we start from a common point of view is what is actually replication. Replication is moving the content from one system to another in the most generic sense. Having similar data or the same data on several systems and then the interesting part here is what we have right now built in in Postgres is the so-called physical replication and that works on a block level basis pretty much. It works by saying okay we have this data on disk pretty much and then we move that on the other side. That is very good, it's very efficient, has some disadvantages though. So there's a reason why other people build logical replication solutions and those just work on a content level. So if you insert the data there what it creates is usually say okay an insert happened and that is the content and so and I think the other answer here you probably know what Postgres is by now. So Postgres started when it started it didn't have any replication solution built in and then Jan, I don't know if he's in here amongst others created Sloney and that's a logical replication solution. It works by creating triggers so every time you modify a row it creates a trigger, creates a row in another queue table and that queue table then gets read by another database and then the change gets reapplied. That works great well and I think without having Sloney Postgres would not be here where we are today. I think nobody of us would be here because we couldn't afford having a conference in the Soto. So it's also the case that both Sloney and Lindy still allow you to do things that none of the solutions allow you to do. So they are still important. They also show that they have some problems which is why Postgres in version 9.0 added Streaming Replication and I think again in the case if we didn't have Streaming Replication none of us would be here because that was I think one of the linchpin moments of Postgres development and Postgres popularity and Streaming Replication is much much simpler to set up and maintain than Sloney and Lindy still it's also much more efficient but it has much much less flexibility. You can't ever create a temporary table on the standby. You can't ever have different indexes on the standby. None of that is possible ever. You always have to replicate all databases in a cluster so it definitely has some limitations. So what you also got in the last couple of years because I and others worked on it is we have in Postgres the infrastructure to build a better replication solution or a more modern replication solution. What we introduced in 9.4 is logical decoding. What that allows is to get all the changes that happen in a database in a configurable format and do something with that. One of these applications is doing replications or there is feeding it into different systems, doing cache and validation. There's many use cases but that's what we edited. Some other products call that change data capture. So and we also built a lot of other infrastructure. One of them which I think was very important step even if it wasn't actually that complicated is so-called background workers. We now have the ability inside one database to start additional tasks that do something. For example we receive changes by another system. That's why we edited it but there's many other use cases. So why do we think we need anything but what we have today? The trigger-based solutions for which Sloney and Lindista are an example have their fair share of problems. Most importantly they have a very high overhead. Both in run time every time you do an insert it calls a trigger that trigger then insert that row into a queue table and that has a certain CPU overhead. It also prevents some optimizations. For example normally if you insert data with copy it can use bulk modes. All that doesn't work anymore if you ever have triggers. So trigger they have a run time overhead. They also have a space overhead because every insert that goes into the actual table also has to be inserted into the queue table. So it then can be replicated. That means we have a right amplification of about two in many cases even worse. So that has quite the high price. The other problem is that due to issues which about ordering and so on you can never do synchronous replications with the established trigger-based replication solutions because they figure out in which order to replicate data by doing the replication like in bigger blocks than one transaction and that prohibits you from doing synchronous replication on a one transaction basis. It's also the problem that the current solutions can't replicate DDL because there's no way to just get notified about oh the schema is changing. And in my experience that's one of the most frequent issues for systems breaking down because suddenly somebody added a unique key on one side but forgot it on the other side then they fail over suddenly they have data corruption. Stuff like that I've seen that so many times now. They are also in not very easy to administer. And that's one of the bigger problems. I've seen so many down times caused by somebody not actually understanding how slowly Lundista work. It's also very hard to do multi-master because if you insert into one system it will then insert the row into the queue table it will be replicated on the other side and the other side will then again try to insert the row into the queue table and then we'll go back and forth. Then you build loops. There's a way to prevent that by having columns in there that say oh this is a row that I've been replicating but that gets quick, ugly quickly and you suddenly every user sees additional columns so it's not that easy. Another problem is that it's not built in. And I think many customers or many users there say go to the postcode website and say oh I want to do replication and they see the built in physical replication say that's okay I can live with that and then they discover oh they can't do all these nice things.  The other problem with physical replication, the big problem is that you can't ever do selective replication. You can't ever say I only want to replicate my configuration data but all the other data is sharded and I'm only needing it on two systems for availability but everything else please don't replicate everywhere. It's not possible to do that with physical replication. Also you can't ever create a temporary table. You can't have non-replicated tables on stand-byes and that's quite the big problem. So physical replication is great for HA but after that it starts to be less useful. So what we worked on based on these feature that I mentioned earlier, logical decoding, background workers and some smaller ones is that we built the logical replication solutions using those tools. And yesterday we released the version 0.9. Unfortunately we haven't yet managed to send out the release announcement. It's a bit complicated but yeah. So and that works with stock 9.4. You can use this extension and replicate data from one system to another in one direction. That was unidirectional means, UDR, unidirectional replication. So you can replace things like stream replications, lonely, longista with that. And it will have much less overhead. How much less I'll come to in a second. And what it can do is do initialization in parallel already or what I think is already a great feature it can initialize from a physical base backup. You can safely say I'm doing a PG base backup and then catch up all the changes that happen since you made the base backup and not miss a single transaction. And that is very good if you ever want to upgrade from say 9.4 to 9.5 doing it via a logical dump of the database and then catching up all the data since that takes a long, long while because on a large database running PG dump is not exactly fast. So I think initialization of logical replication by a base backup is a very good facility. What we also have is partial replication. You can say I don't want to replicate data that's done to some table to that table because it's the lock table and I only want that locally because it's too high volume. What we don't do unfortunately in 0 of 9 is even if you say I don't replicate changes to those tables it will still initially when you create the clone it will still copy the tables. So we will have to add some more work there to not do that. It's also what it also doesn't handle. You can change which data is replicated but it will not if you say initially I'm not replicating the lock tail but then discover oh logging is really nice and I want to also replicate it because suddenly my lock analysis tool wants to look at it or whatever then we don't have a facility to automatically say reclone all the old data. You can start replicating it but not more and as I said it allows to upgrade relatively seamlessly from one version to another with like a couple like a second or three of downtime where you redirect the rights to the standby and that's I think how we are going to do much more seamless upgrades to new major versions. Obviously that doesn't help you very very much right now because this only works with 9.4 and there's no 9.5 yet so upgrading from 9.4 to anything is not that interesting yet. It's also now fully configurable via SQL and I think that's a big step. We used the first version of both BDR and UDR were configurable via postgresql.conf and it confused very many people it required restarts to reconfigure it and it was obviously not good enough. It was also much simpler but yeah. So how can you configure it now? You need to change a couple of things in postgresql.conf they are pretty much independent of which logical replication solution you use but you have to change those once. Unfortunately those all require a restart but once you've changed those you could have 10 replicas for this database and you need to allow the replica access via in pghba.conf but that's pretty normal because yeah. And after that you only need to create extension BDR and on both nodes and then you say select bdr.bdr.subscribe tell it how is my node called and to which node am I connecting to and that's also important how am I connecting to myself because unfortunately postgres doesn't have the ability to grant connection authorization tokens or something that allows you I'm allowing you to connect to me with my authentication that would be very nice but we don't have it today and that will automatically clone all the data and do that in the background and if you want to do it in the foreground you can say okay I'm waiting till it's done. And you'll notice that it says here BDR and that's because we only wanted to create one extension not one to BDR and UDR but if you say BDR.subscribe it only subscribes changes that will only work in one direction so it will pull all the changes from the other side but it will not push back any other changes. If you want to do it in both directions I'll come to that later. So and why did we actually do this as a very brief introduction so with using hot standby and we can with pgbench on a moderately good EC2 instance we can push 14,000 tps write tps per second. With UDR it's very very very slightly slower but there's barely any difference because the right overhead for pgbench type workloads is minimal there's barely any overhead. With BDR it's pretty much the same I think the difference here is mostly runtime variation. And then we also compared that with londist and you can see the overhead here already is pretty big. If you go to more systems that have more complex writes that write to more tables in one transactions that difference gets even bigger we have had a comparison where there was a factor of three or so difference. Slowny is very slightly slower here but I think that's not really measurable so that's just what you have to pay for using a trigger based replication solution. So what we next did we have a simulation where we didn't just use replication but we also wanted to measure how expensive is it to then pull out these changes and apply them on the other side. It's very nice if you can produce changes as fast as you can but the replication can't catch up. A replica that's three days old isn't very interesting. So what we did we said every time there's a lack of more than two seconds we throttled the workload to see how long can we keep up. And with hot stand by we could in that slightly different workload we had to write a custom tooling because pgbench can't do that. We could do 25 something TPS. With UDR it was slightly less. With BDR slightly more than UDR there's actually a technical reason for that. I'll come to that in a second. And if you do see the really crazy comparisons then with long distance Slowny. The overhead of pulling the data out of the log and then applying them in transforming the format and applying them on the other side is quite tremendous. And that shows here as well. What we measured here is for the pgbench workload how much right ahead log are we producing. So for 10,000 transactions we how much many megabytes of right ahead log are we producing. This is a bit badly labeled.  We should probably label that differently but whatever. So that's about how much right ahead log we are creating. With UDR on the primary we are pretty much the same as hot stand by. There are workloads where UDR will have a noticeably higher overhead than or bigger than hot stand by but pgbench doesn't trigger those. But you notice that the stand by has produces quite a bit more right ahead log. And that's because we have we are missing one feature with it that we are proposing for a postgres 9.5 that allows you to safely say we have replicated up to here and I'm not going to lose any transactions. And that's required because UDR and BDR work on a per transaction basis to support things like synchronous commit as synchronous replication. So you can't batch transactions sanely and that's the overhead of doing that saving the replication progress in a table. So in BDR we don't have that problem because we have the feature there and that's there's somewhat more overhead on the stand by on the other side but it's pretty good if you compare it with the other side.  We also had buccardo here at some point in somewhere here or so. So I think that is evidence why from an efficiency point of view we you we really want something else than trigger based replication solutions and why hot standby is very very and string replication is very good for some cases. They do it in a much more coarse fashion they don't apply individual transactions and if you didn't do it on a particular transaction basis the overhead is obviously lower but then you can do syncrap pretty much fundamentally. So that's the reasoning here. So that's what we can do with 9.5 4. With what we released now you can pull it from git.postgreSQL.org I'll link the later. There's now official release docs we don't rely on the wiki anymore. It uses the postgres documentation format so it will look familiarly old style. Yeah so and but also the announcement for this talk said we were talking about multi master because what we that's what where we how we got started how this helped down this whole path. What we have now is with BDR we have a working asynchronous multi master solution and I'll mention that it's in production today there are still sometimes problems but it generally seems to work reasonably well. It basically uses all the code that is used for UDR that works with 9.4 and then adds additional capabilities because with unidirectional replication obviously that's not multi master so we added to add more feature and one of the features that I think is the most coolest is if you execute on one side ddl it will automatically replicate to the other side. There's some caveats that I will mention in a second but yeah it's we add customers that said please can you somehow magically transport this to 9.4 because we really really want this and I think it's too much work so we said no. What you also did besides just the asynchronous replication and multi master replication is to allow sequences to work across multiple systems because it's there's various ways to assign unique IDs across systems you can use UIDs you can say you can assign every odd values on this system and every even values on this system but it gets relatively hairy and it's not very user friendly so what we added is when you say create sequence you can now say create sequence using bdr and then it uses a voting approach that says this server gets the values from 0 to 1000 this way server gets the values from 1000 to 1 to 2000 and so on and there's some caching to avoid short down times to cause problems and similar things. What you also added is conflict resolution mechanisms because if you do asynchronous multi master across that is you can have conflicts because two systems can do the same change so what we have by default is last update wins but you can add different conflict resolution strategies by saying calling a function set that registers a conflict handler and that conflict handler then gets both sides of that change and can decide what we want what we want to do with that so and why did we actually go to all that trouble this is several person years of work here it's very hard to do geographically distributed setups where without replicating data to the other sides because latencies of 150 or so milliseconds are really really painful to work with it everything calls slows down to a call so and those are becoming more and more common so I think that's the prime reason to do asynchronous multi master because with synchronous multi master you have latency problems without without replication you have also latency problems because you're all every white right has to go to the other side so they're pretty much if you want to have shared state there's relatively little choice to then to go there it's also very useful to scale read mostly applications without saying I'm separating read and write if your application doesn't write that much data and you can somehow ensure that the rights aren't conflicting very often that can give you quite easy scalability boost even if you're not to graphically distribute if you're in the same data center it's also very useful to do very easy failover failure bug I don't know who of you has implemented procedures for failing over of a hot standby node then bring up the old master as a new standby that's not all that simple so it can be very much easier to say I'm just redirecting all the rights to the other side waiting for catch up and then say okay and fall have finished falling over what we also have customers wanting very much is that they want to have some shared state between clusters of but where they like the configuration data has been there the you the authentication in for is there but all the rest of the data is sharded so they want to not have the chat messages or whatever on all nodes but they want to have to know kind of send a message to that user just that user exists they want that information almost and that's in my opinion quite large use case for a wider range of applications so what can these setups look like what you can have is have say a one data center or two data centers in Europe they are fully interconnected between those two and you can say my data is important I want to do synchronous replication between these European data centers they are in the same city just state different data centers to not avoid to avoid losing data I want to have my important transactions to be replicated synchronously but you can't do that across the pond because that's just too slow so you have two another database servers data centers in of America for example and they do the same spiel they replicate synchronously between them and but other to the other side of the pond they do a synchronous replication as you can see here to set up BDR currently you have to every node has to connect with each other and that's because otherwise it's much more complicated if one node goes down you have to reroute traffic around that it's just simply to implement that way there's no fundamental assumption that we are always are only going to do this it's just what we have chosen as the first step so to go back to what was saying about transparency the other application normally you can just say I'm now executing DL I type my create table whatever and it creates the table replicates it to the other side and executes the DL again that works great for create but there's some commands we can't replicate at all because commands like create database alter user or create user and similar in Postgres they're shared between different databases in one cluster and since BDR and generally logical replication usually works on per database level it's unclear what does it mean that in a different database you execute a create user you would have to know that in some other database in that server there's a logical replication configured and you would somehow need to replicate it then so that's why these commands are not replicated there's also some commands that we currently prohibit from actually being executed you will just get an error which is not so nice but yeah better than corrupt data you can't at the moment change the type of columns when you specify using a clause or if you have generally if the alter table requires a table rewrite we don't allow it there's also a good reason why you don't ever want to execute these in your actual application because those will cause a table rewrite and that takes long long time the all the commands that just add a column without any rewrites that those are completely fine or dropping a column that all works just everything that slow is not allowed if you grant and revoke that's actually allowed as long as it's doing it to a local table so you can say grant select on table and that works what you're not allowed to do or what's not replicate is grant connect on database because again global state so when is asynchronous multi master and specifically bdr a good solution if you only have if you have data where for example every user is only allowed from to connect from their home country or is automatically redirected then you can't ever have conflicts and then the it's pretty easy to cope with the possibility that you have data that's not completely in sync the other thing is that you just write your application and you're aware that there can be inconsistencies for a while other workloads where you just can't have conflicts if you have only inserts and you don't have any unique constraints that will fail then it's just very easy to implement this just generally if you're geographically distributed especially over long distances this asynchronous multi master might be a good fit what you when you don't want to use it is if you have something where consistency is really really important it can never ever be violated because you're dealing with whatever medical data for example and you don't want to lose a patient record because there was a conflict and somebody said oh this patient is ill and somebody else otherwise accidentally overwrote that with this patient is actually a healthy please send him home that would not be good so last update wins might not be the best idea for to resolve conflicts by two doctors making through the same patient it's also much harder to validate that all your applications are doing something correct if you have 10 applications written by 10 development teams three of them don't even exist two of them have died since then it's very hard to guarantee that you can actually cope with possibility of conflicts it's also very very important to note that asynchronous multi-master does not guarantee unlimited right scalability to forever you can have some benefits by doing you gain can gain some right scalability but it's usually not super drastic and it very very quickly tapers off so as I said for conflict handling we have the built in last update wins we use the transaction timestamp when it committed as to resolve that by default and you can add newer conflict handlers it's not that interesting I think unless you really started to look into this so it's a bit complicated how all these fit together at the moment we have Postgres and that has built in logical decoding it has built in background workers and in 905 you already added some more features and then on top of that there's the UDR project that's open source you can download it there's Debian packages there's RPM packages for Fedora Red Hat Centos I think and that you builds logical replication but only unidirectional it allows you to upgrade in in the near future to new versions with a very short downtime and it supports 9.4 which is important then on top of that we have a slightly modified version of Postgres and we modified that because we needed the additional capabilities we have a couple features in there where we had to modify things like for example the DDUL replication required us to get the DDUL statement back in some form that we can replicate we have the ability to create these new types of sequences where we can say this sequence is a distributed sequence we have the commit timestamps with which since have been committed to 905 but if you want to use 904 because you don't want the most bleeding edge in production version in production we have that as a modification and then we have this replication origin progress tracking which is why you saw in UDR earlier that it wrote more than the primary then BDR did and using these modifications we have a version of the extension that's the same source code as the UDR that uses these additional capabilities to implement multi master to implement these distributed sequences to implement DDUL replications and I will to emphasize that all of these features with the except this one have been submitted to the PostgreSQL mailing list we've worked on several of them through many iterations trying to make them committable and so it's not like these modifications are something secret we are that we are keeping it's just we're trying to develop all this and it takes a long long time and PostgreSQL takes a long it has a year-long release cycle but if you develop something new it takes a while a year-long release cycle is not very attractive because the feedback you want to get it out to your users you want feedback from users you want to have product tests where you can actually use this in a realistic scenario because then you know you screwed up and what your user interface didn't work out that great for example we had this configuration format where it was in PostgreSQL.conf and that really didn't work out great in the customers who already tried it it was confusing so we had to try something else which we now don't and I think for these iteration for these relatively early development where it's very useful to have something that develops faster than Postgres it's it's very good that Postgres doesn't release every week I think you all would be not very happy about this so there's good reasons for Postgres developing the way it does but it also who has some problems because it takes a long while to get things in yeah that was what I was saying so and these what we what Simon came up with as a phrase we're not forking Postgres with the BDR special sauce but that really really follows Postgres pretty closely we are submitting everything upstream we hope that this difference really really vanishes soon are you alive so down there it's also very important that we are every time Postgres is going to release a point release we are also going to have a point release and we are pretty much merging the changes that are happening upstream pretty frequently so where are we now with regards to core Postgres we have lots of infrastructure we have logical decoding in core we have background workers in core we have now commits timestamps in core we have a relatively except some conflicts here with Robert and Hakey have a relatively sane version of the replication progress patch it even has docs we have sequence AM and Hakey was actually somewhat happy with the last version which is nice we have the ability to develop these event triggers that do give you this sane version of the DDL that you then can replicate and this is not specific to Postgres at all you can also integrate that into other replication solutions you can integrate it into your development workload you can automatically generate the evolve script for whatever database schema tracking you want and for auditing and similar those have all been submitted we hope to get them committed relatively soon the only one we didn't we didn't manage to get very far is the valve based queuing solution that's just because it depends on the replication identifiers so it was there was not that much to do before that was in but but but the big problem is we have don't have a built in logical replication solution it's very hard to sell to people that you have to go to some website you have to install this you have to install a different repository then you have to download it then you have to read different documentation it's very complicated and that if you have already a big Postgres shop you're probably probably willing to do this but if you are new to this and are choosing which database you are going to use it's not going to inspire that very much confidence that you have to go to some random other website and download another project so that's really not enough we need to have something that integrates much much more seamlessly but you might think why on earth did you develop something separately if you want to commit it to Postgres and the reason for that is really that it's very hard to develop stuff in Postgres Postgres has very high quality standards it has a very debate enthusiastic community and let's go that's good most of the time but it makes it very hard to prototype a solution where you know I'm going to make compromise because I can't develop the best solution on earth within a couple months so I think it's very important to allow for some of that stuff to happen outside and you might ask yeah sure you can do it outside you can just work on your patch for three years but a users don't really like not to have this capability they're happier to have something outside of core that works also we actually need to get paid for developing this and our users that pay us for this are not very happy to wait several years or they actually have worked a couple years but even more years it's also very hard to have something that actually is nice if you don't have users testing the development version so where can we where do I think we go for the incorological replication how can we make this happen I think we have to accept that we are not going to integrate BDR as is into Postgres for A there's lots of compromise in there core Postgres might not accept it's also just honking a lot of complexity that you can just absorb immediately so we're going to try to add the unidirectional replication first and but design it in a way that we based on our experience can then extend to multi master and how long that takes we'll see I think it's also important to note that we realize that it won't exactly you look like UDR for UDR we had very different constraints than core Postgres has we couldn't just say oh we want this new statement in Postgres we didn't want we couldn't say we have a new create replica command or create primary server whatever command because we can't we didn't want to modify Postgres so that might be different for the integrated version but I think we can reuse some of the code and very very much some of the experience and some of the infrastructure we built to get there for example the logical decoding API hopefully doesn't need any changes the commit timestamps when won't any any changes the background worker API won't need any changes and so on and while we are working on integrating this we also working on have will continue to provide UDR and BDR because I think Postgres can't really survive we have customers that need it and I think those aren't the only ones so I think that's just saying and we'll try to maintain those but at some point for example we are not going to need UDR anymore so we are going to retire it but we'll still need BDR for a while but at some point I hope we come to the point we say okay now it's so so major the this stuff that is in core Postgres we don't need an external version anymore those features aren't that urgent anymore that you need a pre-cooked version for immediate use but until then we are going to maintain those and we are also going to work on new features in BDR and UDR just to extend Postgres later with them and to get experience with them and also to just make a life for users of Postgres easier and here are the features that we are at the moment thinking about working on or are already working on one of the big ones is I think partial clones that you can clone a database and it will only have the tables that you want the replication the want to replicate changes to we need to make a failover to the other side a bit easier there's quite a bit of manual work involved there most importantly you need to have one manual action afterwards to bring up the sequences to the highest value that's not so nice so I think we need to make that easier probably not too hard the the way you configure replication sets which is our solution to saying only these changes are needed on the other node I think we need some more improvement if you configure if the for example right now if you say I want this node replicates all the changes from the other node and you change that configuration we are going to automatically need to pull down all the missing tables delete all the other tables and also you don't shouldn't need to kill have to kill some node or restart to do that yeah that's actually already there for also what we want to do as soon as possible is to move the ability to DDL replication from BDR into UDR so because there's no nothing multi-master specific about doing DDL replication right now if you want to do DDL it will tell you you can't do that please use use this function and then you have a function that does the DDL and replicates it that or you can say I know what I'm doing let me do this for BDR we want to lift some of these restrictions I was saying earlier that you can change the type of a column if that requires a table to rewrite we want to allow that right now you can't do create table as whatever we want to allow that stuff like that what also we want to do and I think that's I personally find that a pretty cool feature we want to have transactions where you say this is a really really important transactions I can't allow any conflicts here and then we can guarantee by using 2PC internally this transaction is going to be replicated correctly to all nodes and I'm only going to return a successful commit if it actually worked and I think that allows you to design systems where the relatively low amount of actually important rights always succeeds but the rest is fast because obviously using these conflict free transactions will be far from free they will have to contact all the other nodes synchronously so you surely don't want to use that for everything we also want to make distributed sequences a bit easier to use right now you can configure how many of them are pre-allocated and things like that also if you will get an error instead of blocking if there are no new values at the moment available and just some usability enhancements so a rather important question is where can you get this stuff it's on bdrproject.org the docs are under bdrproject.org slash docs and there you can see the different versions and Bux please report them to GitHub but please also try to give a sane report of this we have had screenshots sent to us and yeah you know there's a reason sometimes it's better to develop outside of law if you have questions about it to us there's a list at second quarter to come where it can reach the people that are familiar with bdr but if you have other questions you can just send an email to general and hopefully someone will pick up there and it will be archived and other people can chime in and it'll help other people to see what you're doing and not doing we already had people helping other people so so that's good yeah if you want to help you can read the docs and tell us whether you understand most of us are so neck deep in this that they really don't understand the problem anymore it's obvious using it would be nice too reporting problems and so on it's also another thing is to please help reviewing patches I think we're why are you grinning this is lots and lots of work several people here in the room have helped this and I'm very grateful for that but I think we all need more review and you don't really don't need to be the most biggest Postgres expert to help here every pretty much everyone can start doing review and you learn quite a bit of Postgres and the knowledge you have will help you at some point in your daily operating life it's not something that is only applicable to development the knowledge there helps in all aspects of Postgres it's also quite possible to add features yourself it's Postgres licensed so it's open source we'll try to integrate it if it's good if it's not not yeah so any questions we have on my laptop and my workstation I've tested that's what we have on the website 48 nodes and that that and since then I've tested something with 60 something at that point you started getting into problems because you have a lot of lot of processes running I think I was had to configure my machine because it's like 10,000 processes at that point if you do something with it you won't probably should test that with more machines than just one workstation there's actually an option in the configuration file where it artificially introduce latency we can say br.applyDelay equals whatever I think and then it will just delay committing which is very useful during development I think we tested with a couple seconds there I don't know the exact number yes I have I'm not I think there's a good argument to be made to say we are going to trying to continue using functions I think it would not be with the worst idea I think some other people are not so much on board with that I think we don't definitely not wanting to have it in a BDR schema but yeah on the other hand it's not very it would not be absurd to try to reuse the create server and similar command and then subscribe to server because we have this nice infrastructure for the foreign data wrappers my problem with that is that it gets slightly murkier if you want are doing multi master because you if you have if you want to build the mesh connections then you create servers dynamically on all the other nodes I'm not sure I think there's very different strategies I know that's one of the reasons why it would be a good idea to say we reuse some at least the table I don't know how the table is called right now to have the common knowledge which what is replicated where that might not require using the same syntax to create them because there's no need for that necessarily except especially for the multi master case where it's probably most useful to have be able to query all the other nodes I think there's a lot of discussions we can have I think I want to get these dependent patches in and I think at that point we need to have some long emails yes vigorous discussions vigorous agreements yeah anything else it definitely is possible so the logical decoding in combination with that replication identifier and progress tracking has all the information to make that possible where I'm not really I don't have really many doubts about how to implement the technical part what I find very complicated is about how to figure out how to configure this how to make sure that you don't have nodes that can see any some changes that we'll get is not terrible and that's the part so the user interface of this is what worries me and where I have not yet found something that oh yeah this is obviously right so but it's not that hard from the technical point of view you can basically do it right now if you want by just not using the interface functions and saying I manipulate the internal configuration directly you can build these kind of setups already it's just not something I would suggest doing you'll definitely get to keep the pieces yeah I think we I think it depends on which shared object you talk about actually I think we're not going to want to do stuff like create table states replicating I think that's pretty boring and it doesn't really make sense because it assumes all the systems are the same and I think the biggest problems is probably users from a practical point of view because to create database why would you want to replicate it around databases one thing that is pretty interesting is to replicate alter database set so and so because that is actually something that's pretty clearly what you know understandable what you mean and we could just say we refuse alter database set when BDR is configured for any database but the one you're have configured it from or that would not be the worst rule out there but yeah roles are pretty much harder I've not yet figured out a good way to do that I think the capturing the command is not that hard we just would have a shared queue for those but what if you want to replicate from different systems and merge and then it gets very murky the other opportunity would be to say we introduce database local roles I'm not a big fan of that but yeah but I'm out of time so I won't sell for the problem today


Hey everybody today I've got a full body tennis warm-up for you. It's going to be ideal for getting your body fully prepared for a good workout on the tennis court. I'm going to be covering 15 of my favorite warm-up exercises which will last 20 seconds each but don't worry you don't have to remember any of these and you don't have to worry about the timings because I'm going to be doing them right now and you can follow along with me. You don't need any equipment, all you need is a very small space. It could be done off court while you're waiting for your court booking or it could be done courtside in any small space. If you save the link to this video into your bookmarks to make it easy for you to access the next time you're on the tennis court. So you've got 10 seconds to pop your tennis bag down, find a small space because we're going to get straight into it. Let's go. Stuff. So you're all set to go. I hope you enjoyed that warm-up. If you found this video valuable let me know in the comments below, hit that like button and if you want to see more of this type of video consider subscribing. I look forward to seeing you next time. Take care.


The leading decision on pre-existing contractual obligations owed to a third party is the case of Pao An and Lao Yi Long, or I call it the Food Chip Case, because it involves a corporation by that name. The plaintiff in the Food Chip Case had entered into an agreement with Food Chip Corp for the purchase of shares, so the consideration exchange there was that Food Chip shares would be sold by the corporation to the plaintiff in exchange for the payment of a certain price for the shares and also a promise not to resell those shares or not to resell more than 60% of those shares within within a year. Now another agreement that the plaintiff entered into was an indemnification agreement with the majority shareholders of Food Chip Corp. So this is the agreement that that was called into question as to whether or not it was a valid contract. Under that indemnification agreement, the majority shareholders of the defendants had promised to indemnify for any losses that the plaintiff may suffer. So if the price of those shares had gone down below a certain level, the majority shareholders would have compensated the plaintiff for that loss under that promise. In exchange for that promise, the consideration provided by the plaintiff to the majority shareholders was a promise not to resell more than 60% of the shares within the year. So it was the exact same promise that the plaintiff had made to Food Chip Corp under the other agreement, the agreement for the purchase of the shares. So the issue was now is that promise to not, so not to resell more than 60% within a year made to the majority shareholders is that considered to be valid consideration because it was a preexisting contractual obligation that the plaintiff already had to someone else, which was the corporation. And the court there found that that that promise was valid consideration, that this previous promise is a new benefit for the majority shareholders under the indemnification agreement and therefore it is valid consideration.


United States of America, I christen thee Cooperstown, may God bless this ship and all who sail in her. Christen thee Cooperstown, may God bless this ship and all who sail in her.


In 2022, actor Mark Wahlberg shared that he was moving from California to Nevada with his family in hopes of giving his kids a better life in the income tax-free state. By the end of last year, he had already made two property purchases in Las Vegas, a $15.6 million piece of land spanning 2.5 acres where he wants to build a dream home and a $14.5 million luxury bungalow to live while construction takes place. Considering Mark left LA behind, he also finally sold his custom mega mansion, which spanned over 30,000 square feet of space for a whopping $55 million earlier this year. But it's a big drop from the $87.5 million he was asking for the place at first. That jaw-dropping home in Beverly Park boasts 12 bedrooms and 20 bathrooms, as well as amenities like a home movie theater, a swimming pool with a grotto, and much, much more. Mark Wahlberg shared last year that he was behaving like a handful of other Hollywood dwellers and leaving his long-time home in LA for a fresh start in Las Vegas, even hoping to eventually create Hollywood 2.0 in Sin City. In a previous interview, Wahlberg stated he wanted to give his kids a better life in the income tax-free state of Nevada. After Mark refused a move to Florida where his wife, Rhea, was born and has family, the actor and his family started construction on a new custom home in the exclusive and extremely luxurious resort community, The Summit Club in Las Vegas. While Mark paid $15.6 million for a sprawling 2.5-acre lot on which to build their brand-new family home, they didn't want to wait for that to be constructed, so in the meantime, they also snagged another property. Located in the same exclusive community of The Summit Club in 2022, Mark also bought an already-built bungalow here where it's assumed the Wahlbergs are currently calling home for $14.5 million. This residence spans 7,237 square feet of space with four bedrooms throughout, as well as four full baths and two half baths. According to records, the home is actually two floors, while there is also a garage spanning an additional 1,300 square feet. This style of home in The Summit Club, they offer a very modern vibe and an open-plan layout throughout, also seamlessly merging indoor and outdoor spaces. There are spacious patios, terraces, and pools for the residents to take advantage of. Interiors are contemporary in style, with floor-to-ceiling windows, slate-finished showers, and a neutral color scheme. Mark purchased the home from Discovery Land Company co-developer of The Summit Club, the summerland-planned community that runs along the western edge of the Las Vegas Valley. A lot of other high-profile individuals have decided to call The Summit Club home, including the Las Vegas Raiders owner, Mark Davis, who has a condo there, and Vegas Golden Knight owner, Bill Foley. Even Celine Dion has a property here. A realtor, Alicia Taylor, who spoke to Mark back in 2020 about his desire to find a modern Las Vegas home in a very secure location, spoke about what the actor said he was looking for in his future residence. He said he was looking for something with at least five bedrooms because he had four kids. The wife was trying to go to Florida, where her family lives, and he was trying to convince her to go to Vegas. Well, given The Summit Club's high-tech security that's unlike any other place in Vegas, with its body heat tracking for any intruders on the guard-gated premises, Taylor suggested it to Mark, who had a reported $30 to $35 million budget for constructing a new home. While Taylor had proposed a handful of homes on the 555-acre Summit Club, she also suggested buying a property there to custom-build. Mark was interested in some of the other mega mansions in The Summit Club, including Celine Dion's, but given Wahlberg's last property in LA, this next one will probably be gigantic too. So in the meantime, he and his family can call their 7,000-square-foot-plus-desert home in the community home, while taking advantage of all of The Summit Club's amenities and security. In early 2023, Mark Wahlberg finally sold his epic and massive mansion in Los Angeles for $55 million, which is a huge payday to say the least, but also a huge drop from the $87.5 million the actor was asking for the place last year. Wahlberg was turning heads in real estate news since he put his longtime Beverly Park estate on the market for that sky-high price, but it sat there for sale for quite a long while, as you might expect. The neighborhood the property was located in, Beverly Park, is a much-favored gated community in Los Angeles, chosen by celebrities and big business titans alike, where current residents include everyone from Sofia Vergara to Dental Washington, to Eddie Murphy, Rod Stewart, The Rock, and many more. Mark purchased the colossal estate in 2009 for $8.24 million, and then he and his longtime wife, Rhea Durham, proceeded to have the mansion custom-built to be their perfect family home. It was complete in 2014, designed by famous architect Richard Landry, and it spans a sprawling 30,500 square feet of space inside. Also known as the premier estate, the former Wahlberg family mansion sits on 6.2 acres of land and is packed with every amenity imaginable. At the time, the listing didn't explain the mansion's architectural style, but the palace seems to be influenced by Europe's chateaus, mixed with an over-the-top and lavish Los Angeles vibe. The home is hidden behind massive gates and further protected by a detailed security system, while the property includes the huge main house, separate guesthouse cabana, and a viewing pavilion next to the sports court. Once you're past the formal motor court out front, which wraps around a grand fountain, inside the home, there are 12 bedrooms and 20 bathrooms throughout. The entryway is two levels, with soaring ceilings and a double staircase, while the limestone flooring carries on into the common rooms. There's a formal living room with fireplaces at either side of the room and multiple French doors out to the grounds. The classy, airy color scheme in this room is similar to the formal dining room, where there's an opulent chandelier and another fireplace. The massive kitchen surely had more than enough room for the Wahlberg family, with its two islands, one for meal prep and one with snack bar style seating, as well as a mounted TV to entertain while you cook. There's also a sunny breakfast room and attached to the kitchen, another family room, with yet another cozy fireplace. In total, there are seven fireplaces throughout the mansion, another of which you'll find in the stunning wood-paneled library, which boasts two stories and plenty of built-in bookcases. Once you're upstairs in Mark's former mansion, you'll find the master retreat, which has chocolate-brown hardwood underfoot, a sitting lounge, and a private balcony. When you have this much space in your mansion, of course there are his and hers bath and closets. I have to say I love what was once his wife's master bath, which is decked out in all white and lavender tones with a sparkling chandelier, fireplace, TV, and vanity. And it leads straight into her custom boutique-sized walk-in closet. Honest, I feel that setup would be any girl's dream.  As I mentioned, Mark spent the last handful of years perfecting the home and customizing it further to their liking. This includes amenities like his glass walled home gym, which Wahlberg posted on his detailed fitness routine from several times on social media. And I mean, this setup looks straight out of a five-star resort. Other stunning amenities include a home movie theater with flush seats for over 15 people, a sophisticated wine cellar with tasting room, multiple wet bars, and more. Outside on the grounds, the estate is landscaped with perfect gardens, towering trees, greenery, and rolling lawns surrounding the nearby amenities. And of course, there's a grotto-style pool complete with waterfalls and a spa, while elsewhere there are terraces with features like an outdoor kitchen and fire pit. The property further has a full-size tennis court with viewing pavilion, a guest house, and a skate park. It said Mark's youngest son, Brendan, is an aspiring golfer, and here it was easy for the two of them to shoot some holes together. Considering at this home, they had a five-hole small course constructed on the property, which was complete with rolling hills and sand-trops. After taking a look at Mark Wahlberg's homes, that's gonna bring today's house tour to a close. But before we go, answer this question for me. If you spent years building a custom mega mansion, what features would be must-haves? Let me know in the comments below, and don't forget to like, subscribe, and follow me on Instagram to chat if you want to chat more. I'm Kara the Vampire Slayer, and if you want to check out another tour before you go, stay tuned for this one on Matt Damon. Bye! In these videos, we don't reveal any addresses, and even though I've done a house tour of my own place, please do not show up at any private residences because it's not safe for anyone. In 2022, actor Matt Damon splurged on an $8.5 million mansion set on 13.5 sprawling acres in Bedford, New York, which is perfect for the family considering he and his wife Luciana Baroso share four children. The grounds offer plenty of amenities like an antique barn, stream, pond, and much more. While the stone and clapboard home was built in 2004 and renovated in 2021. A couple of years back, Matt also sold his specific Palisades mansion over in LA for $18 million, which was a unique blend of craftsmen and Southeast Asian design, while he also reportedly owns a luxury Brooklyn townhouse which he bought in 2018 for a record-breaking price. Around mid-2022, Matt Damon snagged a stunning $8.5 million property in the heart of Bedford, New York for he and his family. Matt and his wife Luciana Baroso bought it through an LLC that shares a Santa Monica, California address with Damon and his best bud, Ben Affleck's Pearl Street Film Studio. The mansion boasts a traditional and timeless stone and clapboard colonial style on the exterior as well as 13.5 acres of land surrounding it, where you'll find everything from a spring-fed pond to hiking trails, rope bridges, and much more. The 7190 square foot home features an elegant interior, and while it was constructed in 2004, it was thoroughly renovated in 2021, adding modern upgrades in the process. Inside, you'll see the place was made with only the best craftsmanship and fine attention to detail. The layout offers four beds and 5.5 baths while walking in you're instantly greeted with an open-air front foyer that gives a glimpse of what's to come. Aside from the grand staircase and double-height ceilings here, there's a lobby-like sitting area and, just past that, the formal living room with fireplace and French doors that spill out onto a terrace. In fact, on the main floor, all of the rooms open up to covered stone terraces and have plenty of natural sunlight, including the airy chef's kitchen designed by Christopher Peacock. The custom kitchen centers in on a large island with bar-style seats while there are also stainless steel appliances and the room attaches directly to a casual family room. Nearby spaces include a large dining room with built-in bookshelves, a couple of sunbed rooms, and a cozy study or office room. The family and guest bedrooms are all spacious and most come with an ensuite bath while the master retreat is indulgent and comfortable as they come. This space has its own brand-new spa-like bathroom, a gym, and a coffee bar while the private porch and balcony attached to the master suite overlook the sparkling stream and ponds. Moving outside, the Damon family will have more than enough grounds to explore as, aside from the pond and stream, the property comes with its own network of woodland trails, boardwalks, and even rope bridges. Bonuses include a massive saltwater pool, a greenhouse, an antique barn, a treehouse, and an all-weather tennis courts. Matt also made local headlines here in July 2021 before snagging this property when he endorsed his former college roommate, Carl Pechek, as the Republican candidate for Bedford Town Justice in a video on social media. Despite the A-list endorsement, Pechek lost his Democratic opponent, Jody Kimmel. In 2018, reports claimed that Matt Damon had purchased his other residence in Brooklyn, New York. However, it said he didn't fully move in here until 2020. The purchase of this penthouse broke records in the Brooklyn area, spending $16.7 million on a luxury multi-floor unit at the top of the Standish building. While details and images of Matt's mansion in the sky are scarce, what we do know is that it boasts 6,218 square feet of space on the 11th and 12th floors plus a roof. Included in the newly refurbished and ultra-exclusive apartment building, Matt's home is in New York City's historic Brooklyn Heights neighborhood. In 2020, outlets reported the entire block was shut down for a huge crane and many spotted furniture being lifted up into this penthouse unit. The major hall reportedly included several trees to landscape his terrace, and no doubt this was all for Matt's family home. Well, apparently it took an entire year for the actor to close on the home and when he finally did it, it made for the highest price paid for residential real estate in Brooklyn to date. The renovated former hotel, the Standish which is Matt's current building, was designed by Frank S. Lowe and built in 1903, but back then it served as an apartment hotel. It's one of the tallest buildings in the immediate area, offering residents on the upper levels wide open views across the East River to the Brooklyn Bridge and even the Manhattan skyline. Exterior's both symmetrical brick, terracotta and limestone, and it's a 12-story building offering 31 residences and a handful of amenities. It's also right on the Brooklyn Heights promenade. Acquired by the Jehovah Witnesses in the early 1980s, the Standish was sold in 2007 to a developer who then turned the building into rentals before it was reimagined into a luxury condominium development. The first units came up for sale back in 2016. Residents, Matt Damon included, pay pricey monthly charges to live at the building and interiors offer a redesigned lobby with porcelain and marble finishes that just look fancy. They also get access to all of the upscale amenities at the Standish, which include a 24-hour doorman and concierge services, a full fitness center, a children's playroom and a shared rooftop terrace with panoramic water and city views. Living here, Matt also has some celebrity neighbors too. Star couple Emily Blunt and John Krasinski have a unit at the Standish. At the end of 2021, Matt finally sold his former home, his Pacific Palisades area mansion. Considering he switched his main home to New York, he didn't need his crib on the West Coast any longer, having been trying to offload it since the early months of 2021. In the end, the actor collected $18 million forward in an off-market deal. Meanwhile, he'd originally bought the home with his wife about a decade ago for $15 million. The home Matt lived at with his family for a handful of years, sits in the much coveted Riviera pocket of the Pacific Palisades, located on the seaside in Los Angeles. The estate was zen and modern, made up of a creation of wood, stone and stucco pavilions, blending craftsmen and Southeast Asian design, classic California contemporary. If it sounds unique, that's because it was. Matt's home sat on a corner lot spanning over half an acre, hidden from the street behind trees and gates. And the Hawaiian-looking mansion is tall, as well as massive, offering over 13,500 square feet of space throughout. Not to mention, there are seven beds and 10 baths inside, so plenty of accommodation. Built in 2004, created by KAA Design, Matt's former home incorporated organic materials and only the best craftsmanship throughout. The interior of this massive home is arranged around an atrium with 35-foot-high ceilings topped by a mahogany ceiling. The common and private rooms surround this central atrium and include an impressive combination living dining room with garden views as well as a large stone fireplace. Just a step down from here is the Billiards Lounge with Web Bar and nearby. There's a separate media lounge opening to the outdoors. The kitchen was simply fit for a celeb, decked out in marble and mahogany with white marble countertops and wooden cabinets as well as top-notch appliances. There's further a casual dining space and family room attached, which boasts floor-to-ceiling walls of glass that open to give the space an easy indoor-outdoor flow. The mansion also boasts a full basement level stacked with amenities, as you might expect. These include a children's playroom den, a climate-controlled wine cellar with tasting room, and a full-home gym. Upstairs, on the other hand, contains the luxury master suite which Matt and his wife no doubt enjoyed during their years living here. The primary bedroom includes a private terrace, indulgent massage room, stone-covered and spacious en suite bath, and more. There are also two sprawling walk-in closets, one with a raised mahogany ceiling and the other with a long skylight, both with wall-to-wall carpeting for a cozy feel. The rest of the bedrooms all have en suites and two of the sleeping quarters are specifically said to be for live-in staff. Moving to the grounds of this impressive mega-home, it's about as close to a Hawaiian paradise in LA as you're going to get with its many tropical plants and massive trees creating an oasis. In addition to the entry courtyard with terrace, there's a large lawn with playgrounds for the kids and an open-air pavilion with plenty of space for outdoor dining and entertaining. Next to this breezy pavilion, you'll find the Bali-style swimming pool to round out the stunning backyard. After looking at Matt Damon's multitude of properties, including his newest acquisition in Bedford, New York, where it's assumed he's living, that's going to conclude today's house tour.  Well, let me know in the comments and don't forget to like, subscribe and turn on your notifications.


So we are outside of Representative Jamie Raskin's office. He's a very progressive congressman on everything but Palestine. We know that the congressman just got back from another APEC trip. This is the third time that he has traveled to Israel. Two times with APEC. Since 2017. He's been to Israel three times in less than three years. It's like there are how many countries are there in the world? 192 maybe? Why does he keep going to Israel and why do you go twice with APEC? So we filed a complaint with the office house ethics about the APEC trips to Israel. We think that it's a sham. Because you're not allowed to lobby us and not allowed to organize trips for congresspeople.  The American Israel Education Fund and pretend that it's APEC. It's not. It's not separated from APEC in any way. Along with being housed in the same building. They don't even pay their staff. APEC pays their staff. And it is APEC staff that go on these trips. So sounds a bit fishy to me. It's two thirds of all the foreign trips have been trips to Israel and they're with APEC. And it's a total sham. And these are Disneyland trips. These are trips to see the one side of you of Israel. And to keep justifying spending $8 billion of our tax dollars on this apartheid state. So we know that the congressman is a constitutional lawyer. We would like his help in moving. And he's on the oversight committee. And we would like his help in moving this forward to a real investigation. Because it really is totally a fraud against the taxpayers. That a lobby group would be able to take all of these trips. And somebody like the congressman who I've known for many years before he was even a congressman. And have loved for all of his great work especially around constitutional issues. And I'm glad he's on the oversight committee. I think he should help us. We have kind of a checklist of what it would mean to be to support basic Palestinian rights for somebody who's so aware of this situation and we know that he is. And for somebody who is so close with APEC. And the first most obvious one is adding his name as a co-sponsor on House Resolution 496. It actually doesn't mention the word Israel at any time in the resolution. It just affirms our right to nonviolent boycotts. John Lewis is one of the original co-sponsors of this bill. Because even though he is a great supporter of Israel, he recognizes that boycotts are an essential part of our history. The next one is HR 2407. This is Betty McCollum's bill to end the detention and abuse of Palestinian children. And we know that his constituents have met with him and asked him to add his name to this. And we know that Representative Braskin has spoken out against children being in cages here in the United States. Well, that should apply to all children everywhere across the world. Around 700 Palestinian children every year are arrested and detained by Israel. They are usually beaten. They are almost always blindfolded. Even against the Israeli military's protocols, they are forced to sign confessions in Hebrew when they speak Arabic. They are denied access to an attorney. They are not able to have their parent present. They are arrested as young as the age of 12. Especially, as you said, given how good the congressman is on the border issues, the separation of families, children are children no matter where they are from, and we really think he should be on this bill. HR 2407 calls for reports to be formed to see that none of our $3.8 billion a year goes to the detention of Palestinian children. And if it does, then there needs to be consequences. We also have the fact that he has spoken out against the denial of entry of Ilhan Omar and Rashida Tlaib. He has held one way to oppose, to support them, to say, as even A-PAC has said, Israel should not be denied members of U.S. Congress. It would be to say, I refuse to travel to Israel for a Disneyland one-sided trip forever. But in the meantime, for the immediate until Israel stops this policy. We're very worried about another war, and we've talked to the congressman about this. And we think that A-PAC and Israel, part of their work has been to get the U.S. out of the Iran nuclear deal. And Israel, Netanyahu government has been pushing for the U.S. to actually go in and bomb Iranian nuclear research facilities, because Iran has no nuclear weapons, where Israel has a lot of nuclear weapons. We are both Jewish background, and we know the congressman as well. We feel a special obligation to be good on this issue. And he is a co-sponsor of the bill to stop an unauthorized war in Iran. But we feel he can go further, especially with his contacts in Israel. Right. And if you have all of those contacts in Israel, if you care about the Middle East that much, you have to stop another war in the Middle East. So we think he could be speaking out against the sanctions. That now it's come out that there's stopping cancer patients from getting medicine. People are dying because of these sanctions. The food prices have skyrocketed. 80 million people are suffering because of these very severe economic sanctions. We almost were on our way to another war with the seizing of the boat, the tanker. And it was the U.S. that pushed the U.K. that pushed Gibraltar to seize that boat. The U.S. is still trying to get that boat in international waters, which is an act of piracy. It's also, I would say, an act of war. And so we would like the congressman to speak out against us and say, you know, first of all, the economic sanctions are collective punishment. They are not helping. They should be lifted. And there should definitely not be acts like this that are the kinds of things that lead us into another war. The congressman could support conditioning, military aid. This would relate both to Betty McCollum's legislation and the detention of Palestinian children, as well as the denial of entry for Rashida Tlaib and Ilhan Omar. Senator Bernie Sanders made this exact statement. He said, you know, if a country that receives $3.8 billion a year, if they don't want to let our congresspeople in, maybe they don't want to get that money anymore either. And Alexandria Ocasio-Cortez has spoken out in support of conditioning, military aid. CNN analyst and author Peter Bynart has spoken extensively about this at this point. It's nothing new. This was done under Reagan. It was done under Carter. It was done many, many times before. And why aren't we doing it again? Why are we giving this blank check? And let's be real. This blank check was increased under the Obama administration, so we can't blame this on Trump. I myself would be happy to reach out to Peter and see if he would have a conversation with the congressman. And as I'm sure many others would do as well, to talk to him about what this would look like and why it is so important, why it's important for Jews. He said, we democracies have to stick together, meaning the U.S. and Israel. I don't think Israel is democracy. There are around 5 million people that live under Israeli rule, that are controlled entirely. Their entire lives are controlled by Israel. I'm referring to Gaza and the West Bank, who have no right to vote. Sound like a democracy to you? No. East Jerusalem, which was annexed by Israel. They built their separation wall to bring in East Jerusalem. And the people that live there, were they given citizenship? No. Now they can vote in municipal elections, but will they vote next month for Knesset? No. Sound like a democracy to you? No. What about if there are two different citizens who commit the same crime? Well, if they're Palestinian versus Israeli, if they're Israeli Jews, or if they're Palestinians in the West Bank, they are subject to two entirely different legal systems. Israelis, Jews who live in Jewish only, sounds like apartheid to me, settlements in the occupied West Bank are subject to Israeli civilian law, just like we would be. If I get arrested, I go to civilian court. Probably a pretty good system for them? Yeah, pretty decent, pretty similar to the U.S. In fact, the protections for children are quite similar. You have to have a lawyer present. You can't interrogate a child without their parent. Anybody arrested under Israeli civilian laws to go promptly before a judge. Now to Palestinians in the West Bank, when they get arrested by Israel, because there's no sovereignty, do they go to civilian court? They go to military court. These are civilians, including children, who go to military court. In fact, Israel is the only country in the world that has a juvenile military court system. Military law has such things as military order 101, which says protest is illegal, peaceful protest is illegal. Military law 101 specifically says that 10 or more Palestinians, it's illegal for them to gather for the purpose of discussing politics. Just discussing politics. Peaceful protest is of course included within it. It's also illegal to hold a Palestinian flag in the demonstration. Sound like democracy to you? No, not at all. Sounds to me like apartheid. Two sets of laws for two groups of people. Now Congressman Raskin, because he went with J Street, we can assume that he has been to the West Bank City of Hebron because they take the Congress members there. Hebron literally has separate walkways where as you approach them, they ask you your faith.   Now I have personally experienced this. I have personally walked with Palestinian friends and been sent to one side and had my Palestinian friends sent to the other. And asked if we could have this not happen, if we could walk next to each other. And we didn't even bother asking if the Palestinian could walk on the Jewish side because that's a given. But I was not even allowed to walk with my friends. I walked with a fence between us down the road. I kid you not. Separate but equal. Separate but unequal, because in fact the Palestinian side is not maintained. It's broken pavement. And there are in that neighborhood, because it's a Palestinian neighborhood right by the Ibrani Mosque, that neighborhood has a number of people who are disabled, who live there, who live in wheelchairs. And they have to be carried over the broken pavement to use their walkway. Is an exception made for them to be on the smooth pavement? Absolutely not. There's also a gate to enter there that has a bar that you have to step over. So the wheelchair has to be lifted up and over. And what about roads? All throughout the West Bank we have Jewish-only roads. Beautiful, well-maintained roads. Making it very, very quick, you can travel rapidly from Tel Aviv to your settlement. In fact, sometimes you don't even know you're in the settlement. You just keep driving on the road and getting, and you end up in the settlement. Now did you know that if you're taking the bus from, say, Tel Aviv, it is less expensive to go to a settlement all the way in the West Bank than it is to go to a town right nearby inside of Israel because it's subsidized. And I have Israeli friends that sometimes, young college student age, that sometimes if you take the bus through the settlement to go all the way back in, it takes much longer to save the money. And that's because Israel subsidizes the settlements, including the public transportation system, to them. Now down below that often, you have poorly-maintained roads for the Palestinians. Israel is not a democracy. And we would encourage the congressman to stop speaking in those terms because that gives the whole, sort of sets the whole vision of how to deal with Israel. If you're dealing with it thinking that it's democracy, then you might say, well, they're in a tough neighborhood. They need the $3.8 billion. If you look at Israel for what it's really like, you say we need to stop giving them military, our tax dollars to keep up this militarized apartheid system.


Welcome to this screencast one to two, which we're going to discuss direct proofs of conditional statements using no show tables. This is part one of two examples that we're going to see here. No show tables are described in the Sunstream textbook. So if you haven't read those examples in that text, please go ahead and do so first. So the problem we're going to be working with in this screencast is the conjecture that says if n is odd, which implies that n is an integer, then n cubed is also odd. So what we're going to hide in this video is why we would care or even believe that this conjecture is true. But let's just try to prove it. If you do some instances and practice with this conjecture, play with it, you'll see that it looks to be true, but we need proof. So first of all, we have to understand what the word odd means because being able to move forward in a proof presupposes we know what the terms mean. So looking up the definition of the word odd in our textbook that we've developed, it says that an integer is said to be odd if there exists another integer k such that n equals 2k plus 1. For example, 7 is odd because I can find another integer, namely the integer 3, such that 7 is equal to 2 times 3 plus 1. So we're clear on the terms. We know what it means to cube something. So now we're going to go and set up a no show table and attempt to prove this conditional statement. So here's our blank no show table for this proof. Again, we're proving a conditional statement that if n is odd, then n cubed is odd. In a conditional statement, there's a hypothesis and a conclusion. Okay, so the hypothesis here is that n is odd. The conclusion is that n cubed is odd. And so, remember conditional statements are always true, except for one situation that could happen. That's when the hypothesis is true and the conclusion is false. So our goal in a direct proof is to rule that possibility out that if you assume that the hypothesis is true, then the conclusion must follow. The conclusion is never false. It always happens. So the first step in this proof, and we're going to label that p, which is our usual label for the hypothesis, is to assume the hypothesis. So if I assume the hypothesis, what I know is that n is odd. Okay. And why is that? Because that's the hypothesis. Assuming the hypothesis is always the first step in a direct proof of a conditional statement. The next thing we're going to do in the no show table is kind of jump to the end and think, okay, where do I want to end up? Having assumed that the hypothesis is true, what do I want to end? Well, I want to end, of course, in the conclusion. And that would be to say that n cubed is odd. This is sort of a happy state that's off somewhere in the future. And so I don't really know what the reason is for this yet. I would like for this to finally be true, but I don't know why yet. So there's no reason for this yet. Although the reason we're using the no show table is because a mathematical proof that's well constructed, every statement that you make, every claim that you make is backed up by some legit mathematical reason, okay? And a no show table forces us to be explicit about what that reason is. And so that's why it's a good sort of scaffolding to get started. Okay, so it's the stuff in the middle, the steps in the middle that are mysterious to us. So let's work on this. So we could either do one or two things. I could start with what I know and kind of move forward, or I could start with and back up a step. I think we're going to start here and go forward a step, which would mean, let's go, let's call this line P1. And maybe we could say, alright, we know that n is odd. What does that mean? Well, what it means is if you look up the definition of odd, is that n is equal to 2k plus 1 for some integer k. I'm going to abbreviate a lot here. Okay, so n means integer. So n is equal to 2k plus 1. Now what allows me to say that? That's the definition of odd. Okay, so you see, I've made a claim that there does exist a k such that n is 2k plus 1. What gives me the right to say that? That's just the definition of the term that I'm using. So unless you have some composing definition, then you have to accept line P1. Okay, so now what? Well, let's see what we're trying to do here. I eventually want to say something about n cubed. What seems like a logical thing to do next is I've got something that expresses n. Why don't I think about cubing that? Okay, so n cubed would be 2k plus 1, the quantity cubed. Alright, the reason that you should accept line P2 is because that's just algebra or arithmetic, really. It's just cubing both sides of an equation. Okay, so so far, all the claims that I've made in this proof at the front end of it are legit and you have to believe them in different definitions or you're just crazy. Alright, now what? Well, why don't we do what comes natural? Let's expand that right side out and see what we got. So n cubed is, using some algebra, that's going to give us 8k cubed plus 12k squared plus 6k plus 1. Okay, and that's of course just by algebra, just expanding that cube out. Okay, so I think we can buy that. But now what? Where do we go from here? Well, it's kind of hard to say, so let's try not, let's don't even try to. And let's go down here to the end. Okay, so I want to prove that n cubed is odd. I want all this stuff to eventually land me at knowing that n cubed is odd. But what does that mean? So let's rephrase the thing we're trying to prove. Okay, so n cubed being odd would mean that n cubed is equal to 2 times another integer plus 1. That's what odd means. Now I don't want to use k for the name of my integer because that's already taken. So k is kind of off limits here. So let's just choose another letter of the alphabet. Let's call it l. So 2l plus 1 for some integer l. Okay, that's what I really want to prove. I want to prove that n cubed is odd, sure, because that's what the problem says. But what that means is I need to show that n cubed is equal to 2 times a whole number plus 1. Okay, and we don't know why that's going to be true yet either. So we have some more work to do still. So let's look up at where we are. Well, you know, I have n cubed, of course I could copy that down here, is equal to a bunch of stuff plus 1. So I wonder if I could take the stuff that is out here that I'm underlining in the wavy line and write it as 2l. Well, it does appear that I can. There's a common factor of 2 on all those things. So n cubed, if I just factor out the 2 would give me 4k cubed plus 6k squared plus 3k. And that's all plus 1. And that's from Algebra 2. I'll just be a little more descriptive and say it's because I'm factoring. Okay, so now look at what I have. I have n cubed equal to 2 times something plus 1. That sounds good, but remember, it can't just be 2 times anything. It has to be 2 times an integer. Okay, so I need to make one more step here and explain why I believe that this quantity right there is an integer.  An integer. Now why is that the case? It's going to be because of the closure properties of the integers that you learned from your reading. Closure properties, we know that the integers are closed under addition and multiplication, which means that if you take two integers and add them, you get another integer, you take two integers and multiply them, you get another integer. And that's really all we're doing here. We're starting with an integer. That's why that term is important. And what am I doing to it?  So this is going to be an integer as well. Okay, so I'm going to jump right to here, in fact, and say that n cubed is 2l plus 1 for some integer l. Why? Because I can go over here and now set that l equal to 4k cubed plus 6k squared plus 3k. That's an integer because of line p5. And now I have n cubed equals 2 times an integer plus 1. And by definition that's the final reason, final nail in the coffin here. That proves that n cubed is odd. So if you read this from top to bottom, you get a complete flow of an argument. But notice you don't construct it top to bottom. You construct it nonlinearly by bouncing around, either pushing forward from what you know or rephrasing what you want to prove and trying to get them to connect up in the middle. In the next video, we're going to look at another example of a direct proof of a conditional statement also using a no-show table. And there are many, many more to come throughout the course. So thanks for watching.