<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom">
  <title>VEDU</title>
  <subtitle>Vedu Mallela is a software engineer at ByteDance/TikTok in San Jose. Projects and writing on computer vision, graphics, visualization, and AI.</subtitle>
  <updated>2026-09-29T17:15:51-04:00</updated>
  <id>https://vmallela.com/</id>
  <generator uri="https://sparanoid.com/lab/amsf/" version="">Almace Scaffolding</generator>

  <link rel="alternate" type="text/html" hreflang="en" href="https://vmallela.com/" />
  <link rel="self" type="application/atom+xml" href="https://vmallela.com/feed.xml" />

  <author>
    <name>Vedu Mallela</name>
    <uri>https://vmallela.com/</uri>
    <email>hi@vmallela.com, vmallela@csail.mit.edu</email>
  </author>

  
    
      

      

      <entry>
        <title>Ballistics Projection in Video Games</title>
        <id>https://vmallela.com/vg-ballistics/</id>
        <link rel="alternate" type="text/html" href="https://vmallela.com/vg-ballistics/" />
        <published>2024-04-29T00:00:00-04:00</published>

        
          <updated>2026-09-29T17:11:55-04:00</updated>
        

        <author>
          <name>Vedu Mallela</name>
          <uri>https://vmallela.com/</uri>
          <email>hi@vmallela.com, vmallela@csail.mit.edu</email>
        </author>

        <content type="html" xml:base="https://vmallela.com/">
          
            &lt;h1 id=&quot;ballistics-projection-in-video-games&quot;&gt;Ballistics Projection in Video Games&lt;/h1&gt;
&lt;p&gt;(aka building aim bots)&lt;/p&gt;

&lt;p&gt;Continuing off my last blog post, I’ve been making a lot of interesting projects in my AI for video games course. The latest topic that we covered was ballistics projection in video games and how we build agents that can aim and shoot at targets.&lt;/p&gt;

&lt;p&gt;This is a really cool topic because it involves a lot of physics and math, and it’s a great way to learn about how we can use these concepts to build intelligent agents in games. It’s also really cool because as someone who grew up on video games like Counter-Strike and Call of Duty, I’ve always been fascinated by how players can make these incredible shots and how the game developers design and create a more life like experience.&lt;/p&gt;

&lt;iframe width=&quot;1512&quot; height=&quot;655&quot; src=&quot;https://www.youtube.com/embed/YM_IojKdtmg?rel=0?version=3&amp;amp;autoplay=1&amp;amp;showinfo=0&amp;amp;loop=1&amp;amp;mute=1&amp;amp;amp&quot;&gt;&lt;/iframe&gt;

&lt;p&gt;Above, the demonstration shows how a target in a unity environment is calculating the trajectory of a projectile to hit a target. The agent is using a simple physics model to calculate the angle and velocity of the projectile to hit the target.&lt;/p&gt;

&lt;p&gt;In ballistics projection, the goal is to calculate the correct launch parameters—specifically, the angle and velocity—required for a projectile to intercept a moving target. This involves solving the equations of motion under the influence of gravity. The key variables include the initial position of the projectile, the initial and constant velocity of the target, and the gravitational acceleration. By considering both horizontal and vertical components separately, we can derive the necessary launch velocity. The horizontal displacement is calculated as the product of the target’s velocity and time, while the vertical displacement is adjusted for gravitational acceleration. The resulting equations form a system that can be solved iteratively or using closed-form solutions to find the exact launch angle and speed, ensuring the projectile’s trajectory intersects with the target’s future position.&lt;/p&gt;

&lt;p&gt;This is a simple implementation of the concept, but once we get into more complicated scenarios including cover fire and various obstacles in the agent’s target path, things can get a little tricker.&lt;/p&gt;

&lt;p&gt;To make an agent capable of selecting which shots to take smartly, we incorporate finite state machines that tell us when to shoot, when to move, and when to reload. This is a simple way to model the agent’s behavior and make it more intelligent.&lt;/p&gt;

          
          
        
      
        </content>

        
          <summary>Ballistics Projection in Video Games(aka building aim bots)</summary>
        
      </entry>
    
  
    
      

      

      <entry>
        <title>Navigation in Video Games</title>
        <id>https://vmallela.com/vg-nav/</id>
        <link rel="alternate" type="text/html" href="https://vmallela.com/vg-nav/" />
        <published>2024-02-15T00:00:00-05:00</published>

        
          <updated>2026-09-29T17:11:55-04:00</updated>
        

        <author>
          <name>Vedu Mallela</name>
          <uri>https://vmallela.com/</uri>
          <email>hi@vmallela.com, vmallela@csail.mit.edu</email>
        </author>

        <content type="html" xml:base="https://vmallela.com/">
          
            &lt;h1 id=&quot;navigation-in-video-games&quot;&gt;Navigation In Video Games&lt;/h1&gt;

&lt;p&gt;I recently signed up for a course on artificial intelligence for video games. I’m not really big on video games, but the course is interesting and the applications to real world problems are really cool to consider.&lt;/p&gt;

&lt;p&gt;Video games are also traditionally a playground for reinforcement learning researchers to put together some &lt;a href=&quot;https://deepmind.google/discover/blog/building-interactive-agents-in-video-game-worlds/&quot;&gt;really cool models&lt;/a&gt; like at Deepmind.&lt;/p&gt;

&lt;p&gt;The first topic that our course covered was pathfinding in video games, and to be honest I wasn’t especially enthusiastic about this at first.&lt;/p&gt;

&lt;p&gt;Our first assignment was to put together a grid mesh for navigation. This means taking some plane in a game world, and defining a “discretized space” representation. This is a fancy way of saying that we’re going to take a plane and divide it into a grid of squares so that we can navigate easily and tell our agents (characters) where they’re going.&lt;/p&gt;

