Category: tech

  • I’ve had an echo dot hooked up to some speakers for a while, but it hardly works, and doesn’t like pairing to my iMac. So, I recycled an otherwise dormant Raspberry Pi 2 unit and now it’s an AirPlay receiver .

    Why would you want to do this?

    1. AirPlay is a fairly robust media streaming protocol, and there is open source (unofficial) software for building your own service.
    2. The Echo Dot wakes for odd reasons.
    3. Even when you have the Echo’s mic off and brief mode turned on, it will still blast “NOW PLAYING FROM DENNIS’S IPHONE” at top volume. This happens every single time you stop playing music for more than 5 or 10 minutes.
    4. The Echo Dot keeps making “beep boop” noises if my phone loses connection.
    5. The Echo Dot does not want to pair with my iMac. Whether this issue is just with my setup or not, it makes it semi-useless as a bluetooth speaker to me. I don’t want to manage my music from my phone while I’m working on what should be the all-in-one center of my attention.
    6. The Raspberry Pi doesn’t update itself automatically. It will run the same airplay service, the same OS, and the same way – 27/4 – until it loses power or network connectivity. The same cannot be said about Echos, or Google homes, or even the iHome. It’s something I get to set up once and forget about until I replace it with something else.
    7. Lack of vendor lock in. Slight ironic when talking about anything Apple, but to my surprise more and more non-apple devices are shipping with AirPlay compatibility. This inspires hope that Apple may release AirPlay as an official software kit that developers could use.
    8. Cost. A raspberry pi 3 (can’t buy the 2) kit costs less than $50, and it has the audio ports and more than enough computing power to handle an AirPlay service. Considering that the raspberry pi could handle other common server tasks (perhaps as a smart home brain, file server, media server, etc.) in concert with AirPlay, I’d call that a bargain.

    The list could go on, but you get the idea.

    There are a few articles out there, the one resource I want to point out is the actual software making this possible: shareport-sync at https://github.com/mikebrady/shairport-sync

    The Results

    Now, all my devices see the raspberry pi as an airplay device.

    Appears nicely on all my iOS devices

    The sound comes through just fine for office/background, but I wouldn’t use it to actively listen to the music. This can be remedied by buying sound cards for the pi, but I don’t see the need to currently.

    In

    ,

  • Inspired by Elizabeth Irgens’s note, here’s a brief stroll down memory lane where I’ll touch on previous jobs.


    The Upsell

    My first real job was working as a retail clerk for Best Buy. This was in the days before their current CEO (2020) revamped their approach to pricing and customer service. As a checkout clerk, we were held to conversion metrics such as selling a certain number of protection plans, and getting customers to sign up for terrible credit cards.

    I learned that it’s not as hard to upsell people if you instill a little doubt about the quality of the product they’re buying. In all reality, most people didn’t need the protection plans, or the protection plans that were sold didn’t offer the coverage we were told to imply.


    The Internship (absolutely nothing like the movie)

    My second job was during Sophomore year of college, and it was one of the best ever. F5 Networks offers technical internships, and I was lucky enough to land one. 

    I learned a lot of what I know about working with bash, building and maintaining server racks, and web development. I also learned a bit about office politics, and that internships don’t always lead to job placement in a company. That was a rough lesson to learn.


    The Warehouse

    Shortly after my internship was over, I started working for a medium sized business in stores/receiving, later to switch to shipping. Here I learned what a hard day’s work really was, how to stand for 10 hours on end working through freezing temperatures.

    My takeaway was that I’m not really cut out of blue collar labor on the regular. I’m an office man, through and through.


    The Money People

    I worked for a time as a database/server admin + general IT guy for a small financial advising firm. It was a stuffy business, both the clients and my fellow coworkers were mostly super conservative religious types. In fact, my boss even tried to get me to join a church so I could get free health insurance through them.

    I didn’t, and I learned a powerful lesson. These guys paid me $10 / hour in 2014 for skills that took me a long time to hone. Just because a door is open, doesn’t mean you walk through it – and if you do and the room isn’t to your liking, walk back through that door.


    The Medical Field

    After a struggle of conscience and will, I decided that I needed to dip my toes in the medical field to see if it was right for me. I became a CNA and worked in an assistive living facility. It was all pretty hands off, save getting to help with med pass.

    I highly enjoyed my time at this job, and I learned compassion for those struck by degenerative disease. I also feel pity for all people in nursing homes / assistive living whose highlight of the day is to go down to the dining room an hour early to just sit and wait for a mediocre dinner.


    The Addiction Recovery Center

    Much like my work as a CNA, working to help addicts through their recovery process was a very pivotal point in my life. It taught me compassion and understanding for those suffering from addiction, and changed my perspective in a huge way.


    Triad Behavioral Health

    Once I completed web development certs, I started to work for an e-learning company. This was my baptism by fire for Laravel, and I was really able to flex my PHP skills. I also learned how to work with people who were remote.

    I would have stayed with this company longer, but they shut our department down.


    The Dev Shop

    Almost immediately after I left TBH, I started working for a development firm in Spokane. They were on the small size, 12 employees in total, with about 7 full time developers. I learned about networking, and how to work remotely with other companies on a daily basis. Ultimately, I found that I wasn’t happy jumping from project to project, being unable to take long term ownership of any products/projects, and having to kiss ass to rude customers. 


    And onwards…

    In

    , ,

  • Recently on HN, Reddit, and even the New York Times, I’ve been reading articles and comments discussing whether or not COVID-19 is the death knell of in-person universities. They make some decent points:

    • Colleges did make the transition to online
    • Students were able to learn
    • Especially in America, large groups of people in a small room won’t be medically feasible given the continued pervasiveness of COVID-19.
    • Some students say they even learn better online than in person.

    These are all valid points. I learn better with a hybrid approach, where most days I will sit in class but on the days where I have to work or something comes up, the lecture is still uploaded to watch later in the day. The hybrid approach also has the added benefit of allowing students to review the lecture a second time (or more) if they so desire.

    There is, however, an issue with one not so small portion of collegiate education online: the labs.

    For the Harry Potter fans, consider that taking Physics, Chemistry, Biology, or Geology without any of the labs is analogous to Professor Umbridge’s approach to teaching Defense Against the Dark Arts without practicing what you’ve learned. You’ll have all the theory you need, but have you really reached the full extent of your education if you don’t know how to apply that knowledge in the lab?

    Labs are more than just showing up and tooling around with cool gadgets. They’re a practical application of knowledge gained in the classroom, and invaluable hands on experiences that prepare students for work after college (industry or academia). For the students who learn and understand best by doing, like myself, there is no replacement. 

    Another facet of in-person education: the performing arts. Rehearsals for orchestra, big bands, and large choirs would require massive space following the 6-foot spacing rule, and masks can’t be worn if you play woodwind or brass instruments. Choir would be a disaster, as that’s nothing but people constantly forcefully exhaling in a room with other people.

    The online experience

    Friends and colleagues of mine from Eastern Washington University have, overall, given me the impression that online learning in the Spring quarter was an awful experience. This is OK, and I’ll explain why: high schools, colleges and universities around the globe were given NO lead time to prepare for teaching their subjects online. Students who were expecting fully in person classroom experiences were instead given Zoom lectures.

    So, between poorly prepped Zoom lectures and expectations of the traditional college experience, it’s no wonder people had an awful time of it.

    This can be fixed, of course, and I expect that many teachers will spend time over the summer retooling their lesson plans and lecture setups to accommodate what is sure to be another term spent in quarantine, given COVID-19’s current rate of infection across the US. This still doesn’t address how to handle lab work, which is necessary for a lot of jobs that require graduate education (medical field, research, engineering, and more).

    How can we fix this?

    One solution may be to rapidly develop VR labs, but this lacks physical feedback as well as requiring every student who wants to take a lab to probably spend a cool grand or more in equipment (not everyone already has a VR capable PC). This would be a replacement, but not even close to being as good as the real deal.

    Remember those little science kits for children? Super size and super charge them for the college student labs, and you might be able to carry on with in home experiments. This of course isn’t feasible for any of the more hazardous, and of course more fun experiments that require ventilation hoods, protective shielding, or controlled chemicals and supplies.

    So what can we do in the meantime? The answer is of course to adapt the best as we can, and hope that a viable vaccine is near on the horizon. Wear a mask in public. Keep your distance. Use common sense. We’ll get through these times, and maybe, if we act together, thinking about the welfare of ourselves and one another, these times might just be a little shorter.

    A side note, the massive increase in Zoom usage has resulted in many hilarious faux pas by people unaware their cameras are still on.

    I wrote this post under the assumption that we will be returning to life as we knew it before COVID-19 in the near future.


  • I just got a raspberry pi 3 working with a 3.5″ screen using Pi-Hole and running the PADD status board.

    My largest concern was in buying a 3.5″ TFT from Kuman, and not from adafruit (official vs. not). Fortunately, Kuman has a repo for all of their drivers and displays that work seamlessly with the pi 3. 

    So after installing raspbian lite, installing pi-hole, installing the Kuman driver for the 3.5″ display hat, and then rotating the display output 180 degrees, then finally installing PADD, I have a working pi-hole unit.

    I decided to go with a full raspberry pi 3 instead of a pi 0 (w or otherwise), or a pi 4 for a few reasons:

    1. I wanted a hardwired connection, since this will be a DNS server for multiple devices I didn’t want the extra latency of wireless or fiddling around with ethernet dongles for the 0. Any money I would save by getting a 0 would be lost in adapters and resulting complications.
    2. I didn’t want to have to solder on the GPIO pins for the pi 0.
    3. Most cases for the 3.5″ TFT screens are made to fit a full pi board, not the 0.
    4. I wanted better specs than the pi 0, but didn’t need the capability of the pi 4.
    5. I’ve worked with the pi 3 before and I know it’s reliable.
    6. The canakit for the pi 3 is cheaper than ever, possibly due to the popularity of the pi 4. The pi 4 would have been overkill for this project.

    After building, I pointed my phone, my tablet, and my tv at the raspberry pi, and started browsing and watching. After 18 hours of uptime, 709 requests have been blocked out of 8001. I have noticed sites like imgur and Questionable Content running much smoother, and have seen an overall decrease in ads on mobile sites for articles. My next step will be to point my desktop at it, and see how it affects gaming (if there’s any notable lag).

    So for all of $80, I have network level ad blocking across as many devices as I want. Not too shabby.

    In


  • I first started using DreamHost shared hosting in college, as an affordable means of hosting web projects. It includes domain management, no hassel SSL certs, MySQL databases, and more. It’s a great solution for most PHP projects.

    My largest frustration was being unable to host more interesting projects; due to the restrictive nature of shared hosting, I had no installation privileges on the server. Without these, running composer is next to impossible. I recently pieced together the process for getting Laravel on DreamHost, and I wanted to share my findings.

    Note: I’m assuming that you, the reader, have experience with DreamHost and Laravel, and I won’t bog down this walkthrough with every minute step of the process.


    Configuring DreamHost

    Step 1

    Create a new domain/subdomain.

    Step 2

    Add /public to the end of the web directory field. This is because Laravel’s index.php file is located here, and is the entry point for all requests.

    Step 3

    If you’re not using another database provider, create a database through DreamHost (it’s included). On the DreamHost admin menu, under “Advanced”, you’ll see “MySQL Databases”. Create a new database, and note the Hostname URL, database name, database username, and database user password.

    N.B. If you’re doing local development, you’ll have to add your IP address to the database user’s allowed IP address field. You can find it by clicking the username in the table at the bottom of the databases page. Any DreamHost domains are added by default.


    Preparing Your Laravel Files (locally)

    Step 1

    Create a new Laravel project locally, or get into the parent directory of your existing project.

    Option A (No Source Control)

    Step a2

    Zip the directory, and upload it to DreamHost. For Mac/Linux users, you can use SCP to quickly upload from the command line. Otherwise, use DreamHost’s in browser FTP service.

    Step a3

    Unzip on the server. You can do this via DreamHost’s in browser FTP service.

    Step a4

    Configure your .env file with the APP_URL and database values you noted down earlier.

    Option B (Using Source Control)

    Step b2

    Initialize a git repository in your Laravel project if you don’t have one already. I would recommend using Laravel’s .gitignore to filter out sensitive files, but it’s your choice. Publish your repository.

    Step b3

    Clone that git repo in your domain directory on DreamHost. git clone https://url-to-git-repo.git . That period is important, as it tells git to pull files to current directory, and not create a new directory.

    Step b4

    Upload any missing files via SCP or DreamHost’s in browser FTP. You might find a hint as to what files are missing in your repo’s .gitignore file.


    Finalizing Your Deployment

    • Before you run any migrations, update app/Providers/AppServiceProvider.php::boot() with
    public function boot()
    {
    Schema::defaultStringLength(191);
    }

    This will allow migrations to work with DreamHost’s older MySQL database system.

    • Make sure you run your Laravel migrations (locally, or on the remote server. You’ll have to mess with specifying what version of php to use on DreamHost, so I would recommend running them locally.)
    • Run through your .env file to make sure you have all the necessary fields filled out.
    • Read Laravel’s deployment documentation, it’s always a good idea to read that information from the source.

    And that’s it! Now you’re ready to start developing and deploying Laravel applications for dirt cheap.

    I’d like to thank Alesh Houdek for the well written article that allowed me to get up and running on DreamHost.