<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Xuanhao</title><link>https://www.xh-zhang.com/</link><atom:link href="https://www.xh-zhang.com/index.xml" rel="self" type="application/rss+xml"/><description>Xuanhao</description><generator>Source Themes Academic (https://sourcethemes.com/academic/)</generator><language>en-us</language><lastBuildDate>Sun, 01 Dec 2024 16:40:57 -0400</lastBuildDate><image><url>https://www.xh-zhang.com/img/icon-192.png</url><title>Xuanhao</title><link>https://www.xh-zhang.com/</link></image><item><title>Robotic Arm to Automatically Changing 3D Printer Plates</title><link>https://www.xh-zhang.com/project/robotic_arm/</link><pubDate>Sun, 01 Dec 2024 16:40:57 -0400</pubDate><guid>https://www.xh-zhang.com/project/robotic_arm/</guid><description>
&lt;h2 id=&#34;adversarial-video-generation&#34;&gt;Adversarial Video Generation&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Design and implement a robotic arm system capable of automatically removing finished 3D print
plates (for Bambulab A1C) and replacing them with new ones.&lt;/li&gt;
&lt;li&gt;Implement ROS nodes for motion planning, sensor data processing, and error handling, ensuring
robust and reliable system operation.&lt;/li&gt;
&lt;li&gt;Started from self-implemented inverse kinematics algorithms to leverage MoveIt! within ROS to
generate smooth and collision-free trajectories for the robotic arm. Working on integrating LLM
APIs to the system.&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>API tools for Cryptocurrency quantitative analysis</title><link>https://www.xh-zhang.com/project/quantsde/</link><pubDate>Mon, 01 Feb 2021 16:40:57 -0400</pubDate><guid>https://www.xh-zhang.com/project/quantsde/</guid><description>
&lt;p&gt;Quantitative analysis tool based on the &lt;a href=&#34;https://github.com/ccxt/ccxt&#34; target=&#34;_blank&#34;&gt;CCXT&lt;/a&gt;, which is a JavaScript / Python / PHP library for cryptocurrency trading and e-commerce with support for many bitcoin/ether/altcoin exchange markets and merchant APIs.&lt;/p&gt;
&lt;h2 id=&#34;features&#34;&gt;Features&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Ping all active training pairs (e.g. BTC/ETH, BTC/USDT etc.) and cache for later usage.&lt;/li&gt;
&lt;li&gt;Fetch all active training pairs price difference in one specific exchange from &lt;code&gt;STARTTIME&lt;/code&gt; to &lt;code&gt;ENDTIME&lt;/code&gt; in Timestamp.&lt;/li&gt;
&lt;li&gt;From public API, no requirement for API key or registration.&lt;/li&gt;
&lt;li&gt;Export to *.xlsx&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;demo&#34;&gt;Demo&lt;/h2&gt;
&lt;p&gt;&lt;img src=&#34;https://media.giphy.com/media/mtp7mozH35kMXcCOo5/giphy.gif&#34; alt=&#34;In verbose mode&#34; /&gt;&lt;/p&gt;
&lt;h2 id=&#34;to-do&#34;&gt;To-do&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Add an argparser&lt;/li&gt;
&lt;li&gt;Multiprocess support&lt;/li&gt;
&lt;li&gt;GUI and k-line&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Movie Recommendation System</title><link>https://www.xh-zhang.com/project/movie/</link><pubDate>Thu, 01 Oct 2020 17:30:40 -0400</pubDate><guid>https://www.xh-zhang.com/project/movie/</guid><description>
&lt;h2 id=&#34;movie-recommendation-system&#34;&gt;Movie Recommendation System&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Built a movie recommendation system based on Collaborative Filter in PySpark on the MovieLens Dataset.&lt;/li&gt;
&lt;li&gt;Conducted ETL scripts to ﬁlter movies’ categories, rating or other information with Pandas and Spark.&lt;/li&gt;
&lt;li&gt;Analyzed and compared the performance with other cluster algorithms like K-means and DBSCAN.&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Web-based Trash Classifier</title><link>https://www.xh-zhang.com/project/trash/</link><pubDate>Wed, 01 Jan 2020 17:30:40 -0400</pubDate><guid>https://www.xh-zhang.com/project/trash/</guid><description>
&lt;h2 id=&#34;web-based-trash-classifier&#34;&gt;Web-based Trash Classifier&lt;/h2&gt;
&lt;p&gt;Designed a web-based trash classifier using Javascript and TensorFlow.JS. Users can get access through both mobile phone or website.&lt;/p&gt;</description></item><item><title>YelpBBQ</title><link>https://www.xh-zhang.com/project/yelpbbq/</link><pubDate>Wed, 02 Oct 2019 16:32:52 -0400</pubDate><guid>https://www.xh-zhang.com/project/yelpbbq/</guid><description>
&lt;h1 id=&#34;yelpbbq&#34;&gt;YelpBBQ&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;A RESTful Node.js web application project that allows users to share their BBQ experience by uploading photos and comments.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&#34;live-demo&#34;&gt;Live Demo&lt;/h2&gt;
&lt;p&gt;To see the app in action, go to &lt;a href=&#34;https://calm-depths-02705.herokuapp.com/&#34; target=&#34;_blank&#34;&gt;https://calm-depths-02705.herokuapp.com/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Username: guest
Password: guest&lt;/p&gt;
&lt;h2 id=&#34;features&#34;&gt;Features&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Authentication:
&lt;ul&gt;
&lt;li&gt;User login with username and password&lt;/li&gt;
&lt;li&gt;Admin sign-up with admin code&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Authorization:
&lt;ul&gt;
&lt;li&gt;One cannot manage posts and view user profile without being authenticated&lt;/li&gt;
&lt;li&gt;One cannot edit or delete posts and comments created by other users&lt;/li&gt;
&lt;li&gt;Admin can manage all posts and comments&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Manage campground posts with basic functionalities:
&lt;ul&gt;
&lt;li&gt;Create, edit and delete posts and comments&lt;/li&gt;
&lt;li&gt;Upload campground photos&lt;/li&gt;
&lt;li&gt;Display campground location on Google Maps&lt;/li&gt;
&lt;li&gt;Search existing campgrounds&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Manage user account with basic functionalities:
Password reset via email confirmation~~ (disabled)
&lt;ul&gt;
&lt;li&gt;Profile page setup with sign-up&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Flash messages responding to users&amp;rsquo; interaction with the app&lt;/li&gt;
&lt;li&gt;Responsive web design&lt;/li&gt;
&lt;li&gt;&lt;h3 id=&#34;custom-enhancements&#34;&gt;Custom Enhancements&lt;/h3&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Update campground photos when editing campgrounds&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Update personal information on profile page&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Improve image load time on the landing page using Cloudinary&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Use Helmet to strengthen security&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;front-end&#34;&gt;Front-end&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#&#34;&gt;ejs&lt;/a&gt;(&lt;a href=&#34;http://ejs.co/&#34; target=&#34;_blank&#34;&gt;http://ejs.co/&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#&#34;&gt;Google Maps APIs&lt;/a&gt;(&lt;a href=&#34;https://developers.google.com/maps/&#34; target=&#34;_blank&#34;&gt;https://developers.google.com/maps/&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#&#34;&gt;Bootstrap&lt;/a&gt;(&lt;a href=&#34;https://getbootstrap.com/docs/3.3/&#34; target=&#34;_blank&#34;&gt;https://getbootstrap.com/docs/3.3/&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;back-end&#34;&gt;Back-end&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#&#34;&gt;express&lt;/a&gt;(&lt;a href=&#34;https://expressjs.com/&#34; target=&#34;_blank&#34;&gt;https://expressjs.com/&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#&#34;&gt;mongoDB&lt;/a&gt;(&lt;a href=&#34;https://www.mongodb.com/&#34; target=&#34;_blank&#34;&gt;https://www.mongodb.com/&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#&#34;&gt;mongoose&lt;/a&gt;(&lt;a href=&#34;http://mongoosejs.com/&#34; target=&#34;_blank&#34;&gt;http://mongoosejs.com/&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#&#34;&gt;async&lt;/a&gt;(&lt;a href=&#34;http://caolan.github.io/async/&#34; target=&#34;_blank&#34;&gt;http://caolan.github.io/async/&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#&#34;&gt;crypto&lt;/a&gt;(&lt;a href=&#34;https://nodejs.org/api/crypto.html#crypto_crypto&#34; target=&#34;_blank&#34;&gt;https://nodejs.org/api/crypto.html#crypto_crypto&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#&#34;&gt;helmet&lt;/a&gt;(&lt;a href=&#34;https://helmetjs.github.io/&#34; target=&#34;_blank&#34;&gt;https://helmetjs.github.io/&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#&#34;&gt;passport&lt;/a&gt;(&lt;a href=&#34;http://www.passportjs.org/&#34; target=&#34;_blank&#34;&gt;http://www.passportjs.org/&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#&#34;&gt;passport-local&lt;/a&gt;(&lt;a href=&#34;https://github.com/jaredhanson/passport-local#passport-local&#34; target=&#34;_blank&#34;&gt;https://github.com/jaredhanson/passport-local#passport-local&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#&#34;&gt;express-session&lt;/a&gt;(&lt;a href=&#34;https://github.com/expressjs/session#express-session&#34; target=&#34;_blank&#34;&gt;https://github.com/expressjs/session#express-session&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#&#34;&gt;method-override&lt;/a&gt;(&lt;a href=&#34;https://github.com/expressjs/method-override#method-override&#34; target=&#34;_blank&#34;&gt;https://github.com/expressjs/method-override#method-override&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#&#34;&gt;nodemailer&lt;/a&gt;(&lt;a href=&#34;https://nodemailer.com/about/&#34; target=&#34;_blank&#34;&gt;https://nodemailer.com/about/&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#&#34;&gt;moment&lt;/a&gt;(&lt;a href=&#34;https://momentjs.com/&#34; target=&#34;_blank&#34;&gt;https://momentjs.com/&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#&#34;&gt;cloudinary&lt;/a&gt;(&lt;a href=&#34;https://cloudinary.com/&#34; target=&#34;_blank&#34;&gt;https://cloudinary.com/&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#&#34;&gt;geocoder&lt;/a&gt;(&lt;a href=&#34;https://github.com/wyattdanger/geocoder#geocoder&#34; target=&#34;_blank&#34;&gt;https://github.com/wyattdanger/geocoder#geocoder&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#&#34;&gt;connect-flash&lt;/a&gt;(&lt;a href=&#34;https://github.com/jaredhanson/connect-flash#connect-flash&#34; target=&#34;_blank&#34;&gt;https://github.com/jaredhanson/connect-flash#connect-flash&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;platforms&#34;&gt;Platforms&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#&#34;&gt;Cloudinary&lt;/a&gt;(&lt;a href=&#34;https://cloudinary.com/&#34; target=&#34;_blank&#34;&gt;https://cloudinary.com/&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#&#34;&gt;Heroku&lt;/a&gt;(&lt;a href=&#34;https://www.heroku.com/&#34; target=&#34;_blank&#34;&gt;https://www.heroku.com/&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#&#34;&gt;Cloud9&lt;/a&gt;(&lt;a href=&#34;https://aws.amazon.com/cloud9/?origin=c9io&#34; target=&#34;_blank&#34;&gt;https://aws.amazon.com/cloud9/?origin=c9io&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;what-next&#34;&gt;What Next&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Immigrate to AWS and DynamoDB&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Google Analytics Customer Revenue Prediction</title><link>https://www.xh-zhang.com/project/analytic/</link><pubDate>Tue, 01 Oct 2019 17:30:40 -0400</pubDate><guid>https://www.xh-zhang.com/project/analytic/</guid><description>&lt;ul&gt;
&lt;li&gt;Analyzed raw log data from GStore (faced to normal customers) to predict revenue per customer.&lt;/li&gt;
&lt;li&gt;Preprocessed the raw data (2.4GB) based on Pandas and Numpy and made data visualization based on Matplotlib and Seaborn module.&lt;/li&gt;
&lt;li&gt;Improved the data procession speed based on parallelization using Hadoop and PySpark.&lt;/li&gt;
&lt;li&gt;Trained model to predict based on LightGBM, XGBoost and CatBoost, assembled these models to improve 20% performance.&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Adversarial Video Generation</title><link>https://www.xh-zhang.com/project/gan/</link><pubDate>Tue, 01 Oct 2019 16:40:57 -0400</pubDate><guid>https://www.xh-zhang.com/project/gan/</guid><description>
&lt;h2 id=&#34;adversarial-video-generation&#34;&gt;Adversarial Video Generation&lt;/h2&gt;
&lt;p&gt;This project was forked from &lt;a href=&#34;https://github.com/dyelax/Adversarial_Video_Generation&#34; target=&#34;_blank&#34;&gt;dyelax’s work&lt;/a&gt; and immigrated to TensorFlow1.2 and Python3, in order to be compatible to GTX1080 or later version GPU.&lt;/p&gt;
&lt;p&gt;Adversarial generation uses two networks – a generator and a discriminator – to improve the sharpness of generated images. Given the past four frames of video, the generator learns to generate accurate predictions for the next frame. Given either a generated or a real-world image, the discriminator learns to correctly classify between generated and real. The two networks &amp;ldquo;compete,&amp;rdquo; with the generator attempting to fool the discriminator into classifying its output as real. This forces the generator to create frames that are very similar to what real frames in the domain might look like.&lt;/p&gt;
&lt;h3 id=&#34;results&#34;&gt;Results&lt;/h3&gt;
&lt;p&gt;We collected the data from a basketball game and a video game Snake.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://media.giphy.com/media/PlxrWSwTTjA3KFW8Rp/giphy.gif&#34; width=&#34;425&#34; height=&#34;350&#34;&gt; &lt;img src=&#34;https://media.giphy.com/media/L0xNHleHM9K0gWvV2u/giphy.gif&#34; width=&#34;425&#34; height=&#34;350&#34;&gt;&lt;/p&gt;
&lt;p&gt;After the first 10000 times training, the last frame of the Snake Game looked still fuzzy.&lt;/p&gt;
&lt;p&gt;The detailed results is shown at &lt;a href=&#34;https://docs.google.com/presentation/d/1dSCPw3_T-7nOAzeLDiZp9Sbr--sUO0bDb7_78sKT2_U/edit?usp=sharing&#34; target=&#34;_blank&#34;&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;After another 40000 times training, the basketball sence looked like still fuzzy, while the Snake sence looked better.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://media.giphy.com/media/SwsdL2k2C3VeIjrDZb/giphy.gif&#34; width=&#34;425&#34; height=&#34;350&#34;&gt; &lt;img src=&#34;https://media.giphy.com/media/H75iw0JhdyNN3eUBro/giphy.gif&#34; width=&#34;425&#34; height=&#34;350&#34;&gt;&lt;/p&gt;
&lt;p&gt;An interesting finding was that when the snake met the cherry, which was used to earn points, it felt &amp;ldquo;puzzled&amp;rdquo; about which direction to take. This &amp;ldquo;puzzled&amp;rdquo; also exists when the snake went close to the wall or its own body.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://media.giphy.com/media/H75J2Ivi8hGyh3iken/giphy.gif&#34; width=&#34;425&#34; height=&#34;350&#34;&gt; &lt;img src=&#34;https://media.giphy.com/media/KEG5UGA79Vc2q4Of97/giphy.gif&#34; width=&#34;425&#34; height=&#34;350&#34;&gt;&lt;/p&gt;</description></item><item><title>Pictures Histogram Accelerating based on CUDA</title><link>https://www.xh-zhang.com/project/histogram/</link><pubDate>Mon, 01 Oct 2018 16:40:57 -0400</pubDate><guid>https://www.xh-zhang.com/project/histogram/</guid><description>
&lt;h2 id=&#34;pictures-histogram-accelerating-based-on-cuda&#34;&gt;Pictures Histogram Accelerating based on CUDA&lt;/h2&gt;
&lt;p&gt;Implemented a histogram equalization algorithm based on CUDA, where the benchmark of GPU was Nvidia Kepler 10. To optimize, I downsampled 16 pixels (144 bits) as a block to the kernel at a time, which was a tradeoff between accuracy and efficiency. Also, I pinned-memory on the host side and optimized the blocks with a one-dimensional block design.&lt;/p&gt;</description></item><item><title>Reinforcement Learning in Game Scenarios</title><link>https://www.xh-zhang.com/project/qlearning/</link><pubDate>Fri, 01 Sep 2017 16:40:57 -0400</pubDate><guid>https://www.xh-zhang.com/project/qlearning/</guid><description>
&lt;h2 id=&#34;reinforcement-learning-in-game-scenarios&#34;&gt;Reinforcement Learning in Game Scenarios&lt;/h2&gt;
&lt;p&gt;Implemented agents to play games automatically based on reinforcement learning (Q-learning). The game scenarios include a basic Taxi game, Flappy Birds and an Atari Game: Space Invader.&lt;/p&gt;
&lt;h3 id=&#34;interesting-result&#34;&gt;Interesting Result&lt;/h3&gt;
&lt;p&gt;&lt;blockquote class=&#34;imgur-embed-pub&#34; lang=&#34;en&#34; data-id=&#34;fctnJ7I&#34;&gt;&lt;a href=&#34;https://imgur.com/fctnJ7I&#34;&gt;&lt;/a&gt;&lt;/blockquote&gt;&lt;script async src=&#34;//s.imgur.com/min/embed.js&#34; charset=&#34;utf-8&#34;&gt;&lt;/script&gt;&lt;/p&gt;</description></item><item><title>Dublin</title><link>https://www.xh-zhang.com/project/dublin/</link><pubDate>Fri, 01 Jan 2016 16:40:57 -0400</pubDate><guid>https://www.xh-zhang.com/project/dublin/</guid><description>
&lt;h2 id=&#34;dublin&#34;&gt;Dublin&lt;/h2&gt;
&lt;p&gt;Dublin is a legendary story of a hero who fighting against the dragons and demons to rescue his love.&lt;/p&gt;
&lt;p&gt;I implemented the Java GUI application based on Swing Framework. The most interesting part was I hand-drawed about 20 8-bits pictures as the characters, environments and actions.&lt;/p&gt;
&lt;p&gt;The Demo may be found &lt;a href=&#34;https://drive.google.com/file/d/1bxADHCmdPY-X1VSvFTkL2ia1E4zNZ_Vf/view?usp=sharing&#34; target=&#34;_blank&#34;&gt;HERE&lt;/a&gt;.&lt;/p&gt;</description></item></channel></rss>