Hackintosh Mac OS High Sierra Upgrade Troubleshooting

Hackintosh Specifications:

  • Motherboard: GIGABYTE G1 Gaming GA-Z170MX-Gaming 5 (Intel HD 530 iGPU)
  • CPU: Intel Core i5-6600K Skylake Quad-Core
  • RAM: (4x8GB) 32 GB G.SKILL Ripjaws V DDR4 3000
  • GPU: EVGA GeForce GTX 1080 Ti
  • HD: Samsung 840 120GB SSD
  • Audio: Creative Sound Blaster Omni Surround 5.1 USB
  • WiFi + Bluetooth: Fenvi FV-T919 PCI Adapter (native support - highly recommended)

macOS High Sierra 10.13.6 is quite the modern day Apple software upgrade: APFS, Airplay 2, Metal 2 for the full Apple ecosystem... on PC hardware.

I've been putting off this direct OS upgrade for quite some time since I've read about all of the horror stories on tonymacx86. They weren't kidding around. I ran into issues on every step of the upgrade, so I'm hoping this guide will help you. Most online guides do not cover the minor versions of High Sierra nor Nvidia systems.

Prerequisites: Mac OS Sierra, Clover r4630 (great stable version), Multibeast v9.2.1 for Sierra (apply Intel graphics fixes), High Sierra Installer (mine was 10.13.2), apfs.efi, a backup (Carbon Copy Cloner ftw).

  1. After following the prerequisites on tonymacx86, I ran the High Sierra installer (5.22 GB) from the /Applications directory. After a few minutes I was off to the races. After booting into the "install Mac OS" partition, the loader started for a bit and then the spinner completely stalled half way through. The issue is due to booting with the Nvidia card. To solve this issue, I completely removed my graphics card from my case and used my Intel iGPU to continue the installation.
  2. Well once I got back into the installer, it turns out the temp installation directories went missing.

    The path /System/Installation/Packages/OSInstall.mpkg appears to be missing or damaged.

    To solve this issue, I reran the installation file (step 1) from my regular Mac OS partition.
  3. Phew, we made it pretty far now, and the installation actually ran to completion following many reboots (boot back into the "install Mac OS" partition everytime). Once I tried to boot into the real deal though, my computer showed the Apple logo and immediately started to reboot. It was stuck in a reboot loop, which immediately lead me to believe this was a kernel panic. I booted back into the mac OS partition with a few boot flags (right click the drive in Clover for options) verbose and do not reboot on kernel panic to diagnose the problem. I discovered I had an old Lilu.kext file. To solve this issue, I booted with the boot flag -liluoff.
  4. Finally, I had logged in successfully to High Sierra. To make sure I didn't have to boot with the -liluoff flag every time I started my computer, I updated Lilu.kext to the latest version in both /Library/Extensions and /EFI/CLOVER/kexts/Other/.
  5. Depending on the version of High Sierra you upgraded to, you may have to follow some additional setup steps to enable full functionality: 10.13.2, 10.13.3, 10.13.4, 10.13.5, 10.13.6. I ran through 10.13.2 and 10.13.6 guides to make sure my upgrades went as smooth as possible. At this time, I also installed the basic Multibeast v10.4 High Sierra configurations to enable full compatibility.
  6. Once I had every software thing in place, I reinstalled my Nvidia card and booted with the nv_disable=1 flag (some of the Nvidia drivers can crash on different versions of High Sierra). I updated my Nvidia drivers to the latest, compatible version, and then rebooted...

Voila. Finally, we did it. Nvidia GTX 1080 Ti and High Sierra on the Hackintosh. Drink a beer, you deserve it.


A Closed Corporate Internet

Tech giants, Google, Facebook, and Amazon are changing the way we digest and use the Internet. They are streamlining their services to make your Internet life easier and more accessible. Google's AMP for mobile, for example, is stealing traffic from the actual website to their scraped and streamlined version of the website. When I first used services like these, I was easily fooled into thinking that the website had implemented a half-decent mobile implementation. I was dead wrong.

