A Hardware Keyboard Shortcuts Tip for Drafts 5

Drafts 5 is a great app for capturing thoughts, drafting notes, and capturing tasks, and quickly sending them, via Actions, to other apps or services for further processing. The typical workflow is:

  1. Launch Drafts
  2. Type a draft
  3. Launch an Action to process the draft

On iPhone, swiping left from anywhere to pick an Action is right at your fingertips, since you are typing on screen. On iPad, if you type with an external keyboard (which I highly recommend), launching an Action is a little more cumbersome. By default, you have to move your fingers off the keyboard and reach up to the screen to get to your Actions list. There is another way to launch Actions, however, that doesn’t require you to move your fingers off the keyboard.

Custom hardware keyboard shortcuts

Drafts 5 lets you assign custom hardware keyboard shortcuts to any Action. This is an extremely rare, and extremely powerful, feature. You can configure hardware keyboard shortcuts for text formatting commands and to insert text snippets (such as today’s date) into your draft. You can also define a set of hardware keyboard shortcuts to use to complete your drafts.

I use Drafts 5 throughout the day to write microblog posts, notes, and tasks and send them to where they need to go: Dropbox, Ulysses, my to-do app SwiftoDo, and so on. For all my most-used Actions that process drafts, I use an easy-to-mash but hard to accidentally type accelerator, Control+Option+Command, plus one letter, when I complete my draft and want to send it on its way.

I use the Control+Option+Command accelerator only for Actions that complete drafts, so it’s always clear to me when I type it that I am ending my draft and sending it somewhere else.

Here is my list of hardware keyboard shortcuts, each of which I find incredibly useful:

  • Control+Option+Command+D: save draft to a Dropbox folder
  • Control+Option+Command+U: save draft to a Ulysses Inbox folder
  • Control+Option+Command+T: send tasks in draft to my todo.txt file via SwiftoDo
  • Control+Option+Command+M: post draft directly to Micro.blog
  • Control+Option+Command+G: search for draft text in Google
  • Control+Option+Command+A: search for draft text in App Store

Each shortcut is easily mapped to its Action via the “Edit Action” dialog. (See the photo that accompanies this blog post.) If you forget what custom shortcuts you created, hold down Command while editing your draft, and all the custom shortcuts you defined will appear in the standard iOS hardware keyboard shortcut pop-up display.

These hardware keyboard shortcuts don’t necessarily save me a lot of time and trouble, but they make my Drafts workflow on iOS feel fast and comfortable. I highly recommend setting some up for your own iPad Drafts workflow.

What would make me upgrade my Series 1 Apple Watch

I love the Apple Watch. I didn’t always, though. When I first tried on a Series 0, a couple weeks before it was released, I quickly made the decision not to buy one. I thought it was too expensive and that it was not immersive enough. I had been expecting an iPhone for the wrist; what it was instead was a wristwatch with some extras. Six months later, however, I relented and bought one, mostly because Target was offering the Space Gray Sport model at a deep discount, and I wanted to pick a holiday gift for myself that my family members could chip in for.

I quickly grew to love the Apple Watch, despite its slow speed and lack of viable third-party applications. The first-party Apple Watch applications alone—such as Messages, Workouts, and Weather—pleased me very much. Caller ID on my watch was great for avoiding telemarketing calls at dinner. Something as simple as having the temperature always available on my watch face far more useful than I had anticipated.

I have a Series 1 now because my Series 0’s screen popped off due to battery swelling after almost two years. Apple covered it under an extended warranty and sent me a Series 1 for free. The Series 1 is much faster than the Series 0, and is not going to be obsoleted by Watch OS 5 in the fall. Still, it isn’t as fast, and consequently as useful, as the Series 3. I fully expect a new Apple Watch model to be released later this year, which will be even faster.

If I still had the Series 0, I had planned to upgrade this year, for increased performance alone. Now that I have the Series 1, I am not so sure. My Series 1 has great battery life, but is starting to show performance problems. Workouts, for example, take a long time to start. Third party apps are still, largely, useless for me, for the same reason. Despite these problems, most of the features of the Apple Watch are still working just fine for me.

