You may have read my post on setting up the Raspberry Pi to access the desktop remotely. I got most of that accomplished with a bit of determination and some help from the good people of Reddit /RaspberryPi. Once I’d sent reddit my post, u/newdles and u/wittless both made some really good suggestions about using an SSH Tunnel to route traffic from the browser on my current computer to the Rasberry Pi. This eliminates the need for any remote desktop software like VNC which is inherently insecure because the data it sends isn’t encrypted.
SSH (Secure SHell) is a much better option than my original plan for a few reasons. First as the name implies, it’s relatively secure. The web traffic is encrypted while it’s travelling back and forth between my laptop and the Raspberry Pi. For the time being, short of the NSA, most people won’t have access to the traffic stream.
Second, it’s far faster than VNC. Because VNC has to send graphics data between two computers it tends to be pretty slow and finicky when you’re trying to move about the desktop, open files and applications, and manipulate settings. It’s always been like this and even with significantly higher internet speeds, it hasn’t drastically improved in the 15 years I’ve used it.
I found a great walk through from Hey Stephen Wood on SSH Tunnelling on the Mac, and since I was already set up for SSH terminal access, it was really just the proxy configuration I needed. The only thing different in my own setup was that I’d changed my default port from 22 to (something else) on the advice of u/witless on that reddit thread.
Stephen suggests using this to connect to your Pi:
$ ssh -D 8888 firstname.lastname@example.org -vv
But when the default port has been changed, this is actually what you’ll need to do.
$ ssh -D 8888 -p [YourNewPortNumber] email@example.com -vv
I got a bit confused by his 8888, and tried to jam my port number in there unsuccessfully. The –D 8888 specifies a port on the local computer where that tunnel can transit through. Obviously my non-default port needed to be specified separately. :)
Apple’s iWork kept asking me to register, and even after I did, it continued to pester me.. Read on for the solution!
I use an admittedly old version of Apple’s iWork on occasion to make documents that need to be pretty. It’s got some really elegant layouts and makes use of unique fonts that Microsoft’s Office package just can’t compete with. I’ve always found that Office creates documents that have a clunky, designed-by-a-12-year-old feel to them. They work, but they’re not nice to look at.
Somehow with a recent reinstall on top of OSX Yosemite, the iWork package wouldn’t take the hint that I didn’t want to register, and kept pestering me even after I capitulated and fed it my standard registration email address (firstname.lastname@example.org).
Turns out others have had this problem too, and I found this thread on StackExchange relating to the issue. The solution is pretty simple, but the proper step is tucked down at the bottom of the page, and you’d miss it if you don’t read all the way down.
Disable the registration dialog:
- Open Terminal.app (this should be in the /Applications/Utilities folder)
- Type the following:
sudo defaults write /Library/Preferences/com.apple.iWork08 RegistrationHasBeenSent true
- Enter your password (your account will need to be an administrator of the computer)
How this works:
Sudo allows the computer to act as an administrator for this session alone.
Defaults is a little utility that lets you edit .plist files
com.apple.iwork08 (or .iwork09 if that’s what you’re using) is a .plist or Property List file that is built in XML and stores application specific data like RegistrationHasBeenSent. We just set that to true and tricked the computer into believing that it doesn’t need the information any longer!
Presumably this works on iWork ’09, and I’ve confirmed it also works on iWork ’08 (at least on my machine). Let me know if it works for you on these or other versions, or if it just doesn’t!
Attention: If you’re the type that gets hives thinking about technology, this post isn’t for you (and please don’t feel bad for just completely skipping it!)
I’ve finally managed to get myself a Raspberry Pi from the wonderful people at Solarbotics. As a technical guy, I’ve long struggled with trying to get Unix computers up and running.. I’ve always found the Unix documentation and tutorials tough to get through, primarily because they tend to make a lot of assumptions about what the reader might know. (A lot!) Usually I find this leads me in circles and spirals trying to sort out a problem related to some minor version change, or difference in configuration. Also, I think I’m pretty much checked out of digging through obscure technical documentation. Thankfully, because of this new class of hardware, there is a new class of writer building documentation now, and we have people like the Raspberry Pi founders, and countless other makers to thank for that.
So, now that I’ve got a specific need to be addressed, I’m going to give this a shot.
The following are some of the tutorials and instructions that’ve helped me solve the problems I’ve encountered in the configuration. The post is mainly a repository for my own use (any name-calling is aimed solely toward me, myself, and I), but I’ll keep it posted here to help others who may have the same issues. Because this isn’t a tutorial or even a fully fleshed out article, it’s possible that I haven’t fully explained something that you’re struggling with. I may have chosen not to because it’s part of my own knowledge, but I recognize that it may not be part of yours. Please give me a shout or drop me an email if you’d like more clarity about what I’ve written. Hope this helps!
First things first..
I wanted a little tiny computer to tuck in to a corner and that could be remote controlled from elsewhere on the internet, mainly for web browsing. Because this will be living at a borrowed offsite location, I didn’t want to take up a lot of space with an old laptop or something more intrusive. The Pi is a good choice because it’s itty bitty, and will easily tuck in to a corner with a wireless router, and won’t consume a shed load of electricity either..
So, there are two specific technical challenges that need to be addressed:
- How do I get access to the desktop of the computer remotely?
- How do I connect to the computer when its IP Address may change at random?
The solutions are pretty straight forward in theory, but a little more complicated to put in to practice but I’ll be using the following to reach my goal…:
- Virtual Network Computing (VNC) which I’ve been using for countless years to connect to my old windows machines
- Dynamic DNS, a way of letting the computer update its own internet address so that I can always find it..
I’m using the NOOBS distribution of Raspberry Pi. It came preinstalled on the Raspberry Pi 2 Bundle I got from Solarbotics. While setting up, I managed to change the password and figured I messed up because on my first reboot, I couldn’t log in.. Crap.
For the record, the default username is Pi (not Raspberry as I was thinking..)
Unnecessarily reinstalled NOOBS on my SD card, learning the following:
- Don’t Panic. Douglas Adams taught us this, and I’d forgotten the rule. Rather than thinking through the problem, my first reaction was format, reinstall.
- When you format the SD card through disk utilities on a mac, you have to unmount each of the mounted partitions on the disk.
- Raspberry Pi NOOBS requires a FAT formatted disk to run. This information is a bit scarce on the internets.
- The above linked NOOBS distro is a little larger than the Solarbotics supplied version. Not sure how, but it includes a few more options to install. Not necessary for a noobie, but may be useful if you want to play and explore with your new device.
- Make sure you choose the right Keyboard and region when NOOBS is installing your OS. Changing the keyboard later is convoluted and frustrating. As is inadvertently typing the £ symbol instead of the # I was expecting..
I had a couple of issues with my display, one that was relatively straight forward, and the second that was a little more befuddling.
- Screen resolution greater than 700xSomething was displaying on a monitor that easily displays 1920 x 1080..
Turns out, the HDMI cable was loose on the Pi connection. Rule number 2 of computer troubleshooting, ALWAYS CHECK YOUR CABLES, DUMBASS.
- After mucking around with some VNC settings, somehow I managed to reduce the maximum resolution of the Pi so that there was black border of unused pixels surrounding the display area. <sigh>
- Reinstalled OS again after failing google-fu and not finding a solution.
- Problem persisted with new OS install, so somehow I managed to change something on the Pi Configuration itself..
- This turned out to be the solution: http://www.opentechguides.com/how-to/article/raspberry-pi/28/raspi-display-setting.html
- One thing the tutorial doesn’t mention is that the Overscan settings in step 4 exist in TWO places in the config file. The ones at the bottom were what fixed my problem in the end. I only learned this after several reboots and some head scratching
- Also, the Pi Config file is called /boot/config.txt
- And, I far prefer using Nano to VI for editing..
Backup, backup, backup..
Okay, I’ve started from scratch enough times, I’d like to backup the 4Gb SD card and create some checkpoints when I install new software or make changes.
Unfortunately it wasn’t as easy as just making an image in Disk Utility on the Mac without first Unmounting the boot and recovery partitions. Once you do though, you can click the SD card, and choose New Image from the icons at the top of the Disk Utility screen..
Install VNC on Raspberry Pi
There are loads of tutorials on this step, so I won’t record a complete step by step, but I find I always encounter issues beyond the provided tutorials, so I’ll record any additional issues I encounter.
I used this write up primarily: https://www.raspberrypi.org/documentation/remote-access/vnc/
But I failed to make things work properly.. Mostly because of my own ignorance I think..
(It should be noted that Adafruit has been making a huge contribution to the maker movement since they started out. they’re reputable, and well worth exploring if you’re at all smitten with building electronics)
- To SSH from another unix machine (like a Mac), you’ll need to provide the appropriate user to connect use ssh email@example.com or whatever your address is to login as user pi
- Starting VNC is as simple as using vncserver :1 This starts the server, and allows you to create different sessions by incrementing the :[number]. As you’ll see below, this is limited by your router configuration..
- There are a few different ways to connect to the Pi from another computer. I chose to use RealVNC viewer and just connect. You can use Mac Screen Sharing, but at the moment I don’t mind having another software package do the work..
- There were a couple of things conspicuously missing from the first tutorial..
- When connecting to the vnc server with the viewer, use the format [IP address]:[Session Number]. In the case of the adafruit tutorial, we create session number 1, so when I connect to my pi it’s address 192.168.9.9:1 that I use to connect.
- Annd Success!
- Now to change the default resolution on my VNC window to match my laptop resolution 1680×1050.
- The first tutorial sets up a script to automatically start the VNC service when you boot your Pi. If this is desirable, it’d be worth trying out. After a bit of thought though, I’d rather not have a whole pile of access methods hanging off my machine while it’s just sitting on the internets. So for now I think I’ll just start it using SSH (as is shown in tutorial 2) with the simple command vncserver :1. It’s pretty easy and gives me the option of running it or not regardless of who is monitoring it on the home side.
Dynamic DNS — Letting the computer tell you where it lives..
So, I’ve looked a couple of options for dynamic DNS services.
- DynDNS.org was what I used decades ago, but they’ve since gone to a pay model.. This application isn’t so mission critical that this is necessary
- Looked at NO-IP but I wasn’t quite able to make things work correctly at first try.. The service is actually pretty good but I ended up looking at..
- DuckDNS instead through the recommendations of a couple of kind Redditors.
- If you haven’t had a chance to explore Reddit, I would highly recommend it. There are a tonne of subreddits that you could while away a lifetime with, but when you’re trying to accomplish something specific or have unique interests like the Raspberry Pi there is surely a community of other inspired users that are always willing to help..
- Authentication through Persona, a Mozilla initiative, will fail on the Pi’s Epiphany web browser
- Reddit Authentication works great though!
- DuckDNS instructions aren’t readily available when you’re not logged in. This makes it tough to research what steps you might have to perform before you commit to logging in, but it’s not really too intrusive.
- To get install instructions for your platform, and once you’re logged in, choose the platform option (“Operating system” in this case), then chose the drop-down menu item for the domain you want to configure.
- If you get to the point where you download the Linux GUI version, make sure you move it to the home folder on your Pi (that’s the Pi folder by default). Following the instructions while it’s in the downloads folder will fail your config!
- I wasn’t able to get the GUI version to launch through the CHMOD line, but I could navigate to it with the file browser in the GUI and double-click, then choose execute.
- Your Token is listed in the setup instructions, sandwiched between too screen shots look closely to find it, you may
- I get the [Error] Duck DNS did not update correctly when I complete the configuration. You also get an error when your IP address hasn’t changed so I’m hoping this may be the same issue as the machine has already been registered with the current IP.
- Also, I’ve changed my default CRON updating to 720 minutes (12 hours) because IP addresses on home internet packages don’t update all that often. If I’m locked out for a half day, this won’t kill me. (I used the CRON instructions on the DuckDNS website to learn that crontab –e will let me edit this)
- To this point I’ve been using internet sharing from my laptop because the router is in a bedroom and I didn’t want to sit on a bed to configure this all. Now it’s time to try this out properly and I’ll have to move it and see if I can get all this working remotely.
- Errrgh.. Turns out there are PI instructions on the duckDNS website. I didn’t notice them because the button only says “Pi” and is really tiny.
- On the “let’s test the script” step I get the error: Warning: Failed to create the file /root/duckdns/duck.log: No such file or
Warning: directory. The file is legitimately not there (because I didn’t follow instructions from the start), so I just created a blank text file at /root/duckdns and called it duck.log (I also created the duckdns directory)…
- Make sure you choose your domain from the dropdown box at the bottom of the page. This will generate all the instructions for you.
- On the “let’s test the script” step I get the error: Warning: Failed to create the file /root/duckdns/duck.log: No such file or
In order for a dynamic DNS address to work, port forwarding is required to make sure that the internet router and/or modem send internet traffic to the right device. It picks up the public ip address of your modem and this just directs stuff from the router to the Pi..
For Tight VNC the following ports are listed as required:
But that’s not all..
If you start your VNC Server with something like vncserver :1, (as suggested by the Adafruit instructions) the server will use port 5901 for your connection, vncserver :2 will use 5902 and so on. So unless you use vncserver:0 and it actually works (I haven’t tried) the above rules will prove insufficient, so in practice, this is actually what I’ve set on my own router to ensure that it’ll take connections from 1 to 5..
This is what I ended up using for port settings:
I should read the error messages more thoroughly, as they would have easily provided the solution.
So, this has taken me the better part of 7 hours to muck around with and set up (with the odd interruption for this and that).. It seems like an inordinate amount of time, but bear in mind I’m learning all about linux and working with the new hardware, and a completely new flavour of Unix at the same time.
This is actually a pretty straight forward and a great learning experience. With this experience now, I’m pretty confident the exercise wouldn’t take more than an hour of manipulation time to set up (not counting computer time for installing the OS and such)
Hopefully this will be helpful for those of you who’re going through your own setup process, and save you a bit of time yourself! And seriously, try to figure things out, but if you’re really stuck and google lets you down, drop me a note and let’s see if we can work out the problem together!
As I hit send on my last post, a feeling of dread and doom passed over me… The download of OSX 10.8 something (Yosemite anyway) has finished downloading. I’ve been blocked twice in as many weeks from installing new software that I need to complete some upcoming projects because my OS (10.7.5 something) is outdated..
Given the ratings I’ve seen pop up in the App store, I’ve been reluctant to try any sort of upgrade, content to wait until the next version, but it doesn’t look like that will be possible now. So, if you don’t hear from me for a while, well, you’ll know what happened.. :)
So, I reopened my copy of Firefox this evening to find that they’d done one of their background updates. I’ve trusted Mozilla to have my best interest at heart for the most part (and for countless years), but frankly I was a bit surprised by their announcement that they’ve blatantly modified settings that I as a user have already set up in my software.
It’s been so long since I’ve actually had to modify the search settings in Firefox that I had to do a little YahGoogling to figure out how to re-brain my lobotomized search capabilities.
Naturally, the first search result is completely useless to actually solve the problem, but luckily, c-net has posted a simple tutorial here to help you get your Goo-I Mean, favourite search engine back..
As an added bonus, they added a wholly redundant search box to my toolbar (which of course defaulted to yahoo). If your browser has suffered the same fate, you may right click the toolbar and choose customize which will let you drag the search bar in to oblivion. Hope this helps.
And Mozilla, frankly that was a dick move. Shame on you.
For the last few years, I’ve organized my email Inbox by filing messages in a folder that will help me find the messages later. I use one folder to hold individuals I deal with regularly, and another to hold folders for companies where I may deal with a bunch of random people, or if I don’t deal with them regularly.
Something like this: Inbox - People - Bob - Jane - Jim - Companies - Adobe - Dynatech - Grimm's
Doing this, I can use my Inbox as a sort of ‘to-do’ list that lets me know what I’ve got to accomplish in a very dynamic fashion. Need something from me? Send a quick email, and it’ll get done. I even send myself notes on occasion to keep a record of something that needs to be done.
One downside to this, is a long list of people and suppliers that end up making the filing of these emails kind of onerous. Lately I’ve been dealing with a number of companies in the search for a new software solution, and I find that Microsoft Outlook folders all tend to look alike when you get a long list of them running down the side of your screen.
The solution I’ve come up with is to mark a single message as “read” in the folder that I’m regularly filing to, to highlight it in bold and make the folder easy to find when I’m quickly scrolling through the folder tree. This will work in Microsoft Outlook, Apple (Mac) Mail, on your smart phone, gmail, hotmail, or any other email applications you’re using.
I’d encourage you to try this system and see how it works for you!
As appears to be customary here on cavok, I’ve taken an extended break from writing..
Partly this is because I have a few posts backed up in the editing process, and mostly because I feel completely overwhelmed with the life I’ve chosen to date. Somehow, I haven’t learned the appropriate lessons to create balance an consistency in my life. As I get older, my resilience from the effects of disarray is steadily decreasing.
My life has always been an exercise in brinksmanship, constantly juggling new projects, commitments and obligations. This has been exacerbated by my chosen profession over the last decade and though I’ve frequently complained about it, I’ve failed to act upon the knowledge to fix the problem with any sort if plan in hand.
With the end of my tenth drilling season approaching, I’m going on record now to commit to making that change effective immediately by removing myself from the full time rotation in the field. As I transition to in-town work, I may occasionally pick up work here to achieve particular goals with the intention to completely extricate myself from the directional drilling world over the coming year.
With that in mind, over the next few weeks I will work on identifying areas to simplify my life and remove the clutter that has been clouding my creativity and diluting the efforts I’ve put in to several recent projects. I will commit to posting my thoughts on the subject and the new plan by end of month.
Commencing in mid-April I will be actively seeking Calgary based, short or long term contract work on a technology or photography related project and I would greatly appreciate any leads in that respect.
For a summary of my qualifications and areas of expertise, please see my LinkedIn profile here.
As always, I appreciate those if you who still take the time to check in here once in a while. Thank you all for your support.
I’m gonna try and to do some really quick updates as I’m heading home.
25 May — breakfast.
As I sit in a greasy spoon waiting on my omelette, an old timer sits across from me. He’s chatting with the staff about his daughter going in in to hospice.
I’m reflecting on the conversation we had as we both entered the restaurant. About the weather. It’s bad here. I’d commented how brutal it’d been for me over the last week or so.
The hospice conversation I’d overhead has just set this trip back in context. Everything I have experienced to date has been a gift. All the wind and bugs and bitterly cold rain are my reward for experience gained and miles traveled.
This whole trip has been a gift of unbelievable intricacy that I shall surely be reaping the rewards from years to come.
This will be ever present in my mind as I make the final portion of my journey home.
Heading in to Lethbridge this afternoon, then back to Calgary. Should be home tonight. Left my Canadian SIM card somewhere along the trail so I may not have a phone for a bit once I cross the border..
Thankfully today it’s sunshiny and beautiful out.. Not at all like yesterday:
Stopped in Buffalo,WY to throw my gear in a dryer and have a quick feed after barely 100mi covered in the rain. It’s snowing to the west, so jellystone is out for this trip. 700 mi to go. Gonna try and push home tonight if I can stay dry and warn enough..
Safe and sound somewhere south of St. Louis MO.. Great ride today with a bit of rain and some craziness.. I totally overshot High Knob Campground which was my intended stop for the evening.. :( Guess I’ll have to save my visit for the next trip.. :(
Got to Nashville last night just in time to head out and grab a bite to eat.. Changing things up from my last visit, I trusted in Trip Advisor to lead me to something cooler than the standard Broadway-Honkey-Tonk-Tourist-Traps.. I ended up at the Back Alley Diner for a bite to eat, and a few drinks and had a pretty great time hanging out with the likes of Chris & Christel, Kevin & Kim, and Miss June, who under no circumstances should ever be called “Miss” June.. Managed to do a bit of a local pub-crawl with C&C and K&K to end up the night. — Fantastic!
I’m off into the country and don’t expect to have much in the way of internet for the next few days, to don’t worry about an update for a bit! :)
Oh, also, I’ve added a little adornment to ThirstyGirl. This really ties the whole bike together.. ;)
ThirstyGirl and I took a break and headed for the coast. I had to see the ocean for at least a little bit… Our proximity to the oft-discussed-in-motorcycle-circles “Tail of the Dragon” ride on US 129 made it a logical start to the trip. The dragon is well known around these parts, and is popular with both auto and motorcycling enthusiasts. There is much lore surrounding the (reported) 318 curves on this 11 mile stretch of road, most of it surrounding the number of deaths this year (apparently 8 already in 2012, but I don’t believe this to be accurate..).
Seeing this, I knew we were in for an incredible ride..
I managed to get some video uploaded.. This is a fairly high-speed version of the footage I shot from the front of the bike. It’s pretty shaky due to some vibration problems I hadn’t anticipated and the really twisty-turny stuff starts about 2:40.. Don’t feel bad about fast-forwarding.. Hope you enjoy..
If you can’t watch, or perhaps can’t wait ’till the end, this is what I found at the end of my ride up the hill: Ooops.
Around the corner from my impromptu stop was the Deal’s Gap store which is really the tail of the tail of the dragon, they’ve got a motel, gas station and a whole pile of souvenirs and tchotchkes to prove you’ve been there!
Beyond Deal’s gap, I took a break from US 129 and headed down Highway 82 along the spectacularly beautiful shores of Cheoah Lake. I can say without a doubt that this stretch of highway was even more enjoyable than the first section of the day. The curves were equally hair-pinned and bendy, but the drive was just a bit more relaxed without the onslaught of oncoming traffic wandering across into my lane..
At some point along its length, 28 joins up with Highway 107 and continued to inspire awe (at least on my part).. I shot this photo around 5:30 PM, just over the South Carolina border.
It was getting nearly time to shut down for the night, but I had a few more hours of road to get behind me to keep moving east.. For some reason every turn I made to head in the right direction headed me back toward Atlanta.. The most detailed Rand McNally maps I could find failed to list the plethora of actual highways that line this countryside, significantly adding to the confusing navigation scenario.. Oh, iPhone maps, yeah, they’re much more confusing. I digress, but it’s possible you’ll hear a rant about them later.
Funny thing with Northern Georgia, in stark contrast to the beautiful little farms that line East Tennessee roads, the countryside here was really barren. Devoid of houses, farms, cities and really any population at all.. I finally found my way to the small town of Lavonia GA and bedded down for the night.
The next day of travel took me through more of northern Georgia and Southwestern South Carolina. (I know this gets confusing, have a look at the map and stick with me!). I took the opportunity to stop and take a walk through a Civil-War era Confederate cemetery in McCormick SC. For those of you who haven’t had the opportunity to wander through old-country graveyards, I’d highly recommend the experience. History comes alive when you start seeing crucial historical dates etched in stone. The thing that struck me was how long people were living back in the late 17 and early 1800’s.. Several of the stones I read were people that lived well into their 80’s and 90’s, and that’s through the US Civil War! Whoever says we’re living longer today might want to recheck their stats. ;)
The whole afternoon took me through some pretty economically depressed areas.. I saw very little in the way of industry, commerce, or any other viable form of income save a bit of farming..
Often, I’d come across virtual ghost towns that looked recently-prosperous. It was simultaneously surreal and saddening. Crossing the state line between South Carolina and Augusta GA was perhaps the most stark contrast between have and have-not.. After a half day of passing run-down farms and deserted towns, the suburbs of Augusta were incredibly posh and well developed..
Augusta itself has seen better days.. Both of my cameras had given up the ghost by the time I got there, but I managed to catch a few shots of the Augusta Powder Works buildings where much of the Confederate gunpowder and munitions were made during the Civil War. Much of the area around the powder works was incredibly depressed and as I rode around I couldn’t help but think that it deserved much more exploration and time with a camera and an open ear.
Pushing on, and after one more speeding ticket (a little more than a hand-slap this time) I finally made it in to Savannah and got settled for a few days of wandering.. That, in the next post. This one is already getting toooo long. Read Part 2 here if you’d like to continue!
Jordan is… Well, um, a lot of things. Most of them are even good.
currentlycontinually seeking a definition for myself that inspires, enlightens and enriches the lives of others. This is long-term work in progress.
Jobs I’ve held run from busboy to bartender, computer guy to directional driller, photographer and tour guide too.. Rarely do I ever identify myself by a job title though.
Over the past ten or twelve years, I’ve traveled through some 34 countries and always relish the opportunity to do things that are out of the ordinary.
On this site, you’ll find musings about photography, the oil and gas industry, travel, robotics, electronics, and social responsibility among other bits of my life.
Jordan is currently…
on the road!
You may catch me by telephone
+1 403 829 2740 (Calgary)
+1 604 229 0225 (Vancouver)
+1 865 282 3069 (Knoxville)
or email, or postal mail if you so choose, but you’ll have to take a peek at the contact page for that info!
Browse for stuff..
- Climate Change (1)
- Community Building (2)
- Food (4)
- General Announcements (31)
- Industrial (1)
- Linux (1)
- Maker (1)
- Making (1)
- Motorcycle (14)
- Oil & Gas (1)
- Personal Note (5)
- photography (8)
- Raspberry Pi (2)
- Renovations (2)
- sustainability (1)
- Tech Stuff (7)
- Travel (18)
- universal understanding (4)
- Unix (3)
- waste (2)
- Web Development (3)
- workflow (1)
- Youth Photo Initiative (1)