This is just the start of something much larger than countries and politics.. These are capitalistic corporations after all. They are controlling pretty much every sector of our lives and definitely our machine lives, both directly and indirectly for all things connected to the Internet. We use Google exclusively for all things search, directions, email - some even go as far to connect their entire phone operating system (*cough* Android *cough) to the Google hive mind.

I used to believe these companies were only using your data for moral good. Google offers many free services in exchange for one thing... Your soul. Just kidding, they're only after your private data. Data is quickly becoming the most valuable thing to own in the 21st century, well that and Bitcoin. Facebook only wants every photo of you (including your nude photos - WTF) - from birth until death - to build an epically-sized facial recognition system, and Amazon knows all of your web preferences and shopping needs. They make things incredibly easy for us lazy folk. Just add a "Sponsored" tag and no-one will bat an eye.

Using technology to automate and improve the efficiency of society is quite amazing. We are only at the tip of many life-changing advancements in our lifetime. Many of these companies are driving us towards maximizing our digital symbiosis with computers. However, we must ask ourselves - at what cost? All of these tech giants are one hack away from exposing all of our chats, secrets, and tendencies. We cannot have a single point of failure in this corporate internet.

What I wrote above was in July 2017. Things have gotten much much worse since then...

  • Remember the Equifax hack exposing a majority of American's social security numbers?
  • Remember the Verizon security breach?
  • Remember Yahoo's total fail at protecting email accounts?
  • Remember Uber's attempt at covering up a multi-million user hack?
  • Remember the NSA's security "secrets" being compromised and subsequently used by the WannaCry ransomware?

Worst of all, net neutrality is dead. Ajit Pai, the biggest Verizon shill out there, disregarded millions of citizens' complaints and also faked many comments, including Obama's. This is fucking frightening. The corporate takeover of politics is reaching the pinnacle of control. Driven by the greed of profits, these ISP's will slowly erode our basic freedoms of communication and attempt to control and monitor our everyday lives.

We need to protect our privacy, our data, our freedoms. Use a VPN. Use Firefox. Use Tor. Use DuckDuckGo. Your privacy and data are not for sale. Fuck the ISP's supporting any sort of fast lane or pay-per-app charge. The Internet is a basic, human right and utility. Let's fight to keep it that way.

Mathematics, Sports

Contrarian Positions in Horse Racing

Currently reading: Exotic Betting [1].

I find in life there are a lot of contrarian positions you can take in which you would be surprised how many times you are correct. It would be mundane as all hell for things to go the way you planned... sprinkle in some volatility for a good time :).

I've been particularly interested in horse racing as of recent. WARNING: Gambling is a losing deal in the long run, but the idea of contrarian (exotic) positions is to catch that rare (and more common than not) spurt of insane upside, resulting in an illustrious sense of accomplishment, or.. just another day at the track.

The house always takes its portion (~15%) during every race. The longer you bet over many races, the more likely you are to lose money. This is rule number one of gambling: the house always wins in the long run. No one can escape the law of large numbers. No one. That's why it's a law.

Keep this pool chart as we progress through some examples:

Exactas / Trifecta / Superfecta Tips & Strategies

  1. NEVER BOX YOUR BETS / NEVER USE ALL. There is no point making these exotic bets unless you have an opinion. Otherwise, you are diluting the pool of bets (and your win bets) trying to get lucky. We are trying to beat the pool payouts, remember?
  2. If you're lost on any bets, trifecta is a terrible idea. Trifectas are all about eliminating horses from contention.
  3. Betting a favorite in any of these exotics, severely depresses the payoffs in that single race, since that's where the pool's money is.
  4. Exactas to increase win odds without increasing risk. Put your hero (4-1) first, and run the favorite and 2 long shots that you like in second. This avoids the win pool of the favorite, multiplying your odds. Let's avoid following the crowd.
  5. Exactas to bet contrarian against the 1-1 favorite. Run a variety of exactas (different weights based on odds) with your hero and 2 long shots that you like. When the favorite misses the board, there is a phenomenon where the exact pays more generously than expected.
  6. Exacta (Contrarian) Situation: Skeptical of favorites but too confused to construct an aggressive play. Key 2 wing-and-a-prayer longshots (2nd to worst odds and 5th to worst) with 4 or 5 others on the field, leaving the favorites out all together.
  7. Trifecta small boxes: Usually players will play trifecta if they like 3 horses. It's far more likely for 2 to run their usual race and for the third to drop out. To accommodate this contrarian position, require 2 of your horses to hit the board and be loose on the third. Bet 1-2-3, 1-2-4, 1-2-5, and 1-2-6 boxes.
  8. Trifecta small part-wheels: Focus on 1 horse to place and then wheel the third slot. 1/3,5,7/3,4,5,6,7 and 3,5,7/1/3,4,5,6,7. We sacrifice the third place and gain additional horses.
  9. Trifecta aggressive punches: Do these every now and then to win big and when you're confident. $1 box 1-2-3, $1 box 1-3-4, $3 part-wheel 1/3/2,4 and $3 part-wheel 1/2,4/3.
  10. Superfecta: Key one to win and then bet a trifecta underneath.
  11. Superfecta variation: Key 2 with 4. 1,2/1,2/3,4,5,6/3,4,5,6 - 24 combinations. 1,2/3,4,5,6/1,2/3,4,5,6 and 1,2/3,4,5,6/3,4,5,6/1,2 for 72 total combinations.

Lastly before you make your exotic bets, make sure to bet superfectas in $0.10 amounts and trifectas / exactas in $1 amounts. This is due to another house, the IRS.

IRS rules require that winnings at odds of 300-1 or higher be reported to the government, if they exceed $600 and that the payoffs are subject to withholding if they total $5000 or more. [1]

Don't worry though, you can always repeat the bet. Think of 2 $333 winning tickets and ducking the $600 tax ;).

Best of luck contrarians.


How to Stop a Brute Force xmlrpc.php Attack on Bitnami WordPress

WordPress Inspiration (oxymoron).

I was trying to access my site the other day and noticed it took fucking forever for anything to load. I thought something was broken: server out of memory from a recurring CRON job, or maybe I had royally fucked over my WordPress ecosystem by accident. Who knows? It's WordPress after all...

Are you experiencing any of these symptoms? Then read on...

  • Perpetually waiting for a response from while your browser displays a white page?
  • When your website does manage to load, clicking any links could make the entire application stop responding..
  • Seeing an abnormally high AWS charge for a small instance? Blame Amazon for expensive cloud computing first...

Being the curious programmer here, I tried to look for the issue. PRO TIP: Always look at your Apache or NGINX logs. My god. Fuck this guy. Spamming my site with pointless brute-force password attempts on a file called xmlrpc.php. Eventually, you'll never succeed because the password is a million fucking digits long. Realistically, however, I'll probably be so pissed off at the AWS charge, that I would cancel the EC2 instance before giving into my blog's new commander.

Check out some of these logs from streaming the Apache logs:

$ tail -1000f /opt/bitnami/apache2/logs/access_log - - [21/Nov/2017:08:07:19 +0000] "POST /xmlrpc.php HTTP/1.0" 200 370 - - [21/Nov/2017:08:07:18 +0000] "POST /xmlrpc.php HTTP/1.0" 200 370 - - [21/Nov/2017:08:07:17 +0000] "POST /xmlrpc.php HTTP/1.0" 200 370 - - [21/Nov/2017:08:07:20 +0000] "POST /xmlrpc.php HTTP/1.0" 200 370 - - [21/Nov/2017:08:07:18 +0000] "POST /xmlrpc.php HTTP/1.0" 200 370 - - [21/Nov/2017:08:07:19 +0000] "POST /xmlrpc.php HTTP/1.0" 200 370 - - [21/Nov/2017:08:07:21 +0000] "POST /xmlrpc.php HTTP/1.0" 200 370 - - [21/Nov/2017:08:07:19 +0000] "POST /xmlrpc.php HTTP/1.0" 200 370 - - [21/Nov/2017:08:07:20 +0000] "POST /xmlrpc.php HTTP/1.0" 200 370 - - [21/Nov/2017:08:07:22 +0000] "POST /xmlrpc.php HTTP/1.0" 200 370