&lt;p&gt;This is important though, because it helps us to define a space that we can navigate in. We can define a start and end point, and then we can use some algorithm to find the shortest path between the two points.&lt;/p&gt;

&lt;h1 id=&quot;grid-navigation&quot;&gt;Grid Navigation&lt;/h1&gt;
&lt;!-- _app/assets/img/vgnav/gridnav.png --&gt;
&lt;p&gt;Grid navigation is the process of navigating a discretized space represented by a grid of squares. Each square in the grid can either be traversable or an obstacle, allowing the navigation algorithm to find the best path from a start point to an end point.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/img/vgnav/gridnav.png&quot; alt=&quot;Grid Navigation&quot; /&gt;&lt;/p&gt;

&lt;h1 id=&quot;pathnetwork-algorithm&quot;&gt;PathNetwork Algorithm&lt;/h1&gt;
&lt;p&gt;Below is a demo of the Path Network that I put together for the assignment. The purple circles are different nodes in the network, and the lines between them are the edges that connect them. The path network is a way to represent the space as a set of navigable nodes and edges, making it easy to find the shortest path between two points.&lt;/p&gt;

&lt;iframe width=&quot;1512&quot; height=&quot;655&quot; src=&quot;https://www.youtube.com/embed/I9xDHliA0C4?rel=0?version=3&amp;amp;autoplay=1&amp;amp;showinfo=0&amp;amp;loop=1&amp;amp;mute=1&amp;amp;amp&quot;&gt;&lt;/iframe&gt;

&lt;h1 id=&quot;navigation-mesh&quot;&gt;Navigation Mesh&lt;/h1&gt;

&lt;!-- _app/assets/img/vgnav/navmesh.png --&gt;
&lt;p&gt;&lt;img src=&quot;/assets/img/vgnav/navmesh.png&quot; alt=&quot;Navigation Mesh&quot; /&gt;
A navigation mesh is a more complex representation of the game world that allows for more dynamic and flexible pathfinding. It is a collection of polygons that define the navigable areas of the game world, allowing characters to move freely within these areas while avoiding obstacles.&lt;/p&gt;

&lt;p&gt;Pathfinding algorithms like A* and Dijkstra’s Algorithm can be used on this network to find efficient routes for characters in the game. These algorithms evaluate the shortest path by considering the cost of moving from one node to another, ensuring that the path taken is the most optimal in terms of distance and traversal cost.&lt;/p&gt;

&lt;p&gt;Exploring these algorithms and seeing them in action within the game environment has been an enlightening experience. It has provided me with a deeper appreciation for the complexity and ingenuity involved in creating navigational systems in video games. These systems not only enhance the gameplay experience but also demonstrate the practical applications of AI in problem-solving and optimization tasks.&lt;/p&gt;

          
          
        
      
        </content>

        
          <summary>Navigation In Video Games</summary>
        
      </entry>
    
  
    
      

      

      <entry>
        <title>Visual Tree Comparison</title>
        <id>https://vmallela.com/treecomparison/</id>
        <link rel="alternate" type="text/html" href="https://vmallela.com/treecomparison/" />
        <published>2023-02-27T00:00:00-05:00</published>

        
          <updated>2026-09-29T17:11:55-04:00</updated>
        

        <author>
          <name>Vedu Mallela</name>
          <uri>https://vmallela.com/</uri>
          <email>hi@vmallela.com, vmallela@csail.mit.edu</email>
        </author>

        <content type="html" xml:base="https://vmallela.com/">
          
            &lt;p&gt;During my research internship at the &lt;a href=&quot;https://vcg.seas.harvard.edu/&quot;&gt;Harvard SEAS Visual Computing Group&lt;/a&gt;, I had the opportunity to work on an exciting project called Visual Analytics for Tree Comparison. The project was aimed at creating a visual analytics tool for semi-automated tree comparison with a specific use case for in vitro fertilization datasets.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/images/vtc-dash.png&quot; alt=&quot;Visual Tree Comparison dashboard with a grid of trees and comparison controls&quot; /&gt;
As you can see above, the tool allows users to compare multiple trees and visualize the differences between them. The tool also allows users to cluster trees based on their similarity. A difficulty I faced while developing this project was the lack of available datasets that I could use to test my visualizations. This was because of the privacy laws concerning medical data such as IVF datasets. To overcome this issue, I created a synthetic dataset generator that could generate random trees with random cell data. This allowed me to test my visualizations and ensure that they were working as intended.&lt;/p&gt;

&lt;p&gt;As the full-stack developer for the project, I built a Python Flask backend and a Node.js JavaScript frontend. I also conducted research on binary tree visualization and comparison for medical applications, and implemented a &lt;a href=&quot;https://epubs.siam.org/doi/10.1137/0218082&quot;&gt;Zhang-Shasha&lt;/a&gt; edit distance metric to optimize tree clustering tools.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/images/vtc-closeup.png&quot; alt=&quot;Close-up of a single cell lineage tree with node details on hover&quot; /&gt;
Additionally, users of the platform can also interact with specific trees to view more information about the cells in the tree. They can hover over specified nodes to view information and can also resort the set of trees based on this cell data.&lt;/p&gt;

&lt;p&gt;To enable clustering for the compared trees, we worked with piling.js. Additionally, we leveraged d3.js visualization and Python libraries to perform complex medical computations for cell data comparison.&lt;/p&gt;

&lt;p&gt;Throughout the project, we also collaborated with systems pharmacologists at &lt;a href=&quot;https://labsyspharm.org/&quot;&gt;Harvard LSP&lt;/a&gt;, further enhancing the scope and impact of our work. Overall, Visual Analytics for Tree Comparison was a fascinating project to work on and provided valuable experience in developing tools for medical research.&lt;/p&gt;

