PocketBible for Windows Progress Update #17

ChatGPT’s interpretation of a youthful version of Craig (the beneficiary of time dilation, apparently) coding on a laptop in a light-speed spaceship while wearing enormous sneakers.

When traveling near the speed of light, one experiences both the dilation of time and the contraction of distance. An astronaut traveling to a distant star at near light speed experiences less time than his friends back on Earth. He arrives at his destination sooner than expected because he also experiences less distance to that destination — as he accelerates toward light speed, his destination appears to be disproportionately closer to him than it would appear if he were at rest.

Then an interesting thing happens as he gets closer and begins to slow down — his destination gets farther away. This is due to the reduction in the effect of length contraction as he slows towards being stationary with respect to the destination.

We see the same thing happen in the software world. As we approach the end of a software project and find ourselves implementing fewer new features and solving fewer bugs, the release date appears to move farther away. The effect of taking 4 weeks at the beginning of a project to solve a major problem is relatively minor in the grand scheme of things. But taking 4 weeks on a single task at the end of a project makes it feel like it is never going to be completed.

Reactivity

One of the major challenges we’ve faced in the last couple of months is related to Vue — the user interface framework we use. Vue is a “reactive” system. That is, if you want to display some text on the screen, you don’t write code that moves to a particular (x,y) location and outputs the text in a particular font, but rather you define an area of the screen that will display text in a certain font, then attach a particular variable in your code to that area of the screen. Now when you change that variable, the screen is updated with its new value. In other words, the user interface reacts directly to changes in your data.

In order to know when it needs to update the screen, Vue wraps its own code around these reactive variables. It is very good at doing its wrapping. If you’re not careful, it can “infect” certain pieces of data with its reactive wrapper. The result is not only inefficiency (since a bunch of unnecessary code is executed when you change the value of a variable) but potential confusion as Vue believes you’re changing data at a time when you shouldn’t be changing it. In reality, Vue shouldn’t be paying attention to it at all, and everything it reports is nonsense.

One common problem is changing the value of a reactive object or variable while Vue is getting its value in order to render the screen layout. This seems easy to avoid (why would you change something while getting its value?) but in reality, it happens often. For example, the table of contents of a book is a static piece of data. But we don’t keep it all in memory at the same time. So when you want to display the table of contents on the screen, we have to read it from the book. Doing so changes the value of the file pointer that tells us where we are while reading the file. In other words, reading static data (the table of contents) changes a value (file position) in the object in our code that represents the book. If Vue has wrapped this object with its reactivity code, it believes you are changing the data while it’s trying to read it.

The other way this can happen is when accessing some piece of data from a book that needs to be constructed the first time it is accessed but is static after that. Consider the field where you type the name of a book of the Bible that you want to go to. That field needs access to a list of all the book names and the abbreviations of those names that are in this Bible. That information isn’t stored directly in the book file — we have to iterate over the list of all the books of the Bible that are in this particular Bible and generate a supplemental list of all possible names and abbreviations. Consider, for example, 2 John. You might enter “2 John”, “2 Jn”, “2John”, “2J”, “2Jn”, “II John”, “Second John”, etc. We keep a list of all possibilities so we can auto-fill the field. So the act of getting the list of book names for the first time will cause the list of names to be stored in the book object for use if you need it later. Storing the list in the book object that has been infected with reactivity code makes Vue believe you’re changing data while it’s trying to read it.

There are certain significant data structures in PocketBible that are susceptible to this unnecessary infection by Vue’s reactivity code. For example, we keep a list of books that you own. Some are open, some are installed but not open, and some are back on the server. We know a little about the ones on the server; more about the ones that are installed; and a lot about the ones that are open. What we know about each book is stored in an “object” that is the representation of that book in the list.

For the most part, this large list of book objects is not directly displayed anywhere on the screen and Vue doesn’t need to know about it. Our code will reference it when getting Bible text or when showing you the table of contents of a reference book. But you’re rarely looking directly at data directly stored in this list. As a result, this list is immune to being infected by reactivity code, and we’re free to change the data it contains whenever we want.

But because this list is so central to almost everything PocketBible does, it isn’t difficult to accidentally expose it to Vue, then have the result of the reactivity infection show up in a completely different part of the app.

We’ve spent a lot of time in the last 3 months chasing down a major bug related to this reactivity infection phenomena. We’ve been seeing the symptoms for quite a while but hadn’t taken the time to look into it until recently. We think we have it solved but it’s the kind of thing that can pop back up at any time.

New Bible Format Implementation

We continued and perhaps finished work on integrating the new Bible format that we’ve been talking about for the last year or so. In addition to the basic functionality we added some enhancements that allow us to see the version numbers of this Bible data and identify where it came from so that future troubleshooting should be easier.

Link Preview

We began work on the link preview function, where hovering over a link causes the target of that link to be displayed in a pop-up window. For example, hovering over a Bible reference will cause that verse to be shown as long as your mouse is hovering over it. The user interface portion of this task (tracking your mouse and popping up a window) is basically complete; now we need to implement code to get the text that populates the window.

We’ll also be adding code to activate the link preview pop-up on long press for touch-screen devices.

Delete Books

We implemented the ability to delete books installed on your machine. This is trickier than you might think, since you have to make sure the book is not left open in one or more panes after it has been deleted.

Miscellaneous

We fixed a problem with devotional start dates and at the same time, found a problem that might be related to 2024 being a leap year. Should be easy to fix once we take the time to look for it.

We fixed a problem when trying to find an installed book when you only know its publisher ID and book ID. This is rarely used but could have caused a hard-to-find bug had we not caught it when we did.

When looking for a Bible to handle a link (or, in general, any book to handle any link) errors were always being reported to the user even though there are some cases where we want to know there was an error but don’t necessarily want to show it to the user.

PocketBible 2024 User Survey

I’m just going with these AI-generated images now. No excuses. Pretend like it’s a game — find the anomalies. Which person is a ghost? Which is part of the furniture? Where is the sun? Why is there a big red violator in the upper left corner? What is it hiding?

We just completed our annual survey of our PocketBible users and I thought I’d share a few results with you. This isn’t everything and it’s not even every important thing. But some of this is interesting and might help you understand who your fellow PocketBible users are, and in some cases, why we might make the choices we do when it comes to the products we create for PocketBible.

Demographics

The majority of you are male, and are 55 or older. To some peoples’ surprise, most of you are not preachers — though about half of you have some kind of teaching ministry.

This is consistent with what we’ve come to know about our PocketBible users. I believe that our age (yes, I’m in that “over 55” group, too) puts us in a generation that trusts the authority of the Bible and therefore wants to know more about it. We also believe there are people smarter than us who have things to say about the Bible from whom we can learn. Younger people tend to value the experience of God. They learn about God through their community experiences with their fellow believers. As a result they have less dependence on the kind of commentary and research tools at which PocketBible excels. Not all of them, of course; we continue to add new users of all ages to the PocketBible family.

Beliefs

Half of you chose the label “Bible-believing” to describe your Christian beliefs. One-third use the term “evangelical” and one-third “nondenominational”. About two thirds selected “Catholic”, “Orthodox”, or a specific Protestant denomination. These terms aren’t mutually exclusive so the totals add up to more than 100% with a lot of overlap.

It’s interesting to note how our ranking of denominations is different than the ranking of these denominations in the general population. Note that these are cherry-picked to match what we asked on our survey; there could be a number of smaller denominations missing.

