Hi guys, welcome back to my channel. This is the only quiet room in my house. So Yeah, we're filming in my parents bathroom. Valerie studies right next to my room and her voice carries So I can't do it in my room. Sherry is kind of in the dining room slash kitchen and Obviously I can't be talking because she's on the phone. So this is what we're working with. This is week 13 of my journey So hopefully you guys are sticking in there with me. If you guys are doing the challenge I love seeing your comments and everything. So anyway, like normal. Let's just get on to what I did during the week So on Saturday the 11th, I did the 30-minute workout the arms workout and the waist and booty This is the first day. I actually used the Thera bands not there are bands They're like resistance bands and I did in fact purchase Chloe Ting's workout bands There was only a few left. She said she actually messaged me. That's another reason why I love her She responds to my messages. This is super random, but I wanted to know what Guys that's freaky, okay mini side story time I messaged her wanting to know a song that she used in a video and she actually like responded and looked up the song For me and it was just so nice of her. So that's random But whatever anyway, so if you guys messaged her have like any questions. I'm sure she will answer She was really nice like that and then on Sunday the 12th I did nothing because it was Easter.  I did the 25 minute full-body summer shred I also wanted to add that I did the 11 ab workout and the arm workout with mother I don't know why I missed this. I think I was just getting so involved in what the video was Trying to show you guys what this summer shred was So the video actually if you guys didn't know I have a whole playlist of Chloe Ting's workouts I'll link it down below.  It's more challenging than the 30 minute full-body workout. So this workout right here I always do and it's really hard, but I swear that 25 minute one So hard. Oh my gosh She gives low impact versions of the exercises But I like to try to do like the harder version obviously. Oh, man Let me tell you Tuesday. I don't work out. So no footage there Wednesday the 15th I did the 15 minute workout and the love handle workout So we gotta work on this back fat It's almost gone like it's getting a lot smaller but I did the love handle workout and then Thursday I don't work out and Then we were here today Friday the 17th today. I did the 30 minute workout the arms workout and the 11 abs I love the 11 abs. I feel like I see results right after I do that workout. It's amazing But today I will tell you I was not motivated at all to get off my butt and do some exercises Anyway, moving on to the updates don't have a lot of updates today But we have the workout bands that I kind of touched on previously. I got the workout bands so cool There's three levels of resistance. So obviously I'm on the easiest Resistance because I've never actually worked out with them I will do a full-on review and like I said she messaged me and she said If there was any quality issues that she would take care of it because in the past they've had some which was really nice of her It was just really weird working out with resistance bands, but honestly, I see the benefit of them I love how I say I don't like working out with Equipment, but yet I just bought some resistance bands, but they were Chloe Danes and you know, I'm a fan So, you know, I want to touch on I had some fast food today Oh my gosh, I was out because I had to go to the pharmacy.  I had to have my chicken biscuit Okay. Okay. I'm truly a good person, but that's one thing I go against my parents in Life. All right. So then I wanted to touch on my lower ab area It's a little bit stubborn like it's been a little stubborn a little little bloated last night I don't know what it is, but that's what it looks like when it's relaxed Obviously, I show you guys my pictures when I'm flexing or at least like tightening so it's not like weird So I try to keep it consistent. Yeah, that's what my little baby little barrel looks like I also wanted to add that my stretch marks are going away in here Are a few photos to show you guys. Okay, I'm moving on to the photos So this is one of my favorite parts on the left is last week and on the right is this week And then here is the side version of that So on the left is Alex last week and on the right is Alex now And then here is pre-workout Alex photos So on the left is pre-workout Alex and on the right is now and then here's the side version of that So I know this video wasn't very long But I still wanted to give you guys an update because I just like making these videos I like documenting my journey and it keeps me really accountable and Honestly, I want to show you guys that like I'm a real person like I eat fast food and stuff And I'm still trying to work out anyway If you guys are inspired to start this workout leave a comment down below and DM me on Instagram I love seeing and hearing from you guys give this video a thumbs up Don't forget to subscribe and I'll see you guys in my next video. Bye