The main feature that would tempt me to upgrade, at this point, would be new or better health monitoring features. The idea that the watch could save my life, by monitoring for irregular heartbeats, is very compelling to me. I would welcome and pay for any additional features in that area. If they are confined to newer hardware, I would definitely upgrade to get them. I care more about that sort of thing than I do about increased speed, cellular or GPS connectivity, or (if the rumors are true) a larger display area.

“Recess” and “Good Bones”, or selling the world to my children

There’s more beauty in this world than you can guess

Recently, with the help of someone on Micro.blog and Apple Music, I have turned my family on to the music of Justin Roberts. His band plays children’s music in a power pop style. His music is really catchy, and his lyrics are wry, funny, very kid-friendly (my daughter sings them all the time), and sometimes also play to the parents on emotional level as well.

My favorite Justin Roberts song, by far, is “Recess”. Like the best power pop songs, this song has more hooks and ideas in it than most albums do. The lyrics are cleverly and consistently written from the point of view of a bored kid stuck in a classroom, waiting for the recess bell to ring:

Can’t you hear the blacktop callin’?
Classroom clock is stuck or stallin’
There is nothing that will pass the test
Unless it’s recess

In the second and third pre-chorus endings, the lyrics expand out beyond the tedium of the elementary school classroom to the wonder of the outside world:

One more dotted I
One more crossed T
Then we’ll be runnin’ free
There is more beauty in this world than you can guess

That last line resonates powerfully with me. Seeing the beauty in this world is something children do naturally. I think we forget how to, as we get older, and our knowledge of history and current events expands, and our experience of life evolves from dreaming of what our lives might be to actually living them day-to-day. Our dreams get smaller and more finite as time passes. As we get older still, we relearn to see the beauty, in a different way—with a wonder that is tinged with sadness. As an adult, I see that the splendor and joy of the world is counterbalanced by its disappointments and horrors.

The world is at least fifty percent terrible, and that’s a conservative estimate, though I keep this from my children

The line “There is more beauty in this world than you can guess” always makes me think of the contrasting sentiment expressed in the poem “Good Bones” by Maggie Smith:

Good Bones

Life is short, though I keep this from my children.
Life is short, and I’ve shortened mine
in a thousand delicious, ill-advised ways,
a thousand deliciously ill-advised ways
I’ll keep from my children. The world is at least
fifty percent terrible, and that’s a conservative
estimate, though I keep this from my children.
For every bird there is a stone thrown at a bird.
For every loved child, a child broken, bagged,
sunk in a lake. Life is short and the world
is at least half terrible, and for every kind
stranger, there is one who would break you,
though I keep this from my children. I am trying
to sell them the world. Any decent realtor,
walking you through a real shithole, chirps on
about good bones: This place could be beautiful,
right? You could make this place beautiful.

This is a profoundly powerful poem that I read in college and have never forgotten. As an adult and a parent, I return to it often. It has always made me feel, in some way, like a teenager who concludes, upon first entering the adult world, that I have been sold a bill of goods: nothing is as nice or easy or fair as my parents and mentors (and, let’s face it, TV and movies) told me it would be. This poem distills all the disappointment and disillusionment that experience and maturity bring into seventeen simple and somewhat humorous lines. I love how it ends on a note that is somehow both cynical and hopeful: “You could make this place beautiful.”

Selling the world to my children

It’s my job, as a parent, to sell the world to my children. I want to tell them the good—now, while they are young—and the bad—later, when they are older. In both times, now and later, I have to remember that Justin Roberts and Maggie Smith are both right about the world. It contains all the beauty that has any meaning. It also contains all the horrors that have ever befell anyone. The most important thing I have to teach my children is that they can make it better—they just have to try, even after the veil of childhood innocence has fallen, and they see the world for what it really is.

The calm before the WWDC storm

WWDC is in a little more than two weeks. As a hobbyist developer, I don’t go to big, expensive conferences 3,000 miles from my home. But I do eagerly await it each year. Last year I was so excited about it that I went as far as calling it “nerd Christmas”. This year, though, I’m not looking forward to the keynote, the new APIs, the betas, and so on.

There have been no substantive leaks about what will be announced, and no one’s predictions so far have been that compelling. That’s in stark contrast to last year, when I practically knew what iOS 11 would bring to the iPad, based on rumors and speculation. This year, the most exciting leak we got is that a cross-platform macOS/iOS development framework will not be announced this year.