Church/DenominationRank (In the US)Rank (Among PocketBible users)
Catholic18
Baptist21
Methodist34
Lutheran46
Pentecostal52
Presbyterian63
Episcopal/Anglican75
Seventh Day Adventist87
Orthodox99
Only denominations that got at least 10 responses on our survey are listed. 80% of you are in the US, so only members of these churches in the US were considered.

This is consistent with what we know from being in the Christian publishing business for over 30 years. People who purchase Bibles and Bible study materials tend to be on the more theologically “conservative” end of the spectrum and they tend to describe themselves as neither Catholic nor Protestant. That “Bible-believing” term sums up who they are. This has been true the entire time I’ve been in this business.

And it makes sense. These are the kind of people who are encouraged by the churches they attend to study the Bible for themselves and not to depend on a formal member of the clergy to answer their questions. Even the least leadership-oriented person in this group has a small but useful Bible library, which may or may not be entirely digital.

Bible Reading

90% of you spend time reading the Bible every day (or nearly every day). The majority of those are either using PocketBible’s devotional features or following an external plan but using PocketBible to read the Bible. Those who do read every day spend 17 minutes each day reading the Bible. This is consistent with the 16.5 minutes we got last year.

I find that encouraging. I believe it’s important for Christians to read and understand the Bible. It’s our most direct way of getting instruction from God.

Online Habits

Most of you are still using Google for searches even though it puts your privacy at risk. The next most popular choice is arguably the right one: Duck Duck Go.

A few of you, when asked what search engine you use, told us you use Edge, Firefox, or Safari. Please — these are browsers. A browser is how you access the Web. A search engine is a website you use to perform searches. Most browsers allow you to choose a default search engine. This allows you to type some search words into the address line in your browser and it will automatically invoke your chosen search engine to perform the search.

Use of PocketBible

Most of you use PocketBible every day and almost 90% use it more than just in church on Sunday.

Over 80% of you use PocketBible most of the time on either a phone or tablet. This is consistent with how we target our marketing of what we do — we are a mobile app developer and always have been. That less-than-20% who use it primarily on a desktop or laptop will argue with us about that and point out that Windows is the most popular operating system. Until we point out that Windows is the most popular desktop operating system. If you expand your scope to all computing devices, then Android OS is actually installed on more devices than Windows.

Satisfaction

94% of you are somewhat or very satisfied with PocketBible. You are most interested in the same kinds of resources that we are already producing — commentaries, dictionaries, Bibles, and atlases. You have some very specific recommendations in some cases, and we’ve made a note of those.

2% of you are dissatisfied with PocketBible, so we’re pouring over your criticisms and suggestions. We don’t respond to these of course, but we do read them. We don’t enjoy it, but we do it anyway.

This is just a quick overview of the portions of the survey that I thought might be of general interest. The complete report is 49 pages long, including your comments, suggestions, and complaints in 10-point font.

Thanks to those of you who participated! This is an important part of what we do to make PocketBible into a useful tool.

PocketBible for Windows Progress Update #16

ChatGPT attempts to render my Windows programming workspace based on a general description.

I told myself I’d write a progress update after the first of the year. Suddenly that’s where we’re at.

As you recall from updates 14 and 15, we had a bit of a crisis of our own creation happen toward the end of 2022 which required us to update both BookBuilder and PocketBible on every platform. We had to modify our Bible format and make sure all versions of PocketBible (with the exception of the old/current Windows versions) could read the new format.

We started with our BookBuilder and PocketBible apps for macOS, since these two share a lot of code and doing them at the same time gave us a platform on which to test our new Bible format. We held off on releasing BookBuilder in case we discovered anything we needed to fix as we rolled out the changes. We released the macOS version of PocketBible in May with updates following into June.

This allowed us to turn our attention to the Android version, which was problematic because of Google shenanigans. An initial version was released in September to address new Play Store requirements. We spent the next 6-8 weeks implementing the Bible changes and doing updates to fix various problems discovered after the release of the new version. This was our first update in 5 years for the Android app, so there were some issues.

That brought us to the Thanksgiving/Christmas season, which is our busiest time of year. There are two large tasks that I’m personally involved in because they impact code on the website — creating the 2024 editions of the Bronze, Silver, Gold, Platinum, and Emerald PocketBible Library collections, and implementing the end-of-year “name your price” sale. Because these tasks have to be done every year, some of the process is automated. But it still requires a bunch of my time.

Despite the distractions, progress was made on the Windows app during this time.

The app is very close to being feature-complete, at least for the standard (non-AFS) feature set. One of the next big tasks that, oddly enough, consists of a lot of unknowns is being able to build a Windows EXE suitable for distribution.

As I’ve explained before, we do all of our development and testing on macOS. We’ve done occasional debug builds for Windows, but we’ve never been able to generate a stand-alone EXE like we’ll have to do when we release the product. So even though we’re not quite there yet, I have someone looking into those issues.

This has taken us down two dark alleys. One was compatibility problems with the versions of the Electron and Vue frameworks we’re using in the app. In order to build an executable that works, I think we’re going to need to be running newer versions of those foundational tools. Electron isn’t much of an issue, but Vue has undergone breaking changes in its most recent major update. This requires that we make significant changes just to get our code to build with that version.

The second issue is code signing. Code signing is a process that is supposed to do a couple of things. First, it assures you that the software you download from our website really is from us and not some other company pretending to be us. Second, it assures you that the code hasn’t changed between the time we signed it and the time you downloaded it. This is meant to make you safer (or at least make you feel safer). But if you think about it, code signing is arguably pointless. No malware you’ve ever been a victim of is stopped by a code signing requirement. If this requirement were lifted, all the same malware would continue to work just fine.

Anyway, signing our executable and getting it to work after it is signed has been a challenge. But we’re working on it.

Meanwhile, I’ve been able to get back in my coding chair and have been porting the new Bible format to the Windows code. One unexpected benefit is that I’ve gotten to re-think the way we had ported this code from C++ to JavaScript in the first place and make some changes that will make it easier to maintain. I’ve borrowed some from the C++ (macOS and Windows) implementation and some from the Java (Android) implementation. This gives us good consistency between all platforms and will make maintenance easier in the future.

To sum up, after a detour to do a lot of work on other platforms, we’re back to work; we’re close to feature-complete (at least for the standard feature set); and we’re focusing on tasks that are necessary to move from development to beta to release.

My Favorites

ChatGPT imagines what it looks like when I’m studying the Bible with PocketBible.

I’ve been writing Bible software and publishing Bibles and Bible reference books for over 35 years now. For some reason, people think I’m intimately familiar with every one of the hundreds of titles we publish. Obviously I can’t be and I’m not. But I do have some favorites. I’ve never taken the time to say which ones I like and why, so let’s do that today.

I’ve intentionally not linked these to our online catalog, as I don’t want to give the impression that I’m promoting any of these titles over others we might carry. Feel free to list what you think are indispensable Bibles and reference books for your own study in the comments.

Bibles

At the risk of offending those who think there’s only one English translation of the Bible with God’s imprimatur, here are my faves.

Modern English: The World English Bible

The WEB is an updated version of the 1901 ASV text. It doesn’t go out of its way to be overtly “modern” but rather just updates the language to sound more natural to today’s readers. I especially like that it uses “Yahweh” for the name of God in the Old Testament, which I believe “personalizes” God and makes him more of an active character in the narrative instead of a distant and disconnected force that meddles in human affairs in ways beyond our understanding.