&lt;p&gt;This project’s code is private, but you can find the &lt;a href=&quot;https://vcg.seas.harvard.edu/projects#information-biomedical-and-scientific-visualization&quot;&gt;project website&lt;/a&gt; here.&lt;/p&gt;

          
          
        
      
        </content>

        
          <summary>During my research internship at the Harvard SEAS Visual Computing Group, I had the opportunity to work on an exciting project called Visual Analytics for Tree Comparison. The project was aimed at creating a visual analytics tool for semi-automated tree comparison with a specific use case for in vitro fertilization datasets.</summary>
        
      </entry>
    
  
    
      

      

      <entry>
        <title>Bellman Ford</title>
        <id>https://vmallela.com/bellman-ford/</id>
        <link rel="alternate" type="text/html" href="https://vmallela.com/bellman-ford/" />
        <published>2023-02-27T00:00:00-05:00</published>

        
          <updated>2026-09-29T17:11:55-04:00</updated>
        

        <author>
          <name>Vedu Mallela</name>
          <uri>https://vmallela.com/</uri>
          <email>hi@vmallela.com, vmallela@csail.mit.edu</email>
        </author>

        <content type="html" xml:base="https://vmallela.com/">
          
            &lt;style&gt;
/* Set the font family and size for the table */
table {
  font-family: &quot;Helvetica Neue&quot;, Helvetica, Arial, sans-serif;
  font-size: calc(7px + 0.75vw); /* proportional font size */
  margin-bottom: 10px;
}

/* Set the table border and cell padding */
table {
  border-collapse: collapse;
  border: 1px solid #d6d6d6;
  padding: calc(4px + 0.25vw); /* proportional padding */
}

/* Set the table header style */
th {
  font-weight: bold;
  text-align: left;
  border-bottom: calc(1px + 0.1vw) solid #d6d6d6; /* proportional border */
  padding: calc(4px + 0.25vw); /* proportional padding */
}

/* Set the table row style */
tr {
  border-bottom: 1px solid #d6d6d6;
}

/* Set the alternating row background color */
tr:nth-child(even) {
  background-color: #f6f6f6;
}

/* Set the hover effect on rows */
tr:hover {
  background-color: #ebebeb;
}

/* Set the table cell style */
td {
  padding: calc(4px + 0.25vw); /* proportional padding */
}

/* Reduce font size and padding for smaller screens */
@media (max-width: 600px) {
  table {
    font-size: 5px;
    margin-bottom: 5px;
  }
  th {
    padding: 2px;
    border-bottom: 1px solid #d6d6d6;
  }
  td {
    padding: 2px;
  }
}

&lt;/style&gt;

&lt;script&gt;var exports = {};&lt;/script&gt;

&lt;script src=&quot;https://d3js.org/d3.v7.min.js&quot;&gt;&lt;/script&gt;

&lt;!-- &lt;script src=&quot;https://cdn.jsdelivr.net/npm/markdown-writer@1.0.1/index.min.js&quot;&gt;&lt;/script&gt; --&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;https://unpkg.com/vis-network/standalone/umd/vis-network.min.js&quot;&gt;&lt;/script&gt;

&lt;style type=&quot;text/css&quot;&gt;
    #mynetwork {
        width: 50vw;
        height: 50vh;
        border: 1px solid lightgray;
    }
&lt;/style&gt;

&lt;h1&gt;Bellman Ford&lt;/h1&gt;
&lt;p&gt;In CS 3510 we recently learned about the Bellman Ford algorithm. It’s used for DAG’s (Directed Acyclic Graphs) that have negative edge weights in particular. The Bellman Ford algorithm is a dynamic programming algorithm that finds the shortest path from a source node to all other nodes in a graph. It is a generalization of Dijkstra’s algorithm, which only works on graphs with non-negative edge weights. The Bellman Ford algorithm can be used to find the shortest path in a graph with negative edge weights, but it is not guaranteed to find the shortest path in a graph with a negative cycle. The algorithm works by relaxing the edges of the graph in a topological order (also confusingly called linearization in CS3510).&lt;/p&gt;

&lt;h1&gt;Algorithm&lt;/h1&gt;
&lt;p&gt;The Bellman Ford algorithm works by relaxing the edges of the graph in a topological order. The algorithm starts by initializing the distance of the source node to 0 and all other nodes to infinity. Then, it relaxes the edges of the graph in a topological order. The algorithm then checks if there are any negative cycles in the graph. If there are, then the algorithm returns an error. If there are no negative cycles, then the algorithm returns the distances of all nodes from the source node.&lt;/p&gt;

&lt;p&gt;I’m a more visual learner, so to illustrate the algorithm at work, I created a visualization in javascript that shows how the edges’ costs are calculated. The visualization generates a random graph with random edge weights every time.&lt;/p&gt;

&lt;h1&gt;Visualization&lt;/h1&gt;
&lt;p id=&quot;iterations&quot; style=&quot;visibility: hidden; opacity: 0.0 &quot;&gt;0&lt;/p&gt;
&lt;div id=&quot;mynetwork&quot;&gt;
&lt;!-- add number of iterations --&gt;
&lt;/div&gt;

&lt;script type=&quot;text/javascript&quot; src=&quot;/assets/scripts/bellman.js&quot;&gt;
&lt;/script&gt;

