<rss xmlns:a10="http://www.w3.org/2005/Atom" version="2.0"><channel><title>Pxtl.ca</title><link>http://pxtl.ca/rss.xml</link><description>Pxtl.ca</description><item><guid isPermaLink="true">http://pxtl.ca/2026/03/02/hamilton-hack-anniversary-letter-to-council/</guid><link>http://pxtl.ca/2026/03/02/hamilton-hack-anniversary-letter-to-council/</link><author>pxtl@hotmail.com</author><category>HamOnt</category><title>Hamilton Hack Anniversary Letter to Council</title><description>&lt;p&gt;Another letter to politicians, this time about the HSRNow web application.  For background, HSRNow was a live map
of all City of Hamilton buses and bus-routes on the city website.  In February of 2024, the City IT infrastructure
was hit by a bad ransomware attack and a tremendous amount of digital infrastructure was lost, including HSRNow.&lt;/p&gt;

</description><pubDate>Mon, 02 Mar 2026 00:00:00 Z</pubDate><a10:updated>2026-03-02T00:00:00Z</a10:updated><a10:content type="html">&lt;p&gt;Another letter to politicians, this time about the HSRNow web application.  For background, HSRNow was a live map
of all City of Hamilton buses and bus-routes on the city website.  In February of 2024, the City IT infrastructure
was hit by a bad ransomware attack and a tremendous amount of digital infrastructure was lost, including HSRNow.&lt;/p&gt;

&lt;!--excerpt--&gt;

&lt;blockquote&gt;
  &lt;p&gt;Hi folks,&lt;/p&gt;
  
  &lt;p&gt;I just noticed that last week marked the 2 year anniversary of the city's hacking incident. While most of the
  digital infrastructure appears back up and running, the HSRNow webapp is still missing.&lt;/p&gt;
  
  &lt;p&gt;Two summers ago my son bemoaned the lack of the HSRNow webapp when he was working in Dundas on the weekend. I told
  him I was sure it would be back soon. He disagreed. I'm sad to see his pessimism was justified.&lt;/p&gt;
  
  &lt;p&gt;The bus stop posts still advertise the HSRNow webapp. There's still no lightweight way to view the bus routes -
  only the clumsy full-system map PDF file, or the small black-and-white print maps and schedules that are tricky to
  read. I've heard that the City recommends Google Maps, but Google Maps is a very rough interface because it only
  helps with route planning, not showing actual non-rail routes or live position data to help the user actually
  figure out the system. It's basically a map without a map.&lt;/p&gt;
  
  &lt;p&gt;I assume the city spent substantial money and effort installing the HSRNow product in the first place - I remember
  how long it spent in a "pilot" phase as "busweb". It seems very wasteful to discard that just to avoid the effort
  or relaunching the existing system. I know it's budget season and this seems like something that can be left out,
  but it's hard to see transit usability be treated as bottom-priority. Especially now that cell data-plans are
  finally affordable-enough that basically &lt;em&gt;everybody&lt;/em&gt; has one (notice how the SoBis have been able to switch to QR
  codes instead of keypads).&lt;/p&gt;
  
  &lt;p&gt;I hope a plan can be made to bring it back.&lt;/p&gt;
  
  &lt;p&gt;Thanks for your time,&lt;br /&gt;
  Martin Zarate&lt;br /&gt;
  Ward 1 resident  &lt;/p&gt;
&lt;/blockquote&gt;
</a10:content></item><item><guid isPermaLink="true">http://pxtl.ca/2024/11/20/bill-212/</guid><link>http://pxtl.ca/2024/11/20/bill-212/</link><author>pxtl@hotmail.com</author><category>Politics</category><title>Bill 212</title><description>&lt;p&gt;So in a fit of pettiness, the Government of Ontario is set to wrap up bike-lanes
in a 50-foot-ball of red tape to prevent their construction.  I asked on Bluesky
what was the best way to complain - if there was a petition I should sign or
something.  Craig Burley recommended I send a &lt;em&gt;fax&lt;/em&gt; of all things.  It's got a
good chance of being physical media in their space, and won't just be in a
slushpile of emails they ignore, or forgettable names on a petition.  So I wrote
up the letters for the Premier and the Minister of Transportation at lunch on
Tuesday and faxed them from my local UPS store.  Also emailed them for good measure.&lt;/p&gt;

&lt;p&gt;They're not my best writing but I was kind of in a rush.&lt;/p&gt;

&lt;p&gt;The bodies of the letters are attached below.&lt;/p&gt;

</description><pubDate>Wed, 20 Nov 2024 00:00:00 Z</pubDate><a10:updated>2024-11-20T00:00:00Z</a10:updated><a10:content type="html">&lt;p&gt;So in a fit of pettiness, the Government of Ontario is set to wrap up bike-lanes
in a 50-foot-ball of red tape to prevent their construction.  I asked on Bluesky
what was the best way to complain - if there was a petition I should sign or
something.  Craig Burley recommended I send a &lt;em&gt;fax&lt;/em&gt; of all things.  It's got a
good chance of being physical media in their space, and won't just be in a
slushpile of emails they ignore, or forgettable names on a petition.  So I wrote
up the letters for the Premier and the Minister of Transportation at lunch on
Tuesday and faxed them from my local UPS store.  Also emailed them for good measure.&lt;/p&gt;

&lt;p&gt;They're not my best writing but I was kind of in a rush.&lt;/p&gt;

&lt;p&gt;The bodies of the letters are attached below.&lt;/p&gt;

&lt;!--excerpt--&gt;

&lt;h2&gt;First, to Premier Ford&lt;/h2&gt;

&lt;blockquote&gt;
  &lt;p&gt;The Honourable Premier of Ontario Doug Ford&lt;br /&gt;
  Legislative Building&lt;br /&gt;
  Queen's Park&lt;br /&gt;
  Toronto ON M7A 1A1  &lt;/p&gt;
  
  &lt;p&gt;Dear Premier,&lt;/p&gt;
  
  &lt;p&gt;I am a father of three who lives in Hamilton. I am a regular cycling commuter
  (yes, even in winter), from a family of cyclists, and have taught and equipped
  my children to use their bikes for travel as well. When my kids were younger, a
  bike-trailer is how I got them to school and to their daycare. I hope this
  conveys that this is not about recreation - this is me living my life.  My
  interest is about protecting my children and being able to care for them.&lt;/p&gt;
  
  &lt;p&gt;The bike-lanes that enable this were carved out of existing roadways, and so
  they would be covered under Bill 212. The new Keddy Access Trail lane (named for
  a kindergarten teacher and cyclist killed in a hit-and-run) allows me to get up
  the escarpment to my doctor’s office instead of having to take a taxi. Each of
  these lanes were a battle in Hamilton’s city council to obtain - adding new red
  tape to this process will likely push such improvements out of reach, which
  harms the safety and freedom of myself and my children.&lt;/p&gt;
  
  &lt;p&gt;And speaking of red tape, I’m not one who opposes this change on democratic
  grounds - I truly believe the province should overrule the municipal governments
  on some matters, as is your right.  But when I worry about my kids, it’s not
  whether they’ll be able to travel fast-enough in their cars, but whether they’ll
  be able to have homes of their own. Their own views reflect this - they are
  worried about ever being able to move out in our broken housing market, but
  getting my oldest to show any interest in obtaining his driver’s license has
  been like pulling teeth.&lt;/p&gt;
  
  &lt;p&gt;The Housing Affordability Task Force emphatically told the province what to do
  to fix the housing crisis, explaining which municipal rules and processes need
  to be overridden top-down to get homes built… and yet instead of that critical
  cost-of-living crisis, you’re focusing on bike lanes of all things?  The tiny
  handful of HATF recommendations that were embraced have been scaled back to
  almost nothing, and the remaining lion’s share are completely unapplied.  Where
  are the as-of-right intensification rules?  Where is shutting down the ability
  of busybodies to block the construction of critically needed homes?  Are there
  not enough people living in tents already?&lt;/p&gt;
  
  &lt;p&gt;To be blunt: Why do we see this power and enthusiasm spent on removing a
  nuisance from your commute, instead of fixing life-ruining problems?&lt;/p&gt;
  
  &lt;p&gt;Thanks for your time,&lt;/p&gt;
  
  &lt;p&gt;Martin Zarate&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;Second, to Transportation Minister Sarkaria&lt;/h2&gt;

