This is exactly what I need to implement deep link Sharing. Btw your channel should put all these boot camps out of business. I tried a part time boot camp before and walked out of there with a few terms I didn’t understand, no idea how to build an iOS app (they never even went over git or tableViews), and $3k in debt -a big complete waste of money. I’ve learned enough from you to be able to build 3 fully functional apps and I’m working on 2 more. Your free courses and paid courses are top notch! Thanks!
Honestly man, like you really don’t know how much you do for self taught devs, especially people who like me who want to launch their own startups (I’m not interested in a job). In 2015 I learned Swift via teamtreehouse but the course after that sucked. Then I learned how to start building tableViews via Lynda but after that course I was pretty much stuck. From there I got an iOS development book from Apress which was the holy grail for me and really got me going but that was the fundamentals on how to build different components (still a fantastic book). This all 2015. Where I’m going with this is I’ve tried a ton of things to learn but there is **nothing** that I came across that teaches someone the intricacies involved in building a fully functional app. Your courses are on another level. Your not going to find How to Build Instagram in any book, moocs, boot camp, or school especially with the level of detail you put into it. When they have those UA-cam awards they should give you one -every year, lol. If we could nominate you I’m sure all of your students would. I tip my hat to you sir 🎩 ✌🏿✌🏿
Nice one Brian. FYI. If anyone is using Eslint in their code and are having any issue getting the ID's to show (i.e. at 28:08), when you write the filter return "p.id === postId" ESlint will have you use the strict equality operator '==='. If you look at the postId const "const postId = req.param('postId')" postId is a string, so using the strict equality operator is expecting the id's to be strings. In the dummy DB example, the id's are numbers. So just make the id's strings and all should be good. Or... just ignore Eslint and use the equality operator as Brian is using (==) and things will still work. FYI. Good one Brian again.
your are always the best Brain I purchased the full course to support you making more and more full project courses like these! Keep it up and well done I love the idea and I hope you extend this course with notifications and then media communication SNAP or Instagram like mode! if possible show how to convert this course into SwiftUI in next courses.... Always your biggest fan from Saudi Arabia! :D
Great one Brian!. Thanks for teaching us a new framework. express js seems to be easy to pick up things and learn the features of the backend like routing, etc in detailed...but sails seem to be way easier since the boilerplate code is already available to code instead of managing everything by fragmenting into different files. I started with express but I wish I could've started with sails. waiting for more videos! :D
I feel the exact same way, thinking that Express was a good solution to build out an entire app. However after building out the routing and authentication layer myself, I found my entire codebase extremely scattered and painful to look at. Enforcing some structure through Sails is going to be extremely helpful for coding and learning.
jmon24ify i like nestJs too, but feel much more confident working with adonis. probably because I have experience using frameworks like ruby on rails and laravel.
@@ijazkhan3335 I chose Nest because of it's similarity between Angular, CakePhp and Symfony plus it has comes with Typescript built-in. But I like Adonis more because of how similar it is to Laravel. I've been using Laravel for years and its the only Php framework I recommend. Thanks to your comment, I realized there is a node version of Laravel which makes me want to scrap the API I am building, and rebuild it in Adonis.
I just discovered your channel and I like what I see so far. But I have a question does your app work on Android phones/tablet aside from iOS based devices?
Of course this course start with a dummy database to quick things up, but as more data is added, parsing the whole collection of posts will add execution time to the application. A more proper way to do it is to point at the data via a key in the collection with the key array notation (collection[id]). With this notation, the JavaScript interpreter reference directly to your object and while not parse the whole array. So the array also will not be just ordered like 0, 1, 2, 3, but will have the real identifiers of the objects as keys. In real database situation with UUID/GUID and databases indexes to speed data access the whole optimization make a lot of sense! Also the GET request with the url params to create the posts is really not to show even for demo purposes. I really understand that this is for demo purpose but a lot of people will not understand the gravity of doing this as they are maybe not familiar with HTTP protocol and the meaning behind it: the whole data is visible while it transit the internet. The correct way to do it is a POST request encapsulated with a TLS layer of protection (HTTPS), yes of course not easy to show in a quick course, but a simple POST request from a GUI client like POSTMAN/INSOMNIA or even HTTPIE/CURL in command line would have be more serious to show. I like your formula tho I'm waiting for the next episodes!
Indeed, I normally don’t introduce advance concepts all in one lesson. It takes quite a bit of experience to learn all of this stuff and have it make sense. I prefer handhold one new concept at a time, don’t want to overwhelm the newer folks here.
thanks for the free coruse. one question, isn't it better to put our backend on aws/firebase and just add these functions/requests onto the firebase cloud functions? it accomplishes the same thing right? just that you dont have to keep ur machine running 24/7
@@LetsBuildThatApp From the structure, I think express-generator is simpler than sails and express-generator does come with Morgan, but I've never used sails. I'll take a look on it. Thanks
Managing all the files and routing yourself with Express will make you go crazy. Sails is very opinionated and force strict rules on you, which is good for beginners. Sails does a good job implementing similar behavior to Rails and Laravel, comes with a simple ORM and user auth. I don't want to bore everyone with details when using Express.
Remember, javascript by default passes values by reference. Array.prototype.push modifies the original array. Create a copy of the original array first, and update after modifying the copy by using concat: const tmp = [...allPosts, newPosts]; allPosts = tmp;
Khawar Ali For the life of me I don’t know why you would want to return that many records at once. But if you must, you would want to STREAM that data instead of using any of the array functions or for loops. You can google the Stream API.
@@MrBlaq, thanks for your reply, thanks to you I learn a new thing(Stream API). sorry for the misunderstanding, my question was if we have a large array and we want to add a new item in it. Instead of copying a complete array and then concatenating the new item, what else we can do to prevent copying complete array.
@@khawaraliShah In javascript, the states of arrays and objects are mutable. Strings and numbers are immutable. Immutability means the following: 1) You create a string variable 2) You decide to modify said string variable 3) The modified value is allocated to a NEW BLOCK OF MEMORY 4) The previous block of memory occupied by the initial string value is now release and prepped for the Javascript engine's garbage collector. Modifying the values and properties of objects and arrays DOES NOT move that object to a new block of memory, it stays in that same block of memory until you replace the object entirely. Therefore in javascript you SHOULD make a copy of the object/array, perform your modifications, and then replace it. This is fairly simple... const obj = { name: 'mutable', arr: [{prop: "foo"},{prop:"bar"}], } const tmp = JSON.parse(JSON.stringify(obj.arr)).map( ( x,i ) => { x.index = i; return x }); obj.arr = tmp; Now, you don't have to follow the practice above, there's absolutely nothing stopping you from doing obj.arr = obj.arr.map( ( x,i ) => { x.index = i; return x }); Just be aware that if you assign obj to another variable, that variable will also be changed in unexpected ways, Note: map and filter and reduce will create a new array from an array of primitives. If you use those functions on an array of objects/nested objects, the references to the objects will remain unchanged, which is why you want to always "deep copy" the array as seen above with JSON.parse(JSON.stringify(object)). Keep in mind that JSON.stringify will remove all functions from an object. There are other deep copy functions that retain setters, getters and custom functions like jQuery.extend. Bonus: add the following link to your Javascript syllabus: github.com/30-seconds/30-seconds-of-code
i get so many swiggly lines, when writing functions in the controller in vs code. when i compile and run everything seems ok and i dont get any errors. But in my vs code, there are so many swiggly lines. :(
Hi Brian, first of all I would like to thank you for your lessons and also i am participant of your webpage. But I would like to share a problem with your paid courses. I am from Turkey and I want to buy any of your paid courses because they are great. But right now in my country the currency of 1$ is equal 5.75 Turkish lira which means (if I buy 90$ paid course means 518 Turkish lira also it equals 7/1 of my monthly salary). There has been too many courses in the udemy that I already completed but udemy makes currency depends on native currencies basis on only numbers. I mean 24$ is equal 24 Turkish lira btw I don't exactly know what is their sales policy but it is almost like this. I mean they provide convenience. I like your courses and i already completed too many of them and I still watch your lessons because every time I learn new things and also watching your live streaming is fun. But please provide convenience on your paid courses because I want to buy them, I want to learn them. If you will not make this, please make something for me because i really want to buy and learn them. Thanks and best regards. Also please add a feedback section or message posting section to your web page for any of your webpage participants can reach you, in the mean time I only reached you from here.
Khawar Ali Your modification is technically not wrong, but === (strict) is preferred since it checks for value and type. == (equality) only checks for value. == won’t work if you want to compare truthy/falsey values to primitive Bools
Interesting, never really looked into gRPC but looks like good advancement for the future. NodeJS is a good solution for beginners, even google uses it for their Firebase custom solutions. For anyone that is wondering, I always try to target the easiest solutions out there and let students decide on their own after they get their fundamentals down.
What the hell is happening these days ? You can’t even stick to one technology cause the other is more interesting !! I guess it’s better to look for managerial roles than to get drown in the ocean of new tech and constant updating.. Cause this is not the only struggle in life !! I have family , friends , bills , mortgage , savings , kids to take care .. so freaking confused !!
Welcome to the world of being a software engineer, you get paid $150k/yr to do this so you don't have to worry about bills/mortgage/savings. It's definitely a trade-off you should seriously consider as its a path that isn't meant for everyone.
@@LetsBuildThatApp yeah i totally agree with you. Well thanks a lot for the reply. having weighed some pros and cons gotta make some tough decisions that are permanent, cause I am really tired going with this back and forth .. :) :)
There's something really satisfying about JSON and seeing it flow into applications.
This is the best channel on UA-cam. This guys simply rocks and genuinely want to share his knowledge.
Can't say how much I'm thankful, the amount of knowledge and value of this is just amazing!
Haven’t seen anyone create this as a tutorial ... fantastic content as usual ... I’m in 👍
This is exactly what I need to implement deep link Sharing.
Btw your channel should put all these boot camps out of business. I tried a part time boot camp before and walked out of there with a few terms I didn’t understand, no idea how to build an iOS app (they never even went over git or tableViews), and $3k in debt -a big complete waste of money.
I’ve learned enough from you to be able to build 3 fully functional apps and I’m working on 2 more.
Your free courses and paid courses are top notch! Thanks!
Boot camps and universities are a big waste of money now that we have great online educators.
Honestly man, like you really don’t know how much you do for self taught devs, especially people who like me who want to launch their own startups (I’m not interested in a job). In 2015 I learned Swift via teamtreehouse but the course after that sucked. Then I learned how to start building tableViews via Lynda but after that course I was pretty much stuck. From there I got an iOS development book from Apress which was the holy grail for me and really got me going but that was the fundamentals on how to build different components (still a fantastic book). This all 2015.
Where I’m going with this is I’ve tried a ton of things to learn but there is **nothing** that I came across that teaches someone the intricacies involved in building a fully functional app. Your courses are on another level. Your not going to find How to Build Instagram in any book, moocs, boot camp, or school especially with the level of detail you put into it.
When they have those UA-cam awards they should give you one -every year, lol. If we could nominate you I’m sure all of your students would.
I tip my hat to you sir 🎩
✌🏿✌🏿
This was really impressive. I don't think anyone else is doing this. Good stuff.
Great! Full stack application for web and iOS. I love it!! Thank you Brian..!
Nice one Brian.
FYI. If anyone is using Eslint in their code and are having any issue getting the ID's to show (i.e. at 28:08), when you write the filter return "p.id === postId" ESlint will have you use the strict equality operator '==='.
If you look at the postId const "const postId = req.param('postId')" postId is a string, so using the strict equality operator is expecting the id's to be strings. In the dummy DB example, the id's are numbers. So just make the id's strings and all should be good.
Or... just ignore Eslint and use the equality operator as Brian is using (==) and things will still work.
FYI.
Good one Brian again.
You can wrap the id like this` Number(req.param("Id"))` then use the "===" to check
@@damilareemmanuel Yep. That also works.
I’ve been looking for them all around udemy but here I am again😁 Thank you very much for creating these tutorials. You are a true Samaritan🙏🙏
I dont mind a long video from your channel. The longer the merrier ! ⭐️ 🌟 ✨
Thanks Brain! Been learning js and node js the past few weeks great to have my favorite teacher now teaching it.
Great content. Everyone should be thankful this is free! This is better than any course on Udemy.
your are always the best Brain I purchased the full course to support you making more and more full project courses like these! Keep it up and well done I love the idea and I hope you extend this course with notifications and then media communication SNAP or Instagram like mode! if possible show how to convert this course into SwiftUI in next courses.... Always your biggest fan from Saudi Arabia! :D
Proud to be 2bd viewer Prof Brian ❤️❤️❤️
i have been looking for this type of tutorial for weeks thank you
Excited for the next 6 videos.
Thanks Brian!
Great one Brian!. Thanks for teaching us a new framework. express js seems to be easy to pick up things and learn the features of the backend like routing, etc in detailed...but sails seem to be way easier since the boilerplate code is already available to code instead of managing everything by fragmenting into different files. I started with express but I wish I could've started with sails. waiting for more videos! :D
I feel the exact same way, thinking that Express was a good solution to build out an entire app. However after building out the routing and authentication layer myself, I found my entire codebase extremely scattered and painful to look at. Enforcing some structure through Sails is going to be extremely helpful for coding and learning.
Really great. Could you make a video about the way to configuration environment between Development and Production?
Glad you are calling it My Journal, instead of making it another "how to build a blog with node & express" course. Making it a bit unique haha.
Indeed, by the way did you ever get my response to your email?
Lets Build That App yeah! I thought I replied to it maybe I never hit send and it’s a draft.
The sample project implements good state management, maybe I'll do a course on that type of architecture in the future.
Great video cause i understood everything u said even after I don't know a bit about node and backend.
I’m so excited to start this tomorrow!
very nice Brian,I was waiting for this
Hi Brian.
I have not done Jason. Please can you make a video on store application and create as well.
Look forward your Jason video.
Thanks
Toan
Thanks man
SailsMVC seems a great framework, I cannot wait to see you connect it to database.
AdonisJs is much better. Try it instead.
@@ijazkhan3335 I wish I knew about Adonis before getting into Nest because Adonis. I like Nest but Adonis looks much better.
jmon24ify i like nestJs too, but feel much more confident working with adonis. probably because I have experience using frameworks like ruby on rails and laravel.
@@ijazkhan3335 I chose Nest because of it's similarity between Angular, CakePhp and Symfony plus it has comes with Typescript built-in. But I like Adonis more because of how similar it is to Laravel. I've been using Laravel for years and its the only Php framework I recommend. Thanks to your comment, I realized there is a node version of Laravel which makes me want to scrap the API I am building, and rebuild it in Adonis.
I just discovered your channel and I like what I see so far. But I have a question does your app work on Android phones/tablet aside from iOS based devices?
Fantastic! This was the one worth waiting for 🎉🎉👍🏻
Of course this course start with a dummy database to quick things up, but as more data is added, parsing the whole collection of posts will add execution time to the application. A more proper way to do it is to point at the data via a key in the collection with the key array notation (collection[id]). With this notation, the JavaScript interpreter reference directly to your object and while not parse the whole array. So the array also will not be just ordered like 0, 1, 2, 3, but will have the real identifiers of the objects as keys. In real database situation with UUID/GUID and databases indexes to speed data access the whole optimization make a lot of sense! Also the GET request with the url params to create the posts is really not to show even for demo purposes. I really understand that this is for demo purpose but a lot of people will not understand the gravity of doing this as they are maybe not familiar with HTTP protocol and the meaning behind it: the whole data is visible while it transit the internet. The correct way to do it is a POST request encapsulated with a TLS layer of protection (HTTPS), yes of course not easy to show in a quick course, but a simple POST request from a GUI client like POSTMAN/INSOMNIA or even HTTPIE/CURL in command line would have be more serious to show. I like your formula tho I'm waiting for the next episodes!
Indeed, I normally don’t introduce advance concepts all in one lesson. It takes quite a bit of experience to learn all of this stuff and have it make sense. I prefer handhold one new concept at a time, don’t want to overwhelm the newer folks here.
@@LetsBuildThatApp you are the GOAT.
Amazing tutorial!
thanks Brian ! it was so clear explanation . Like it so much
Great job Brian
Hi Brian. Thnaks a lot for crezting free content to us; What makes you choose Visual studio instead of Atom or other IDE?
big thanks - very clear and very interesting
Thank you Brian great tutorial
Hey, for opening folder project in vscode from terminal, u can use 'code .' command
This is only true if you install the code extension.
Thank's forever..Best of luck..
Cool Video Brain
Mr. Donald Trump, the best President of United States.
Do you think Sails is better than Django? I see automatic API generation is a plus and socket, too. What Sails can't do which Django can except admin?
thanks for the free coruse. one question, isn't it better to put our backend on aws/firebase and just add these functions/requests onto the firebase cloud functions? it accomplishes the same thing right? just that you dont have to keep ur machine running 24/7
Most businesses have many servers running in the cloud, you have to ask why this is.
Awesome
Great tutorial. I've been trying to make the same thing using express-generator. Can I hear your thoughts between sailsMVC and express-generator?
Never used express-generator myself, is it easier than SailsMVC?
@@LetsBuildThatApp From the structure, I think express-generator is simpler than sails and express-generator does come with Morgan, but I've never used sails. I'll take a look on it. Thanks
Yeah probably very similar, sails enforced strict rules which is good for beginners.
Is there any specific reasons for choosing Sails over Express? What is the most popular nodejs frameworks in production?
Managing all the files and routing yourself with Express will make you go crazy. Sails is very opinionated and force strict rules on you, which is good for beginners. Sails does a good job implementing similar behavior to Rails and Laravel, comes with a simple ORM and user auth. I don't want to bore everyone with details when using Express.
Remember, javascript by default passes values by reference. Array.prototype.push modifies the original array. Create a copy of the original array first, and update after modifying the copy by using concat:
const tmp = [...allPosts, newPosts];
allPosts = tmp;
Good old JavaScript, I’ll probably make more oversights like this along the way.
what if the array contains millions of items? what would be a good solution in that case?
Khawar Ali For the life of me I don’t know why you would want to return that many records at once. But if you must, you would want to STREAM that data instead of using any of the array functions or for loops. You can google the Stream API.
@@MrBlaq, thanks for your reply, thanks to you I learn a new thing(Stream API). sorry for the misunderstanding, my question was if we have a large array and we want to add a new item in it. Instead of copying a complete array and then concatenating the new item, what else we can do to prevent copying complete array.
@@khawaraliShah In javascript, the states of arrays and objects are mutable. Strings and numbers are immutable. Immutability means the following:
1) You create a string variable
2) You decide to modify said string variable
3) The modified value is allocated to a NEW BLOCK OF MEMORY
4) The previous block of memory occupied by the initial string value is now release and prepped for the Javascript engine's garbage collector.
Modifying the values and properties of objects and arrays DOES NOT move that object to a new block of memory, it stays in that same block of memory until you replace the object entirely. Therefore in javascript you SHOULD make a copy of the object/array, perform your modifications, and then replace it. This is fairly simple...
const obj = {
name: 'mutable',
arr: [{prop: "foo"},{prop:"bar"}],
}
const tmp = JSON.parse(JSON.stringify(obj.arr)).map( ( x,i ) => {
x.index = i;
return x
});
obj.arr = tmp;
Now, you don't have to follow the practice above, there's absolutely nothing stopping you from doing
obj.arr = obj.arr.map( ( x,i ) => {
x.index = i;
return x
});
Just be aware that if you assign obj to another variable, that variable will also be changed in unexpected ways,
Note: map and filter and reduce will create a new array from an array of primitives. If you use those functions on an array of objects/nested objects, the references to the objects will remain unchanged, which is why you want to always "deep copy" the array as seen above with JSON.parse(JSON.stringify(object)). Keep in mind that JSON.stringify will remove all functions from an object. There are other deep copy functions that retain setters, getters and custom functions like jQuery.extend.
Bonus:
add the following link to your Javascript syllabus: github.com/30-seconds/30-seconds-of-code
i get so many swiggly lines, when writing functions in the controller in vs code. when i compile and run everything seems ok and i dont get any errors. But in my vs code, there are so many swiggly lines. :(
Hi! do you have a full Sails MVC course?
Yes there is a full sails course in the description below.
Thank you brother!
A little less reverb would be good (:
Hi Brian, first of all I would like to thank you for your lessons and also i am participant of your webpage. But I would like to share a problem with your paid courses.
I am from Turkey and I want to buy any of your paid courses because they are great. But right now in my country the currency of 1$ is equal 5.75 Turkish lira which means (if I buy 90$ paid course means 518 Turkish lira also it equals 7/1 of my monthly salary). There has been too many courses in the udemy that I already completed but udemy makes currency depends on native currencies basis on only numbers. I mean 24$ is equal 24 Turkish lira btw I don't exactly know what is their sales policy but it is almost like this. I mean they provide convenience.
I like your courses and i already completed too many of them and I still watch your lessons because every time I learn new things and also watching your live streaming is fun. But please provide convenience on your paid courses because I want to buy them, I want to learn them.
If you will not make this, please make something for me because i really want to buy and learn them.
Thanks and best regards.
Also please add a feedback section or message posting section to your web page for any of your webpage participants can reach you, in the mean time I only reached you from here.
ES6 proper: const filteredPosts = allPosts.filter( p => p.id === postID )
not === but ==
like
const filteredPosts = allPosts.filter( p => p.id == postID )
Khawar Ali Your modification is technically not wrong, but === (strict) is preferred since it checks for value and type. == (equality) only checks for value. == won’t work if you want to compare truthy/falsey values to primitive Bools
awesome
Getting errors without semicolons..
Nice vid
Which is Best Course according to you and Why ? ...CS Vs SE
When we should use this custom solution (instead of ready made cross platform development solutions like react native)?
Hmmm....companies use 10 different technologies for their stack, or whatever gets the job done. I suggest you do some more research.
@@LetsBuildThatApp yes you are right, I should do more research.
VERY WELL.
I smell SwiftUI in iOS app :)
i really want to know why you are not create your own Apps like that Fb, Twitter , amazon and etc.. ?
Haha maybe someday I will. Maybe LBTA will be a giant platform someday.
Why node js not swift vapor or other swifty solutions ;)
Have you tried vapor? Thing is a nightmare.
Android Kotlin or java?
Love that Accent thing Brian. Keep it up
We all know you stopped the video because the cops was coming for you lol
Then sirens be loud
Lets Build That App lol keep up the good content bro your videos are absolute golddddd will be purchasing the course as soon as I get paid 💯
NestJS is just as good as sails check it out!
You should use Golang and gRPC. It is NOT good idea to use Nodejs and http protocol
Interesting, never really looked into gRPC but looks like good advancement for the future. NodeJS is a good solution for beginners, even google uses it for their Firebase custom solutions. For anyone that is wondering, I always try to target the easiest solutions out there and let students decide on their own after they get their fundamentals down.
“Brian’s-iMac:~”
Kind of feel like it’s not an iMac
It’s gonna be a new MacBook when it finally comes out
Dig it
The injection of the british accent is tool-y my man. Why though?
Hey How to learn AI ? Which languages are used to AI ....
Math, mostly python or c++
@@dilsmatchanov thanks Bro . 😊
What is this british accent? Are you ok?
Please stop the British accent thing...
Yes masta
What the hell is happening these days ? You can’t even stick to one technology cause the other is more interesting !!
I guess it’s better to look for managerial roles than to get drown in the ocean of new tech and constant updating..
Cause this is not the only struggle in life !! I have family , friends , bills , mortgage , savings , kids to take care .. so freaking confused !!
Welcome to the world of being a software engineer, you get paid $150k/yr to do this so you don't have to worry about bills/mortgage/savings. It's definitely a trade-off you should seriously consider as its a path that isn't meant for everyone.
@@LetsBuildThatApp yeah i totally agree with you. Well thanks a lot for the reply. having weighed some pros and cons gotta make some tough decisions that are permanent, cause I am really tired going with this back and forth .. :) :)
British accent :D