<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Hack United Blog]]></title><description><![CDATA[Hack United is a non-profit organization founded by teenagers with a passion for programming and technology. On this blog, we spread recent tech news with a tar]]></description><link>https://blog.hackunited.org</link><image><url>https://cdn.hashnode.com/res/hashnode/image/upload/v1687396793830/7L4gziy_N.png</url><title>Hack United Blog</title><link>https://blog.hackunited.org</link></image><generator>RSS for Node</generator><lastBuildDate>Thu, 16 Apr 2026 08:48:43 GMT</lastBuildDate><atom:link href="https://blog.hackunited.org/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[How the “Log in with Google” Actually Works]]></title><description><![CDATA[I know for a fact you’ve gone to some website, and you were too lazy to make and remember a username and password, so you just hit that “Log in with Google” or “Sign up with Google” button, and boom, ]]></description><link>https://blog.hackunited.org/how-the-log-in-with-google-actually-works</link><guid isPermaLink="true">https://blog.hackunited.org/how-the-log-in-with-google-actually-works</guid><category><![CDATA[learning]]></category><category><![CDATA[hackathon]]></category><dc:creator><![CDATA[Danny Zheng]]></dc:creator><pubDate>Mon, 13 Apr 2026 02:43:56 GMT</pubDate><content:encoded><![CDATA[<p>I know for a fact you’ve gone to some website, and you were too lazy to make and remember a username and password, so you just hit that “Log in with Google” or “Sign up with Google” button, and boom, you’re already logged in/created an account.</p>
<p>But what’s actually happening behind the scenes? How does the app know it's you without you just handing over your Google password?</p>
<p>The system running the show is called OAuth (It stands for Open Authorization).</p>
<p>Think of OAuth like a valet key for your car (I’ve never really seen these outside of movies, but the analogy still stands). A valet key lets the driver park your car, but it doesn't let them open the locked glovebox or the trunk. You’re giving limited access to someone without handing over the actual main keys.</p>
<p>Here is the quick play-by-play of what happens when you click that button:</p>
<p><strong>Who This?:</strong> You click "Log in with Google." The app basically says, "I don't know who this guy is, let's ask Google." It then takes you to a secure Google login screen.</p>
<p><strong>This Good?:</strong> Google asks you, "Hey, this new app wants to see your email address and basic profile info. Is that okay?"</p>
<p><strong>Haha You Can’t Hack Me:</strong> When you click "Allow," Google doesn't give the app your password. Instead, it creates a secure, temporary digital ticket called an Access Token (there are different access tokens with different levels of permissions, all of which you can set up when building your auth flow).</p>
<p><strong>You’re Free to Go, Sir:</strong> Google sends you back to the app, handing the app this token. The app shows the token to Google's servers to prove you actually gave permission, and Google hands over just your name and email (or access to other permissions if you give them).</p>
<p>That’s pretty much it. The app gets exactly what it needs to create your account, and your password stays (relatively) safely locked away at Google.</p>
<p>The best part is that if you ever decide you don't trust the app anymore, you can go into your Google settings and revoke its access. That digital ticket/token immediately becomes useless, and they can't see or access your data anymore.</p>
<p>So next time you skip creating a new password, you can thank OAuth.</p>
]]></content:encoded></item><item><title><![CDATA[A Basic Guide to Coding Pt. 2: Loops]]></title><description><![CDATA[Loops are essential to programming. Without loops, coding would be very inefficient and time-consuming (e.g., printing “Hello World” 100 times). Loops also allow for flexibility, meaning that you can ]]></description><link>https://blog.hackunited.org/a-basic-guide-to-coding-pt-2-loops</link><guid isPermaLink="true">https://blog.hackunited.org/a-basic-guide-to-coding-pt-2-loops</guid><category><![CDATA[coding]]></category><category><![CDATA[learning]]></category><category><![CDATA[hackathon]]></category><category><![CDATA[AI]]></category><category><![CDATA[Artificial Intelligence]]></category><dc:creator><![CDATA[Danny Zheng]]></dc:creator><pubDate>Tue, 07 Apr 2026 02:51:26 GMT</pubDate><content:encoded><![CDATA[<p>Loops are essential to programming. Without loops, coding would be very inefficient and time-consuming (e.g., printing “Hello World” 100 times). Loops also allow for flexibility, meaning that you can repeat a certain number of times based on user input and so on. In general, there are three different types of loops in most programming languages: while, for, and do-while loops.</p>
<p><strong>Three Components of a Loop</strong></p>
<p>Before you can even care for picking a while, do-while, or for loop, you must first understand the three components of a loop: initialization, condition, and iteration.</p>
<p><strong>Initialization:</strong> There is a counter variable per loop to keep track of how many times it can run. Initialization is setting that counter variable for any value, 0, 100, or even 1000.</p>
<p><strong>Condition:</strong> This is usually a boolean expression to see if it continues (if true for most programming languages), and if false will immediately terminate the loop. This allows for the loop to end (to avoid infinite loops and errors).</p>
<p><strong>Iteration:</strong> How many times the loop will run, and is done so by modifying the counter variable set during initialization.</p>
<p><strong>While Loops</strong></p>
<p>While loops are the most flexible. The syntax is essentially like this:</p>
<table style="min-width:25px"><colgroup><col style="min-width:25px"></col></colgroup><tbody><tr><td><p><strong>int counter = 5; // initialization<br />while (counter &gt; 0) { // condition<br />System.out.println("Hello World!");<br />counter++; // iteration<br />}</strong></p></td></tr></tbody></table>

