THE PROTON GUY
THE PROTON GUY
  • 128
  • 359 719
Django Email Authentication | Login With Email & Password
In this video, I explain how to authenticate and login users with their emails and passwords
******** Socials ********
Discord: discord.gg/hhqtG4jp
Patreon: www.patreon.com/THEPROTONGUY
Linkedin: linkedin.com/in/ayodeji-adesola-15392a22b
Instagram: the_proton_guy
Telegram channel: t.me/sO6ZFOaiaMszYzI0
Twitter: AyodejiAdesola_
#WebDevelopment #Python #ChatApplication #DjangoTutorial #DjangoFramework #PythonWebDevelopment #RealTimeChat #WebSocketTutorial #DjangoChatApp #CodingTutorial #PythonProgramming #WebSocketsInPython"
มุมมอง: 285

วีดีโอ

Django Authentication | User Signup, Login, & Password Reset | 2024
มุมมอง 4.1K3 หลายเดือนก่อน
We dive into Django authentication and walk you through the essential features for managing user accounts. This video covers everything you need to know about: User Registration, User Login, User Logout, Forgot Password, Password Reset Code Project code: github.com/TheProtonGuy/DjangoFullAuth Required files(HTML & CSS): github.com/TheProtonGuy/DjangoFullAuth/tree/main/resources/required files T...
Live Watch Party Movie Streaming Site Demo with Django Channels - Get the Source Code
มุมมอง 663 หลายเดือนก่อน
Purchase source code: www.patreon.com/THEPROTONGUY/shop/fullstack-movie-streaming-website-and-93557?Link& Full video Demo: th-cam.com/video/3TDSP6EsiRA/w-d-xo.html 🍿 Key Features: 🌟 Handle Vast Movie Library: Dive into a vast collection of movies, spanning genres from action and drama to sci-fi and classics. 🎥 Seamless Streaming: Experience smooth streaming with our intuitive video player, deli...
Customizing Django Admin Dashboard With Jazzmin | 2024
มุมมอง 3.8K3 หลายเดือนก่อน
In this video, I will teach you how to customize the django admin dashboard using jazzmin. Jazzmin documentation: django-jazzmin.readthedocs.io/ Socials Discord: discord.gg/hhqtG4jp Patreon: www.patreon.com/THEPROTONGUY Linkedin: linkedin.com/in/ayodeji-adesola-15392a22b Instagram: the_proton_guy Telegram channel: t.me/sO6ZFOaiaMszYzI0 Twitter: AyodejiAdesola_ #djangop...
Deploy Django Project & Postgresql Database to Render for Free | 2024
มุมมอง 4K5 หลายเดือนก่อน
In this tutorial, I'll guide you through the process of deploying a Django project to Render, a powerful cloud platform for hosting web applications. You'll learn step-by-step how to set up your Django project, configure environment variables securely using python-decouple, and deploy it to Render with automatic deployments. By the end of this video, you'll have your Django application up and r...
Signup and Login System with PHP and Mysql | PHP Authentication | 2024
มุมมอง 1.8K7 หลายเดือนก่อน
Discover how to implement secure user authentication in PHP with our tutorial. From login to logout and signup, learn the essential steps to create a robust system. Perfect for beginners and experienced developers alike, this guide will equip you with the skills to enhance your PHP projects securely and efficiently. Get code on github: github.com/TheProtonGuy/PhpAuthenticationSystem Starter fil...
Deploy Django Web App With SSL to VPS with Nginx & Gunicorn | Full Tutorial 2024
มุมมอง 7K8 หลายเดือนก่อน
Welcome to this comprehensive guide on deploying Django applications on an Ubuntu VPS, utilizing Nginx and Gunicorn. This step-by-step tutorial will walk you through the entire process, from setting up your VPS to configuring Nginx and Gunicorn for optimal performance. Readme(server config): github.com/TheProtonGuy/server-configs Download putty: www.putty.org/ Don't forget to like, share, and s...
C Programming For Beginners | Full Course 2024
มุมมอง 6588 หลายเดือนก่อน
Embark on an enlightening journey through the realm of C programming with this comprehensive course! Whether you're a beginner eager to grasp the fundamentals or an experienced coder seeking to deepen your knowledge, this course is designed to cater to all skill levels. TIMESTAMPS 0:00 Intro 0:08 Mac setup for C 3:42 Windows setup for C 6:40 Hello world 9:56 What are variables? 18:35 Variable n...
24. Pointers & Memory Addresses in C | C Programming For Beginners
มุมมอง 138 หลายเดือนก่อน
🔗 Mastering Pointers in C | Your Gateway to Efficient Programming! 🔗 Welcome back! 💻 Today, we're delving deep into the dynamic world of Pointers in C - a fundamental concept that unlocks the full potential of efficient and powerful programming. 🔍 Explore the basics of pointers, demystifying how they store and manipulate memory addresses. 🚀 Learn how pointers enhance code efficiency, enabling d...
23. Memory Addresses in C | C Programming For Beginners
มุมมอง 78 หลายเดือนก่อน
🔍 Demystifying Memory Address Pointers in C | Unlocking the Secrets of Efficient Programming! 🔍 Welcome back! 💻 In today's tutorial, we're diving deep into the world of Memory Address Pointers in C - a crucial concept that empowers you to manage and optimize memory usage in your programs. 🧠 Explore the fundamentals of pointers, understanding how they store and manipulate memory addresses. 🚀 Lea...
22. 2 Dimensional Arrays in C | C Programming For Beginners
มุมมอง 138 หลายเดือนก่อน
🔍 Unraveling the Magic of 2-Dimensional Arrays in C | Programming Mastery Unleashed! 🔍 Welcome back ! 💻 Today, we're delving into the powerful realm of 2-dimensional arrays in C - a game-changer when it comes to organizing and manipulating data in your code. 🌐 Explore the concept of 2D arrays, breaking down how rows and columns come together seamlessly. 🚀 Learn the syntax and mechanics behind c...
21. For Loops in C | C Programming For Beginners
มุมมอง 38 หลายเดือนก่อน
🚀 Mastering 'For' Loops in C | Elevate Your Programming Game! 🚀 Welcome back 💻 Ready to take your C programming skills to new heights? In this tutorial, we're diving into the dynamic world of 'do-for' loops - a powerful combination that brings efficiency and precision to your code. 🔄 Explore the synergy of 'for' loops for dynamic and controlled repetition. Learn the syntax and application of '...
20. Do While loop in C | C Programming For Beginners
มุมมอง 138 หลายเดือนก่อน
🔄 Unleashing the Power of Do-While Loops in C | C Programming Tutorial 🔄 Welcome back! 🚀 Today, we're delving into the dynamic world of 'do-while' loops in C - your secret weapon for handling repetitive tasks with style. 🔄 Learn the ins and outs of 'do-while' loops and how they differ from other loop structures. 🔍 Understand the unique syntax that makes 'do-while' loops a versatile tool in your...
19. While Loops in C | C Programming For Beginners
มุมมอง 128 หลายเดือนก่อน
"🔄 Mastering While Loops in C | C Programming Tutorial 🔄 Welcome back! 🚀 Ready to conquer the world of loops in C? In our latest tutorial, we're diving deep into the 'while' loop, a fundamental construct for repetitive tasks in your code. Learn the basics of 'while' loops and their syntax. 🔄 Understand how to control the flow of your program with loop conditions. 💡 Explore practical examples a...
18. Structs in C | C Programming For Beginners
มุมมอง 558 หลายเดือนก่อน
"🌟 Unlocking the Power of Structs in C 🌟 Welcome back! 🚀 Ready to take your C programming skills to the next level? In our latest tutorial, we delve into the fascinating world of structs. 🏗️ Learn the fundamentals of structs and how they enhance your code structure. 🤔 Understand how to organize related data for cleaner and more efficient programs. 🔧 Dive into practical examples that showcase th...
17. Switch Statements in C | C Programming For Beginners
มุมมอง 108 หลายเดือนก่อน
17. Switch Statements in C | C Programming For Beginners
14. Return Statement in C | C Programming For Beginners
มุมมอง 248 หลายเดือนก่อน
14. Return Statement in C | C Programming For Beginners
I Built a Movie Streaming Website & API With Django For You…
มุมมอง 1.1K10 หลายเดือนก่อน
I Built a Movie Streaming Website & API With Django For You…
[FIX] [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer cert
มุมมอง 5K10 หลายเดือนก่อน
[FIX] [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer cert
Build Realtime Chat App with Django Channels & Web Sockets
มุมมอง 12K11 หลายเดือนก่อน
Build Realtime Chat App with Django Channels & Web Sockets
Deploy a Django Web App to Amazon EC2 Instance | 2024
มุมมอง 15Kปีที่แล้ว
Deploy a Django Web App to Amazon EC2 Instance | 2024
Django Paypal Payment Integration in 30 Minutes
มุมมอง 12Kปีที่แล้ว
Django Paypal Payment Integration in 30 Minutes
Token Authentication with Django REST Framework | 2023
มุมมอง 3.6Kปีที่แล้ว
Token Authentication with Django REST Framework | 2023
Build an API With Django REST Framework | Full Tutorial | 2024
มุมมอง 10Kปีที่แล้ว
Build an API With Django REST Framework | Full Tutorial | 2024
16. Operators | C Programming For Beginners
มุมมอง 50ปีที่แล้ว
16. Operators | C Programming For Beginners
15. If Statements | C Programming For Beginners
มุมมอง 21ปีที่แล้ว
15. If Statements | C Programming For Beginners
13. Functions | C Programming For Beginners
มุมมอง 27ปีที่แล้ว
13. Functions | C Programming For Beginners
12. Arrays | C Programming For Beginners
มุมมอง 37ปีที่แล้ว
12. Arrays | C Programming For Beginners
11. Getting User Input | C Programming For Beginners
มุมมอง 30ปีที่แล้ว
11. Getting User Input | C Programming For Beginners
10. Constant Variables | C Programming For Beginners
มุมมอง 24ปีที่แล้ว
10. Constant Variables | C Programming For Beginners

ความคิดเห็น

  • @abhishekpangeni6978
    @abhishekpangeni6978 13 ชั่วโมงที่ผ่านมา

    Most underrated video Thanks man.

    • @the_proton_guy
      @the_proton_guy 12 ชั่วโมงที่ผ่านมา

      You are welcome 🎉

  • @MicroXel
    @MicroXel วันที่ผ่านมา

    Thanks for this video bro. I am curious, is this safe to use in production or we should go for a library that does that? I learnt token authentication is the best

    • @the_proton_guy
      @the_proton_guy วันที่ผ่านมา

      If you are looking to build something simple you can go with this but you can follow other more secure options if it’s a serious project

    • @the_proton_guy
      @the_proton_guy วันที่ผ่านมา

      If you are looking to build something simple you can go with this but you can follow other more secure options if it’s a serious project

  • @Samrajyamseelam-b1u
    @Samrajyamseelam-b1u 2 วันที่ผ่านมา

    I wanted to add mobile number and confirm password field in register form. What changes i have to make in the code

    • @the_proton_guy
      @the_proton_guy 2 วันที่ผ่านมา

      create a new user model and add the fields you want

  • @gustavoribeiro1526
    @gustavoribeiro1526 2 วันที่ผ่านมา

    Thank you for this lesson. Everything worked out well here.

    • @the_proton_guy
      @the_proton_guy 2 วันที่ผ่านมา

      You are welcome! 🙏🏿

  • @rahulvenkat3944
    @rahulvenkat3944 10 วันที่ผ่านมา

    Hi Bro, Are you using JWT in this video?

    • @the_proton_guy
      @the_proton_guy 10 วันที่ผ่านมา

      No

    • @rahulvenkat3944
      @rahulvenkat3944 10 วันที่ผ่านมา

      Thanks for your quick Response Bro👍😇😇

    • @the_proton_guy
      @the_proton_guy 10 วันที่ผ่านมา

      You are welcome

  • @seanholleran1706
    @seanholleran1706 12 วันที่ผ่านมา

    Hi There, small question regarding sessions. Is it not unsafe to save the user data in the season 02:13:25 ?

    • @the_proton_guy
      @the_proton_guy 12 วันที่ผ่านมา

      Yea you are right, in the sql query, it is important to select specifically only the data that you want ti retrieve so: SELECT username, email from users….

    • @seanholleran1706
      @seanholleran1706 12 วันที่ผ่านมา

      @@the_proton_guy Thank you, Would it be more secure to use user ID and call functions to retrieve data as needed?

  • @Royaume-Congo
    @Royaume-Congo 15 วันที่ผ่านมา

    what about trying to use somebody else code on zip? how to solve fantal unable

  • @taiwooladamola746
    @taiwooladamola746 18 วันที่ผ่านมา

    Thanks Brov. You just gained a new Subscriber.

  • @Ebk-s31
    @Ebk-s31 21 วันที่ผ่านมา

    Boss, it didn't work after I integrated Django with Cloudinary, as you showed

    • @the_proton_guy
      @the_proton_guy 20 วันที่ผ่านมา

      Do you see any errors in terminal

    • @Ebk-s31
      @Ebk-s31 20 วันที่ผ่านมา

      @@the_proton_guy Saying not found and no folder was automatically created

    • @the_proton_guy
      @the_proton_guy 19 วันที่ผ่านมา

      Hmmm, you added cloudinary to installed apps right?

    • @Ebk-s31
      @Ebk-s31 19 วันที่ผ่านมา

      @@the_proton_guy I did sir.

  • @joshua2279
    @joshua2279 23 วันที่ผ่านมา

    Thanks man

  • @gehanatef7247
    @gehanatef7247 23 วันที่ผ่านมา

    very helpful thanks for you effort

    • @the_proton_guy
      @the_proton_guy 23 วันที่ผ่านมา

      You are welcome 🎉

  • @amrithagouriamrithus474
    @amrithagouriamrithus474 23 วันที่ผ่านมา

    How can I visually represent my model's fields using a graphical diagram, such as an Entity-Relationship Diagram (ERD) or Class Diagram? In admin ui

    • @the_proton_guy
      @the_proton_guy 23 วันที่ผ่านมา

      Hello, I don’t think you can view this in the admin but you can generate an ERD image using: python manage.py graph_models -py dot -a -g -o name_of_image_file.png That will help generate a db schema diagram. You will need to research about graph models for Django though!

  • @ashan-or6zm
    @ashan-or6zm 24 วันที่ผ่านมา

    keep going Brother you are gonna reach millions of subscribers soon~~

    • @the_proton_guy
      @the_proton_guy 24 วันที่ผ่านมา

      Amen! Thank you so much

  • @BikerosGamerPT
    @BikerosGamerPT 25 วันที่ผ่านมา

    i'm getting this error "No route found for path 'ws/notification//'", i already seek many solutions but i can't solve it

    • @the_proton_guy
      @the_proton_guy 25 วันที่ผ่านมา

      Are you sure you setup the endpoint properly?

    • @BikerosGamerPT
      @BikerosGamerPT 25 วันที่ผ่านมา

      @@the_proton_guy i did everything acording to the video, so i don't know

    • @BikerosGamerPT
      @BikerosGamerPT 25 วันที่ผ่านมา

      @@the_proton_guy what is your channels version, i was using version 4.0, but now i switched to 3.0.5 and it worked

    • @the_proton_guy
      @the_proton_guy 25 วันที่ผ่านมา

      Hmmm interesting. I can’t remember what version I made use of. I am glad it works now

  • @harshitsahu5849
    @harshitsahu5849 25 วันที่ผ่านมา

    @26:31 haha, i see the first roomname

  • @dgeneral12
    @dgeneral12 26 วันที่ผ่านมา

    thank you amazing video this helped me so much

    • @the_proton_guy
      @the_proton_guy 26 วันที่ผ่านมา

      You are welcome 🎉

    • @the_proton_guy
      @the_proton_guy 26 วันที่ผ่านมา

      You are welcome 🎉🎉

  • @LearningSpectrums
    @LearningSpectrums 27 วันที่ผ่านมา

    Thank you for this video, i will like to know if this method still work... thank you once again.

  • @mr.m9076
    @mr.m9076 27 วันที่ผ่านมา

    Thank you❤

  • @ayamwenzdayz3551
    @ayamwenzdayz3551 28 วันที่ผ่านมา

    @the_proton_guy , you uploaded a video, we have an error and you arent helping, who does that?

    • @the_proton_guy
      @the_proton_guy 28 วันที่ผ่านมา

      There’s a thing called Google. Maybe you haven’t heard of it? But you have to head to your browser and type Google.com After that you will need to type in the error you have a you should see a bunch of results. Thank you for your view

  • @gamezone-py4cn
    @gamezone-py4cn 29 วันที่ผ่านมา

    Clear explanation of the topic i was searching for , thankyou

    • @the_proton_guy
      @the_proton_guy 29 วันที่ผ่านมา

      Glad I could help 🎉

  • @CargoTravelerInternational
    @CargoTravelerInternational 29 วันที่ผ่านมา

    You are the best

  • @bahdcoder
    @bahdcoder หลายเดือนก่อน

    i learnt a lot from your video thanks

    • @the_proton_guy
      @the_proton_guy หลายเดือนก่อน

      You are welcome🎉

  • @bahdcoder
    @bahdcoder หลายเดือนก่อน

    thanks bro... do you have udemy courses

    • @the_proton_guy
      @the_proton_guy หลายเดือนก่อน

      You are welcome! Not yet but I am working on it

  • @Ibrahim_webdeveloper
    @Ibrahim_webdeveloper หลายเดือนก่อน

    Thanks so much boss Very helpful ❤❤❤

    • @the_proton_guy
      @the_proton_guy หลายเดือนก่อน

      You are welcome 🎉

  • @gambiarraoverflow
    @gambiarraoverflow หลายเดือนก่อน

    You sir are a legend! THANK YOU!!!

    • @the_proton_guy
      @the_proton_guy หลายเดือนก่อน

      You are welcome 🎉

  • @sanjugamer5185
    @sanjugamer5185 หลายเดือนก่อน

    This is perfect tutorial with detail explanation and clean code, thank you @the_proton_guy ❤

  • @sanjugamer5185
    @sanjugamer5185 หลายเดือนก่อน

    mail is not receiving 😔😔

    • @the_proton_guy
      @the_proton_guy หลายเดือนก่อน

      Do you see any errors in terminal

    • @sanjugamer5185
      @sanjugamer5185 หลายเดือนก่อน

      @@the_proton_guy reset_id link and everyting is getting in terminal but not receiving any mail

    • @the_proton_guy
      @the_proton_guy หลายเดือนก่อน

      Are you sure you used correct details

    • @sanjugamer5185
      @sanjugamer5185 หลายเดือนก่อน

      @@the_proton_guy thank you for responding , I find out the error now mail is sending

    • @the_proton_guy
      @the_proton_guy หลายเดือนก่อน

      Yaaay

  • @hendahmed5842
    @hendahmed5842 หลายเดือนก่อน

    Bro, please reply I successfully receive the deployment certificate that implies that my website is secure but it is still not secure when I reload Second thing is, why the domain don't work without me running the gunicorn --bind command, Isn't it supposed to work just when you click on it??

    • @the_proton_guy
      @the_proton_guy หลายเดือนก่อน

      Well, you have to run the gunicorn command to run your Django project. Without it, it’s better to run your project with gunicorn in production. Also are you sure your nginx file was setup properly? And did you remember to restart it

  • @RuslanKhotsenko
    @RuslanKhotsenko หลายเดือนก่อน

    Hello! Thank you very much for this great video! I did everything like in the video except of installing SSL. I stuck on ERR_TOO_MANY_REDIRECTS error when I type my domain without pointing a port 8000. If I write down domain name : 8000 everything works correct. Where is my error?

    • @the_proton_guy
      @the_proton_guy หลายเดือนก่อน

      Make sure you nginx file is properly setup as in the tutorial, also make sure that your gunicorn command correct: gunicorn -bind 0.0.0.0:8000 ProjectName.wsgi

  • @erasmocalzadilla8004
    @erasmocalzadilla8004 หลายเดือนก่อน

    you helped me a lot

    • @the_proton_guy
      @the_proton_guy หลายเดือนก่อน

      I’m glad I could 🎉

  • @pranavpandiri3056
    @pranavpandiri3056 หลายเดือนก่อน

    I want to mention a thing that if we have the tasks with same name then the code may be not run because it returns two or three objects ,that will effect the functionality of the delete task button

    • @pranavpandiri3056
      @pranavpandiri3056 หลายเดือนก่อน

      instead we can use the deafult id that was created when the model is created

    • @the_proton_guy
      @the_proton_guy หลายเดือนก่อน

      Exactly. You’re correct

  • @Africanizer
    @Africanizer หลายเดือนก่อน

    Amazing work... Keep them coming.. Thank you

  • @ZylvieApp
    @ZylvieApp หลายเดือนก่อน

    This works for PayPal Standard. What about PayPal Advanced? Where you're the platform and you're onboarding an infinite number of PayPal merchants to sell on your ecommerce platform.

  • @caiopjv
    @caiopjv หลายเดือนก่อน

    Great video! Thanks a lot. I will try these steps today!

  • @kaushiq847
    @kaushiq847 หลายเดือนก่อน

    great video..thanks

  • @hamzahahmed211
    @hamzahahmed211 หลายเดือนก่อน

    Hi, Where did you explain that line of code in connect ??

  • @lord_bii
    @lord_bii หลายเดือนก่อน

    Someone can just bypass all this if they know the product ID. they just post to the payment success url and there you go. You should show a more robust implementation where the update only happens through the notify url. otherwise good content

    • @the_proton_guy
      @the_proton_guy หลายเดือนก่อน

      Yes, you’re correct! I just wanted the video to be as short as possible. An option to verify payments would be to add a web hook

  • @justsh0t
    @justsh0t หลายเดือนก่อน

    lol very cool library, i am gonna try it

  • @LekeEkundayoEkunstech
    @LekeEkundayoEkunstech หลายเดือนก่อน

    Can you reproduce all these with abstractuser

  • @VenicioBueno
    @VenicioBueno หลายเดือนก่อน

    Perfect!😊

  • @alphonsekaman4114
    @alphonsekaman4114 หลายเดือนก่อน

    Thanks a lot bro. After days of struggling, I am finally there. 😀

  • @abrhamdemsew8440
    @abrhamdemsew8440 หลายเดือนก่อน

    really amazing work bro! keep up the good work, if you could make some video on react + Django I really appreciate it. Thanks for this Video

    • @the_proton_guy
      @the_proton_guy หลายเดือนก่อน

      Thank you for the feedback!

  • @adrianskelton9
    @adrianskelton9 2 หลายเดือนก่อน

    Thanks for the awesome tuturial. Unfortunately I keep getting this error on deployment... ==> Running 'gunicorn trashsundays.wsgi:application' bash: line 1: gunicorn: command not found.

    • @the_proton_guy
      @the_proton_guy 2 หลายเดือนก่อน

      You have to add gunicorn to your requirement.txt file. You need to do this because render runs your Django project using gunicorn. After you add it to your requirements.txt file, push the change to GitHub and let it redeploy. The error should be gone after that

  • @rebeccalacmago
    @rebeccalacmago 2 หลายเดือนก่อน

    Thank you very much for this video. It was really helpful

    • @the_proton_guy
      @the_proton_guy 2 หลายเดือนก่อน

      You are welcome 🎉

  • @armin.falahatkar
    @armin.falahatkar 2 หลายเดือนก่อน

    awsome

  • @Mr--Wizard
    @Mr--Wizard 2 หลายเดือนก่อน

    This is all I need!!. Thanks BRO.

    • @the_proton_guy
      @the_proton_guy 2 หลายเดือนก่อน

      You’re welcome 🎉

  • @mauisam1
    @mauisam1 2 หลายเดือนก่อน

    Can you upload the Github and put a link in the description as that would be very helpful. I would save me some typing.

    • @the_proton_guy
      @the_proton_guy 2 หลายเดือนก่อน

      Sorry, I don’t have a GitHub where I have the import export specifically written. You can check the video as I explained there

  • @MrTR909
    @MrTR909 2 หลายเดือนก่อน

    I can access my server but once i going to log in, error 403 forbidden.

    • @the_proton_guy
      @the_proton_guy 2 หลายเดือนก่อน

      Okay, you get 403 on the web page? You can access your website from the io address yeah?

  • @wlin111
    @wlin111 2 หลายเดือนก่อน

    thanks :)

    • @the_proton_guy
      @the_proton_guy 2 หลายเดือนก่อน

      You’re welcome ;)

  • @francoluisrosel7850
    @francoluisrosel7850 2 หลายเดือนก่อน

    Can this be used in order to automatically save media files that were send to the deployed render website?

    • @the_proton_guy
      @the_proton_guy 2 หลายเดือนก่อน

      No, it’s not possible. You have to make use of a cdn like cloudinary or aws s3