spacetraders.io has been an on-and-off obsession of mine for years. Every time I return, it pulls me into a months-long spiral of automation and systems tinkering. It’s one of the most satisfying playgrounds for exploration, creativity, and code-driven strategy I’ve found. Through this game I’ve gotten to play with good coding design API rate limiting mitigation object oriented-like modeling…
For about a year now I’ve had a reMarkable 2 e-ink tablet, and I have to say I love it! For me, it’s the perfect replacement for paper notebooks and bullet journals. I wanted to share my thoughts and pro-tips on how I use it. From Analog to Digital I’m a big fan of taking analog notes on paper. The tactile experience of pen on paper helps me to remember things better than if I…
Notes from Open Source does not win by being cheaper by Anh-Tho Chuong. profit is important even for open source projects to grow: it enabled hiring, running services and sustaining product development. don’t cater to the people looking for the cheapest option. They typically will just run your free/self hosted version. big companies don’t have an issue with SaaS as another line item,…
Summary Notes from “Building a Second Brain” by Tiago Forte. Lean towards creating through expressing knowledge rather than collecting information which isn’t put to use. By creating (expressing through distillment) content you will gain a better understanding of it. Use a currators perspective. This is similar to the cultivation mentality for Zettelkastens. Favorite Quotes…
Gestalt Psychology from germany in 1912, researched how we perceive pattern, form and organization. We can use these patterns in our designs, layout, and visualizations to guide the brain to make immediate inferences about data. proximity similarity enclosure closure continuity connection
Lately, I’ve been reading about information design and one area that I think is especially interesting is how best to use color to convey information. Which reminded me of a time when adding a little color to a problem made all the difference. At DEFCON 30 I participated in the Mayhem Industries CTF. One of the challenges was to find a flag given a file full of seemingly random bytes. file…
A dashboard is a visual display of the most important information needed to achieve one or more objectives, consolidated and arranged on a single screen so the information can be monitored at a glance. – Few, Stephen (2013) Information Dashboard Design (pp 26) Analytics Press Purpose Visual display Important information To achieve objective(s) On a single screen At a glance What they are not…
A poorly chosen colormap between values and colors can fool the human eyes to, e.g., pick out non-existing features, or to hide important features. https://github.com/liamedeiros/ehtplot/blob/docs/docs/COLORMAPS.ipynb Considerations Accessibility/CVD Perceptual Uniformity Printing in B/W 3d surfaces and light shading Accessibility/CVD Some colormaps (rainbow colormaps in particular) do not scale…
Noise Let’s start out with noise. You’ve probably seen noise on your tv, when you’ve tuned to a channel that doesn’t have a signal. This sort of noise isn’t great for creating organic visuals. We need something that’s random in its vectors over time, but not random from data point to data point. Sort of like the gentle rise and fall of a stock price over many…
ANKI Cozmo/Vector I personally think that Anki’s Cozmo was an absolutely incredible feat in both mechanical engineering and creative design. Specifically, I found it amazing the lengths the company went through to build out Cozmo’s personality. First, they hired some amazingly talented designers and animators from the likes of Pixar to help bring life to Cozmo’s personality. Then,…
Today I decided to blow the dust off an unused WeMos D1 Mini (ESP8266 ESP-12F) and BMP280 tmep sensor to build a Hot Aisle Temperature Grafana Dashboard for my Homelab closet. In a Data Center, racks alternate between hot and cold aisles for better ventilation. In our house, it’s also known as “the back of the closet”. Turns out, this closet actually runs pretty hot. With the…
This is how I setup a remote access VPN to my Homelab via Tailscale. This uses Tailscale’s Subnet routers and traffic relay nodes, so you don’t have to install the Tailscale Client on each and every machine in your lab in order to connect to it. Route Advertising I have a Linux VM in my Homelab that’s running the Tailscale client as an Exit Node. I also want this machine to…
Unfortunately I didn’t make it through all these challenges, but I did want to share my answers to the one’s I did complete, share my thought process, and initial thoughts on the challenges I didn’t get. Dauntless Defacement (Forensics) We are given a PCAP file. Open this in wireshark and start tracing TCP messages. Eventually you’ll find the message where the attacker was…
While at DEFCON 30 this year, I used my PIA vpn subscription. A lot. But it would have been great to be able to click a button and connect back to my house to gain access to some services, and also use that as a secure tunnel to the open internet. Well I think I’ve finally got a great solution going using Tailscale. Tailscale is a VPN service that makes the devices and applications you own…
I was finally able to make it out to DEFCON, which has been on my bucket list for a loooong time. Thank you runZero for covering travel and badge fees for this trip, it was a blast! Highlights The Badge Social Engineering Village Incredible what some people are able to do with a phone and some pre-compiled research. Mayhem Industries - Oil Rig CTF A group of us from runZero decided to take a stab…
Overview I built this to both help visualize market data and play with the vue3 composition api and deployment using Docker on AWS’s App Runner and Container Registry services. Unfortunately, in May 2023, Yahoo Finance disabled anonymous usage of most of their useful api endpoints which broke this app. Gallery A green day on wallstreet showing the top 100 stocks by market sectors A mixed day…
Overview Writeup for the Pandora machine on hackthebox.com. I tried to format this document as a journal of sorts, documenting progress, thoughts and discoveries as I uncovered them. This challenge took me a few days, and I got stuck more than a few times along the way. I cheated by reading some other writeups to get unstuck. Don’t get discouraged, this was fun and challenging. The goal is…
My good friend Ryan Gibbons introduced me to Kitty, an alternative terminal application. As a long time iterm2 user, I’ve come to love some of the features it provides, specifically, vertical split panes, quake like dropdown access, and other customizations. Here’s how I moved to Kitty and hacked those same features. Config TLDR: Here’s my config file, with comments removed for…
My personal results from the CliftonStrengths test I took back in 2014. That’s nearly 8 years ago! (I wonder how my results would match if I took the test today.) In some cases I think the results were pretty accrate and in some others I think it was way off. 1. Relator People who are especially talented in the Relator theme enjoy close relationships with others. They find deep satisfaction…
I thought it would be cool to have a Cocktail app that would recommend me cocktails based on my flavor preferences. So I built it. Uses vue.js, working on making it an installabled PWA or maybe a mobile app if people like it. Here it is! ==> http://bar.bwiggs.com Goals ✔ Pretty Cocktail List Cocktail database that I can filter based on what I have in my bar. Would love some categories such as…
While looking at the Aftership API, I noticed their public tracking IDs looked interesting. Example h4qys6mtkkhnkkjvco35a017 This led me down a path of trying to understand what those values could be and how to make them on my own. Considerations Do these IDs need to be sortable by time? roughly time sortable? Firebase uses a modified base64 alphabet so that sorting still works lexigraphically.…
Use gnuplot command to run a plt file and ouput a png file. gnuplot bigo.plt # File: bigo.plt set title 'Big-O Complexity Chart' set output 'bigo.png' # output file name set term png # output as PNG set grid # show a grid set xlabel 'Elements' set ylabel 'Operations' set format xy '' # hide axis ranges set xrange [1:1000000000] set yrange [0:1000000000] set logscale xy # logarithmic scale for x…
I love a good dark mode theme, but in bright light settings sometimes I want something lighter. For my blog I strive to support both dark and light mode themes depending on the user’s settings. Hugo uses Chroma for syntax highlighting. Since it renders the highlighted syntax at build time, it’s not immediately able to provide a dynamic dark/light style based on the user’s system…
First PC The first family computer we had was a 50MHz Gateway 2000. I remember waiting for it every day after school hoping the huge cow shipping boxes had arrived. I copied the Lion King album and nearly filled the harddisk! This was around the time when Napster came out, which I was a fan of, but didn’t really know how to use it. I would play around on AOL, and download punters to see what…
I’ve been using fingerprint authentication ever since I started using my X1 Carbon 6 laptop as my daily driver. However, when I’m hooked up to my external monitor/hub, reaching across my desk to login is annoying! Fortunately, there’s a great project called Howdy that providess “Windows Hello™ style facial authentication for Linux”. This is how I setup Howdy on my X1…
Proceed at your own risk. There be dragons. This article requires you to mess with your bios, which could lead to you having a bricked machine. Be careful! I’ve spent a stupid amount of time trying to replace the default lenovo bios splash image on my x1 Carbon 6, and I still can’t get it to work! It does seem like there are at least a few others out there also struggling with this on…
CyberDefenders is a training platform focused on the defensive side of cybersecurity, aiming to provide a place for blue teams to practice, validate the skills they have, and acquire the ones they need. CyberDefenders provides a bunch of hands on practice challenges for people to test out their forensics chops. Each challenge has a downloadable disk image that you’ll need to mount locally in…
Earlier this year, I was playing around with stock trading. I wanted a way to quickly pick stocks that were performing according to some Technical Analysis signal. During the great Texas Freeze and Power Crisis I began building my first linux desktop app using GJS, GTK3, Gnome Builder. Over the following weeks I kept adding features and it became a great little tool to monitor what was going on in…
After futzing around with the x230 over the years, I finally decided it was time for an upgrade. I found a great deal on this X1C6 on reddit and decided to pull the trigger. Everything went smooth, but shipping took forever as the world was in the middle of a pandemic and the machine had to be shipped out of Canada. So far I’m really happy with this machine! I’ll update this page as I…
I started experiencing issues after configuring my Pace 5268ac modem from ATT for DMZ+ mode to my Ubiquiti UDM Pro router. Git Checkouts and pulls would hang at times Blocks NTP packets! Docker container downloads would hang. There are a few ways to bypass the ATT RG: Plug in the RG and let it handle the cert negotiation. Spoof the RG mac address on the UDMP, unplug the RG and plug in the UDMP.
Overview Since setting up my homelab, I’ve been able to reclaim my now idle Thinkpad x230. One thing that I have never done, is run BSD. So this page is all about my experience running OpenBSD 6.7 on the x230, and lesson I learned along the way. Lessons Installation is FAST Like, real fast. I went from booting the installer to a login screen in around 10 minutes. OpenBSD docs are awesome.
If I send you a message, how can you be sure that the message is from me and the that message’s contents haven’t been altered? Phrased another way, how can you be sure that the message is authentic? A message that is authentic guarantees: Data Integrity: The message is unaltered. Someone didn’t tamper with the message as it was on its way to you. Sender Authenticity: The message…
Did you know “Freon” is being phased out? I didn’t, I found out from my HVAC service technician. By January 1, 2020, it will be illegal for companies to produce or import Freon in the United States. Not believeing it at first, I decided to do some research. TLDR: The refigerant (R-22) used in AC systems before 2010, will no longer be produced or imported starting on January 1,…
Some exciting news came out of GopherCon 2018 this week, Go 2 Draft Designs! These draft designs are the first steps in defining how these new features might work in the future version of GoLang. The main purpose is to generate discussion within the community so the best possible solution to the problem is implemented. Here are the 3 drafted features: Error Handling Error Values Generics! Error…
I needed a way to generate low quality blurry images for use with progressively.js on this blog. The images need to be only a few 10k max. These images are just placeholders to be used until the larger one can be pulled in. Imagemagick to the rescue! You can use the following commands to convert images into low quality ones. # resive image.png to 800px wide and jpg format convert image.
Here’s a quick reference for configuring iptables firewall rules. I don’t use this enough to have it all memorized, so this post will hopefully come in useful for the next time I need to configure a firewall. # show basic filters iptables -L # show filters with rules numbers an packet counts, using ips. iptables -nvL --line-numbers # zero out bytes in verbose listing iptables -Z # dump…
August 25, 2017, the weekend Hurricane Harvey hit Texas I was up all hours monitoring the storm and relevant news feeds. One tool I found was Radarscope, a superb radar app that has both desktop and mobile applications. Curious as to how weather radar imaging worked, I decided to try and figure out how to render my own weather radar images. Here’s a sample screenshot from Radarscope of…
Quadtrees Quadtrees are a tree like data structure where each node has 0 or 4 children. Quads have a few use cases including collision detection, spatial indexing, and image processing. Wikipedia’s Quadtree entry has a decent overview. If you’re looking for a more interactive introduction, definitely check out Jim Kang’s - An interactive explanation of quadtrees. See more of my…
How do you insert a record into a postgres table that has a single auto incrementing primary key field? There weren’t many hits on google with the solution, so hopefully this helps someone else: INSERT INTO [table] (id) values (default); I originally tried using null and 0 as the values, but null throws a primary key constraint error and 0 actually gets inserted as 0.
I’ve been crushing it. I’ve gotten more done in my spare time over the last few weeks than in the last few months. If you’re anything like me, you’re easily distracted. Hacker News, Reddit, Twitter and Netflix all are available with fresh new content at any hour of the day. I can’t count how many hours I’ve lost consuming information that I rarely retained. For the past month I’ve been using the…
We deployed our Rails application today and found that one of our AWS EC2 servers wasn’t able to connect to our Elasticache instance using the Ruby dalli gem. DalliError: No server available Fortunately this isn’t a ruby/rails problem, it’s a permissions issue. In order to allow an Amazon EC2 instance to access your cache cluster, you will need to grant the EC2 security group associated with the…
We’re working on putting our current product behind Amazon Cloudfront. With Cloudfront, if you don’t set a Cache-Control header with an expiry time, Cloudfront will cache the content for 24 hours by default. Instead of littering all my controller actions with cache settings, I wanted to add a default value then be able to override on and action by action basis. First, here’s how you actually set a…
TIL that jQuery has some pretty cool attribute querying capability. I knew you could select element by attributes by simple adding them with brackets: $('a[rel]') And that you can also match against content inside the attributes. $('a[rel='nofollow']') $('a[rel!='nofollow']') But this is where is gets cool. You’re not just limited to equal or not equal. You can also provide other operators for…
I learned something interesting in John Resig’s book Secrets of the JavaScript Ninja. How could you add Array like properties to your objects? At first thought, or at least my first thought, I would add an array to the object and then just use it internally as a collection, or maybe set the prototype to Array.prototype. However, John points out a much simpler way. You can simply use Array’s…