<p>The example above allows for this while loop to run 5 times. You can place the counter variable and iteration anywhere, but it depends on where it is.</p>
]]></content:encoded></item><item><title><![CDATA[Pretty Placeholder Data and Why You Need It]]></title><description><![CDATA[Nothing makes a new UI look more awful than blank/empty sections. The problem is that when you initially start a project, waiting for actual users to sign up just to see if your layout works is a wast]]></description><link>https://blog.hackunited.org/pretty-placeholder-data-and-why-you-need-it</link><guid isPermaLink="true">https://blog.hackunited.org/pretty-placeholder-data-and-why-you-need-it</guid><category><![CDATA[hackathon]]></category><category><![CDATA[learning]]></category><category><![CDATA[AI]]></category><category><![CDATA[Artificial Intelligence]]></category><dc:creator><![CDATA[Danny Zheng]]></dc:creator><pubDate>Sat, 04 Apr 2026 19:26:20 GMT</pubDate><content:encoded><![CDATA[<p>Nothing makes a new UI look more awful than blank/empty sections. The problem is that when you initially start a project, waiting for actual users to sign up just to see if your layout works is a waste of time. This is why you need GOOD placeholder data.</p>
<p>Usually called "mock data" by developers, this is basically just fake information used to fill up your database. Populating your app with fake names, emails, and profile pictures gives you a realistic look at how the final product actually functions.</p>
<p>It's also essential for testing. Empty databases cause errors. If your code expects a username and gets an empty record, the page might crash. Pumping your app full of mock data prevents this and lets you test edge cases. For example, you can throw in a 50-character name just to see if it breaks your layout. Also, since the data is stored locally, you can keep testing everything even if you’re not connected with the internet.</p>
<p>Most of the time, developers format this data using JSON (JavaScript Object Notation). It organizes information into key-value pairs. You set "firstName" as the key and "Obama" as the value, and group them with curly braces. It’s the standard/typical format because it’s incredibly readable for both humans and computers.</p>
<p>In addition, nobody wants to manually type out a hundred fake test emails. Online tools like Mockaroo can let you specify the exact columns you need and download thousands of rows of data without really spending that much time. If you instead want to keep it inside your codebase, libraries like Faker can create random names and phone numbers directly inside your code. Overall, placeholder data is really important and can save time when initially starting on a project, and you shouldn’t just rely on 2 entries and pray your script works with an entire database.</p>
]]></content:encoded></item><item><title><![CDATA[Markov Chains and Weighted Graphs: Modeling How the World Moves]]></title><description><![CDATA[Things like the weather are unpredictable. Predicting the next websites/webpages users enter is unpredictable. There is so much unknown when it comes to some aspects of real life. Yesterday in my AP P]]></description><link>https://blog.hackunited.org/markov-chains-and-weighted-graphs-modeling-how-the-world-moves</link><guid isPermaLink="true">https://blog.hackunited.org/markov-chains-and-weighted-graphs-modeling-how-the-world-moves</guid><category><![CDATA[modeling]]></category><category><![CDATA[markov]]></category><category><![CDATA[coding]]></category><category><![CDATA[Computer Science]]></category><category><![CDATA[CSS]]></category><category><![CDATA[learning]]></category><category><![CDATA[AI]]></category><category><![CDATA[Artificial Intelligence]]></category><category><![CDATA[hackathon]]></category><dc:creator><![CDATA[Danny Zheng]]></dc:creator><pubDate>Sun, 29 Mar 2026 18:59:45 GMT</pubDate><content:encoded><![CDATA[<p>Things like the weather are unpredictable. Predicting the next websites/webpages users enter is unpredictable. There is so much unknown when it comes to some aspects of real life. Yesterday in my AP Physics class, we were learning about Gravitational Attraction, and there was so much unknown, but we found the known in the unknown. It’s the same concept applied here! To understand the unknown, models and systems are used to make the unknown less unknown. Two popular systems that are used are the weighted graphs and Markov chains. Together, they help us represent and analyze systems where outcomes depend on probability rather than certainty.</p>
<p>In computer science, a graph is a data structure made up of nodes, which are often called vertices, and edges that connect them. Nodes can represent cities, web pages, or game states, while edges represent the relationship or connection between them. The Java class my class made to program a graph had a node that held a List that contained the neighbors of that node. </p>
<p>A weighted graph is similar to a graph, but now each edge has a numerical value attached to it. This value represents some kind of cost, distance, repetition, or probability. For example, in a navigation system, the weight on an edge might represent the distance between two cities. Algorithms can then analyze this graph to find the shortest route between locations. That’s how navigation systems know how long the drivers need to stay on a certain road or tell them when to merge!</p>
<p>Using the idea of graphs, Markov Chains use graphs and Nodes that store values, Strings in particular, to formulate sentences (like an AI)! A Markov chain is a mathematical model used to describe systems based on probabilities. The key idea behind a Markov chain is the Markov property. The Markov Property states that the next state depends on the current state and not on the sequence of states that came before it. Simply said, the system has no memory of what is to come.</p>
<p>Markov chains can be represented visually using weighted directed graphs. Each node represents a possible state, and each edge represents the probability of moving from one state to another. The weights on the edges represent these probabilities, and the outgoing probabilities from a node typically add up to 1.</p>
<p>An example of this is with the weather. There could be three states: sunny, cloudy, and rainy. If one day is sunny, then the chance of it being sunny the next day could be 70%, making it a 20% of it being cloudy, and 10% chance of rain. Each of these probabilities can be represented as weighted edges between nodes.</p>
<p>Another application is text generation. Some AI text models in their early stages used Markov chains to predict the next word in a sentence based on the current word. While modern AI models are far more advanced, the basic concept of predicting future states from probabilities is still a vital part of machine learning.</p>
<p>Markov chains are an interesting intersection between graphs, graph theory, probability, and algorithm design. By representing systems as weighted graphs and analyzing transitions between states, we can model processes from weather forecasts to user behavior online.</p>
<p>In a world full of uncertainty, we found the known in the unknown.</p>
]]></content:encoded></item><item><title><![CDATA[The role of Cloud Computing in Modern Technology.]]></title><description><![CDATA[In the last few years, technology has changed so much, and one of the most important developments behind this transformation is cloud computing. Although many people use cloud services every day, most]]></description><link>https://blog.hackunited.org/the-role-of-cloud-computing-in-modern-technology</link><guid isPermaLink="true">https://blog.hackunited.org/the-role-of-cloud-computing-in-modern-technology</guid><category><![CDATA[Web Development]]></category><category><![CDATA[CSS]]></category><category><![CDATA[Computer Science]]></category><category><![CDATA[AI]]></category><category><![CDATA[Artificial Intelligence]]></category><category><![CDATA[learning]]></category><category><![CDATA[hacking]]></category><category><![CDATA[hackathon]]></category><dc:creator><![CDATA[Danny Zheng]]></dc:creator><pubDate>Sat, 28 Mar 2026 03:44:24 GMT</pubDate><content:encoded><![CDATA[<p>In the last few years, technology has changed so much, and one of the most important developments behind this transformation is cloud computing. Although many people use cloud services every day, most don’t realize how central this technology has become. From streaming movies to storing photos online, cloud computing quietly powers much of the digital world.</p>
<p>So what is cloud computing? It’s the delivery of computing services over the internet instead of relying on local computers or physical servers. In other words, it’s like an easier way to handle your tasks, so rather than storing data or running programs directly on a personal device, these tasks are handled by remote servers located in data centers around the world. Users can access these resources through the internet whenever they need them. </p>
<p>One of the main reasons why cloud computing has become so important is its remarkable flexibility. In the past, companies had to buy and maintain expensive hardware to run their software, and it required significant investment and technical expertise, but with cloud computing, businesses can rent the computing resources they need, which allows them to scale their systems up or down depending on their needs, making it much more efficient and cost-effective.</p>
<p>Despite its many benefits, cloud computing also has certain challenges, such as security and data privacy, since sensitive information is stored on remote servers. Organizations must rely on cloud providers to protect their data from cyber attackers or unauthorized access. Also, the fact that cloud services depend heavily on stable internet connections means that a slight internet problem can cause a few issues.  </p>
<p>In conclusion, cloud computing has become a fundamental component of modern technology. It enables many of the digital services people rely on every day while providing organizations with flexible and scalable computing resources.</p>
]]></content:encoded></item><item><title><![CDATA[How Automation Is Reshaping the Job Market]]></title><description><![CDATA[A few decades ago, automation meant large robotic arms assembling cars in factories. Today, it’s different and a lot closer to us. It’s in the algorithm that recommends what we watch, the software tha]]></description><link>https://blog.hackunited.org/how-automation-is-reshaping-the-job-market</link><guid isPermaLink="true">https://blog.hackunited.org/how-automation-is-reshaping-the-job-market</guid><category><![CDATA[Computer Science]]></category><category><![CDATA[CSS]]></category><category><![CDATA[learning]]></category><category><![CDATA[hackathon]]></category><category><![CDATA[Artificial Intelligence]]></category><category><![CDATA[AI]]></category><dc:creator><![CDATA[Danny Zheng]]></dc:creator><pubDate>Sat, 21 Mar 2026 03:18:41 GMT</pubDate><content:encoded><![CDATA[<p>A few decades ago, automation meant large robotic arms assembling cars in factories. Today, it’s different and a lot closer to us. It’s in the algorithm that recommends what we watch, the software that scans legal documents in seconds, and the self-checkout machine at the grocery store.</p>
<p>Automation is no longer just about machines replacing physical labor,now it’s more about software making decisions that one day were humans’ responsibility.</p>
<p>Companies such as Amazon use automated systems to manage warehouses and predict demand. Meanwhile, other manufacturers like Tesla rely on robotics to optimize production lines. But the real transformation isn’t just happening in factories, it’s happening in offices.</p>
<p>The biggest impact of automation isn’t that entire jobs disappear overnight. Instead, specific tasks within jobs are being automated. For example, an accountant may no longer spend hours manually organizing spreadsheets, and a journalist might use AI tools to analyze data quickly. The role remains but the nature of the work changes.</p>
<p>This shift creates both anxiety and opportunity. Routine tasks are increasingly handled by machines, but roles requiring creativity, emotional intelligence, and complex decision-making are growing in importance. The job market is not shrinking; it’s changing shape.</p>
<p>The real question is no longer “Will automation take jobs?” but rather “Which skills will remain valuable in an automated world?”</p>
]]></content:encoded></item><item><title><![CDATA[A Basic Guide to Coding Pt. 1: Variables & Conditionals]]></title><description><![CDATA[If you have just started on your coding journey or if you are an advanced coder all the way, you should be familiar with variables, conditionals, and loops, which are essential parts of basic programm]]></description><link>https://blog.hackunited.org/a-basic-guide-to-coding-pt-1-variables-conditionals</link><guid isPermaLink="true">https://blog.hackunited.org/a-basic-guide-to-coding-pt-1-variables-conditionals</guid><category><![CDATA[Basics of Python]]></category><category><![CDATA[AI]]></category><category><![CDATA[hackathon]]></category><category><![CDATA[Artificial Intelligence]]></category><category><![CDATA[learning]]></category><category><![CDATA[Computer Science]]></category><category><![CDATA[coding]]></category><dc:creator><![CDATA[Danny Zheng]]></dc:creator><pubDate>Sat, 14 Mar 2026 18:54:40 GMT</pubDate><content:encoded><![CDATA[<p>       If you have just started on your coding journey or if you are an advanced coder all the way, you should be familiar with variables, conditionals, and loops, which are essential parts of basic programming. So, what are they and why are they important?</p>
<p><strong>Variables</strong></p>
<p>              Variables are reserved spaces of memory, usually RAM, in order to store any type of data. For example, if you want to store the word “data” in Python, you would type:</p>
<table style="min-width:50px"><colgroup><col style="min-width:25px"></col><col style="min-width:25px"></col></colgroup><tbody><tr><td><p># In Python…</p></td><td><p>word = "data"</p></td></tr></tbody></table>