As a user and a fan, I basically want Apple to announce a rebuilding year. iOS 12 should be a maintenance release. They can make their software faster and more stable. They can make Siri a lot better. They can fix bugs. Other than that, I don’t want a radical UI overhauls of any of their operating systems (as if the latter would ever happen). On the hardware side, I’d love to see them refresh the MacBook Pro and iPhone SE sometime this year, but my expectations for an announcement at WWDC are very low.

As a developer, I don’t really want to worry about having to support new frameworks or features. Just upgrading from one iOS framework to the next one can sometimes take days of work before all the kinks are worked out. Even upgrading Xcode to a new major version is, as a Swift developer at least, a little scary. New versions of Xcode have not been stable or bug-free for me since Xcode 8 was released. The recently released Xcode 9.3.1 has been working really well for me, though, and I’m loath to give it up anytime soon. I’d love WWDC to be about Apple fixing the numerous, relatively minor, UIKit bugs that I’ve had to work around, but past history leads me to believe that iOS 12 will just have another set of odd bugs to work around.

Premature Optimization

In programming, there has long been a warning in computer science to avoid premature optimization. Donald Knuth called it “the root of all evil”. I find myself thinking about this all the time—not so much while programming, but when I’m thinking of spending money on myself, or telling people how to spend their money on me, as for birthday or Father’s Day gifts.

I’m at an age now where I have everything I would ever want. But…everything I have could still be a little bit better. To wit:

  • I have awesome headphones that I love. I want better ones. And different ones.
  • I have a home server that is underpowered, but quiet and extremely reliable. I would love one with enough power to could run virtual machines, but I don’t really need it.
  • I have a clicky mechanical keyboard that I love. I want a better one—that lights up, unnecessarily, or has colorful keycaps.
  • I have an Apple wireless keyboard for my Mac. I want to replace it with the Apple Magic keyboard, even though I already have an Apple Magic keyboard for my iPad.
  • I have a Series 1 Apple Watch that I love. I would love, even more, a Faster Series 3.
  • Let’s not even talk about iPads and Macs.

These few things are some of my material obsessions. What they have in common, for me, is that they have all been satisfied by things I already own, upgrading to newer or better versions would cost a lot of money (way more than anyone would spend in a gift for me), and the upgrade would be only marginally better than what I have, so I’m not sure if it would even make me happy.

Despite knowing all this, I can’t stop thinking about upgrading what I have to something better. I always want to optimize my experience with the things I enjoy. But, until the things I have break down and are no longer useful, it is too early to upgrade them. Doing so would be indulging in premature optimization, which be wasteful, which is “the root of all evil” to me.

Someday, my headphones will break, my keyboards won’t be compatible with my computers, my server won’t support the OS I want to run, and Apple won’t support my hardware anymore. That’s when I will upgrade these things—after I have extracted every bit of their value. Until then, I will just daydream about, and feel a little guilty about obsessing about, premature optimization.

My slide into audiophile territory, Part 3

This is the third in a series of posts about my realization that I have become an audiophile. The prior post examined what it means to me to be an audiophile.

It’s about spending money, right?

Calling yourself an audiophile is a little like calling yourself a rube and not realizing it. That’s because being an audiophile is a hobby marked far more by spending large amounts of money on speakers (I include headphones here, of course)—speakers that sound only a tiny bit better than much less expensive speakers, than on anything else. At worst, it’s conspicuous consumption wrapped in a superiority complex, or an obsession that has gotten embarrassingly expensive. At best, however, it’s about finding new ways to enjoy the music you love, enjoying that music an awful lot with the equipment you have, while keeping a level head about your budget and equipment’s price-to-performance ratio.

I, of course, include myself in the latter camp. I’ve spent a good amount of money on headphones at this point, but I am mostly interested in extracting as much value out of them—as many listening hours and as much enjoyment as possible—rather than on what the next better set of headphones will be.

But why spend a lot more money on a tiny improvement in sound quality?

I care an awful lot about music. I’ve found, quite accidentally, that there is more detail to be heard in the recordings I love, provided I have better speakers or headphones to listen to them with.