&lt;!-- make a blank table and make sure that it stays above the footer --&gt;


          
          
        
      
        </content>

        
          <summary></summary>
        
      </entry>
    
  
    
      

      

      <entry>
        <title>Solving Every Sudoku</title>
        <id>https://vmallela.com/sudoku/</id>
        <link rel="alternate" type="text/html" href="https://vmallela.com/sudoku/" />
        <published>2020-10-26T00:00:00-04:00</published>

        
          <updated>2026-09-29T17:11:55-04:00</updated>
        

        <author>
          <name>Vedu Mallela</name>
          <uri>https://vmallela.com/</uri>
          <email>hi@vmallela.com, vmallela@csail.mit.edu</email>
        </author>

        <content type="html" xml:base="https://vmallela.com/">
          
            &lt;meta http-equiv=&quot;refresh&quot; content=&quot;0; url=https://labs.vmallela.com/sudoku&quot; /&gt;

&lt;link rel=&quot;canonical&quot; href=&quot;https://labs.vmallela.com/sudoku&quot; /&gt;


          
          
        
      
        </content>

        
          <summary></summary>
        
      </entry>
    
  
    
      

      

      <entry>
        <title>Cantor&apos;s Theorem</title>
        <id>https://vmallela.com/cantor/</id>
        <link rel="alternate" type="text/html" href="https://vmallela.com/cantor/" />
        <published>2020-10-26T00:00:00-04:00</published>

        
          <updated>2026-09-29T17:11:55-04:00</updated>
        

        <author>
          <name>Vedu Mallela</name>
          <uri>https://vmallela.com/</uri>
          <email>hi@vmallela.com, vmallela@csail.mit.edu</email>
        </author>

        <content type="html" xml:base="https://vmallela.com/">
          
            &lt;h1 id=&quot;cantors-theorem&quot;&gt;Cantor’s Theorem&lt;/h1&gt;

&lt;p&gt;P v. NP is a big problem in computer science. To learn more about it check &lt;a href=&quot;https://www.youtube.com/watch?v=YX40hbAHx3s&quot;&gt;this&lt;/a&gt; link out&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Some background in Set Theory&lt;/strong&gt;&lt;br /&gt;
In set theory, sets are basically arrays of any objects.&lt;br /&gt;
An example would be set alphabet = 
&lt;!-- ![a,b,c,d,etc.](/assets/images/mathjax/1.png) --&gt;
&lt;img src=&quot;/assets/images/mathjax/1.png&quot; width=&quot;30%&quot; alt=&quot;{a, b, c, d, etc.}&quot; /&gt;
The set can be anything from numbers to a list of fruits. Another concept in set theory is the powerset.&lt;br /&gt;
An easy way of thinking of powersets is the factors of a set. All the components that make it up but into smaller sets (subsets).&lt;/p&gt;

&lt;p&gt;here’s an example of powersets: suppose we have 
&lt;img src=&quot;/assets/images/mathjax/2.png&quot; alt=&quot;A = {2, 3}&quot; /&gt;&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;means an empty set {}&lt;br /&gt;
Another concept is Cardinality. It’s the number of elements in a set. So using the example of A: |A| = 2.&lt;br /&gt;
( “||” is the symbol for cardinality)&lt;br /&gt;
So what would be the cardinality of a set like all natural numbers?&lt;br /&gt;
There’s a special answer to this. 
&lt;img src=&quot;/assets/images/mathjax/3.png&quot; alt=&quot;Powerset of A: ℘(A) = {∅, {2}, {3}, {2, 3}}&quot; /&gt;
 Because it’s the cardinal of an infinitely large set, that means that there’s infinite elements as well.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Pairing up set elements&lt;/strong&gt;&lt;br /&gt;
When would a |Set A| = |Set B| ?&lt;br /&gt;
When we can match the elements of the set equally.&lt;br /&gt;
ex. Set A = {1, 2, 3} = Set B&lt;br /&gt;
Each element of the set has a counterpart in the other set, therefore their cardinalities are the same.&lt;br /&gt;
This is called one-to-one mapping or an &lt;a href=&quot;https://en.wikipedia.org/wiki/Bijective_function&quot;&gt;bijection function&lt;/a&gt; formally. Each element of the powerset and the original set should be mapped onto each other.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Diagonal Proof&lt;/strong&gt;&lt;br /&gt;
Cantor’s proof involved pairing up the sets 
&lt;img src=&quot;/assets/images/mathjax/4.png&quot; alt=&quot;|ℕ| = ℵ&quot; /&gt;
 but when he actually paired them up (injectively) he noticed a diagonal section of the sets which were never paired up. This continued on for the set length, proving that there’s an infinite number that can’t pair.&lt;br /&gt;
suppose 
&lt;img src=&quot;/assets/images/mathjax/5.png&quot; alt=&quot;|℘(x)| vs. |x|&quot; /&gt;
 &lt;img src=&quot;/assets/images/mathjax/6.png&quot; alt=&quot;{x | x ∈ ℝ}, with xₙ = 6&quot; /&gt;
 and that via infinite decimal expansion that the nth element is 6. But because of the counterpart set the nth element has to also be seen as a function of the expansion f(n) such that the n element is 4 and f(n)=6.&lt;br /&gt;
Those numbers are arbitrary but for any n, f(n) won’t equal the x observed by the original set.&lt;br /&gt;
Therefore 
&lt;img src=&quot;/assets/images/mathjax/7.png&quot; alt=&quot;|℘(ℕ)| ≥ ℵ&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Application to Theory of Computation&lt;/strong&gt;&lt;br /&gt;
This shows something important in the theory of computation though.&lt;br /&gt;
A string is a sequence of characters. So that means that there’s at least as many problems as the cardinality of all sets of strings.&lt;br /&gt;
Every computer program is a string, meaning that the number of programs is at most the number of strings. Cantor’s theorem implies that there’s more sets of strings than actual strings.&lt;br /&gt;
&lt;strong&gt;There are more problems than answers… You could pick a problem at random and the probability of solving it is ZERO.&lt;/strong&gt;&lt;br /&gt;
&lt;strong&gt;There’s problems that computer’s can’t solve.&lt;/strong&gt; 
&lt;img src=&quot;/assets/images/mathjax/8.png&quot; alt=&quot;P ≠ NP&quot; /&gt;&lt;/p&gt;

