PocketBible for Windows Progress Update #5

If screen shots and videos of this Windows app appear to have been captured on a Mac, that’s because they were. We are able to do development and testing on macOS even though we’ll eventually deploy on PC.

I’ve heard from a couple of you asking for an update. That usually means I haven’t taken the time to look up from my work and look at a calendar for a while.

Since the last update, PocketBible can perform searches and show results. If you use any of the non-Windows versions of PocketBible, you know that it performs about a dozen different searches in parallel to accomplish one search. So you’ll see results that match exactly; results that have all the words you’re looking for, but in a different order; words that sound the same; words that have the same root word; etc. I mentioned before that it is a challenge to launch these searches in parallel in the new Windows version, but we’ve figured out a way to do that and we think it’s going to work reasonably well. Right now, we’re testing these one at a time to make it easier.

The video below demonstrates searching as compared to the current Mac version (on the left). The videos are synchronized so that the searches start at the same time on each platform so you can compare the times. As you can see, the time it takes to return exact matches is pretty close to the same in both apps. This is pretty impressive given that the Mac version is a native, compiled app and the Windows version is something less than native and something more than interpreted. If that makes no sense to you, suffice to say that we’re seeing good results when it comes to search speed.

Note that in one of the searches, the Mac version returns some results right away because they’re easy to calculate, but takes about the same amount of time to display “exact matches” as the Windows version does.

Early look at searches in PocketBible for Windows

Last time I mentioned that while we were displaying lists of bookmarks and highlights, those lists were not yet fully optimized. Trying to display a list of 30,000 verses would bring the program to its knees (not to mention what it would do to a user or to Allen in Tech Support). We spent quite a bit of time since the last progress update downloading the source code for the third-party component we’re using and modifying it to do what we need it to do in order to display lists of things (search results, notes, highlights, and bookmarks, primarily). In the demo above you’ll see that we’re able to quickly display a list of over 20,000 search results. That was the goal.

We subsequently have had to do similar customizations with context menus (the little pop-up menu you get when you right-click). Our development tools have a very basic one built-in, but it doesn’t allow for sub-menus. The third-party one we found has sub-menus but they don’t have the same functionality as the main context menu. And it doesn’t handle the correct placement of sub-menus on the screen β€” they will happily display themselves off the right edge of your screen. So again, we’ve had to download the source code for this component, learn completely how it works, then modify it for our usage.

One of the interesting things to me as a programmer is having the opportunity to go through this body of code that I’ve lived with for 23 years now and translate it line-by-line into another programming language. In the course of doing that, you learn a lot of things. For example, there are at least 4 different reasons you need to extract Bible text from the compressed LBK file: displaying it on the screen (of course), copying a passage to the clipboard, extracting text during an Autostudy, and displaying a little excerpt in search results.

While working on search results I discovered these 4 scenarios make use of 3 entirely separate paths through the code to do a very similar thing: (1) One path is used for displaying text on the screen. (2) The second is used for either copying a passage or doing an Autostudy. (3) The third is used to display excerpts in search results. It turns out that the last two methods (2 and 3) were completely duplicating the code that gets text to be displayed on the screen (1), then filtering out what wasn’t needed before using it.

As a result, part of what I’ve been working on is eliminating this duplication of code. Now there’s just one way to get text out of the LBK file. Anyone who wants to use it for something other than displaying it on the screen will filter out the tags and features they don’t need. It sounds complicated but it’s much simpler and significantly reduced the amount of code that needed to be translated and tested.

We’re still aiming for being done by the end of the year. One thing working in our favor is it looks like PocketBible for iOS is going to require very little, if any, updating for iOS 15. That normally consumes all my time in August and September.


Last time I told you about our new office space. After moving in, we realized we hadn’t thought about the fact that the city was about to start a major street construction project that has our main street and several side-streets completely torn up. The construction area is 3 blocks long and our office sits right in the center.

