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 search 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. Some pages also have floating "Top" buttons that jump to page content lists, and neither specific browsers nor JavaScript are required here, though some features work either best or only if the latter is enabled (including "Top" and image galleries.)

The rest of this page covers recent site-wide updates; notes on browsers; development tools used in this site's construction; and support for mobile devices. Related pages: see also this site's privacy statement, and the story of this site's original home at rmi.net/~lutz.


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

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.
Jan-2021: Android browser bugs and fixes
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.

On the bright side, Android Opera now has a great multi-page fullscreen mode in landscape orientation that maximizes space for content; tap the rectangular icon all the way to the right on its toolbar. Here's the effect before and after the tap. Chrome could really use 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 pages at a /* in a <pre> block. Stuff gets better too.

Aug-2020: page zooms on small iOS 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 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.

May-2020: 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 rolled out over time, 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
Some of this site's larger pages have grown floating Top buttons, and a few can now toggle their table of contents. 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; feedback on the tradeoff is welcome.

Subtle thing: the new Top buttons may slightly overlap page-bottom toolbars like this when viewed with desktop browsers in smaller PC windows (except when using the scrollbar-hiding default on Mac OS). This is intentional: it allows more space for content in this atypical and cramped context, and portable toolbar-less designs would require JavaScript for basic site usage—an explicit anti-goal here.

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
Android Chrome just sprouted a bottom-of-screen toolbar which can reduce space for actual content, and make page-bottom toolbars harder to scroll. To disable the new toolbar and reclaim your phone's display: open Chrome, enter "chrome://flags" in the address bar, search for "Chrome Duet" in the result, select "Disabled" in the entry, and restart Chrome. This isn't required for this site, but content should never take a back seat to browsers.
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
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 75–85% 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] Books Programs Blog Python Author Training Search Email ©M.Lutz