About This Site

This desktop- and mobile-friendly website has been live since the mid 1990s. It hosts hundreds of pages spanning software-related topics including programming, technical education, and industry trends, and all of its code and content has always been both free and advertising free. This site has also always been more about substance than style; while it does keep pace with web fashion, its main focus is on providing tech material for tech readers.

This site works as you'd expect today, but here are a few quick tips. All of this site's content can be reached from its bottom-of-screen toolbar and Find page. Scroll or swipe the toolbar on smaller screens to access all its links (tap first to activate where required); its leftmost "Python Powered" image jumps to this site's home page. Many pages, including this one, also have floating "Top" buttons that jump to page content lists, and dynamic table-of-contents widgets which toggle content links.

Neither specific browsers nor JavaScript are required here, though some features work either best or only if the latter is enabled—including "Top," content widgets, and this site's many image galleries (more galleries here). Most content here renders equally well on mobile and desktop browsers, though at 26 years old and counting, you shouldn't be surprised if some of this site's more ancient pages are still desktop biased.

The rest of this page covers:

Related pages: see also this site's privacy statement, and the story of this site's original home at rmi.net/~lutz.

Updates and Tips

This section logs changes and site-usage tips that have cropped up in recent years:

Oct-2022: The Windows-Chrome scrollbar blues
This site's global bottom-of-page toolbar has gone narrower, as a partial accommodation for Chrome on Windows. Unfortunately, that browser's overlay scrollbars now largely cover toolbar content like this, and it's nearly impossible to operate controls covered by the overlay. Moreover, Windows Chrome's default is still the ugly and intrusive gutters (overlays require an obscure chrome://flags per ahead). Going narrower minimizes the need for toolbar scrolls of either variety, and is a low-impact work-around for overlays.

This is a Windows+Chrome issue only; macOS, Linux, and Android and iOS mobiles do scrollbars better, and Firefox and Edge do them better on Windows. This also smacks of the old Edge URL-overlay bug chronicled here, but Google seems unlikely to provide a fix given their track record and dominance. In fact, this might be dismissed as a single-browser quirk, but for the mind-boggling hold Windows and Chrome have on the PC realm (though Android rules overall, and stats can be gray).

At this writing, Chrome may adopt a new and less obtrusive scrollbar-overlay model pioneered by Edge which would make overlays safe; see the web for more info. But as is, Chrome's Windows default in late 2022 is still scrollbar gutters (which feels like it's 1995), and its overlay scrollbars now break content (which feels rude). Where did browsers get the idea that page space is theirs for the taking?

Going narrower involved both shorter link words and a lower min-width for the scroll cutoff. On PCs, the new min-width doesn't have any effect on typical windows, and ensures that a toolbar scrollbar of any sort will be required only when windows become unusually narrow, or fonts or zoom become unusually large. That is, this makes scrollbars moot except in windows that are atypical for a PC; here's the new cutoff on a small 13" display at 100% zoom. On mobiles, going lower simply preserves former layout, despite space freed by the shorter words. Test for yourself, or find more images here.

All of which may seem a trivial mod, but the alternative is a floating-menubutton redesign, which seems overkill for what's really yet another browser bug. This bug should probably be reported, of course, but this developer has grown overly tired of seeing bug reports languish—and eventually get closed with a "by design" quip. Such is the software field in the 2020s, eh?

Update, Oct-2022: after scouring the web's development forums (really, gossip mills, because that's often all there is to go on sans usable vendor documentation), it turns out that an obscure and browser-specific bit of CSS can hide the overlay-scrollbars bar in most browser/platform combinations:

.footerdiv::-webkit-scrollbar {
  display: none;                 /* Chrome, Safari, Opera, etc. */

.footerdiv {
  -ms-overflow-style: none;      /* IE, old Edge */
  scrollbar-width: none;         /* Firefox */

With that Tower-of-Babel hack, Windows Chrome's disabling overlay indeed goes away in bottom-of-page toolbars, but toolbar scrolling still works when needed (per the original overflow-x: auto). Here's the scene. The same thing happens in all of the seventeen desktop and mobile browsers tested across five platforms, though other browsers don't make overlaid content inoperative the way that Windows Chrome does today.

The downside—and there usually is one for ad-hoc proprietary extensions like this—is that this leaves people in the dark if they have no way to perform a left/right sideways scroll. This might arise if there is no touch screen or gesture-capable touch pad, and the pointing device is unable to issue a sideways scroll. Though likely rare today, mice with neither scroll wheels nor touch surfaces would fall into this category.

To compound this, detecting such limited devices seems a pipe dream; a pointer: fine media query won't cut it. Perhaps worse, if overlay scrollbars are disabled (Chrome's current default), the code above prevents a scrollbar gutter from appearing for the toolbar. Here's the effect; the same goes for macOS if scrollbars are set to Always in General Preferences. Sideways scrolls still work on the toolbar in this state where available, but this rules out disabling overlays as a solution for sideways-challenged pointers: there's nothing to grab onto!

That being said, the scope of this tradeoff may be small:

Despite all this, hiding scrollbars inevitably raises accessibility concerns, and leaves sites affected by Chrome overlays with a dilemma: which user group should be inconvenienced?

Because the audience impacted by the code above is likely smaller than that crippled by Chrome's overlays, and because toolbar scrolls are relatively rare in any event, this code has been adopted as a temporary measure for footer toolbars only, pending better overlay scrollbars in Windows Chrome. If this makes toolbars unscrollable for you, please see the list above for recourses, or simply expand the window till scrolling isn't needed—a fallback made easier by the original mod here to narrow toolbars in general.

And for now, all bets on whether a Chrome fix shows up before a site redesign are officially off...

Feb-2022: Security and showcode.py
The script that displays code and text files nicely on this site recently required an upgrade to avoid displaying files located outside the website's content folder. This cropped up because analytics revealed that someone used an explicit URL and relative path to access the site's /etc/passwd file; the fetch was useless because the file by convention simply forwards to another that's not accessible, but it was sufficiently creepy to warrant the fix. Alas, the world wide web means everyone, for better and worse. Read the seedy details at header "DON'T DISPLAY FILES OUTSIDE THE WEBSITE FOLDER" in the script, and see the new reply from the query.
Feb-2021: Limited dark-mode support
This site has started using CSS media queries to implement a dark theme, where supported by both browsers hosting the site, and devices hosting the browsers. Initially, this is implemented only on the home page—whose prior white background is now a darker grey in dark mode, and a lighter grey otherwise. Dark mode works on recent smartphones, macOS, and Linux; it's available on Windows but not (yet?) in all browsers tested. More pages here may go dark over time, but there's a reasonable argument to be made that text-heavy content, like books, is better in boring black on white.

Update, Nov-2021: the book-links page has now gone dark too, and both that and the home page now always use the dark theme regardless of system settings. Designing for both light and dark is complex, and dark is not that dark here. The home page now also uses rounded corners and collapses its links on narrower displays; web fashion marches on.

Update, Dec-2021: image galleries at this site, all of which are created by thumbspage, now also are darker, with a new default index-page color. It's not OLED dark, but that's easy to config.

Jan-2021: Android Firefox—toolbar bug and work-around
The latest Android Firefox has a new and nasty bug related to its dynamic toolbar, which can both leave empty space and make this site's own bottom-of-page toolbar slide up into page content. This has been seen on Firefox versions 81 through 85; happens when its "Scroll to hide toolbar" is toggled on; and can be triggered by scrolling to hide the browser's toolbar and then changing device orientation. The GUI seems to believe a phantom browser toolbar is still present at page bottom (and in some cases, renders an empty strip for it). To work around, either set the toggle off, or use any other Android browser until this is fixed (which may be soon, given the flurry of reports: here, more). With the toggle-off fix, pages look like this and this, but some naturally lose space in the bargain.

Update, Mar-2022: regrettably, this Android Firefox bug remains unfixed as of version 98, and its report posted by this site was closed as stale without developer attention. In versions 95 through 98, the bug may have also morphed—after a scroll hides the toolbar, the bug can still be triggered by rotating orientation, but also by simply moving a stylus over widgets with hover actions. Here's the before and after of the latter. The only work-around remains toggling "Scroll to hide toolbar" in "Customize" off. Hey Firefox: your dynamic toolbar is still busted a year later; doesn't anyone care?

Update, Oct-2022: if you use the latest Firefox on Android (105.1 at this writing), you'll probably also want to turn off its "Swipe toolbar sideways to switch tabs" in Settings => Customize. Else, it's nearly impossible to operate this site's footer toolbar with a finger, because Firefox steals most swipes near the bottom of the screen—even if they are well above the browser's own toolbar. A stylus helps by providing more touch accuracy, but not everyone has one. Alas, this site's pages seem to keep running afoul of browser land grabs!

Update, Oct-2022: and if you use Firefox on Linux (only), you may notice that its versions 105 and 106 cover toolbar items with URL mouse-hover popups—just like Edge once did in the now-distant past. There is no work-around for this, and a bug fix seems fanciful given all of the above; see other browsers.

Jan-2021: Android Opera—fullscreen, "/*" bug
On the upside, Android Opera now has a nice multi-page fullscreen mode in landscape orientation that maximizes space for content; tap the rectangular icon on the right side of its toolbar. Here's the effect before and after the tap. Chrome badly needs something similar; its address bar won't hide on pages that don't scroll, and JavaScript fullscreen (e.g., thumbspage's Full) lasts for just one page. Android Opera also fixed an odd bug reported by this site, which truncated some pages at a /* in a <pre> block (and elsewhere); it was noted in version 53, but happily fixed by 60. Things get better too.

Update, Jan-2022: unfortunately, this Android Opera bug returned a few releases later, by version 65. The work-around at this site required both a custom parsing script, and manual replacement of all /* with &#47;* in three of eleven pages having this pattern here—including this and this. Alas, Opera appears to be performing some sort of naive page parsing—and appears to have discovered it anew. One person's "agile" is another's "reckless thrashing."

Aug-2020: iOS tip—page zooms on small devices
This site renders well in portrait (vertical) orientation on mobile-device screens as small as 4"; here's its home page on a 4" iPod. That said, some pages may require entire-page horizontal scrolls on smaller devices if you use the new "aA" menu's page-zoom option in iOS 13 Safari. This impacts a handful of pages on this site—including its home page. For such pages, the new Safari option is not a font zoom; it's really a screen zoom that works like a pinch/spread with fixed stops.

Specifically, this site's home page fits well in portrait mode up to 125% page zoom on the latest iPhone SE's 4.7" display, but only up to 100% on a 4" iPod. At higher zooms, your best options are a minor scroll where required; rotating to landscape for fit-to-screen viewing; or simply lowering your page-zoom level. Page redesigns or browser changes may address this someday, but the work-arounds are easy, screen zooms are tough to accommodate in full, and minuscule displays will never be ideal for text-heavy websites.

It's worth adding that this issue—arguably an iOS Safari bug—does not occur in Android Chrome at any practical font or screen zoom. Here's this Chrome's normal and zoomed display; unlike Safari, fonts are increased without overflowing the viewport. Though no vendor is flux free, Apple's track record of breaking sites and programs with opinion-based morph is much too large an insert for this note.

Update, Oct-2022: this site's homepage now works without full-page horizontal scrolls on a 4" iPod up to 115% zoom in Safari, after its buttons shaved 10 pixels each for unrelated aesthetics. It's not pretty and 100% is still better, but this is probably a worst-case device for web views (with an audience size to match).

May-2020: iOS tip—hide Safari toolbars in iOS 13+
iOS Safari users: this site works best if you hide Safari's toolbars using the new "aA" menu option in iOS 13. Without this setting, this site's bottom-of-page toolbar buttons must be tapped twice: once to restore Safari's toolbar, and again to activate the button. With the new setting, this site's page toolbars work perfectly in iOS Safari, and as they do in all other browsers today. As a bonus, the new setting also fixes landscape views of thumbspage image galleries.
Mar-2020: Amazon Lightsail ⇒ faster site
This site is now jaw-droppingly faster, thanks to its new home on an Amazon Lightsail VPS. Its former GoDaddy hosting became frequently and unusably slow, plan upgrades didn't help, and tech support did little but slam the account with bogus fees. The image-size reductions of the next note are still a win; even though large images were not the culprit behind speed issues, it's still not great to push 6M images on people with limited access.
Mar-2020: Images shrunk globally
In light of recent testing on new hosting and broadband providers, the larger images in this site are being shrunk for quicker downloads, using a custom script. Read the story behind the script here. This change is being applied gradually, but should appear in a browser near you soon. It was long resisted for quality, but smaller images are politer to users with quotas, and demand for the web's bandwidth grows as fast as its capacity.
Nov-2019: In-page navigation controls
Many of this site's larger pages have grown floating Top buttons, and a few can now toggle their table of contents (tap those links for demos). These tools are being rolled out to more recent and popular pages first. Both require JavaScript, but former static schemes are still used if JavaScript is disabled. The new buttons replace numerous static image links, but sacrifice screen space for a subjective improvement in usability (the button may cover some content at page bottom); feedback on the tradeoff is welcome.

Nov-2019: PC scrollbars tips

(See also the related and later note above)

Subtle thing: the preceding note's new Top buttons may slightly overlap page-bottom toolbars like this when viewed with most desktop browsers in very small and narrow PC windows, because these browsers reserve extra space for a scrollbar. This can happen on Windows, Linux, and macOS, though not on macOS when using a touchpad and the General preferences' automatic scrollbar-hiding default (which acts much like a mobile device). This behavior is also intentional: it allows more space for content in this atypical and cramped context, and can be avoided by simply enlarging your PC browser window. Moreover, always moving Top up would penalize normal cases by obscuring more content; positioning Top based on screen width would require JavaScript and may be inaccurate; and portable toolbar-less designs would require JavaScript for basic site usage—an explicit anti-goal here.

Update—minimizing scrollbars in Chrome: but if you really want your Top to fly free, at least for Chrome on Windows and Linux (where it's a.k.a. Chromium), it's possible to hide scrollbars and keep Top above toolbars, by setting a special flag like this: (1) type "chrome://flags" in Chrome's top-of-window address box; (2) type "Overlay Scrollbars" in the result page's search box; (3) select "Enabled" in the result page's pulldown list; and (4) select "Relaunch" to restart Chrome and apply the change. Here's the flag on Linux. You may also have to tweak some mouse or touchpad gestures, but the net effect allows scrolls with swipes in these Chromes, just like the default for all browsers on macOS, and the norm on mobiles. If there is an equivalent for Firefox or Edge today, it seems an even better kept secret.

Update, Mar-2022—ditto for Firefox and Edge: with the advent of overlay scrollbars on Windows 11, both Firefox and Edge now also support minimal scrollbars, which roughly mimic macOS and mobile, don't take up as much UI space, and react to swipe gestures on touch pads and screens. Enable this in the latest versions of these browsers as follows:

The effects are the similar to that in Chrome, minimizing both full-page scrollbars, as well as scrollbars that otherwise appear on page toolbars and tables when windows are too narrow to show full content. This should probably be a platform default today, but at least it's an option. For more tips, search the web for Firefox and Edge. Chrome still supports its own overlay flag and style at this writing, and may add Windows 11-style bars soon. In the plus column, this site's toolbar also shrunk recently, rendering PC scrollbars less common overall, and you can still simply resize your window to avoid this scrollbar circus in full.

Jun-2019: Privacy statement and changes
This site now has a privacy statement. Per that page, this site has also changed its traffic-analytics policy to anonymize IP addresses received by analytics hosts. Analytics is a useful tool that helps focus website work, but IP-address obfuscation is a crucial privacy protection; without it, analytics could be easily misused as a profiling Trojan horse—especially when run by entities that profit from your personal information (yes, that means Google).
Mar-2019: Android Chrome—toolbar tip
On one of this site's test devices, Android Chrome just sprouted a bottom-of-screen toolbar which can reduce space for actual content, and make page-bottom toolbars harder to scroll. It's unclear if this rollout was either broad or intentional, but the effect is obviously subpar. If it ever shows up for you, you can disable the new toolbar and reclaim your phone's display: simply open Chrome, enter "chrome://flags" in the address bar, search for "Chrome Duet" in the result, select "Disabled" in the entry, and restart Chrome. See the Nov-2019 scrollbar tip above for a screenshot of the flags interface. This isn't strictly required for this site, but content should never take a back seat to browsers—as in this Chrome Duet scene, where browser controls take up almost as much space as the page. Down in front, Chrome!
Aug-2018: HTTPS, mandatory and pointless
This site now grudgingly uses HTTPS, because Google's desktop Chrome browser began rudely branding every page here Not Secure. As a result, this site won't work if its SSL certificate grows unusable. This was both pointless and ironic: this site's sole user input is a search term—a datum upon which Google built its financial empire. But who could hate a company that can manage to blend monopoly and hypocrisy in a single step? It's a good thing we have Google to look out for our privacy. Terrific company, Google. Terrific...
Jun-2018: Edge fixes its URL overlay bug (finally!)
Microsoft's Edge has finally fixed its toolbar-overlay bug. Version 42 correctly displays URLs above hovered-over links, unlike version 41 and earlier. Since there's not much Windows 10 users can do to avoid the update that includes the fix, Edge has joined the ranks of desktop browsers usable for this site. Read more about the 3-year saga and its resolution.
Feb-2018: Mobile-friendly conversion
Most of this site is now explicitly mobile friendly and device neutral, thanks to HTML viewport settings; CSS magic to scale images and scroll toolbars, tables, and code; assorted page redesigns; and the copious free time of the site proprietor. The CSS tricks also provided a temporary workaround for a toolbar-overlay desktop caveat noted below.


This site grew up with and marginally prefers to be viewed on desktop browsers. It has been verified to render well on all desktop browsers in common use today—including Chrome, Firefox, Safari, Opera, Internet Explorer, and Edge. Per the updates above, a desktop-only caveat regarding toolbar overlays on URL hovers in Edge and Firefox was initially addressed by redesign, and later made moot by fixes in these browsers.

This site can also be read on and has been optimized specifically for mobile browsers—including Chrome, Safari, Firefox, and Opera. Although nearly all content here is now mobile friendly, some pages may still be best viewed in landscape mode, due to this site's wealth of text-oriented material (see also the Safari notes above). There's more on mobile-browser usage ahead.


In terms of tech and design, this site uses:

Some of the above is orchestrated by the site's .htaccess and CSS files. JavaScript is also used, but is optional, and run only for anonymous analytics, photo viewers, and in-page navigation if enabled (to see how, view the source of this page, an image viewer, or a page with navigation controls). Mobile-device support employs additional HTML and CSS techniques, per the next section.


This site is readable on all mobile browsers, and as of February 2018 has been heavily tuned to support smaller screens specifically. Mobile viewport settings alone worsened as many aspects as they improved, but usability issues were fixed with extra design changes, including:

Desktop users: shrink your window to simulate these changes' effects, or use your browser's responsive-design developer views; they are especially helpful on smaller screens. You can also browse mobile-device screenshots here.

That said, despite the redesign, a few parts of this site are still less than ideal on mobile devices, and others may never be optimized for mobile use. Code listings, for example, may require swipes to view in full; the class workbook is legacy desktop content generated by Word that cannot be easily changed; and the HTML user guides and screenshot galleries of desktop-only programs here have been converted, but for online use only.

In addition, given the volume of content here—most of which is text based and some of which dates back to the mid-1990s—landscape orientation may work better for some pages on smaller screens. Naturally, performance and preference may vary per device, browser, and user, and some browsers have reading-mode converters and text-scaling settings that may further improve user experience.

Like them or not, smaller screens are convenient but inherently limited; the goal here is to accommodate by enhanced style, not to pander by reduced substance. This site's traffic is currently 70–75% desktop browsers (depending on when it's checked), and its main reason for being is to support readers of books and learners of code. If you're not interested in reading words, well, how did you ever get this far?...

[Home page] Books Code Blog Python Author Train Find ©M.Lutz