At the same time, the strip mall across the street is being demolished to make way for a combined retail/residential building complex. The view out our office windows has been fascinating as dozens of excavators, dump trucks. bobcats, drills, cement mixers, and more work right below us.

We still have access to the building from the back, but the activity right outside the window is a little distracting. And this will be going on for the next 2 years. So that should be fun. πŸ™‚

Replacing the decades-old sanitary sewer on the main street through town, right in front of our office.
In the foreground, storm sewer work begins on our main street. In the background, footings are being poured for a 3-story commercial/residential building.
An old steam line wrapped with asbestos was unexpectedly found under the street in front of our office and had to be dealt with. Specially trained workers in hazmat suits and respirators filled dozens of large bags with asbestos insulation while surrounding dirt and clay tile was carefully removed.

PocketBible for Windows Progress Update #4

I apologize for the delay getting an update out. We get busy and we are always thinking that after we implement the next big thing would be a good time for an update. Next thing you know several big things have been implemented and no update.

Since the last time you heard from us:

Notes can be edited, saved, and sync’ed to the server. The note links in the text open the note in the editor.

Bookmarks can be created and lists of bookmarks in a given category displayed. You can select a bookmark to go to it in the text.

Highlights can be created but they’re not yet visible in the text. You can see a list of them and select from the list to go to the verse.

The option to sync Bibles and commentaries has been implemented, so commentaries and other Bibles will follow along as you scroll through the Bible text. There’s a separate option to sync dictionaries so that any request for one dictionary to go to an article for a word will result in all dictionaries responding, and another option for all devotionals to go to today’s reading when any one devotional goes to today’s reading. Here’s a little demonstration:

The scrollbar is implemented. As you drag the scroller up and down, there’s a tooltip that tells you where you’re at in the book. When you release the mouse button, the text goes to that location. There’s an option to scroll by pages or scroll by chapters in the Bible. Other types of books have similar options.

The program saves its display state, window size, and position between sessions. If  you have more than one monitor, it remembers which monitor it was on. If you unplug a monitor or switch to one with different resolution, it adjusts its size and position accordingly.

There are other little things that get done along the way, of which I may not have made a note.

We’re currently working on implementing searches. There are interesting technical challenges porting that code from Mac/iOS/Android to our environment in Windows. On the other platforms we launch a dozen parallel activities to perform a single search. The Electron environment is single-threaded. There is a way to create multiple processes but the communication between them is rudimentary. We’ve settled for trying to make it so the user interface (mainly mouse movement and interaction) doesn’t stutter during a search, but searching may be more of a serial, rather than a parallel, operation. I’m guessing nobody will notice. Searches will still be fast.

An interesting complication that arose during implementation of searching was being able to support finding words with the same root word as the one you are looking for. The algorithm that reduces words to their root words is written in an esoteric programming language that was created specifically for this one purpose. In order to translate that language into what we need (Java for Android, C for iOS and macOS), we have to use a custom transpiler that converts from the weird root-word language into Java or C. The new version of PocketBible is being written in JavaScript, which would require that we write a custom back-end for the transpiler. This was disappointing as we figured it would take several days, if not more, to implement. Fortunately, the next day we found that someone had already converted the code by hand to JavaScript. We added our modifications to support Early Modern English (KJV language) and we were back on schedule.

One of the things that happens during development is that you sometimes get to do things twice. We were using a very basic method of displaying lists like your list of bookmarks, notes, and highlights. This method worked fine (and is working now) but in those rare cases where you have 20,000 search results, it will get bogged down. So we’re replacing the already-working list mechanism with a new one. It’s one of those things that, once it’s done, you won’t notice the difference. But it requires careful surgery to remove one method and replace it with another. This is being done to support search results but other areas of the program will benefit. Most people don’t have 20,000 bookmarks, but for those who do, this will be a noticeable improvement (at least it would be noticeable if they had seen it before and after, which they won’t.)

