1. CYF+02 Prep Workbook

    Details

    Prep

    The CYF+ Immersive Engineering Programme is an intensive three month course. There’s a lot to get through and you’ll need to hit the ground running.

    To prepare for this exciting opportunity, do all of the prep work.

  2. CYF+02 Sprint 1

    Details

    Provisional start date: 08 April 2024

    In the CYF+ process your goal is to demonstrate the profile of an engineer at a high performing company. This series of challenges was designed by a panel of engineers from top companies to help you demonstrate that profile. Key skills include:

    • Problem solving - You can solve problems in a systematic way, and you can explain your approach to others.
    • Systems thinking - You can trace the flow of data through a system, and you can explain how the system works to others.
    • Communication - You can communicate effectively with others, both verbally and in writing. This doesn’t mean knowing all the answers; it means being able to research things you don’t know, and being able to ask for help when you need it.
    • Collaboration - You can work effectively with others, and you can learn from them.
    • Self-management - You can manage your own time and priorities, and you can learn independently.

    Study

    Projects

    • Servers & databases
    • Multiple Servers
    • Docker & Cloud Deployment
    • [Troubleshooting project #1 - Fix Nginx]
      • This exercise is designed to help you learn how to setup Ngix proxy and configure it with PHP FastCGI to disaplay web pages.
      • Instruction: (please let Radha Kumari know when you are ready to do this exercise)
        • ssh -i </path/to/the/ssh-private-key> <username>@<IP>
        • ssh -i </path/to/the/ssh-private-key> <username>@<IP>
      • The goal of this exercise is - when you run “curl http://127.0.0.1/” in the terminal you get “Hello World” with HTTP response code 200. This exercise is a mix of both system and application troubleshooting
        • Run the curl command in verbose mode and see what the output looks like.
        • Identify what is the port that the curl defaults to and what runs on that port.
        • Find where Nginx configuration lives and what each configuration field means along with the location on the file system where it serves the content from.
        • What is php fast CGI and php-fpm (fastCGI process manager)?
        • Find out where php-fpm configuration files live and what each configuration field means.
      • This exercise shouldn’t take more than 1-2 days. If you are stuck, please ask for help. While you are doing the exercise, I would really recommend logging somewhere the commands you run and noting what information that gives you and whether or not that was helpful in reaching the end goal. If you were given Sudo access, make sure to document when you needed to use that and why.

    Product

    You will join CYF Products as a junior engineer. You will be deployed on a team delivering a product with real users, stakeholders and deadlines. Your challenge is to work with your team to deliver a product that meets the needs of your users, while managing the competing demands of stakeholders, deadlines, and your own learning priorities. Communication, organisation, and collaboration are key skills here.

  3. CYF+02 Sprint 2

    Details

    Provisional start date: 22 Apr 2024

    Study

    Projects

    • Batch processing
    • Buggy app
    • Memcached Clusters
    • Troubleshooting project #2
      • This project is designed to get you familiar with docker.
      • To log in: ssh -i </path/to/the/ssh-private-key> <username>@<IP>
        • You have sudo access on the host, please give a shout if that doesn’t work. (You’ll need it.)
        • There’s a database (mysql) on the machine. If you have a mysql client, you can use --host=127.0.0.1 --port=3306 --user=root --password to log in. (Ask any of the instructors for the password.)
      • The goal of the exercise is:
        • when you run lynx -dump http://localhost/, you will see a cute image of a cat on your terminal. This shouldn’t take more than a day or 2.
        • secondary, once you’ve reached that, we’ll ask you to hide the password that you can see in ps auxww | grep miauw. (A password visible in ps is bad for security, so we want that to be somewhat hidden.)
        • Along the way, we expect you’ll be able to answer:
          • How is systemd configured? Where are the logs?
          • Can you describe what docker does?
          • Can you describe the two ways that docker volumes are used in this setup?
          • Docker uses images. What are images? And how do you create your own?
      • Some knowledge to get you started:
        • The webserver is called httpurr, with a corresponding systemd service (httpurr). It’s written in go, and you can see the source code in /httpurr/.
        • The database is mysql, with a corresponding systemd service (httpurr-db).
        • Both are run inside docker.
      • While doing this exercise, I would recommend logging what you do.

    Product

    Your product work is ramping up, and so is the complexity of your study. How will you manage your time?

  4. CYF+02 Sprint 3

    Details

    Provisional start date: 6 May 2024

    Consolidation

    • Multiple servers Revisit this project and deploy it with Docker and GH Actions

    Managing state at scale

    Command line familiarity

    • Linux Bash I & Linux Bash II (There are other blog posts in the same series that could be useful to go through in spare time, would recommend running the commands that the blog post suggests for better understanding.)

    Troubleshooting

    • Troubleshooting Primer
    • Troubleshooting project #3
      • This project is designed to get you familiar with upstream service failure.
      • You’ll be given 2 instances today. \o/ A www host (www=webserver), and a db host (db=database).
      • To log in: ssh -i </path/to/the/ssh-private-key> <username>@<IP>
        • You have sudo access on both hosts, please give a shout if that doesn’t work. (You’ll need it.)
      • The goal of the exercise is:
        • When you run lynx -dump http://localhost/, you will see a cute image of a cat on your terminal.
        • (Unlike in the previous exercise, today we don’t care that the database password is exposed in ps, so don’t worry about that.)
        • Along the way, we expect you’ll be able to answer:
          • What kind of failures do you see when talking to an upstream service? (Do you know about upstream and downstream services? It’s useful jargon.)
          • The webserver doesn’t start. Can you explain why?
      • Some knowledge to get you started:
        • httpurr makes a return. Code has changed a bit from previous exercise, if you need it, source code is in /httpurr-source/ on the www host.
        • Unlike previous time, we don’t use docker this time.
        • The database is postgresql. (Unlike previous time, when it was mysql.) It’s a lovely database.
      • While doing the exercise, I would recommend logging what you do.

    Product

    You’re starting to learn efficiencies and optimisations. How will you apply them to your product work?

  5. CYF+02 Sprint 4

    Details

  6. CYF+02 Sprint 5

    Details

    Provisional start date: 3 June 2024

    Distributed Locking and Distributed Consensus

    Datastores

    Troubleshooting

    Product

    You’re focusing deeply on your largest challenge yet with RAFT, but how will you document and handover the work you’ve done on your product? How will you make sure that the next team can pick up where you left off?