Because I use this Bible in my 7-Minute Bible devotional, I’ve read through it a few times and have been happy to have been able to suggest some corrections to it in a handful of verses.

“Literal” Translation: The New American Standard Bible (2020 Edition)

When the 2020 NASB was introduced, I started in Genesis and read it cover-to-cover. I was expecting to be disappointed, as I had always been when trying to read the 1995 edition. While the latter was good for word studies, it didn’t read well. It was rather jarring to the ears. The 2020 edition seemed much smoother without resorting to paraphrase or functional equivalence.

I tend to use the version of this Bible that includes Strong’s numbers when I need to reference the original languages. I like the literal translation better in that case.

When I Can’t Remember a Verse: The King James Version

As a new Christian, I attended churches that taught from the KJV for about 25 years. I’m one of a shrinking number of people that don’t find the KJV, which mixes a little Middle English grammar into its Early Modern English text, to be off-putting. When I remember a few words of a verse and need to do a search to find it, I tend to do that search in the KJV, betting that the dark corners of my memory are recalling its particular wording.

As you know, back in 2014 Laridian switched its KJV text to the 1910 Cambridge version to bring it into line with what most modern KJV readers expect. We then added Louis Klopsch’s original red-lettering to the New Testament to make ours a very special edition of the text.


Commentaries

This is where we really get into differences of opinion. But I’m the one writing this article, so I get to express mine here.

Whole-Bible Commentary: Constable’s Bible Study Notes

Dr. Tom Constable from Dallas Theological Seminary does an outstanding job of presenting a conservative, evangelical point of view while making room for alternative explanations. He backs up both his own opinions and alternative opinions with quotes from third parties who champion those points of view. Since these are literally just his own personal notes collected over the years, they don’t suffer from having been over-edited by a publisher and a marketing department.

Because the book hasn’t been overly edited, it doesn’t contain anything superflous, like random color images of sites in Israel. But it does contain charts and maps when appropriate to understanding the text.

New Testament Word Studies: Robertson’s Word Pictures in the New Testament

This is an update to Vincent’s Word Studies in the New Testament, which is also a recommended book. You would think a book on word studies would be a dictionary in PocketBible, but Robertson presents his work verse-by-verse, which makes it easy to find what you’re looking for while reading.

This book is intentionally written to people like me with an interest in the original languages but not the expertise to study word origins and learn how to parse nouns and verbs on my own. I feel like I get the benefit of knowing the languages without having to learn them.

Expository Commentary: The Expositor’s Bible Commentary (full edition or abridged)

I tend to keep the full edition of this commentary on my devices, but the abridged edition is an affordable alternative that doesn’t lose much in the abridgement. I like this commentary for its deep, scholarly treatment of the subject matter and its willingness to discuss alternative points of view.

We used to be able to sell this 12-volume set for a very reasonable price. But recent changes at the publisher make this one hard to discount. It’s worth every penny, but if you ever catch it on sale, you should scrape together the shekels to buy it.

Old Testament Commentary: Keil and Delitzsch Old Testament Commentary

This is not for the faint of heart. You don’t have to be able to read Hebrew, but it might help. This commentary isn’t for everyone, but it’s one place I look when sussing out nuance of meaning from Hebrew.

Most of the time, almost any other commentary will do when studying the Old Testament. But if you really want to get into the meanings of words and how they’re used, this is the tool you need. It’s not something you can give a quick read and learn everything you need — it takes some effort to figure out what they’re talking about and where they’re going. But if you want that level of detail, this is the place to find it.


Dictionaries

In PocketBible, atlases are often categorized as dictionaries, so I’ll cover those here as well.

Strong’s Numbers: Complete Word Study Dictionaries

These dictionaries (OT and NT volumes) are ideal companions to any of our Bibles that contain Strong’s numbers. They provide significantly more detailed definitions than do the default dictionaries that come with those Bibles.

For each word you’ll see its Strong’s number, Hebrew or Greek spelling, transliteration, forms, synonyms, antonyms, and definitions of every usage of the word. There are many links to verses where the word is used and links to related words in the dictionary.

Atlas: Deluxe Bible Maps and Timelines or the Holman Bible Atlas Bundle

Deluxe Bible Maps is a thorough atlas of every region, battle, time period, people group, etc. The maps themselves are pretty simple, but the place names are linked to short descriptions in the accompanying dictionary of Bible places.

The Holman Bible Atlas Bundle consists of the Holman Bible Atlas and the Holman Book of Biblical Charts, Maps, and Reconstructions. The atlas contains over 130 maps plus hundreds of timelines, charts, and articles. The book of charts, maps, and reconstructions is a perfect supplement, containing dozens of images that are ideal for both study and teaching.

Topical Dictionary: Dictionary of Bible Themes

This is a hidden gem in our catalog. It’s actually two books. The Dictionary of Bible Themes is like Nave’s Topical Bible. The topics are organized like a systematic theology. Each contains links to verses and other related topics. Also included is the Dictionary of Bible Themes Scripture Index, which functions like the Thompson Chain Reference Bible and is organized like a commentary in PocketBible so that it follows along with verses as you read them and links you to topics appropriate to that verse.


Devotionals

I’m more of a read-through-the-Bible guy than a daily-nugget-of-truth guy, so my preferences are going to lean in that direction. I don’t like the plans that scramble the Bible up by chapter or by OT+NT+Psalms+Proverbs each day. I just get lost that way. I strongly prefer to read chronologically. I feel I know the history better that way.

Chronological Bible Reading: The 7-Minute Bible

Yeah, I know — this is my book so of course I picked it. Think of it this way instead: This is how I prefer to read through the Bible in the morning, so I wrote it. The 7-Minute Bible is the text of the World English Bible (WEB) organized chronologically, harmonized where appropriate (i.e. Kings/Chronicles and the Gospels), the edited to remove the things that are going to cause you to stop reading through the Bible (like 9 full chapters of names at the beginning of 1 Chronicles). I find I can read through the entire 7-Minute Bible in 4 months if I read just 15 minutes per day.

Reading in Bible Order: OT in One Year and NT in 6 Months (Twice)

If I feel I must read ever verse in the Bible, I have done it by reading one day from the Old Testament in One Year plan and one day from the New Testament in 6 Months plan each day. When I finish the New Testament at the end of June, I start over. These reading plans are free when you register PocketBible, so everyone has access to them.


Other Books

There are a few books that PocketBible categorizes as “other” (because they don’t fit in any of the categories above) that I find useful.

The “Lost World” Series

This is a recently published series of books that takes a fresh look at the Old Testament in the light of our best understanding of the Hebrew language and the literature of the Ancient Near East. The goal is to read the text from the perspective of the people to whom it was originally written.

While all “Bible background” commentaries try to provide historical and cultural information, this series focuses on key passages, such as Genesis 1, Adam and Eve, Noah and the Flood, the Israelite Conquest, etc. to find hints in what we know about Ancient Near East cultures to help us understand how those who may have heard or read what we know of as the Old Testament would have understood it.

Scottish Metrical Psalms

I’m not a fan of the Psalms. It’s an interesting little book of song lyrics but I find it hard to identify with. I’m not pursued by my sworn enemies into caves and crevices on a regular basis. I’m not a song-writer looking for lyrics. But — if I have to read a song book, I need it to rhyme and I need it to be singable in standard meter. This little book translates the book of Psalms into truly singable works. I thought about modernizing the language and using this for my 7-Minute Bible, it’s that good. Maybe in version 2.