As some of you know, last August our city was hit by a rare wind storm known as a derecho. Sometimes called a “land hurricane”, a derecho has straight-line winds that exceed 100 MPH. Our city experienced winds as strong as 140 MPH. And while a tornado has stronger winds, it generally only affects a narrow path, maybe a couple hundred yards wide. This derecho caused wind damage over an area 100 miles wide and 700 miles long.

The office build we were in took significant damage. The roof had to be replaced along with all the flooring, all the ceiling, and a good portion of the walls. We were able to continue working there while roof repairs were made and most of the interior was removed, but in mid-February we had to move out. We spent 3+ months working from home with some negative impact on productivity. Then in mid-May, a new office suite became available just 2 blocks from our old location. By the end of the month we’ll be in a beautifully restored 19th century building with exposed brick walls, original wood floors, and 12′ ceilings.

That’s where things stand as of today. Thank you again for your interest and support of this project.

PocketBible for Windows Progress Update #3

Today we want to talk about our progress so far on PocketBible for Windows. At this point in the project, it’s difficult to show everything we’ve been working on because a lot of it is “under the hood” or “behind the scenes”. It’s related to how PocketBible accesses its files, or the server, or the database where your user data is stored. These are all hard to demonstrate.

But we’re at the point where there are a few things we can demonstrate, and you can see them in the video above. I’ll also briefly describe them here for those of you who, like me, don’t like to watch videos.

We’re trying to make PocketBible more tablet and touch friendly. We’ve taken ideas from our iOS and Android apps. You’ll notice in PocketBible for Windows that the toolbar buttons are a little bigger than they might be in a typical app. This is to accommodate the touch/tablet environment.

The toolbar at the top of the screen is reconfigurable. You can drag buttons onto and off the toolbar from the Preferences screen.

The toolbar on the left side controls the features of the Study Panel. This is where we display your bookmarks, highlights, notes, search results, etc. In particular today, we demo the note editor. We can style text and paragraphs as you might expect, though your edits are not yet saved to the database. You can edit your notes in a plain-text editor if you’re comfortable working around the HTML tags that control the appearance of your notes.

We have a lot of the features related to display books implemented. There’s no “navigation” features yet, but you can scroll through them and see both text and images.

We’ve been doing a lot of work on the Library functions. This is how you download and open books. You can view a list of books installed on the device or books that you own (your Cloud Library account). You can view the lists in a “gallery” format or in a “list” format.

Clicking on a book in the Cloud Library causes it to be downloaded. Clicking on books in your Device Library opens them. You’ll see a progress indicator as you download books, and you can select multiple books to download them all at the same time.

You can choose to see only Bibles, only dictionaries, only commentaries, etc. You can also search for a book by typing a portion of its name in the search field.

There are a limited number of display format preferences implemented. You can currently choose a font, font size, line spacing, and some other options. You can choose from one of several color schemes, including a “dark mode” scheme, and you can create a custom color scheme by choosing colors for each of a couple dozen different elements of the display.

There’s more going on behind the scenes that are hard to demonstrate, and there a lot of things visible on the screen that are really just placeholders. Anything you see on the screen currently could change at any point before release.

About Our Development Tool Set β€” Electron

I’ve been talking about our innovative, new development environment since before we started coding on the project. I want to explain that in more detail at this point. If you’re not interested in the technical side of what we do, you can probably just jump to the end at this point. πŸ™‚

We’re using a tool called Electron to develop the Windows version of PocketBible. Electron is a framework for creating native applications using Web technologies like JavaScript, HTML, and CSS. It combines node.js (a JavaScript run-time environment) and the Chromium engine (the guts of the Chrome browser built into the app). This allows us to write our code in JavaScript and create our user interface using HTML and CSS just like we would on a website. It wouldn’t be incorrect to describe this as a website running on an embedded Web server inside a Windows executable.

A lot of programs you are already familiar with are implemented using Electron, like VS Code, Facebook Messenger, WhatsApp, Twitch, and Microsoft Teams. We’re encouraged by the fact that Microsoft seems to be committed to this tool set.

This lets us leverage what we know about website design as we design the user interface and write the app.