Great, my server is being spammed by a Russian bot every few milliseconds. WordPress, why the hell are these requests succeeding from an external source? At least this explains why my site has been unresponsive - someone else is using its resources.

Let's block his ass. The best way to do this is on the intermediary Apache server. We're going to write an Apache policy to prevent access to the xmlrpc.php file.

One thing to note before we continue here is that Bitnami automatically disables .htaccess files by default for performance reasons. So to write any Apache configurations at all, we'll have to edit the customized .conf file under:

$ vi /opt/bitnami/apps/wordpress/conf/htaccess.conf

// Now add these lines at the end of the file, please learn VIM to complete the edit

<FilesMatch "xmlrpc.php">
  Order Deny,Allow
  Deny from all
  Allow from
  Satisfy All
  ErrorDocument 403

Once we have edited the htaccess.conf file, we are going to restart the Apache server for the changes to take place:

$ sudo /opt/bitnami/ restart apache

We can verify this works by trying to access the file via GET or POST on the file,, it should redirect. The policy above effectively redirects all external users to their localhost, while allowing traffic internally from WordPress. This allows certain plugins, such as JetPack, to correctly function. Let's look at the access logs now: - - [21/Nov/2017:08:41:24 +0000] "POST /xmlrpc.php HTTP/1.0" 302 201 - - [21/Nov/2017:08:41:24 +0000] "POST /xmlrpc.php HTTP/1.0" 302 201 - - [21/Nov/2017:08:41:25 +0000] "POST /xmlrpc.php HTTP/1.0" 302 201 - - [21/Nov/2017:08:41:29 +0000] "POST /xmlrpc.php HTTP/1.0" 302 201 - - [21/Nov/2017:08:41:31 +0000] "POST /xmlrpc.php HTTP/1.0" 302 201 - - [21/Nov/2017:08:41:31 +0000] "POST /xmlrpc.php HTTP/1.0" 302 201 - - [21/Nov/2017:08:41:31 +0000] "POST /xmlrpc.php HTTP/1.0" 302 201

Ahhh success, and a breath of go annoy someone else now. The 302 is a redirection status which means they are now trying to access their own localhost rather than wasting resources on your WordPress website. Cheers, hope this helps!


UI Design Fundamentals

I'm going to start doing a new thing where I start using my blog as a note taking resource from all of the books I read! Currently, I'm reading The Design of Everyday Things - Don Norman. I highly recommend this book for anyone looking for a scientific and psychological approach to design. Creativity is important, but there are definitely fundamental steps to help improve your designs.

