Hackathons are put on across the world for people interested in technology to come together and build unique projects in a short period of time. These events are made to connect people with similar interests through teamwork and competition, and largely deal with Computer Science and coding. Participants brainstorm ideas and spend anywhere from 24-48 hours constructing their idea into a presentable product at a common location. Locations can be found in cities across the globe and are independently proposed and then organized through the MLH or Major League Hacking organization. Through grants and MLH organizers, the chosen location is set up with the best equipment to achieve any project idea, and with all of the necessary amenities for overnight stays.
MLH aims to give people with interest in technology a place to come together, produce ideas, and participate in a unique collaborative computer programming project. With such a small amount of time to achieve a final product, many skip sleep and work nonstop. This has led to the criticism that these events encourage poorly-written/sloppy code and unhealthy sleeping and eating habits. Regardless, the final products of some of these hackathons produce truly innovative things that some use on a daily basis. GroupMe, for example, is a product of a hackathon project.
The skills that students learn at these events are invaluable to careers in Computer Science. At many large companies, particularly Google, being able to work collaboratively and express your ideas to a team is vital to the job. Hackathons expose prospective programmers to their future career environment while allowing them to control the entirety of their project.
If you're looking for a way to get involved, check out the MLH website for a list of hackathons near you! The only requirement is an interest in technology and a willingness to work in a collaborative environment.
Distributed Denial of Service (DDoS) is a common cyber attack used to essentially take a server, website, or device offline. The resources that enable this kind of attack are, unfortunately, widely available and therefore it is also widely used. Small-scale attacks may require only very basic knowledge of computers, and botnets can be bought for relatively small amounts of money on online "blackmarkets". Although this is illegal, these attacks are extremely difficult to trace as the information is sent through multiple computers (hence Distributed) and can be hard to discern from regular network activity.
How Does it Work?
The source of the attack begins by creating botnets -- a network of computers that act as agents of the attack, not necessarily owned by the source, which can be taken over and controlled remotely without the device owners knowledge. Once established, the botnets simultaneously attack the target in one of several ways; sending more connection requests than a server can handle or sending a bunch of random data to use up the targets bandwidth (how much data can be transferred from point A to point B in a set amount of time). This renders the targets' connection slow or completely cut off for however long the attack is active.
Prevention
By installing proper antivirus software and/or using a firewall, you can prevent your computer from being used as an agent of an attack. One technique that popular sites and services might use to lower the chances of being subjected to an attack is bandwidth oversubscription, which makes it more difficult for the source to grow their botnet network large enough to successfully overwhelm the target. DDoS mitigation is also common, and attempts to monitor the amount of information being sent/received from each source and tunes out the "noise" that is the random data sent in some attacks. Overall, you probably won't be a victim of a DDoS attack unless you have a controversial website or piss off the wrong guy in a PvP match.
There are so many more components to and forms of DDoS attacks -- if you're interested, check out these sources!
With rising numbers of self-driving cars in production, reports of their failure are reported frequently and are met with concerns about the safety of these vehicles. Tesla boasts about the auto-pilot capability of some of their models, and while the general public may consider "auto-pilot" to mean a completely hands-off experience, Tesla insists that the driver never remove their hands from the steering wheel. Just as airline pilots are still required to man planes equipped with auto-pilot, Tesla acknowledges that the technology they have implemented cannot operate completely without human intervention without risking the safety of everyone on the road. A few particular incidents, although largely isolated in comparison to regular, manually-driven model accidents, outline the bugs that self-driven cars are facing now.
The most talked-about crash in recent news was regarding the first death by a partially self-driven car, the Tesla Model S. The following model explains the basic circumstances of the crash:
The cause of the crash, which occurred while the car was in Autopilot mode, is assumed to be a failure of the obstacle-detection system. A camera and radar system interact with each other to determine obstacles around the car. The camera may have missed the truck due to its bright white exterior, too similar to the brightness of the sky that day to differentiate the two. As the CEO of Tesla explained shortly after, the radar system may have missed the obstacle due to the high ride height of the trailer - confusing it with a road sign that it is trained to ignore to prevent false braking events. This fatal combination of bugs, as well as the theory suggesting that the driver was not alert to the road conditions as the car tells you to be at all times no matter the mode setting, led to the first death by self-driven car.
A second popularly reported crash occurred with a Google self-driven car, and thankfully did not result in injury. The following video shows footage of the crash:
Google explains in its statement that the car detected sandbags near the right side of the road while planning to turn right, waited for cars to pass, saw the truck and assumed it would yield to it to allow the car to maneuver around the sandbags, and subsequently moved directly into the side of the bus. Google also explains that these assumptions happen all the time in regular human-directed driving, which brings us to many important questions going forward in autonomous vehicle production: do we want these self-driven cars to act like human drivers, or do we want them to exhibit perfection? Should these assumptions be made by the vehicle, or should this aspect of driving be put aside in favor of absolute safety?
Pertinence to Computer Science
The routines performed by these self-driving cars are laid out purely in computer programming. Millions upon millions of lines of code enable the car to guide the driver to their chosen destination, with ideally little to no interference on their part. With programming comes bugs, as we've seen through the very simple projects that we've done. However, when these programs hold human lives in the balance, there is no room for error. Before fully self-driven cars can be deployed to the public, extensive bug testing will have to occur and many new regulations met. Any mistake can prove, quite literally, to be fatal.
In computer science courses, instructors stress that all conditions be considered and thorough bug testing be done. The incidents explained above show why thoroughness is such an important concept in this field, and how no matter how tedious it can be to consider every possible input/outcome, it will certainly pay off when you have a flawless finished product (that doesn't kill anyone).
Pseudocode is defined as structured english for describing algorithms. We've used pseudocode to express what we want our code to do without using proper java syntax, but there are specific rules to writing pseudocode to make it readable for other developers that we should be familiar with.
Basics
One of the first skills we learned in 150 was how to instantiate variables to a certain type and value. In pseudocode, we use the phrase "set <variable name> to <value>" to show this code. We do not have to tell the reader what type the variable is since it's obvious to us by the value alone, unlike the computer. We can also represent calls to other functions by using the phrase "call <function> with/returning <variable>/<what it returns>".
Representing Loops
These "constructs" are keywords used to express how we want the program to flow through statements of code. A sequence is used as a representation of linear progression through a set of tasks. This can be used inside of a loop or on its own. To represent loops we use roughly the same jargon as it appears in java with an added "end" statement, representing when body inside of the loop ends. For a while loop we'd use the keywords while and endwhile, for if statements if-then-else and endif, for for loops for and endfor, for switch statements case and endcase, and for do-while repeat-until. These replacements translate java to a more english-based representation, making it easier for people to follow your program and see the beginning and end of loops without the use of brackets.
Uses
Pseudocode is a way for you to express what you want your program to do without worrying about the rules of a specific programming language. It may be useful to you when planning out a program to first outline a plan for implementation, including what you want each function or piece of code to do, and then begin implementation with a language of your choice. Pseudocode might also help you comment your finished product so that a user can more clearly see your train of thought.