We can actually use the Chrome developer tools just like you would in your browser to debug the app. We can explore the user interface, set breakpoints in our code, and examine the values of variables β€” all using tools we’re familiar with from Web development.

Using Electron allows us to use our Macs for Windows development. The video above was shot on a Mac. That’s why you don’t see a menu bar in the app β€” on a Mac the menu for the active app is displayed at the top of the screen, not in the app’s window. Being able to run the app on a Mac is a real benefit to us since we’re 100% Mac OS here. We use it for Android, iOS, and Mac development. When necessary, we have Windows running on our Macs under Parallels so that we can use Windows apps. But we try to avoid it as much as we can. πŸ™‚

So that’s where things stand as of early February. You can post questions below or send them to support@laridian.com and they’ll make sure I see them and can respond.


Brief demo of multiple panes. See comments below.

PocketBible for Windows Progress Update #2

More Rewards Distributed

The 2021 editions of the PocketBible Library Collections are being released coincident with this status update. If your reward package included the Bronze, Silver, Gold or Platinum Library, you’ll find those books are now in your account. The special Diamond Edition for those at the higher contribution levels has also been distributed, though of course it’s not available to the public. You can download any new books from these collections using the Cloud Library feature in PocketBible.

Note that the 2021 editions contain some Bibles that are not compatible with the current Windows versions of PocketBible, particularly The Passion Translation, World English Bible with Strong’s Numbers, and the Spanish Nueva Biblia de las AmΓ©ricas. These will work in PocketBible on other platforms.

Note further that the collections include the very recently released 2020 edition of the New American Standard Bible. The publisher has said we can continue to offer the 1995 edition, but we need to refer to it as “NASB1995” and call the new version “NASB”. Since the Windows versions can’t be updated to use the new abbreviation for the 1995 edition of the NASB, you will end up with two Bibles both called NASB. In the Windows Desktop version you could potentially have 4 tabs labelled NASB, NASB, NASEC, and NASEC (the latter two being the NASB with Strong’s Numbers). You’ll find if you hover over the tab you’ll be able to see which one it is. In other places where you’re choosing from two versions with the same abbreviation, you’ll see that “1995” or “2020” has been added to the title so you can tell which one each is.

Diamond Edition Contents

Because the 2021 Diamond Edition is not available to the public, there’s not an easy way to see what it contains. This collection, which was offered as a reward for those who contributed $720 or more to the project, contains everything in the 2021 Platinum Edition plus:

A Hebrew Word for the Day
Ancient Christian Commentary Series
Bible Reader’s Companion
Bible Teacher’s Commentary
Dake Study Bible Notes
Ephesians: Reformed Expository Commentary
Gospel Transformation Bible Notes
Greek New Testament Collection
Knowing the Bible Series
Maclaren’s Expositions of Holy Scriptures
Preaching the Word Series
Systematic Theology Study Bible Notes
The Good and Beautiful Community
The Good and Beautiful God
The Good and Beautiful Life
The Sermon Notebook
Understanding the Bible Series

The total value of all these books sold separately is over $4000. Thank you again for your support!

Progress Update

Work continues on two fronts: Implementing features related to what we call “user data management” (notes, highlights, bookmarks, and daily reading progress), and translating the code at the core of PocketBible that reads and acts on PocketBible books and Bibles.

We’ve completed much of the nuts and bolts of user data management and have begun to work on user interface issues related to those features. For example, neither the Windows Store nor the Windows Desktop version of PocketBible allows you to set bookmarks on more than one verse at a time. (To be fair, neither does the Mac OS version.) But the iOS version recognizes that you have multiple verses selected and assumes you want to set or clear bookmarks on all (or at least some) of those verses. We prefer this behavior and want to introduce it in the new Windows version.

This is what we meant when we said that we would draw on our experience with the Mac OS and iOS versions when writing the new Windows version. Not that we were going to duplicate either one, but that we would allow what we’ve learned while experimenting with different ideas on those platforms to influence how we re-imagine the Windows version.