Let's start with the Fundamental Principles of Interaction. This is for all of the user interfaces people out there :).

  1. Affordances - All of the possible interactions between the people and the environment. Some affordances are perceiveable, others are not. Affordances are relationships between properties of an object and the capabilities of the actor. For example, glass affords transparency - this is a relationship between the glass and the actor's sight. When affordances aren't perceivable, they will need some...
  2. Signifiers - Signals things. Lol, but seriously, signifiers indicate what actions are possible and how they should be done. Signifiers are more important than affordances for they communicate how to use the design. Suppose our glass example were a transparent glass door, we will need to know which way the door rotates right? Push/Pull signs, curved handle bars for a pull, and a large depressable exit door button are some ways to signify how an actor might use this door.
  3. Mapping - The relationship between the elements of two sets of things. In our door example, suppose we had a smart door which could be controlled from a mobile application. Mapping is an important concept in the design and layout of this mobile application's controls and display. We must establish a mapping of the phone display to UI elements which indicate whether to open or close the door. These mappings must be both logical and visible. Once we establish a mapping and press the buttons, we will need...
  4. Feedback - A communication of the results of an action. Feedback must be immediate and informative, any delays will cause reason for concern. In our internet of things smart door example, most feedback from the mobile application will be a touchable opacity to indicate the button was pressed. In addition, the door would have to move right? Feedback from a mobile application to a physical device is awesome and brings us into the Internet of Things (Tesla makes amazing cars and batteries with this capability).
  5. Conceptual Models - An explanation, usually highly simplified of how something works. Think of icons and folders as conceptual models. Would a normal user be able to understand the tree directory structure of the file system?? Hell fucking no. Give them something way easier to digest.

I hope you enjoyed this post! Keep track of all of these basic interactions when starting any of your designs and applications, they are fundamental human understanding. It is my dream to work on some cooler graphical design projects (AR/VR, Unreal Engine, Visualizers) in the future, so stay tuned Internet. (Note: That all projects started by me are never finished by me either hahaha)

Design, Programming

Montserrat Font and Legacy Support

See the ongoing GitHub discussion.

Without going into too much detail, Google updated the Montserrat font and its weights remotely, affecting millions of designs across the world wide web which integrate with Google fonts. This affected me personally, as I use Montserrat for my blog titles.

I absolutely despise API's which introduce breaking changes. All of these breaking changes destroy any legacy applications which are using the API's. Google in particular has a penchant for deprecating, breaking, or removing their API's: remember when the internet of shit's favorite Samsung smart fridge couldn't connect to its dumb calendar? Lol. This time, millions of websites across the web were forcing shitty text overflows down everyone's throats.. Who wants that???

I'm not sure who's in charge of these decisions, but developers - the best rule of thumb to go by is once an API is deployed to production, everything in that API spec cannot change. LEAVE IT BE! The end consumer is always expecting things to abide by the status quo. The majority of users will not update their application, and they will immediately complain about anything that doesn't work at a prolific scale.

It's an awful user experience. All designers and programmers should consider these legacy customers and find creative solutions to scale and expand their API's rather than forcing major upgrades.

Before I sign off here, I'd like to talk about one of my nightmares. I can hear it now...

what about Internet Explorer??

If you don't want to deal with an awful browser or device (Windows phone I'm looking at you), do not build applications for these devices in the first place. Once you decide to start supporting anything at all, you will have to support it for all its technological life.

Programming, Thoughts

Introversion at the Latest / Earliest Hour

I often find myself coding deep into the night. I can't quite put my finger on it, but there's something subtly addicting about staying up late, by myself, with F.lux blasting on its most orange setting as I punch my keys in a sequence of logical events.

In the past, I would always take time out of my work day to play video games, socialize, or maybe even have a drink and smoke. But now... the digitalization of my coder life has become an artistic medium, unforeseen, and unexperienced by most. Many of my peers see computers as solely a tool for work. I see it as an evolution of sorts. A paradigm shift of life - as you must. An artistic grounds for innovation.

I can easily see myself never letting go of this addiction. This QWERTY keyboard layout... These languages. These console outputs... These frameworks - my own grown up K'nex. I can't even begin to express the ideas in which I want to tackle - the applications I want to build. The art I want to code. The relationship I want to nurture.

Alas, time is not on my side. Programming is a time consuming process, despite all of the optimizations I try to incorporate in my daily interactions. Shortcuts and five fingers can only get you so far.

It's quite possibly the ephemeral, evolution of Moore's Law. Holy shit, it is beautiful. Year over year, improvements on both hardware and software allowing us to do the most ridiculous of things. Once you reach the zen of programming, your life will never be the same. I feel limitless in this virtual realm. It has become my religion. A deity in the most computerized form, yet inhibited and enabled by these keystrokes...