<p>              However, with variables, they have data types, and in many languages, such as Java and C++, you must declare them. This is because while some languages, like Python, have memory that is dynamically allocated, sometimes it needs to be given space manually. Common data types include int (integer values), doubles or floats (depending on the language and whether they are decimals), Booleans (values true or false), and strings (words, but must include quotation marks to do so successfully in many languages).</p>
<p>              For example, in C++, this might look different, for example, </p>
<table style="min-width:25px"><colgroup><col style="min-width:25px"></col></colgroup><tbody><tr><td><p>#include &lt;string&gt; // usually have to include this header in C++ to declare variables in C++!<br />...<br />string word = "data";</p></td></tr></tbody></table>

  

<p> Variables are flexible, meaning that with numerical data types, you can change them through addition, subtraction, multiplication, division, and so on, and can be gathered through user input, allowing your program to be interactive.</p>
<p><strong>Conditionals</strong></p>
<p>              What if you have two paths for something? For example, if you want your program to output it’s warm if it’s a warm temperature, while it’s cold in a cold temperature, conditionals are what you need! Conditionals allow users to choose multiple possibilities, allowing for if you win or lose in a game program, turn the music on or off, etc.</p>
<p>For example,</p>
<table style="min-width:25px"><colgroup><col style="min-width:25px"></col></colgroup><tbody><tr><td><p>// Assume all variables have been declared &amp; are in Fahrenheit<br />// In the programming language C++!<br />if (temp &gt;= 70)<br />{<br />              cout &lt;&lt; "It's warm!";<br />}<br />else<br />{<br />              cout &lt;&lt; "It's cold!";<br />}</p></td></tr></tbody></table>

<p>              Now, you might be confused about the “if” and the “else”. The “if” is the first conditional, or true or false statement. If the temp variable is greater than or equal to 70 degrees, then the program would output “It’s warm!”. However, if that “if” is false, it would output the other else statement.</p>
<p>              There are also else-if statements that you can add onto. Essentially, if the first conditional is not true, then it would move to the next else-if statement and so on in chronological order. Therefore, remember that the order matters and evaluate in the context of that to avoid logic errors. For example,</p>
<table style="min-width:25px"><colgroup><col style="min-width:25px"></col></colgroup><tbody><tr><td><p>if (temp &gt;= 20) {<br />              cout &lt;&lt; "It's in the 20's! It's cold!";<br />}<br />else if (temp &gt;= 30) {<br />              cout &lt;&lt; "It's in the 30's! Still very cold!"<br />}<br />... // so on</p></td></tr></tbody></table>