I’ve said before that we’d be building the new version using a different programming language, application framework, and toolset. So porting the shared portions of the code β€” functionality like being able to read and operate on our Laridian book (LBK) files β€” is mostly a “translation” task. This is not entirely true, as certain concepts are very different between the two languages, as are the syntax, idioms, and data types.

To give you an idea of the size of this task, I counted this morning (automatically, not by hand) the number of lines in the shared C++ code and it came to 457,326 lines. That’s about 8000 pages if you were to print it out. All of that code has to be read line-by-line, translated (taking into account changes made to other parts of the code during translation), and tested.

We continue to make progress in this area, though I believe we’re only about 10% to 20% through it. For example, the program is now able to detect the books you have installed and allow you to select from among them β€” though once you open a book, you’re not able to read text from it. The text we see on the screen is simulated β€” biblical lorem ipsum so to speak. I’m working on that portion of the code right now.

PocketBible for Windows Progress Update #1

As you know, our crowd-funding campaign for PocketBible for Windows ended on September 15 so we’re about one month into the project. While I can’t demonstrate much for you at this point, I do want to fill you in on our progress and answer a few questions.

Over the last couple of years we’ve experimented with a number of programming languages, frameworks, and development tools to try to discover the best way forward for PocketBible for Windows. In the process, we’ve explored some proof-of-concept ideas, some of which will find their way into the finished product.

For example, we needed to be able to display and interact with books with complex layouts, like The NIV with Goodrick-Kohlenberger Numbers and our parsed interlinear Greek New Testaments. You would think that displaying formatted text would be trivial these days, given that it’s 2020 and even Web browser technology from the last century can do it fairly well. PocketBible for Android, iOS, and Mac OS uses HTML rendering built into those platforms that does a very good job. Unfortunately, the similar functionality built into Windows is significantly less capable. So as we explored alternative tool sets for implementing PocketBible for Windows, this is one of the areas we focused on. Our ability to successfully render these complex layouts during our experiments in the summer of 2019 is what led us to settle on our current solution. (We’ll have more to say about that in a future update).

Now that we’ve demonstrated that we can display and interact with the text, we need to be able to extract the text of a book or Bible from our Laridian Book (LBK) file format. The code that does that is fairly extensive and complicated and needs to be translated from its current implementation and thoroughly tested. We’re currently working on that task.

A major area of progress is what we call “user data management”, which is keeping track of your notes, highlights, bookmarks, and daily reading progress. In particular, we wanted to tackle synchronization of that data with Laridian Cloud. This would force us to fully implement the ability to read and write the data from and to the database, and would also require us to solve communication with our cloud-based sync provider β€” both of which are complex tasks that introduce risk into the schedule. Overcoming those challenges and dealing with that risk during the early part of the project avoids the possibility of unexpected delays right before our ship date, when it is least-practical and most-expensive to deal with it.

As of today, even though the PocketBible app for Windows doesn’t allow you to view or edit notes, it can sync its local notes database with the server. You can’t even see any verses, let alone select one to highlight, but you can correctly sync highlights to and from the cloud. This means we’re able to populate the local database from a customer account, make manual changes using a database editor tool, then request that the program sync again. The app accurately identifies what has changed and syncs those changes to the server. At the same time, it receives and records any modifications or new records sent to it from the server. That means that, at least internally, everything is working. There’s just no user interface to it yet. Sounds weird, but it’s very normal for a software project to be completely working but with no way to see that it’s doing so. That will come later.

It’s also worth noting that even though neither of the current versions of PocketBible for Windows (Windows Desktop or Windows Store versions) support Journal notes or renaming highlight colors (features of the Advanced Feature Set in PocketBible for iOS, Android, and Mac OS), the new version already supports those features. Or rather, the underlying support is there; there’s just no user interface to invoke it.

Until next time, thank you so much for your financial support, prayers, and words of encouragement for this project. We welcome your feedback and suggestions.

