Jehan Alvani
  • Home
  • Photos
  • Archive
  • About
  • Cars
  • Probably the only angle that consistently looks awkward across 911 generations

    24 September 2023
  • For Sale: 2016 Audi allroad

    It’s time for me to part ways with my 2016 allroad 2.0t Premium Plus. Lightly, and if I may say, very tastefully modded 😎. Black on Chestnut leather. Currently sits at 48,681 miles, though I’ll be enjoying it until it sells.

    I’m the second owner. The car doesn’t have an entirely clean title: I was rear ended by a kid in a Jeep in 2019 just a few weeks after I bought it, and in October of the same year the PPF and ceramic was thoroughly put to use when it was covered in outdoor paint. Long story, but if you’re interested, you can read about the whole thing in my car’s diary thread. It looks beautiful now, if I do say so myself. I had bodywork done by Paramount Center in Fife, an Audi certified shop.

    Email me for more information or to come see it

    Asking: $20,000

    VIN: WA1UFAFL6GA003488

    BadVIN Report - I prefer BadVIN to CarFax

    Mods

    • IE CAI
    • IE Stage 1 tune
    • H&R Coilovers
    • H&R Rear Swaybar
    • Porsche Macan 4-pot front brake calipers
    • RSNAV S4 Head Unit, integrated dashcam and HD backup cam
    • Europrice FBSW w/ paddle shifters
    • Xpel Fusion Paint Protection Film and Ceramic Coating
    • Module to add hatch close by remote

    Details

    Macan/Q5/Sq5 Brembo 4-Pot Front Brakes and 345mm Front Rotors

    • Brake Pads:
      • Brembo: 8R0698151R + 1 Sensor
      • Akebono: EUR1546
    • Front Rotors: OE: 8K0615301M / ZIM-100333252
    • Rear Rotors: OE: 8K0615601B / ZIM: ZIM-100333320

    Maintenance Sticker OCR

    WA1UFA FL 6 GA003488 
    8KH 52A 2811863=3
    A4 Allroad   q.2.0  R4
    162 KW  ABS. 	07/15
    CPMB	KRR 	QCU
    LY9T / LY9T   N1F/VR
    EOA	7D5	4UB	6XL	5SG	5RW
    1KW	J1N	1LA		1AT	1BP
    3FU			5MG 7X7		
    FOA		9G3	0G7	0YM	0JJ
    TL6	3NZ	8EH	U1B		GZ7
    1XW		8Q3	9Q8	8Z6	D60
    7T6	CH9	7K6	4X3	VJ1		
    3L4		VW1	3Y0	4I3	5D2
    1SH		7GB	Q1A		4GQ
    

    Decoded

    Decoded with the [VW/Audi/Seat/Skoda Option Code Decoder][36]

    E0A = No special edition
    7D5 = DVD player
    4UB = Air bag for NAR
    6XL = Exterior mirrors: with memory function, automatically dimming, electrically foldable/adjustable/heated
    5SG = Left exterior mirror: flat
    5RW = Right exterior mirror: convex (US) large viewing field
    1KN = Disc brakes, rear
    J1N = Battery 420 A (75 Ah)
    1LA = Disc brakes, front
    1AT = Electronic stabilization program (ESP)
    1BP = Suspension/shock absorption for special rough-road design
    3FU = Big roof system
    5MG = Decorative inserts, burr-walnut
    7X7 = Park distance control rear with rear view camera
    F0A = No special purpose vehicle, standard equipment
    9G3 = Alternator 120-180 A
    0G7 = Tiptronic
    0YM = Weight range 12 installation control only, no requirement forecast
    0JJ = Weight category front axle weight range 9
    TL6 = 4-cylinder gasoline engine 2.0 l unit 06H.H
    3NZ = Rear seat bench unsplit, backrest split folding
    8EH = Bi-functional headlight with gas discharge lamp, for driving on the right(US design)
    U1B = Instrument insert with mph speedometer, clock, tachometer and trip odometer
    GZ7 = Power latching for sliding door right
    1XW = Leather trimmed multi-function sports steering wheel
    8Q3 = Automatic headlight-range adjustment dynamic (self-adjusting while driving)
    9Q8 = Multi-function display/on-board computer
    8Z6 = Hot country
    D60 = 4-cyl. SI engine 2.0 l/162 kW 16V turbo FSI, homogeneous base engine is T61,TW6,TP6,T1P
    7T6 = Navigation system (MID)
    CH9 = Alloy wheels 8J x 18
    7K6 = Flat tire indicator
    4X3 = Side air bag front with curtain air bag
    VJ1 = Reinforced bumpers
    3L4 = Electric seat adjustment for both front seats, drivers seat with memory system
    VW1 = Side windows tinted green, from B-pillarto rear window gray tinted safety glass
    3Y0 = Without roll-up sun screen
    4I3 = Central locking system "Keyless Entry" without deadlock
    5D2 = Carrier frequency 315 MHz
    1SH = Additional engine and transmission guard
    7GB = Emission standard ULEV 2
    Q1A = Standard front seats
    4GQ = Windshield in heat-insulating glass)
    

    7 September 2023
  • Block Notification Requests in Safari.

    Ben Werdmuller posted a quick blurb about entirely disabling website notifications in your browser of choice, and I’m right there with him in not ever granting permission for a website to send me notifications. And while he covered Chromium- and Gecko-based browsers, he omitted Safari and Webkit-based browsers.

    Fortunately Apple doesn’t hide this in hidden advanced settings panels. It’s in Safari Preferences → Websites (tab) → Notifications. Delete any entries you may have previously granted (or don’t) and uncheck the checkbox at the bottom.

    Screenshot of Safari Preferences
    26 July 2023
  • Hi, [coworker],

    Hi, [coworker],

    I hope this email finds you well.
    Wait, no that’s not quite true;
    I hope this email never finds you.
    I hope you sleep the deepest sleep of your life,
    A sleep earned through labor and fresh air. That you smile in the slight fog as you rise to dew
    on the increasingly-reclaimed markers of our once-great society.
    Once-“great” society.

    I hope you look back on the things we built
    And find them quaint in how they misjudged what was important,
    And entirely misguided in how they defined “value”.
    I hope you feel the Earth and the plants in your lungs,
    that you see your breath in the springtime sun.

    I hope you can reflect and reject the techno-industrial, the educational-industrial,
    the capital-industrial complex to which we dedicated so many years,
    And I hope you see smiles and dirt on the faces of your children.
    Hope you smile too, knowing our mistakes won’t be theirs.

    I hope you find satisfaction in the routine,
    reaching into stores to make breakfast for you and yours.
    Tending to others, to plants, to animals. I hope you take less than you give
    And that you teach others do the same.
    I hope you know your worth, our worth
    Is not defined in EBITDA or MAU.
    It’s defined in what we instill, how we inspire, and how we reflect the things we claim to hold dear.
    I think you said that to me.

    I hope that between when I hit send and when this gets delivered to you.
    We, the greater we, face a redefining event.
    That we are forced to reckon with our past prioritization.
    But, I guess, if all that doesn’t happen.
    Maybe, if you could get me the latest quarterly summary?
    We’re supposed to update it with the new KPIs that the Leadership team defined last week.
    Yeah, no the new new KPIs. I know. I told them.

    But, really, I hope this email never finds you.


    I wrote this a little over a year ago, thinking of a friend who I was frustrated on behalf of. It’s been a while, I need to check in on him.

    1 March 2023
  • I took this shot of a wonderful Cheyenne Randall piece and cleaned up some of the junk and tags that went up around it. Easily one of my favorite pieces of street art, deserves to be appreciated on its own.

    12 January 2023
  • Pretty decent view from the office this morning. Olympics in full alpenglow.

    4 January 2023
  • Reverse Resolutions

    I’ve never been a new year’s resolution kind of guy - if it’s important enough to do, there’s no reason to wait until the end of the year. But the turn of the calendar offers the opportunity to look back on some adjustments I made throughout the year. Indulge me in a little reflection:

    General

    • Restarted my journaling habit
    • Let my work-life take a little less, and keep a little more for my family and friends - I’d say I’ve been successful since January
    • Read more books - semi-successful, getting better again lately
    • Make my kids laugh every day - check
    • Fix more broken stuff myself - check
    • Buy less - check
    • Rely less on news aggregation (Reddit) and more on reading and critiquing journalism - Moving slowly in the right direction

    Work

    • Be intentional with my time - Was very good February through June, let myself get caught in the churn mid-year, back at it over the past couple months
    • Lead with curiosity - I should write more about this, but suffice it to say for now that this has been a big change over time and has gone well. Still need to develop this muscle, though
    • Define concrete individual work goals - Yes, and documented! Sometimes writing them down is the hard part

    There are opportunities, too, as there always are. I want to spend more time getting away both with the kids and just with Linds. But these changes don’t have to be right now.

    Still haven’t speckled and painted that dent in the drywall in our bedroom, though.

    31 December 2022
  • Using a Redirect Rule to Resolve Mastodon's WebFinger requirement on a Subdomain

    I kept running across a problem with my Mastodon instance where I was seemingly unable to follow other accounts. Reviewing Sidekiq logs revealed HTTP 401s for nearly every account I tried to follow.

    After some poking and help from some very kind folks on a Mastodon admin Discord (@[email protected], specifically), as well as my host, I think I’ve resolved the issue. It seems to have been because I boched my webfinger redirect.

    For some context, Mastodon relies webfinger as a method for clearly identifying users on remote servers. Since I have my Mastodon instance on a subdomain of alvani.me, but want my usernames to be in the @[email protected] format, I have to create a redirect for requests to

    https://alvani.me/.well-known/webfinger
    to be redirected to
    https://mastodon.alvani.me/.well-known/webfinger.

    I used a CloudFlare redirect rule to accomplish this, as per the screenshot below.

    31 December 2022
  • Santa dropped off a secondhand OneWheel Pint. Really appreciate the thoughtfulness of keeping things out of the landfill, and excited to get to refurbish it! Here’s one of my Pints riding the Pint.

    29 December 2022
  • Hosted Mastodon instance using Cloudplane and Cloudflare

    Despite being aware of Mastodon and following its development since its introduction back in 2015, I never really spent any meaningful time with it. Along with many others, I was motivated to change this as for so many reasons including but certainly not limited to Elon Musk’s capricious “leadership” of Twitter.

    I initially signed up with an account on Mastodon.social, the “first-party” instance that’s run by the service’s founder. After poking around a bit, I decided I’d prefer to run my own instance that maybe some friends and family could share if they were interested. After reading over the requirements and officially-supported architectures for the image, and looking into options for self-hosting either on my home lab or in some IaaS provider, I decided that this was a case where I’d prefer to have a host. If friends or family wanted to use it, I didn’t want to be on the hook for keeping it running during or after power outages, etc. Looking for servers and primary administration outside of the US, I found Cloudplane. Reasonably priced for a “small” instance, which is probably all I need.

    Cloudplane makes it fairly easy, although the documentation is sparse. During their signup, they seemed to indicate that the name server the customer uses must support root-level CNAMEs or aliases, and they seemed to recommend Cloudfront1. After a little more discovery, I learned that the root-level CNAME/alias requirement only applies if you intend for the root of your domain to point to the Cloudplane-hosted Mastodon instance. In my case, where I intended to use mastodon.alvani.me as the name of the domain, but use Mastodon’s local_domain and web_domain features to make handles as @alvani.me/@jehanalvani.com

    Thus, once the new Cloudplane instance was deployed, I added alvani.me as the local_domain, and mastodon.alvani.me as the Cloudplane-labeled “Custom Domain”2. Cloudplane informs you of the DNS records to configure - in my case just a CNAME.

    [Update] Since I’m using a subdomain and Cloudplane’s proxy for seucrity features, I also had to set up a root-domain txt record. The same record displayed if I typed “example.com” into the web domain field.

    There’s one more step to take care of: Cloudflare defaults to unencrypted backend connections, and Cloudplane requires encryption. I solved this by creating a Cloudflare configuration rule to capture all requests for the host mastodon.alvani.me, and setting the SSL encryption mode to Full. I also overrode the defaults for my account to SSL encryptions mode - Full (Strict).

    The rule expression in my case was:

     (http.host eq “mastodon.alvani.me”)
    

    Then scroll down to the “SSL (optional)” section and choose “Full”.

    Once configured in Cloudflare and propagated, I could access my hosted instance at the name I preferred.

    The last step is enabling the well-known redirect per Mastodon’s documentation:

    To install Mastodon on mastodon.example.com in such a way it can serve @[email protected], set LOCAL_DOMAIN to example.com and WEB_DOMAIN to mastodon.example.com. This also requires additional configuration on the server hosting example.com to redirect or proxy requests to https://example.com/.well-known/webfinger to https://mastodon.example.com/.well-known/webfinger. For instance, with nginx, the configuration could look like the following:

     location /.well-known/webfinger {    
      add_header Access-Control-Allow-Origin ‘*’;     
      return 301 https://mastodon.example.com$request_uri;      
    }    
    

    In Cloudflare, this is accomplished with a Redirect rule. Note that the check mark at the bottom to preserve query parameters is checked. That’s important.


    1. I’d been looking for an excuse to play with Cloudfront’s services for a while, so this seemed like the stars aligning. ↩︎

    2. Which seems to map to web_domain described in Mastodon’s docs. ↩︎

    28 December 2022
  • Skating in the street ⛸️⛸️

    23 December 2022
  • Considered rolling my own, but in the end I wanted a reliable primary home that I didn’t have to manage. And if I make a secondary server, self-hosted might be the way to go. I’ll write up something a little more thoughtful soon.

    23 December 2022
  • Need to write up setting up a small Mastodon host with Cloudplane and Cloudflare. Pretty pleased with this config.

    23 December 2022
  • I’ve been periodically slamming my head into the wall for the past ~10 months about why a new install of MacOS 12 Monterrey wouldn’t connect to my NFS server. Turns out I had to inform the client to use NFSv4.

    nano /etc/nfs.conf
    

    #
    # nfs.conf: the NFS configuration file
    nfs.client.mount.options = vers=4
    

    Saved nfs.conf and both command-line and GUI connections worked immediately.

    21 December 2022
  • Man, this little interaction at the end of my Apple support chat kind of broke my heart. The support guy, Prashant, was great. I didn’t do anything special, just remembered and used his name my pleases and thank yous.

    18 December 2022
  • Maybe a year ago, I added FreshRSS to my self-hosted tools. I was a longtime Fever user, and used Google Reader and NetNewsWire before that. Sadly the moden web pushed RSS to a background function, and the few sites that actually made their feeds public would often only publish spammy headline feeds.

    Lately it seems the pendulum may have begun to swing in the opposite direction, and I think we’re all better for it. More feeds are being published again and increasingly, again, with full article content. The main difference seems to be that these full-text feeds tend to be paywalled if they exist at all1.

    Hoping to see this trend continue. I want to rely less on content aggregators, and more on direct relationships with trusted news and writing sources. RSS could once again provide that in a way that is respectful to both sides of those relationships.


    1. I don’t think this is a bad thing: paying for the writing you like is key to a healthy ecosystem. ↩︎

    6 December 2022
  • Been a while since I was primary engineer on a network outage. Nice to know I still have some chops.

    21 November 2022
  • Kyle Tucker is having a hell of a game. ⚾️

    28 October 2022
  • Fantastic terminal at PAE.

    14 October 2022
  • The terminal at PAE is one of the most beautiful airport terminals I’ve ever seen. I feel so relaxed every time I fly out of it.

    14 October 2022
  • Ran into a problem updating packages on my Ubuntu-based NAS and Plex host; zfs-zed and zfsutils-linux were unconfigured due to some logic failures that occurred in certain configurations. This resulted in apt failures. In my case, there was an empty zpool configured in a subdir of another pool which resulted in the zfsutils-linux configuration script failing when it was run.

    dpkg: error processing package zfsutils-linux (--configure):
     installed zfsutils-linux package post-installation script subprocess returned error exit status 1
    dpkg: dependency problems prevent configuration of zfs-zed:
     zfs-zed depends on zfsutils-linux (>= 0.8.3-1ubuntu12.14); however:
      Package zfsutils-linux is not configured yet.
    
    dpkg: error processing package zfs-zed (--configure):
     dependency problems - leaving unconfigured
    No apport report written because the error message indicates its a followup error from a previous failure.
    																										  
     Errors were encountered while processing:
         zfsutils-linux
    	 zfs-zed
      E: Sub-process /usr/bin/dpkg returned an error code (1)
    

    To resolve, I stopped all the services that might write to the zpool(s) - NFS and a Plex container, then

    • zfs unmount [root pool name] (replace [root pool name] with -a to unmount all pools if needed)
    • zfs list to list pools
    • zfs destroy [root pool name]/[sub pool] - Be really careful you’re destroying the right pool. Going back isn’t impossible, but it’s not easy.
    • zfs list to confirm the pool isn’t listed
    • zfs mount -a to mount all pools
    • dpkg --configure -a to complete the configuration of unconfigured packages
    • Restart stopped services
    5 October 2022
  • allroad at BSCC Kitsap Cup Event 8 Autocross

    Took the allroad out to BSCC’s last autocross cup event of the season. Running novice class per BSCC rules - you’re a novice until you’ve completed six events. Not sad about it: 8+ years away from the sport has unsurprisingly left me quite rusty.

    Very happy with how the Dad Wagon performed. It’s very heavy and not especially nimble stock. But the H&R Coilovers and sway bars improve the handling considerably.

    All runs were clean, and each run was faster than the last. Very happy with the cars performance, and pretty pleased with my own!

    Run 1

    Run 2

    Run 3

    Run 4

    25 September 2022
  • Itching for a long drive on back roads.

    14 September 2022
  • Remembered that my son used to call the Incredible Hulk “Credible Puck”. Man kids don’t even know how funny they are.

    12 September 2022
  • A few shots from today’s Italian-themed Avants Caffeine and Gasoline in Tacoma.

    3 September 2022

Follow @jalvani on Micro.blog.