&lt;p&gt;If you want to check out a more formal math-y proof check &lt;a href=&quot;https://jlmartin.ku.edu/~jlmartin/courses/math410-S09/cantor.pdf&quot;&gt;this&lt;/a&gt; out.&lt;/p&gt;

          
          
        
      
        </content>

        
          <summary>Cantor’s Theorem</summary>
        
      </entry>
    
  
    
      

      

      <entry>
        <title>Atbash Cipher</title>
        <id>https://vmallela.com/atbash/</id>
        <link rel="alternate" type="text/html" href="https://vmallela.com/atbash/" />
        <published>2020-07-14T00:00:00-04:00</published>

        
          <updated>2026-09-29T17:11:55-04:00</updated>
        

        <author>
          <name>Vedu Mallela</name>
          <uri>https://vmallela.com/</uri>
          <email>hi@vmallela.com, vmallela@csail.mit.edu</email>
        </author>

        <content type="html" xml:base="https://vmallela.com/">
          
            &lt;meta http-equiv=&quot;refresh&quot; content=&quot;0; url=https://labs.vmallela.com/atbash&quot; /&gt;

&lt;link rel=&quot;canonical&quot; href=&quot;https://labs.vmallela.com/atbash&quot; /&gt;


          
          
        
      
        </content>

        
          <summary></summary>
        
      </entry>
    
  
    
      

      

      <entry>
        <title>ADFGVX Cipher</title>
        <id>https://vmallela.com/adfgvx/</id>
        <link rel="alternate" type="text/html" href="https://vmallela.com/adfgvx/" />
        <published>2020-06-29T00:00:00-04:00</published>

        
          <updated>2026-09-29T17:11:55-04:00</updated>
        

        <author>
          <name>Vedu Mallela</name>
          <uri>https://vmallela.com/</uri>
          <email>hi@vmallela.com, vmallela@csail.mit.edu</email>
        </author>

        <content type="html" xml:base="https://vmallela.com/">
          
            &lt;meta http-equiv=&quot;refresh&quot; content=&quot;0; url=https://labs.vmallela.com/adfgvx&quot; /&gt;

&lt;link rel=&quot;canonical&quot; href=&quot;https://labs.vmallela.com/adfgvx&quot; /&gt;


          
          
        
      
        </content>

        
          <summary></summary>
        
      </entry>
    
  
    
      

      

      <entry>
        <title>Twitter Sentiment Analysis</title>
        <id>https://vmallela.com/twitter/</id>
        <link rel="alternate" type="text/html" href="https://vmallela.com/twitter/" />
        <published>2020-06-18T00:00:00-04:00</published>

        
          <updated>2026-09-29T17:11:55-04:00</updated>
        

        <author>
          <name>Vedu Mallela</name>
          <uri>https://vmallela.com/</uri>
          <email>hi@vmallela.com, vmallela@csail.mit.edu</email>
        </author>

        <content type="html" xml:base="https://vmallela.com/">
          
            &lt;h1 id=&quot;twitter-sentiment-analysis&quot;&gt;&lt;a href=&quot;https://twitter.com/vmallela0&quot;&gt;Twitter&lt;/a&gt; Sentiment Analysis&lt;/h1&gt;

&lt;p&gt;Something cool you can do with the &lt;a href=&quot;https://twitter.com/home&quot;&gt;Twitter API&lt;/a&gt; is doing analysis on tweets. Using NLTK and some other libraries, you can run sentiment analysis on your queries.&lt;/p&gt;

&lt;iframe src=&quot;https://giphy.com/embed/l1L0hN8NkWQbNCDVm&quot; width=&quot;480&quot; height=&quot;328&quot; frameborder=&quot;0&quot; class=&quot;giphy-embed&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;

&lt;p&gt;By using the TextBlob library for NLP (Natural Language Processing), you can extract user’s tweet’s biases. Bias is measured in terms of &lt;a href=&quot;https://www.quora.com/What-is-polarity-and-subjectivity-in-sentiment-analysis&quot;&gt;Subjectivity and Polarity&lt;/a&gt; After gaining insights into individual tweet’s sentiment, you can query tweets from a given language and request up to around 10,000 queries. Using this data, I calculated median sentiments on a query which gets rid of the outliers in sentiment. Using matplotlib you can also plot out these tweets, providing a more visual representation of twitter sentiments.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/images/twimage.png&quot; alt=&quot;Scatter plot of tweet subjectivity versus polarity&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Some sample output for the query “&lt;a href=&quot;https://en.wikipedia.org/wiki/Bernie_Sanders&quot;&gt;Bernie Sanders&lt;/a&gt;”:&lt;/p&gt;

&lt;p&gt;10000 Results loaded!&lt;br /&gt;
Positive polarity:: 31.91%&lt;br /&gt;
Negative polarity:: 30.09%&lt;br /&gt;
Positive subjectivity:: 70.84%&lt;br /&gt;
Negative subjectivity:: 0.0%&lt;br /&gt;
Median polarity:: 0.0&lt;br /&gt;
Median subjectivity:: 0.25&lt;/p&gt;