I can deconstruct worlds and layers, unforeseen by 99% of the population. It is the most enjoyable experience I have ever been a part of. 25 years of my life and so much more to learn, so much more to suffer, so much more to LIVE.

Programming, Thoughts

Beat the Burnout

Inspiration from Sam Altman

After almost 3 years of nonstop hacking and coding, the toughest part of the job is not burning out. There are many a times when the thing that kept you interested (programming) just doesn't cut it anymore. The spark isn't there. When you don't want to go any further - when you'd rather eat ice cream for the rest of your life..

The burnout is real. Any programmer would be able to tell you this. Every big, massive undertaking has an equally large and massive undertaking for bug squashing, testing, and endless hours of debugging. No one writes perfect code, but in order to survive the gruesome, computer stare-down (maybe breakdown too) - you must know a few tricks:

  1. Coffee coffee coffee - I can't stress this one enough. Nothing gets you going like a cup (or 5) of joe. Nothing.
  2. Working out - Specifically, cardio. Even a twenty minute bike ride will light your brain on fire. Challenging your body is paramount to challenging your mind.
  3. Spoil yourself - Every techie is obsessed with something, whether it be a side-project, more electronics, energy drinks, video games, etc. Find that thing which keeps the hamster wheel spinning.
  4. Downtime - This is the part where you kick back, relax, and enjoy the show, or meal, or company, or music, or your bed.. Whatever it is, make sure you don't touch your computer during this time.
  5. Multitask - This could be unique to certain individuals, but being able to work on multiple projects with varying levels of difficulty, ensures that you are able to constantly stay busy while being productive. For example, in office, I will tackle the hardest challenges while I have all of the motivation, but when I lose focus, I will then revert to cleaning up the lower hanging fruit, such as icon updates.
  6. Operate on your best hours - Not everyone is productive at 5AM, but if you are, you know better to twiddle your thumbs during those times. Do what you got to do.
  7. Work on something you love - This is the best part about coding. You get to build something which has never been built before. Use a new framework with your favorite language or contribute to projects which you strongly believe in. The world is your oyster.

That's it for now. I revamped my website with a few more CSS goodies. I plan on adding a portfolio page soon to give you a snapshot of all the projects I'm working on!


Raspberry Pi 2/3 (B+ Model) as an IPTV (Stalker) Client

Finally, after 2 days of fiddling around with this hardware, including testing with Raspbian (Wheezy), Raspbian (Jessie), and OpenELEC OS, I was able to successfully get Kodi 15.2 via OpenELEC 6.0.3 up and running.

I had absolutely no success with the Stalker PVR Client on Raspbian, so I opted for the unified media experience with OpenELEC. It's great. It automatically detects and installs drivers for my wireless network and keyboard / mouse receivers.

Pre-installation requirements:

  1. Raspberry Pi 2/3 - I bought mine on sale from Amazon for $36.
  2. HDMI capable display - I used my computer monitor and TV for testing.
  3. Internet connection - I used the EdiMax USB Wireless receiver from my starter kit.
  4. 8 GB or larger MicroSD Card - Mine was a Class 10 Kingston from my starter kit.
  5. Micro USB Charger - Mine was included from my starter kit, but I've seen 5-star recommendations of a 2 amp one.

Now that we have all of those in order, we are going to start by flashing the SD drive with the OpenELEC OS:

  1. Let's start by downloading the OpenELEC image from their downloads page. Select the "Diskimage" option.
  2. Unzip the image package you just downloaded.
  3. Write the disk image to your micro SD card. Use the instructions on this page for the platform you are using.
  4. Boom! You have now installed an entire powerful, open-source media center OS on your Raspberry Pi.

After a few splash screens and a short welcome tutorial, you should end up at the home screen, as such:

On a side note... Look how tiny that thing is compared to my 40" TV. Here are a few quick links to navigate the menus.

  • To setup wireless networking, go to System -> OpenELEC -> Connections and select the network and credentials to connect. It should "State: ready" when it is connected. OpenELEC will automatically connect to this network when it starts up.
  • To check for updates, go to [left arrow] -> Check for Updates. This will automatically update your add-ons and your repositories.
  • To install add-ons, go to System -> Settings -> Add-ons -> Install from repository -> [select repository] -> [select application] -> Install.
  • To launch add-ons, go to System -> Settings -> Add-ons -> My add-ons -> [select application] -> Launch.

To install the PVR Stalker Client (v0.8.4):

  1. Follow my install instructions to install the client from OpenELEC repository -> PVR Clients -> Stalker Client.
  2. Enable Stalker Client once you have configured it with your provided settings. (I cannot provide this for you - there are guides online for different services)
  3. Enable TV and Synchronise channel groups with backend(s) from System -> Settings -> TV -> General.
  4. This one is IMPORTANT. I experienced constant screen refreshes up until I did this one. Power off the machine and back on again. I used the power icon from Kodi.

Voila. You are all setup and running. Your TV option will be reloaded once channels are loaded - there will be a banner to indicate they are being loaded. Enjoy your cheap media center.

What are you waiting for? Cut the cable. Please comment or email me if you have any questions!


24 Thoughts

In celebration of 24... 24 thoughts for the memory and internet bank.

  1. Your wisdom and knowledge is effervescent. Instill wisdom without acting like a douche.
  2. Find your hobbies and passions and pursue them with no end.
  3. Being grateful and saying thanks is a universal language that all economic classes appreciate.
  4. Volunteering and helping friends out should be a motive, not a chore - we're all humans and deserve such respect.
  5. Finding time for yourself is as healing as it is peaceful.
  6. Reserve your judgment of character until you know the whole situation.
  7. Your moral compass and character shift so fast that what you believe this week, might not be what you believe next. (See 20 year old me vs. 24 year old me)
  8. Everything in moderation is the best thing you can do for your health.
  9. Surround yourself with people who are different and smarter (in many other fields) to grow infinitely.
  10. Everyone needs help sometimes - someone who is a psychopath criminal needs help, not punishment.
  11. Racism and sexism is very much alive in America today. Just because everything's politically correct now, doesn't mean these issues don't exist.
  12. Only an energy revolution will prevent this world from exhausting our natural resources and creating permanent climate change. We all need to reduce our carbon emissions by more than 80%.
  13. A timely apology with the right mindset can unburn your bridges.
  14. Do something new each day that your future self would appreciate. It doesn't have to be big.
  15. Communication is key (emoji). Assumptions lead you down a dark, quiet path.
  16. Your mental psyche is one of the biggest barriers to success. Find what makes you happy and keeps you motivated.
  17. Depression is the realest thing a human can ever experience. The extreme apathy on life can swallow you whole. If you're suffering, please talk to someone NOW.. Email me even!
  18. The Internet has a cruel, unrelenting soul and can be more harmful than it is helpful. Disconnecting from everything every once in awhile is one of the best things I've ever done.
  19. As life progresses, your free time and energy shrink drastically. Maximize and prioritize what's important in your life because it will move fast and you will have regrets.
  20. Partying is fun, but so is taking a walk and pursuing your interests. Addiction is an insanely fun downhill ride, with little support to bring you back up.
  21. Working too hard can also swallow you whole. Don't give up what you love for your career. There's plenty of other time to make money.
  22. We're all different, yet we're all human. All of us want to be respected, yet not all of us are respecting. Know your peers.
  23. Accept responsibility and move on, don't project your frustrations onto other people. Handle your business and learn from your mistakes.
  24. If everything else in your life fails, appreciate and reflect on the small things - like being able to breath and enjoy life in the 2000's.

<3 tldr: I am BuzzFeed.