-
Notifications
You must be signed in to change notification settings - Fork 0
/
feed.xml
165 lines (131 loc) · 13.3 KB
/
feed.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
<channel>
<title></title>
<description>Hashim Asad's CS portfolio -- student at UMichigan.</description>
<link>http://localhost:4000</link>
<atom:link href="http://localhost:4000/feed.xml" rel="self" type="application/rss+xml" />
<item>
<title>Image Processing (Seam Carving)</title>
<description><p><img src="/img/image_processing.png" width="100%" /></p>
<h5 id="implementing-the-seam-carving-algorithm-in-c">Implementing the Seam Carving Algorithm in C++.</h5>
<p>This was a project I completed for my class (<strong>EECS 280. Programming and Introductory Data Structures</strong>) at the University of Michigan.
<br /><br />
I won’t be sharing my implementation/code in order to abide by UofM’s honor code, however, the point of the project was to use structs, arrays, pointer, etc in C++ to implement the Seam Carving Algorithm for content-aware image resizing. This is different from normal cropping because the algortihm identifies and removes the “seams” (paths of pixels in the image) that are least important; you can see this in the examples above.
<br /><br />
You can find the full project spec <a href="https://eecs280staff.github.io/p2-cv/">here</a>.
<br /></p>
<h5 id="to-learn-more-about-the-algorithm-you-can-watch-the-video-below">To learn more about the algorithm, you can watch the video below:</h5>
<iframe height="500px" src="https://www.youtube.com/embed/6NcIJXTlugc" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen=""></iframe>
</description>
<pubDate>Sun, 11 Oct 2020 00:00:00 -0400</pubDate>
<link>http://localhost:4000/image-processing/</link>
<guid isPermaLink="true">http://localhost:4000/image-processing/</guid>
</item>
<item>
<title>Plotting Useful Data (Weather Chart)</title>
<description><h5 id="using-pandas-to-extract-useful-data-and-matplotlib-to-create-a-chart">Using Pandas to extract useful data and Matplotlib to create a chart.</h5>
<p>This was one of the projects I needed to complete to earn my certificate in the Coursera course <strong>Applied Plotting, Charting &amp; Data Representation in Python</strong> by the University of Michigan.
<br /><br />
I won’t be sharing the exact code in order to abide by Coursera’s honor code, however, I will describe the problem:<br />
Given a CSV of weather data ranging from 2005 to 2015, I wanted to plot the record high and low temperatures (in degrees celsius) of each day of the year over the period from 2005 to 2014 and then plot the points of 2015, where records were broken.
<br /><br />
I approached the problem by first splitting off data from the year 2015 into a different Pandas DataFrame. Then I reformatted the date values to exclude year and used <code class="language-plaintext highlighter-rouge">groupby()</code> to find the minimum and maximum values for each day. Next, I looped through each day and compared the 2015 highs and lows to the records from 2005-2014 and appending the day and value to arrays if the 2015 values broke the records.<br />
Finally, I plotted each of the records from 2005-2014 and scattered the points from 2015 that broke records.</p>
</description>
<pubDate>Thu, 17 Sep 2020 00:00:00 -0400</pubDate>
<link>http://localhost:4000/weather-chart/</link>
<guid isPermaLink="true">http://localhost:4000/weather-chart/</guid>
</item>
<item>
<title>Img to Docs (Google Docs add-on)</title>
<description><p><img src="/img/img_to_docs-logo.png" height="200px" width="200px" /></p>
<h5 id="a-custom-add-on-i-wrote-for-image-ocr-in-docs">A custom add-on I wrote for image OCR in docs!</h5>
<h6 id="to-try-out-img-to-docs-you-can-install-it-here">To try out Img to Docs, you can install it <a href="https://gsuite.google.com/marketplace/app/img_to_docs_image_ocr/1024533292248">here</a>!</h6>
<p>This was a project I did during the summer after my senior year of high school. I had been taking some Coursera courses where I found myself taking pictures of presentation slides to use as notes, and I figured that it would be really convenient to have an OCR tool built into my google docs notes for quick note taking. I couldn’t find any add-on like this already available, so I decided to make it myself.
<br /><br />
This project was written with HTML, CSS, JS, and Google Apps Script (which is like JS, but with extra tools for interacting with the google doc). The OCR engine being used is Tesseract JS.
<br /><br />
I’ve published this add-on to the G-Suite Marketplace for free, so anyone can install and use it.
<br /><br /></p>
<h4 id="code-snippets-full-code-available-here">Code Snippets (full code available <a href="https://github.com/asadh1/Img-to-Docs">here</a>):</h4>
</description>
<pubDate>Wed, 16 Sep 2020 00:00:00 -0400</pubDate>
<link>http://localhost:4000/img-to-docs-blog/</link>
<guid isPermaLink="true">http://localhost:4000/img-to-docs-blog/</guid>
</item>
<item>
<title>Grubhub Menu Scraper (Selenium Web Scraping)</title>
<description><h5 id="a-python-program-that-automates-browser-actions-for-web-scraping">A python program that automates browser actions for web scraping!</h5>
<p>I wrote this program during an internship in the summer after my junior year of high school. The start-up that I was interning at provided a point-of-sale service for restaurants as their product, and they thought it could be useful to scrape the menu of specific locations of a chain because the menu can very by location.
<br /><br />
The program uses Python language bindings for Selenium WebDriver to automate a chrome browser and interact with the webpage. In this way, we can scrape javascript generated content that we can’t get from normal scraping (using <code class="language-plaintext highlighter-rouge">requests.get()</code> ). It also uses <code class="language-plaintext highlighter-rouge">BeautifulSoup</code> to parse HTML received from the browser.
<br /><br />
Note: The program normally runs in headless mode. This was disabled in the video above for demonstration purposes.
<br /><br /></p>
<h5 id="python-code-snippets-full-code-available-here">Python Code Snippets (full code available <a href="https://github.com/asadh1/Grubhub-Menu-Scraper">here</a>)</h5>
<h6 id="getting-options-of-an-item-in-the-menu">Getting options of an item in the menu:</h6>
<p>``` python
def get_item(browser, id): # id is the html id
“”” given an id, scrape a menu item and all of its options “””
button = browser.find_element_by_id(id)
# click on the item to open options chooser:
browser.execute_script(“arguments[0].click();”, button)
time.sleep(1)</p>
</description>
<pubDate>Tue, 15 Sep 2020 00:00:00 -0400</pubDate>
<link>http://localhost:4000/grubhub-scraper/</link>
<guid isPermaLink="true">http://localhost:4000/grubhub-scraper/</guid>
</item>
<item>
<title>FRC Scouting Website (Custom Data Collection Website)</title>
<description><h5 id="a-website-that-records-completely-customizable-user-input">A website that records completely customizable user input!</h5>
<p>This was a project I did during the FRC (First Robotics Composition) season of my junior year of high school (2019 season - FRC Destination: Deep Space).
<br /><br />
In FRC, it was important to my team that on competition days, we scout other teams–that is to assign some of our team members to watch a specific robotics team in a match and log all the point scoring actions they make. This data is later used to help choose teams that would work well with our own later on in the competition.
<br /><br />
Normally, we would make a Google Form to log this information with drop-down menus and multiple choice questions, but <strong>I thought I could make the interface more interactive</strong> and fun, so I did! I wrote code for the webpage during free time in class and during robotics meetings. <strong>On my webpage, rather than choosing from drop-down menus, users interact with representations of the field elements in the game. My code then tallies up this information and appends it to a Google Sheet just like a Google Form would.</strong>
<br /><br />
I was able to get the webpage to an acceptable level, and my team ended up using it instead of a Google Form. It was met with really positive reviews, with people saying it was easy to use and some saying that they loved it–It was liked well enough that mentors wanted to make our own scouting webpage again the next year and assigned it as a task for our programming sub-team.
<br /><br />
This project uses HTML and CSS to create representations of the game’s field elements for the form. Javascript is used to handle the game logic of the webpage (to keep everything in line with the rules of the game), read the input, and pass on the data to the backend. Python (with the Flask framework) is used on the backend to post the data to a Google Sheets using a the Google Sheets API to manipulate a service account (a kind of dummy account manipulated by code to edit and write to Google Files).
<br /><br /></p>
<h4 id="code-snippets">Code Snippets:</h4>
</description>
<pubDate>Mon, 14 Sep 2020 00:00:00 -0400</pubDate>
<link>http://localhost:4000/frc-scouter/</link>
<guid isPermaLink="true">http://localhost:4000/frc-scouter/</guid>
</item>
<item>
<title>Virtual Game Controller (Web-Based Gamepad) for Mac</title>
<description><h5 id="use-a-smartphone-as-a-virtual-game-controller-for-any-computer-game">Use a smartphone as a virtual game controller for any computer game!</h5>
<p>This was a project I did during my junior and part of my senior year of high school. I got the idea from a website I found called airconsole.com, which has some multiplayer games that you control using your phone. I figured that I could make my own version of that using emulated keyboard keys and gamepad input, so that it could be used for any game I wanted.<br />
The goal of the project was to make a convenient way to play games with separate game controllers, meaning without having to bring a physical controller with you everywhere, you can simply use your phone and play multiplayer games (no phone apps needed!).
<br /><br />
This project was written with Python using its Flask framework, HTML and CSS for the UI webpage (mostly through flask macros), and JS to keep track of the UI and make requests to Flask.
<br /><br />
The gamepad emulation uses <a href="https://github.com/unbit/foohid">this project</a> to emulate usb HID devices on mac (on windows I would use <a href="http://vjoystick.sourceforge.net/site/index.php/download-a-install/download">vjoy</a>).<br />
The keyboard events are generated with the <a href="https://pypi.org/project/pyobjc-framework-Quartz/">quartz</a> framework for mac.<br />
The touch screen joystick on the webpage UI uses this JS project <a href="https://github.com/jeromeetienne/virtualjoystick.js">virtualjoystick.js</a>.
<br /><br />
Note: not shown in the video, is a feature later added to generates a qr code, so that you users can quickly scan that rather than manually type in the ip address.<br />
<img src="/img/qrcode.png" height="400px" width="400px" /><br />
Also, the gamepad emulation also supports multiple players.
<br /><br /></p>
<h4 id="code-snippets">Code Snippets:</h4>
</description>
<pubDate>Sun, 13 Sep 2020 00:00:00 -0400</pubDate>
<link>http://localhost:4000/virtual-controller/</link>
<guid isPermaLink="true">http://localhost:4000/virtual-controller/</guid>
</item>
<item>
<title>Custom USB Keyboard with Arduino</title>
<description><h5 id="using-an-arduino-to-emulate-a-usb-keyboard">Using an Arduino to emulate a USB Keyboard.</h5>
<p>This project uses the built-in USB of an Arduino Micro to make the device recognizable as a USB keyboard.</p>
</description>
<pubDate>Sat, 12 Sep 2020 00:00:00 -0400</pubDate>
<link>http://localhost:4000/usb-keyboard/</link>
<guid isPermaLink="true">http://localhost:4000/usb-keyboard/</guid>
</item>
</channel>
</rss>