Hello, everybody. Glen Gordon welcoming you to our March 2023 edition of the podcast. And although we try to cover things that most of you will be interested in, I realize there’s always the topic that may not be of great interest to you. And this is where chapter marks in the episodes really come to your rescue. If you’re using a supported podcast player, which pretty much means one on iOS or Android, there are chapter marks, and you can skip from chapter to chapter, which makes it easy to move to the content that you’re most interested in listening to.
We have transcripts of each and every FSCast episode going back to January of 2019, thanks to the tireless transcription efforts of Elaine Farris. If you’re interested in reading, you can go to blog.freedomscientific.com/fscast, find the episode you’re interested in, and then once you’ve drilled down into it there’ll be a link for the transcript. And since you’re listening to this podcast, perhaps another podcast from Freedom Scientific would be of interest to you. We have the Freedom Scientific Training Podcast. And it’s not new material. It is some of our other training material repackaged in podcast form. But if you like listening while you’re doing other things, a podcast form of some of our training might be just the ticket. And you can find it by searching for Freedom Scientific Training on your podcast app of choice.
GLEN: Time now for this month’s Power Tip. And it comes to us courtesy of Negoslav Sabev. And it has to do with a little-known JAWS feature called “Word List.” It’s a quick way of getting an overview of the words used in a document. And that often can give you some real details about what’s being covered. If you’re on a web page, a PDF document, or in a Word document, you can use JAWS Key+CTRL+W. That’ll bring up a list of words in descending order of usage. Each word has a usage count by it. And you can activate any of the lines you see, which will take you to the first use of that word. And pressing the Quick Key W will move you through all the other uses of that word.
Quick Keys are on by default on the web and in PDF documents. In Word, you need to toggle them on with JAWS Key+Z. After you’ve gotten the Word List, instead of activating a link representing a particular word, once you’ve selected a word, you can either tab to the Summary button or simply press ALT+S. And the summary will take each instance of that word and show you a sentence or a portion of a sentence to give you an idea of where it’s used in that location. And you can press ENTER to jump to the location.
I recommend that you do not use the Summary option in Word or PDF if it’s a word that’s used several hundred times. You will be waiting a fairly long time for that summary to appear. So Word List, perhaps not something you’re going to use on an hourly basis, but something you can add to your tool chest of how to understand and navigate through documents.
We thank Negoslav for his Power Tip and for submitting it. In addition to getting our undying gratitude, he gets a year added onto his JAWS license. If you have a Power Tip, write to us at fscast@vispero.com, fscast@vispero.com. And if we use your tip, your license will be extended, as well. And that can be a license of JAWS, ZoomText, or Fusion.
GLEN: Joining me now is someone who I would not know about had it not been for his appearance on the AT Banter podcast talking about being thrown off of a Virgin cruise. And yes, he was thrown off of the cruise because he was traveling alone while blind. I speak of retired Canadian swimmer Donovan Tildesley. He was in four Paralympic games, took home a bunch of medals, now sells insurance for the Buntain Insurance Agency, and is here to talk a little bit about his life, and in particular about his odyssey with Virgin Cruises. Donovan, welcome.
DONOVAN TILDESLEY: Glen, thank you for having me on the podcast. I really appreciate you reaching out to me.
GLEN: And you are a longtime JAWS user, so you’re with birds of a feather and all that.
DONOVAN: Exactly. Like I was just telling you off-air here, that I first got introduced to JAWS in the spring of 1996 by none other than Steve Barclay, one of the hosts of the AT Banter podcast, who that was kind of – I was going into, about to go into grade seven at the time. And previously I think we’d been using programs like BEX with, like, the floppy diskettes. And then JAWS was this new innovative thing. And so was the Internet. And man, I’ve got to say it’s come leaps and bounds in the past, oh, 27 years.
GLEN: Well, thanks for sticking with us. So I want to talk a little bit about your becoming really athletic very young because I learned to swim when I was three or four. But it didn’t occur to anybody in my family that I might compete, that I might be particularly good. How did sports play center stage early on for you?
DONOVAN: I think what was the real influence here was my dad used to be a competitive swimmer and had also coached for a time, summer club. And so by the time I was eight years old and, you know, had the ability to swim, we’d go to the pool together. And he suggested I race him from one side to the other, and I got a real thrill out of that. And so when the coach at our local club approached me to join the swim team, I thought, well, why not? It made good sense to maybe meet some more people and start pursuing a sport that I loved to do.
And in later years – so I guess that was 1993. In 1996, soon after I learned about JAWS, I was at a provincial championship for the Province of BC, the BC Games for Athletes with a Disability in the little town of Kamloops. I met a couple of people there who were traveling to Atlanta that summer to compete in the Paralympics, which I did not know existed up until that time. So it kind of gave me this idea that, you know, if I continue to swim and improve, maybe one day I can be a Paralympian.
GLEN: You won an award, I think, the first Paralympic Games you were in. Was being successful early on a blessing, or a curse, or somewhere in between?
DONOVAN: Wow, great. A little bit of both. Yeah, I did win – I won a bronze at my first Games. I can tell you – and that was in the 200 individual medley. I can tell you that it was hard to find the motivation the year after that Games to keep training and keep moving forward. When you talk about the curse part, I remember in 2002 I was lucky enough to win five golds and a silver at the World Championships in Argentina. Now, because of that, I was now a gold medal hopeful for the Athens 2004 Games, which meant more money was being thrown at me to add extra training, like stuff in the gym, more travel to training camps and competitions.
And I was also, at the time, 19 years old. And I think you could probably know from growing up blind, I didn’t have quite the same social opportunities in high school. You know, I had my kind of core group of buddies I could hang out with, but I wasn’t really out there as much as I’d like to be. But by university – I was in my second year of college at UBC by this time – I was starting to come into my own and meet more people, which would usually involve, like, going out to a bar or doing something fun like that.
So on this one side, you know, I was becoming social, wanted to meet people. And then the other side, oh, I’m being told, “You’ve got a Paralympics to train for. You can’t be going out. You can’t be doing this. You can’t be doing that.” To the point where I found that my whole training was out of my control. I was just being turned into this machine to swim and to win medals. And six months before the Games even started in Athens, I was looking forward for them to be over. And I did end up performing reasonably well in Athens. I got two silvers and a bronze. But thanks to having my dad as my main coach, he realized that, in order for me to stay engaged in the sport, I needed to find more balance.
And so after the Athens Games we tweaked the training a little bit, took stuff away. Still would work my butt off in the pool. But I blossomed socially. I joined a fraternity. I got out more. I really came into my own as a person. If I had just kept up a strict regimen of being an athlete and only an athlete, could I have won more gold medals in, say, Beijing 2008 and beyond? Maybe. But I wouldn’t have been a well-rounded, developed, dynamic person, which I think to me was more important than winning medals.
GLEN: I’ve heard you talk in other situations about being okay with being seen as inspirational. And I think that’s probably a pragmatic answer because you don’t necessarily have a choice.
DONOVAN: Well, the reason, what it is, is – sorry to cut you off, but I remember having an issue with this years ago. And I was at a fraternity event. It was like a fraternity conference, team-building type event in the states. And I remember saying to one of my roommates, like, this is a bit – everybody thinks I’m so inspirational. And he said, “You realize that a lot of people haven’t seen a blind person accomplish things or be able to go through a rope course or do stuff you do. So you really have to have some empathy for where they’re coming from.”
And I thought, well, that’s fascinating because, you know, I would also be inspired by somebody like – here’s a Canadian name for you – Rick Hansen, a fellow who became a paraplegic through a car accident and then decided to wheel himself around the world for charity. I’m sure what he was doing was just because he felt the need and the desire to do this and to help others. I see that as inspirational. I certainly wouldn’t do that.
GLEN: It feels in many ways like, if you’re inspirational to someone, they don’t necessarily think of you as a fellow human being, walking the same paths, doing the same thing, someone who that they could become friendly with and close to.
DONOVAN: Wow, you nailed it. And that’s, I think, one of the biggest challenges I have, maybe not so much with friendships, but for sure with things like dating, which – and I could also speak to the inaccessibility of some of these dating apps. But it does kind of put me on a bit of a pedestal, and in some instances set me up for failure or for letting other people down. But the people who really get me, the people who spend enough time getting to know me and are willing to accept me for who I am, they’re the ones that you stay with in life.
GLEN: So I want to talk briefly about your becoming an insurance salesman because I think about these multiple choice tests. And it’s like, what are the things that don’t go together? But I assume that there was a path to this.
DONOVAN: Well, it just goes to show that sometimes life takes you in a path that you don’t expect. I, from the age of six, wanted to work in radio. I wanted to be that guy. I wanted to be the morning guy. I remember at one stage as a teenager wanting to be Canada’s version of Howard Stern. And of course, saying it when I was in the 11th grade, I want to go to broadcasting school out of high school. And my parents dissuaded me from that because, they said, you should go to university because you’ll get more of a broad-based education. And you’ll get more of the social aspect, which is even more important. And they were right. Broadcasting is usually like a two-year diploma.
So I went to the University of BC, got an English Lit degree. Started working for the Royal Bank, doing a lot of public speaking, talking to people in the bank about the Paralympics, going to community events, signing autographs, just being out there, which I loved doing, and learning about what it would involve to work in a bank which, I realized, wasn’t too sure on that. They wanted to see if I would work out in a Visa call center. I had blind friends who worked in call centers. So I thought, oh, seems like a reasonable job. I should pursue this.
Just so happens that my parents’ neighbor, Gord Buntain, who runs Buntain Insurance, was doing my dad’s insurance at the time. And talk turned to, what are your kids up to? And Dad said, oh, Donovan’s going to be Visa call center. And Gord said, “No, no, no. He shouldn’t do that. He’ll do that, he’ll just get lost in the shuffle. He should come work for us – people know his name from the community – and start working with travel medical insurance because he does travel.”
And I scoffed at the idea at first. But then I thought, you know, I should give this a shot. And here I’m basically being handed a job, with 70% of Canadians unemployed or underemployed, or blind Canadians, I should say. I’d be stupid not to take this opportunity. And so I took that path. I took a 100-question multiple choice exam, started at Buntain, took my other insurance levels. It was not an easy go, namely because they had never hired a blind person before. So they didn’t know what worked and what didn’t work. I didn’t know what worked and didn’t work. As I was telling you off-air, their database is a built-in Microsoft Visual FoxPro, which had many challenges with JAWS. We actually had to hire a JAWS scripter to come and make it more accessible. We were also at the time dealing with paper. We did go paperless for the most part a few years later. But I’d have mounds and mounds of paper on my desk, which I didn’t know what it was, and sometimes led to some uh-oh moments when coverage should have been bound, but wasn’t bound because I didn’t know.
GLEN: Oh, my god.
DONOVAN: And luckily, nobody got sued. And because I needed so much help in so many different things, I was reluctant to ask for help at certain instances. I was not confident enough. My boss, Gord, took me aside a year or two after starting and said, “You know, Donovan, your greatest strength is your people skills of how you talk on the phone, how you relate to clients. The admin skills can be done by somebody else. But how about this? Why don’t you, next time you get a new quote, say, turn to the person behind you and say, ‘Hey, Mark, I’ve got this new home quote. Do you mind helping me do the home evaluator? And then we can present the quote to the client and then share the commission.’”
And once I figured out that teamwork piece, my sales increased exponentially. And I’ve now figured out so many different systems, where last year I was the number one salesperson in a company of 42, 43 people. By no means is it perfect, but it’s very doable, if you’ve got a company that believes in you, and you come to the table as a blind person, specifically saying what you need.
GLEN: It’s probably good that you have good sales skills because you’re able to contribute on the other side of that equation. You’re not just asking for help with what you need. You’re contributing a big chunk, as well.
DONOVAN: Exactly. I’m always, people say, hustling. Like I’m always asking people. I go to events. I go to, you know, even walking home from work the other day ran into somebody who happened to be sitting on a patio having a drink and found out that he knew the Buntain family. And I said, “Well, why don’t you do your car insurance with us?” And now, boom, I’ve got a new client. So I’m not afraid to put myself out there, but you’re right. If I didn’t have those other skills, then it wouldn’t be a great fit for me. But I’d like to think that those skills compensate for my lack of admin skills and lack of vision.
GLEN: So speaking of getting out there and doing things, you have been on at least one cruise. And I know you’ve been on one because that’s the one that got me in touch with you. But what’s your experience with going on cruises yourself?
DONOVAN: My first one was in 2015. And at the time I just – I really needed a vacation. My dad had just been diagnosed with pancreatic cancer earlier that year. I was just burnt out, needed a break. The travel agency across the way from my office suggested a cruise. And I knew about them. And I thought, okay, let’s give this a shot. I didn’t have anybody to travel with. It was the last minute.
So I took an Alaskan cruise on NCL, Norwegian Cruise Lines. And after that week, I was just blown away because I was on this ship, and it was full of people. And I never at any point in time felt that I had gotten significantly lost or lonely or that kind of thing because they were very well set up. They knew I was a solo traveler when I first got on the ship so invited me to solo traveler meetups in the evening. The cabin crew knew that I couldn’t see, and so knew that I might need an extra hand getting to and from. I’d meet passengers in the hallway where I was trying to go from A to B, and they’d assist me to where I was. And then I’d make friends along the way.
And so it was one of those eureka moments, like, wow, I think I’ve found a new way to travel solo blind. My ideal vacation would be, if I’m not skiing, going to, say, Hawaii and lying on a beach somewhere. But that’s pretty difficult when you can’t see, because what if you want to go swimming? You go into the water, and then you drift, and then you can’t find your stuff. It’s too many moving pieces. Whereas a cruise ship, you’ve got all the amenities you need for your evenings, days on board. And then you can organize excursions where you go out and try different things, like whether it be food excursions or horseback riding or hiking, and there are people on those excursions to assist you. So basically, I felt that I was helped every step of the way to enjoy an amazing vacation.
GLEN: So given your positive cruise experiences, my guess is you were very surprised when you encountered Virgin. Will you tell us a bit about that experience and how it all came together?
DONOVAN: Last summer I guess I decided I needed a winter holiday because it gets very bleak in November in Vancouver. And through a connection to one of my insurance companies, I found a travel agent who highly recommended Virgin because it was a kind of younger, hipper form of cruising. And of course he told the company when he was booking my passage that I was a blind traveler. So I fly to Miami solo. At the time, I had to go through Toronto, stay overnight there. Luckily, I did have a couple of friends there I could catch up with.
Get to the port the next day. They take forever to onboard me. And they said they were having some issues with a tablet or something or other. I didn’t know what was going on. I get onboard, and of course my thought is I want to sit in the sun and have a cocktail before we set sail. And so they orient me to my cabin. They kind of give me a verbal walk-through or tell me where everything is. And they take me to one of the open bars on the deck. And I’m just sitting, listening to tunes, having a couple of drinks.
And I’m thinking, I was about to get up and ask for support to go to the next spot for the sail-away party, when two people from Virgin come up to me and say, “We’ve got some bad news. We’ve determined that having you onboard as a solo blind traveler could be a safety issue. So we’ll unfortunately have to take you off the cruise, and we’ll refund everything to you.” And at first I was kind of thinking, is this some sort of joke? Like, this has never happened to me before. I’ve traveled the world. I’ve traveled to South Africa by myself for a friend’s wedding and was very supported, very helped out. And I explained to them kind of my history, who I was, where I’d traveled.
They said, well, we’ll talk to some – they get the manager of the ship. And he said, “No, this has come from Virgin corporate, Virgin legal. You’re going to have to get off.” And I, by this time, was trying to get a hold of my travel agent, trying to make some calls, some last-gasp, last-ditch effort. But within 20, 25 minutes, I’m off-boarded off of the ship. And they’re booking a hotel for me in Miami because I think they wanted me to maybe fly out the next day. And I said, “No, I want to stay until at least Wednesday.” But I kept – and I was making, you know, as I’m waiting for the van to take me to the hotel, I’m posting to Facebook, this is what happened. I message one of my friends in radio who does a morning show in Vancouver, tell him what’s going on.
Within four hours of this happening, I get a call from the VP of Virgin Voyages, a guy named Frank Weber, who was vacationing with his wife in Mexico at the time, who apologized profusely for what had happened. I’m not sure how it came to his attention, whether it was through my travel agent or through something through social media. But he said, “Can we make this right? Like, how about if we flew you to Roatan, to Honduras, in two days to join the ship to finish the voyage, would you be okay with that?” And I said, “That probably works out. Let me think about this. But I’ll get back to you.”
And my first thought was it made sense. Because the last thing I wanted to do – I’ve been working hard all year. The last thing I wanted to do on my vacation is spend it in some sort of fight, some sort of battle. And that’s kind of the mindset I had. I had asked them to send me some sort of formal documentation as to why I had been taken off the ship. That never happened. But the VP did take me out for dinner the following night and basically explained that somehow the shore crew knew that I was coming and knew that I was blind. But the people onboard the ship were blindsided – pun intended. And they freaked out, panicked, because they didn’t think they had the training to support a solo blind traveler.
And he said that they made two errors. He said, he’s like, “First, you’ve got to ask the person what they need, not just assume.” And the second thing he says, he’s like, “I’ve worked in hospitality for over 30 years. It’s more about making people feel welcome. That’s the first thing you’ve got to do. And throwing somebody off a ship, that’s not how to make them feel welcome.” And in this time, prior to our dinner, I had had time to kind of think about what more I wanted from Virgin. I’d even actually talked to an advocacy lawyer who explained to me what would be involved if I was to take legal action. And really, you’re just putting your name behind a lawsuit. You just get updates. You might only get $2,000 out of it. And it just didn’t sit well with me. That’s not what I wanted to do, considering they seemed to want to make a pivot.
So I said, when I had dinner with this guy, I said, “I’m going to get this cruise free,” which he had already agreed to. I said, “If I enjoy it, I want a second cruise credit.” He agreed. And I said, “The next piece” – and this speaks to something that I’m also very passionate about – “I’d love to come and speak to your team about accessibility and inclusion.” So in a sense they picked the wrong guy to throw off the ship because I definitely fought back. But also they picked the right guy because I want to make sure that this doesn’t happen to other people in the future. And the other piece with Virgin, and not to excuse it, but they only started the cruise line on March 1st of 2020. So of course they were closed down within two weeks. And so really they’d only been up and running for about a year before I came. And they’re still a new company. And they’re sorting themselves out after travel. So the fact that they had never dealt with a solo blind traveler before is very plausible.
GLEN: You dealt with someone who understood and empathized with you, rather than trying to justify their actions, which would not have gone well.
DONOVAN: No. No, he got it. The VP completely understood and said it would have not happened had he been on the ship. And he was even thinking if he could rearrange his schedule to come back on the ship with me. Not only that, but we’ve had some discussions since then about me consulting for them and wanted me to set a fee, which I’ve never done before for that kind of work. And so I did. And there was a lot of delay. And they didn’t know if they had the budget. But this VP guy has been on it. Frank emailed me yesterday saying that he’s so sorry for being out of touch. He’s been swamped with other things. But he’s going to have an agreement to me by the end of next week because he wants to see us working together and collaborating and making it a better company.
GLEN: I wonder the degree to which social media and perhaps your broadcasting contacts actually made this work out as it did.
DONOVAN: Huge, I think. The fact that I have a pretty wide following on Facebook and Instagram, it got to a lot bigger audience. The broadcasting contacts definitely helped because I had a few people on text who I knew were in news media, who I knew would run with the story. If I didn’t have that, I think it might have been a whole other story because of that whole combination. Even one of my media friends said after the fact, because she was one of the first on Facebook to say, “Lawyer up,” you know, “this is a lawsuit coming here.” And then two days later she replied to another comment, saying, “Wow, I said that initially; but now I realize you’ve got so many friends in the media, you didn’t need to do that. They were all able to help you out.”
GLEN: I really like the fact that, at some level, you assumed the good intentions of people who indicated that they had good intentions and carried forward with that.
DONOVAN: I don’t know. I’ve just – I’ve always had, and I think that’s something I inherited from my late father, I’ve just had a, you know, you’re never always happy or never always upbeat. But in general, I think I like to think the best of people and that people have good intentions. And for the most part, they do.
GLEN: Well, I’m sorry you had to go through this, but I’m happy you had to go through this, if only so that you could tell the story here on this podcast, and we could meet.
DONOVAN: I feel the exact same way, Glen. You know, it’s funny. At the beginning of 2022, one of my goals was to develop more of a brand and a social media presence and influence others in some way. And I wasn’t sure quite how to do that. But then this experience happens, and I’ve been on your podcast. I’ve been on a couple of other podcasts. The story’s been carried all over the world. So in a sense I have. And I’d just like to see that continuing on, that I can maybe influence more people and inspire more people with disabilities, more people who are blind, to get out there, and to go on cruises.
GLEN: Well, this was fun. I appreciate you coming on the podcast. And may this be the beginning of a connection.
DONOVAN: I certainly hope so. Thank you for letting me share my story. And if anybody wants to reach out to me, I don’t have a website up yet. But I am on Twitter as @DonovanSpeaks and on Instagram as TheBlindGuy_. I guess TheBlindGuy was already taken.
GLEN: Have you had interactions with the other BlindGuy?
DONOVAN: I don’t think so. I think he might be – I think he might deal in window shades because I know I was looking at that as a URL, and there was a bunch of window companies there.
GLEN: My mother used to really laugh when I was growing up because there were people who sold Venetian blinds. And they had on the side of their vehicles, “There’s a blind man driving this truck.”
DONOVAN: See, I remember as a nine-year-old kid answering the door one afternoon, and the guy is very brusque. He’s like, “Hello. Blind man.” And I’m thinking, whoa, how did he know so quickly? And it turns out he was just there for the window blinds. I actually think it would be a great TV commercial for a new blind company. He could be, “Hi, I’m the blind guy.” And I’d be there with the cane. “I’m the blind guy, too.”
GLEN: Yes, I see you have your next job in advertising.
DONOVAN: Perhaps, you know. Since radio is, you know, there’s no money in that anymore, sadly. Otherwise I would have pursued that path.
GLEN: Yeah. Well, thank you. Thank you very much.
DONOVAN: Oh, my pleasure.
GLEN: In the next few minutes, I’m going to take on the ambitious project of introducing you to Visual Studio Code. And the first thing I want to tell you is Visual Studio Code is not Visual Studio, even though they share those two words in their names. Visual Studio has been around since 1997. It’s become increasingly accessible over the years, and JAWS works well with it.
But in 2015, Microsoft first released Visual Studio Code. They released it as an open source project. It runs on Windows, Mac, and Linux, and has been really taking the developer community by a storm. And even more importantly for the purpose of this podcast, it is amazingly accessible. Yes, there’s the occasional accessibility wrinkle. But by and large, it’s far easier, far faster, and far more efficient than writing your code in Notepad and learning arcane commands to work at the command line, especially when you’re learning a language for the first time.
I’m going to be showing you Visual Studio Code with Python, simply because it has the fewest moving parts when it comes to setting it up. But even if you don’t care about Python, if you have any interest in anything from HTML and JavaScript, to Python, to Rust, to C#, Visual Studio Code may be a great place for you to start. Yes, you do need to know a few shortcut keys, but you can learn them iteratively. You don’t need to know all of them at once. And the more shortcuts you know, the faster and more productive you’ll be.
So with those preliminaries out of the way, I direct you to code.visualstudio.com, and that’s where you can download the Windows installer of Visual Studio Code. It’s a pretty straightforward installer, so I’m not going to go through that here. I do recommend at the end where it says “Extra tasks” that you check the box that says “Put an icon on the desktop,” but that’s a personal preference. I just find it to be a quick way of getting things launched. And in fact, I’m on my desktop now. I’ll hit V.
JAWS VOICE: Visual Studio Code, 2 of 74.
GLEN: And press ENTER.
JAWS VOICE: Visual Studio Code. Document read-only. Overview of how to get up to speed with your editor.document.
GLEN: One of the reasons that Visual Studio Code is so accessible is that there are so many things that out of the box have shortcut keys. But even if a command that you use a lot isn’t already assigned to a shortcut, virtually everything in Visual Studio Code that can be done can be assigned to a shortcut. And the way you get to all of the commands is by pressing CTRL+SHIFT+P.
JAWS VOICE: Quick input list box. Add browser breakpoint, 1 of 576.
GLEN: And if we type here, we’ll actually filter the available commands. So I’m going to type in “install.”
JAWS VOICE: Developer:install extension from location... 1 of 8.
GLEN: There are eight commands that include the word “install.” I’m going to arrow down now.
JAWS VOICE: Developer:reinstall extension... Extensions:disable all installed. Extensions:install extensions, 4 of 8.
GLEN: That’s the one we’re interested in at the moment. I’m going to press ENTER here.
JAWS VOICE: Search extensions in Marketplace Editor.
GLEN: I’m going to type in “Python” because that’s the extension we’re going to be using a little later on.
JAWS VOICE: 876 extensions found in the Marketplace section.
GLEN: So there apparently are a lot of Python extensions. But these are typically ordered in order of popularity. So I’m going to arrow down now. You either have to arrow down, which I just tried and failed at, or you need to tab once to get to the list of results. I’ll do that now.
JAWS VOICE: Extensions list box.
GLEN: And arrow down.
JAWS VOICE: Python 202341 Publisher Microsoft IntelliSense (pylons), linting, debugging (multi-dash threaded remote), Jupyter Notebooks, code formatting, refactoring, unit tests and more, 1 of 876.
GLEN: Rather than pressing ENTER, which will open a document describing the extension and for which you’ll need to turn the virtual cursor on, if you just tab once...
JAWS VOICE: Toolbar install button.
GLEN: ...when you get to a toolbar, there’s only one tab stop on that toolbar. So if you didn’t care about the install button, you could arrow left and right. But in this case, I’m going to press ENTER.
JAWS VOICE: Installing extension. Python started. An editor is now open with more details on this extension. Start untitled-1-visual studio code document.
GLEN: The Python extension is now installed, waiting to be of service. And it will wait for a moment while I talk about the concept of workspaces. First of all, it’s not absolutely required that you put all files in a workspace. You can open individual files anywhere in your file system. But workspaces tend to help organize things, and they also give you more control as projects become more complicated. And for this reason I suggest that you use them. They’re nothing more than plain old folders or directories. But you do need to create them before you can open them in Visual Studio Code. And I couldn’t find a menu option or a Visual Studio Code command for doing it.
But there’s no shortage of ways to create a folder, including Windows Explorer, or the command prompt, or even the terminal within VS Code itself. In our case, I’ve created a Python test folder inside a Scratch folder. And we’re going to open that now. You could get there by going to the File menu and arrowing down. But there is a shortcut, which is holding down the CTRL key and pressing K followed by O.
JAWS VOICE: Open folder dialog.
GLEN: I tend to type in the names of files and directories if the path is fairly short. But if you don’t like that, this is a standard file open dialog, and so you could go pick the directory of your choice. I’ll type in d:\scratch\python test, and I’ll do a say line.
JAWS VOICE: Folder:edit d:\scratch\python test.
GLEN: And pressing ENTER here does not actually open the folder. You need to tab once.
JAWS VOICE: Select folder button.
GLEN: And press ENTER here.
JAWS VOICE: Welcome - Visual Studio Code. Info. Do you trust the authors of the files in this folder? Code provides features that may automatically execute files in this folder. If you don’t trust the authors of these files, we recommend to continue in restricted mode as the files may be malicious. See our docs to learn more. “Yes, I trust the authors” button.
GLEN: And “Yes, I trust the authors” is the default. I’ll press ENTER.
JAWS VOICE: Python test - Visual Studio Code document.
GLEN: The folder and workspace are now open, but there are no files there. At some point, when files are there, you’ll find a couple of commands particularly useful. CTRL+SHIFT+E will show you a tree of all the files and subdirectories within the workspace. And CTRL+E will let you search for a file by name. But the task of the moment is to create a new Python file. I find the easiest way to do this is by pressing CTRL+N.
JAWS VOICE: Untitled - one editor.
GLEN: And I immediately save it. So if I do CTRL+S...
JAWS VOICE: Save as dialog. File name:edit combo.
GLEN: And if I say “test1.py,” that will automatically save it as a Python file.
JAWS VOICE: Test1.py editor.
GLEN: So we have now created a file. We’re in that file. It’s kind of traditional that the first program people write in the language does nothing more than write the words “Hello World.” And so we’ll do that here. Python has a command called “Print.” And if I type “P”...
JAWS VOICE: Suggest list box. Pass, 1 of 12.
GLEN: Well, that’s not the command. How about if I add an R?
JAWS VOICE: Print, 1 of 8.
GLEN: To accept this and have it inserted into the document, you need to press either ENTER or TAB. My choice is TAB, and that’s what I’ll be using here. When I press it, you’ll hear the name of our Python file. And that simply means that Autocomplete has closed, and I’m back in the editor.
JAWS VOICE: Test1.py edit. Contains text.
GLEN: And if I do a say line...
JAWS VOICE: Print.
GLEN: I now want to put the quoted string “Hello World” in a set of parentheses after the word “Print.” And when I hit the left parenthesis, VS Code will automatically put in a matching right parenthesis. And this works for brackets, braces, quotes, and parentheses. So just be aware of that and that you don’t need to type in the matching right-hand delimiter, but you do need to arrow past it. I’m about to type left parenthesis. And when I do, VS Code will read the terse documentation of the print function.
JAWS VOICE: Print (value... sep = end = \n file = size.stdout flush = false) prints the values to a stream or to size.stdout by default.
GLEN: I’m just going to add the quoted string “Hello World” in between these parentheses. I’ll do a say line.
JAWS VOICE: Print (“Hello World”).
GLEN: So there we have our one-line program. And the way you run such a program in VS Code, if you don’t want to run in the debugger, is by pressing CTRL+F5. And even though we are explicitly not running in the debugger, when the program ends, VS Code will say “Debugging stopped.”
JAWS VOICE: Debugging stopped. Greater d: ;cd d:\scratch\python test; c:\scratch\python 300...
GLEN: VS Code tends to echo a lot of useless stuff when you run a program like this. I find it much easier to use a relatively newly added feature in the VS Code terminal for reviewing output. So you switch between your active editor and the terminal with CTRL+`. First time you’ll move to the terminal; second time you’ll move back to the editor. So I’ll press that key now.
JAWS VOICE: Terminal one Python debug console use ALT+F1 for terminal accessibility help edit.
GLEN: And if I SHIFT+TAB now...
JAWS VOICE: Editor content edit. Contains text.
GLEN: I’ll do CTRL+N to get to the bottom of the output.
JAWS VOICE: Bottom of file.
GLEN: And then arrow up.
JAWS VOICE: Hello World.
GLEN: And if I arrow up again.
JAWS VOICE: D:\scratch\python test\test1.py.
GLEN: That’s indicating that that’s the program that was run. I’ll do CTRL+` to get back to my editor.
JAWS VOICE: Test1.py editor. Print (“Hello World”).
GLEN: So the easiest way to delete all of this would be to do a Select All and then hit DELETE or BACKSPACE. But I want to mention a powerful feature in Visual Studio Code. And that is that you can set a mark not unlike JAWS setting a mark itself in the virtual buffer. But this is Visual Studio Code specific. So the first thing we want to do is move to the beginning of the line with CTRL+HOME.
JAWS VOICE: Top of file. Print P.
GLEN: And I’m on the P. So now I can hold down the CTRL key, press K followed by B to set the mark.
JAWS VOICE: Read-only. Anchor set at one, one.
GLEN: And now I will do CTRL+N to get to the bottom of the file.
JAWS VOICE: Bottom of file. Print (“Hello World”).
GLEN: And there’s only one line here, which is why we’re speaking the same thing. And now I can do CTRL+K, CTRL+K.
JAWS VOICE: Read-only. Selected. Print (“Hello World”).
GLEN: And if I do CTRL+X to cut or hit DELETE or do any number of other things, it’ll be just like manually selecting with the SHIFT and the ARROW keys.
JAWS VOICE: Cut selection to clipboard.
GLEN: Python is one of the few programming languages where indentation matters. And the default configuration of JAWS at this point for Visual Studio Code does not speak indented characters. And if you’re going to be working in Python, you will want to enable that option. Go to Settings Center with JAWS Key+6 on the number row, search for “Say indented characters,” enable that checkbox, and you’ll be all set.
What I want to show you now is how the debugger works. But in order to do that, we actually need something of substance. And this admittedly is of limited substance. I have stopped and added a function to VS Code. And what a function is, it’s a way of taking several steps and giving those steps a name. So in this case, there are very few steps because it’s for illustrative purposes. I’ve created a function in Python called addNumbers. And addNumbers takes in two numbers, or in this case what are called “parameters.” It adds the two of them, and it returns the result of adding the two of them.
So let me just talk you through this as opposed to having JAWS read it. A function begins in Python with the word “def,” D E F. Then you give it a name, in my case addNumbers. You have an open parenthesis and you list the parameters, the values that are going to be passed in when the function is called. In this case, I’ve called them “first” and “second.” So within the parenthesis is (first,second): and then a new line. And the new line is going to be indented because that’s how function boundaries are delineated in Python.
And this function has two lines. Result, so we’re setting up a new variable, = first + second. And then the second line, also indented, is return result. When we finally call this function, let’s say we call addNumbers, and then in parenthesis pass in the values (three,four). What that’s going to say is the function will assign three to the parameter that we’ve called first, and it’ll assign four to the parameter we called second. And then when we add them, the result it’s going to return is seven. So let’s have this program as its sole operation print out the result of calling the addNumbers function. So I’ll insert a print by typing “pr.”
JAWS VOICE: Suggest list box. Pass. Print, 1 of 8.
GLEN: I’ll hit TAB.
JAWS VOICE: Test1.pyedit. Contains text.
GLEN: Left paren.
JAWS VOICE: Star values:object comma. Print left paren value comma.
GLEN: That’s the beginning of the recitation of the print documentation. I’ll type an A.
JAWS VOICE: Suggest list box. And 1 of 19.
GLEN: And a D.
JAWS VOICE: AddNumbers. 1 of 5.
GLEN: I’ll press TAB to complete that.
JAWS VOICE: Test1.pyedit.
GLEN: Let me insert another left paren.
JAWS VOICE: First:any comma. Hint.
GLEN: I’m being prompted now since we’re invoking this function to provide values. I’ll type in three and a comma.
JAWS VOICE: Second:any comma. Hint.
GLEN: Type four. And now if I do a say line...
JAWS VOICE: Print (addNumbers (three,four)).
GLEN: I’m going to hit HOME to get to the beginning of this print line.
JAWS VOICE: P.
GLEN: I’m going to do CTRL+RIGHT ARROW until I get to addNumbers.
JAWS VOICE: Left paren addNumbers.
GLEN: Now let’s assume that I didn’t know where this function was defined, but I wanted to know exactly what it did. I can press F12 and be taken to the definition.
JAWS VOICE: Found one symbol in d:\scratch\python test\test1.py.
GLEN: It doesn’t announce where we’ve been placed. But if I do a say line...
JAWS VOICE: Def addNumbers (first,second):.
GLEN: So that’s the definition of the function because it starts with the word “def.” I’m going to arrow down once.
JAWS VOICE: Four spaces result equals first plus second.
GLEN: We’re going to set a breakpoint. And a breakpoint means when the program gets to this point it should stop. I’m going to hit F9.
JAWS VOICE: Added breakpoint comma line two comma file d:\scratch\python test\test1.py.
GLEN: And you’ll hear that kathunk not only when you set the breakpoint, but also when you arrow to the line containing it. So now that our breakpoint is set, I’m going to move to the very bottom of the file after the print line.
JAWS VOICE: Bottom of file, left margin.
GLEN: And I’ll press F5 to start debugging.
JAWS VOICE: Result equals first plus second comma debugging pause comma reason breakpoint comma test1.py:2. Debugging started.
GLEN: So the messages came in slightly the wrong order. But debugging has stopped, and it announced the line that it stopped on. If I do a say line here...
JAWS VOICE: Four spaces result equals first plus second.
GLEN: So it’s moved us back to this line. Sometimes you want to know what the value is of a parameter, a value that was passed into the function or a variable. And sighted folks do this by hovering the mouse over the name of that variable in the editor. Fortunately, there’s a keyboard equivalent, but you have to first move the caret to the variable’s name. So I’ll do CTRL+RIGHT ARROW a couple of times.
JAWS VOICE: Result equals result equals first plus.
GLEN: So it keeps kathunking there because I’m arrowing on a line with a breakpoint. I’m on first. I’ll hold down CTRL and hit K followed by I.
JAWS VOICE: Read-only, three.
GLEN: We need to get out of this with ESCAPE.
JAWS VOICE: Test1.pyedit contains text.
GLEN: And now to run this statement I’ll press F11.
JAWS VOICE: Return result comma debugging pause comma reason step comma test1.py:3.
GLEN: Which means we’re positioned on the return statement. I’m going to do CTRL+RIGHT ARROW.
JAWS VOICE: Result.
GLEN: And CTRL+K CTRL+I.
JAWS VOICE: Read-only, seven.
GLEN: So that’s the result of the computation. At this point I could continue to press F11 to move statement by statement, though there aren’t many more; or I could press F5 to run to the end of the program. Something that I glossed over is the fact that all of us make errors when writing code. And VS Code has a nice feature that will show you a problems list that you can invoke at any point. It’s CTRL+SHIFT+M.
JAWS VOICE: No problems have been detected in the workspace.
GLEN: This is another one of those commands where it toggles. So if I do a say line...
JAWS VOICE: No problems have been detected in the workspace.
GLEN: I’m actually focused on that message. And that turns out to be very useful if you do have problems. I’ll press CTRL+SHIFT+M here.
JAWS VOICE: Test1.pyedit.
GLEN: Let me arrow back up to the first line of the function.
JAWS VOICE: Four spaces result equals first plus second.
GLEN: Let me remove the spaces before the result equals first plus second line.
JAWS VOICE: R.
GLEN: The way that the HOME key works in this case is the first time you press it on a line, you’ll move to the first character on the line. And then the second time you press it, you’ll be at the very beginning, before any indentation. So I’ll hit it a second time.
JAWS VOICE: Space.
GLEN: And delete four times.
JAWS VOICE: Space, space, space, R.
GLEN: Now if I do CTRL+SHIFT+M...
JAWS VOICE: Showing seven problems. Tree view. Selected application control. Error generated by pylons colon expected indented block at line two in character one. 1 of 7.
GLEN: And sometimes errors will careen. So this small change led to a variety of errors. But simply re-indenting will most likely resolve all of them. I’ll hit CTRL+SHIFT+M to get back to the editor.
JAWS VOICE: Test1.py.
GLEN: The other way to get to errors if you don’t really want to see them in a list is to simply press F8.
JAWS VOICE: Alert exclaim. Result equals first plus second comma. Error at two colon one. Expected indented block. Pylons.
GLEN: And in the case of that, you’re not popped into a message buffer. You’re actually on the line of text where the error is.
JAWS VOICE: R.
GLEN: I’m on the R of results. I’ll hit TAB and do a say line.
JAWS VOICE: Four spaces result equals first plus second.
GLEN: And F8 again. If nothing happens, that’s a good sign. That probably means there are no errors. I’ll confirm with CTRL+SHIFT+M.
JAWS VOICE: No problems have been detected in the workspace.
GLEN: And there you have what I hope has been an emboldening overview of Visual Studio Code. Yes, I’ve just scratched the surface; and if you’ve never done any sort of programming before, you probably were lost in certain spots. What I was really hoping to do was prove to you that here’s an environment that’s modern, that’s popular in the broader community, and that has some good accessibility support. And to me that is profoundly enabling. And so I encourage all of you, whether you’re learning PowerShell or Python or any programming language that doesn’t begin with P, to think about Visual Studio Code as an environment for learning.
There’s a starting page related to accessibility. If you search for “Visual Studio Code accessibility” in your favorite search engine, you’ll find that. The Command Palette is your friend. Remember CTRL+SHIFT+P because, even if it’s not the fastest way to get to a command, you can get to all the commands through the Command Palette. It’s also the place where you can assign those that you use a lot to shortcuts. Keep in mind that you will get lost periodically. And I want to mention a couple of strategies, not only for navigating around the UI, but for also getting unlost.
The first of these is F6 because it’s sort of the uber-navigation key in the sense that, no, it doesn’t take you somewhere to have a meal. It moves you around the UI to the various major areas, including the editor and the status bar. In addition to that, if you find yourself with focus in an unexpected location, I would not reach for the virtual PC cursor as your first alternative. Rather, I would do something like go to the tree of files with CTRL+SHIFT+E, or open a specific file with CTRL+E where you can type in part of the filename, or even search for a symbol with CTRL+T.
Please be assured that it took me much longer to record this than the 25 minutes that you spent listening. And I did that because I wanted to show you the high points of Visual Studio Code, not my stumbling. I, too, stumble. But overall, the stumbling is intermingled with a lot of success, and I wish you the same in exploring this environment.
GLEN: That does it for FSCast 228. I’m always delighted to hear from you. And you can write to me at fscast@vispero.com, fscast@vispero.com. A note that I am working on a variety of other projects and so will not be here next month. But Oleg Shevkun, who’s a longtime JAWS user and broadcaster, will be guest-hosting in April. But I will be back in May. You’re not rid of me that easily. I’m Glen Gordon. Thanks very much for listening.