The Trail of Blood

This is a fascinating little pamphlet that makes the case that there has always been one true, biblical church fashioned on the principles of the New Testament and not falling under the hierarchy of any denomination. It argues that Catholicism (and subsequently Ortodoxy and Protestantism) split from this true version of the Church and went off in their own direction but that there still exists pockets of real New Testament churches today. Whether you believe that or not, it’s a fascinating hypothesis that happens to be correct. Like I said — my article, my rules. 🙂

Understanding the Bible Collection

This 22-volume collection provides a wealth of historical, cultural, and geographic background on what we read in the Bible.

Each volume covers a different subject and is loaded with photos, maps, and charts.

About the Image

I asked ChatGPT to create a picture of me studying in my home office. Unfortunately I couldn’t get it to make me clean-shaven except for a mustache, give me a knuckle for every finger and a finger for every knuckle, give me an Apple Watch instead of some generic Android watch, give me just one rectangular phone and not an additional trapezoidal phone, make sure my books aren’t bound along two opposite or two perpendicular edges, put any less than 14 or 15 hours on my alarm clock, and give me a spiral bound notebook that wasn’t bound along one edge and also across the middle. Other than that — nailed it.

PocketBible for iOS Updated – Version 4.16.0

On Friday, October 6, 2023 we uploaded version 4.16.0 to the App Store. Apple approved the new version the next day.

This version was released primarily to make PocketBible for iOS compatible with our latest changes to our Bible format. These changes allow us to include data with each Bible that tell PocketBible how Bibles should interact with each other. This data used to be included in PocketBible itself, but that meant that we often had to update PocketBible on all platforms simply to release a new Bible. These changes will help us avoid having to do that.

In addition, several new features, enhancements, and bug fixes were added:

