I've run a few small git forges that've gone through the various fork paths over the years, from Gogs to Gitea to (now) Forgejo . It all runs remarkably well and has been mostly set-and-forget for as long as I can remember, and easily trumps the few times I've had to deal with self hosting something like Gitlab. One weird issue would come and go over the years, though: on first load of a page for…
I recently found myself writing a quick script to toggle some jobs on a remote server. The server itself runs a bog-standard PostgreSQL instance to store and manage the jobs, and the setup itself isn't so important that I wanted to spend the effort cobbling together an HTTP server and endpoint - just a quick call over SSH should be more than enough. Now, you could do this in any language,…
In a project I'm putting together, I made the choice to utilize UUIDs as identifiers early on. PostgreSQL has strong support for them, and if you're using UUIDv7, you avoid some of the issues that existed with earlier versions regarding indexing and sortability. In representing these IDs, it's common nowadays to want to utilize "Stripe-style" identifiers, something akin to: //…
In the Rust ecosystem, one of the more popular methods of interfacing with a database is diesel . It's not an ORM, but it has some qualities that can make it feel like one. I'm working on a project where I wanted to add an admin interface for records that are more or less flat objects. Admin interfaces tend to very boilerplate-heavy, and this was no exception - so I wound up cobbling together a…
In the Rust ecosystem, there are quite a few ways to approach interacting with Postgres. One of the older and more established libraries is diesel , which effectively gives you a Rust-wrapped path to constructing and executing queries. If it helps, you can think of it as a "light" ORM. One of the bigger questions over the years has been whether diesel not being "async by default" is an issue. You…
2023 has come and gone, and with it, a decent chunk of travel. The list below is an assortment of plant-based/vegan options in and around Berlin, Germany. I visited most of these during a recent trip, but never compiled them into a list until recently. I figure they're as good as anything for content to update this old still creaking along site - and it beats writing about tech for the millionth…
Earlier this year, I released a DriverKit-based port of GCAdapterDriver . For the most part it's been pretty smooth sailing, once you get accustomed to how things work in a DriverKit-based world rather than Kext-based world. There's one odd bug that's sprouted up recently that only seems to be related to distribution, though - and I've not seen it noted anywhere else, so I figured I'd throw up a…
Consider the following: you've built a macOS app (perhaps outside of Xcode), signed and notarized it, and see no errors in your build log. This is a common scenario for CI (Continuous Integration) build pipelines. Now you run the resulting .app bundle... and the OS screams at you that the bundle is broken, and should be moved to the trash. What gives? A Green Frog One project I poke at from time…
Building native macOS apps outside the normal Apple ecosystem is sometimes a not-so-obvious task. The shifting ecosystem of AppKit, Catalyst, and SwiftUI - coupled with documentation that's sometimes non-existent, or spanning multiple operating system versions that each have their own nuance - makes it tricky to know just what you need to tie into. One language that I've felt hasn't had a great…
On or around November 19th, 2020, The Big House - one of the largest and storied tournaments for Super Smash Bros. Melee - received an unfortunate cease and desist notice from Nintendo of America, Inc. Referenced in the matter is Slippi , a fan made, and supported, method of playing Melee online utilizing rollback , providing an almost console-level experience when it comes to netplay latency. In…
In the midst of a global pandemic, there's a bill moving through the Senate that has massive ramifications for private companies and platforms utilizing encryption to secure user data. Smarter people than me have written in depth about it, and I urge you to read their take and contact your representatives to take action against this bill. Essential Reading EARN IT is a direct attack on end-to-end…
In 2019, one of my goals was to get back to writing here more regularly. I'm proud to say I was mostly successful in that endeavor: it was certainly an increase from the amount written in 2018, and absolutely a win over 2017 (which saw... no posts). I think personal websites still have value in the modern era, and so I'm going to continue this goal in 2020 and try to write at least a post a month.…
Privacy, data rights and ownership are hot topics in 2019. The increased focus on these topics grew over the past few years from a few different things. Snowden's 2013 leaks showed the general public that the data you put out there is not as private as once assumed. An increasing number of database leaks over the past few years have made more people aware that not all data on the internet is…
Miss the old Reddit browsing experience? You're not alone. While I've no doubt that they'll eventually produce something really smooth and cool (they're too good of an engineering team not to), in the meantime I've found myself preferring to use the old Reddit design. It's sleeker, faster to load, and easier to skim large amounts of posts with. You can set your preference in your profile to use…
At WWDC this year, Apple announced a new feature for user registration with applications. Called simply "Sign In with Apple" , it's effectively an OAuth2 authentication ritual similar to what Facebook, Google, Twitter (and more) currently offer. The catch is that Apple wants to do it in a way that protects your privacy, by acting as an in-between agent to avoid your email address being used for…
When did redesigning a personal website become such hell? I've had this site running for almost two decades now, and while it's been a point of (perhaps misplaced) pride, I try to keep it looking decent and up to date. The modern landscape is crazy, though - a million-ish screen sizes and densities, different appearance APIs depending on whether you're running a dark mode or not, and much higher…
I've been using Vim for a little over ten years now. Up until Vim 8, I'd go so far as to say little changed for me... but Vim 8 actually changed the game in a pretty big way. The introduction of asynchronous jobs that can run in the background enables functionality like code linting and completion that don't block the editor, a rather stark contrast to the old days. In fact, I outright didn't…
If you're trying to compile code on recent versions of macOS, and it tries to link to OpenSSL, you may find yourself driven a bit mad by how odd it all is. The long and short of it is that Apple, in a recent-ish release, removed the headers for their version of OpenSSL, and you need to install a modern version of OpenSSL via Homebrew . This is really straightforward... but won't, in some cases,…
Some time ago, I read an interesting article from The Guardian about their work with a concept they call "Live Notifications" . The general idea is being able to do more with push notifications, turning them into a rich experience with dynamically generated or updated assets. I experimented with this on my own when I wanted a simple way of charting some personal data; I have a server that…
Recently, I had a friend ask me to glance at some data science work he was doing. He was puzzled why his output, upon attempting to send it to a remote server for processing, was crashing the entire thing. The project was using a pretty standard toolset - Pandas, Numpy, and so on. After looking at it for a minute, I realized he was running into a JSON encoding issue regarding certain data types in…
It's the last day of 2018, and a few hours before midnight strikes. Looking back, I didn't get to do as much writing on here for the year as I wanted to (something I'm trying to change in 2019 and beyond). I did, however, manage to find time to do a lot of reading this year; mostly due to long flights, but also from a real effort on my part to get back into the habit. It seemed like a fitting way…
Edit as of January 8th, 2019: Twitter announced that they were modifying their last changes, ensuring that some images remain as PNGs! You can read the full announcement here , which details when an image will remain a PNG. Thanks to this, you may not need the trick below - I'll keep it up in case anyone finds it interesting, though. Edit as of December 26th, 2018: Twitter announced recently that…
If you've done any iOS development, you're likely familiar with UICollectionView , a data-driven way of building complex views that offer more flexibility than UITableView . If you've dabbled in Cocoa (macOS) development, you've probably seen NSCollectionView and NSTableView ... and promptly wondered what era you stepped in to. I kid, but only somewhat. Over the past few macOS releases, Apple's…
Two Years and GUIs One of the big (and kind of annoying) discussions that's been bantered about in the tech world over those two years has been whether Electron, a web-browser-masquerading-as-native-app project, is a plague on society or not. Resource wise, it's probably got some argument there, but in terms of productivity it's hands down the king of the castle - effectively trading memory…
Back in August, Compose.io announced the addition of JavaScript as an internal language for all new PostgreSQL deployments. This was thanks to the PL/v8 project , which straps Google's rocket of a JavaScript engine (V8) to PostgreSQL. This got me thinking - PL/v8 offers a rich and featureful way to write functions in PostgreSQL. Let's take a look at what it offers by building a mini JavaScript…
I've developed with Django for a number of years - out of all the frameworks I've ever used, it strikes the best balance between "let me get stuff done" and "don't try to provide me too much, get out of my way when I say so". I was ecstatic when WhiteNoise was released, as it solved a very annoying part of the development process with Django - static files. Rather than uploading things to S3 (ala…
Some people might consider this strange, but I'm still a fan of radio. It's not my 24/7 music source, but I find myself getting annoyed with algorithms trying to predict music that I'd like and ultimately failing. In addition to music, you've got news and sports radio - getting a large mix is fun. These days tons of radio stations have moved their streams to be listen-able online, and recently I…
Over the past year, there's been an explosion of interest in terms of teaching children how to program in schools. This is a great movement; the world is becoming more digital by the day, and as we automate away jobs with technology we certainly need more people to help maintain that automation. While it's not a 1:1 replacement for the jobs that get lost in the process, it's an industry that's not…
Six months is quite a bit of time to leave a personal writing depot without updates, but when your life turns somewhat upside down you end up neglecting things you never really expected to. In the past few months, I've been asked "what are you doing now?" more times than I can count. So it's publicly noted (and so I stop getting emails...) I quit myGengo in February of 2012. They're mostly good…
The Nintendo Wii was released around the end of 2006. That's a solid four years now; an amazing amount of time in the lifespan of a technological device these days. Often overlooked is the fact that the Wii has a web browser, which is in fact a build of Opera, offering support for canvas, CSS3, and more advanced aspects of HTML5. This should be incredible; why does nobody develop more for it? The…
For those who haven't heard the news, Google has deprecated a slew of their APIs , leaving many developers and services in a bit of a pinch. While there's admittedly still time for developers to transition, it's a good time to start considering alternatives. In my opinion, it's probably a good idea to choose an alternative that has the technology in question as a core competency, otherwise you're…
Please Excuse the Tone. :( I wrote this when I was younger and, arguably, an asshole (pardon my French). There may still be technical content of note in here, so I'm keeping it up, but please ignore the harsh and unnecessary tone. When playing "contract engineer", you sometimes have to jump in and work with a less than ideal codebase. This was the case on a recent project I helped out on; the…
Note the Following! This is an article I wrote for the March 2011th issue of (the now defunct) JSMag . It was a great piece of literature released monthly, and a great way to keep up to date on the latest news in the Javascript community. Sad to see it go! Node isn’t the first approach to event based programming, and with its explosion of interest it probably won’t be the last. Typical JavaScript…
Back in 2008 I was frequently riding a train twice a day for a ridiculous ~3 hour (each way) commute that nobody on this planet should ever have to do. Needless to say, I did a lot of reading, particularly issues of Wired Magazine. To this day, one article still stands fresh in my mind, which essentially dealt with the concept of surrendering your brain to an algorithmic approach to memorization .…
Well, time certainly flies by quickly. Since the last entry in this little mini-series, I've globe-trotted some more (London, New Jersey, New York City, DC, San Francisco, Seattle... San Francisco again...) and released some new projects that've been in the pipeline for some time. What's next? On Traveling London was a very, very interesting experience. I had the fun experience of being stuck…
For the past few weeks, I've had the incredibly fun experience of living in Tokyo, Japan. I've already fielded quite a few questions as to the "why" I decided to do this, and in an effort to not re-type the story another hundred times, I figured I'd throw it down here along with my experiences thus far. This post is not programming centric; for those of you who follow the feeds for them, you'll…
I don't pretend to be a huge fan of Ruby. That said, I can respect when a language has a feature that's pretty damn neat and useful. For the uninformed, method_missing in Ruby is something like the following: # Basic class, no methods, but method_missing love class Rapture def initialize @missing_msg = "Oh god, calling method_missing" end # Called when a non-existent method call on an instance #…
Before we get into this, I'll note that this post is actually about mobile web development, not the romantic adventures of anyone in particular. You've been forewarned. Sometimes in life, you feel as though doing things the "ordinary" way just doesn't cut it. I've found this to be a common theme in my work, and I'm not the only one who operates this way. One example is my brother (one of them, at…
It's been a good two months since I last updated this. Ordinarily I'd be a little angry that I let it slide for that long, but in this case I think it's warranted. For those interested, here's a summary of what I've been up to, along with my thoughts on San Francisco in general. Since leaving Webs.com (see my previous post for more information on that), I've been pretty much all over the United…
For those who haven't heard the news, my last day at Webs.com was this past Thursday (July 29th, 2010). After three and a half years, I figured it was finally time to move on. It's interesting to reflect on such a large portion of a lifespan. When I joined Webs (then Freewebs) back in 2007, I was actually homeless, and was working a part time job at a Blockbuster. I had gotten pretty tired of that…
This is Old! I wrote this when I was much younger, and arguably, a bit of a jackass (pardon my French). I keep it up for personal reasons, and there might be some technical content of note here... so just please ignore the tone. Yeah, there, I said it - this is a stupid situation for a language to be in. The concepts of Date , Time , and DateTime are all pretty well related. Date is a point in…
It's no secret that I primarily use this space to talk about programming and the web at large. It's a huge part of who I am, but it's not all that I am. Sometimes I see something so incredibly cool and inspiring that I just feel the need to talk about it; such is the case with the movie "Inception". Please note: the following is full of spoilers if you haven't seen the movie yet! Believe me when I…
I talk a lot about Javascript on this blog: client-side, server-side, wherever the language can be used. It's not the only language I enjoy working in, though; Python has always had a bit of a soft spot with me, and with that comes some inevitable Django love. I use Django for a lot of my server side tasks where I don't feel I can safely use something like Node.js . On top of being battle tested…
If you're a developer working on a website that's getting any traffic, you'll inevitably come up against the problem of making sure you're as performant as possible on the front-end. You'll probably compress your Javascript and CSS, maybe refine the slower portions of your site after profiling them, and maybe (if you're smart) sprite your images. You see, one of the chief goals in terms of a…
In my line of work, I edit a lot of legacy code, and with that I see a lot of the following: // Bad practice. Can you see why? var foo = function () { alert ( "bar" ); } ; setTimeout ( "foo()" , 2000 ); That little piece of code is actually a really bad way of doing things, and (to me) is illustrative of when someone is working in Javascript and doesn't actually know what they're doing. For those…
I had the awesome chance to give a presentation at the May 2010 meeting of Refresh Fred . The talk I gave was on an introduction to jQuery (as well as some basic Javascript). The great part is that, since I opted to build the presentation in HTML, CSS, and JS, it's easily viewable online. You can check out the presentation online , or check out the source on Github . The entire presentation is MIT…
Alright, so while it's taken me a nine hour long sprint of coding and design, I've finally revived Veno. This is pretty significant, at least on a personal level - the last time I had a personal site and portfolio online was around the beginning of 2007. Several people have asked me why this took so long, though, and so I figured I'd take a moment to jot down my thoughts on the matter. Full time…
This is Old! I wrote this at a much younger age, when I was honestly a bit of a jackass (pardon my french). I'm leaving it up because this is my personal space, and I periodically review my old work to see how far I've come. You probably shouldn't take too much away from this piece, though. Interviewing people can be one of the most aggravating things in this industry. Just about everybody who…
This Entry is Archived! This article was originally published on December 19, 2008 (2:00:00 PM) over at Linux.com. A still-breathing version of the article (broken links intact) can be found at Linux.com . Scratch The past couple of years have seen an explosion of open source programming languages and utilities that are geared toward children. Many of these efforts are based around the idea that,…
This Entry is Archived! This article was originally published on September 15, 2008 (9:00:00 AM) over at Linux.com. A still-breathing version of the article can be found at Linux.com . Yslow While you can use Firebug to monitor network activity, you can take that to the next level by adding YSlow, which checks your Web site against Yahoo's best practices for a high performance Web site. Besides…