First session and basically you can like ask any question to any of us and get to answer it. Hopefully I don't know. We usually just like give microphone to you. Yeah. Yeah. So first we just do a quick introduction so everyone just says who he is and what he's working on in Blender. So you know who is sitting there and then you can ask us all the questions. So I guess we just start you with the light and we miss Campbell also and probably more people just report 10 bugs and he's going to come right away for that. My name is Dalai Dalai Flinto. I'm a developer. I do a lot of because a lot of things I do. I tend to use the bunny medium to fish eye things related. I mean working on on stereo move field cycles baking and related things like that. My name is Martin. I work on Windows platform support. It's more out of nobody. Well Sergey does most of the work actually but and some cycle stuff now and then. That's it. I'm Jonathan Williamson. I'm not doing a whole lot of development but mostly doing UI coordination with Pablo and a couple other people just to work on the UI project. Okay. Welcome. I'm Yerun Bakker from AdMind mostly Blender 8 blend file format and the compositor. Hello I'm Sergey. That's enough. Hi I'm Thomas. I started with 2.5 UI and mostly cycles these days. So I'm the other Sergey and I do you know I do some rigid body stuff and smaller features and bug fixes but not much other than that. Who am I? I'm Guy and I've been working on Blender code for about three years now and I'm employed by the Blender institutes about a year now and I'm mostly working on game day features and mesh tools mostly. Campbell Barton or Ideasman 42 and do Python API mesh tools bug fixing maintenance blah blah. So I'm the other Thomas Thomas back and doing the Blender developer sneak peeks. I'm doing bug fixing and the wireframe modifier Leslie. I'm Antoni Vierketeigis. I'm doing mostly painting tools, sculpting and recently the viewport project and the widget project and as well as some sequence code. I stand up. My name is Julian Eiser aka Severin and I'm doing mainly user interface development and stuff like that. Yeah, my name is Andrea and I've been developing for quite some time but with little less time in the last year so I think I have five or six commits in the last year but yeah I've been doing a little bit bug fixing and working in the user interface file browser area. I am Ines Almeida and Nick is Brita. I am a recent developer from this year and I work mostly on the game engine. I'm Nick and also mainly I haven't done much last year but recently more on the Composter and a bit on Blender 101. I'm Lucas Turner. Yeah and test test yeah I've been working on nodes and particles in Blender and recently on hair simulation. I'm working for the Gooseberry project and for NATO. Yeah the sheep NATO as it's called. And he loves particles. That's it. Okay so this is the developer team. Only a little part of it. Next year we do the opposite and we do a Blender user ask me anything and then the developers can sit here and then the users can be on that side of the room. So what do you guys want to know from the users? Is there anything you want to know? No. Is there a week that goes by where Blender doesn't crash or do something weird for any users? Who use Blender full-time or fairly often? Whoa. Whoa. Whoa. A stable version for a whole week. Now who's there frequently or sometimes reporting in the bug tracker? That's not really enough man. You need everybody to report in the trackers right? There's not enough bugs right? So anything else you guys want to know from the users or should we swap? Yeah you want to know. I didn't want to know. Is Isaac really here by any chance? Is Aak really? Yeah. Just because you sent an email to the list saying that you wanted to get him involved and no one know about you. No one, he didn't reach out to anyone. So I hope you can still have some time before the conference to check out the other developments and all that. Okay so who had the first question for a developer or for all the developers? Pat? I have a question for you. How is the viewport project coming along and the whole depth of fuel thing? So right now I'm working on the compositing part still and I have to take care of a little bit of passing data and blurring the color buffers around and basically once I'm through with this with this which should be not far away about one or two days far away I wish it have something working so yeah. Are you working with creation at the moment? Not really this is independent of the work Jason is doing and yeah we basically have to merge his brands sometime in the one or two next releases we're still reviewing some parts of the code thinking about if some parts can be done better or avoid some code duplication maybe and stuff like that. What do you think is possible for 273 the next two days? Some people have requested maybe that we have the effects like screen space ambideclusion maybe they of course depth of field if it's possible. Some people have requested about free style edges maybe it may be easy to add I have to look into it. The cavity shaders? Cavity shadings yeah we can use that I guess. Come on the modelers are dying for it right? Yeah. Or not we want to have cavity shaders in the sculpting and stuff. Yeah it's okay. So sure nobody wants it. So full time sequencer it's not. I think I'm gonna be a bit controversial so first I will be nice and then I will gonna be a bit bad so first of all thank you guys for all your work you're doing I mean it's it's fucking amazing so I mean really thanks a lot for all you're doing and second is a bit controversial so it's like it's quite clear from just being here in the conference that people use blender for lots of different stuff. So for example in my case I use it for architectural visualization and there are sometimes that it's quite clear that some features that for some uses would be like super important for others are not and I can give a couple examples. So is there any way that making the feedback from the users and I know this is like really difficult I have read it a couple times in Blender Artists I know that you guys got completely overflown but proposals and stuff like that but yes to give yes to give a quick example like for me it would be amazing amazing to have white color view board this is a controversial like even if I could ask like whatever I will have to have like different colors by object by material by groups because I you know the guys that layers in blender are not the best feature so I usually try to work with groups and at the end what I in architectural visualization I have like lots of stuff the buildings are big and I have like a big blob green blob and I know that for you I mean I know that the feedback that you guys get is usually mostly from the things that you're doing in the institute which is normal because there are the people that you can trust and the people that they are doing and probably for the films that you're doing you don't care about that kind of stuff so I don't know if there's any way and if this is a really big question and it's a controversial so I was nice at the beginning that we could give feedback that maybe it's also like gonna help I mean it's gonna help uses that use blender for things like not films for example and it's gonna probably I don't know like help each other like probably some features you never thought of that and probably that they can they can speed the workflow I don't know I know it's really big sorry but the question is mainly do you think the bioframe colors are not acceptable as a feature or what do you think then why do you think it's not in blender because when I make a group is as that for example he has that color I cannot I mean I know that I we have colors by object and we have colors on material but I know I'm the person with the evil genius who's not always happy with the simple things I mean there's nothing against wireframe colors but there is something against doing things really stupid which he will regret in a few years so when our people are working on it the only thing I said was well it's very nice to add it but I would like to have it first in theme control so you can make a theme which fits with your way of using color and the interface and then have smart wireframe colors so for example you can set up rules for wireframe colors that groups have different colors or modifiers stuff or constraints or whatever but you can use colors for debugging and useful information if you would store the colors in the object itself and it becomes very static when you get the file to somebody else when you get a complete mess like you see the colors you might like but I don't want that maybe and then I have to spend hours of deleting or removing all the colors again if you make the colors a little bit more abstract which is a few days of more coding time everybody will be happy but then I don't have to see your colors and you can use the colors you like and load files from other people and have the colors too your colors and not their colors you understand so there's just a way of doing what's really good and not doing it the easy way you might not want next year but I don't know what happened with it so there's opinion is divided there's tons of opinion and well there's everyone has their own opinion on this we had a big long thread it was really horrible um so basically I've been tons saying like you spend hours but my implementation was just you click a button it's like mad caps and you enable white wire colors so you don't have to it's like an opt-in thing and this is like maybe it's good maybe not there was a lot of disagreement there um and the other thing is that ton's idea is sort of like a rule based colors and that's good but then if you just say I want the grass to be a weird green color you can't do that you need a rule to define that you just say I want the color to be what I want that doesn't have a rule you have to go and use some rule editor you can find the color but we get the color from a palette and you don't pick a color from your rgb picker that's the only thing but your palette is in team control yeah so if you set up a number of colors which you think is useful then the same another user might have a different palette with switch with their themes and then you can collaborate without seeing the ugly colors from the neighbor that's all so instead of making rgb custom for every object you make a nice menu that pops up 16 colors and you pick one of them for 32 and then how does that mix with group colors and it's an index space that's all but how does it mix with existing colors how do you not conflict with library linking by making this a rule so the rule is done I want a custom color okay that's overriding the rules and so if you don't like them do you have to spend hours like turning off all the custom colors on every object no good this is a matter of we talk about it later it's a matter of design okay and the same thing is for the layer system in blender which could have named layers and there are many ways to put out an interesting layer system in blender there is a good way and there is a way which is going to be something you will regret that's the only thing I kick the code is not to be lazy right we have to not be lazy because how blender started I've never never been lazy in making a thing so could I the latest is another completely thing I understand blender is not other software I understand blender is blender but when you change the way that other softwares are working then you find problems like for example in my case and I go again like obviously the way I'm using blender is not the way that the blender is in blender but I have I receive models from the architects and those models every software uses layers every software and the problem they have is when I import the things they sketch a model to blender I lose the layers all the software pretty much for example it's gonna maintain that it's gonna maintain the name of the layers so that's saving me one afternoon of things changing things in blender and that's a big problem for me because if I have two days I cannot spend one afternoon putting things in that but that's another completely thing I know the only thing I want to say is there's nothing against this and I'm pro pro and we I think all pro uh have good features in blender but we have to expect also that it is sometimes work we don't get it for free it's not like that you have an idea and then materializes and it lands into blender that's not how coding works right that's not how anything works also your job doesn't work that way it's work so for a developer it's also when you have to think about it and think about the future and how to maintain it and really well then in a way that in 10 years of time you might still like it you have to do something can work that's all can I ask is there any future for more parameters in blender developing physical units so I can switch between generic blender units and meters of meters but for lights you know is there any option I might get a lux or a lux per square meter for the area lights or something that's physically meaningful rather than just a number so first sort of question is about is there a possibility of adding more units and this is uh like most definitely there is really nothing uh difficult it's wouldn't say it's trivial but it's quite easy to make dynamic unit system so you can register a new unit system and then your add-on could use that unit system that's the sort of the worst thing I think that's maybe like one day's work maybe two days work however if you want your rendering engine to use those units I think cycles is not physically based with its lighting it doesn't necessarily well so I don't know anything about cycles actually but from what I understand well it no it uses internally the unit's correctly but it doesn't necessarily expose them the same way to the user interface because sometimes you change the ranges and stuff so it's more intuitive to use I don't know if some parameters are actually physically based well then sure you can add a unit it's not a big deal but if it's not then what you know you cannot actually for example if sometimes you just want to have a parameter from zero to one right instead of some weird physical unit that nobody really understands right yeah yeah well some people yeah of course but like how many people know what how many ways what's per square meter you need for light or something like that right I don't know how many people here can do that you're wrong but the reason you're wrong is that 60 watts is the figure you just quoted for everyone knows no light is actually it's not 60 watts anymore it's 60 watts equivalent because we're not using heated metal anymore as a result light bulb boxes now quotes the intensity in lux as well so people are becoming familiar with what a five lux six lux bulb actually it's may I give an answer to that maybe there's a the thing is with the path tracing it's quite difficult to quantize this thing so in physics you have basically photons so you have the luminance which is the amount of photons that are emitted by a certain black body whatever and basically path tracer works by shooting rays from the camera and then tracking a light so you cannot so if you wanted to quantify the the amount of light that is emitted by a certain lamp you would have to do bidirectional lighting which we don't have now so you would have to basically have the area of the light and then have a certain possibility distribution so that you can emit light from it and they have to have to have some certain physical meaning but in the path tracing is a little bit ill defined so you because you cannot sample from the light uniformly that's the thing and I think I think at least don't take my word as of course we can start labeling buttons with units but you also want those units to make sense right and that's the problem so we don't always make sense in London but then they're so flexible you can define a planet to be the size of one unit or you can define an atom to be the size of one unit so how are you going to map all those things right in physics no no I don't want to know that okay you've already you've already solved that problem by having that scale factor as well as the specification of the units so you were smart enough to affix and I might be unusual but when I'm modeling planets I do define them to be 10 000 kilometers across and set the scale so they still fit in my viewport but then I think physically just a just a very quick question who here compiles blender their own blender and for you after we changed from that's when to get was it better was it worse did people stop compiling because of that who hates kid there's only one who knows what kid is okay excuse me because probably I might be not that experienced as you all in this room at first I bow to you developers thank you for the tool that we are using the second thing is that my work basically is about collaboration and making people work with blender I'm not really I do know blender very well but I my job is to make make people work with it and so collaboration comes to to the table and first we've got link links and it works for the most part so it's good but on the other side um we have people with different specialties and how it is possible to customize blender but you're really customizing the blend file in most cases and when you pass the file through the pipeline everybody makes his own interface and everybody makes his own decisions about it so this is one question about collaboration and are you thinking about maybe giving us the possibility to open the blend the way we want to you understand that the person doing the shaders is needing the totally different UI but on the the second question is are you think yeah there is already the option to load without interface you know that but you yeah yes but on the other hand it would be very great to have like a possibility for example to share those things to people in a way that for example zbrush is doing it with this sculptor's tool which is just a zbrush but shrink to give it to education and to give it to um for example if i'm trying to show somebody who's doing photoshop only how to use blender i don't give him the original one i just give him the template i can do it yeah i can prepare such a template and give it to a 2d graphic designer to show him how to use blender with this specific interface but don't you think that it would be good to think about those templates or think about certain kind of projects that you can give to people and make them use the blender in a much more familiar way not showing such a versatility maybe but then giving them much quicker access i know a bit the template discussion we've been having before and there's somebody who wanted to work on it but there's a man you mix up a couple of things i think so that is the fact you don't sometimes you want to only have the data file and don't want to share all the interfaces because you made it personally sometimes you want to make template files which is a number of files which can give to a user and they will start up as if it's like a startup right so you start to start blender and you get the template so you pick a number of templates and then when you save a file it doesn't save the template over it saves the file right that's what you want which is almost there there's somebody working on it but it's not there yet because it has some issues and things and it's a matter of kicking a bit and then that will happen just to say the template file thing is there just no one out of the menu to access it that's how close it is sorry for us we will tell you after this how to do it we didn't do it yet because we wanted to sort of agree how it would work and like think of you know what directory we store templates in and how you save a new template so it's it's not hard but we we want don't want to just add it uh flippantly and then not think about the repercussions but it's it's basically there i want to ask about well thanks a lot first of all and i want to ask about meta balls and it would it be possible to have modifiers on meta balls is it too complicated is no no i'm not talking about really complicated i mean tonkots meta balls so i called it in 92 and that was added to blunder and in 2002 or 2004 there was a witness developer fixing up some little things for it and that's it i haven't seen the real use case for it and there's not many people i haven't seen a real use case for it so what are you doing with meta balls what well i i i will with scientific research and for instance if they're very simple case of cell division and you if you want to make cell division with meta balls which is the right way to go or the most easy way to the easiest way to go uh you have static meta balls and they don't move or whatever like cells that they fluctuate the membrane or whatever so if you just apply a i think it's very complicated but an ocean modifier for instance so you can fluctuate this it could be much more realistic i mean for this you probably would need to add like volumetric primitive which would be like more usable in my opinion and current meta balls are just horrible and it's so much it's so much it's so much a stopper for dependency graph so this new dependency graph you probably just vibe them away it's horrible and you don't have any other and you're not working in any alternative that i don't know but you talk about constructive solid or if they're right or not like the meta ball system is actually a procedural definition of shapes which would then combine with and and or like a c s g constructive solid geometry or c and c modeling and we don't have that at all and there's no developer who could do it so we you have to do a call for coders to help us get in this uh very well integrated including working with the dependency graph right we can make a call for someone to integrate like open vdb into like modeling pipeline that would be very cool uh it has a hell of a lot of tools to work with volumes but that's what i understand how the meta balls are used by you don't see the page now yeah i want to say something to this topic because i'm not sure if you notice that there is actually a plugin implementation of this which did somebody on blender artist it's like a iso surface from open vdb too and it's very useful for visualizing fluids because we have particle fluids but no way to render them for years and also like the possibility of like i wanted to say like this use case for meta balls there are many use cases like this biologic animations i do it like very often so that it would be very useful to be able to work with meta balls more advanced but uh in fact like an open vdb surfacing algorithm would be much more solid probably and had more use cases for example these fluids and uh it's been already done by some arabian guy and it's on the forum but it's just in a form of an outside library can we contact can he contact us with some probably patch it or so it would be great i can find it and send you okay i have a question regarding alembic support i don't know who's responsible will it be modifier based so i can stack another modifier on top of it um we haven't quite decided on the design i guess but um yeah it would be nice to to have it work in a sort of layered way that you can execute a modifier stack partially then cash the thing and then have something like an additional subdivision on top of the cash result for example so you don't have to store a full subdivided mesh in the cash and can you include a time stretch and offset very useful yeah that's that's more of a design for it technically i guess it's not so difficult but it's a question of how we can support that in the blender workflow really yeah and the dependency graph everything is a dependency graph thank you um i like to talk about bugs and i mean it's just questions yeah bugs 174 right now but that's not the question yeah it's working it was it was 175 before we started this meeting so i know each bug is different but i would like to know uh what time does it take to solve a bug and what can we do we use her to help you solve a good bug i mean i know bug reporting is important so what can we do well the first rule is definitely fill out the template we have so many bug reports where people don't don't provide the information that we ask for um so when you when you report a bug you have a mask which asks you about your operating system your gpu which blender version you use and also some clear steps on how to reproduce the issue and an example blend file and some people just wipe that away and then say they are working on a project and they're having these modifiers and it doesn't work then we always have to spend time on getting back to them and asking can you please provide that info so the first thing that would really help and i'm not kidding is to actually just provide all the info so we clearly see and so we have a clear way on reproducing it if we have to spend uh time on guessing what's wrong that's our time that we could spend on fixing the bugs so that's the first thing i think it's important most of you have like access to multiple machines like multiple computers and if you can like spend time to try to reproduce the same bug on another computer which you have access to and we'll find like a way hey yes it's reproduced there then just report it if you cannot reproduce it on like another computer then it's probability that we would be able to reproduce the same bug it's really low and we cannot fix bugs if you cannot reproduce it so just if you cannot test on multiple machines it it would really help it was a quick point uh first when we take time to answer to a bug report etc and we have i mean each week we close bugs because we do not have any return from the user and that's it frustrating time losing and we can even lose real bugs i mean they can remain in the code because we don't have the requested data to fix them to investigate them and that's first testing and what i couldn't add i mean i think if you have an issue with blended you should always report it but you even when you have no idea because then we can close it and at least we know that there is an issue somewhere but you cannot expect the bug tracker to be like your personal support for them so there are many times where people say help our blender doesn't work help me right and then they post a bug report and then they expect a developer to come and say oh that's so that's interesting you have blended not working what's going on there well uh well well so you get this whole long thread of like a support forum where people try to find out together what's going wrong and that's something we can't afford that right sometimes if it's an interesting issue it might happen but you cannot expect this to happen but what you can expect to happen is that if you have a case which is reproducible with everything in a blend file which crashes blended which used to work before that will always be fixed always you got a decent answer and a report about how what we are going to do about that case that's for sure but between this reproducible case and the user who complains the blender doesn't work you have a lot of shady things like yeah i mean sometimes after five times clicking and doing something blender crashes and then how do you pin it down i think this is something we might it's a nice idea to do a workshop about that right at the conference i always thought about that because most of the bugs are really logical but you have to know where to look at how to handle it to find out where the actual issue is and as a user you can really spend a bit of time before the 10 minutes 15 minutes trying to approach a bug from every direction you can think of by removing one by one all the variables delete everything you don't need in blender remove 90 of the interface of remove the screens append the file or do something until you find the smallest case that crashes and usually you have exactly that what is the problem just last quick point it's very important to test with the latest builds too because well even without going to case we we have some reports with blender 269 or 268 still today but there i mean there are scares but using the latest release one one more after well you can very well report bugs that are already been fixed so we have a build build bot on blender which builds each night the current master it's very important to test your bugs with these builds to avoid needless reports but bassoon if i can add we don't have the resources to test blender on all previous versions of macOS X or all windows versions we try to keep it working on a recent version and on subset of machines that we do have but if you have a macOS 10.6 or 10.5 machine it might be better to upgrade if you run unpatched windows 7 it you should actually windows xp come on we support windows xp but you need to be fully updated um vista i tried to support as best i can but you need to be fully updated and i get two reports a month three reports a month with people that i have to have a discussion with three or four messages back and forth to find out that they didn't update so please update especially with those users please update um two things about that for example would it be helpful to make some of the fields in the bug tracker mandatory so you have to fill them out for example vos because right now it he said many of the fields aren't unfilled out yes but i mean in some cases it's just like pointless to to request some fields because hey it's reproducing all the system i'm trying like why to bother even to put it in and it would be like a frustration on cox submission and making stuff more complicated and common sense common sense is the best answer here and the second thing i maybe would do is for example what you said tested with the latest build that's a very important thing i would just put a small video message because video is the most impactful thing for two minutes where where you just explain once and the website does the trick for you educating the people who submit bugs i i think someone made a video tutorial about how to submit bugs i think that was sebastian kenny that was a we had one of in the previous book track we had a video of uh and it was used but it didn't help either people refuse to follow instructions that's the nature of people right and then we simply ignore them if the information is not good then we simply say sorry you have to provide all the information in the support please do that and until then we consider this report to be closed right next otherwise we can't work oh thank you all very much you are gods of course but um i was wondering uh ton you also talked about in the beginning about um blender maybe becoming a module because lots of people lots of different kinds of people use it and i was wondering uh could you and maybe the developers elaborate on that how it would work like would you for instance in a note editor like make a pipeline for yourself and then render out a version of blender or how will it how will it take form in your anything what is your vision on that yeah no that's that's something i didn't think of that part yet no so but you mean um no system for pipelines or uh if in the future blender will become more geared towards specific users or will it remain a blend of all the functionalities but this is something we have to discuss with the developers i will have to discuss with the developers i think that's just a template i think that's just a template like blender itself would be like versatile and just different like templates like hey i want to start as a vfx guy and i want like vfx layout and only that buttons and sorry famous sculptor i belong to like have one screen with sculpting but but the blender itself would stay the same it's just like a matter of like spinning uh isn't this done by layouts already you have the on the top many default uv no animation yeah to some degree but if we sometimes you just don't want to have like some layouts or some screens and you don't want like if someone gives you a file which was like came from modeler and you're working on like vfx you don't probably want to open his layout you want to use your own layout so it's just like a bit a bit of an extension of current systems so uh optimal key mappings for workflows uh that because if you have one key map for all users then some users have to use very obscure keys or control alt shift f7x or something well i mean that's why why we want to have a lot more workflow attention in blender i mean there is no space in the interface anymore to add buttons i think there's no free space on the keyboard anymore i mean we could add stickies and then what and then the stickies are being uh conquered and taken over by the the pie manners and then when somebody invents something else and then we have to stop coding because there's no space anymore in blender so we we have to pull the break a bit say okay let's go back uh in what i promote and that's what i have to convince the guys we had me still off but i think they like the idea of trying to get uh the standard configuration for blender what we call default to completely make it as small as possible and only add as a default the things we totally agree on that we don't have all the discussions anymore because we agree on it it becomes a default if we don't agree on it then we put it in your own personal configuration because people are personal people do have different opinions and ideas about what is logical like a typical example is for example the up arrow which suddenly a couple of years ago became an extra keyframe which is a typical useful key for an animator but for people who do uh visual effects or something it might not be very uh sensual but then you have a shortcut which is nice for animators but not nice for other people what do you do with that then you get a discussion about whether or not to do this and then the uh game people say yeah well we want to have to pee right for the play of the games when all the people say but i hate that peeky every time when i press it then it starts a game what so that's that's that kind of thing we should try to get rid of that if you are a game artist it's not a too much uh required too much demanded but you configure a blender once for your workflow everything is beautiful perfect and then we as a developer team have to make sure that everything we consider default easily modices with your personal configuration without any conflict or any problem right well i actually have the idea of having some pricks of key maps key maps so you can um build your own key maps out of some predefined pricks so for example rotate scale and something like that you could have g r and s but um we could also have a a prick where you have it on uh what's yeah a small group of of key sets so that are um yes organization yeah so you could choose your own pricks your own set of key maps yes your own keys and um put them together to match your workflow basically what is also really cool is that 3d technology and interfaces are evolving as well to get rid of buttons you can see it but there is the moment the moment you can see nice tests and videos of people who do set up a rig and they hide the controls for manipulating it inside of the mouse so you can then click on a finger and then you move it and then you get the hand and you move the hand right as you pose a character by touching it that's the way how you do it you have the controls and things and buttons and sliders and all those kind of things so that's why sculpting is so cool sculpting is really a more natural way of working with modeling than trying to select the vertex and then other vertex and then you extrude it and do that that kind of modeling although it's cool but it's a bit old right nowadays you can sculpt holes in meshes and you can add things so you can what almost so this the the whole sculpting thing is becoming useful and then making a topology becoming also very easy so instead of trying to get good topology while your model you can first sculpt something so you're satisfied with it past nice interactive then you give it to the topology guy or you do it yourself with the tool and then you have a good model but those kind of tools also change and most of that that's the cool thing you don't need buttons for it if you saw the topo tool from Jonathan it's mostly 3D I don't think we have buttons a few and that's the cool thing that's that's good tool design thanks for making blender I think it's a I think it's really a fantastically ergonomic tool that you can set up and customize really well and my question is um I would love to be able to use that power of the interface to work on sounds in much more detail for instance if there was synthesizers built into blender and you could set up drivers to where the position of an object drove the frequency of the sound and uh those kinds of things I was wondering if there's any thoughts to develop more of a sound uh generating a sound palette kind of toolkit within blender perhaps within the node system one sound developer who really would like what you say to these into 3D sound maybe and that kind of thing sure he's not always having time and has his own things to do as well so I'm not aware of development in this area really I think people have done some weird stuff with jack and I mean you can define your own nodes so you could probably do some hackery with python and maybe get something interesting but for something like built into blender that's supported everywhere that's it's going to have to be um like properly coded in C I think what happened to the project to add midi control and blunder you remember that one that's a long discussion like five years ago no event clue can be midi controlled people have been doing osc and midi input and crazy stuff for a while but it's always really like custom stuff and they use some python module to get osc and like for some installation and then it gets forgotten about but then worked on it or I thought you wanted to give the mic to him because he knows everything about it no you wanted to be get rid of the problem uh so do people know osc like the open source standard for midi and stuff is that useful to have a blender yeah yeah what for well first okay well the the most straightforward answer would be like for think of color grading you know these people that like to have these strange color grading setups with all the cool colorful wheels yeah buttons right physical buttons you know well the the easiest well it's not probably the easiest way to hook up with directly because you need to make some kind of bridge application for that so I I see how it's not really that easy and straightforward to do but yeah it would be really appreciated right it'd be also nice for video editing services and stuff so and those panels they all work with osc so you could set up osc to go into the blender event clue and then control all those things just like you showed yesterday on their connect uh lead motion thing it was using osc the latest the latest demo the one they were actually scaling up the the drive was using osc so it's pretty straightforward straightforward yeah um yeah so I just wanted to wrap up the the sound thing so I think there can be a lot learned from how sound people set up their systems because there's crazy stuff going on in terms of development of midi controllers and stuff and there's then like an unlimited supply of buttons so we have that problem out of the way uh okay but my actual progression was uh because it has been said so many times that people should uh seize the business opportunity and uh open up support business for blender so the thing uh it's been said so often that are now seriously considered but the thing I find very uh intimidating about it is that a blender such a complex piece and and such a modular thing that um I don't see how anyone could possibly uh offer like a reliable support that that just helps you it just definitely helps you if you have a problem because I think there will be a lot of bugs where I'm very uh very very much have to rely on the core developers to get information so I would like to have your thoughts on that how we can take this together for instance don't cannot further question I mentioned it in the other field as well it's coming back a lot but you might see a lot topic but there is an issue in every man whatever it is and then there is a need for a developer and then how do you find those people how do you get them to code for you right that's what you want to know yeah it's especially um I'm thinking like okay like a um practical scenario so I have a support contract with someone and then he comes like oh my god tomorrow is the deadline and everything has to run and now help me and I'm like okay I can know a lot of about blender but not every I mean really would you you know having done a bunch of blender support basically somehow or another you need to get a blender developer on staff that can fix the bugs whether that is somebody that is actually contributing to master or not you know at least as far as support contracts goes particularly if you're supporting larger studios or any kind of studio institution they don't necessarily need to get the bug fixed in master they need to get the bug fixed for them so if you can get a developer on staff whether that's part of the core team or not uh that can then fix the bug and then shift the person a custom build at least for their project then that would definitely be a solution you know ideally there'd be somebody that can also contribute both to their personal projects but also to support and to master but as there's not very many people um but yeah that's that that's really the challenge and that's honestly one of the challenges that I've run into and a lot of other people to run into is how do you get a developer on staff um uh John Denon uh John are you in here yeah he's over there yeah so so I mean just as kind of a similar example so with the retopology tools that uh ton mentioned earlier that we built I don't know how to build those particularly with the math side it's way over my head but I designed the tools and then just reached out to a few developers to actually build it and those are in pythons so they're not actually building on blender master but they do a lot of things and that works out really well particularly you know on a contract basis or as an employee or whatever to get a developer on the team to actually work with. I was in fact already taking that into account that I ship a custom build to the customer but still I think the problem remains like I can offer support for one add-on that's that's okay because I can understand it it's it's my work but uh blender is like very this very interdependent and one system can fuck up another and I can't understand everything and no no developer can and so you have to have some sort of extra strategy in that case and I'm asking you if you know have any idea how that could look. Just a comment on what you said I think there's this maybe incorrect notion that someone has to just know all of blender to do blender support and I think there's maybe you could say two levels but there's like if you have a report that something doesn't work usually there's a whole lot of the human factors involved like they want to do certain things and maybe there's three ways to do it and they've got a complex rig and you need to figure out a solution for them so you don't necessarily have to be able to go in and debug like cycles ray casting some sort of weird glitch or something like this you just have to be able to kind of think rationally about it and spend a bit of time and the other thing is um as blender developers we don't always understand the code that we fix before we fix the bug sometimes you get a bug report and you look at an area of code you haven't seen before and you have to think about it it takes maybe two hours when it should have taken 20 minutes but you still managed to fix it so there are developers and smart people out there who can look at blender's code and think about it and figure this stuff out and become better and become really good developers to work with I guess yeah you're for optimism there's so many people who already are welcome blender and this is not the whole blender development team there's plenty of more who didn't come to the blender conference so the issue is valid so we have to find a blender org or blender foundation better ways to connect people for this and people should be treating this as a professional topic it's not about I want to have a feature in blender I want to have it in the release but it's like I have an issue with uh making something like monica doing uh molecular visualization we can't have more than 10 000 molecules because you're doing things and the code not well or the conflicts with something in blender and she has a development bottleneck somebody has to help her how do you solve that right for her that's an impossible problem because she can't find who can solve these kind of things so we have to set up some kind of an infrastructure maybe on the blender network we have to find a place where you get some kind of a marketplace where you're going people come come together to help each other which is not about getting stuff in the release because that's a whole different problem it's about specifically helping this person to get out there she is helping monica to get her bio blender back to working state what that's what it is about who's the oldest hand um just rough curiosity here just from a sort of the show of hands on the developers how many of the core developers that we have here would do blender development full-time do do it currently full-time and and of those of you who who don't currently do it full-time how many would like to do it full-time yeah well no who how many would like to do it full-time as far as blender development goes well no the reason the reason that I ask is that if anybody wanted to set up such a support system there's the people you hire yeah in a relation to not enough developers would it help to have some of the core developers being mentors for the patch tracker potential new developers who are interested in helping but maybe are ignored because you don't have enough time to help mentor them and like foster an inclusive development community like it's just I don't know if it's true but I there's a lot of patches I think there's a lot of developers who who fixed scratch their own edge they post it on the patch tracker and nothing happens for a year and then say well screw this I I'm not going to contribute to this project if they were helped or communicated with earlier maybe there would be more developers for other projects for the blender network I don't know if a mentoring program would help and dedicate resources for that what we do is we are the blender development fund we hire developers so they can work part-time or full-time on our product tracker and reviewer that helps a little bit but we do have to find ways to to get people who submit patches but they find their ways easier into the project like how do you promote it how do you get something in attention that it is really something useful but there is a problem with patches patches have a very unique different thing and the problem sometimes is actively sometimes it's a feature request this is a sneaky feature request of people want to have something on Blender recorded that there is a patch and then suddenly you have to review where the look at it is yeah the code is not really good you have to fix this and so on but in the end you have to spend more time on review on the patch than on uh coding it and there's at the meantime somebody has to feature in blender as well by submitting code which is not really good you force somebody else to fix it and then add it to blender right but that's after a while you get a bit tired of that and you start coding yourself and then you leave all the patches in the tracker for what it is but that's a bit of the issue with the patch tracker question that's related to that thank you it could you explain what's the decision process like relative to a new feature a proposed feature or to a patch because I've been following on IRC for some time and on the developer's mailing list and I hardly ever see a feature being discussed even among amongst you like the pros and cons being laid out on the table and someone saying yes we should take it because of this and that and some other guy saying no it's not good because of that I hardly ever see these discussions and yet in the end indeed some features are cast out and others are into the next release and it's hard I still don't understand how and in what bodies such decisions are taken we've got like module owners in the list and if the feature only belongs to like one area the module owner can decide whether it's good feature or not to have if there is some feature which touches different areas then we definitely have discussion sometimes it might be not like public one we sometimes book each other like in a private mail or in private message in the IRC and talking about how do we handle this and then probably reply in the patch I do understand the model owner and it's perfectly legitimate but it's the discussion I mean the ultimate decision I do understand why it's in the hands of the module owner it's it's the process that I don't understand and don't don't see I think well sometimes I worry a little bit because maybe two people have a discussion and it's not public and a decision is made and there is no record of that and that's like a problem for other developer developers because I have to say hey sir okay why did this happen and he says oh well I talked to Tan and he thought it was a bad idea and then that's a bit well it doesn't scale very well for many people and it also as you say makes it very opaque the whole decision-making process some controversial decisions we probably do that purposefully but other times it's just the easiest thing to do to shoot off a quick mail to someone and get a reply I agree it's a problem but just I don't want to make it too too much of a personal issue indeed I did I did work for a number of weeks on a modifier that that got attention and very positive feedbacks and Baskin even helped me polish it in the end and then Campbell said well a number of good reasons that it wouldn't make it and my issue is not so much that it's ultimately a no decision I do have the feeling that I should have been told not to work on this much earlier and I wonder indeed I was very new in all that that contribution processes so I certainly did many things wrong but still it's it's I mean it would be best to avoid other people doing the same mistakes that I did and working for weeks on things that will be trashed in the end so that that that makes it personal but really my question was was more broadly how our decisions made just a comment that I've made many times I think but if you make a patch always get the person who will review your patch to check your patch early on because if you do not do that there is a high risk of having a patch rejected after all the work and it's really frustrating for all people concerned I'm not especially happy to be confrontational so to go up to people on the internet and mail them who I've never talked before and say hey I don't like your patch it's like sort of walking up to someone and saying you don't like a shirt or something it's like because maybe they make it better and maybe they improve stuff and I don't we could be like that I don't know maybe it would help but it's it's difficult because when they're working on stuff and it's their own development they might say well I'm doing it for myself and it's for my own project the other thing our developers will have to understand is the same thing is for artists if you look at what the artists do on the team when they make a film they start drawing and drawing and designing and designing and what you learn is that the process is far more important than what you do at that moment so if you are a coder and you say I spent weeks on this code and it has not been used then you can also say well that has been a very useful experience and now I'm going to do something which is better or more interesting or you say I will use it myself or I will frame it on the wall but it's not like waste of time to code code is really cool coding is fun interesting even artists are coding he doesn't expect the code to be ending up in blender release but he does use it himself because it's useful to have to do and to have it and I think so the need of making code because you need it yourself is of course the best thing you can do so I hope for coders that they don't get discords if your work is not accepted it doesn't mean that you want to lose human being or something of course not it's not the same as for an artist right move on move on but there's always new code to make and people are even removing my code from blender you know that all the old crap from the 90s and so in a few years there's nothing left anymore right so it happens to me as well this is quickly this contact module owners early on maybe they'll say definitely or it's risky we're not sure if we can accept it but you can at least get a little bit of a kind of a is this am I going in the right direction or you can ignore their feedback and do it yourself anyway and that's great but then it's a high risk project and you might not get it included I also have a question about the evolution of code more or less related to a bug report I sent in a few days ago I was playing around I'm teaching myself the the blender game engine and I saw that there was a you could turn on pulsing and then you could say frequency and I would expect that the higher the number in that frequency field the higher the frequency of the pulses but it's not it's the opposite it's the number of frames that are for which pulses are skipped and then you get a new one so it's more like the period than the frequency so I was wondering I don't know myself how to fix that because it's it's all the way back to the python api it says dot frequency while it should be dot period how do you guys approach such a thing how would you fix something or I mean for such simple thing you just drop on IRC send a note the coder is here I really to fix it it's down in five minutes at most but yeah sure I mean then you change the code but oh I've already you can report and we can fix this but this would also 147 bugs so it's seven fourth very yeah yeah sure no I'm just wondering in general how do you um as a team do something like that where you have to change a property name in python and there could introduce all kinds of compatibility issues property name like UI name is easy to change and you can like just contact like with a bug tracker or just talking in the film mailing list changing the python RNA name is a bit more risk because then we'll be blame on hey you broke python api your past hours that's exactly what my question is about so we try to not read on that level we try to stick like to to all legacy name just because of the compatibility but we usually in these cases if we really have to change you wait for a moment maybe from 2.6 to 2.7 and you rename it and you have in the documentation ideally that this has been broken people discover reason but okay quick anyway I what are the plans for development of the plunder internal like in the long run say because it often happens that projects in similar situation get your job because it's too hard to divide resources to continue maintaining and extending the similar projects and well I currently mean trying to fix bugs in blender internal and probably at some point I will just go ahead and clean it up and make it like a bit more maintainable just because of fixes things and maybe it would also help like attract more developers trying to extend it like a bit more for some better features and stuff like I thought he's working on it too right yeah he's working a bit on it too yeah he's not very visible or communicating a lot I have to hunt him a little bit down variation then mail him maybe he wants to be involved by after reaching out to him giving him hints or ideas maybe since you guys watching I don't know how can we know like the door is kind of like feedback from the internet back it's just like but anyway what things are evolving a blender that's a blender internal render is falling behind right that's not because it's because it's it's falling behind and that's for many reasons and to catch up things you also need to know where do we want to bring it to what's the future because for cycles it's much more clear because we have many open issues and cycles which have to be worked on as a production engine it has to be improved in many areas before blender internal is like yeah um what are we going to do with it that's why I'm actually asking this is like I see a lot of people exciting about cycles in general and like oh my god and but like in our case we're using render internal only because it's quicker and it's much easier to compromise on things when you can't compromise but we cycle since it's much more harder to script it and much harder to achieve the same render quality within time frame and all that so for our case it's critical that blender internal stays there but what I see it kind of gives me an impression that at some point it's quite possible that the internals will like be dropped from to maintain well I don't think it it will be gone in like in years for tenure okay the decade is fine well the thing why cycle started in the first place I mean brecht worked on refactoring blender internal for the single project and most of that work didn't end up in master because it was too buggy unfinished I don't know exactly but that was one of the reasons why cycles was born so um yeah with blender internal we we are more or less in the maintenance only mode for the last two two years or so we we fix bugs we occasionally add a small feature but that's it and I mean the main reason for that is because it has so many issues so if I mean no issues in blender internal I'm sorry yet there are about like material notes in passes come on come on they're not using material notes are you also basically all I want to say is that blender internal is of course still a great render engine and you can do a lot of things with it and especially for non-photo realistic stuff it's great but it's difficult to bring it from the current level to to the next level simply because it's of course it's quite okay to fix bugs but getting it to a whole new level is difficult and that's maybe one of the reasons why why it's more or less in the maintenance mode at the moment for me there are many ways we could move forward but I don't know yet which one will be the way but one is the NPR and the people because they're non-photo realistic I mean in the current computer graphics standards blender internal is not photorealistic I mean it might be photorealistic in the 90s but at the moment it is not photorealistic anymore so the you could call it an NPR render engine or you could maybe get the people who are interested in getting the whole range from a cartoon render to really cool interesting creative renders which is easier to manage or faster you could help or maybe get them involved and the other thing we could look at which is also interesting is to move to open cl3 and 4 features and then you get something really interesting because actually blender internal looks quite a lot like what you can do now with real-time graphics and then you have a real-time which is even better right and then you can beat the shit out of those cycles guys but then you have something with 10 point 1 point second frame render time what but I actually do have a question about like this topic do have like some missing features in blender internal to have like some bugs or is just worrying about like it's been discontinued at some point thanks well so I have a comment and maybe two questions first of all I would like to say big thank you and bow to all of your developers you are really proud kudos for you and respect so my question is a bit maybe smaller but I would like to ask you what about video sequence editor this is about who else he is missing features a bit I have to recently work a lot with it so it definitely needs some more love I feel so so it's just terrible and we suffer the consequences and yeah basically we're trying to improve some things I am not a video sequence editor at all so any feedback I try to gather around from people who do work there and it's a bit weird because it's been developed using some sort of standards that people expected that time and now standards have changed and maybe we should people who use it we should really gather together and make a direction that we want to have for the sequencer and what really has to be done and basically right now for the gooseberry project we're trying to solve some basically speed issues and cache issues so that way you can get some proximities showing up quickly and the transform system working properly I guess if we really want to make a modern thing it's more a long-term targets than we have to sit together all the users and see what we're going to do and I guess the way to organize is a little bit it's a little bit first come first served we have to advertise it basically so people can contribute to it and get hurt somehow that's the thing maybe you all should increase and their development point to sponsor you or to support you in some way by the way who is in this phone already I would like to ask you right you hand who is participating in blender development fund already yeah I think that's it maybe a good way to support some progress and the second question just to be quick do you know somebody who was willing to improve blender so dramatically that he tries to become a developer to change his whole life and go this way to learn himself how to code and add new features was it was that case already happened to some of you so the guys can tell me if this is their experience but I just started working on blender I'm not like an expert on mathematics or anything and you just keep on working it and it's just really fun and I just didn't stop and I ended up getting a job so I left my other job and it was I didn't ever feel like really really hard at any point and I don't have qualifications in this area so yeah rather the same thing but started working on small plugins to small items to improve my experience and then I added my deal of modifiers and then yeah you know louder so just a quick parenthesis you don't need to just drop your job in your life and become a developer and everything changes you might have no I'm just saying that you saw the the drone presentation I gave if I've been not yesterday it was really helpful to really handy to be able to patch blender to be a blender developer on call even for your own projects even if you're not full-time or only part-time it can't your your life to blender so there's a lot of compromising keep blender development here on dates much more fun than being like involved at full time because of a bug tracker and patch tracker thing only for four weeks now but I was doing much more no way gonna stay here a quick question about just relating to npr would it be possible at any point I know that you guys are planning to take what's in the game engine and integrate that across other parts of blender would it be possible at any point for someone to directly write like an open GLSL shader and use that in place of the current material system okay cool yes it's part of the there's this ongoing thinking on how to have a pbr support in the viewport and it's all tied to the viewport branch as well we even have a branch with kotoge harmonics too I think which supports dates for the blender game engine but without outside the blender game engine it can already have your own GLS materials but part of the new viewport project would allow this kind of settings okay short comment about the blender support system I think there should be a division between support for existing blender features and support for adding features so that you get a question and then you give it to someone with special with the specialty and a premium feature would be that a code would code it for you so that's my idea about blender support question about cosberry targets because they are quite ambitious do you think that you will have time to achieve all the targets and is there an open map with the priority no what what are the current plans for blender ui improvements and what about a new key map I heard that there's something going on in this area I mean there's a few different plans the primary one there's kind of well two big plans first one as far as generally UI improvements is to finish a lot of the blender 2.5 projects on tawn's list and such there's also a lot of little things just like small incremental improvements that won't really be that dramatic to the user but they make things a lot nicer as far as the key map goes the main plan right now is to build a completely new much more simplified key map that's much more friendly for newer users it's simplified easier to customize and it's also much more consistent and then that will potentially be released as like an alternative and then if it's really well received maybe made the default while then the current key map will always be available as well that just has to be finished I'm trying to get it done but the biggest thing is mostly consistency because just as if anyone's wondering just because it's come up in discussion a lot at least over the conference and it comes up on on blender artists all the time is a lot of people ask which is like you know why don't we change left left click select or that kind of thing and mostly it's just to preface the main issue is not what mouse button is selected it's that there's different selection presets in basically every single editor right now so if you change it to left mouse some things become right mouse other modeling tools become right mouse it's all over the place so that's one of the main things is that has to be made consistent in the key map I wanted to ask if there is any plan to do something with the nl editor or most specific with animation layers or proper animation layers one person working on it is that Joshua I judge and we have to talk to him it's not a lot of interest in it it does work to some level but it's a bit it can work and last one just how do I approach you if I have a design for a feature or improvement like for the text you can't really a special text like the the text tool is really bad so and I have some ideas how do I approach you and just blender the torque get involved okay okay thank you thank you the developers someone left the earrings on the table uh woman must likely left earrings on the table