&lt;h1 id=&quot;click-here-for-the-code&quot;&gt;&lt;a href=&quot;https://github.com/vmallela0/Twitter-Sentiment-Analysis/blob/master/main.ipynb&quot;&gt;Click here for the code&lt;/a&gt;&lt;/h1&gt;

          
          
        
      
        </content>

        
          <summary>Twitter Sentiment Analysis</summary>
        
      </entry>
    
  
    
      

      

      <entry>
        <title>Introduction to Artificial Intelligence</title>
        <id>https://vmallela.com/AI/</id>
        <link rel="alternate" type="text/html" href="https://vmallela.com/AI/" />
        <published>2020-06-06T00:00:00-04:00</published>

        
          <updated>2026-09-29T17:11:55-04:00</updated>
        

        <author>
          <name>Vedu Mallela</name>
          <uri>https://vmallela.com/</uri>
          <email>hi@vmallela.com, vmallela@csail.mit.edu</email>
        </author>

        <content type="html" xml:base="https://vmallela.com/">
          
            &lt;h1 style=&quot;font-size:xx-large&quot;&gt;Introduction to AI&lt;/h1&gt;

&lt;p&gt;&lt;b style=&quot;color: black;&quot;&gt;A gentle introduction to AI. Explained
                    with the minimal amount of CS/Math jargon possible
                    :)&lt;/b&gt;&lt;/p&gt;

&lt;iframe src=&quot;https://giphy.com/embed/WxJLwDBAXDsW1fqZ3v&quot; width=&quot;480&quot; height=&quot;270&quot; frameborder=&quot;0&quot; class=&quot;giphy-embed&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;

&lt;h1 style=&quot;color: grey;&quot;&gt;Lessons&lt;/h1&gt;


          
          
        
      
        </content>

        
          <summary>Introduction to AI</summary>
        
      </entry>
    
  
    
      

      

      <entry>
        <title>Collatz Conjecture</title>
        <id>https://vmallela.com/collatz/</id>
        <link rel="alternate" type="text/html" href="https://vmallela.com/collatz/" />
        <published>2020-05-23T00:00:00-04:00</published>

        
          <updated>2026-09-29T17:11:55-04:00</updated>
        

        <author>
          <name>Vedu Mallela</name>
          <uri>https://vmallela.com/</uri>
          <email>hi@vmallela.com, vmallela@csail.mit.edu</email>
        </author>

        <content type="html" xml:base="https://vmallela.com/">
          
            &lt;meta http-equiv=&quot;refresh&quot; content=&quot;0; url=https://labs.vmallela.com/collatz&quot; /&gt;

&lt;link rel=&quot;canonical&quot; href=&quot;https://labs.vmallela.com/collatz&quot; /&gt;


          
          
        
      
        </content>

        
          <summary></summary>
        
      </entry>
    
  
    
      

      

      <entry>
        <title>FRC Vision</title>
        <id>https://vmallela.com/frc/</id>
        <link rel="alternate" type="text/html" href="https://vmallela.com/frc/" />
        <published>2020-05-11T00:00:00-04:00</published>

        
          <updated>2026-09-29T17:11:55-04:00</updated>
        

        <author>
          <name>Vedu Mallela</name>
          <uri>https://vmallela.com/</uri>
          <email>hi@vmallela.com, vmallela@csail.mit.edu</email>
        </author>

        <content type="html" xml:base="https://vmallela.com/">
          
            &lt;iframe width=&quot;690&quot; height=&quot;420&quot; src=&quot;https://www.youtube.com/embed/eHxT02yAzrU?rel=0?version=3&amp;amp;autoplay=1&amp;amp;showinfo=0&amp;amp;loop=1&amp;amp;mute=1&amp;amp;playlist=eHxT02yAzrU&quot;&gt;&lt;/iframe&gt;

&lt;h1 id=&quot;infinite-recharge&quot;&gt;Infinite Recharge&lt;/h1&gt;

&lt;p&gt;Every year, &lt;a href=&quot;https://www.firstinspires.org/&quot;&gt;FIRST&lt;/a&gt; creates a game for students. The game involves making a robot from scratch inside a 2 month time frame. The 2020 game involved a robot shooting yellow balls into a hexagon target with a smaller circle in the back which gives teams more points. For more information on the game check out the &lt;a href=&quot;https://firstfrc.blob.core.windows.net/frc2020/Manual/2020FRCGameSeasonManual.pdf&quot;&gt;game manual&lt;/a&gt;&lt;/p&gt;

&lt;h1 id=&quot;how-it-works&quot;&gt;How it works&lt;/h1&gt;

&lt;p&gt;To get accurate vision readings, our camera shines a green ring light(which is around the robot) at the target (which is lined with retroreflective tape). By doing so, we can identify the target as a blob after turning down the camera’s exposure. From there, we take the width of the blob and find the distance and angle to the target.&lt;/p&gt;

&lt;p&gt;Finding the distance and angle to the target lets the robot line up perfectly with its target and calculate the speed required in order to shoot inside the target consistently&lt;/p&gt;

&lt;p&gt;This is a replacement for the &lt;a href=&quot;https://www.limelight.org&quot;&gt;limelight&lt;/a&gt; camera that most teams use. This variability in the placement of the shots taken allows the people who drive the robot ease in shooting and makes their job much easier.&lt;/p&gt;

&lt;p&gt;In the example below the robot’s turret follows the target around using a &lt;a href=&quot;https://en.wikipedia.org/wiki/PID_controller&quot;&gt;PID Loop&lt;/a&gt; to keep the motion smooth and optimal.&lt;/p&gt;

&lt;iframe width=&quot;690&quot; height=&quot;420&quot; src=&quot;https://www.youtube.com/embed/LJZ3TU13X5U?autoplay=1&amp;amp;loop=1&amp;amp;mute=1&amp;amp;playlist=LJZ3TU13X5U&quot;&gt;&lt;/iframe&gt;

&lt;h1 id=&quot;target&quot;&gt;Target&lt;/h1&gt;

&lt;p&gt;&lt;img src=&quot;/assets/images/IMG_2220.jpg&quot; alt=&quot;Diagram of the hexagonal FRC target with reflective tape on its lower half&quot; /&gt;&lt;/p&gt;

