I installed LibreWolf on my Linux Mint system after reading about it on a fellow blogger’s site (see link below). It installed easily, appeared highly performant, and even took the tab fix I’d written about for Firefox nearly two years ago (again, see link below). I wanted to try this alternative to Firefox because of all the recent drama about how Firefox will now handle personal data; it didn’t go down well at all with a lot of users, myself included. But long before all this happened, I frankly got tired of all the limitations I kept running into using Firefox, so I switched to Vivaldi and haven’t looked back. But hope springs eternal, and I still have a soft spot in my heart for Firefox when it was young and pure of heart. So I decided to install LibreWolf and see if it could rekindle a bit of the old Firefox magic.
After following the clear installation instructions for installing LibreWolf on my Linux Mint system, I tried to use LibreWolf to log into my GitHub account using my Yubico security key. That’s when I got the web page at the top of this post. My Yubico key works just fine with Vivaldi, Google Chrome, and original Firefox on my Linux Mint system. Why LibreWolf, which bills itself as a more secure rebuild of Firefox won’t support my Yubico key is beyond me. That lack of full support is a hard failure as far as I’m concerned. I won’t get rid of LibreWolf as I have more than enough disk space to let it sit on the “shelf” while it matures a bit more. I’ll check out any new versions that drop and see if this problem gets fixed. But if you’re like me and use Firefox with a hardware passkey to log into sites that support it, then I’d give a long hard thought about replacing Firefox with LibreWolf, no matter how you might feel about Firefox at the moment. You will not be happy with that decision, I assure you.
LibreWolf — https://librewolf.net
Firefox deletes promise to never sell personal data, asks users not to panic — https://arstechnica.com/tech-policy/2025/02/firefox-deletes-promise-to-never-sell-personal-data-asks-users-not-to-panic/
Yubico — https://www.yubico.com
]]>If you copy this into an iPhone app that tracks RSS feeds, such as Inoreader (see the example above), then you can follow along when I post a new entry. This might be better than getting an email every time I make a post, as it keeps the clutter out of your inbox. Inoreader also has a web page ( https://www.inoreader.com ), so you can follow along in your browser if that’s your wish.
However, Inoreader charges a fee if you want their professional capabilities. If you don’t want to pay anything, and you’d rather follow along on your tablet or personal computer, then I recommend that you install Vivaldi (it’s free) and then click the RSS feed link above, like so:
If you then click the Follow Feed button, you’ll wind up with the following dialog:
I’d suggest that you change the refresh interval to something like every day, or perhaps every week. Once it’s configured, finish the process by clicking Add Feed.
This is what a full blown RSS feed looks like in Vivaldi. What I like about this view is how the entries are down one column, and the far right pane is used to hold the content.
I’m slowly adding entries to my Vivaldi browser as I use Vivaldi for so much more than reading RSS feeds. I may not keep Inoreader on my iPhone for much longer. I spend considerable time in my PC’s browser, not so much in any application on my iPhone. And I’m not a fan of the constant “buy the pro plan” blurbs that keep popping up (not just on Inoreader but on a lot of other iOS applications that say they’re free with a paid ‘pro’ plan as well).
One last bit of administrative trivia: I’ve set the maximum number of articles you can get the first time to 20. Hopefully this will keep you occupied the first time you try this out.
]]>I’ve been a solid desktop Vivaldi user for a number of years on Linux, macOS, and Windows. I still continue to use it on the macOS and Windows desktop, having switched back to Firefox on Linux Mint because Firefox works better on Linux Mint for me. But trying to use Vivaldi on Apple’s mobile operating systems has been second rate compared to Safari, which is a bit weird considering that Apple forces everyone to use the same Webkit engine that Safari uses. What follows are two examples of site rendering, Safari first then Vivaldi.
TheRegister might not be the “best” site to browse, but I enjoy its eclectic humor and the subjects it covers. I’ve been reading this site for years. Note how Safari renders the page with illustrative images scattered across the page. Also note the white gaps, one across the top, and one down on the lower right. This is where ads would go if I didn’t have an ad blocker installed on my iPad.
Here’s the same page in the Vivaldi browser, Note how ads are showing up across the top and down the right side, and how there are no, repeat no, illustrative images like there are in the Safari view.
Vivaldi performs equally strangely with other sites. For instance, The Verge likes to write articles with lots of X tweets quoted in the body of the article. Under Safari I can see those tweets (xeets?), but under Vivaldi there are big blank gaps where nothing is shown. And on it goes, with Safari doing a much better job of rendering sites than Vivaldi.
These are just the problems on an iPad. Trying to use Vivaldi on an iPhone is one of the worst experiences I’ve ever endured, so much so that Vivaldi lasted about 30 minutes before I decided I’d had enough and deleted it. I’m about ready to remove it from my iPad as well.
Is Vivaldi on mobile any good? Under Android, the answer is a resounding ‘yes’. I have a Samsung Galaxy Tab S6 Lite 2020 currently running Android 13. I started using Google Chrome on the S6 until I got so tired of the ads that I installed Vivaldi. Once Vivaldi was on the S6 and I started using it, it quickly became apparent that the only way to surf the web on the S6 was with Vivaldi and Vivaldi’s Tracking and Ad Blocking set to its highest level, Block Trackers and Ads. Vivaldi on Android at that setting is head-and-shoulders superior to Vivaldi on iOS at any tracking level.
]]>I finally decided I’d had enough. As I’ve written earlier I’d been visiting the site fewer and fewer times. The last gap between visits was nearly three weeks. That was the point I decided I might as well cut it loose. I’d already asked for and downloaded a full copy of all my tweets, going back to 2011, or 12 years. It took nearly three days to get the archive, and when I downloaded it, I looked inside it once, and haven’t looked at it since. That was back in January. You can’t just kill the account. You have to go through a process of deactivation, and then wait 30 more days. If after 30 days you haven’t logged back in then your account is deleted. I guess that’s to give you a second chance to reconsider your choice to leave.
Sorry, I won’t reconsider. I have my tiny corner on Mastodon, and that’s quite enough for me.
]]>Tomcat provided an opportunity for me to learn how to write web-based applications using the then-new Servlet and Java Server Pages (JSP) specification implementation. I also learned how to wire MySQL into the back end of Tomcat, and used that to hold quite a bit of the data our lab was generating at the time. Another opportunity it provided was hosting on various operating systems. The first implmentation of our Tomcat lab site was on a small Windows 2000 system sitting in a corner and unused by the lab staff. It was quickly moved over to a Sun box running Solaris, where it stayed for about a year. The following year we took that old Windows 2000 box and installed Red Hat Linux 7 (not RHEL!) on it, and moved the lab site over to it and brought it all up. It stayed there for the rest of the time I worked in the lab (I left in 2004). It was still running when I returned to the lab in 2013, although by that time that stand-alone system had been imaged and moved to a VMware virtual machine.
I’m running an instance of Tomcat version 10.0.23. I wanted to brush up my very rusty skills and knowledge, and see what has changed across the years (nearly two decades, in point of fact) since I last worked with Tomcat. Since this is a development-only deployment it’s installed in my local development folder. To make things as easy as possible for me, here is how I have my Tomcat configuration file set up.
<tomcat-users xmlns="http://tomcat.apache.org/xml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://tomcat.apache.org/xml tomcat-users.xsd" version="1.0"> <role rolename="admin"/> <role rolename="admin-gui"/> <role rolename="admin=script"/> <role rolename="manager-gui"/> <role rolename="manager-script"/> <role rolename="manager-jmx"/> <role rolename="manager-status"/> <user username="admin" password="admin" roles="manager-gui, manager-script, manager-jmx, manager-status, admin-gui, admin-script"/></tomcat-users>
I’ve defined all the role names and assigned all the roles to one username, admin. See lines 5-12. Remember this is a development deployment local to my machine, not something in production. This allows me to work with every page provided by the stock Tomcat web pages.
]]>Frankly I’m beginning to wonder if all this “tracking protection” is pretty much bogus from everyone, especially Mozilla.
]]>As of today I’m saying to entropy and general human greed, “OK, You win.” Hyperlinking on this site is a thing of the past. And in case you ask, no, I won’t go back to all my older posts and remove them. That’s as bad as finding and fixing all the broken links.
]]>Etcher ticks a number of key boxes for me:
That last bullet is what makes it a full keeper for me, as well as the tool I now point novices towards who want to work with the Raspberry Pi and want to create their own micro SDHC cards. It is absolutely as simple as starting the application, pointing it towards the image, and then plugging in the device to be flashed. Etcher finds the device automatically, making it dead simple to click the button and start the image copy to the device. No more tricky and down-right dangerous CLI dances with mount, umount, and dd.
Other Electron-based applications I now use are Atom, the editor, and Slack. There’s a whole bunch more out there, and the tooling to write even more is available where-ever there’s tooling for writing web applications. Java isn’t going to die anytime soon as it has a lock on a lot of legacy software. But that’s the same formidable block that Microsoft Windows posed back in the day, and we’ve seen where Microsoft is today, especially in mobile. Rather than complain about how bad Oracle and Java have become, my energy would be better spent promoting Electron and other foundational products and tools as better solutions than Java, even Java 8. It really is time to move on.
The application is extremely easy to download and install on the Mac. Once downloaded, you single click the Download folder in the Doc, single click the DMG file to start the load, and then just drag and drop the Firefox app into the App folder. Extremely simple, foolproof, with just enough control to let you make that final installation decision.
Once “installed” Firefox starts up like any modern browser should on this platform and goes to work. During first time startup Firefox will ask if you want it to import other browser’s data it finds on your system. It asked me about Safari and Chrome, but interestingly enough, not Vivaldi. I chose to have it import all my Chrome links and data. It was supposed to also import my login passwords that I have for certain sites, but I went to one (my WordPress blog) and I still had to log in with username and password. Not such a big deal, but it’s interesting none-the-less.
Operationally it’s as fast and smooth as you’d like, and no different than any of the other browsers I currently run on my MBP. I will say that the MBP I own is a mid-2015 15 inch with a 2.8 GHz i7, 16GB of DRAM, and a 1TB SSD. On this platform nothing is truly slow. But it is nice to see applications that are designed and compiled to be as performant as reasonably possible. That’s what I find with the current Firefox, a reasonably performant web browser, on par with Vivaldi, and faster than Chrome.
There are several reasons for me to follow Firefox. The first is that Firefox does not carry a copy of Flash around like Chrome does (Vivaldi appears to not have that either). The second is that Firefox looks to be a target platform for Rust language development, Rust being another Mozilla Foundation project. According to the Rust blog:
Second, there’s Mozilla. They’ve long been developing Servo as a research browser engine in Rust, but their first production Rust code shipped through a different vehicle: Firefox. In Firefox 45, without any fanfare, Rust code for mp4 metadata parsing went out to OSX and 64-bit Linux users; it will hit Windows in version 48. The code is currently running in test mode, with its results compared against the legacy C++ library: 100% correctness on 1 billion reported executions. But this code is just the tip of the iceberg: after laying a lot of groundwork for Rust integration, Firefox is poised to bring in significant amounts of new Rust code, including components from Servo—and not just in test mode.
I have a personal interest in both Rust and Google’s Go language, as well as a renewed interesting in C++ via C++11 and C++14 standards. The fight between greedy Oracle and Alphabet/Google over the use of Java in Android has finally pushed me off my metaphysical rear to find, and use, anything but Java. We were warned about the non-free nature of Java over a decade-and-a-half ago, and I chose to shrug it off. Now I’m promoting every language alternative to Java I can comfortably support, as well as the product built with these languages. If you want to change the status quo for the better then you have to support that change every way you can. Installing, running, and writing about this new Firefox is an important part of that.
I’m not the only one intrigued by the latest Firefox. Infoworld has an article titled “10 things we love about the new Firefox browser.” I don’t normally promote any of the so-called technology blogs, but this one caught my eye because it’s on these tech blogs you used to find reasons not to use Firefox.
It’s tough to provide a deep review of any software product after its immediate installation. This is going to have to be one of those long-term intermittent style reviews of the browser. It’ll be interesting, as it appears on first blush that Vivaldi and Firefox are the two most competitive browsers on my MBP at the moment, with me spending the lion’s share of browser use on Vivaldi. The browser is still a vital part of the web, and the pace of development in this area seems to stepped up rather nicely. I’m willing to support that effort, at the very least by using and testing. Here’s to Firefox’s continued successful development going forward.
]]>I’d get all hot and bothered too, except I’m not on Facebook. I haven’t been on Facebook for the last five years. That doesn’t mean I’ve never been on Facebook; I’ve been on Facebook not once, but twice. The first time was when it was new and my former company sent out an email that we should “study” social media platforms like Facebook and Twitter. So I went right out and signed up for both. After about a year I deleted my Facebook account, swearing I’d never go back. But I’m weak, and sometime about a year-and-a-half later I was back in, ostensibly to keep up with my children and close family members.
That second sign-up, unfortunately, wasn’t meant to be. I learned that no matter how much your children love you, they don’t like their parents as Facebook friends. And I certainly understand that. It was a brouhaha over the Affordable Care Act, a.k.a. Obamacare, between my oldest daughter and my sister, followed by histrionics between me, my parents, and my sister, that convinced me that Facebook wasn’t any good for that either. So I deleted that second account and I haven’t been back since.
It’s as this point I could launch into a sarcastic bombastic diatribe against the evils of Facebook. But I won’t. That’s because:
There are people who like Facebook, who literally live on and by what happens on Facebook. They’re happy and I’m happy they’re happy. But Facebook isn’t for me, and I’ve moved on. Maybe a lot more folks, especially those doing all the vociferous complaining, should do the same.
]]>Don’t know what happened, but when I went to sling out a few truly epic tweets I ran slap into this big blue page. Don’t know when something went technically wrong, so I have no idea how long it was wrong. I tried twice over a 15 minute period and got this message both times. Third time was the charm, about 30 minutes after I first came across the message. It’s been a very long time since I saw this. I can’t remember when it last was up, only that it was. So let this little post be another small marker on the Information Superhighway that nothing on the Web is ever perfect.
]]>It’s a great little presentation, but it has a few little quirks that this posting is meant to smooth over. They are:
This update is preparation to get everything set up on Windows 8.1 before running the presentation. When you run the presentation it will go a lot smoother for you. And you should run the presentation to get the full benefits of learning about MongoDB. But first the software we’ll need to install:
Software | Version | |
Python | 2.7.8 | |
pymongo | 2.7.2 | |
bottle | 0.12.7 | |
MongoDB | 2.6.4 |
Please note that these are the versions as of the time this post was published. If you come across this post at some point in the future, they may be different (i.e. higher).
First let’s install Python and the infrastructure tools for the MongoDB Python driver and web infrastructure you’ll need to run the presentation.
Next download the MongoDB database software from the MongoDB download page. Select the 64-bit zip file. What follows is how I have my sandbox set up for this. You can change it to suit your environment if you want.
Finally create a sub work folder to hold the application file. Mine is C:\Java\MongoDB. Place the following three files into that location. I use the MongoDB subfolder just to keep things straight, but you could call it Fred and it would still work. What follows are the three files to copy:
import bottleimport pymongoimport guestbookDAO#This is the default route, our index page. Here we need to read the documents from MongoDB.@bottle.route('/')def guestbook_index():mynames_list = guestbook.find_names()return bottle.template('index', dict(mynames = mynames_list))#We will post new entries to this route so we can insert them into MongoDB@bottle.route('/newguest', method='POST')def insert_newguest():name = bottle.request.forms.get("name")email = bottle.request.forms.get("email")guestbook.insert_name(name, email)bottle.redirect('/')#This is to set up the connection.#First, set up a connection string. My server is running on this computer, so localhost is OK.connection_string = "mongodb://localhost"#Next, let PyMongo know about the MongoDB connection we want to use. PyMongo will manage the connection pool.connection = pymongo.MongoClient(connection_string)#Now we want to set a context to the names database we created using the Mongo interactive shell.database = connection.names#Finally let our data access object class we built, which acts as our data layer, know about this.guestbook = guestbookDAO.GuestbookDAO(database)bottle.debug(True)bottle.run(host='localhost', port=8082)
File: index.py
import stringclass GuestbookDAO(object):#Initialize our DAO class with the database and set the MongoDB collection we want to use.def __init__(self, database):self.db = databaseself.mynames = database.mynamesdef find_names(self):l = []for each_name in self.mynames.find():l.append({'name':each_name['name'], 'email':each_name['email']})return ldef insert_name(self, newname, newemail):newdoc = {'name':newname, 'email':newemail}self.mynames.insert(newdoc)
File: guestbookDAO.py
<!DOCTYPE html><html><head><title>Welcome to MongoDB!</title><style type="text/css">body { font-family: sans-serif; color: #4f494f; }form input { border-radius: 7.5px; }h5 { display: inline; }.label { text-align: right; }.guestbook { float: left; padding-top: 10px; }.name { width: 100%; float: left; padding: 3px; }.wrapper { padding-left: 25px; padding-top: 20px; }</style></head><body><div class="wrapper"><h1>Welcome To MongoDB</h1><div class="guestbook_input"><form method="post" class="form" action="/newguest">Name: <input type="text" name="name"/>Email: <input type="text" name="email"/><input type="submit" value="Add Guest"/></form></div><div class="guestbook"><h3>Guests:</h3>%for name in mynames:<div class="name"><h5>Name:</h5> {{name['name']}},<h5>Email:</h5> {{name['email']}}</div>%end</div></div></body></html>
File: index.html
Copy these three files into C:\Java\MongoDB.
Go to the MongoDB presentation and follow along. When it comes time to start MongoDB double click the startmongo.bat file in the file explorer. When it comes time to start the MongoDB shell, double click mongo.exe. When it comes time to run the web application in C:\Java\MongoDB (comprised of those three files you should have copied there) open a command prompt, cd to C:\Java\MongoDB, and type ‘python index.py’ and hit return. Then follow the rest of the demo.
Note that when the demo talks about deleting records in your web application’s database, you should type ‘db.mynames.remove({})’ instead of ‘db.mynames.remove()’. MongoDB has advanced enough from the version used in the demo to cause some minor annoyance if you follow the speaker’s directions exactly.
[1] I guess I’m an old fart; I refuse to spell the plural of skills with a ‘z’.
]]>