I never thought I was missing anything when I listened to everything through $10 Sony earbuds that I would have to replace every three months or so. When I got my first pair of over-ear headphones, though, it opened a new world for me. I heard details in the music I had never noticed before. The soundstage sounded wider. Instruments sounded more distinct, realistic, and separate from each other than I had ever heard before. Drumbeats had a more visceral impact, due to headphone drivers being much larger than those I was used to. On a more basic level, the over-ear headphones had better isolation than the earbuds did, blocking out outside noise, allowing me hear my music even better. Listening to music, something I loved already, became more fun and more exciting than ever before.

Those first over-ear headphones, which I credit for opening my eyes to the benefits of higher-end gear, were nothing special. They were a SteelSeries 7H gaming headset, which I received for free in exchange for writing a review. At the time, it was a $130 headset; today they are being sold for $21, proving that you don’t have to spend outrageous amounts of money to get better audio quality. I’m not saying they are the best headphone ever. Compared to Apple and Sony earbuds, though, they sound fantastic. I never would have realized it, if I hadn’t picked them up.

The headphones I’m wearing right now cost a lot more than those SteelSeries cans, and they reveal details in the music that the SteelSeries cannot. They are objectively better. But the much cheaper headphones are still just fine, and sound way better than whatever free pack-ins you got with your smartphone. I enjoyed them and would probably still be using them to this day if they had not broken. (Headphone durability is a separate issue from sound quality, and can be worth spending more money on.)

The jump from $10 headphones to $130 headphones was definitely worth it to me. Each jump up in price I have made since then was worth it, too. (I didn’t get all my headphones for free!) If I hadn’t tried headphones better than the ones I was used to, I never would have known that better sound was even possible.

What about the law of diminishing marginal returns?

After a certain dollar amount, each additional dollar spent on audio equipment buys you less and less of an improvement in quality. This is the law of diminishing marginal returns, and it’s a very real thing.

Audiophiles can spend stupid amounts of money on headphones and speakers. (To me, the “stupid” threshold is over $400; it may be way higher or way lower to you.) Some headphones cost well over a thousand dollars. Still other models, designed, I think, for for people with more money than sense, retail for three thousand dollars or more. Some speakers cost tens of thousands of dollars. In addition, some people spend hundreds or thousands on receivers, amps, DACs, and whatever other signal processing they want to use to drive their headphones or speakers. The audiophile hobby can get extremely expensive, if you have the money and are never satisfied with what you have. It doesn’t have to be, though.

In my opinion, you have to stop spending money on audio equipment at some point. If you are never satisfied with what you have, the problem may be something other than not having spent enough to buy decent hardware. You can still be an audiophile without buying new equipment all the time or going broke (or merely being ripped off) on over-expensive gear. It’s about the love of the game—the love of music and the gear it plays on—not the love of spending or the fear of missing out on an even better thing.

SwiftoDo Development Notes, April 2018

Weekly updates to SwiftoDo came to an end in early April, but work on SwiftoDo has continued apace.

What’s next?

I am working on an update, version 2.12.0, that includes a couple minor, but long-requested features: (1) a setting to preserve priority on completed tasks and (2) a default priority setting for new tasks. Implementing these features required lots of behind-the-scenes effort. Consequently, neither could be completed in less than a week.

I am currently working on improving the Dropbox code that (1) checks whether SwiftoDo is authorized to access Dropbox, and (2) reports this to the user in a clear and actionable way. This is necessary because Dropbox can de-authorize SwiftoDo for various reasons, including when I upgrade the Dropbox library I am using, which is exactly what the version I am working on does. When this happens, SwiftoDo will alert the user after an upload or a download fails. Based on user reports, however, this notification doesn’t always happen, which can lead to data loss if the user does not realize you are working offline.

Once I finish my work on the Dropbox-related code, I can release this version.

What’s after that?

After I complete version 2.12.0, I plan to focus my efforts on implementing iOS 11 Files integration. Everything else, other than fixing critical bugs, will be put on hold.

The basic mechanics of Files integration are not hard, but they are not really meant for a to-do app—especially one that manages two files. I am unsure if it would require uses to re-open their todo.txt and archive files periodically, after the app is killed, or every time you wish to archive, which may be annoying to users. I am not yet sure how it will affect archiving, manual sync mode, and whether offline access would be possible.

In a best-case scenario, Files integration will eventually allow me to get rid of the Dropbox-related code within SwiftoDo, and rely on Apple’s and Dropbox’s native integration.

In a worst-case scenario, I won’t be able to get Files integration working without giving up too many features or conveniences of the current app.

