Work I Completed

This week I had much less opportunity in class to complete work going toward my project. The first class was spent looking at University opportunities, including open days and direct applications, and so there was no time in class to work on my project. For the second class, I had a change of rooms due to my teacher being away, and so I was unable to access any of the electronics I was planning on using to test my program. However, I did manage to edit my code to have more than one leg tracking different objects simultaneously, but the method I used to do this seems to be quite inefficient. For now, efficiency isn’t important since this is a rough simulation and more of a proof of concept to see how viable and what failsafes I will need. My solution to adding another limb to the simulation was to simply duplicate all the code and add “2” to the end of every variable, then render both limbs at once, keeping most of what they do the same. This means that the code went from:

 1. def render():
 2.     '''This function creates the screen and objects for rendering'''
 3.     black = 0, 0, 0
 4.     white = 255, 255, 255
 5.  
 6.     screen.fill(white)
 7.     for i in range(1, len(points)):
 8.         prev = points[i-1]
 9.         cur = points[i]
10.         pygame.draw.aaline(screen, black, prev, cur)
11.  
12.     for point in points:
13.         pygame.draw.circle(screen, black, (int(point[0]), int(point[1])), 5)
14.  
15.     pygame.draw.circle(screen, black, (int(target[0]), int(target[1])), 10)
16.     pygame.display.flip()

to:

 1. def render():
 2.     '''This function creates the screen and objects for rendering'''
 3.     black = 0, 0, 0
 4.     white = 255, 255, 255
 5.  
 6.     screen.fill(white)
 7.     for i in range(1, len(points)):
 8.         prev = points[i-1]
 9.         cur = points[i]
10.         pygame.draw.aaline(screen, black, prev, cur)
11.     
12.     for i in range(1, len(points2)):
13.         prev = points2[i-1]
14.         cur = points2[i]
15.         pygame.draw.aaline(screen, black, prev, cur)
16.  
17.     for point in points:
18.         pygame.draw.circle(screen, black, (int(point[0]), int(point[1])), 5)
19.     
20.     for point2 in points2:
21.         pygame.draw.circle(screen, black, (int(point2[0]), int(point2[1])), 5)
22.  
23.     pygame.draw.circle(screen, black, (int(target[0]), int(target[1])), 10)
24.     pygame.draw.circle(screen, black, (int(target2[0]), int(target2[1])), 10)
25.     pygame.display.flip()

This code seems unnecessarily repetitive, and I do plan to eventually fix this, but it is not a priority for now. Simulating this duplication of code took a bit more thinking, as it seemed to struggle to use the solve_ik() function for two different limbs at once. At first it appeared to be working, but then the limbs would stop moving. To fix this, I duplicated another lot of code, this time being the solve_ik() function and instead of running it with the first one, I ran it after, which will visually seem to run at the same time.

This also highlighted that I will need to consider running things at the same time when I add it into a real circuit, as the motors won’t be able to turn at the same time, so I can’t send the angles as they come, but rather when they stop coming so it knows the final location.

CyberQuest – PicoCTF

In the third class of the week, I was also unable to work on the project, but this time that is because I was learning some cybersecurity for the upcoming Lockheed Martin CyberQuest, which I will be participating in with some of my classmates. In preparation, we collectively looked at PicoCTF, as CyberQuest will be a CTF, and tried solving them as a class. These were very hard. A lot harder than I remember the 2022 CyberQuest challenges being. But there are still many important skills to be learnt through this, and preparing for a harder challenge should surely help us in this one. As a class, we attempted some of the forensics challenges. These already started off somewhat difficult, but very manageable as all we needed to do was convert a 64-bit string in the EXIF data. The second challenge was “Matryoshka doll”, which, as implied, had files imbedded within imbedded files. This took some time to understand initially, however after getting enlightened by “iend”, was just repetitive. The third and final challenge attempted was “Tunn3l V1s10n”. This one caused me a lot of pain to understand. It involved taking a broken BMP into a hex editor and changing the heading which had a hex value of BA D0 instead of 28 00. I still don’t understand how we were expected to know that it was meant to be 28 00, but it doesn’t matter since other people did. For the CyberQuest, I don’t plan to do much in this category anyway, at least in the beginning. I plan to start off in the Cryptography section, as I feel it is my strongest area in cybersecurity, and so I plan to take some time to practice in this field on PicoCTF.

Reflection

In terms of my major project, I am happy that some progress was made, however, I am disappointed with how little it was. I feel like there should have been more progress than simply duplicating code and then fixing a couple bugs. I am happy with how it works currently though, and still think I am very much on track to completing this task.

For preparation for the CyberQuest, I am confident with the cryptography, simply because the past challenges, namely PecanCTF, have shown that the knowledge required isn’t mainly in understanding parts of computing, but rather having a wider knowledge to understand references in hints. This I feel I have, in addition to understanding a lot of different types of ciphers.