A poem that influenced my life, though I knew it naught until today when I read an email from my step dad and just now read it. You see, he read this during his college years and took it to heart. Influenced his life and his architectural practice and, perhaps, why the house I grew up in had a warped plane roof and curved walls, among many other interesting and unusual features đ
Pretty neat poem.
The Calf-Path by Sam Foss – Poems | Academy of American Poets
Some may remember stories of the bus conversion of a 1980s transit bus (Gillig Phantom, if you’re into that sort of thing) I did (with some help) and how our family (Geek was only a year old! my how time fliesâŠ) lived in it for about 8 months traveling about 25,000 miles around the continental United States.
During this period Dad worked remotely for a client programming a Mac application. But a bit of research will show you that while WiFi – which we all take for granted now – had been invented some 10 years earlier Lucent hadn’t been able to get anyone to adopt it and it wasn’t actually available on a consumer computer until Apple launched the iBook at NY MacWorld in 1999.
Here’s an excerpt I just found on my computer (which prompted this post) of a Bulletin Board System post I found on the “Bus Conversion News Board” from January 1999 which makes it clear that even nearly two years later it was still a challenge to get online from the road:
Re: Wireless Internet, Cheap (relatively), nationwide
[ Follow Ups ] [ Post Followup ] [ Bus Conversions News Board ]
Posted by Ed Carroll on January 17, 1999 at 18:22:25 PST:
In Reply to: Wireless Internet, Cheap (relatively), nationwide posted by Joe Solbrig on January 17, 1999 at 15:32:17 PST:
Thanks for the info Joe. Sounds like something a lot of us would be
interested in. A couple of questions though: 1. Do I understand you
correctly that if we connect up with this service then AT&T becomes our
regular ISP for unlimited connect time via wireless connection for only $60
per month regardless of our location? (Does that mean worldwide or just the
lower 48?) And 2. You mentioned a $100 "Pocketnet phone". Does that $60
monthly fee allow any voice communication from this "Pocketnet phone" to
friends on a regular land line phone?
: Hello again folks,
: I'm back, thanks to CDPD service from ATT wireless.
: There now is a way to connect to the internet wirelessly, nationwide and
for less than an arm and a leg.
: It takes a bit of looking around to actually get the information on this,
: "CDPD" and "Wireless" are data-broadcasting standards that uses the
cellular radio bands. ATT has used it for things like meter-reading and
stuff for a while. The problem is they traditionally charged per data
transmission and this made the service too expensive. However, recently,
they started a "nationwide unlimited" service which gives unlimited data at
a set price of $60/month. You have to buy a special connection equipment
also (request a "pocketnet phone" for $100 plus the connection kit for
another $100. The special CDPD moderm ).
: This is a business service, so it's best to say you're in business. Aren't we all ;). Also, you have to deal with the ATT office via phone and fax. But they're quite patient.
: They ran no credit check and started my service without my having paid for the equipment (which is good, given the delay my mail gets sometime).
: So all you full-timers, check it out!!
: Joe
---------------------------------------------------------
Follow Ups:
---------------------------------------------------------
Post a Followup
Name
Email Address
Subject
Comments:
---------------------------------------------------------
[ Follow Ups ] [ Post Followup ] [ Bus Conversions News Board ]
Makes the kind of speed and service we can get now pretty amazing in contrast, eh?
So, how did I upload my source code, pull down shared source, get my email, and otherwise work remotely from a 40′ transit (city) bus as we drove around the country for 8 months?
Two techniques I figured out:
1. Most businesses have a fax machine and that’s often the only analog line in the office (the rest were part of the business PBX digital phone system). So I’d ask to borrow that line and since most didn’t need their fax machine online all the time, they’d often let me. Some hotels had a business communications area off the lobby that you could access without having a room if you acted confident and carried a laptop briefcase (and didn’t look too shaggy :)).
2. This gizmo:
A “fancy” for the time portable acoustic coupler.
What is this? How is it used? It’s an Acoustic Coupler and it’s used to connect to a POTS telephone, like this:
Yah, that’s an “antique” rotaryphone and you can see the acoustic coupler held against the handset with the integrated velcro strap. This is literally a physical connection between the speaker on the acoustic coupler and the microphone on the phone handset and the microphone on the acoustic coupler and the speaker on the handset. So primitive!
And yet, it worked. Well, assuming I could find a payphone that hadn’t had beer poured on it and wasn’t trashed from being pounded against the side of the phone booth in frustration, etc.
My strategy was to find the largest bank of payphones – yah, they made them in rows, something like this:
“Toronto payphones covered with graffiti and notices. Telephone books are contained in weatherproof holders hanging from the bottom of each phone.” — wikipedia Image: CC BY-SA 3.0
but I’d look for at least 5 and 8 or 10 was a better bet. I’d take my laptop and a folding camp chair and start at one end and work my way down the bank of pay phones until I found one that could connect at 9600 baud or better (14.4 was rarely possible, and 28.8 was a challenge) and hold the connection long enough to upload/download etc.
You’d use a calling card in case you had to call long-distance to get an access point (phone number that would answer and connect you to the internet) and you had to program all that stuff into modem dial string so it would call the calling card billing number, put in your calling card number and pin, and then dial the closest access point number.
Fun times!
Anyway, it was either this or the Iridium satellite phone service which was $25K for the antenna/phone unit and $4/minute for pretty slow data (I don’t remember but it wasn’t 9600 baud even, IIRC). My clients weren’t paying me that kind of money đ
So, next time you open your smartphone and surf the web, or work remotely off of a wifi or you cellular hotspot – be thankful at the freedom we have now and laugh at how primitive working remotely was back in 1997. đ
Context: Making a new bootable backup of my 13″ M1 MBP before upgrading macOS and taking advantage of the fact that SuperDuper! 3.7 now supports bootable clones (yay!). However, one unfortunate fact of creating them is that SuperDuper! docs say you have to boot from that drive and turn on File Vault manually if you want it encrypted (you want it encrypted đ ).
I’m pretty sure there’s a way to do this with diskutil and whatnot instead of booting from the clone and turning it on there, but I didn’t feel up to digging through how to do that (it’s complicated by the need to add users manually before turning on encryption, is my vague memory of the steps I had to do last time I dug into this).
However, David – maker of SuperDuper! – was kind enough to mention that once you turn it on you can then boot back from your main drive and connect the backup clone and let it finish the encryption in the background (this is good because it said 10 days to complete – mine is a very slow USB external drive, apparently!).
The drive kept blinking for two days and I was trying to figure out how to tell how much progress it had made and if it was done or if spotlight was indexing the drive or what. Here are some commands that I found to help with that.
diskutil cs list
will produce a listing of Core Storage volumes and their “Encryption Status” and “Conversion Status” which will indicate complete or not.
Unfortunately, the bootable combined volume + “Data” doesn’t come up in that list (it’s something different, apparently).
So for that I was able to find what I wanted using:
diskutil apfs list
which outputs an entry like this for the in-progress file vault encryption volume (emphasis mine):
| +-> Volume disk7s2 8C8FD74F-ACE0-4E1D-B67B-2F021A3C5DD7
| | ---------------------------------------------------
| | APFS Volume Disk (Role): disk7s2 (Data)
| | Name: Data (Case-insensitive)
| | Mount Point: /Volumes/Data
| | Capacity Consumed: 1459954380800 B (1.5 TB)
| | Sealed: No
| | Encryption Progress: 75.0% (Unlocked)
You can specify the container disk (which is disk 7 in this case) and see just the volumes in that container: diskutil apfs list disk7
Looking for the exploded view of an electric saw I need to take apart and found some design sketches for a desk I made myself – has dimensions for a Macintosh IIci for the computer area đ
The other funny thing is the sketches are on the back of ImageWriter II (dot-matrix) printout of Pascal code from 1988 for an iChing app I did for a client đ
The Dissolve(âŠ) routine call in it is calling out to a 68k asm routine I wrote to do a fast dissolve from an offscreen grafport to the screen – likely the first assembly language code I shipped in a commercial product đ
Anyway, likely only amusing to me as a reminder of a time in the past, but they were some good times so posting it here to save the smile they brought to my face.
The Feedback Assistant iOS app is visible and acts like a normal app on beta builds of iOS, but itâs hidden in release versions of iOS. On release builds the app icon is hidden on the Springboard/Home screen, it doesnât come up in Spotlight searches, Siri canât find it, and the process is hidden in the process switcher if you do get it launched.
The magic incantation to make it visible on release builds of iOS is to enter:
applefeedback://inbox?make_visible=1
in the Safari address bar to make the Feedback Assistant app on iOS always visible (spotlight, app icon, Siri search, process switcher, etc).
or, if you want to leave it hidden and auto-hiding but want to launch Feedback Assistant to file a new feedback enter the following in Safari:
applefeedback://new
Use just:
applefeedback://
alone to switch to Feedback Assistant without changing visibility or starting a new feedback (because Feedback Assistant is hidden from the process switcher, you need this if you are in Feedback Assistant and want/need to switch to another app but want to come back to Feedback Assistant to finish the feedback youâre editing, for example).
Note 1: Youâll need an Apple ID to file feedback reports.
Note 2: You can always go to feedbackassistant.apple.com to access your feedback assistant account without the Feedback Assistant iOS app, but you canât include sysdiagnose files and it doesnât have quite the same ease of use as the app.
I told someone Iâd just eaten half an ice cream sandwich and they said they were impressed.  đ€
It wasnât trivial, because I do enjoy sweets, but wasnât that difficult.
Hereâs how to successfully eat half an ice cream sandwich (or anything else your body craves), from easy to difficult:
1) [Easy] Take an ice cream sandwich out of the package and cut it in half. Hand half to your wife/kid/friend/neighbor/etc and then pick up your half and enjoy it.
2) [Not difficult] Store your ice cream sandwiches in a freezer in the basement/garage.  Go get one and bring it to the kitchen.  Open one end of the package and slide the ice cream sandwich out of the package and put it on a plate. Cut it in half and put half back into the package.  Take that half an ice cream sandwich in a package back to the freezer in the basement/garage and put it away.  Only then do you pick up the half youâre going to eat and enjoy it.
3) [Medium] Same as above but donât bother taking the half youâre saving back to the basement until after you eat the half youâre going to eat.
4 [Difficult] Open the package and start eating the ice cream sandwich. When youâve eaten half of it, stopeating it, close up the package, and put it back into the freezer.
Â
So, I wouldnât be impressed that you ate only half an ice cream sandwich unless you did number 4 on this list đ
When you use AirDrop to move an image from your iOS device to your Mac macOS adds some metadata that made me uncomfortable. In particular, the com.apple.metadata:kMDItemWhereFroms metadata is a binary property list which includes the name of the device it came from. The default name is often your name, as in, âDadâs iPhone 12 Proâ.
Lots of ways you might share that image which donât copy that data, but copying the file to another Mac through an external hard drive or file sharing, at minimum, seems to transfer this metadata across.  Sending as an email attachment, or as a Messages message attachment doesnât seem to transfer this metadata, on the other hand.  It would be nice to have a preference to prevent adding this to the file metadata (FB10992657).
Since Iâm not 100% clear when this metadata is getting transferred and when it isnât, I wrote a small macOS Shortcut to strip it.  First Shortcut Iâve put together and the lack of logging for shell commands or of any kind makes Shortcuts significantly less usable than Automator, for example (where I had to go to figure out what was going wrong).  Also the initial text for an Run Script node in a Quick Action are not as helpful as the Automator environment (FB10993044).
Anyway, hereâs the result:
Iâd attach the actual shortcut file but Apple chooses to make them tightly linked to the creator and doesnât allow sharing the source code for the shortcut without attaching my AppleID certificate to the file (WTH?!) (FB10993444).
I have too many windows open in Safari (416 tabs in 133 windows currently – yah, I wrote an AppleScript to count those đ ).
Got tired of not being able to find something I knew I had open so I wrote an AppleScript to search the text content of all Safari tabs in all Safari windows that arenât minimized (even across Spaces). Â Does not currently search tabs in windows that are minimized to the dock.
Iâve now found this useful enough that I thought Iâd share it. Â Disclaimer: Iâm not an AppleScript programmer and donât really like AppleScript (probably because I donât know the language and tricks!). Â There are likely things that could be done better or smarter. Â Contributions welcome.
That said, this seems to generally work and, thanks to me learning about using references, fast enough that I wasnât sure it was actually working at first đ
Had occasion to use a SwiftUI ScrollView today and ran into the issue where the SwiftUI team decided to use one of the two most sensible defaults for initial presentation when the content is too large to fit in the container – center the content. This makes sense for images or maps, but not for much of anything else I am thinking of. Everything else seems to want top left (for left-to-right locales at least). Strange that something that a large percentage of people are going to want isn’t as easy to set as alignment or something, but so it goes.
Anyway, this gave me an opportunity to read up on ScrollViewReader which, combined with the .onAppear modifier, can get the initial presentation of a ScrollView to the top left like so many want/need it to be.
Putting the code here so I remember for next time and in case anyone else finds a bazillion Stack Overflow posts about how ScrollView is so hard to make display properly but no modern ScrollViewReader answers.
//
// ContentView.swift
// trashme
//
import SwiftUI
struct ContentView : View {
var cellSize: CGFloat = 50
var numRows: Int = 30
var numCols: Int = 10
var body : some View {
VStack(alignment: .leading, spacing: 20) {
ScrollViewReader() { proxy in
ScrollView([.horizontal,.vertical], showsIndicators: true) {
HStack( alignment: .top, spacing: 0) {
VStack ( alignment: .leading, spacing: 0) {
ForEach(0 ..< numRows, id: \.self) { row in
Text("row " + row.description)
.frame( height: self.cellSize )
}
}
ForEach(0 ..< self.numCols, id: \.self) { col in
VStack( spacing: 0) {
ForEach(0 ..< self.numRows, id: \.self) { row in
Text("\(row), \(col)")
.frame( width: self.cellSize,
height: self.cellSize,
alignment: .center)
.border(.blue)
}
}
}
}
.id("root") // since our ForEach views don't really
// have true ids (\.self ~)
// we make one for the outer HStack
// in the ScrollView
}
.onAppear {
proxy.scrollTo("root", anchor: .topLeading)
}
}
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
And here’s what it looks like in an iOS SwiftUI preview pane:
from:username
to:username // to username
@username // mentioning @username
keyword // can be a #hashtag
-keyword
keyword OR keyword
min_retweets: x
min_faves: x
min_replies: x
filter:links
filter:images // any image
filter:twimg // twitter pic.twitter.com image
filter:video
filter:native_video
filter:periscope
filter:vine
filter:media // image or video
filter:retweets
filter:safe
filter:verified // verified users
-filter:____ // use with any of the above filter nouns to exclude
since:YYYY-MM-DD
until:YYYY-MM-DD
near:X within:10mi // (where X is a city name)
list:user/listname
url:apple // has url containing "apple" anywhere in it
lang:languagecode // en, da, cs, de, es, fr, it, ja, ko, nl, no, pt, ro, uk,âŠ