Reviews
-
Grad School
- Aug 17, 2022 CS-7646 | Machine Learning for Trading (ML4T) | Summer 2022 Aug 17, 2022
- May 9, 2022 CS-7638 | Robotics: AI Techniques (RAIT) | Spring 2022 May 9, 2022
- May 3, 2022 Georgia Institute of Technology May 3, 2022
-
Misc
- Nov 27, 2023 FAN EXPO San Francisco 2023 Nov 27, 2023
-
Reviews
- Apr 15, 2021 Product Review | Winter 2020 Apr 15, 2021
- Dec 1, 2020 Product Review | Fall 2020 Dec 1, 2020
- Sep 18, 2020 Product Review | Summer 2020 Sep 18, 2020
- Tech Tutorials and Project Write Ups
-
Travel
- Jul 27, 2024 Mt. Rainier 2024 Jul 27, 2024
- Jul 27, 2024 Seattle 2024 Jul 27, 2024
- Jun 25, 2024 Oahu June 2024 Jun 25, 2024
- Jan 6, 2024 Oahu 2023 | Day 5, 6, 7, 8 Jan 6, 2024
- Jan 6, 2024 Oahu 2023 | Day 4 Jan 6, 2024
- Jan 6, 2024 Oahu 2023 | Day 3 Jan 6, 2024
- Jan 6, 2024 Oahu 2023 | Day 1 & 2 Jan 6, 2024
- Aug 8, 2023 Olympic National Park 2023 | Day 3 Aug 8, 2023
- Aug 8, 2023 Olympic National Park 2023 | Day 1 & 2 Aug 8, 2023
- Jan 7, 2023 Las Vegas 2023 Jan 7, 2023
- Nov 24, 2022 Disneyland 2022 - Day 2 Nov 24, 2022
- Nov 24, 2022 Disneyland 2022 - Day 1 Nov 24, 2022
- Aug 22, 2022 Sequoia and Kings Canyon National Park Aug 22, 2022
- Jul 14, 2022 Seattle 2022 Jul 14, 2022
- Jun 1, 2022 Mount Rainier National Park Jun 1, 2022
- Apr 26, 2022 Coachella 2022 Apr 26, 2022
- Nov 20, 2021 Joshua Tree National Park Nov 20, 2021
Georgia Institute of Technology
Why grad school?
Navigating my early career after undergrad has been a relentless and confusing journey. The beginning of my professional career was met with uncertainty and anxious thoughts of whether my degree in Bioengineering was the right choice. I spent the time exploring various professions that I thought my degree prepared me for, only to realize I didn’t enjoy working in research (molecular biology) laboratories very much. I had to reevaluate my career trajectory and examine why it wasn’t aligned with the opportunities I had hoped my Bioengineering degree would provide. After learning and gaining working experience in web development, I have come to the conclusion that I enjoy using my creativity to program solutions with code. Though I took courses in computer science as part of my undergraduate program, I still have a lot to learn. I decided to pursue a master’s degree in computer science to satisfy my curiosity to learn more about this field and to pick up useful tools along the way. I matriculated at Georgia Tech in Spring 2022.
Why Georgia Tech?
Online Distributed Learning
Aside from being a renown university for Computer Science, I heavily considered Georgia Institute of Technology for being a leader in online distributed learning. One of the criteria I had when considering graduate schools was the possibility of online learning. I wanted an accredited program where I could pursue a degree without halting my industry growth. I also have bills to pay 🙃. In the past, online distributed learning has been met with jokes of being ‘less than’ when compared to on campus learning. This view is a misconception, but may have been propagated by the proliferation of for-profit, unaccredited institutions. With the pandemic and the widespread roll out of ‘Zoom’ school, I hope people could see the utility and legitimacy of online distributed learning. Since 2014, the online master's of computer science program at Georgia Tech has grown a positive reputation with excellent reviews. I appreciate that the online course selection is expansive, and is a direct equivalent of on-campus courses, taught by the same campus faculty.
Cost
Another big factor in my decision was cost. I had also considered Johns Hopkins University’s program, as well as University of Pennsylvania’s program, but in addition to poor reviews, the price for tuition was shocking. After being scarred from paying off my undergraduate tuition, I was in no hurry to put myself back in debt with student loans. Johns Hopkins and UPenn’s programs can run you $40,000 - $60,000, roughly $4,000 - $5,000 per course. This value is ridiculous compared to Georgia Tech’s tuition of $7,000 - $8,000 for the entire program!
Community
Finally, the last factor I heavily considered when choosing a graduate program was community and resources. Georgia Tech has a large and growing network of alumni who have completed the online master’s program, as well as an active reddit community and slack channel. Since this program is online, having a sense of community and camaraderie among my peers was important. After finishing my first semester, I am happy to have chosen Georgia Tech. The support from TA’s and my peers on Slack / reddit have been a large component of my success and motivation to continue.
Application Process
The application was a straight forward process. I gathered all required documents, letters, and statements to submit with my application by the deadline. No GRE was required. The decision was returned a few weeks after the deadline.
Requirements
Undergraduate degree in computer science or related field
Cumulative GPA of 3.0 or higher
Transcripts
Three letters of recommendation
Statement of Purpose
Supplemental Objectives Statement
Closing Thoughts
The program requires completion of 10 courses of your choosing with specializations offered for Computational Perception & Robotics, Computing Systems, Interactive Intelligence, and Machine Learning. I have completed my first semester taking CS 7638 - Robotics: AI Techniques and have had a wonderful time. I have thoroughly enjoyed my first semester and am excited to continue through the Computing Systems specialization. Individual course reviews and summary posts will come.
Go Yellow Jackets! 😁
Coachella 2022
After a 2 year hiatus, Coachella (and live music) are back! This year marks my fourth year returning to the desert.
All photos were taken with the iPhone 13 Pro Max
Food
Music and artists are not the only things featured at Coachella. The festival also curates large scale art from various artists, and offers delicious food from trendy eateries from all around America.
We were able to excitedly try
Prince Street Pizza - Sicilian style pizza
Bolo - Fried chicken sandwich with a Bolo (pineapple) bun)
Hattie B's - Nashville style hot chicken sandwich
Kogi - Korean BBQ truck
Music / Stages
Sahara Stage
Yuma
Madeon at the Outdoor Theater
Louis The Child at the Outdoor Theater
Sonora Tent
Do Lab
Large Scale Art by Various Artist
Circular Dimensions x Microscapes by Cristopher Cichocki
The Playground by Architension
La Guardiana by Ramon and Christian Cardenas / Buoyed by Kiki van Eijk’s
Mutts by Oana Stanescu
Cocoon by Martin Huberman / Spectre by NEWSUBSTANCE
Joshua Tree National Park
Joshua Tree National Park
Date Visited: Friday, November 12, 2021 - Saturday, November 13, 2021
I feel extremely lucky and privileged to live in California, home of nine national parks! Joshua Tree National Park is the third national park I have visited. The park is located in southern California, just two hours east of Los Angeles near Coachella valley. Named for the region’s twisted, bristled Joshua trees, the park is littered with thousands of the namesake trees as far as your eyes can see, interrupted only by the numerous gigantic, other worldly rock formations. Visiting in Fall / Winter was perfect and recommended, as the temperature never rose above unbearable.
Joshua Tree Visitor Center
Before entering the park, we stopped by the visitor center for souvenirs and park information. Knowledgeable park rangers were waiting outside the entrance to help guests with trail suggestions and general questions.
Cap Rock
Cap rock is an easy 0.4-mile loop trail with a view of a large rock formation with a smaller, flat rock balancing on top of it. https://www.alltrails.com/trail/us/california/cap-rock-trail
Hidden Valley Trail
Hidden Valley trail is an easy 1.0 mile loop with great views of Joshua Trees and huge rock walls of which you may see rock climbers traversing. Hidden valley is a great name for this trail, as it feels like you’ve been transported into a magically quiet landscape in the middle of nowhere. Surrounding the valley are fun blocks of rocks that just inviting you to climb them.
https://www.alltrails.com/trail/us/california/hidden-valley-nature-trail?ref=result-card
Cholla Cactus Garden
Cholla cactus may seem like friendly, furry teddy bears, but be very cautious around them. Along the perimeter of the cactus garden are signs warning tourists of the ‘jumping’ nature of the cactus needles. The best time to visit the Cholla Cactus gardens is during sunrise, when the sun rises perfectly behind the cacti, making the ‘fur’ glow a brilliant golden hue.
Night Photography
Joshua Tree National Park is an astrophotographer’s dream. With light pollution at a low, the milky way can be visible with the naked eye. We did not account for the moon’s cycle, so you may have to wait until the early AM for complete darkness when the moon is over the hemisphere.
Arch Rock Nature Trail
Another jumbo rock playground. A must visit.
https://www.alltrails.com/trail/us/california/arch-rock-trail--2?ref=result-card
Keys Point
Key’s point may be the most crowded location and visited location in the park. Key’s point is the go to sunset spot, with a high elevation and views of the Coachella Valley. Something about watching the sunset on Key’s point with a large group of travelers from all around the world did feel like a spiritual experience.
Product Review | Winter 2020
Keychron K2
$69.00 - 79.00
Keychron
★★★
Keychron designs, manufactures, and sells mechanical keyboards. Since forming in 2017, the company has had great traction, with highly positive reviews from top tech reviewers and publications, with good reason. Keychron makes great, affordable mechanical keyboards with all the features you would want in a modern computer peripheral. Unlike membrane keyboards typically found in modern devices, each individual key cap found on mechanical keyboards lay on physical plastic switches which return a nice tactile feel and sound on click. Mechanical keyboards are fairly customizable to your personal preferences, which may be why they are so popular within niche communities. The main customizable component are the key switches. Cherry MX Switches are popular switches used in mechanical keyboards and are referenced by their key-stem color, each with its own distinguishable auditory and tactile feedback. Examples include:
Cherry MX Reds: Linear switches, 45 grams of force to actuate, quiet
Cherry MX Blacks: Linear switches, 60 grams of force to actuate, quiet
Cherry MX Blues: Tactile switches, 50 grams of force to actuate, clicky and loud
The Cherry MX Brown switches on my Keychron K2 have been the perfect balance between the Red and Blue switches, tactile but not too loud. The keyboard can be used wirelessly with Bluetooth, or wired. The outer casing of the Keychron K2 is minimal, with one USB-C port for charging and wired use, a switch for choosing between wireless, wired, or off, and a switch for choosing between a Mac keyboard layout or a PC keyboard layout. When used wirelessly using Bluetooth, the backlit keyboard can be programmed to three different devices, and can easily be switched between devices by clicking the fn + 1, 2 or 3 key. I’ve enjoyed being able to effortlessly switch between using PC and Mac devices using a single wireless keyboard. Battery life is great, lasting more than a month before having to charge. The tactile feel of the Keychron K2 makes mundane tasks such as typing somewhat enjoyable. It’s not going to dramatically change your life or productivity levels, but in terms of keyboards, it is an attractive, wireless, mechanical, option for any setup.
Dell 4k Ultrasharp (U2720QM / U2720Q)
$550 - $719
Dell
★★★
Working from home during the pandemic has forced a lot of us to rethink our home office situation. As a person who primarily and happily uses their 13-inch laptop screen for personal use, I was reluctant to buy an external monitor. But the workload efficiency was taking a hit which led to researching and purchasing the Dell 4k Ultrasharp U2720QM monitor. There were a few specific specifications I needed in my monitor and the Dell U2720QM hits all of the requirements. The 27-inch 4K resolution monitor renders color-accurate pixels at a high enough density to preserve sharp text while up-scaling. The thin IPS monitor has a flat almost bezel-less display with a refresh rate of up to 60Hz, which is smooth enough for me but may not be for gamers. The sharp, boxy design of the monitor gives an industrial, and professional workhorse feel, and the flat base adds extra support without taking away valuable desk space. The most important feature to me was having a USB-C display port, allowing me to transfer display information and charge my laptop at the same time using a single USB-C cable. This results in a fully charged laptop whenever I disconnect it from the monitor. The Dell 4K Ultrasharp has extra ports conveniently placed on the side of the monitor to easily charge accessories or connect other devices without having to connect it to your computer. The adjustment angles on Dell monitors are superb, allowing you to tilt, swivel, and pivot any amount you need, useful for coding vertically on a secondary monitor, or just adjusting for ergonomics. For coding, graphic work, photography, and regular internet browsing, the Dell 4K Ultrasharp U2720QM has been pleasant to use, checking off all of my requirements with no complaints.
AirPods Max
$549
Apple
★★★
After many months of rumors and speculations, Apple finally released their take on an over-ear headphone. And as with most of Apple’s recent product releases, it came with a lot of controversy, notably around the design and price. When compared with other over-ear headphones in the same market, which range from $250-$350, Apple’s AirPods Max is priced significantly higher. Aside from the price, many critiqued Apple’s design choices, mainly for the AirPods Max’s Smart Case. After reading through the critiques and memes that came with the initial launch, I was intrigued to try it for myself. I am impressed. From the large, minimal aluminum ear cups to the mesh net canopy, the materials used in these headphones are top notch. They are noticeably heavier than their plastic counterparts like the Bose QCII or the Sony XM4’s, but they feel more substantial in the hands. These headphones are comfortable. The large mesh ear cups cover the entire ear, relieving any pressure that over ear headphones usually have. Although it covers your ear, it does not get hot after prolonged use. They have an added bonus of being magnetically attached and detachable, which allows you to replace them when they inevitably wear down, something not found in most headphones. The canopy feels lightweight and does a great job to evenly distributes the weight of the AirPods Max so it feels as if nothing is there if you’re stationary. Telescope arms allow for step-less adjustment allowing for a universal fit. Controls are minimal, with only one physical button for turning on transparency/noise cancelling mode, and a familiar digital crown that controls volume, play and pause. I’m glad Apple went with physical buttons and not touch gestures that other companies are doing. It is a much better experience and satisfying feeling to operate using physical buttons, especially since all operations are done outside of your field of vision. The sound is crisp, clear, and bass is perfectly balanced and not muddy. Software integration with Apple products is amazing and intuitive as always, and brings the listening experience to another level. I’ve owned the Bose Quiet Comfort II’s in the past and returned them. Having to manually turn on, pair, and opening a separate app to adjust noise cancellation or other settings was not ideal. Apple stripped all these friction points, including the on/off button, resulting in a fast and straightforward operation. Noise cancellation and Transparency mode are the best in the market and feel comfortable to use for long stretches of time. Battery life has not been a problem. Quality materials make these headphones heavy, and it is apparent when you turn your head side to side, which deters me from using these headphones while running or to work out. The smart case did not bother me as much as it bothered other people. I primarily use the headphones at my desk so the smart case adequately protects the aluminum cups, although I agree that it does feel like a first generation product that will hopefully be improved on in future iterations. The AirPods Max are unconventional in an industry leading way, and can really only be categorized in a market sector of its own, sitting in between upper-end consumer headphones and high-end professional grade headphones. Apple AirPods Max is an all around great package, with its high quality materials, crispy HiFi sound, and magical software integration.
Always Pan
$145
Our Place
★★★
Non-stick pans are not a new invention, but none have been marketed like the Always Pan from Our Place. The beautifully designed and highly functional non-stick pan comes in an array of modern colors making it an attractive option compared to the sea of boring pans. The pan comes with niceties such as an integrated wooden spatula holder on the handle, and rubberized touch points on the lid and pan. Two grooves on the upper lip allow steam to escape. On other pans, lids usually have a steam hole somewhere on the surface, which get dirty and hard to clean over time as minerals build up. The grooves on the Always Pan addresses this problem, making clean up easy. Being a non-stick pan, clean up is magic, often needing no effort to wash away residue. I’ve had burned black crusts that have enveloped on the interior of the pan, but after a quick rinse and scrub with their included natural sponge, the pan looks new again. The pan comes with a bamboo spatula, as well as a steamer basket that fits perfectly in the interior. One critique I have of the Always Pan is its handles. The main rubberized handle is fine, but I have ran into problems with the handle opposite of the rubberized handle. This side of the pan is not rubberized, but is designed with affordances of a regular handle. This may be useful when the pan is at room temperature, but when the pan is on the stove, I along with others have burned their hands trying to grab the handle to move the pan. I suppose the most optimal way to use this would be to utilize a cooking towel, but I wish I did not have to learn this the hard way. Rubberizing both sides of the pan would solve this issue. Regardless of this issue, the Always Pan has been my most used kitchen cookware. Versatile, beautifully designed, and most importantly magically easy to clean, the Always Pan from Our Place has been a joy to use.
Assorted Reads
★★★
A short list of recent stand-out reads. Single sentence summaries.
The 7 Habits of Highly Effective People by Stephen R. Covey
Thought patterns to instill personal growth, accountability, and synergistic relationships.
Why We Sleep by Matthew Walker, PhD
A strong argument backed by numerous studies for getting a solid 8 hours of sleep every night.
Deep Work by Cal Newport
To have a fragmented attention span is an unsatisfying and unproductive way to live life.
Conditionally Display Microsoft Flow Activating Buttons in Sharepoint Libraries Using Column Formatting
Before Column Formatting:
After Column Formatting:
Introduction
This post goes over how I used Sharepoint’s Column Formatting to solve some points of friction I experienced when executing a specific automated workflow. If you have not read my post on creating an automated file sharing workflow, you can read it here: blog post. This post is a continuation of sorts, but can also be a stand-alone read where you can learn how to use column formatting to solve some of your specific problems.
Column Formatting allows you to customize the look and feel of your Sharepoint library or list. Column Formatting lets you do whatever you want, as long as you follow it’s schema. People have used Column Formatting to make document lists visually meaningful and incorporating useful features such as buttons that simplify activating automated workflows. I will go over how I incorporated a flow activating button to solve some pain points I had in my automated flow.
Problem
Solution
You can copy the Schema below:
{ "$schema": "https://developer.microsoft.com/json-schemas/sp/v2/column-formatting.schema.json", "elmType": "button", "txtContent": "Create Link", "customRowAction": { "action": "executeFlow", "actionParams": "{\"id\": \"<ID_OF_FLOW_HERE>"}" }, "style": { "border": "none", "cursor": "pointer", "background-color": "#2980b9", "color": "#FFF", "padding": "4px 4px 4px 4px", "border-radius": "5px", "display": "=if(indexOf('[$FileLeafRef]', '.vsd') != -1, 'none', if(indexOf('[$FileLeafRef]', '.pro') != -1, 'none', if(indexOf('[$FileLeafRef]', '.msi') != -1, 'none', if(indexOf('[$FileLeafRef]', '.pcm') != -1, 'none', if(indexOf('[$FileLeafRef]', '.pcc') != -1, 'none', if(indexOf('[$FileLeafRef]', '.iso') != -1, 'none', if(indexOf('[$FileLeafRef]', '.cs') != -1, 'none', if(indexOf('[$FileLeafRef]', '.mac') != -1, 'none', if(indexOf('[$FileLeafRef]', '.prt') != -1, 'none', if(indexOf('[$FileLeafRef]', '.csv') != -1, 'none', if(indexOf('[$FileLeafRef]', '.xps') != -1, 'none', 'block')))))))))))", "visibility": "=if(((indexOf([$ContentTypeId],'0x0120')) == 0),'hidden', 'visible')" } }
Conclusion
Document libraries do not have to be boring. With Sharepoint Column Formatting, the applications are endless. From adding character and visual cues to libraries, to implementing buttons, column formatting is an easy tool to add into your workflow that can make document libraries or lists a little more fun and intuitive. In my case, I was able to implement a one click solution to reduce friction in our automated workflow by adding a flow activating button that renders only for supported files. This has greatly increased the user experience for the workflow by preventing wasted time trying to activate flows on unsupported files, only to get a failed flow. Thanks for reading!
For more information on column formatting, here is a link to some documentation from Microsoft: https://docs.microsoft.com/en-us/sharepoint/dev/declarative-customization/column-formatting
Create a Self-Sustaining, Expiring Document Sharing System Using Sharepoint and Microsoft Flow
Introduction
Who knew sharing documents could get so complicated. Sharing documents is typically a straight forward process, but it can get tricky in situations involving authenticated vs unauthenticated users, or privacy settings. The latter was the case at my company where sharing sensitive documents to customers outside our organization was commonplace.
In this post, I go over my process in creating an automated document sharing system to address specific company concerns regarding sharing documents. This system uses Microsoft Sharepoint and Microsoft Flow (now called Power Automate). This post is written as a project log / tutorial hybrid. I hope you can learn from my experience and maybe even implement some of the Flows from this post in your own automated workflow.
Definitions
Microsoft Sharepoint:
SharePoint is a web-based collaborative platform that integrates with Microsoft Office. Launched in 2001, SharePoint is primarily sold as a document management and storage system, but the product is highly configurable and usage varies substantially among organizations.
Microsoft Flow:
A process and task automation tool that uses low-code / no-code to help connect different applications and services together.
Defining The Problem
My company sends Sharepoint documents such as product manuals, data sheets, and brochures to our customers using a public sharing link with an expiration date. Sharepoint allows a single public sharing link to be used per document at a time. Problems arise when sharing documents that are already embedded on our website using public sharing links. Creating new sharing links with expiration dates for these documents overwrite existing public links, breaking all previously available links on our website.
The core problem we needed to solve was finding or creating a system that would allow us to share documents with our
customers without breaking links on our website.
Solution Ideation
My initial thought in solving this issue was to create a separate Document Library where users can place copies of the document they wanted to share. Users would be able to place expiration dates on these document copies without disrupting any links the original document may have had.
This iteration of a solution could solve our initial problem. Users would be able to share documents to customers without disrupting already existing links, but would result in a bloated company document library with multiple copies of files laying around, which would be confusing to version control. This iteration would also need a person to manually clean up expired documents which would introduce human labor and error.
After researching Microsoft Flow / Power Automate, I figured I could use Flows to build upon the solution above to create an automated workflow that would address the bloat and human error issues while improving the user experience.
This system uses three separate Microsoft Flows to**:
Create a copy of a specific document
Append user initials and date of expiration to generate a unique document ID
Convert a list of file extensions to PDF
Move the document to a separate document library
Create an expiring shareable link
Send an email and Microsoft Team’s notification to the user with the shareable link
Finally delete the document after it expires
**Note that this post was written after completion of a full working prototype. The list above contains the final features of the working prototype that were implemented after user testing and feedback. More about this in the section below titled ‘Testing and Evaluation’.
Solution Implementation
Creating The Document Library
The first step in implementing the solution is to create a separate Document Library on Sharepoint where copies of our documents-to-be-shared would live, and eventually die. You can create the Document Library anywhere in your organization and name it whatever you like. After creating the document library, the next step is implementing automation using Microsoft Flow.
Flow One: Delete Files After X Days
The function of the first flow is cleaning up, or deleting files that are older than X days. This flow activates every day, looping through the expiring document library, checking each file, and applying actions depending on the status of the condition.
Flow Two: Rename File and Create a Sharing Link
After creating a separate document library where copied files would live, and implementing a Flow that deletes expired files, the next flow created will generate the actual shareable expiration link, as well as rename incoming files with a unique name to prevent confusing duplicates.
Flow Three: Move Specific Files to Expiring Document Library / Converting to PDF
So far, I’ve implemented flows that handle documents that are manually copied over to the document library we have created. This requires the user to use the Copy To document selection in Sharepoint for each individual file. This does not allow for any pre-processing of each individual file before they are fed into the other flows. After testing the two flows with users and stakeholders, we learned that some file extensions should not be allowed to be shared with customers. Some of these file extensions could be shared if they were converted to a read-only type of document such as a PDF.
This calls for a creation of a third flow, which will be run on an individually selected file, where it will be checked for file type, converted to PDF if needed, then copied over to the expiring document library.
Testing and Evaluation
I am grateful for my coworkers and company stakeholders for testing the early iterations of the workflow. Their feedback was important in the progression and addition of very important features that were not initially a part of the workflow. Having different viewpoints and testing the early versions of the workflow exposed issues that I was not aware of. Problems around processing duplicate files and file names with special characters were some of the issues that were discovered during user testing. This resulted in features added to clean up file names containing special characters, as well as appending file names with a unique identifier made of the user’s initials and date of expiration.
Another discovery was file extensions that were not to be sent to customers such as .vsdx or .doc files. This led to implementing a PDF converter to handle these extensions.
Conclusion
It was a fulfilling experience learning about Microsoft Flow, and implementing a working, automated solution that will be used in the company. I was able to build up a solution to a problem, test, gain feedback, and repeat the cycle until the product was polished and working. Thanks for making it this far in the post. I hope you found it helpful.
One Step Further
After using the workflow a bit, I discovered some friction points that I have implemented new features to alleviate. You can read about it in my post regarding Column Formatting in Sharepoint: blog post