&lt;blockquote&gt;
  &lt;p&gt;The Honourable Minister of Transportation Prabmeet Singh Sarkaria&lt;/p&gt;
  
  &lt;p&gt;Ministry of Transportation&lt;/p&gt;
  
  &lt;p&gt;5th Floor&lt;/p&gt;
  
  &lt;p&gt;777 Bay St.&lt;/p&gt;
  
  &lt;p&gt;Toronto, ON M7A 1Z8&lt;/p&gt;
  
  &lt;p&gt;Dear Minister,&lt;/p&gt;
  
  &lt;p&gt;I am a father of three who lives in Hamilton. I am a regular cycling commuter
  (yes, even in winter), from a family of cyclists, and have taught and equipped
  my children to use their bikes for travel as well. When my kids were younger, a
  bike-trailer is how I got them to school and to their daycare. My kids used
  these bike lanes to get to summer day-camp programs.I hope this conveys that
  this is not about recreation - this is my family living our lives. My interest
  is about protecting my children and being able to care for them.&lt;/p&gt;
  
  &lt;p&gt;The bike-lanes that enable this life were carved out of existing roadways, and
  so they would be covered under Bill 212. The new Keddy Access Trail lane (named
  for a kindergarten teacher and cyclist killed in a hit-and-run) allows me to
  get up the escarpment to my doctor’s office instead of having to take a taxi.
  Each of these lanes were a battle in Hamilton’s city council to obtain - adding
  new red tape to this process will likely push such improvements out of reach,
  which harms the safety and freedom of myself and my children.&lt;/p&gt;
  
  &lt;p&gt;And speaking of red tape, I’m not one who opposes this change on democratic
  grounds - I truly believe the province should overrule the municipal
  governments on some matters, as is your right. But when I worry about my kids,
  it’s not whether they’ll be able to travel fast-enough in their cars, but
  whether they’ll be able to have homes of their own. Their own views reflect
  this - they are worried about ever being able to move out in our broken housing
  market, but getting my oldest to show any interest in obtaining his driver’s
  licence has been like pulling teeth.&lt;/p&gt;
  
  &lt;p&gt;Surely the Ministry could be focusing on other things? All over Ontario we’ve
  watched critical public transit projects get bogged down in over a dozen years
  of delays. Why does an LRT line take a decade when destroying active transit
  apparently takes a few days? Where is this excitement and motivation on those
  matters? To me, this sounds like a problem of priorities in the Ministry of
  Transportation.&lt;/p&gt;
  
  &lt;p&gt;The Ministry of Transportation could be making Ontario healthier, greener,
  safer, and easier to get around. Instead, bill 212 proposes to do the exact
  opposite.  I hope you’ll reconsider this plan, it is literally a matter of
  life-and-death for my family.&lt;/p&gt;
  
  &lt;p&gt;Thanks for your time,&lt;/p&gt;
  
  &lt;p&gt;Martin Zarate&lt;/p&gt;
&lt;/blockquote&gt;
</a10:content></item><item><guid isPermaLink="true">http://pxtl.ca/2024/04/28/barton-bike-lanes/</guid><link>http://pxtl.ca/2024/04/28/barton-bike-lanes/</link><author>pxtl@hotmail.com</author><category>HamOnt</category><title>Barton Bike Lanes Letter</title><description>&lt;p&gt;So the other day I sent in an e-mail to the cycling office at the City of
Hamilton (as well as the relevant councilors) to request a cycling accommodation
in my area.  I figured I may as well include the text of the letter here as
well.&lt;/p&gt;

&lt;p&gt;&lt;img src="http://pxtl.ca/images/2024-04-28-Barton-bike-lanes/barton-at-the-general.png" alt="Barton between Wellington and Victoria" /&gt;&lt;/p&gt;

</description><pubDate>Sun, 28 Apr 2024 00:00:00 Z</pubDate><a10:updated>2024-04-28T00:00:00Z</a10:updated><a10:content type="html">&lt;p&gt;So the other day I sent in an e-mail to the cycling office at the City of
Hamilton (as well as the relevant councilors) to request a cycling accommodation
in my area.  I figured I may as well include the text of the letter here as
well.&lt;/p&gt;

&lt;p&gt;&lt;img src="http://pxtl.ca/images/2024-04-28-Barton-bike-lanes/barton-at-the-general.png" alt="Barton between Wellington and Victoria" /&gt;&lt;/p&gt;

&lt;!--excerpt--&gt;

