I recently talked at the Denver Rust Meetup about my side project to implement WebRTC data channels in Rust. I'll probably blog about this project in more detail in the future, but in the meant...
Tokio is a Rust framework for developing applications which perform asynchronous I/O — an event-driven approach that can often achieve better scalability, performance, and resource usage than...
It's easy to imagine that computing sprang into existence with the advent of home computers in the late 1970's and 1980's, just as many people have the perception that the Internet sprang into e...
As a learning exercise to sharpen my Rust programming skills, I recently toyed with writing a small program that uses a terminal-based user interface which I built using the Cursive crate devel...
https://cafbit.com/post/cursive_writing_terminal_applications_in_rust/
After almost ten years of using Apache Roller to power this blog, I'm making the leap to the Hugo static site generator. Roller served me well, but after years of watching Roller+Tomcat use hu...
The past couple of years have been tough for digital security. A few disasters and near-disasters include: Heartbleed , a buffer over-read vulnerability in OpenSSL allowing unauthorized remote a...
As the consumer electronics revolution brings more and more of the digital world to handheld devices, the chief constraint developers often face is not bandwidth or CPU cycles, but rather batter...
The twenty-second DEFCON took over Las Vegas last week, and brought many interesting and notable speakers. I took a few notes from the talks that stood out to me, and I'm passing them along here...
In the past day or so, I've been noticing these "Package file is invalid" errors on my Android devices while trying to upgrade or install certain packages from the Play Store. A bit of searching...
While finishing up my holiday travel, I decided to stop in for a couple of days at the Kansas City Hacker House , a place for aspiring technology entrepreneurs to live and work on their proj...
My work and telepresence setup. As a work-from-home software engineer, I'm always looking for ways to improve communication with co-workers and clients to help bridge the distance gap. At th...
I recently conducted a quick-and-dirty survey of C++11 (formerly known as C++0x) features available on various platforms and compilers that I had lying around. My testing was not authoritative n...
My furnace's control board. The "C" terminal has no connection to the thermostat in this picture. (The white wire on the C terminal goes to the A/C.) I connected the unused blue wire (bot...
While visiting Kansas City recently, I decided to investigate Google Fiber , Google's ambitious new residential gigabit Internet service they are building in Kansas City, Kansas, and central...
Last year, I wrote an Android app called Valence that allows the user to remote-control the mouse and keyboard of another machine. Always looking for new challenges, I recently decided it was t...
I've been researching the idea of using embedded languages in mobile applications as a way of reusing business logic across platforms. I haven't found a lot of information about how much an embe...
I'm trying out Ubuntu 11.10 (Oneiric Ocelot) on a PC with a Mac keyboard attached. I made a few hacks to make the keyboard work smoothly and in a (very roughly) Mac-like fashion. I figured I'd...
While developing Valence , an input-only Android VNC client for remote controlling a computer, I've encountered several notable quirks in Apple Remote Desktop , Mac OS's built-in VNC server. App...
I was surprised at the amount of attention attracted by my recent post,"Rapid DHCP: Or, how do Macs get on the network so fast? ". Between the 27 comments on my post and the 180 comments on Hac...
One of life's minor annoyances is having to wait on my devices to connect to the network after I wake them from sleep. All too often, I'll open the lid on my EeePC netbook, enter a web address, ...
NOTE: This post discusses a specific problem which is solved by disabling Nagle's algorithm. Do not try this at home: Nagle's algorithm is implemented in TCP/IP stacks for a reason, and I'm told...
While developing Android applications, I'm often juggling lots of Android machines, both real and virtual. Since I often need to connect to these machines over the network with adb connect, I fo...
An on-screen trackpad and keyboard allow a computer to be remote controlled. Valence supports mDNS service discovery (aka Bonjour or Avahi) to locate participating VNC servers on the local net...
While using Mac OS, I've been missing the handy Linux inotifywait utility—it's a simple program to use the Linux inotify facility to wait on certain file events. I sometimes write scripts tha...
DES, the Data Encryption Standard, was developed by IBM and the US government in the 1970's. Today, DES is considered to be weak and crackable, and a poor choice for anyone in the market for an ...
In my previous post , I mentioned my frustration that certain Android phones (including my HTC EVO) cannot receive multicast datagrams. I'd like to get feedback from my friends and colleagues ab...
https://cafbit.com/post/testing_multicast_support_on_android/
It looks like some (most?) HTC phones running Android, such as my HTC EVO, are not capable of receiving multicast or broadcast datagram packets over the Wi-Fi network. This means that apps which...
I collect data usage statistics on my home broadband connection using a script that polls my router's WAN interface counters via SNMP once a minute. Since I have all this data lying around, I th...
The IPv4 address space is nearing exhaustion . The unallocated address pool is currently expected to be depleted at the IANA level in June 2011, and at the Regional Internet Registry (RIR) le...
It turns out that it's not too hard to customize the dashboard widgets that come with Mac OS X, since they're implemented in HTML and Javascript. You can just copy the stock widget from /Libr...
https://cafbit.com/post/customizing_the_mac_dashboard_calendar/
HTC EVO, shown with the optional extended-life battery. Earlier this year, I ditched my antiquated Treo 755p for the new hotness in mobile phones—the HTC EVO, an Android phone available...
I decided I needed a clock in my living room, and remembered I had this Matrix Orbital VFD2041 vacuum fluorescent display in my junk box, so I whipped up a few lines of C code to make it sho...
Back in the 1990's, I predicted that all data-oriented utilities — telephone, television, radio, etc. — would eventually become Internet services. Today, the world is rapidly approaching thi...
After writing the ffremote.py script to help open links in the correct Firefox instance, I decided that it would be really nifty to develop a simple GNOME Panel applet to manage browser instanc...
I'm often running multiple instances of Firefox on my desktop. Not just multiple windows, but multiple instances, with each associated with a different Firefox profile. I do this so I can have o...
I frequently use the command-line GNU bc calculator to do quick arithmetic while debugging C programs. An ongoing annoyance is bc's insistence that the hexadecimal digits A-F must be entered in...
I decided to try using GNOME Terminal with ugly fonts — that is, bitmap fonts which are not anti-aliased. The goal of this experiment was to improve terminal performance when scrolling large a...
The presence of multiple "clipboard" selection buffers in the X Window System has long been a source of irritation with me, and I frequently end up pasting the wrong thing. A few years ago, I ha...
https://cafbit.com/post/gnome_terminal_friendly_clipboard_patch/
A friend of mine wrote an interesting blog post advocating the use of Java for rich internet applications , and expressed frustration with its lack of Web 2.0 mind share. This got me to thinkin...
While catching up on a mailing list recently, I was reminded yet again of my ongoing annoyance with the structure of online discussions. Many online forums and comment pages show posts one after...
Science fiction writers have always speculated about the future -- sometimes they are quite accurate (Jules Verne predicted live newscasts, space travel, and the Internet in the 19th century) an...
https://cafbit.com/post/software_engineering_fiction_near_future/
I'm traveling in Arizona at the moment, and decided to get in a bit of geek tourism by swinging by the Western Design Center (wikipedia) in Mesa, Arizona. The Western Design Center was founded...
This advanced system can be used to arrange words and make edits without the need for white-out. When I was growing up back in the 1980's, I wrote a lot of documents on my Commodore 64 includ...
https://cafbit.com/post/migrating_legacy_documents_from_word/
Warning: The following post may contain weak metaphors and bad analogies. If these are offensive to you or illegal in your jurisdiction, you may want to skip this post. Like many people who g...
I occasionally need to login to embedded Linux devices over serial connections. One frustrating thing about using a serial login is that programs running on the remote device don't know the wind...
https://cafbit.com/post/terminal_window_size_detection_over/
PROLOGUE I broke down and bought a Kindle , the electronic book reader designed and sold by Amazon. I was somewhat interested in this device when it launched back in November, but Amazon so...
For various reasons, I'd like to get a summary of new mail in my IM client. Since I use a traditional mail server with procmail support, and also operate a Jabber (XMPP) IM server, I decided to...
When developing database-oriented business webapps, the data model can sometimes become quite complex with many database tables referencing other database tables. To maintain referential integri...
When I decided to start this blog, I installed the Roller 4.0 weblog software. Many different blogs can run in one instance of Roller, and the URLs for the blogs are arranged as subdirectories ...
Greetings, Blogosphere! I've finally found the time to set up a blog where I can yap about technical topics that might be of interest to other people working in the wacky, wild field of softw...