<p>Technically, if you have a temperature of 30 degrees, it would pass the first condition anyway. Keep this in mind when structuring your conditions.</p>
<p>Another thing to note is that the statement is evaluated by Boolean statements, or if that condition is true or false, and if true, it executes the statement, and if false, it does not. That is essentially the entire logic of conditionals!</p>
<p>Hopefully, if you are a beginner self-learner or programmer, you found this article helpful. Variables and conditionals are key to writing good programs and making programs the way they are (e.g., user input, if you win or lose in a game, etc.)</p>
]]></content:encoded></item><item><title><![CDATA[Imposter Syndrome in Tech]]></title><description><![CDATA[For many years, computer science and, in general, the tech field were lucrative and popular fields, considered a “golden ticket” to a job. Now, computer science enrollment in the UC’s and other univer]]></description><link>https://blog.hackunited.org/imposter-syndrome-in-tech</link><guid isPermaLink="true">https://blog.hackunited.org/imposter-syndrome-in-tech</guid><category><![CDATA[Computer Science]]></category><category><![CDATA[technology]]></category><category><![CDATA[jobs]]></category><category><![CDATA[Google]]></category><category><![CDATA[hackathon]]></category><category><![CDATA[coding]]></category><category><![CDATA[AI]]></category><category><![CDATA[Artificial Intelligence]]></category><category><![CDATA[learning]]></category><dc:creator><![CDATA[Danny Zheng]]></dc:creator><pubDate>Tue, 10 Mar 2026 21:45:35 GMT</pubDate><content:encoded><![CDATA[<p>For many years, computer science and, in general, the tech field were lucrative and popular fields, considered a “golden ticket” to a job. Now, computer science enrollment in the UC’s and other universities has decreased for the first time since the 2000s, due to AI taking over junior-level tasks.</p>
<p>In addition, on social media, many tech influencers often showcase the “glorified” version of tech, with the free food from Google to fancy and beautiful apartments. Many who do succeed are often those who have been exposed to computer science or coding very early on, while those who only started to learn during college feel left behind, which causes imposter syndrome.</p>
<p>Imposter syndrome, where, despite success, an individual has self-doubt about accepting their own accomplishments. For example, someone who just started coding in college might feel strong imposter syndrome compared to someone who mastered it since they were young and can do full-scale hackathon-winning projects. The tech field is extremely lucrative, but it is a very difficult field to get into and stay in, especially in 2026, when AI is essentially erasing entry-level jobs.</p>
<p>However, it is important to understand that due to the difficulties in the tech industry in 2026, everyone has faced imposter syndrome before. From high school prodigies to even well-settled adults, imposter syndrome is real, and you, as an individual, are not alone. It is important for many to address imposter syndrome to continue to go beyond their boundaries and expertise, which can improve their chances of getting a job/a better job as well as giving better experiences.</p>
]]></content:encoded></item><item><title><![CDATA[Understand Environment Variables]]></title><description><![CDATA[When you write code that connects to a database or an external service, you usually need a password or a key. Putting that key directly into your code creates a significant problem. If you share your ]]></description><link>https://blog.hackunited.org/understand-environment-variables</link><guid isPermaLink="true">https://blog.hackunited.org/understand-environment-variables</guid><category><![CDATA[variables]]></category><category><![CDATA[coding]]></category><category><![CDATA[Computer Science]]></category><category><![CDATA[AI]]></category><category><![CDATA[Artificial Intelligence]]></category><category><![CDATA[hackathon]]></category><dc:creator><![CDATA[Danny Zheng]]></dc:creator><pubDate>Sun, 08 Mar 2026 21:19:05 GMT</pubDate><content:encoded><![CDATA[<p>When you write code that connects to a database or an external service, you usually need a password or a key. Putting that key directly into your code creates a significant problem. If you share your code, everyone can literally see/steal your password. If you push your code to a public code repository, automated bots can steal those keys pretty fast. Hackers use stolen keys to rack up massive bills on your account.</p>
<p>Environment variables solve this problem. Environment variables are like secret containers hidden on your computer or your server. Your code looks for that container and reads what’s in it.</p>
<p>Instead of writing this in your file: DATABASE_PASSWORD = "SuperSecretPassword123"</p>
<p>Your code looks like this: DATABASE_PASSWORD = get_environment_variable("DB_PASSWORD")</p>
<p>You define the DB_PASSWORD on your specific machine. Your teammate defines their own DB_PASSWORD on their machine.</p>
<p>Here are a few reasons you need them:</p>
<p>Security: You keep secrets out of your codebase. When you put your project online or share it with others, your passwords stay on your computer.</p>
<p>Different Environments: You often run code on your local laptop to test it and then on a live web server for users. You need a different database on your laptop than you use on the live server. You use environment variables to change settings based on where the code runs.</p>
<p>Easy Updates: If an API key expires, you don’t really need to hunt through dozens of files to find and change it. You can just update the environment variable at one place.</p>
<p>You typically use a .env file to store these variables while developing locally. This file looks like a simple text file:</p>
<p>API_KEY = "abc12345" DB_HOST = "localhost" NUCLEAR_LAUNCH_CODES = 6767</p>
<p>You must add this .env file to your project's ignore list (for example, add the filename to your .gitignore). This ensures you never accidentally upload it to a public repository.</p>
<p>By using environment variables, you separate your configuration from your code. This practice keeps your projects secure and makes collaboration a lot safer. Moral of the story: please use environment variables.</p>
]]></content:encoded></item><item><title><![CDATA[AI Is Everywhere, You Just Gotta Notice It]]></title><description><![CDATA[Whenever AI comes up in a conversation, people jump to chatbots or whatever new model just dropped: maybe a new model of ChatGPT, Nano Banana, or another AI model. Although those models of AI are inte]]></description><link>https://blog.hackunited.org/ai-is-everywhere-you-just-gotta-notice-it</link><guid isPermaLink="true">https://blog.hackunited.org/ai-is-everywhere-you-just-gotta-notice-it</guid><category><![CDATA[hackathon]]></category><category><![CDATA[coding]]></category><category><![CDATA[Computer Science]]></category><category><![CDATA[learning]]></category><category><![CDATA[AI]]></category><category><![CDATA[Artificial Intelligence]]></category><dc:creator><![CDATA[Danny Zheng]]></dc:creator><pubDate>Sat, 07 Mar 2026 02:50:02 GMT</pubDate><content:encoded><![CDATA[<p>Whenever AI comes up in a conversation, people jump to chatbots or whatever new model just dropped: maybe a new model of ChatGPT, Nano Banana, or another AI model. Although those models of AI are interesting to discuss, they aren’t the only way to look at AI. AI shows up in places that do not seem technical at first.</p>
<p>An example of this is with video games. An eight-year-old me came back from school, full of energy as usual, because I was in elementary school, and I couldn’t wait to play Nintendo’s new Legend of Zelda game, The Legend of Zelda: Breath of the Wild. While playing, I remembered something my teacher told me at school, “Always stay curious and keep an open mind to the things around you.” Now, of course, as an eight-year-old, I thought my world was so easy to understand, but today, when I loaded up the game, I started wondering about the enemies. The enemies in the game were reacting to my character's actions. This sparked my curiosity. Although it was simple, I was still interested to know how characters in the game were able to play without a user but still play as if they were being controlled; they attacked me with different types of moves and used their shield when I attacked. I asked my brother and did some research to discover that this was a Dynamic, Autonomous CPU. This was my first exposure to AI. </p>
<p>This is also a place where AI exists. AI isn’t just limited to LLMs or agents; it’s everywhere. </p>
<p>Not in some dramatic robot takeover way. Just in the systems behind the scenes. The way characters move. The way difficulty adjusts. The way the environment feels responsive instead of random. Later on, I branched into other Nintendo titles and games known for strong soundtracks and puzzle mechanics, and the pattern became obvious. The draw was always systems that required strategy and pattern recognition.</p>
<p>That realization changed everything, and that's when I became interested in AI. Interest in AI does not have to start with language models or advanced research papers. It can start with whatever already feels interesting. Music lovers can look at recommendation algorithms or AI-generated compositions. Sports fans can explore performance analytics and predictive models. Artists can experiment with image enhancement tools. Even scrolling through social media involves algorithms learning from behavior. AI is less about one specific tool and more about intelligent systems solving problems in different contexts. Of course, it’s important to know about the different AI models and agents in the world we live in today, but it doesn’t have to start there; people’s interest in AI can start with what they are interested in.</p>
]]></content:encoded></item><item><title><![CDATA[How Machine Learning Learns from Data?]]></title><description><![CDATA[Machine learning (ML) is a type of artificial intelligence that learns from data instead of being explicitly programmed. Just like humans learn from experience, machines learn from examples.
How it wo]]></description><link>https://blog.hackunited.org/how-machine-learning-learns-from-data</link><guid isPermaLink="true">https://blog.hackunited.org/how-machine-learning-learns-from-data</guid><category><![CDATA[Machine Learning]]></category><category><![CDATA[llm]]></category><category><![CDATA[hackathon]]></category><category><![CDATA[Computer Science]]></category><category><![CDATA[AI]]></category><category><![CDATA[Artificial Intelligence]]></category><category><![CDATA[learning]]></category><category><![CDATA[coding]]></category><dc:creator><![CDATA[Danny Zheng]]></dc:creator><pubDate>Wed, 04 Mar 2026 00:44:49 GMT</pubDate><content:encoded><![CDATA[<p>Machine learning (ML) is a type of artificial intelligence that learns from data instead of being explicitly programmed. Just like humans learn from experience, machines learn from examples.</p>
<h2>How it works:</h2>
<p>Imagine teaching a child to recognize apples and oranges. You show many pictures of apples and oranges, and then you tell the child which is which. Over time, the child starts recognizing them on their own. Machine learning works the same way:</p>
<ul>
<li><p>Data = pictures</p>
</li>
<li><p>Labels = answers (apple or orange)</p>
</li>
<li><p>Model = the “learner”</p>
</li>
</ul>
<p>The more data the model sees, the better it becomes.</p>
<h2>Real-life examples:</h2>
<ul>
<li><p>Email spam detection</p>
</li>
<li><p>Face recognition</p>
</li>
<li><p>Recommendation systems (YouTube, Netflix)</p>
</li>
<li><p>Self-driving cars</p>
</li>
</ul>
<p>All of these systems learn patterns from huge amounts of data.</p>
<h2>Types of learning:</h2>
<ol>
<li><p>**Supervised Learning<br />**The model learns with labeled data (questions + answers).</p>
</li>
<li><p>**Unsupervised Learning<br />**The model finds patterns without labels.</p>
</li>
<li><p>**Reinforcement Learning<br />**The model learns by trial and error (like training a dog with rewards).</p>
</li>
</ol>
<h2>Why does data matter?</h2>
<p>Without data, machine learning cannot learn. Data quality also matters, so poor data yields poor results.</p>
<p>Machine learning is powerful because it improves over time. The more data it gets, the smarter it becomes.</p>
]]></content:encoded></item><item><title><![CDATA[Maps But Easy: An Intro to Leaflet JS]]></title><description><![CDATA[Just having a list of addresses usually doesn’t look nice. When you build an app to find the nearest coffee shop or track a delivery route, you need a visual map. Really slow/heavy mapping software sl]]></description><link>https://blog.hackunited.org/maps-but-easy-an-intro-to-leaflet-js</link><guid isPermaLink="true">https://blog.hackunited.org/maps-but-easy-an-intro-to-leaflet-js</guid><category><![CDATA[leaflet]]></category><category><![CDATA[JavaScript]]></category><category><![CDATA[coding]]></category><category><![CDATA[hackathon]]></category><category><![CDATA[Computer Science]]></category><category><![CDATA[AI]]></category><category><![CDATA[Artificial Intelligence]]></category><category><![CDATA[learning]]></category><dc:creator><![CDATA[Danny Zheng]]></dc:creator><pubDate>Sat, 28 Feb 2026 03:32:39 GMT</pubDate><content:encoded><![CDATA[<p>Just having a list of addresses usually doesn’t look nice. When you build an app to find the nearest coffee shop or track a delivery route, you need a visual map. Really slow/heavy mapping software slows down development. However, billing requirements from enterprise map APIs often just stop you from implementing maps entirely.</p>
<p>Leaflet JS offers an open-source JavaScript library alternative. The library lets you pretty easily drop an interactive map into your website using a few lines of code.</p>
<p>Leaflet acts as the middleman between your website and map data, allowing you to avoid building a map from scratch. The library places a transparent layer over existing map images. Developers call these images tiles. Community-driven services like OpenStreetMap provide these tiles for free.</p>
<p>Once the map shows up on your screen, you draw directly on the surface. You can drop custom pins. You can shade specific neighborhoods. You can do a lot of things, such as highlight exact delivery routes based on your data.</p>
<p>Developers choose Leaflet for many practical reasons.</p>
<p>The library is literally only 42 KB. The small file size ensures the map loads instantly on slow mobile networks. The compact size keeps your app fast and responsive.</p>
<p>You don’t need a background in Geographic Information Systems to use Leaflet. You only require basic HTML and JavaScript knowledge to center a map on a specific city and add a marker. (It’s a lot easier than you’d think)</p>
<p>Leaflet gives you total control over map imagery. You choose where your map images come from. You select standard street maps or stylized dark-mode maps from Mapbox. You even import your own custom images to map a video game level or a building floor plan.</p>
<p>Users also interact with the map immediately upon loading. Users drag to pan around the area and scroll to zoom in on a computer. Mobile users pinch to zoom on their screens. You can attach text pop-ups to your markers. A user can click a pin, and a bubble will appear with more information.</p>
<p>Adding a map to your project shouldn’t require a struggle. Leaflet gets rid of the complexity of web mapping. The library gives you a simple and fast interactive map, while you maintain full control over the user experience. Next time you build an application involving real-world locations, just quickly drop Leaflet into your project, and it’s easy to go from there.</p>
]]></content:encoded></item><item><title><![CDATA[What Actually Happens When You Click a Button on a Website?]]></title><description><![CDATA[We click buttons all the time,”Submit”, “Login”... but what actually happens behind the scenes?
The button is just structure:
When you write an html code like this :        {   
Submit         
}
You’]]></description><link>https://blog.hackunited.org/what-actually-happens-when-you-click-a-button-on-a-website</link><guid isPermaLink="true">https://blog.hackunited.org/what-actually-happens-when-you-click-a-button-on-a-website</guid><category><![CDATA[website]]></category><category><![CDATA[hackathon]]></category><category><![CDATA[AI]]></category><category><![CDATA[coding]]></category><category><![CDATA[learning]]></category><dc:creator><![CDATA[Danny Zheng]]></dc:creator><pubDate>Tue, 24 Feb 2026 22:51:14 GMT</pubDate><content:encoded><![CDATA[<p>We click buttons all the time,”Submit”, “Login”... but what actually happens behind the scenes?</p>
<p>The button is just structure:</p>
<p>When you write an html code like this :        {   </p>
<p>Submit         </p>
<p>}</p>
<p>You’re not creating behavior, you’re just creating structure because the browser reads the html and builds something called DOM (Document Object Model),which is basically a tree that represents every element on the page. At this stage the button is just sitting there, it exists visually but it has no brain.                                  </p>
<p> JavaScript gives it behavior.</p>
<p>When you add a javascript code like this one:{</p>
<p>document.querySelector("button").addEventListener("click", function() {</p>
<p>    alert("Hello!");</p>
<p>});</p>
<p>} you’re telling the browser that if someone clicks this button , run this code and this is called event driven programming. The browser is constantly listening for events such as clicks, typing, scrolling and when something happens it reacts, that’s what makes the button alive.</p>
<p>The click is detected.</p>
<p>When you physically click, your mouse sends a signal to the system,then the browser detects it as a click event so it creates something called an event object that checks if any function is attached to that event and finally it runs the function.</p>
<p>All this happens in milliseconds ,behind the scenes, the browser uses something called the event loop to manage these <a href="http://tasks.It">tasks.It</a> decides what to execute and when, so everything feels smooth.</p>
<p>What if the button sends data?</p>
<p>When you click a login button, the browser collects your information, turns it into an HTTP request, and sends it to a server. The server checks your data, sends back a response, and the browser updates the page. So you’re not logging in on your own computer, you're communicating with another machine somewhere in the world, and it all happens in just milliseconds.</p>
<p>When you click a button, you’re triggering so many functions and all of it happens so fast that it feels invisible.That's what I love about programming, what looks simple on the surface usually hides a whole system underneath.</p>
]]></content:encoded></item><item><title><![CDATA[Trees, MinMax, and Binary Search Trees]]></title><description><![CDATA[When I first learned about trees in computer science, I learned that they look like real upside-down trees. A tree starts with a single root, and from that, its branches extend into smaller parts. The]]></description><link>https://blog.hackunited.org/trees-minmax-and-binary-search-trees</link><guid isPermaLink="true">https://blog.hackunited.org/trees-minmax-and-binary-search-trees</guid><category><![CDATA[hackathon]]></category><category><![CDATA[coding]]></category><category><![CDATA[#ai-tools]]></category><category><![CDATA[Artificial Intelligence]]></category><category><![CDATA[BinaryTrees]]></category><category><![CDATA[learning]]></category><dc:creator><![CDATA[Danny Zheng]]></dc:creator><pubDate>Sat, 21 Feb 2026 04:31:33 GMT</pubDate><enclosure url="https://cloudmate-test.s3.us-east-1.amazonaws.com/uploads/covers/691fd3a3a81d207addfd6961/64dd6e61-35a2-4576-b5ab-a836f1097129.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>When I first learned about trees in computer science, I learned that they look like real upside-down trees. A tree starts with a single root, and from that, its branches extend into smaller parts. These branches are called nodes. Each node connects to other nodes, forming a structure that helps organize data in a clean and logical way.</p>
<p>A tree is useful because it shows relationships between the nodes. There is a clear starting point, the root, and every other piece connects back to it in some way. Instead of storing information in one long list, trees let us break problems into smaller parts. Each branch represents a decision or a possibility. The root node will always be the first node; this is true, but when searching for an element, any node can be made a temporary node! When I began building small projects, I realized that many problems can actually be visualized as a tree. Every time you make a choice in a program, you are creating a new branch.</p>
<p>A type of tree which is used for finding the best decision in a game is called a MinMax Tree. MinMax trees are commonly used in game development to find the best possible move, with the best move receiving a positive score and the worst score receiving a negative score. Imagine a game of tic tac toe, every move creates a new board state. From that board state, there are more possible moves. Each of those leads to even more possibilities. If a branch leads to a win, it receives a positive value. If it leads to a loss, it receives a negative value. The algorithm assumes the opponent will always make the best possible move. Because of that, it chooses the move that guarantees the strongest outcome.</p>
<p>Programming a MinMax tree reminded me of my time in band and leadership. MinMax trees find the best possible decision, and in the band, there are a multitude of things that could happen, and as a leader, I need to make sure I am prepared for anything. An example of this is when I led a sectional. If there are issues with rhythms, then before we practice it over and over again incorrectly, I fix the measure and then move on. Another, bigger example, I saw rain in the distance heading our way, so the other leaders on the team calmed the ensemble and packed everything away quickly. These scenarios are all “changes” to the state of the game, and I am the algorithm searching for the best possible move.</p>
<p>Along with the band, I also wanted to try to implement a MinMax tree in a game I made, Match Master. Match Master is a strategy based game I built, and adding a MinMax tree based AI would allow the computer to play against the user and add another element of excitement. The number of possible moves can grow quickly, and because trees use recursion, this can break my game very fast, but anything is possible.</p>
<p>Another important type of tree is the binary search tree. A binary search tree, or BST, is a tree where each node has at most two children. What makes it special is the rule it follows. For every node, values smaller than it go to the left, and values larger than it go to the right. Because of this structure, searching becomes much faster. Instead of checking every value one by one, you eliminate half the possibilities at each step.</p>
<p>Binary search trees are powerful because they combine structure with efficiency. If I insert the numbers 8, 3, 10, 1, 6, 14 into a BST, the tree organizes itself in a way that makes future searches quick. To find 6, I would start at 8, move left to 3, then right to 6. That process is much faster than scanning through a list.</p>
<p>Trees reflect decision-making. They show how small choices branch into larger outcomes. In programming, they help us build smarter systems. In games, they help us think ahead. In data storage, they help us stay organized.</p>
]]></content:encoded></item><item><title><![CDATA[Chart.js: Make Your Data Actually Look Good]]></title><description><![CDATA[Staring at a table of numbers is boring. Whether you’re making a fitness tracker, a budget app, or a weather tool, literally no one wants to dig through a spreadsheet to find the information they need. You want something that shows a trend or a compa...]]></description><link>https://blog.hackunited.org/chartjs-make-your-data-actually-look-good</link><guid isPermaLink="true">https://blog.hackunited.org/chartjs-make-your-data-actually-look-good</guid><category><![CDATA[JavaScript]]></category><category><![CDATA[Java]]></category><category><![CDATA[coding challenge]]></category><category><![CDATA[coding]]></category><category><![CDATA[hackathon]]></category><category><![CDATA[AI]]></category><category><![CDATA[Artificial Intelligence]]></category><dc:creator><![CDATA[Danny Zheng]]></dc:creator><pubDate>Wed, 18 Feb 2026 19:58:05 GMT</pubDate><content:encoded><![CDATA[<p>Staring at a table of numbers is boring. Whether you’re making a fitness tracker, a budget app, or a weather tool, literally no one wants to dig through a spreadsheet to find the information they need. You want something that shows a trend or a comparison at a glance.</p>
<p>This is why Chart.js exists. Chart.js is a JavaScript library that takes your data and turns it into clean, professional-looking charts without you having to be a math genius or a graphic designer.</p>
<p>Chart.js is basically an easy way for data visualization. Chart.js uses something called the HTML5 Canvas. It’s basically just a fancy way of saying it draws the graphs directly onto your webpage.</p>
<p>Instead of you manually trying to calculate how many pixels high a bar should be or what the angle of a pie slice is, you just give Chart.js data points and tell Chart.js what type of chart you want. Chart.js handles all the drawing, scaling, and math for you.</p>
<p>There are a lot of charting libraries out there, but Chart.js is the most popular charting library used to chart charts for three reasons:</p>
<ol>
<li><p>It’s Responsive by Default: If you open your site on a phone the chart will automatically shrink to fit. If you open it on a monitor it expands. You do not have to write code to make it look right on different screens.</p>
</li>
<li><p>It’s Interactive: Out of the box your charts aren’t just images. If you hover your mouse over a bar or a line, a little tooltip pops up to show the value. You can even click on the legend to hide or show sets of data.</p>
</li>
<li><p>It covers the basics: Chart.js supports all the main things. Bar charts, line graphs, pie charts, radar charts, and more. For small projects, it has what you need without being way too complicated.</p>
</li>
</ol>
<p>Chart.js is especially useful for data that changes and isn’t a concrete visual. It lets the users sort of interact with the page more.</p>
<p>You don’t need to spend hours learning data science tools just to show a simple graph. Chart.js lets you focus on your app while it handles the visual heavy lifting. Chart.js is lightweight and looks great. It makes your project feel a lot more professional the second you drop it in, and you should seriously consider giving it a go.</p>
]]></content:encoded></item><item><title><![CDATA[Is Google Play Store Really Safe?]]></title><description><![CDATA[Ah, you are looking for an app, since your phone is a bit old, you need a good QR scanner. After downloading an app with many 5-star reviews and many downloads, though, from a reputable Google Play Store, you think that you are safe. However, it is r...]]></description><link>https://blog.hackunited.org/is-google-play-store-really-safe</link><guid isPermaLink="true">https://blog.hackunited.org/is-google-play-store-really-safe</guid><category><![CDATA[Computer Science]]></category><category><![CDATA[Google]]></category><category><![CDATA[hackathon]]></category><category><![CDATA[coding]]></category><category><![CDATA[learning]]></category><category><![CDATA[AI]]></category><category><![CDATA[Artificial Intelligence]]></category><dc:creator><![CDATA[Danny Zheng]]></dc:creator><pubDate>Mon, 16 Feb 2026 21:37:35 GMT</pubDate><content:encoded><![CDATA[<p>Ah, you are looking for an app, since your phone is a bit old, you need a good QR scanner. After downloading an app with many 5-star reviews and many downloads, though, from a reputable Google Play Store, you think that you are safe. However, it is revealed that it is part of the SlopAds malware, where, through "steganography" or hiding malicious code inside images to sneak past Google Play Protect, it is able to deliver fraudulent ads without alteration from security tools in devices.</p>
<p>             Not only that, but there is also Vapor Operation, a campaign that allows many apps to bypass local device security, thereby flooding users with ads and phishing pages. Anatsa, a popular banking Trojan among PDF readers, document editors, QR code apps, etc., can be used to hack a device, steal bank information, and use it to perform fraudulent transactions.</p>
<p>             This doesn’t mean that one shouldn’t stop downloading apps from Google or other app stores. Rather, it is important to be able to recognize which ones are fraudulent or not, which could save you a lot of hassle, money, and avoid major identity theft and losing massive amounts of money.</p>
<ol>
<li>Is it popular?</li>
</ol>
<p>Check if an app has been popular or common for many years. No new apps have been launched recently, which could take time for the public to see if they have been stealing data, but well-known secure apps. If an app has been launched recently, wait for someone else to take the hit, not you, to see if it’s safe.</p>
<ol start="2">
<li>Excessive Permissions?</li>
</ol>
<p>See what permissions are needed. For example, an app clearly doesn’t need for the user to enable locations and microphone permissions for a simple PDF reader app, which can clearly be a red flag.</p>
<ol start="3">
<li>Flaws?</li>
</ol>
<p>Are there grammatical errors? Maybe different spellings of popular and safe apps, such as MckAfee instead of McAfee (a popular security software app), grammatical errors in the description, etc. If so, maybe it’s not a good idea to download that app.</p>
<p>While there might still be apps out there, remember to always be aware and alert. Google Play Store actually does a good job of filtering malicious apps, but nothing is perfect. Being a digital citizen means that it is important to take important measures and understand how to stay safe, even through popular software, which means questioning and understanding every download and alert from your local security software. Knowledge is a public good, so remember to always be knowledgeable online.</p>
]]></content:encoded></item><item><title><![CDATA[A Quick Intro to GraphQL (And Why It’s Taking Over)]]></title><description><![CDATA[If you’ve built a website before, you know the drill. You need to display a user’s profile, so you write a fetch request to some API endpoint like /api/users/67.
The server responds, and usually, it dumps everything on you. You get the user’s name, e...]]></description><link>https://blog.hackunited.org/a-quick-intro-to-graphql-and-why-its-taking-over</link><guid isPermaLink="true">https://blog.hackunited.org/a-quick-intro-to-graphql-and-why-its-taking-over</guid><category><![CDATA[coding]]></category><category><![CDATA[code]]></category><category><![CDATA[api]]></category><category><![CDATA[GitHub]]></category><category><![CDATA[Git]]></category><category><![CDATA[hackathon]]></category><category><![CDATA[Computer Science]]></category><category><![CDATA[AI]]></category><category><![CDATA[Artificial Intelligence]]></category><dc:creator><![CDATA[Danny Zheng]]></dc:creator><pubDate>Wed, 11 Feb 2026 01:30:34 GMT</pubDate><content:encoded><![CDATA[<p>If you’ve built a website before, you know the drill. You need to display a user’s profile, so you write a fetch request to some API endpoint like /api/users/67.</p>
<p>The server responds, and usually, it dumps everything on you. You get the user’s name, email, address, hair color, favorite food, and a timestamp of when they created their account.</p>
<p>But all you really wanted was their username.</p>
<p>Now you’re downloading a bunch of data you don’t need (which slows down your app), just to use one field. Or, even worse, you need their username and their last three posts. The user endpoint doesn't have the posts, so now you have to make a second fetch request to /api/posts.</p>
<p>This is the problem GraphQL was built to solve.</p>
<p>It’s basically just a smarter way to ask for data</p>
<p>With standard APIs (REST), the server decides what you get. With GraphQL, you decide what you get.</p>
<p>It’s a query language. That sounds intimidating, but it’s actually really intuitive. Instead of hitting a specific URL for specific data, you hit one single URL and send a "query" that looks almost like JSON.</p>
<p>If you want a user’s name and their posts, you just write something like this:</p>
<p>query { user(id: "67") { username posts { title } } }</p>
<p>And the server sends back exactly that. No extra junk, no missing fields. Just the data you asked for, in the exact shape you asked for it.</p>
<p>Why it’s nicer to work with</p>
<p>No more chaining requests: You don’t have to fetch the user, wait for the response, get the ID, and then fetch their posts. You can grab nested data (User -&gt; Friends -&gt; Friends' Posts) in one single go.</p>
<p>You know what you’re getting: Since the queries are specific, you don't have to print out the response just to see what the data looks like. The code literally just tells you exactly what fields are coming back.</p>
<p>The catch</p>
<p>It’s not perfect. Setting up a GraphQL server can be a little more work than a standard one, especially for simple projects. In addition, it’s also not supported by a lot of different APIs right now, as it’s fairly new and not very widespread just yet.</p>
<p>But on the frontend (React, Vue, mobile apps), it’s a dream. It stops you from fighting with the API and lets you just focus on building your UI. If you’re tired of managing a dozen different API endpoints, you should give it a try.</p>
]]></content:encoded></item><item><title><![CDATA[What Learning Java Has Taught Me]]></title><description><![CDATA[Java is considered one of the first programming languages that many learn and take. Many are, in fact, familiar with the classic System.out.println(“Hello World.”) In addition, Java will continue to be relevant (as far as most can predict), and it is...]]></description><link>https://blog.hackunited.org/what-learning-java-has-taught-me</link><guid isPermaLink="true">https://blog.hackunited.org/what-learning-java-has-taught-me</guid><category><![CDATA[Java]]></category><category><![CDATA[Computer Science]]></category><category><![CDATA[hackathon]]></category><category><![CDATA[AI]]></category><category><![CDATA[Artificial Intelligence]]></category><category><![CDATA[learning]]></category><category><![CDATA[code]]></category><dc:creator><![CDATA[Danny Zheng]]></dc:creator><pubDate>Sun, 08 Feb 2026 02:21:45 GMT</pubDate><content:encoded><![CDATA[<p>  Java is considered one of the first programming languages that many learn and take. Many are, in fact, familiar with the classic <em>System.out.println(“Hello World.”)</em> In addition, Java will continue to be relevant (as far as most can predict), and it is clear that Java is here to stay, as still present in the frameworks of Minecraft, Netflix, Spotify, and other big apps. Java is valuable as a first programming language for a reason.</p>
<p>           I first learned Java at AP Computer Science A and then later took a community college class that was a continuation of it. Here’s what I learned.</p>
<ol>
<li><strong>Object-Oriented Programming Language</strong></li>
</ol>
<p>Java is an object-oriented language, meaning that the code is organized around data or “objects” rather than just functions and logic. This allows for reusability, inheritance, and other big concepts that are essential to master, since most programming projects will be object-oriented-based, although procedural programming and data-oriented design are still there and important to learn for advanced programmers.</p>
<ol start="2">
<li><strong>Data Structures</strong></li>
</ol>
<p>When I thought AP CSA had taught me a lot, I was wrong. That community college class was a continuation. Well, oh wow, I learned about stacks, queues, graphs, trees, nodes, etc. That definitely was difficult, but it did prepare me a lot for data structures, for it allows students to create faster algorithms, reduce memory usage, solve complex problems, and write maintainable code. Java is often a good path to learning data structures and is essential for most programmers.</p>
<ol start="3">
<li><strong>Resilience</strong></li>
</ol>
<p>Yes, Java is great, not because of its skills but its resilience, which one needs when learning programming. For example, you might have an error, well, because you missed a semicolon (which, as a Java programmer, is one of the most annoying things to find). Java is syntactically complex, but not too complex to ward off beginners, which teaches beginners how to look for errors and problems without driving them away.</p>
<p>Overall, Java is currently modern, usable, and difficult, but easy enough for beginners. If you are looking for a language to learn, try Java, which is perfect, modern, and the best beginner language for 2026.</p>
]]></content:encoded></item><item><title><![CDATA[Stop Saying "It Works on My Machine": A Quick Intro to Ngrok]]></title><description><![CDATA[We’ve all been there. You spend hours building a web app for a project. It looks great. It works perfectly on your laptop. You turn to your teammate or a friend and say, "Hey, check this out," and then realize you can’t send them a link because it’s ...]]></description><link>https://blog.hackunited.org/stop-saying-it-works-on-my-machine-a-quick-intro-to-ngrok</link><guid isPermaLink="true">https://blog.hackunited.org/stop-saying-it-works-on-my-machine-a-quick-intro-to-ngrok</guid><category><![CDATA[coding]]></category><category><![CDATA[Computer Science]]></category><category><![CDATA[AI]]></category><category><![CDATA[Artificial Intelligence]]></category><category><![CDATA[hacking]]></category><category><![CDATA[hackathon]]></category><dc:creator><![CDATA[Danny Zheng]]></dc:creator><pubDate>Fri, 06 Feb 2026 04:22:09 GMT</pubDate><content:encoded><![CDATA[<p>We’ve all been there. You spend hours building a web app for a project. It looks great. It works perfectly on your laptop. You turn to your teammate or a friend and say, "Hey, check this out," and then realize you can’t send them a link because it’s only on your computer (I sure hope you didn’t try sending a <a target="_blank" href="http://localhost">localhost</a> URL).</p>
<p>That’s because <a target="_blank" href="http://localhost">localhost</a> is just that, local. It’s literally on your computer. For anyone else to see your work, you usually have to "deploy" it to a server, which can take a long time to set up and debug.</p>
<p>This is where Ngrok saves the day.</p>
<p><strong>What is it?</strong><br />Put simply, Ngrok creates a secure tunnel from the public internet directly to your computer.</p>
<p>When you run Ngrok, it gives you a weird-looking public URL (something like <a target="_blank" href="https://a1b2-c3d4.ngrok-free.app">https://a1b2-c3d4.ngrok-free.app</a>). When someone clicks that link on their phone or laptop, Ngrok catches the request, pushes it through the tunnel, and forwards it to your local server running on port 3000.</p>
<p>Basically, it tricks the internet into thinking your laptop is a public server.</p>
<p>Why is this actually useful?</p>
<p>You might be thinking, "I’ll just deploy my site when I’m done." That’s fine for the final product, but Ngrok is a lifesaver during development for a few reasons:</p>
<p><strong>Testing on mobile:</strong> Chrome’s "mobile view" is okay, but it’s not the real thing. With Ngrok, you can send the link to your actual iPhone or Android, open it in Safari or Chrome, and see exactly how your site feels in your hand.</p>
<p><strong>Demos:</strong> If you’re at a hackathon or a showcase, Wi-Fi can be spotty. Sometimes, deploying fails at the last minute. With Ngrok, you can just run your code locally and give the judges the link. It’s the fastest way to show off a "work in progress."</p>
<p><strong>Webhooks (The big one):</strong> This is a bit more technical, but super important. If you are building an app that uses something like Stripe for payments or Twilio for SMS, those services need to "talk" to your app. They can’t talk to the local host. But they can talk to an Ngrok URL. It’s the only easy way to test those features without deploying.</p>
<p>How hard is it to use?</p>
<p>It’s surprisingly simple. You install it, and then run one command in your terminal:</p>
<p>ngrok http 3000</p>
<p>That’s literally it. It gives you a web address, and you’re live.</p>
<p>It’s a small tool, but it solves one of the most annoying problems in development: getting your code off your machine and into the world.</p>
]]></content:encoded></item><item><title><![CDATA[Why Python Is Slow (and Why That’s Okay)]]></title><description><![CDATA[Python is one of the most used programming languages in the world, yet it is often criticized for its performance. So in this article, we’ll talk about the technical reasons behind its relative slowness compared to other languages.
Interpreted Execut...]]></description><link>https://blog.hackunited.org/why-python-is-slow-and-why-thats-okay</link><guid isPermaLink="true">https://blog.hackunited.org/why-python-is-slow-and-why-thats-okay</guid><category><![CDATA[coding]]></category><category><![CDATA[AI]]></category><category><![CDATA[hackathon]]></category><category><![CDATA[Artificial Intelligence]]></category><category><![CDATA[Computer Science]]></category><category><![CDATA[computerscience]]></category><dc:creator><![CDATA[Danny Zheng]]></dc:creator><pubDate>Tue, 03 Feb 2026 22:56:50 GMT</pubDate><content:encoded><![CDATA[<p>Python is one of the most used programming languages in the world, yet it is often criticized for its performance. So in this article, we’ll talk about the technical reasons behind its relative slowness compared to other languages.</p>
<h2 id="heading-interpreted-execution-model">Interpreted Execution Model</h2>
<p>Python is primarily an interpreted language. Unlike compiled languages such as C or C++, which are translated directly into machine code ahead of time, Python code is executed by an interpreter at runtime.</p>
<p>Even though Python source code is first compiled into bytecode, this bytecode is executed instruction-by-instruction by the Python Virtual Machine (PVM). Each operation therefore incurs additional overhead compared to native machine instructions.</p>
<h2 id="heading-dynamic-typing-overhead">Dynamic Typing Overhead</h2>
<p>Python is dynamically typed, which means that the type of the variable is decided while the program is running, not before the program runs. So, for example, in Python we can:</p>
<p>X = 5</p>
<p>X = "hello"</p>
<p>This code is valid in Python; unlike other languages like C and C++, code like this will cause a compile-time error.</p>
<p>In contrast, statically typed languages know variable types in advance, allowing compilers to generate highly optimized code.</p>
<h2 id="heading-object-model-and-memory-management">Object Model and Memory Management</h2>
<p>In Python, everything is an object, including integers, floats, and booleans.</p>
<p>This design introduces overhead:</p>
<p>Simple operations involve pointer dereferencing</p>
<p>Objects include reference counters and metadata</p>
<p>Memory allocation is more frequent and less predictable</p>
<p>While this object model improves flexibility and safety, it negatively impacts raw execution speed  </p>
<h2 id="heading-global-interpreter-lock-gil">Global Interpreter Lock (GIL)</h2>
<p>In CPython, the Global Interpreter Lock (GIL) ensures that only one thread executes Python bytecode at a time, which simplifies memory management and prevents race conditions, but it also prevents CPU-bound tasks from running truly in parallel across multiple cores, limiting the performance of multithreaded programs, whereas I/O-bound threads, which spend most of their time waiting on external resources like files, networks, or databases, can run efficiently because the GIL is released during these operations.</p>
<h2 id="heading-function-call-and-abstraction-costs">Function Call and Abstraction Costs</h2>
<p>Python encourages:</p>
<p>- High-level abstractions.<br />- Frequent function calls.<br />- Extensive use of libraries.</p>
<p>Each function call involves stack frame creation, argument packing, and dynamic resolution, all of which add overhead compared to inlined or compiled calls in lower-level languages.</p>
<h2 id="heading-why-pythons-slowness-is-acceptable">Why Python’s Slowness Is Acceptable</h2>
<p>Python's perceived slowness is considered acceptable because the language prioritizes human efficiency and developer productivity through its simple syntax. While Python itself may be slower for certain tasks, it can wrap high-performance libraries for heavy computational work, and I/O bottlenecks often make raw execution speed less critical. For tasks requiring optimization, developers can focus on speeding up only the most performance-sensitive sections using tools like Cython. Additional details can be found.</p>
]]></content:encoded></item></channel></rss>