So, after version 2.12.0 is released, you may not hear from me for some time about development, but I will be hard at work nonetheless.

My slide into audiophile territory, Part 2

This is the second in a series of posts about my realization that I have become an audiophile. The prior post examined why I think of myself as an audiophile now.

What does it mean, to me, to be an audiophile?

So, I’m an audiophile now. What does that even mean? Am I just an overexcited consumer with enough disposable income to blow a lot of money on headphones? Hopefully there is more to it than that.

A lot of people, when talking about speakers or headphones, preface their comments with “I’m not an audiophile, but…” They do so out of humility, to admit their own limitations of hearing, and their own lack of experience discerning good sounding speakers from mediocre ones. What it is really about, however, is saying that you are not a snob. I used to do that, too. But I’ve given myself leeway to put myself in the audiophile camp, despite my lack of ear training and my lack of sophisticated acoustical measuring equipment. I want to take the term “audiophile” back from the snobs.

I call myself an audiophile now because I love sound. I love sound so much that I listen to music hours and hours each day. I love sound so much that I will listen to types of music I didn’t like before—EDM, hip-hop, country, standards, soundtracks—just because they sound good. I love sound so much I will spend large—but not obscene or unlimited—amounts of money on decent equipment.

My love of sound itself is a relatively new development. While I have loved music as long as I can remember, what drove that love was always the melody, the song structure, the lyrics, and the performance—all the normal things people enjoy about music. The production, on the other hand, was not important to me. In fact, over-produced recordings turned me off, because studio slickness betrayed, in my opinion, the authenticity of the music.

Now, I think differently. I admire the craft of studio engineers in a way I never appreciate before. Some recordings just sound great, and that is part of the pleasure of listening to them. Similarly, some singers have have beautiful voices, and it doesn’t matter if they are singing the same old songs (ahem, standards): the sound of their voices brings life to the music and helps make it worthwhile to listen to.

To me, being an audiophile is about appreciating the distinction between the sound and the music, and deriving pleasure from it, far more than it is about spending vast amounts of money on expensive equipment, or believing the hokum perpetrated by high-end audio equipment manufacturers and sellers.

SwiftoDo Development Notes, March 2018

Today I released the ninth update to SwiftoDo in about ten weeks. What is driving all these small (but good!) releases? Two main things:

  1. I want the app to get better
  2. I want to have fun

I want it to get better

SwiftoDo is a good app, but it is by no means perfect. There are a lot of things that can be improved. My development task list for the app is a mile long. For a long time, the most important items on that list were also the most difficult for me to implement. To be honest, some of those “most important” improvements feel like they are beyond my current capabilities as a developer—but that doesn’t mean that I can’t make improvements somewhere. The app can still get better.

Sometimes, small things can make the app a lot better. Based on many emails with customers, I have learned that, a lot of times, a simple-to-implement feature, rather than a broad reimagining of a portion of the app, will make a big difference to their enjoyment of the app and the productivity they gain from it. That’s why I have been working on “small” features, such as the full file editor, that merely build on what was already there, but end up making the app more powerful and flexible for users. That is also my rationale behind improving application performance, which has become a much higher priority for me this year. Better performance benefits everybody.

I also decided to release features and fixes regularly and frequently. Every week I ask myself, “How can you make the app better for your customers?” And, on another day each week, I ask myself, “Is my latest commit better than what my customers have?” Once I’m sure the new version is better than the last version, I release it.

I figure that adding small features and fixing small bugs eventually accumulates, and my good app can eventually become a great app.

I want to have fun

I’m working on SwiftoDo because it the app is useful to me and because it is fun.

Coding is fun for me, but certainly not every minute of it. Sometimes I have to fight with UIKit’s quirks or work around its bugs, which can take hours of frustrating work. Sometimes I fail to get a feature working without introducing a crash or breaking something else in the app. Sometimes things just don’t work, and it’s really hard to figure out why. Sometimes I’m stuck, and that’s no fun.

I have decided not to remain stuck for more than a day or two anymore. If something isn’t working, I table the work and move onto smaller, solvable problems for a while. This philosophy has led me to work on features that seem simple, useful, and fun to code, but maybe not as important as the larger, more difficult things that have been blocking my progress. That explains why I’ve been pushing forward on improvements to the task text editor, for example, rather than adding new data providers. As a side benefit, working on those smaller things sometimes clears a way, either in the codebase or in my mind, to tackle those larger, more important items.