&lt;p&gt;The lower half of the hexagon above is lined with &lt;a href=&quot;https://www.3m.com/3M/en_US/company-us/all-3m-products/~/3M-Scotchlite-Reflective-Tape/?N=5002385+3293242016&amp;amp;rt=rud&quot;&gt;reflective tape&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;By putting a ring light around the OpenMV camera, the light reflects back at the camera and filters the blob well.&lt;/p&gt;

&lt;h1 id=&quot;distance-and-angle-measurements&quot;&gt;Distance and angle measurements&lt;/h1&gt;

&lt;p&gt;This is the formula to get the distance to the blob, this tells the robot’s flywheel what speed it should be spinning at in order to get in the goal&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/images/distance_calculation_frc.png&quot; alt=&quot;FRC Vision Distance Calculation&quot; /&gt;&lt;/p&gt;

&lt;p&gt;This is the formula for the angle to the target in x degrees, this information tells the robot how much it needs to turn the turret to line up with the target&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/images/theta_calculation_frc.png&quot; alt=&quot;FRC Vision Angle Calculation&quot; /&gt;&lt;/p&gt;

&lt;p&gt;In order to identify the flywheel speeds necessary to make our shots with consistency, we plotted different speeds and distances to apply a curve fit. When shooting, we take these values and rotate the flywheel by that many radians per second.&lt;/p&gt;

&lt;h1 id=&quot;resources&quot;&gt;Resources&lt;/h1&gt;

&lt;p&gt;We used an &lt;a href=&quot;https://www.openmv.io&quot;&gt;OpenMV&lt;/a&gt; camera and used the techniques highlighted &lt;a href=&quot;https://docs.wpilib.org/en/latest/docs/software/vision-processing/introduction/identifying-and-processing-the-targets.html&quot;&gt;here&lt;/a&gt; to process targets and get the data points we need. To communicate these values we use USB over serial and receive those values in the Java code.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/images/cadrobotringlight.jpg&quot; alt=&quot;CAD model of the robot turret with the ring-lit OpenMV camera&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Here’s a CAD of how the ring light was implemented on our turret&lt;/em&gt;&lt;/p&gt;

&lt;h1 id=&quot;heres-the-code&quot;&gt;&lt;a href=&quot;https://github.com/vmallela0/titanvision2020&quot;&gt;Here’s the code&lt;/a&gt;&lt;/h1&gt;


          
          
        
      
        </content>

        
          <summary></summary>
        
      </entry>
    
  
    
      

      

      <entry>
        <title>First Blog Post</title>
        <id>https://vmallela.com/pilot/</id>
        <link rel="alternate" type="text/html" href="https://vmallela.com/pilot/" />
        <published>2020-05-08T00:00:00-04:00</published>

        
          <updated>2026-09-29T17:11:55-04:00</updated>
        

        <author>
          <name>Vedu Mallela</name>
          <uri>https://vmallela.com/</uri>
          <email>hi@vmallela.com, vmallela@csail.mit.edu</email>
        </author>

        <content type="html" xml:base="https://vmallela.com/">
          
            &lt;p&gt;Hi!&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://media4.giphy.com/media/QYkX9IMHthYn0Y3pcG/giphy.gif?cid=ecf05e47tga3pd7hdeckdoiww6vskb2xghj7vd9c3dtz5yn9&amp;amp;rid=giphy.gif&amp;amp;ct=g&quot; alt=&quot;Waving hello GIF&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Thanks for visiting this website! I’m Vedu, a senior at Northview High School in Johns Creek, GA. This website is just for fun and is to showcase some of my projects.
I look forward to posting more content here!&lt;/p&gt;


          
          
        
      
        </content>

        
          <summary>Hi!</summary>
        
      </entry>
    
  
    
      

      

      <entry>
        <title>BrainPainter</title>
        <id>https://vmallela.com/brainpainter/</id>
        <link rel="alternate" type="text/html" href="https://vmallela.com/brainpainter/" />
        <published>2020-01-03T00:00:00-05:00</published>

        
          <updated>2026-09-29T17:11:55-04:00</updated>
        

        <author>
          <name>Vedu Mallela</name>
          <uri>https://vmallela.com/</uri>
          <email>hi@vmallela.com, vmallela@csail.mit.edu</email>
        </author>

        <content type="html" xml:base="https://vmallela.com/">
          
            &lt;p&gt;&lt;a href=&quot;https://brainpainter.csail.mit.edu&quot;&gt;BrainPainter&lt;/a&gt; is a software for visualizing brain structures with biomarker data. BrainPainter models various atlases which show disease progression for human and mice brains. I’m involved with this project through a research internship with &lt;a href=&quot;https://csail.mit.edu&quot;&gt;MIT CSAIL&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/images/brainpainter-diagram.png&quot; alt=&quot;BrainPainter Diagram&quot; /&gt;&lt;/p&gt;

&lt;p&gt;BrainPainter was made to take raw data from neuroscience studies and transform it into something more interpretable. Visualization of the raw data is a way to communicate results from trials more effectively.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/images/mouse_example.jpg&quot; alt=&quot;BrainPainter rendering of a mouse brain with highlighted regions&quot; /&gt;&lt;/p&gt;