The Government of Saint Lucia through the Ministry of Health, Wellness and Elderly Affairs and the Universal Health Coverage Project is set to launch a fact-finding survey. The survey will serve as a digital data collection tool imperative to the imminent launch of the Universal Health Coverage Project. There are five key components to the nationwide survey, namely demographic information, public knowledge on Universal Health Coverage, services to expect under Universal Health Coverage, willingness to register, and public preference on information dissemination. Nationals will be invited to participate in the survey via a user-friendly digital platform. The aim of Universal Health Coverage is to make healthcare more accessible to all segments of the population and facilitate a more inclusive healthcare system. This includes the full range of essential health services from health promotion to prevention, treatment, rehabilitation, and palliative care. Thank you.


Hey everyone, thanks for coming to MongoDB and single page web applications. My name is Josh Powell. Despite the t-shirt, I don't work for Tengen. I just went to one of their conferences, and a big fan. I am co-author of the book Single Page Web Applications, JavaScript end to end, that's being published by Manning. I've got 13 years of web application development experience. You can find out more on my blog jsjoshing.com. You can also find my book on jsjoshing.com as well. Or tomorrow there will be a Manning exhibit. You can go and go there. So this talk is going to be about single page web applications, what they are, how does Mongo fit into a single page application, showing how to use Mongo a little bit to ease development. And then that's about the first half of the talk. And then the second half will demonstrate end to end Mongo integration into a very rudimentary single page application. Then I'll show you how to use Node.js to monitor Mongo for updates to the collection, and then push them out to the web sockets and socket IO. So what is a single page application? At its simplest, it's a page that does not reload. So think about Gmail. When you update some information on the page, you only update the section of the page that changes, but the rest of the framework stays the same. That means that there's less code sent across the wire, that you get faster load times, and you end up with more responsive applications. There are several ways to do SPAs. Today, the usual ways are to do Flash or JavaScript. But in the past, there's also Java applets, or I guess you'd also use Silverlight or some other technologies. But today, JavaScript is really winning that battle for a few reasons. First is that browsers are very widely supported, and JavaScript is native to all browsers. So the users don't have to install any plugins and keep plugins up to date in order to use the application. Another reason is instead of having to know another language like Flash Action Script, you can work on a client in just one language, JavaScript. And deployment is trivial. You only need to host files on an HTTP server, and they will be accessible to anyone with web access. JavaScript over time has become truly cross-platform. As converging standards in JavaScript libraries like jQuery have made developing cross-browser JavaScript code fairly trivial. So even now, JavaScript can, at times, rival compiled languages in terms of speed. And JavaScript's only going to get faster as Microsoft, Google, and Apple battle it out for browser supremacy. And so modern JavaScript implementations can enjoy some advanced optimizations like just-in-time compilation to machine code, branch prediction, type inference, and multi-threading. And JavaScript now has access to some advanced features like web sockets, which allow server-initiated communications with all connected clients. The benefits of a single-page application are that it renders and responds like a desktop application. There is no click and wait, and having the screen flash through all the page re-renders. It is click, and just the relevant section of the page gets updated. An SBA can also notify users of the state of the application. Instead of relying on the browser to render its spinning icon somewhere in the browser Chrome, you can just update the section of your page it's going to change with your spinner icon, and users can continue to interact with the application while that slow section continues to load. Unlike a desktop application, an SBA is available anywhere that there's a browser. Whereas with a traditional desktop application, you're going to have to develop once for every OS you want it to run on. When deploying an SBA, it's instantly accessible to all of your users. There's no need for them to download and install an update. It's just available the next time they go to access the application. Whereas even with mobile phones today, in iOS, you're still dependent on the user going to the Apple Store and downloading the latest version. And so we've got weeks of time and people are on the latest code. So some drawbacks of an SBA, the business logic is all in the client. So as a benefit, and as a drawback, the drawback being that you've exposed your business logic to anybody that wants to go and look at it. So if you've got some proprietary algorithms, you probably want to keep them over on the server side. It tends to be more of a rare skill set. Java script UI experts are pretty difficult to find. And spot development is a rare, although a growing skill set, especially with new frameworks like backbone, spine, knockout, and others. Another drawback is that even though we've made a lot of progress with cross-browser issues, it still needs to be considered, especially around older browsers like IE6 and with CSS. With the JavaScript, we've got cross-browser libraries that help out. But with CSS, you still have to worry about the differences between different browsers. And finally, there's really no agreed upon client-side design pattern like there is for your traditional web application. They have NBC for those. But different frameworks are trying different things right now. You'll find MVVM, MVR, or the one we use in our book, MFC, which is model feature controller. So how does Mongo fit into an SPA, a single-page application? Well, there are three benefits. And these benefits are more about the form of the application. And I'm not going to go into so much. I'm not going to go into it all like benchmarking or scaling, but just talk about development of the application itself. So one benefit is when combined with Node.js, you can program in JavaScript from end to end in your application. The data structures that you're consuming on the client are being consumed in the exact same structure they're stored in in the database. And the ever-popular schema list, no migrations. So JavaScript end to end, of course, you've got your JavaScript on the client and the browser. On the server, you've got Node.js, which is just running the Chrome JavaScript engine on the server side to execute JavaScript. And then you've got MongoDB, which has a JavaScript interface for interacting with your data. So that's beneficial because it means less content switching, context switching for the developer, and less overall knowledge needed to get building a full stack applications. Somebody can learn JavaScript and immediately start writing full stack. Whereas if you're working in a traditional framework, you have to learn JavaScript, HTML, CSS, Ruby, Rails, SQL, or Java, Spring MVC, or PHP and Django, or whatever. But you have to know a whole lot of different things. So another advantage is that the data that's stored in the database is the exact same format and structure as needed on the client. This is your more traditional web application up here, where you'll make an Ajax call to the server that will be transmitted in JSON, which will then, on a Ruby on a Rails server, will be converted to Active Record. Active Record will then convert to SQL and issue the SQL queries against the relational database, which will then return its relational responses and convert those back to Active Record, which will then just be converted over to JSON and sent back across the wire to be consumed on the client side. Whereas if you're using Mongo and Node.js, you talk from the client JSON to the server JSON. You go from JSON to the server to the JSON to the database. JSON from the database back to the server, and then JSON on to the client to be consumed. So you're spending a lot less time marshaling data between different structures and moving it around so that it will fit. You just take it and pass it along. So schemaless, no migrations. Mongo is schemaless, and that means no migration files. There's no replication delays from migrating big tables. There's no special syntax to remember for doing your migrations. An entire aspect to building and maintaining an application is just gone. Many of the issues we have at work with MySQL have to deal with updating the schema. Most of our downtime is for schema updates. Our replication delays are because of schema updates. Working late for engineers are because of schema updates. And the most often reviewed and debated code for all of those reasons is schema updates. But schemas also provide some benefit. They are there to help define what the data will look like. Otherwise, you can just stick anything into the database anywhere, and you have no idea who's putting what in. So there are solutions to help out with that with Mongo. One of them is called Mongoose, and we'll talk about that in just a second. So using the Node.js Mongo driver directly in your application would be rather like using just JDBC to interact with the relational database directly, or handwriting SQL queries in Ruby. While there are times that you wanna drop down to those low levels and do that, we can learn from the successes of these other technologies and how they've abstracted away the raw interaction with the database. In the SQL world, this is done with an ORM, an object relational mapping. In Mongo, this can be done with an ODM, which is object document mapping, of which Mongoose is one. Mongoose also has the added benefit that in addition to just interacting with the database, you can use Mongoose to define your schema and require any documents being inserted into the database will have to follow the schema that you've set up. So we talked about not having a schema on the database being a benefit, but then why ever would you wanna write your schema in the application? Well, you're now moving a lot of your code that has to be deployed out to the database that is causing all these database issues separate from your application. And you're taking it and applying it into the application layer.  It also means that you can define your columns or equivalent your columns or records to fit any requirement that you can think of instead of having to go with the predefined column definitions that the database is provided. For example, you could require that phone numbers have to look like phone numbers when they're stored. You not have to convert it to numbers and then back out again or save it as a Varchar or whatever hack there is to store that. You can require that your data have the parentheses around the area code and have the dash. All right, so now let's take a look at an example SPA using Node.js and MongoDB keeping the same data format from the client to the database. So first I'm just going to start up Mongo here and take a look at what databases I have in Mongo. And there's a list of them, but you guys read that? Yeah, all right, the one we care about is SPA. I'm going to use SPA and look at the collections which are Mongo's equivalent of tables. Got a cars, model names, and users. The one we're going to use is users. So we're going to read dbusers.find. This is the equivalent of select star from users. And then you can even take it and say we want to make it look nice. All right, there we go. So here's our users stored in documents and JSON documents in the database. I've got the ID, the name, username, address, and password.  All right, it's listening. So there's our users and just this simple application here. I'm going to refresh the page. And you can see it made this Ajax call to list all the users. And it came back in exactly the same format as was stored in the Mongo database. Name, username, address, password, and two JSON documents. It's just passed on up here to the front end the same way. So if you want to take a look at a user, it made an Ajax call to users read and passed in the user ID, that's the Mongo ID. And you go to database, a little bit long query, so I'm just going to copy it. And make the same query, you just get the same JSON document. All it's doing is taking the JSON document directly out of the database and passing it up to the UI. So let's take a look at the code in the middle tier that makes this possible. So here's the code for the middle tier. This is what Node.js application looks like. Is there anybody here who's familiar with Node.js has used it in the past? Nope, all right. So all we're doing here is requiring a bunch of JavaScript files. These are basically the equivalent of the script tag on the client side. And then we're passing in some configurations. Oh, here's where we use Mongo's to connect to Mongo database. And here we're defining a user object or a user model. These down here are routes that are getting called that are going to match the URL that gets passed in up here or that gets passed in here. So this call is made to slash user slash read slash ID. And so users read ID gets called. And actually let me step into the user model here. So this is Mongo's and how it defines a schema for MongoDB. You just require the Mongoose script and call Mongoose.schema and pass in adjacent structure that defines how the schema is supposed to look. In this case, I just defined a bunch of strings. But what that does is it constrains so that if you try to save a user object and it has additional attributes, it just doesn't save them. So they don't get persisted to the database. So once you've got your Mongoose schema, you can then use Mongoose to define a model based off that schema called user and then we export it back to here. So that brings us back down to the route we have defined where we're just taking that user object. We're calling find by ID, which is a Mongoose built-in method that expects an ID and a callback function. The callback function gets called once Mongo responds and it gives you, if there's an error, it's the first parameter and if it's a success, it takes the document from Mongo and sends it back to you. Then we take the document response from Mongo and response.send, we just send it directly off to the client without doing any manipulation to it. Any questions there? Can I define? So, well, Mongo automatically puts ID fields on, well, underscore ID on all of its document. So you probably could define ID colon and then using Mongo, you can define how you want your IDs to look. In this case, I just went with the default ID formatting for Mongo, which is that long string. Any other questions? Okay. Let's see. I'm looking to use our back to JS. Mongoose is a module that you can add on to Node.js. It's built and maintained by a separate company. I think it's 0.8. What's that? It's under 1.0. Yeah, it's under 1.0 still. All right, so let's take a look at the client side to see what we're doing with that JSON document once it hits the client. So this is just jQuery here to line 10 here means on page load. We're gonna set a click event on all the elements with the class of name. That's these guys here, just the names. Now, when that click event is called, we're going to call the function show user, passing in the attribute from that node of the user ID attribute, which is this guy here. Let's just print it out as an attribute on that element. Show user takes that ID, makes an Ajax call to user slash read, and when he gets a response, it passes that response through this template function and then puts it directly into the HTML of the page. This template function, all we do is access those attributes that are passed back out of Mongo directly and build a table around them. And then we take that table here and just dot HTML, just sticks it into the page in the div with the ID of user. Okay, any questions about that? All right, so next I'm gonna show you something that I think is pretty cool and it's something that you can do with Node.js, particularly easy, which is using web sockets. Web sockets will end up locking up Apache-based applications because Apache uses threads instead of an event-based processing queue. Node.js is event-based processing by default. So when somebody makes a connection to it, if that connection is held open, it doesn't take Node much, if any, effort to maintain that connection. It's just listening for an event. And when an event comes down, then it actually goes and starts doing something. So we're gonna use the same application as before, but this time we'll add Socket.io node module to manage our web sockets and connections. Socket.io also brings backwards compatibility to browsers that haven't implemented web sockets and never will, like IE6. So let me just go back over here, JS. So now you can see in the log here that since we've got Socket.io on here, it logs out that, yes, Socket.io has started. Okay, so now, a little bit. Okay, sorry, I started the wrong application there. All right, so it started up. Let's open up Chrome, have it running, and let's open up Safari, same application. Now, what I'm gonna do is gonna add a user and you're gonna see Socket.io is going to push that new user to the other browsers who are just sitting there with an open web sockets connection, and they're not doing any polling, they're just sitting there with an open connection. So I'm gonna add user, user, and it just instantly updates on the other browsers. Go and delete, instantly deletes on the other browsers. So let me now show you how we've accomplished that. Let's see these guys down. So here's the same application we had before, but this time we've required the Socket.io and we've told it to listen to the server. Then we've got variable current users set to an array, and then every 100 milliseconds, we're telling it to call the watchMongo function. WatchMongo uses the same user object that we had before and does user.find and sorts all the results by name and ascending order, executes them, and then compares the length of the response with the length of current users. So if you've added or removed users, it's going to execute, it's gonna set current users to users to record the change, and then it's going to io.sockets.amit users. And that's just the syntax you use to io to push information up to the browser. Then on the client side, that's it. You've got this io.connect on users, and it tells it here this is the name of the socket to listen to, the user socket, and it was defined here. So we're emitting and reading from the same place. And then, oh, on app.js, this users, this is the same document that Mongo passed to us from the last time, so users.find, it's the response from that. And it's just getting pushed up via the socket instead of via an Ajax request. It comes through here, and then is passed through reload user list, which just writes out our user list using the same JSON document passed to us from Mongo. Okay, now I wanna have a little bit of fun with this and see if we can crash it. What I'm going to do is look and see my IP address on here, 215, and take my web application and tell it to listen on port 3000 on 215. I'm going to stop the application, run it again. Let me close Firefox and Safari and go there. All right, now guys that have laptops open, go to this address here and start adding users. It, yes. Oh, I'm sorry, IO, that comes with a script tag that you'll enter, it comes with a script tag from Socket IO, so it's a socket, it's not a native JavaScript thing, it comes with Socket IO. There we go, Peters added one. Well, as you can see, don't have to refresh anything, everybody's connecting to the Node.js server, adding things to MongoDB. I'm pulling MongoDB with Node.js. Yeah, I'm pulling, oh, is it? Okay, yeah, I don't think. Yeah, or if you could have MongoDB emit something saying I've updated it or, yeah. All right, well, it looks like my MacBook Air can handle this traffic just fine. All right, so that's all the time I have. So this is kind of just a little taste of this talk. I'm gonna continue with a couple of upcoming meetups. One at the Silicon Valley NoSQL Meetup Group on September 6th in Sunnyvale, and another one with the San Francisco MongoDB User Group in San Francisco on September 18th. You can check my blog at jsjoshing.com. And it has the updates and information about where I'll be speaking. And so what I'll additionally be showing there is how you can use Mongo to enforce other interesting constraints, like it's so you don't have to do just strings or you want it built into the database, but you can actually do anything, you can do a reject expression for, think about in order to constrain data being put into the database. And then I'm going to show the rest of the cred operations. We did read and list here, but I'll show you how to do updates, deletes, creates. And it's pretty much just the same kind of length of code that was there. And then we'll go into more detail on socket.io and how we used it to interact with MongoDB. Yep, questions? I haven't put it up there yet. I'll probably put it up on GitHub and on jsjoshing.com I'll let people know. Any other questions? Good question. So Google will actually spider single page applications if you use a hash bang when you're recording the path of the URL. So in the book we explain how we use a, drive the updates of a single page application through updating the URL and specifically the hash tag. So it's this portion. So a lot of times you'll see in single page applications what it'll do is they'll update something on the page and then they'll update the URL afterwards. But what you wanna do is have the portion after the URL actually execute the event that updates the page. So that way when you pass it around to somebody in email or your book market, the single page application will come and show this page and then it will execute what's in the hash tag. Google, when you have this hash bang here instead of just the hash tag, you're telling Google I want you to spider this. Go ahead and execute this JavaScript, change the stuff on, well, doesn't execute the JavaScript. You on the server side have to accept this request and return a page that you get to format how you want to. Right, but you get the additional advantage of you get to tailor that page to exactly what you want it to look like for Google. So all you do is you dump in one image in there, whatever the top image you want to show on Google is and then a bunch of SEO optimized text. And then when somebody goes to the Google search engine and clicks on that link, it brings them to this page with the hash tag, with the hash bang and it actually opens what you, what the person should be seeing instead of Google. I'm sorry, can you ask again? So sometimes I mean it's easy to see on how it's scale, I think it's getting to the point where it scales quite well. We've got, especially if you're using Mongo as your back end and you can use Mongoose as your ODM because then you can define models like you normally could but if you're using a relational database, I don't know of an ORM personally that works as well as like ActiveRecord does for Ruby on Rails. So you're back to writing a lot of your SQL code by hand. So it's just like if you didn't have hibernate or I betus for Java and you just had to write raw SQL queries. So Node.js is maturing as a language and in some places it works very well and I think one of those is with MongoDB and Mongoose. For Node.js, the LinkedIn mobile app. The LinkedIn's mobile app is built in Node.js. LinkedIn? LinkedIn? Yeah. LinkedIn. So you mean it's written in Node.js? Yeah, they're mobile applications written entirely in Node.js. Uh huh.  Did it for me. We're going to do 100 developer rich UI applications. Uh huh. We're going to push back and get our, from our Java developers, there's a Clips and our .NET developer where you use Visual Studio's development tools to bugging and also to bridge this up and find available in Java search right now. Uh huh. And you kind of speak to how those things are maturing for a gap to learn. Sure, there's an IDE called WebStorms which is new that is proven very popular. But of course it being a newer environment, it's not going to be as well developed to say Clips or IntelliJ are. But I found I don't need it. Like when I'm programming in Java, I absolutely need an IDE to help autocomplete and tell me what all these things are and be able to follow code around. And I just haven't needed that myself when working with it. And it's definitely a young ecosystem but I think the ecosystem has been ramping up rather quickly. Even quicker than Ruby on Rails ecosystem is ramped up. And that's because of the popularity of being able to develop one language across the entire stack. Eclipse and IntelliJ for example are very good at developing in Java but even with their plugins it really sucks developing JavaScript in them. So even they only handle a portion of what you're writing and talking about. For user interfaces, well then you're reliant on the user interfaces that are the code that's written for the client. So then you're talking about there's jQuery UI, jQuery mobile, you could do dojo or extjs on the front end at work for our enterprise application or using extjs because it has widgets for everything you can think of. So you just have to be selective about what you're going to be developing it and on the client side. All right, any more questions? All right, great. Thanks for coming everyone. Thank you.