So, what’s fun? Racking up win after win, week after week, by pushing a better version of my app out to my users. And knowing, every day, that no matter what is not in the app yet, what is in the app keeps getting better.

Version numbers

SwiftoDo’s version number, currently at 2.9.2, is heading into the weird-looking, double-digit-minor-version-number terrority. The next version I release will be 2.10.0.

As Apple suggests, I’m using a 3-number semantic version numbering system, with my own rules for what increments each component. Architectural changes to the app (such as a total rewrite) will bump the first number. Adding new user facing features will bump the second number. Fixing bugs or enhancing existing features, in minor ways, will bump the third number.

Because I am releasing so often now, and batching fewer new user-facing features together, the minor version number has been increasing rapidly. No one should care what the version number is, as long as it goes up. I don’t really care if it is, eventually, version 2.50.0. I does look a little funny to me, though.

What about the Mac version?

I have not been releasing updates to SwiftoDo Desktop recently. The main reason for that is that SwiftoDo Desktop is, basically, feature complete. Unfortunately, because it is coded in Objective C and relies on cell-based table views (mainly for the inline editing to work), it sits at a technological dead end. A total rewrite is in order.

I have prepared for this scenario. My todo.txt-related code is in a framework that can be ported over to the Mac easily. In fact, I have started and stopped a total rewrite of the Mac version a couple times now, but have never gotten that far into it. The things holding me back are:

  1. I have to update my knowledge of AppKit, which is the Mac’s UI framework.
  2. The desktop app uses a different filtering system, which is a little harder to use than the iOS version’s filtering system, but it is much more powerful. I don’t really want to kill it off.
  3. SwiftoDo on iOS could always use more work, and it represents 70% of my user base.

In June, Apple may announce a new framework that would allow me to port my iOS code to the Mac much more easily. If that happens, my ability to provide an updated Mac version would be greatly improved.

A/B/C testing: August and Everything After, in 24-bit, 96kHz FLAC vs. 16-bit, 44.1kHz ALAC vs. 256 kbps AAC

I’m listening tonight to a “hi-res” 24-bit, 96kHz lossless version of “August and Everything After” through my good headphones, DAC, and amp tonight. I love this album. It helps that I was 15 when it came out, of course. But still, I think it is an emotionally rich artistic achievement. It surprised me when such an earnest, heartfelt record became wildly popular; only in the 1990s would that happen, I guess.

I compared this hi-res version, track by track, with two other versions I have on hand:

  1. my 16-bit, 44.1kHz ALAC rip from my original CD from 1992, and
  2. the 256kbps AAC version available through Apple Music.

Overall, all three versions sound almost identical, which is kind of what I would expect, actually, given that Apple Music’s lossy AAC encodings are of a very high quality, and that the bit rates and bit depths for CD-quality recording and iTunes AAC encodings were chosen very carefully. We are far from the world of mushy, sizzly 128kbps MP3 files now. That said, the lossless versions do sound a tiny bit better. They reveal more detail than the lossy version, notably in the snap of the bass guitar and in the attack of the snare drum. The difference is slight: you have to listen very carefully to hear it, and you need equipment sensitive enough to reproduce the sounds accurately.

The main improvement the hi-res version brings over the CD-quality rip, to my ears, is a lower noise floor. Otherwise, it sounds the same as the CD version. You gain about 1-2% in fidelity at the price of lot of extra bits on the hard drive, and, perhaps, more dollars out of your wallet. This is true even though the 24-bit version was mastered to be a little quieter than the original CD and iTunes versions. You have to turn it up a notch to match the others’ volume. Even with more amplification, the hi-res version’s noise floor is incredibly low, and everything sounds fantastic.

Overall, I would prefer to listen to all my music in lossless quality, in as high fidelity as possible. It can sound better than lossy rips, and, even if I can’t hear the difference on a particular track, why not listen to the best version available? That said, I subscribe to Apple Music, which serves AAC files, rather than Tidal, which has a lossless streaming plan, primarily for convenience. Fortunately, for me, Apple’s 256kbps AAC files are completely adequate substitutes for lossless rips. I do think, though, that if Apple offered a lossless plan at a slight up-charge, I would subscribe to it.