&lt;p&gt;Hi. I'm a mostly-daily bike commuter to the Hamilton General Hospital from
Westdale. While the Cannon track and Ferguson lanes (please re-paint these
they're often invisible) get me to the General's bike lockup on Copeland pretty
well, getting around the area can be a challenge. The Victoria lanes are a nice
addition, but I can see a quick-win, paint-only opportunity for an enhancement
on Barton itself.&lt;/p&gt;

&lt;p&gt;West of the General, most of Barton is 5 lanes with no street-side parking,
allowing confident cyclists to take the rightmost lanes without obstructing
traffic (they can move to the left to get around).&lt;/p&gt;

&lt;p&gt;The only place that &lt;em&gt;really&lt;/em&gt; falls apart, and is a huge opportunity is Barton
between Wellington and Victoria.&lt;/p&gt;

&lt;h1&gt;Barton between Wellington and Victoria&lt;/h1&gt;

&lt;p&gt;&lt;a href="http://pxtl.ca/images/2024-04-28-Barton-bike-lanes/barton-at-the-general.png"&gt;&lt;img src="http://pxtl.ca/images/2024-04-28-Barton-bike-lanes/barton-at-the-general.png" alt="Barton between Wellington and Victoria" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.google.com/maps/@43.2611841,-79.8547088,237a,35y,18.19h,1.9t/data=!3m1!1e3?entry=ttu"&gt;google maps view&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;There, Barton is 5 lanes wide with parked cars on both sides, and most of the
middle is a blocked-out unused space, since it's a left-turn lane with no
driveways to turn into. In this area, the cyclist must merge into the sole
travel-lane and slow down traffic. I'm sure you can appreciate this is less than
ideal.&lt;/p&gt;

&lt;p&gt;The fix should be obvious, I think:&lt;/p&gt;

&lt;h1&gt;Proposal to add bike lanes without losing any travel lanes and minimal impact on&lt;/h1&gt;

&lt;p&gt;parking on Barton between Wellington and Victoria&lt;/p&gt;

&lt;p&gt;by collapsing the unused centre turning-lane, bike lanes can be added without
impacting automotive traffic flow at all.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://pxtl.ca/images/2024-04-28-Barton-bike-lanes/barton-at-the-general-bikelanes.jpg"&gt;&lt;img src="http://pxtl.ca/images/2024-04-28-Barton-bike-lanes/barton-at-the-general-bikelanes.jpg" alt="Barton between Wellington and Victoria with Bike Lanes" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;The Downside&lt;/h2&gt;

&lt;p&gt;Unfortunately two parking spots would need to be lost (marked in red X's in the
above image) , and I think the one in front of the Pharmacy &amp;amp; the Orthotics
centre near Victoria looks important. I think that's the one egg that would have
to get broken for this omelette, or else an impractically-short
left-turning-lane at Victoria could be implemented.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.google.com/maps/@43.261108,-79.8538117,3a,75y,173.12h,71.11t/data=!3m6!1e1!3m4!1sFmFDOm3ipQTiJLkpQzPfjQ!2e0!7i16384!8i8192?entry=ttu"&gt;Street-view of that parking spot&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;The main reason I want this: The SoBi rack&lt;/h2&gt;

&lt;p&gt;The HGH SoBi rack at Barton and Victoria is very handy. On days when the weather
is bad in only the morning or evening commute, I can use that SoBi rack for the
part of the commute that has good weather.  Not only for commuting, I can take
it to local shops and lunch-spots to the west along Barton. I'm a regular at
Bonanza Bakery (on Murray near Mary), for example.&lt;/p&gt;

&lt;p&gt;There are alternatives I could be using, of course. I could take the SoBi up
Victoria to Copeland, then cut through the Ron Joyce Children's Centre parking
lot (thanks for the road markings on Wellington and Copeland, by the way, it's
nice to have that clarity).  But that's quite a detour, and the left-turn from
Victoria's wrong-side-cycle-track onto Copeland &lt;em&gt;stinks&lt;/em&gt; because it has no way
to trigger the push-button crossing light and left-hooking across traffic is
weird and tricky.&lt;/p&gt;

&lt;h1&gt;Alternate Approach that does not eliminate parking at the Pharmacy + Ortho&lt;/h1&gt;

&lt;p&gt;By moving the centre-line further North at Victoria, the parking can be
preserved!&lt;/p&gt;

&lt;p&gt;&lt;a href="http://pxtl.ca/images/2024-04-28-Barton-bike-lanes/barton-at-the-general-bikelanes-2.jpg"&gt;&lt;img src="http://pxtl.ca/images/2024-04-28-Barton-bike-lanes/barton-at-the-general-bikelanes-2.jpg" alt="Barton between Wellington and Victoria with Bike Lanes (alternate layout)" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So here we can have our cake and eat it too.&lt;/p&gt;

&lt;h2&gt;However, there are some downsides to this Alternative Approach&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;The westbound bus stop now blocks westbound traffic (and there's enough
left-turning traffic on Barton that squeezing past the bus into oncoming
traffic isn't really an option).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The travel lanes no longer fully align on the far side of the intersection.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;Extending Further&lt;/h1&gt;

&lt;p&gt;This design (in either form) could be continued east for one more block
eastward, from Victoria to East Avenue, in which the layout is basically the
same as here.  After East Avenue, the streetscaping makes this impossible.
Also, as I said before - sharrows from Wellington to Ferguson would be nice.  I
mean sharrows are useless for safety but still are nice for showing that
cyclists are supposed to be here and allowed.&lt;/p&gt;

&lt;h1&gt;Conclusion&lt;/h1&gt;

&lt;p&gt;I hope you'll agree, these seem like pretty quick wins - at the cost of 1 or 2
parking spots and some paint, a nice little cycling connection to the hospital's
front entrance and SoBi rack and adjacent bike-track could be added to Barton.
No loss of automotive travel lanes at all.&lt;/p&gt;

&lt;p&gt;Thanks for your time.&lt;/p&gt;

&lt;p&gt;Martin Zarate, Ward 1 resident, HHS employee&lt;/p&gt;
</a10:content></item><item><guid isPermaLink="true">http://pxtl.ca/2023/12/13/bluesky-api/</guid><link>http://pxtl.ca/2023/12/13/bluesky-api/</link><author>pxtl@hotmail.com</author><category>Software</category><title>Using the BlueSky API to change your Handle to your Domain Name</title><description>&lt;p&gt;Personally in the post-Muskening twitter world, I'm pulling for
&lt;a href="https://mastodon.social/@pxtl"&gt;Mastodon&lt;/a&gt;, but
&lt;a href="https://bsky.app/profile/pxtl.ca"&gt;Bluesky&lt;/a&gt; is a somewhat interesting platform
too.  One feature of Bluesky that stands out is that you can set your name to be
based on a domain-name you own.  I own Pxtl.ca, so I thought I'd take a crack at
leveraging that feature.&lt;/p&gt;

&lt;p&gt;What follows is a guide on how to do this in Powershell, which is a programming
language you &lt;em&gt;already have installed&lt;/em&gt; if you use Windows.&lt;/p&gt;

</description><pubDate>Wed, 13 Dec 2023 00:00:00 Z</pubDate><a10:updated>2023-12-13T00:00:00Z</a10:updated><a10:content type="html">&lt;p&gt;Personally in the post-Muskening twitter world, I'm pulling for
&lt;a href="https://mastodon.social/@pxtl"&gt;Mastodon&lt;/a&gt;, but
&lt;a href="https://bsky.app/profile/pxtl.ca"&gt;Bluesky&lt;/a&gt; is a somewhat interesting platform
too.  One feature of Bluesky that stands out is that you can set your name to be
based on a domain-name you own.  I own Pxtl.ca, so I thought I'd take a crack at
leveraging that feature.&lt;/p&gt;

&lt;p&gt;What follows is a guide on how to do this in Powershell, which is a programming
language you &lt;em&gt;already have installed&lt;/em&gt; if you use Windows.&lt;/p&gt;

&lt;!--excerpt--&gt;

&lt;h1&gt;Preamble&lt;/h1&gt;

&lt;h2&gt;What you need&lt;/h2&gt;

&lt;p&gt;I'm going to be doing this in Powershell 5.1, which is what's built into
Windows.  If you're not on Windows or you're a pro-star, you can install
Powershell 7 on any operating system.&lt;/p&gt;

&lt;p&gt;Second, you need your own domain.  Those cost money annually, but that's how you
can have your own snazzy site like "Pxtl.ca".  Personally I use Google Domains,
but sadly this is a sunsetting product so going forwards I'm going to need a new
service to run my domain-name subscription.&lt;/p&gt;

&lt;h2&gt;Intro to Powershell&lt;/h2&gt;

&lt;p&gt;First up, we open up our Powershell console.  You can type &lt;code&gt;⊞ Win&lt;/code&gt; + &lt;code&gt;R&lt;/code&gt; to
launch the &lt;strong&gt;run&lt;/strong&gt; menu to access it, and then type "powershell" to use it.  If
this is your first time running powershell you may need to do some fiddling to
enable it properly.  This will give you a console to run powershell commands.&lt;/p&gt;

&lt;p&gt;Now, if you're following along and copying and pasting Powershell code from this
article into your Powershell window, a warning: Copying and pasting code from a
stranger into your console and running it is very dangerous because a computer
does what it's told and this stranger may have told your computer to do
something very bad.  In this situation, I am basically a stranger with candy.&lt;/p&gt;

&lt;p&gt;So, don't ever copy/paste code from an article without fully understanding what
it does.  So, I'll be explaining everything I do.&lt;/p&gt;

&lt;h1&gt;Logging In to the API&lt;/h1&gt;

&lt;p&gt;We're going to be sending HTTP commands (like your web browser does, but through
the Powershell console) using a powershell command called &lt;code&gt;Invoke-RestMethod&lt;/code&gt;.
"Rest" is just a programmer-jargon for "HTTP that uses data structures instead
of websites".&lt;/p&gt;

&lt;p&gt;So first, we have to create a session in our console that we can use to do
stuff.  Bluesky/Atproto (their programmer-interface protocol) makes you first
"login" before you can do stuff.&lt;/p&gt;

&lt;p&gt;So we run the following:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$sessionResponse = Invoke-RestMethod -Method POST -Uri https://bsky.social/xrpc/com.atproto.server.createSession `
    -body (@{identifier = 'email@example.com'; password ='PASSWORDGOESHERE'} | ConvertTo-Json) `
    -ContentType 'application/json'
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Where "email@example.com" should be replaced with your own email address
associated with your Bluesky account (we don't use your username, just the
email) and PASSWORDGOESHERE is, obviously, your Bluesky password.  If your
password contains a ' char, you'll have to escape it.&lt;/p&gt;

&lt;p&gt;So, what this does: We're using Invoke-RestMethod to send a POST action (like
submitting a form on a website) to the url
&lt;a href="https://bsky.social/xrpc/com.atproto.server.createSession"&gt;https://bsky.social/xrpc/com.atproto.server.createSession&lt;/a&gt;.
We know that the target is trustworthy with your Bluesky password because it's
in the &lt;code&gt;bsky.social&lt;/code&gt; domain -- that is, we're sending your password to Bluesky,
not to some stranger.&lt;/p&gt;

&lt;p&gt;The little backtick at the end of the line is just the simplest way to do
multi-line commands in Powershell.  The backtick-line-continuation is considered
bad form by Powershell people but Powershell is a bad language so imho turnabout
is fair play.&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;-body&lt;/code&gt; parameter is the body of data we're sending to Bluesky.
&lt;code&gt;@{identifier = 'email@example.com'; password ='PASSWORDGOESHERE'}&lt;/code&gt; is a
Powershell object we're building with the login and password, and then we're
piping it into &lt;code&gt;| ConvertTo-Json&lt;/code&gt; to turn it into the JSON text format so it can
be sent over the wire to Bluesky.&lt;/p&gt;

&lt;p&gt;Finally we let Bluesky know we're sending it as JSON with the parameter
&lt;code&gt;-ContentType 'application/json'&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;And we store the result of this command into &lt;code&gt;$sessionResponse&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;Inspecting the Result&lt;/h2&gt;

&lt;p&gt;You can inspect &lt;code&gt;$sessionResponse&lt;/code&gt; by just running &lt;code&gt;$sessionResponse&lt;/code&gt; in your
Powershell console.  You'll see an object with several members like &lt;code&gt;did&lt;/code&gt; and
&lt;code&gt;handle&lt;/code&gt; and &lt;code&gt;email&lt;/code&gt; and &lt;code&gt;accessJwt&lt;/code&gt;.  The important bits of data we need going
forwards are &lt;code&gt;did&lt;/code&gt;, which is your true user-account-ID in Bluesky, and
&lt;code&gt;accessJwt&lt;/code&gt;, which is the temporary super-long secret code we use going forwards
to do other commands.&lt;/p&gt;

&lt;p&gt;Now, the &lt;code&gt;accessJwt&lt;/code&gt; code is short-lived (a few minutes) before the Bluesky
server decides it doesn't like it anymore, so going forwards you might have to
re-run the &lt;code&gt;createSession&lt;/code&gt; command above to get a new one if commands start
failing and complaining about security.&lt;/p&gt;

&lt;h1&gt;Creating the Domain Record&lt;/h1&gt;

&lt;p&gt;Okay, so we've proven to Bluesky that we are who we say we are, but how do we
prove to Bluesky that we own the domain?  I mean, I could say I'm google.com or
whatever if they don't check.  But they check.&lt;/p&gt;

&lt;p&gt;So, let's say you own &lt;code&gt;mydomain.com&lt;/code&gt;.  You'll have to go into your domain
registrar's website and create a new TXT record on &lt;code&gt;mydomain.com&lt;/code&gt; that proves to
Bluesky you own it.  So get the &lt;code&gt;did&lt;/code&gt; value from &lt;code&gt;$sessionResponse&lt;/code&gt; by typing
&lt;code&gt;$sessionResponse.did&lt;/code&gt;.  For example, my &lt;code&gt;did&lt;/code&gt; value is
&lt;code&gt;did:plc:otu6mg5xkk47y3ghqpq2w3oo&lt;/code&gt; (this isn't a secret it's fine that you know
that).&lt;/p&gt;

&lt;p&gt;Create a new TXT record on &lt;code&gt;mydomain.com&lt;/code&gt; called &lt;code&gt;_atproto&lt;/code&gt;, and give it a value
of &lt;code&gt;did=YOURDIDGOESHERE&lt;/code&gt;.  So for me, I created &lt;code&gt;_atproto&lt;/code&gt; as a TXT record with
the value &lt;code&gt;did=did:plc:otu6mg5xkk47y3ghqpq2w3oo&lt;/code&gt;.  Yes it's weirdly
double-barreled with the did=did part.  This is fine.&lt;/p&gt;

&lt;p&gt;If you want your name to be some subdomain of your domain, you can even make
&lt;code&gt;_atproto.somesubdomain&lt;/code&gt;.  I tried this out by making &lt;code&gt;_atproto.martin&lt;/code&gt; so I
could be "@martin.pxtl.ca".  This is great if you're running an organization and
you've got many users on that domain - you can create one TXT record per-user,
each with their own subdomain, so like if my son got his own Bluesky account (it
would have a different &lt;code&gt;did&lt;/code&gt;) I could give him &lt;code&gt;_atproto.gooseguy&lt;/code&gt; so he'd be
"@gooseguy.pxtl.ca".&lt;/p&gt;

&lt;h2&gt;Testing the Domain Record&lt;/h2&gt;

&lt;p&gt;Once the domain record has been created, you can test that it exists with the
Powershell command &lt;code&gt;Resolve-DnsName&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;So, to test it, mash together the TXT record's host name and your domain name,
and call it as follows:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;Resolve-DnsName _atproto.mydomain.ca
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;So for example for my "@martin.pxtl.ca" name, it would be, &lt;/p&gt;

&lt;pre&gt;&lt;code&gt;Resolve-DnsName _atproto.martin.pxtl.ca
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;If you get a result talking about the domain and servers and authorities?  It
worked.  If you get ugly red error messages, it didn't.  That might mean you
screwed up, or it just hasn't propagated yet (DNS/domain updates can be slow,
give it a few more minutes).&lt;/p&gt;

&lt;h1&gt;Updating your Username&lt;/h1&gt;

&lt;p&gt;Finally, now that we can log into Bluesky and we've created proof for Bluesky
that we own the domain, we can tell Bluesky to change our name to match our
domain.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;Invoke-RestMethod `
    -Method POST `
    -Uri https://bsky.social/xrpc/com.atproto.identity.updateHandle `
    -Headers @{Authorization = "Bearer $($sessionResponse.accessJwt)"} `
    -Body (@{handle ='mydomain.ca'} | ConvertTo-Json) `
    -ContentType 'application/json'
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;So again, we're doing an HTTP POST to &lt;code&gt;bsky.social&lt;/code&gt;, but this time we're calling
&lt;code&gt;updateHandle&lt;/code&gt; instead of &lt;code&gt;createSession&lt;/code&gt;.  Since we've already &lt;em&gt;got&lt;/em&gt; the
session, we need to reference a token (that short-lived secret I mentioned
before) to let them know "yes, I'm still the person you were talking to
earlier".  So we use the parameter &lt;code&gt;-Headers @{Authorization = "Bearer
$($sessionResponse.accessJwt)"}&lt;/code&gt; which adds the &lt;code&gt;accessJwt&lt;/code&gt; token to this
request as an &lt;code&gt;Authorization&lt;/code&gt; header entry.&lt;/p&gt;

&lt;p&gt;Again, we're doing a JSON body, but this time the body is just a single entry in
the object &lt;code&gt;handle&lt;/code&gt;.  That should match the @ handle you're trying to get, the
same one you created a TXT entry for - like, since I did both
&lt;code&gt;_atproto.martin.pxtl.ca&lt;/code&gt; and &lt;code&gt;_atproto.pxtl.ca&lt;/code&gt;, I can do either
&lt;code&gt;handle='pxtl.ca'&lt;/code&gt; or &lt;code&gt;handle=martin.pxtl.ca&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;This action won't send any result if it works.  It will only give you feedback
if it fails.&lt;/p&gt;

&lt;p&gt;So, check your Bluesky account.  There will be errors for a minute or so, but
your user handle should be updated to match your domain.&lt;/p&gt;

&lt;h1&gt;TL;DR&lt;/h1&gt;

&lt;p&gt;In short, in Powershell:&lt;/p&gt;

&lt;p&gt;Run&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$sessionResponse = Invoke-RestMethod -Method POST -Uri https://bsky.social/xrpc/com.atproto.server.createSession `
    -body (@{identifier = 'email@example.com'; password ='PASSWORDGOESHERE'} | ConvertTo-Json) `
    -ContentType 'application/json'
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;with your bluesky email and password.&lt;/p&gt;

&lt;p&gt;Get &lt;code&gt;$sessionResponse.did&lt;/code&gt; and use that when you create a new TXT record on
&lt;code&gt;yourdomain.com&lt;/code&gt; called &lt;code&gt;_atproto&lt;/code&gt;, and give it a value of
&lt;code&gt;did=YOURDIDGOESHERE&lt;/code&gt;.  If you want to use a subdomain of &lt;code&gt;yourdomain.com&lt;/code&gt;
because you feel like it or you've got friends who want to use the same domain,
you can make &lt;code&gt;_atproto.mysubmodmain&lt;/code&gt; to get that.&lt;/p&gt;

&lt;p&gt;Now, let Bluesky know about it by calling&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;Invoke-RestMethod `
    -Method POST `
    -Uri https://bsky.social/xrpc/com.atproto.identity.updateHandle `
    -Headers @{Authorization = "Bearer $($sessionResponse.accessJwt)"} `
    -Body (@{handle ='yourdomain.com'} | ConvertTo-Json) `
    -ContentType 'application/json'
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;or whatever your domain (or subdomain or whatever) is.&lt;/p&gt;

&lt;p&gt;Questions?  Scroll up to the detailed part.  Don't @ me.&lt;/p&gt;
</a10:content></item><item><guid isPermaLink="true">http://pxtl.ca/2023/11/17/github-ci/</guid><link>http://pxtl.ca/2023/11/17/github-ci/</link><author>pxtl@hotmail.com</author><category>Programming</category><title>Github CI</title><description>&lt;p&gt;Well, it took longer than I would've liked but I got Github CI working with this
blog! Finally learned how to use Github workflows.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/Pxtl/Sandra.Snow/tree/master/.github/workflows"&gt;Workflow files are
here&lt;/a&gt;&lt;/p&gt;

</description><pubDate>Fri, 17 Nov 2023 00:00:00 Z</pubDate><a10:updated>2023-11-17T00:00:00Z</a10:updated><a10:content type="html">&lt;p&gt;Well, it took longer than I would've liked but I got Github CI working with this
blog! Finally learned how to use Github workflows.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/Pxtl/Sandra.Snow/tree/master/.github/workflows"&gt;Workflow files are
here&lt;/a&gt;&lt;/p&gt;

&lt;!--excerpt--&gt;

&lt;p&gt;You can now see my posts automatically go from my source-control here in
Sandra.snow into the Pxtl.Github.io repo.  Particularly interesting is that
because the Sandra.Snow project I'm using for the blog is .NET Framework 4, the
runner is actually running &lt;em&gt;windows&lt;/em&gt;.  I didn't know that was possible for
GitHub.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/Pxtl/Sandra.Snow/actions/runs/6909229230/job/18800147451#logs"&gt;For example, here's a log of a publish
action&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The only thing that annoys me is that I had to set it up using PATs, which have
a 90 day expiry.  So every 90 days I'll have to refresh the token that allows
the Sandra.Snow repo to write to the Pxtl repo?  That seems labourious.&lt;/p&gt;

&lt;p&gt;Probably I should reverse it around - have the Action running in my Pxtl repo so
it's &lt;em&gt;pulling&lt;/em&gt; from the Sandra.Snow repo.  But for now, this works.&lt;/p&gt;

&lt;p&gt;This post is my first attempt to run it for a new post.  Fingers crossed!&lt;/p&gt;

&lt;p&gt;Edit: it works!&lt;/p&gt;

&lt;p&gt;Edit2: and now it doesn't flood the log with complaints about line-endings.&lt;/p&gt;
</a10:content></item><item><guid isPermaLink="true">http://pxtl.ca/2023/10/24/dryer-repair/</guid><link>http://pxtl.ca/2023/10/24/dryer-repair/</link><author>pxtl@hotmail.com</author><category>Blog</category><title>Kenmore Dryer Repair</title><description>&lt;p&gt;Once again, everything is made of garbage.&lt;/p&gt;

&lt;p&gt;&lt;img src="http://pxtl.ca/images/2023-10-24-dryer-repair/failed-coil.jpg" alt="failed heating coil in dryer" /&gt;&lt;/p&gt;

</description><pubDate>Tue, 24 Oct 2023 00:00:00 Z</pubDate><a10:updated>2023-10-24T00:00:00Z</a10:updated><a10:content type="html">&lt;p&gt;Once again, everything is made of garbage.&lt;/p&gt;

&lt;p&gt;&lt;img src="http://pxtl.ca/images/2023-10-24-dryer-repair/failed-coil.jpg" alt="failed heating coil in dryer" /&gt;&lt;/p&gt;

&lt;!--excerpt--&gt;

&lt;h2&gt;Day 1&lt;/h2&gt;

&lt;p&gt;Our dryer failed.  I feel like I have a moral responsibility to attempt to
repair anything before making it waste. So I’m trying my hand at the dryer.&lt;/p&gt;

&lt;p&gt;Disassembly was harder than it needed to be.  I kept thinking it would be like a
'90s computer where you do the screws and then it opens, but it turns out the
dryer is the opposite - while everything internal is mounted with screws, the
case is opened with pry-bars and brute force.  So I undid all the screws at the
back, realized I'd unmounted some kind of plate, and then carefully lined it
back up reaching through and screwed it back together.  &lt;/p&gt;

&lt;p&gt;I watched a bunch of videos about how to pull the thing apart and check it -
found a working voltmeter and tested all 3 thermal switches that I found.  The
only real problem was testing the coil - the plate where the coil was mounted
had a nice open hole where the coil's port should have been, but instead the
coil's port was far out of reach.  I assume it's a safety thing - there's 3000+
watts coursing through that port, I assume they didn't want it easily touched
when you can pry the lid off with a blade screwdriver.&lt;/p&gt;

&lt;p&gt;So then I gave in and pulled it apart properly.  It's especially difficult since
the last HVAC guys who did our house moved the furnace closer to the dryer and
so it's miserably cramped, it was very hard to get the drum out.&lt;/p&gt;

&lt;p&gt;Sadly I didn't realize that the whole tub joint pops upwards so I detached the
tub from the join and then found the join comes off pretty easy anyways.&lt;/p&gt;

&lt;p&gt;&lt;img src="http://pxtl.ca/images/2023-10-24-dryer-repair/failed-coil-context.jpg" alt="failed coil in context of disassembled dryer" /&gt;&lt;/p&gt;

&lt;p&gt;Ironically, the "some kind of plate" that I'd painstakingly removed and
re-added?  That was the thing the coil was mounted on, so I had to remove it again.&lt;/p&gt;

&lt;p&gt;Anyhow, the broken coil was plainly visible, so I ordered in new parts.  I also
&lt;a href="https://lemmy.ca/post/7887807"&gt;asked on Lemmy&lt;/a&gt; if there were any thoughts about
what to do while I was in there and got the advice to replace the belt and
re-lube the ball-axle while the drum was out.&lt;/p&gt;

&lt;h2&gt;Day 2&lt;/h2&gt;

&lt;p&gt;Well, the dryer has been disassembled and vacuumed, the dead coil removed, the
new coil swapped in, ready to reassemble as soon as the new belt arrives. I was
surprised how much of the brown schmutz in the heater was just ash from the coils
- it dusted off quite shiny after I replaced the coil.&lt;/p&gt;

&lt;p&gt;&lt;img src="http://pxtl.ca/images/2023-10-24-dryer-repair/clean-coil.jpg" alt="clean and repaired coil plate" /&gt;&lt;/p&gt;

&lt;p&gt;I’m a little worried about the visibly duller part of the heater assembly,
hopefully that won’t absorb too much heat - I tried to cluster the coils a bit
looser there to compensate.&lt;/p&gt;

&lt;p&gt;It’s even visible on the reverse side.&lt;/p&gt;

&lt;p&gt;&lt;img src="http://pxtl.ca/images/2023-10-24-dryer-repair/burn-through.jpg" alt="burn-through mark" /&gt;&lt;/p&gt;

&lt;p&gt;Either way, I’m reassembling tomorrow when the new belt arrives.&lt;/p&gt;

&lt;h2&gt;Day 3&lt;/h2&gt;

&lt;p&gt;Well, the belt arrived and I went to Rona and picked up some (too expensive)
axle grease and aluminum tape.  The tape was to repair the exhaust hose and to
replace the disintegrated rubber strap that was sealing the internal exhaust
tube on.&lt;/p&gt;

&lt;p&gt;&lt;img src="http://pxtl.ca/images/2023-10-24-dryer-repair/taped-internal-exhaust.jpg" alt="taped internal exhaust detail" /&gt;&lt;/p&gt;

&lt;p&gt;Of course, also the wiring diagram tore when I pulled it out, so I photocopied
that and figured I should keep it and... well, when all you have is a hammer,
everything looks like a nail.&lt;/p&gt;

&lt;p&gt;&lt;img src="http://pxtl.ca/images/2023-10-24-dryer-repair/taped-wiring-copy.jpg" alt="taped wiring diagram copy" /&gt;&lt;/p&gt;

&lt;p&gt;And then we got into reassembling it.  Brought in a helper and we re-lubed the
axle, put everything back in place, and screwed it all back together.&lt;/p&gt;

&lt;p&gt;&lt;img src="http://pxtl.ca/images/2023-10-24-dryer-repair/reassembly-helper.jpg" alt="reassembly with helper" /&gt;&lt;/p&gt;

&lt;p&gt;Only one screw went missing!&lt;/p&gt;

&lt;p&gt;&lt;img src="http://pxtl.ca/images/2023-10-24-dryer-repair/reassembled.jpg" alt="reassembled dryer" /&gt;&lt;/p&gt;

&lt;p&gt;Had my kid sit with it for a full cycle armed with the fire extinguisher (just
in case) while I went and picked up my other kid (late) from climbing gym.  It
all worked!&lt;/p&gt;
</a10:content></item><item><guid isPermaLink="true">http://pxtl.ca/2023/10/03/a-tale-of-two-pharmacies/</guid><link>http://pxtl.ca/2023/10/03/a-tale-of-two-pharmacies/</link><author>pxtl@hotmail.com</author><category>Blog</category><title>A Tale of Two Pharmacies</title><description>&lt;p&gt;What follows is the story of why I no longer go to my old pharmacy.  This is
recounted from memory, and some of the details may be inaccurate, but the gist
is there.&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;&lt;em&gt;drops in at local pharmacy&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;"I'm running out of my meds, can you refill them?"&lt;/p&gt;

&lt;p&gt;"Sorry, you have to come closer to refill-day, so come back Saturday."&lt;/p&gt;

&lt;p&gt;"Okay, I'll come back then."&lt;/p&gt;

&lt;p&gt;...&lt;/p&gt;

&lt;p&gt;"Okay,  it's Saturday, here to refill my meds."&lt;/p&gt;

&lt;p&gt;"... yeah, you're out of refills.  We'll have to talk to your doctor."&lt;/p&gt;

&lt;p&gt;"... but it's the weekend?"&lt;/p&gt;

&lt;p&gt;"Oh, we'll sort it out on Monday."&lt;/p&gt;

&lt;p&gt;...&lt;/p&gt;

</description><pubDate>Tue, 03 Oct 2023 00:00:00 Z</pubDate><a10:updated>2023-10-03T00:00:00Z</a10:updated><a10:content type="html">&lt;p&gt;What follows is the story of why I no longer go to my old pharmacy.  This is
recounted from memory, and some of the details may be inaccurate, but the gist
is there.&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;&lt;em&gt;drops in at local pharmacy&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;"I'm running out of my meds, can you refill them?"&lt;/p&gt;

&lt;p&gt;"Sorry, you have to come closer to refill-day, so come back Saturday."&lt;/p&gt;

&lt;p&gt;"Okay, I'll come back then."&lt;/p&gt;

&lt;p&gt;...&lt;/p&gt;

&lt;p&gt;"Okay,  it's Saturday, here to refill my meds."&lt;/p&gt;

&lt;p&gt;"... yeah, you're out of refills.  We'll have to talk to your doctor."&lt;/p&gt;

&lt;p&gt;"... but it's the weekend?"&lt;/p&gt;

&lt;p&gt;"Oh, we'll sort it out on Monday."&lt;/p&gt;

&lt;p&gt;...&lt;/p&gt;

&lt;!--excerpt--&gt;

&lt;p&gt;"Okay, it's Monday, can you get in touch with my doc?"&lt;/p&gt;

&lt;p&gt;"Sure!  We'll fax that.  Come back tomorrow and we'll have it sorted out."&lt;/p&gt;

&lt;p&gt;"No, I'm on my last pill, it has to be refilled today."&lt;/p&gt;

&lt;p&gt;"You know you're supposed to give us 48 hours notice, right?"&lt;/p&gt;

&lt;p&gt;ಠ_ಠ&lt;/p&gt;

&lt;p&gt;"Yes, I know.  I tried."&lt;/p&gt;

&lt;p&gt;"Okay, we'll fax them now.  Come back this evening."&lt;/p&gt;

&lt;p&gt;"Okay."&lt;/p&gt;

&lt;p&gt;&lt;em&gt;calls towards the end of the work day&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;"Hi, are my meds in yet?"&lt;/p&gt;

&lt;p&gt;"What?  We don't have any meds for you on file."&lt;/p&gt;

&lt;p&gt;"No, my doctor faxed something?" &lt;/p&gt;

&lt;p&gt;"No they didn't."&lt;/p&gt;

&lt;p&gt;&lt;em&gt;calls doctor&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;"We definitely faxed them.  We'll fax them again."&lt;/p&gt;

&lt;p&gt;&lt;em&gt;phones pharmacy back&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;"Hi, are my meds in yet?"&lt;/p&gt;

&lt;p&gt;"What?  We don't have any meds for you on file."&lt;/p&gt;

&lt;p&gt;"Can you check if you got faxed anything about my meds?"&lt;/p&gt;

&lt;p&gt;"Oh, yes, we see that now, we got a fax.  Can you come in Wednesday to pick them
up?"&lt;/p&gt;

&lt;p&gt;"No, I'm on my last pill."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;sigh on phone&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;"You know you're supposed to give us 48 hours notice, right?"&lt;/p&gt;

&lt;p&gt;"I tried."&lt;/p&gt;

&lt;p&gt;"Okay, we'll get that ready for you, please hold."&lt;/p&gt;

&lt;p&gt;...&lt;/p&gt;

&lt;p&gt;"Sorry, we're all out of those.  They've been all out for a while.  It's on
back-order, everybody's out."&lt;/p&gt;

&lt;p&gt;&lt;em&gt;stifles why-am-I-just-hearing-about-this-now-screaming-rage&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;"Uh, what do I do?  I'm on my last pill."&lt;/p&gt;

&lt;p&gt;"Okay, we've got a one week supply to give you.  Can you come tomorrow?"&lt;/p&gt;

&lt;p&gt;"I can come now."&lt;/p&gt;

&lt;p&gt;"But we're closing in 15 minutes."&lt;/p&gt;

&lt;p&gt;"I'm out walking the dog. I'm literally at your door."&lt;/p&gt;

&lt;p&gt;".... Okay."&lt;/p&gt;

&lt;p&gt;&lt;em&gt;gets my one week supply&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;"Thanks.  What do I do for next week?  Will there be more then?"&lt;/p&gt;

&lt;p&gt;"Oh no, it's &lt;em&gt;really&lt;/em&gt; out-of-stock.  But the half-dose pills aren't.  We've got
those, so you can just double-them.  Call your doc and we'll get that sorted."&lt;/p&gt;

&lt;p&gt;"Great."&lt;/p&gt;

&lt;p&gt;...&lt;/p&gt;

&lt;p&gt;&lt;em&gt;frustrated and needing to get back to my life, I give it a few days.  Bad
mistake.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;...&lt;/p&gt;

&lt;p&gt;&lt;em&gt;calling dr office&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;"Hi, they're out of my meds everywhere, can I get prescribed the halfsies
instead?"&lt;/p&gt;

&lt;p&gt;"Uh, your doctor has been prescribing those to a lot of people and nobody's
complained yet."&lt;/p&gt;

&lt;p&gt;"Well the pharmacy disagrees."&lt;/p&gt;

&lt;p&gt;"The pharmacy is allowed to give you the halfsies sans scrip if they're out of
the regular dose."&lt;/p&gt;

&lt;p&gt;"I did not know that. Do they know that?"&lt;/p&gt;

&lt;p&gt;"Whatever. They obviously don't want to without a scrip.  Doc will be in
tomorrow, we'll sort it out."&lt;/p&gt;

&lt;p&gt;...&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Calls pharmacy next day afternoon.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;"So d'you have my meds?"&lt;/p&gt;

&lt;p&gt;"What?  We don't have any meds for you on file."&lt;/p&gt;

&lt;p&gt;"No, I mean my doctor said they'd fax today."&lt;/p&gt;

&lt;p&gt;"Yeah, they didn't. For what?"&lt;/p&gt;

&lt;p&gt;"The halfsies.  They also said you can do the substitution yourself when you're
out-of-stock on something."&lt;/p&gt;

&lt;p&gt;"Yeah, we can't do that, they're wrong."&lt;/p&gt;

&lt;p&gt;"Fine. Okay, I'll call my doctor again about sending the fax."&lt;/p&gt;

&lt;p&gt;&lt;em&gt;calls doctor&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;"Did you send them that fax?"&lt;/p&gt;

&lt;p&gt;"We sent them the fax again.  We'll send it again again."&lt;/p&gt;

&lt;p&gt;"Great, thanks."&lt;/p&gt;

&lt;p&gt;&lt;em&gt;at this point life intervenes, and I still have one pill for tomorrow morning -
so wait until next day to call&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;"Hi, do you have my halfsies?"&lt;/p&gt;

&lt;p&gt;"We can have them for you day after tomorrow."&lt;/p&gt;

&lt;p&gt;"Day after tomorrow!? ... Sorry for raising my voice but I'm on my last pill,
what happened?"&lt;/p&gt;

&lt;p&gt;"Well, they're not in stock."&lt;/p&gt;

&lt;p&gt;"What."&lt;/p&gt;

&lt;p&gt;"But you can get them from other pharmacies."&lt;/p&gt;

&lt;p&gt;"I was told they were in stock here."&lt;/p&gt;

&lt;p&gt;"They're not."&lt;/p&gt;

&lt;p&gt;"Fine.  I'll call around."&lt;/p&gt;

&lt;p&gt;&lt;em&gt;thinks angrily about the last time this happened and scrip was lost in limbo
between two pharmacies and had to get re-prescribed&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Calls Other Pharmacy. On hold for 15 minutes.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;"Hi, do you have these meds?"&lt;/p&gt;

&lt;p&gt;"What? No, nobody has them."&lt;/p&gt;

&lt;p&gt;"I mean the halfsies."&lt;/p&gt;

&lt;p&gt;"Oh!  Let me check."&lt;/p&gt;

&lt;p&gt;&lt;em&gt;on hold even longer&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;"Yep, we've got them. We'll call your pharmacy and get the scrip transferred."&lt;/p&gt;

&lt;p&gt;"Great!"&lt;/p&gt;

&lt;p&gt;&lt;em&gt;gives this an hour to work out, calls my pharmacy&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;"Hi!  Are my drugs transferred to Other Pharmacy?"&lt;/p&gt;

&lt;p&gt;"We're just putting the scrip on hold and doing the paperwork, we'll get it sent
to them in five, then call them."&lt;/p&gt;

&lt;p&gt;"Great! I'll give them 20."&lt;/p&gt;

&lt;p&gt;&lt;em&gt;15 minutes later, call Other Pharmacy anticipating being stuck on hold for a
long time.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;phone picks up quickly!  Yay!&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;"Hi!  Have they transferred my scrip?"&lt;/p&gt;

&lt;p&gt;"Let me check."&lt;/p&gt;

&lt;p&gt;...&lt;/p&gt;

&lt;p&gt;...&lt;/p&gt;

&lt;p&gt;"Nope, they haven't.  I'll give them a call right away.  Can you call back in
half an hour?"&lt;/p&gt;

&lt;p&gt;"Okay."&lt;/p&gt;

&lt;p&gt;(；￣д￣)&lt;/p&gt;

&lt;p&gt;&lt;em&gt;calls Other Pharmacy half hour later&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;On hold.  Every few minutes get redirected back to main menu.  Go back on hold&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;run out of minutes on phone (I'm cheap, okay?), buy more minutes.  Call again.
Go back on holdm&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Give up, drive out to Other Pharmacy, arrive and find pharmacist juggling phone
in one hand and serving a mob of customers&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;"Uh..."&lt;/p&gt;

&lt;p&gt;"Yeah, they still haven't faxed me yet, I'll call them now."&lt;/p&gt;

&lt;p&gt;"Okay."&lt;/p&gt;

&lt;p&gt;&lt;em&gt;more waiting&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;"Any luck?"&lt;/p&gt;

&lt;p&gt;"They said they'd fax again."&lt;/p&gt;

&lt;p&gt;&lt;em&gt;more waiting&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;even more waiting&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;"Uh, are my meds-"&lt;/p&gt;

&lt;p&gt;"I'll call them again."&lt;/p&gt;

&lt;p&gt;&lt;em&gt;even more waiting&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;...&lt;/p&gt;

&lt;p&gt;&lt;em&gt;aimlessly wander the tiny drugstore playing on my phone&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;...&lt;/p&gt;

&lt;p&gt;"Martin?"&lt;/p&gt;

&lt;p&gt;&lt;em&gt;perk up&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;"Yes?"&lt;/p&gt;

&lt;p&gt;"They were faxing your prescription to the wrong number. They didn't figure it
out until they got a confused call from Alberta. Gimme a minute to do the
paperwork and we'll have you on your way."&lt;/p&gt;

&lt;p&gt;And that's how I got my meds.&lt;/p&gt;
</a10:content></item><item><guid isPermaLink="true">http://pxtl.ca/2023/09/24/overwatch2-4v4/</guid><link>http://pxtl.ca/2023/09/24/overwatch2-4v4/</link><author>pxtl@hotmail.com</author><category>Games</category><title>How I would've designed Overwatch 2</title><description>&lt;p&gt;Okay I’ve been playing the Overwatch 2 anniversary events and considering how
many of them are small-group team-vs-team things (Catch the Patchmari,
Starwatch). I slept on these the first time through and playing them now I’m
surprised at how much I’m enjoying them, particularly StarWatch despite some of
its dumber ideas (like the AI-controlled Doomfist). This has cemented my
previous opinion:&lt;/p&gt;

&lt;p&gt;OW2 should’ve been 4v4 (2 DPS, 1 tank, 1 healer) with some kind of
fast-respawning mechanic for the healer, and a standard double-team mode (8v8)
either in quickplay or the arcade or something&lt;/p&gt;

&lt;p&gt;Then the number of heroes and the popularity of the roles reflects the number in
play - there are twice as many DPS heroes to choose from, twice as many DPS
players, and twice as many on the team.&lt;/p&gt;

</description><pubDate>Sun, 24 Sep 2023 00:00:00 Z</pubDate><a10:updated>2023-09-24T00:00:00Z</a10:updated><a10:content type="html">&lt;p&gt;Okay I’ve been playing the Overwatch 2 anniversary events and considering how
many of them are small-group team-vs-team things (Catch the Patchmari,
Starwatch). I slept on these the first time through and playing them now I’m
surprised at how much I’m enjoying them, particularly StarWatch despite some of
its dumber ideas (like the AI-controlled Doomfist). This has cemented my
previous opinion:&lt;/p&gt;

&lt;p&gt;OW2 should’ve been 4v4 (2 DPS, 1 tank, 1 healer) with some kind of
fast-respawning mechanic for the healer, and a standard double-team mode (8v8)
either in quickplay or the arcade or something&lt;/p&gt;

&lt;p&gt;Then the number of heroes and the popularity of the roles reflects the number in
play - there are twice as many DPS heroes to choose from, twice as many DPS
players, and twice as many on the team.&lt;/p&gt;

&lt;!--excerpt--&gt;

&lt;p&gt;Obviously they would’ve needed to rework some of the healers to be able to
solo-carry the healing, and probably add more Soldier/Sombra-style off-healing
abilities for DPS characters (eg: give Reaper a way to share his vampirism), but
still: While the 5v5 gameplay is generally unpopular, a lot of competitive
players celebrate how every play feels much more impactful at those smaller
counts. In 4v4 or 3v3 games like StarWatch or Elimination, it’s even moreso -
solo-healing is intense, but at the same time in StarWatch when the healer goes
down it’s not as huge of a loss as losing both healers in regular games because
of the respawn-in-place mechanic.&lt;/p&gt;

&lt;p&gt;Anybody who played Team Fortress 2 knows the huge distinction between intense,
competitive small-team 6v6 matches and the low-stress farting-around feel of the
huge 12v12 lolgames in pubs that were vastly more popular, because the diffuse
responsibility meant you weren’t letting down your whole team if you were
breaking in a new character or a new strategy. Transferring that to OW2, it
would only make sense to break away from the forced “every game must have the
same playercount” thing and embrace offering 8v8 modes for more casual play, and
4v4 modes for more competitive.&lt;/p&gt;

&lt;p&gt;To my mind, this was the missed opportunity of the composition rejiggering of
OW2.&lt;/p&gt;

&lt;p&gt;...&lt;/p&gt;

&lt;p&gt;Fundamentally, I think OW copied some things from TF2 without understanding how
they interact with lower player-counts. They copied TF2’s long rollouts and
respawn timers, but didn’t realize that this makes death way too costly in a
small-team game. In 5v5 at a good level, a single kill can basically end the
team-fight. If they want to drop player-count, they need to find a way to fix
that. Imho that’s why so many of their “Arcade” modes play with alternate
respawning mechanics, like freeze-tag.&lt;/p&gt;

&lt;p&gt;Also they wanted big flashy ults without thinking how that interacts with the
rest of the game. There’s a reason that most competitive twitch-FPS games don’t
have nukes on the serious maps.&lt;/p&gt;

&lt;p&gt;If it were up to me?  Nerf the ults in general. Either slower build or just
lower-power. Although if you go slower-build, you need to come up with a sane
way to have the charge carry between rounds, which would be tricky to get right.&lt;/p&gt;

&lt;p&gt;...&lt;/p&gt;

&lt;p&gt;Also they should make No Limits and Mystery Heroes 6v6 for old time’s sake.&lt;/p&gt;

&lt;p&gt;...&lt;/p&gt;

&lt;p&gt;Finally, on the subject of the story-mode: they keep trying to make PvE happen,
when fundamentally Overwatch is designed as a PvP game.  Imho, the correct
approach is to embrace that - accept the ludonarrative disconnect and make PvP
missions that tell the story.  Regularly release a short film and a companion
PvP mission.&lt;/p&gt;

&lt;p&gt;Did the wrong team win for the story?  Who cares.  Does nobody want to play a
character who's critical to the story?  Have them appear for a quick scripted
scene at the beginning and end.&lt;/p&gt;
</a10:content></item><item><guid isPermaLink="true">http://pxtl.ca/2023/09/19/fzero99/</guid><link>http://pxtl.ca/2023/09/19/fzero99/</link><author>pxtl@hotmail.com</author><category>Games</category><title>F-Zero 99</title><description>&lt;p&gt;i got a little carried away with this nostalgia game.  I loved the old F-Zero and this remake lets you play the classic against 98 other players at once.&lt;/p&gt;

&lt;iframe width="560" height="315" src="https://www.youtube.com/embed/LPtVwbNEmvE?si=zVh2fj70O3vx2cBs" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen&gt;&lt;/iframe&gt;

</description><pubDate>Tue, 19 Sep 2023 00:00:00 Z</pubDate><a10:updated>2023-09-19T00:00:00Z</a10:updated><a10:content type="html">&lt;p&gt;i got a little carried away with this nostalgia game.  I loved the old F-Zero and this remake lets you play the classic against 98 other players at once.&lt;/p&gt;

&lt;iframe width="560" height="315" src="https://www.youtube.com/embed/LPtVwbNEmvE?si=zVh2fj70O3vx2cBs" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen&gt;&lt;/iframe&gt;

&lt;!--excerpt--&gt;

&lt;p&gt;Overall, the game is fun but too repetitive.&lt;/p&gt;

&lt;p&gt;The game is excellent in some ways - the old Mode7 graphics look goddamned
beautiful on a big modern HD screen, and they’ve done a brilliant job adapting
the classic assets into new ways, like the new spin-attack. The game has a
simple and clean design that adds only a little to the classic game - it handles
like the original (which is similar to MarioKart without weapons), but now boost
burns health and collisions drop coins that you can use to “superboost” which is
a short-term access to an elevated faster track.&lt;/p&gt;

&lt;p&gt;It feels very random, but in a fun way - like, if Fall Guys was too chaotic for
you don’t pick this up. Getting into top ranks in a race seems to depend on a
lucky melee kill (which gets you enough health to abuse the booster), or
pummeling a fortunately-placed Gold Bumper or two (which quickly give you enough
coins for the superboost). Both of those are available on a pretty random basis.
The occasional lag-spike adds even more to the randomness of play. But still,
I’m enjoying it.&lt;/p&gt;

&lt;p&gt;The big flaw imho is lack of variety.&lt;/p&gt;

&lt;p&gt;I’m so sick of Mute City and Big Blue, after only a few days playing. The main
game currently only has a 4 track rotation with 2 voting options, and voters
always take the easier option. It’s a problem that the original SNES F-Zero only
had 15 tracks, and they’re trying to keep it to Knight (Easy) League for now
except for the “expert tracks” mode which is just Port Town 2 and White Land 1.
They’re obviously going to bring in the other leagues over time, but that’s
still only 15 tracks and some of those are hard-mode-remakes of older ones.&lt;/p&gt;

&lt;p&gt;There’s also only 4 cars to choose from - there’s the speedy one, the brawler
(important in these crowded courses), the fast-recharger (remember that health
is boost) and the all-arounder. So good options to match your playstyle, but
still: only 4.&lt;/p&gt;

&lt;p&gt;F-Zero was a SNES launch-title that smashed it out of the park with music and
gameplay and graphics and style, but it was obviously made under a deadline and
so it doesn’t have an amazing amount of content, and you really feel that
playing F-Zero 99.&lt;/p&gt;

&lt;p&gt;It’s just too repetitive. I loved the OG, but I’d sacrifice nostalgia for some
new, unfamiliar courses.&lt;/p&gt;

&lt;p&gt;But yeah, if you’ve got access to Nintendo Switch Online, I’d definitely give it
a try. You can’t beat the price: Free is my favourite flavour. It’s easy to pick
up, the tutorial is pretty quick, and it’s fun. And it’s a Nintendo “99”
nostalgia game, which means it’s certainly going to be time-limited. Play it
while you can.&lt;/p&gt;
</a10:content></item><item><guid isPermaLink="true">http://pxtl.ca/2023/09/12/more-rigid/</guid><link>http://pxtl.ca/2023/09/12/more-rigid/</link><author>pxtl@hotmail.com</author><category>Blog</category><title>More rigid</title><description>&lt;p&gt;If you watch "Well There's Your Problem" podcast (about engineering disasters),
Alice has an iconoclastic opinion on things like expansion plates and swivel
joints and the general flexibility of good engineering: "No, make it more
rigid!" I have taken that to heart with some recent home improvement projects.&lt;/p&gt;

</description><pubDate>Tue, 12 Sep 2023 00:00:00 Z</pubDate><a10:updated>2023-09-12T00:00:00Z</a10:updated><a10:content type="html">&lt;p&gt;If you watch "Well There's Your Problem" podcast (about engineering disasters),
Alice has an iconoclastic opinion on things like expansion plates and swivel
joints and the general flexibility of good engineering: "No, make it more
rigid!" I have taken that to heart with some recent home improvement projects.&lt;/p&gt;

&lt;!--excerpt--&gt;

&lt;p&gt;&lt;img src="http://pxtl.ca/images/2023-09-12-more-rigid/fencepost.jpg" alt="fencepost" /&gt;
&lt;img src="http://pxtl.ca/images/2023-09-12-more-rigid/swing-chair-binding.jpg" alt="swing-chair-binding" /&gt;
&lt;img src="http://pxtl.ca/images/2023-09-12-more-rigid/swing-chair.jpg" alt="swing-chair" /&gt;&lt;/p&gt;
</a10:content></item></channel></rss>