Frequently Asked Questions

What will be the effect of the Windows project on work being done on other platforms?

According to comments on a recent customer survey we did, some of you have expressed concern that our attention to the Windows project will take away from work on other platforms. I want to reassure you this is not the case. In fact, the very purpose of the crowd-funding campaign was to allow us to add staff for the Windows project in order to minimize the impact on other platforms. You may not realize it, but you’ve already seen the results β€” we shipped a new version of PocketBible for iOS coincident with the release of iOS 14, which introduced a number of major new features for PocketBible on that platform, all while work on PocketBible for Windows continued unabated.

When will I get my rewards?

When you get your rewards depends on what type of rewards you are entitled to.

Physical Rewards: Three contributors were entitled to some special rewards (a 1903 KJV New Testament and two framed, first-edition KJV pages from 1611). These were mailed within a week of the end of the fund-raising campaign.

2021 PocketBible Library Collections: Contributors at the $60, $120, $240, and $360 levels will get the 2021 Bronze, Silver, Gold, and Platinum Edition PocketBible Library collections, respectively, when those products are released near the end of the year.

Special Diamond-Level Library Collections: Contributors at levels $720 and above will get the special collection we’re putting together just for those contributors. It will be released either at the same time as the regular 2021 Bronze, Silver, Gold, and Platinum collections are released, or shortly thereafter. We’re aiming for having all of the collections distributed by the end of the year.

Advanced Feature Set Subscriptions: Some contribution levels included multiple years of either the AFS for the new Windows app or for all platforms. Those will be distributed when the new app ships. We haven’t announced a specific ship date but are aiming for late summer, 2021. Obviously, those who are entitled to a mention in the in-app credits will see that when the app ships.

Wait… Isn’t that a Mac in the picture?

Yup.

We Reached Our Goal!

Thanks to the kindness of 492 of our closest friends, we were able to reach our goal of raising $50,000 for the development of an all-new version of PocketBible for Windows! The final total came to exactly $53,000.

If you contributed to the project, you’ll get an email from us letting you know how we’re going to keep you updated on our progress. We’ll publish updates here on the blog. Some will be public like this one; others will be for supporters only.

To get things started, I met yesterday with the outside developer responsible mainly for user experience to bring him up to speed. And since the beginning of the crowd-funding campaign I’ve been working with another in-house developer to bring her up to speed on the development tools and the initial tasks we need to work on.

Even though we already have two different Windows versions of PocketBible, this version is going to be implemented a whole new way (more about that later). So we have to treat it as if we’re doing it for a whole new platform. When we launch into PocketBible for a new platform, I like to tackle the hard things first. That is, I try to identify what is going to be a challenge for us and do some prototyping or proof-of-concept tests to make sure we’re going to be able to solve those problems before they become hinderances to the schedule.

What that means is that we’re going to start kind of in the middle of the project, focusing on the note editor and user data synchronization, because those seem to always present problems on every platform. We’ve already done some experimenting with simply displaying and scrolling through text, as that’s another problem area. We’ve actually written and thrown away a few different attempts at some of those problems already.

This approach creates interesting paradoxes. We’ll be able to sync your notes, highlights, bookmarks, and daily reading progress to and from the server before the program can create or display a note, highlight a verse, or set or go to a bookmark. We’ll be able to scroll through Bible text before we can choose and open a Bible to read. But such is the world of software development, especially with a mature product like PocketBible. Even though the new version of PocketBible for Windows doesn’t exist, PocketBible itself exists both as an abstract concept and in several concrete implementations β€” not just the existing Android, iOS, and Mac OS apps, but our soon-to-be extinct Windows apps and our already-extinct Windows Mobile Smartphone, Pocket PC, Handheld PC, Palm-size PC, webOS, Blackberry, Palm OS, and browser-based versions. So this new Windows version already exists in our heads. Starting in the middle or at the end or the beginning is all the same to us. πŸ™‚

Photo by Danielle MacInnes on Unsplash