NEW FEATURES

  • Added a “direct keyboard entry” go-to-verse style to better support hardware keyboards on iPad.
  • Added press-and-hold link previews for most types of links in the note viewer.
  • Added ability to link to document fragments in notes. (Use plain text editor to add id= attribute to a tag; link with href=”#id” syntax.)

ENHANCEMENTS

  • Do a better job of managing the toolbox size when using a hardware keyboard attached to an iPad.
  • Support more types of link previews in book and Bible text. Change the way they are displayed to take up no more of the screen than required.
  • Accommodate more types of links being pasted into notes from PocketBible books and Bibles.
  • Added VoiceOver labels and hints to many more buttons.
  • Slight visual changes to the shape and borders of book panes to provide better definition when panes are displayed in tiles.
  • Added the version numbers of the Bible reference data in a Bible to its “About This Book” screen.
  • Users Guide is automatically re-installed on request if accidentally deleted.

BUG FIXES

  • Changes in the way the iOS speech synthesizer handles empty strings passed to it would cause PocketBible to sometimes repeat a verse or paragraph when reading it.
  • Duplicate notes could be created while changing the name of a Journal note. (AFS)
  • Links to websites in notes could fail if the URL contained spaces.
  • Text in alert dialogs was difficult to read when using a light color scheme while the device is in dark mode or a dark color scheme while in light mode.
  • Book, chapter, or verse numbers could get truncated in the “spinner” go-to-verse style.
  • The “spinner” style go-to-verse dialog wasn’t being displayed the first time it was invoked after having been selected in Settings.
  • The app could crash when a shortcut key was used to open the “today” menu on an iPad with a hardware keyboard.
  • Long-press on a toolbar button in landscape mode on an iPhone activated the wrong button.
  • Long press on go-to button to see list of recent verses would not display correctly if the active book was not a Bible.
  • Selecting a recent search caused the search to be performed but the results were immediately dismissed.
  • Login/Create Account screens now have dark background when dark color scheme is active.

Note on Account Deletion

Apple initially rejected this version of the app because it doesn’t provide a way for users to delete their account. This is a new requirement and we knew about it but didn’t realize it had taken effect. Apple was gracious enough to approve the app, but we’ll have to add account deletion in the next update.

The reason we don’t currently have this in any of our apps is because it is “dangerous”. Consider that account deletion will do the following:

  • Your entire account is removed from the server, including your transaction history. As a result, PocketBible is affected on all platforms even though you’re doing the removal from an iOS device. You won’t be able to download books or have access to Advanced Feature Set features on Android, macOS, or Windows when you delete the account. This cannot be undone.
  • All of your notes, highlights, bookmarks, and devotional reading progress are permanently removed from the server and from your device. This cannot be undone.
  • All books, Bibles, and AFS features are removed from your device except those that came bundled with the app.
  • Since your account and transaction history is deleted, no refunds can be issued for products purchased in the last 30 days that would otherwise be eligible for refund.
  • All settings and user preferences are removed from the device. All search and navigation history is removed. The app will restart and will believe you are running it for the first time.

Even though we plan to give you more than one opportunity to cancel the deletion sequence, once you confirm it twice, we will proceed and it can’t be undone.

We’ve always made account deletion something we do by request to tech support. If we see that a user has a lot of books or a not of notes/highlights/bookmarks, we’ll give them the opportunity to change their mind before automatically continuing. We’re sure we’ll have more than one unhappy user as a result of this Apple requirement.

Fun fact: PocketBible allows you to view your Cloud Library download account even if you refuse to log in. That’s because a few years back there was a reviewer at Apple who could not figure out the difference between “shop for Bibles and books” and “access your download account”. He told us the user has to be able to shop without logging in, then he showed us the error message he gets when he select “access your download account”. We pointed out how to get to the built-in store but he wouldn’t budge. So when you go to the Cloud Library screen without logging in, we give you the opportunity to log in, but if you choose not to, we show you an empty list. That made the Apple guy happy and they approved the app. 🙂

PocketBible for Android Updated – Version 1.7.15

On Tuesday, August 29, 2023 we uploaded a new version of PocketBible for Android to Google Play (version 1.7.9, build 290). This is the first update in quite a while — we’re a little embarrassed to say it’s been about 5 years. Since the end of August we’ve uploaded several revisions — the latest being 1.7.15.

Because of the issues you’ll read about below, it was necessary to get this update released as soon as we could. As a result of jumping 5 Android versions (from version 8 to 13 — that’s “Oatmeal Cookie” to “Tiramisu” for those of you who follow Google’s cutesy naming system for their operating systems), we knew we would discover little things that would need to be fixed right away and so far that has indeed been the case. Updates are documented near the end of this article under “Phase 1”.


Why So Long?

I don’t want to make any excuses but I also want to be honest about what the situation is. You may know that the development team here is pretty small. We don’t have people assigned to each platform. We move from iOS to Windows to macOS to Android as needed. I originally developed our Android app, but pretty quickly passed it off to a more junior person. When that person left, I hired a replacement. About 5 years ago, that person left, too.

By then, the app was in pretty good shape and didn’t need a lot of updates. It had gotten to where I no longer knew my way around the code. And since I’m not an everyday user of the Android platform in the same way I am iOS, the operating system changed to where I no longer knew it either.

So when the Android app eventually needed updating I went to an Android programmer I knew who worked on it as a side gig for a few months. Eventually he took a different full-time job and couldn’t work on it any longer. So I found a really good contract developer who did a lot of the work to bring it into the 2020’s and get us almost up to Android 12.

And then this Bible thing happened…

Why Update Now?

If you’re a regular reader of this blog (that’s about 4 of you I think), you know that earlier this year we discovered a problem in the way Bibles are processed and stored for use in PocketBible. When we first wrote PocketBible, any time a new Bible was released we had to update the code in PocketBible and release a new version. This is because Bibles are very special and form the heart of how PocketBible works. That means any unique aspects of how they interact with other Bibles and with Bible reference books often has to be done directly in the PocketBible code.

So years ago we updated the Bible format PocketBible uses so that these unique aspects could be embedded into the Bible and not require PocketBible itself to be updated each time we released a new Bible. Turns out we didn’t go far enough. We have several new Bibles coming out that are just different enough that they couldn’t be published without updating every version of PocketBible. So we decided to stop what we were doing on the new Windows version of PocketBible and update every other version of the app. Then go back to the Windows version and update it, too, for this new format.

The macOS version with these changes was released a couple months ago. The iOS version is in beta.

And then this Google thing happened…

PocketBible Disabled on Google Play

Google decided late last year that if your app wasn’t built with the latest or next-to-latest version of their SDK, that you couldn’t be on Google Play. (It is more complicated than that, but that’s the net effect.) They said they were going to disable apps starting in May 2023. But they gave us the option to request an extension to August 2023, so we took it.

Then, after acknowledging we had until August, they said they changed their mind and they were going to pull the app in May.

We were right in the middle of macOS and iOS updates at the time and had been planning to get to Android before the end of August, so we have spent about 3 months explaining to people how to side-load PocketBible and bypass Google Play.

This forced us into a two-phase approach to making the Bible-format updates to the Android app. First, we needed to bring it up to date with the latest SDK. Google required version 31 compatibility, but version 33 is the latest so we went all the way to 33. Until that was done, it was pointless to start into the change for Bible files

Phase 1

Version 1.7.10 (September 2, 2023) addressed these issues:

  1. If you were using an SD card to store your books, they seemed to have disappeared. The method of finding your SD card changed in a recent version of Android OS and PocketBible was looking in the wrong place. It should be able to find them now.
  2. When using the dark UI theme, the list of books open in the active pane was displayed with gray text on a gray background. Similarly, the pop-up list of recently visited verses was similarly gray-on-gray.
  3. The dark mode theme was inexplicably using a dark blue color instead of a black color for the top and bottom action bars. Turns out this change was introduced as a debugging tool by a contract developer and we kind of liked it so we left it in. You did not like it. We reverted to black and very dark gray for the action bar, bottom action/tool bar, pane tabs (AFS), and go-to-verse buttons.
  4. An issue with viewing and saving Autostudy reports (AFS) was resolved.
  5. Resolved an issue that caused the app to crash when “Buy/Apply Upgrade” was selected from the navigation menu.
  6. Books that include the Laridian logo on the title page now use our newer blue and orange logo. In the process of doing this we fixed some previously unreported problems with displaying images.
  7. In the process of doing this upgrade, the minimum supported version of Android OS went from 4.1 “Jellybean” up to 4.4 “Kitkat”.

Version 1.7.11 (September 7, 2023) addressed these issues:

  1. We thought we had fixed Strong’s number searches but we hadn’t.
  2. Title page logo image was not being displayed on newly downloaded or moved books.
  3. Splash screen image was too tall on tablets in landscape orientation.
  4. Changed the image on the login screen to the new Laridian logo.
  5. Made internal changes related to how colors and styles are applied in the dark and light UI themes. There could be minor color changes as we seek to better organize the code in this regard.

Version 1.7.12 (September 20, 2023) addressed these issues:

  1. Re-architected the process of launching the app to get control over the transition from the onboarding slideshow, registration reminders, and registration/login screens to the main book view.
  2. Addressed a problem where deleting a book would remove it from the list but not actually delete the file.
  3. Added new UI color schemes for AFS subscribers.
  4. Minor changes to the default “Light” and “Dark” UI color schemes to improve general appearance.
  5. Treat the legacy AFS and AFS subscription differently, since features are now different between the two.
  6. Revert to “no AFS” if the user logs out of their account.
  7. Show logged-in customer ID, feature set, and AFS expiration date in About box.
  8. Get rid of boxes around bottom action bar buttons.
  9. Style the audio and autoscroll context menu bars with rounded corners and slightly more transparency.
  10. Added an option to control whether or not pane tabs show the book category (AFS). Only show the category when pane is inactive. Active panes always show abbreviation of active book.
  11. Removed “Exit” from the action bar menu. This is a hold-over from when mobile operating systems did a bad job of managing memory when apps were left running. It’s 2023 and nobody exits apps anymore.
  12. Don’t do the navigation menu animation demo. We all know there’s a slide-out menu on the left side of the app.
  13. Updated Help to describe tabbed panes. Include info on turning on/off categories in pane tabs. Document new AFS features.

Version 1.7.13 (September 25, 2023) addressed these issues:

  1. Restore “Journal” to the navigation menu for Legacy AFS owners. In 1.7.12 it accidentally required an AFS subscription.
  2. Make standard “Dark” and AFS “Black” themes darker based on user feedback.
  3. Adjust splash screen blue to match launch icon blue.
  4. Add an option to disable linked-to verse highlighting.
  5. Fixed some problems running on Android 4.4

Version 1.7.14 (September 28, 2023) addressed these issues:

  1. If the user deletes the Users Guide then selects “Help”, it is automatically reinstalled from the app bundle.
  2. Words of Christ could be unreadable or appear be displayed in the wrong color when certain highlight colors were used and “words of Christ in color” option was turned off.

Version 1.7.15 (October 6, 2023) addressed these issues:

  1. Resolved an issue where bottom action bar was getting partially hidden (or over-compensated for) under certain circumstances related to pixel density:
    • Split screen
    • Side panel open
    • Note editor (or any time keyboard was showing)
  2. Addressed several aesthetic issues when font size was set to its largest and smallest sizes in Android Settings and when “make everything bigger/smaller” was set to its extremes:
    • Pane tabs (AFS).
    • Note title above editor.
    • Go-to-date dialog for devotionals
    • Go-to-verse spinner and book/chapter/verse picker for Bibles.
    • Margin preference screens
    • Splash screen
  3. Made the text color used for book titles on the library lists have more contrast.
  4. More correctly position the autoscroll and audio toolbars in more circumstances (AFS).
  5. Addressed further problems with saving and printing Autostudy reports (AFS).

Phase 2

The above just gets us to where we can start doing the work we came here to do. We need to port the C++ code that has already been implemented in PocketBible for macOS and iOS to Java for Android.

Beyond

Once we get this work done, we hope to more actively update the Android app. Admittedly, it has been a bit of a problem child over the years and we’ve let it get away from us. But more importantly, finishing work on this version will let us return our focus to PocketBible 3 for Windows, where we have to do it all again in yet another programming language.

Thanks for your patience.

No Exit

While updating the Android version of PocketBible over the last couple of weeks, we took what we thought would be the non-controversial step of removing Exit from the action bar menu. In the light of some complaints, I thought I’d explain.

History

While the removal of the Exit function from PocketBible for Android seems abrupt and a step backwards in terms of giving users control over what’s going on on their device, the fact is that it’s the presence of the Exit function that is an anomaly.

Back in 1993-94 we experimented with Bible software on the Newton MessagePad. Including an Exit option on that platform was allowed, but the OS did a good job of managing memory without it and it wasn’t absolutely necessary.

Introduced in 1996, Palm OS discouraged apps from having a way to exit. It managed apps itself. Users weren’t supposed to think of “apps” so much as accomplishing a task. The idea of “launching” and “closing” were foreign to the “Zen of Palm”.

At about that same time, Windows CE was telling developers that mobile users didn’t need an explicit way to close their apps; the operating system would handle it. The app didn’t ever terminate itself; it was just told when it was about to be terminated, then it was terminated by the operating system.

iOS came along in 2007. Apple strongly discouraged developers from including any kind of exit functionality. Again, the OS managed memory better than the user could. Keeping apps around meant they launched faster.

Including the ability to exit an app was not recommended in Android (2008). Once again, the OS was better able to manage resources than the user.

So we come into last week’s decision to remove Exit from the action bar menu with a 30-year history of mobile operating systems discouraging or disallowing “exit” or “close” functionality in apps.

Benefits

The main advantage to the user of allowing the OS to manage running apps is that frequently used apps are more quickly and easily available.

Android facilitates this behavior by being able to intelligently decide which apps it should terminate to make memory or other resources available for the currently running app. It has ways of controlling how much CPU time is used by background apps so they can continue to work if necessary without affecting the responsiveness of the foreground app. (PocketBible doesn’t do any work when it’s in the background, but many apps do.)

Allowing Android to decide when to load and unload apps lets it more effectively manage battery life by minimizing loading activities and controlling background activities.

Android is able to predict which apps a user is likely to launch and keep them ready in memory as part of reducing launch time as described above. Similarly, it can terminate infrequently used apps when you’re done with them.

The Dark Secret

Don’t tell anyone, but that Exit option didn’t actually terminate PocketBible. What we did was programatically press the “back” button on the bottom of the screen while ignoring our own navigation history. So it was as if you had pressed “back” a dozen times to get past all the verses you had visited, then pressed it one more time to go back to the launch/home screen. We maintain your navigation history for your next session, of course, but internally that’s all we were doing.

Android has a “halt” method we can invoke to force the app to stop, but using it is strongly discouraged. It doesn’t allow for a controlled exit of the program and can cause data loss. So, yeah. Exit didn’t exit.

So How do I Exit the App?

Easy. You can exit PocketBible the same way you exit all your other apps, and with fewer screen taps than you were doing before. Just tap the “Home” button (or perform the “Home” gesture if that’s how you have it configured).

In other words, you could say we didn’t remove Exit, we just moved it to the bottom of the screen and made it look like a little circle. Yeah, that’s what we did — we just moved it to make it more convenient.

You’re welcome! 🙂

PocketBible for Windows Progress Update #15

Sometimes the things we think are obvious to the outside world aren’t.

In our last update, we explained in detail a problem we had encountered in the way that we encode Bibles for use in PocketBible. The TL;DR version is that we found it necessary to update every version of PocketBible, plus update the BookBuilder app, in order to accommodate necessary changes to the way we deliver Bibles.

As you know, PocketBible runs on four platforms: iOS, macOS, Android, and Windows. One of our points of pride is that PocketBible is a native app on each of those platforms. That is, we didn’t use a special tool that might allow us to create one app and run it on all platforms — we created separate apps for each. So when something like this comes up, we have to update PocketBible on all 4 platforms, and in this case, we also had to update our BookBuilder app.

We have a very small team of developers. We don’t have people assigned full time to each platform. So to work on one we pretty much have to stop work on others. That has meant that while we’ve been focusing on Windows, we haven’t been able to do much/anything on other platforms. It also means that if we need to work on iOS, macOS, or Android, we aren’t able to do much on Windows.

We kind of thought you guys all understood that, so we’ve been keeping you updated on our progress on the other platforms with the understanding that we would get back to Windows when these were done. Turns out that wasn’t clear. Hopefully now it is. Here’s where we stand on each of the other platforms with respect to this Bible format update.

BookBuilder and PocketBible for macOS

Because BookBuilder needed to be updated (of course) due to the Bible encoding changes, and because BookBuilder and PocketBible for macOS share so much code, we tackled both of these together. We did all the necessary changes to BookBuilder, then tested the output in PocketBible on the Mac.

While we were in the code, we did some necessary bug fixes and a few enhancements. We released PocketBible 1.4.2 on June 7, 2023 and it’s been pretty stable.

We did not release a new version of BookBuilder to the public because it’s possible we’ll discover problems related to the new format while working on all the PocketBible releases, and we’ll want to go back and make changes.

PocketBible for iOS

Version 4.16.0 went to a small group of beta testers about a month ago. Problems have been minimal and I anticipate we’ll approve it for the App Store soon. It incorporates the new Bible encoding changes and has a small number of improvements and quite a few little bug fixes.

PocketBible for Android

Android has been a challenge for a variety of reasons. Google changed the rules on us and required that we rebuild the app with the latest version of their tools for basically no reason. The app was working fine, but after telling us we had until August to upload a new version to Google Play, they decided to invalidate the app in May. This fell right in the middle of what we were working on for the other platforms. We opted to continue on our original plan of updating the Android app by the end of August. In the meantime, Android users were given instructions to side-load the app from our website and that worked fine.

PocketBible for Android has not been updated since 2018 and the changes required to get it compatible with the latest OS have been challenging. We released a build with minimal new features on August 29th and updates to fix some bugs on September 2 and 7. We anticipate at least one more small release to fix some additional issues; probably two more.

Once we get Android up to speed with Google’s new requirements, we’ll need some time to do the Bible encoding changes. This will involve porting a lot of code from the macOS/iOS apps and making sure it works. The Android app handles Bibles slightly differently from the other apps, so it’s not just a line-for-line translation from one language to the other, but rather it’s a concept-by-concept implementation using methods consistent with the way Android does things.

I’d like to tell you how long I think that’s going to take but I know I’ll just be wrong. Shouldn’t be too long, though.

PocketBible for Windows

Remember PocketBible for Windows? This is an article about PocketBible for Windows.

Once we get back to the Windows app I want to do a couple of things. First, I obviously need to port the Bible encoding changes from macOS/iOS into Windows. The JavaScript code in the Windows version follows the way the C++ code in macOS/iOS works pretty closely, so this should be easier than doing it in Android and Java. Second, while we’ve been working on getting the program finished, new versions of both Electron and VueJS have been released. We should refactor the app to use the new code so we’re not starting out already in need of an update.

We’re actually fairly close to having at least the standard features of the Windows app finished once we’re able to get back to it. There are some Advanced Feature Set features that haven’t been touched yet (Autostudy comes to mind).

Moving Forward with the “Native Apps on All Platforms” Plan in 2024

I want to take advantage of the fact that we’ve had to do recent re-releases of PocketBible on every platform and make it a goal to do some kind of small update to PocketBible on each platform every year. It’s easier to keep up with frequent, small changes than to have to absorb a massive number of changes to how to build and release apps when you do it every 4-5 years.

So that’s the status of PocketBible for Windows, told in terms of everything else that’s going on here. Anytime you see a blog article about any of the other platforms, count it as progress on the Windows app. 🙂


Photo by Arif Riyanto on Unsplash

PocketBible 1.4.x for macOS Released

This is the original 1.4.0 announcement updated to mention features in 1.4.1 (released on May 26) and 1.4.2 (June 6). Updates are highlighted. If you downloaded 1.4.0 immediately after release, you’ll want to select Check for Updates from the PocketBible menu and follow the instructions to update.

As mentioned a while back, we had to make some changes to our Bible format that required PocketBible on all platforms to be updated. The macOS version is the first of these, mainly since it shares a lot of code with the macOS version of BookBuilder, which also had to be updated, and was the easiest version of PocketBible to test the BookBuilder changes with.

While we were editing the code, we took a look at the to-do list and made a number of other changes. Here’s what’s new.

Bug Fixes

When macOS is updated, there are inevitable little changes to various behaviors that affect apps in unexpected ways. We resolved some unintended horizontal scrolling in Study Panel, Open Book, and Cloud Library lists and adjusted the height of some message windows to accommodate text that was being drawn a little differently and getting cut off. We also made some changes to a toolbar button that wasn’t being drawn correctly. These still may be problematic in macOS 10, but they work a lot better in macOS 13.

When right-clicking on a Bible link, the Autostudy option on the context menu would sometimes do a word autostudy rather than a verse autostudy. We were able to fix that.

The third-party automatic update component we were using to install updates has always been flaky. We took this opportunity to remove it and replace it something simpler. Now you’ll be informed when an update is available and given the opportunity to download it, but you’ll have to exit PocketBible and complete the installation yourself. This amounts to opening the update and dragging an icon about 3 inches into your Applications folder. Much more reliable. It was only working about half the time before.

Enhancements

A few features were enhanced. The toolbar will look a little different due to changes in the way macOS handles toolbars. Because of those changes, 1.4.2 added an option (Settings > General) to control whether you’d like to adopt the new “unified” toolbar or stick with the “expanded” view from earlier versions. If you’re still using macOS X (version 10), you won’t see this option since the unified view isn’t available in that version of macOS.

Link preview pop-ups now use the same text size as your books, which will make them easier for some users to read. In version 1.4.2 we added a small gap to the right of the link, between the link and the pop-up, to make it easier to move off the link and dismiss the pop-up.

We also built this version as a “Universal App” to support both Intel- and Apple Silicon-based Macs. Newer Macs may notice a performance improvement.

New Features

We didn’t tackle anything huge because we have a lot of work to do on all the various versions of PocketBible, but we managed to squeeze in some new features.

Obviously, we implemented book reader engine 1.078 to support newer Bibles. You won’t see any benefit from that for a while, but it’s in there.

We expanded the types of links that will show a preview when hovering in both books and user notes. Previously, you would only see a link preview when hovering over a linked Bible reference. Now more types of links, including footnote links, will show pop-up previews. In 1.4.2 we added a half-second delay before popping up these previews so that you wouldn’t be inundated by pop-ups as you move your mouse across the screen.

Added menu items and toolbar buttons to toggle the “Sync Bibles/Commentaries” feature and to do a one-time sync to the current verse in the active Bible. This allows you to assign a short-cut key to that function and turn off the automatic feature so that you have the flexibility to scroll your Bibles independently but to sync them all up when you want to. We also added that one-time sync feature to the right-click context menu when you click on a verse.

We added the ability to hide the “Note” link that appears at the start of a verse that has a note. You can also turn off your highlights, or only highlight the verse number. This is similar to how the iOS version currently works.

Many users are confused by the way PocketBible applies a light highlight to a verse or passage that is the target of a hyperlink. You now have the option of turning that feature off. (You might find it unnecessary now that the hover feature works on more types of links.)

Links to document fragments were added to notes. If you know what you’re doing, you can add a tag of the form <a href="#name">see name</a> to link to a tag with its id value set to “name”. This is only implemented in the Mac version, so the links won’t do anything in the other versions of PocketBible until/unless it gets implemented there, too.

Controlling Location Sync

This is perhaps the biggest change, and was rolled out in 1.4.2. Users who have an active Advanced Feature Set subscription will have the option to control which of their Bibles and commentaries respond to changes in the active Bible. This will let you keep your commentary on the primary passage while exploring other passages with other Bibles.

Devotionals participate in a slightly different form of location sync. It’s always been the case that when you tell any one devotional to go to today’s reading that you can have all your other devotionals do the same. 1.4.2 added “first unread reading” to “today’s reading” with respect to this behavior. If you ask any one devotional to go to its first unread reading, you can ask other devotionals to follow. This is handy if you’re reading from more than one devotional book or reading plan each day. And if you have an active AFS subscription, you can control this on a pane or book level.

Dictionary sync didn’t change, but 1.4.2 added the option to exclude particular panes or dictionaries from normal dictionary sync. Again, you need an active AFS subscription to take advantage of this feature.

Advanced Feature Set Enhancement

The changes to location sync, described above, apply if you own the AFS subscription. This is the first new feature we’ve added to the AFS since it switched to a subscription, so if you own the “permanent subscription to the legacy AFS” you will not be able to take advantage of this feature. You need a subscription to do that.

How to Upgrade

If you’re running a version before 1.4.0, select Check for Updates in the PocketBible menu and choose the option to install and relaunch. If you have trouble with that, just go here and select the Download button. Download the file, find it in your Downloads folder, open it, and drag PocketBible into your Applications folder.

If you’ve already downloaded 1.4.0 or 1.4.1, select Check for Updates in the PocketBible menu and follow the instructions.

        

PocketBible for Windows Progress Update #14

Seriously, this should have been our first clue, right?

The last 3 months have been interesting. One of our ticking time-bombs exploded and we’re working hard to rebuild. Let me explain…

As we explained in the video that launched this project, when we originally designed PocketBible we put a lot of intelligence about specific Bibles into the program itself. This was done so that PocketBible could handle differences in versification between Bibles. A simple example is 3 John 14-15. These are two separate verses in some Bibles and are combined into verse 14 in other Bibles. As a result, if you highlight 3 John 15 in a Bible that has that verse but are reading a Bible that does not have that verse, we apply the 3 John 15 highlight to 3 John 14 (if it isn’t already highlighted), not because it’s the last verse of the chapter and there isn’t a verse 15, but because, in a 14-verse version of 3 John, verse 14 contains the contents of verse 15 and therefore is verse 15 (and verse 14).

3 John 13-14 (King James Version)3 John 13-15 (New American Standard Bible)
13I had many things to write, but I will not with ink and pen write unto thee:
14But I trust I shall shortly see thee, and we shall speak face to face. Peace be to thee. Our friends salute thee. Greet the friends by name.
13I had many things to write to you, but I do not want to write to you with pen and ink; 14but I hope to see you shortly, and we will speak face to face.
15Peace be to you. The friends greet you. Greet the friends by name.
Some Bibles split 3 John 14 into two verses (or, if you prefer, some Bibles combine verses 14 and 15 into one verse and call it 14).

Solving issues like this was originally done in the code. So there’d be a whole sequence of steps like, “If this Bible references is in 3 John and the verse number is 15 but the Bible you want to map it to has a version of 3 John that only has 14 verses, then set the verse number to 14.” This was fine when the number of these cases was relatively small. But as we added more and more Bibles, there turned out to be hundreds of these.

The solution was to describe all the mappings in a table containing the “from” book, chapter, and verse, and the “to” book, chapter, and verse for each weird situation. The data tables that describe this mapping are huge and complicated. There are between 1500 and 2000 of these “special cases” in PocketBible. And this is just one of the required data tables. There is another table that tell us which version of each book of the Bible is in each of the Bibles (so we can tell if a particular Bible has the version of 3 John with 14 or 15 verses, for example). Another table maps each of these different versions of the books of the Bible to their names. (So that we can tell that both versions of 3 John should be called “3 John”.) A variety of other data tables help us deal with these issues.

The problem with putting this information into PocketBible (whether directly in the code in a series of “if this then do this” statements or in tables that can be iterated and processed by code) is that anytime we release a new Bible with a new versification scheme for one or more of its books, we have to update every version of PocketBible. Currently that list would include PocketBible for iOS, Android, macOS, Windows Store, Windows Desktop, and the new Windows Version — six different apps would have to be modified. Three of those six share the code that contains these tables. That is, they all use the same code in the same language to process Bible references, and it is written in C++. So once we add a new Bible to the C++ code, the iOS, macOS, and Windows Desktop products are done. But the Android app is in Java, the Windows Store app is in C#, and the new Windows app is in JavaScript. So that means the same changes have to be made in 4 different languages, then 6 different apps have to be rebuilt.

Building the app for every platform is tedious, error-prone, and time-consuming. On top of that, over time it gets to where it can’t be done. We were still supporting PocketBible for Palm OS long after it got to where it was impractical to build a new version of the app. Ditto PocketBible for Windows CE and Pocket PC. And then there was PocketBible for webOS and Blackberry that were created by outside developers. In other words, this was just a bad design.

So in 2015 we decided to redesign our LBK files so that these tasks were not performed in the code, but were all described in tables that could be packaged with each Bible. That way, the app could look at each Bible as it was installed and if it contained a more recent version of these tables than what the app already knew about, it would update its tables with those contained in the LBK file. This would allow a new Bible completely unknown to PocketBible to be released and it would function as if PocketBible knew about it all along.

When we contacted the developer of the Windows Store app about these changes, he wasn’t excited about making them because of the time involved. And when we started digging into the old (old at that time; older still now) Windows Desktop code, we realized it would be all but impossible to update that app to include compatibility with these new Bibles. (Remember also that at this time it was unclear whether the Windows Desktop app was even going to continue to be used because supposedly the world was transitioning to the awful Modern User Interface paradigm of Windows 8. So it was unclear whether or not it would be worth the time to update it.)

We decided to go ahead with the new LBK Bible format anyway. It would just mean that new Bibles wouldn’t work on the Windows platform — at least not until the Windows Store version was updated. What we didn’t know at the time was that it never would be.

As you know, this became one of the primary motivations to re-write PocketBible for Windows. The new version already implements compatibility with the new LBK format for Bibles.

Psalm 68:11-14 NASBPsalm 68:12a-15 NAB
11The Lord gives the command;
The women who proclaim good news are a great army:
12“Kings of armies flee, they flee,
And she who remains at home will divide the spoils!”
13When you lie down among the sheepfolds,
You are like the wings of a dove covered with silver,
And its pinions with glistening gold.
14When the Almighty scattered the kings there,
It was snowing in Zalmon.
12aThe Lord announced the news of victory:
13a“The kings and their armies are in desperate flight.
12bAll you people so numerous,
14awill you stay by the sheepfolds?
13bEvery household will share the booty,
14bperhaps a dove sheathed with silver,
14cits wings covered with yellow gold.”
15When the Almighty routed the kings there, the spoils were scattered like snow on Zalmon.
This is the same passage in two different Bibles. Verse division is completely different and involves the rearranging of the text and suffixes on the verse numbers.

What we didn’t realize is that we had been lying to ourselves about no longer needing to update the code in PocketBible when a new Bible was released. There were conditions under which that lie was definitely true. But there were still small, special cases scattered throughout the code and not handled by a data table in the LBK file. For example, some Bibles contain verses with suffixes, like Isaiah 14:25b and Psalm 68:12a, 12b, 13a, 13b, 14a, 14b, and 14c. In the apocrypha, Sirach has a chapter called “Prologue” that is called “Forward” in some Bibles. Esther has chapters A-F in addition to its numbered chapters. While we could map all of these verses to their corresponding verses in other Bibles using the tables that we had moved into the LBK file, when we wanted to print out the Bible reference “Psalm 68:12b” there was a piece of code that got called to look at the stored verse number (which was 14 in this case — 12a was 12, 13a was 13, and 12b was 14) and return the correct “spelling” of that verse number (the 14th verse in Psalm 68 is “12b”).

This all came to the boiling point with the pending release of several new and updated Bibles. While updating the data tables that would make these new Bibles work on any version of PocketBible including the new Windows app, I realized I would also have to deal with some of the special cases in the code itself. And that meant doing the very thing that we had told ourselves we’d never need to do again — simultaneously updating the iOS, Android, macOS, and new Windows versions of PocketBible.

The only reasonable plan forward is to finish what we started back in 2015. So for the last couple of months I’ve been working in both our BookBuilder app and the macOS version of PocketBible (since its code is easiest to work with while working on BookBuilder) to move special cases out of the code and into data tables, then adding code to write those data tables into the LBK file, then adding code to read them into PocketBible when necessary. For each special case in the code, the code has to be rewritten to use the data tables instead. All of this has to be tested and will have to be tested on each platform into which we roll this new code.

What this means is that once I finish doing this in the macOS version, I need to do the same in the iOS version (should be quick since it’s the same code that is used in both the macOS and iOS versions), then re-write it in Java for Android, then release all those new versions to their respective stores, then update the new Windows version (re-write for a third time, this time in JavaScript) and test it there.

So that’s what I’ve been doing so far this year. How’s your 2023 going?

Meanwhile…

In the meantime, we’re moving on to Advanced Feature Set features in the Windows version.

The ability to create saved layouts has been implemented similar to how it exists in the macOS version. You can create a new layout, give it a name, and it will appear as a tab across the top of the screen. These tabs can be dragged around to re-order them, and they can be renamed. This will get awkward if you have more than a handful of layouts, but should work for most people who would like to dedicate a screen layout to devotional reading and another to study.

Screenshot showing 3 layout tabs: “Default Layout”, “Greek and Hebrew”, and “Today”. When “Today’s Reading” is selected on the toolbar, we’re taken to the “Today” tab and our devotional goes to the reading for today (which was March 17, 2023). Note that the date at the top of the pane (January 1) is incorrect; this is a debug build with some diagnostic code in place.

Related to the above, we’ve added a toolbar button labelled “Today” that will activate a devotional and take you to today’s reading. If you have a layout named “Today”, this button will activate your layout named “Today” and show today’s reading in the active devotional. This is not unlike the same feature in the macOS version of PocketBible.

Setting voice preferences. Note that we’re running on a Mac here, so the available voices are those from macOS. They would be different on Windows.

Quite a bit of progress has been made on implementing a “Speak” feature. The app uses the synthesized speech voices built into Windows to read to you. You can read the selected text, the selected verse(s), or start reading at the top of the page and continue until you tell it to stop. Toolbar buttons have been added to control this feature. You’ll be able to choose your voice and the rate at which it is speaking. Different voices will be available for English, Spanish, and Greek, assuming you have them installed. This will all be similar to the macOS version, which uses the synthesized voices built into macOS.

Some smaller tasks have also been accomplished:

  • Ability to remove an installed book.
  • Solved some very tricky issues related to date calculations in devotionals.
  • More tricky issues related to going to a particular place in a book (say the reading for today in a devotional) and the program getting confused about where it was at.
  • Better detection of AFS subscription changes and how that affects options you may have selected that require an active subscription.