&lt;p&gt;As a contributor to this project, I added different viewing angles, added visualization for the left hemisphere, and developed a way to visualize mice brains. I am supervised by &lt;a href=&quot;https://razvan.csail.mit.edu&quot;&gt;Dr. Razvan Marinescu&lt;/a&gt;. I first-authored a paper while working on this project, check it out &lt;a href=&quot;&quot;&gt;here&lt;/a&gt;. You can find the &lt;a href=&quot;https://github.com/razvanmarinescu/brain-coloring&quot;&gt;code&lt;/a&gt; for this project on GitHub. You can also run BrainPainter from the &lt;a href=&quot;https://brainpainter.csail.mit.edu&quot;&gt;browser here&lt;/a&gt;. Feel free to &lt;a href=&quot;/contact/&quot;&gt;reach out to me&lt;/a&gt; to talk about my work on BrainPainter.&lt;/p&gt;

          
          
        
      
        </content>

        
          <summary>BrainPainter is a software for visualizing brain structures with biomarker data. BrainPainter models various atlases which show disease progression for human and mice brains. I’m involved with this project through a research internship with MIT CSAIL.</summary>
        
      </entry>
    
  
    
      

      

      <entry>
        <title>COVerage</title>
        <id>https://vmallela.com/coverage/</id>
        <link rel="alternate" type="text/html" href="https://vmallela.com/coverage/" />
        <published>2020-01-02T00:00:00-05:00</published>

        
          <updated>2026-09-29T17:11:55-04:00</updated>
        

        <author>
          <name>Vedu Mallela</name>
          <uri>https://vmallela.com/</uri>
          <email>hi@vmallela.com, vmallela@csail.mit.edu</email>
        </author>

        <content type="html" xml:base="https://vmallela.com/">
          
            &lt;p&gt;“Coverage” is an AI-powered news application that compiles local news related to the COVID-19 pandemic. Information, ranging from local outbreak news to school closures/updates, is analyzed by our natural language processing AI, summarized, and ranked.&lt;/p&gt;

&lt;!-- add image in markdown --&gt;
&lt;p&gt;&lt;img src=&quot;/assets/img/COVerage_dashboard.jpg&quot; alt=&quot;COVerage dashboard showing local COVID-19 news and case maps for Santa Clara County&quot; title=&quot;COVerage&quot; /&gt;&lt;/p&gt;

&lt;p&gt;“Coverage” was created to obtain the latest news from local outlets on how the COVID-19 pandemic is impacting the community by taking a user’s location. We categorize news into five sections: Policy Changes (local laws/curfews), Finance, Vaccine Progress, Education, and Statistics/Spread Rates.&lt;/p&gt;

&lt;p&gt;As a contributor to this project, I managed the development and wrote thousands of lines of code. I also co-created the algorithm we use to rank our search results. I first-authored our &lt;a href=&quot;https://theinformaticists.com/2020/08/25/coverage-region-specific-sars-cov-2-news-query-algorithm/&quot;&gt;paper&lt;/a&gt;. Our team presented this as a talk to the Stanford Electrical Engineering faculty in Summer of 2020. My team and I initially started COVerage as a response to the lack of up-to-date and reliable news for how COVID-19 was affecting our communities. Whether we were looking at the number of cases in our county or how our local grocery stores are affected, we couldn’t find a solid way to view everything at once. This is why we created COVerage.&lt;/p&gt;

&lt;p&gt;A cool feature of COVerage that we got a chance to implement is news from around the world. For example, if a user is looking at COVerage’s interface from Tokyo, Japan, then COVerage will show news in Japanese and will show news from local Tokyo news.&lt;/p&gt;

&lt;p&gt;You can find our GitHub repository &lt;a href=&quot;https://github.com/vmallela0/COVerage&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;My team’s involvement with this project was through the &lt;a href=&quot;https://compression.stanford.edu/summer-internships-high-school-students&quot;&gt;STEM2SHTEM Stanford Compression Forum Internship program&lt;/a&gt;. After the program ended, our team met with some professors within the Electrical Engineering Department to discuss continuing our research into Fall. We then had the opportunity to talk about our project with &lt;a href=&quot;https://journalism.stanford.edu&quot;&gt;Stanford Journalism&lt;/a&gt;. This project was my introduction to computer science research.&lt;/p&gt;


          
          
        
      
        </content>

        
          <summary>“Coverage” is an AI-powered news application that compiles local news related to the COVID-19 pandemic. Information, ranging from local outbreak news to school closures/updates, is analyzed by our natural language processing AI, summarized, and ranked.</summary>
        
      </entry>
    
  
    
      

      

      <entry>
        <title>Blmaps</title>
        <id>https://vmallela.com/blmaps/</id>
        <link rel="alternate" type="text/html" href="https://vmallela.com/blmaps/" />
        <published>2020-01-01T00:00:00-05:00</published>

        
          <updated>2026-09-29T17:11:55-04:00</updated>
        

        <author>
          <name>Vedu Mallela</name>
          <uri>https://vmallela.com/</uri>
          <email>hi@vmallela.com, vmallela@csail.mit.edu</email>
        </author>

        <content type="html" xml:base="https://vmallela.com/">
          
            &lt;p&gt;Over the Summer (&lt;a href=&quot;https://en.wikipedia.org/wiki/George_Floyd_protests&quot;&gt;2019&lt;/a&gt;) I had trouble finding protests near me. I created a web app that helps people across the state of Georgia locate and plan for protests near them. In addition to the mapping functionality of the app, I also partnered with several black lives matter organizations in my state to compile a list of resources to help educate and counsel people on the issue.&lt;/p&gt;

&lt;iframe src=&quot;https://blm.vmallela.com&quot; width=&quot;100%&quot; height=&quot;600&quot; frameborder=&quot;0&quot; style=&quot;border:0;&quot; allowfullscreen=&quot;&quot; aria-hidden=&quot;false&quot; tabindex=&quot;0&quot;&gt;&lt;/iframe&gt;

          
          
        
      
        </content>

        
          <summary>Over the Summer (2019) I had trouble finding protests near me. I created a web app that helps people across the state of Georgia locate and plan for protests near them. In addition to the mapping functionality of the app, I also partnered with several black lives matter organizations in my state to compile a list of resources to help educate and counsel people on the issue.</summary>
        
      </entry>
    
  
</feed>
