LLDB is a piece of crap (update: maybe it’s clang) (update 2: it’s actually ccache)

I’ve been really trying to use LLDB for a while now. Not that I really want to, but Apple went out of its way to make sure I had little choice. Not only is LLDB the default on MacOSX now, but GDB is really hard to make work on that platform as well. Can you imagine you have to generate a digital signature?

The first thing I don’t like about LLDB is its totally painful command structure. The LLDB authors published a GDB-to-LLDB conversion map, which they probably think is helpful. But to me, all it shows is that LLDB commands are more complex and more verbose than their GDB counterparts, with no obvious way to infer the LLDB command from either GDB experience, or from any kind of logic.

But the thing I dislike the most is that LLDB plain does not work, even when used with Apple tools, in a number of situations that I happen to hit practically on a daily basis. For example, it appears to be consistently unable to set breakpoints by file name and line number with command-line options that are should be used frequently enough to just work.

Here is an example session that illustrates the problem.

ddd@Marypuce tmp> cat glop.cpp
#include <iostream>

int main()
{
std::cerr << "Hello World\n";
}
ddd@Marypuce tmp> c++ -c -g glop.cpp -mmacosx-version-min=10.6 -o glop.o
ddd@Marypuce tmp> c++ -g glop.o -mmacosx-version-min=10.6 -o glop
ddd@Marypuce tmp> lldb glop
Current executable set to 'glop' (x86_64).
(lldb) b glop.cpp:5
Breakpoint 1: no locations (pending).
WARNING: Unable to resolve breakpoint to any actual locations.
(lldb) ^D
ddd@Marypuce tmp> c++ -g glop.cpp -mmacosx-version-min=10.6 -o glop
ddd@Marypuce tmp> lldb glop
Current executable set to 'glop' (x86_64).
(lldb) b glop.cpp:5
Breakpoint 1: where = glop`main + 22 at glop.cpp:5, address = 0x0000000100000e56

[Update] I initially thought the -mmacosx-version-min=10.6 option was necessary for this problem to show up. But it’s also broken without it. I ran the c++ commands with -v to see what the difference was, and apparently, it’s many little things. So separate compilation with debug symbols just does not work. OK, maybe it’s more a compiler thing than a debug thing. So maybe LLDB is not the piece of crap there. Still, that’s where the problems shows up.

This annoying bug shows how fragile this new support is. By making LLDB the default, and integrating it relatively well within Xcode, Apple is trying to slowly boil a frog here. But if you use the tools in a non-standard way, you might be burnt.

[Update 2] I incorrectly blamed clang and lldb for a problem that is actually with ccache. I am running ccache version 3.1.9 from MacPorts. If I get it out of the way, everything is back to normal. I sent a bug report email to the ccache, clang and lldb mailing lists hoping this will help someone else.

Connecting Mavericks to a Freebox: Oh the pain!

I’m very frustrated. Today, I wasted basically two or three hours fighting unreliable software implementing one of the most basic features in the world of networking, namely file sharing. I ought to be simple, it used to work, but if my experience is representative, it’s complexly broken nowadays. Grenouille bouillie.

What I tried to do is not that complicated. We have a Freebox at home, it’s basically a DSL modem with many features, including the possibility to act as a NAS. So I connected my external drives, and tried to connect to them with my Macs.

It worked. I was happy. I started copying my files around. I noticed that it was very reactive. For example, I could eject a disk from the NAS user interface (a web GUI that is relatively well designed), and instantly, the file server would restart. I saw a message on the Macs saying that the server had shut down, and a couple of seconds later, I was back in business.

Then something happened, and everything stopped working at once.

It’s frustrating, because I know exactly what I did at that moment. I reformatted a disk with the NAS user interface. That disk was initially formatted as HFS+, which the NAS would expose as read only. So I reformatted it as Ext4.

And suddenly, the file server stopped working, even when I removed the disk in question. That leads me to believe I changed something else without knowing it. Maybe the GUI changed some configuration behind my back? I have no idea. All I know is that I spent the last two hours trying to understand how to revert my configuration so that I would be able to share disks again.

Symptoms: I connect to the NAS, and it refuses to show my disks. If I disable Mac sharing (AFP) and only enable PC sharing (SMB), then I can connect to the NAS, but somewhat unreliably.

I suspect the problem is on the Mavericks side of things, because connexions to another NAS I have at home are equally flaky. One minute it transfers dozen of files per second, the next it’s as if I was writing to a floppy disk. Transfers from other protocols (e.g. using a web browser) are fast and reliable, so I don’t think it’s a Wifi or network issue.

How annoying.

 

Apple backups and RAID are not reliable

You’d think that if you use RAID1 and multiple redundant, distributed backups with hourly backups, daily backups, etc, you’d be safe? Think again. If your backup software lies to you, you may not realize it until it’s way too late. If you RAID software does not deem it worthy to mention that a disk failed, what good is it?

Continue reading

Everything is broken and no one cares

Everything is broken and no one cares

This post from Dear Apple is just so true, and so clearly on topic for Grenouille Bouillie!

Have we reached the point in complexity where we can’t make good quality products anymore? Or is that some kind of strategic choice?

The original post is mostly about Apple products, but the same is true with Linux, with Android, with Windows.

Here is my own list of additional bugs, focusing on those that can easily be reproduced:

  1. Open a file named X in any of the new Apple applications, those without Save As. Open another file named Y. Save Y as X. Beachball. For every application. Worse yet, since applications often remember which windows were open, you get the beachball again when you reopen the application. It takes another force quit for the application to (fortunately) offer to not reopen the windows.
  2. A relatively well known one now: Type F i l e : / / / in practically any OSX application. Without the spaces. Hang or assert depending on your luck.
  3. Use a stereoscopic application like Tao Presentations (http://www.taodyne.com). Activate stereoscopy. Switch spaces or unplug an external monitor. Kernel panic or hang to be expected. Go tell to your customers that the kernel panic is Apple’s fault, not ours…
  4. If you backup over the network, set your computer to sleep after say 1 hour while on power. Change your disk enough that the backup takes more than one hour. Backup disk will come up as corrupt after a couple of days, and OSX will suggest you start a new one (and the cycle will repeat).
  5. Use the “Share” button. It takes forever to show up the window (like 2-3 seconds in general on my 2.6GHz quad-core i7 with 8GB of RAM). Since what I type generally begins with an uppercase letter, I usually prepare myself by having the finger on the shift key. But to that stupid animation framework, “shift” means “slow animation down so that Steve can demo it”. Steve is dead, but the “shift” behavior is still there.

I’ll keep updating this list as more come to mind. Add your own favorite bugs in the comments.

First update (Feb 13, 2013):

  1. Safari often fails to refresh various portions of the screen. Visible in particular when used in combination with Redmine. This used to be very annoying, but it has gotten much better in more recent updates of Safari.
  2. iTunes 11 no longer has Coverflow. It was a neat way to navigate in your music, which wasn’t even the default, why remove it?
  3. Valgrind on OSX 10.8 is completely broken. I have no idea what’s wrong, but it’s a pretty useful tool for developers, and Apple has nothing in its own development tools that is even remotely close.
  4. “Detect displays” is gone, both from the Monitors control panel and from the Monitors menu icon. Combine that with the fact that OSX 10.8, unlike its predecessors, sometimes totally fails to detect that you unplug a monitor. And you find yourself with windows stuck on a screen that is no longer there…
  5. That little Monitor menu icon used to be quite handy, e.g. to select the right resolution when connecting to an external projector for the first time. Now, it’s entirely useless. It only offers mirroring, fails to show up 90% of the time when there is a possibility to do mirroring, shows up when mirroring is impossible (e.g. after you disconnected the projector). It used to be working and useful, it’s now broken and useless. What’s not to love?
  6. Contacts used to have a way for me to format phone numbers the way I like. That’s gone. Now I have to accept the (broken) way it formats all phone numbers for me.
  7. I used to be able to sync between iPhone and Contacts relatively reliably. Now, if there’s a way to remove a phone number, I’ve not found it. Old numbers I removed keep reappearing at the next sync, ensuring that I never know which of the 2, 3 or 4 phone numbers I have is the not dead one.
  8. Still in Contacts, putting Facebook e-mail addresses as the first choice for my contacts? No thanks, it was heinous enough that Facebook replaced all genuine email addresses with @facebook.com aliases. But having that as the first one that pops up is really annoying.
  9. Now fixed, but in the early 10.8, connecting a wired network when I also had Wifi on the same network would not give me higher speed. It would just drop all network connectivity.

Updated February 28th after restoring a machine following a serious problem:

  1. Time machine restores are only good if your target disk is at least as big. But with Apple’s recent move to SSD, this may no longer be affordable to you. In my case, I’d like to squeeze 1TB of data into 512G. Time machine does not give me the level of fine-grained control I’d need to restore what I really need. So I need to try and do it manually, which is a real pain.
  2. Calendar sync is a real mess. Restoring calendars from a backup is worse.
  3. Spaces? Where are my good old spaces? Why is it I had spaces on the original machine, no longer have them, and find myself unable to say “I want 6 spaces” or to setup keyboard shortcuts for them as they used to be.

Adding chapter numbering in Apple Pages

At Taodyne, we mostly use Apple Pages to create our documents. For large documents, I’d like to be able to create numbered chapters, something like “Chapter 1″, “Chapter 2″, and so on. Apple Pages does not seem to have that feature. Let’s not get used to it,  and let’s fix it.

Apple Pages can read numbered chapters from Word

One thing that I observed is that when you read a Microsoft Word document that contains numbered chapters, Apple Pages preserves that formatting. In other words, if the user interface may not know how to edit numbered lists with text in them, the rendering engine knows how to render them, and the regular editing within Pages will correctly renumber these documents.

To verify that my recollection of this capability of Pages was correct, I first created a document in Microsoft Word that looks like this:

Section 1 – Hello

Chapter 1 – This is a chapter

I. This is a numbered section

1. This is a numbered sub-section

It doesn’t just “look like” this. The Section and Chapter text were edited in the Numbering section of Microsoft Word, so this is auto-numbering.

Then I saved this document to disk, and imported it into Pages. And indeed, when I edit it in Pages, numbering works just like in Microsoft Word.

The Pages XML format

Let’s look inside the document to see what’s there. A quick tour through the command line shows that Apple Pages documents are really zipped collections of files, including XML files representing the document itself:

% unzip Hello.pages 
Archive:  Hello.pages
 extracting: thumbs/PageCapThumbV2-1.tiff  
 extracting: QuickLook/Thumbnail.jpg  
 extracting: QuickLook/Preview.pdf   
 extracting: buildVersionHistory.plist  
  inflating: index.xml

The most interesting of these documents is the index.xml file. It contains the actual description of the document in XML format. And if I look inside, I see something interesting:

<sf:list-label-typeinfo sf:type="text"><sf:text-label sf:type="decimal" sf:format="Section %L -" sf:first="1"/>

So this sf:format= accepts a rather general format, with %L serving as the marker for where the number should go.

The solution for adding chapter numbers

So the solution for adding chapter numbers is simple:

  1. Once, you will need Microsoft Word to create a document that has the kind of chapter numbering that you need. You may have multiple levels of numbering (e.g. chapter, section, etc).
  2. Import this document in Pages. This will give you a new list style.
  3. When you want to number chapters, select the given list style.
  4. To edit the formatting of the numbering text, select the whole line, change colors or fonts, and in the list style, select “Redefine style for selection”. In other words, the list style defines the font and color for the numbering independently from the paragraph style, and can do that for multiple levels.

Now, you have proper chapter numbering in Apple Pages.

Apple started decaying before Steve Jobs’ death

Sad MacMany have wondered what would happen to Apple after Steve Job’s death. I’m afraid things started to go south at Infinite Loop long before Steve passed away. Case in point: Mac OSX Lion, which I think is the worst version of MacOSX ever (and I’ve used all of them since Rhapsody).

What’s wrong with MacOSX Lion?

While there are a number of relatively useful features in OSX Lion, like being able to resize a window from all sides (granted, not exactly a new feature in the computer world), the general philosophy of that OS seems to be “We know better“. A computer company that thinks it knows better than me how I should use my own computer? Let’s not get used to it.

I will illustrate this with three real-life cases:

  • Ten minutes to reboot on a Core i7 laptop is not cool.
  • How I came to positively hate the mandatory auto-save feature.
  • The sad story of Quit, Select All, Undo and Close Window.

There are a few other smaller cases that I will brush on quickly at the end. Like the broken replacement for good ol’ Save-As, the stereoscopy crashes, the mysterious unimprovements to Spaces, the Screen Saver of Doom…

Ten minutes to reboot is not cool

Many know the great story of Steve Jobs telling an early Mac engineer that making Macs boot faster would save lives. This lesson seems to have been forgotten these days.

This morning, I had a kernel panic in Lion (a not so uncommon occurrence, sadly). So I was forced to reboot. And what happened next prompted me to write this blog entry. Crashing is enough of a waste of time. But then, MacOS X Lion aggravated that by reloading every single tiny window I happened to have open at the time of the crash. And not letting me do anything in the meantime, because you see, it was busy, it had better things to do than even letting me quit an application.

Being able to quit an application is what I took as an indication that the system was done booting. It’s as good a measure as any, since if you can’t quit an application, you can’t do much else. And it took more than 10 minutes for me to be able to quit Firefox: I booted the machine at 7:02 (according to uptime), Firefox accepted to quit at 7:14.

In the meantime, OSX Lion had reloaded, for my own good:

  1. Mail, with 7 windows
  2. Pages, with 4 documents
  3. Numbers, with 6 documents
  4. Keynote, without any document open, but hey, what’s wrong with launching it anyway?
  5. Terminal, with 2 windows, one of them was running a build. There’s a severe bug in OSX Lion restore-everything-at-reboot-time functionality: it didn’t restart my build!
  6. Safari, with 8 web sites, including two with videos I had already seen.
  7. Firefox, with 2 web sites, which I certainly didn’t wan tot re-open since they were payments.
  8. iTunes (which helpfully started downloading new contents)

While the system attempts to “please” you in some demented sense of “pleasing”, there’s very little you can do but wait. Actually, you need to do a little more than that, because the machine will occasionally ask for passwords or pop up some dialog box. And it does so in such a random fashion that even reading mail is difficult. All the more so because the machine is so busy re-indexing its Spotlight database and downloading iTunes contents you really don’t care about right now that everything crawls.

Even switching windows is difficult, even borderline hazardous. You think you brought up one window, but then the system shows another one right at the moment you click or close something or do something dangerous, and bam, the one and only window you didn’t want to close vanishes from the screen!

What is so infuriating about this incredibly stupid behavior of OSX Lion is that practically every single time I rebooted my machine, I unchecked that little box asking if I want to re-open my windows when I log back in. Can’t OSX Lion get the hint? If it’s smart enough to save my windows at the time of a kernel panic (of all times), can’t it save a little preference like “I don’t want you to re-open windows at boot time, ever”, without forcing me to resort to command line hacks.

Yes, I know how to fix it. It’s a script like this one:

#!/bin/bash
echo "#!/bin/bash" > /tmp/loginfix.sh
echo "rm /Users/*/Library/Preferences/ByHost/com.apple.loginwindow.*" >> /tmp/loginfix.sh
mv /tmp/loginfix.sh /usr/bin/loginfix.sh
chmod +x /usr/bin/loginfix.sh
defaults write com.apple.loginwindow LoginHook /usr/bin/loginfix.sh

Having to resort to something like is really annoying. And if Apple really didn’t want to store the “reopen windows” user choice in preferences, then it shouldn’t be a check-box. It should have been a separate action button, just like “Shutdown” and “Restart”.

I’m clearly not the only one who dislikes that features. If you look up on the web, you’d be hard pressed to find any site that explains how great that feature is. Instead, you’ll find dozen of places telling you how to disable it. So it’s a useless feature compounded with a bad UI made more annoying by a blatant disrespect for user preferences. That seems to be the general theme for changes in OSX Lion. Let’s not get used to it.

How I came to hate the mandatory auto-save feature

Another feature that follows the exact same pattern is the mandatory auto-save feature in applications like Pages, Numbers, Keynote, etc. What this feature does looks good on paper. It helpfully saves things for you at regular interval. Since Apple implemented for Time Machine a relatively nice way to version files, Apple used that to offer a kind of per-document Time Machine. Isn’t that a great idea?

The problem with that auto-save is that it doesn’t scale, and that there is no way to turn it off, even temporarily. So here is what happened to me once. I was animating an event, and for some reason, they decided to use my laptop as the main machine connected to the projector. So they gave me this 150 pages Keynote made by copy-pasting together a dozen or so slide decks. So far, so good.

Then, various people started coming to me asking if they could change a word here, copy a new slide there, etc. Guess what: it took over one minute to save the 150 pages document. My guess is that Keynote uses a brain-dead algorithm to decide when to auto-save, something like “if something changed and if the last auto-stave started more than 30 seconds ago”. Just a wild guess. What I observed, though, is that it doesn’t check that after you do an operation, but before executing the next operation you request.

All these harebrained design decisions blend together in a perfectly distasteful mix. You hit a key. Keynote shows your keypress. You hit another key. Keynote detects it should auto-save. The save takes more than one minute. The “saving takes a long time” progress dialog shows up and eats the key you typed! So you need to type again, very fast. But usually you don’t succeed. Same with mouse clicks. You send mouse clicks that get eaten by the stupid “Please wait while I’m saving” progress dialog. Who decided to call this a “progress” dialog? It’s not progress!

Anyway, after a very painful 15 minutes trying to make this work, here is how I ended up doing things: I started another Keynote instance, edited slides one at a time there, and once it was done, I would copy things back in the original Keynote document. But talk about a counter-productive exercise fighting a badly designed UI that won’t accept my preferences (namely: I don’t want to auto-save. Period. I hit Command-S when I’m happy. I know what I’m doing.)

Quit, Select All, Close and Undo

The third scenario I came to hate in OSX Lion is much more specific. See, I’m French, so I often have to type French text. And I’m a coder, so I often have to write English text or computer code. At some point in my past, I started taking the habit of typing French text in the native French keyboard, which is AZERTY, and English text in QWERTY

I don’t think many other people do this, but to me, that means faster typing in both cases. In English, I can type all the wonderful special characters used in code, like [ and ]. In French, I have easy access to all the wonderful àccénts that pepper our language (and, by the way, in defense of Jean Dujardin, “Putain” is more like an accent than a swear word in French; it doesn’t really mean “Whore” anymore than, say, “OK” means “all correct” or “gay” means “in a good mood”). A and Qs flip automatically when I’m typing French. If anything, that shows how flexible the human brain is.

There’s just one little problem with that clever scheme: keyboard shortcuts. It so happens that Command-Q (Quit), Command-A (Select All), Command-Z (Undo) and Command-W (Close window) are some of the most frequently used shortcuts of all. And unfortunately, they flip places when I switch languages. And unlike complete words, which my brain has “short-circuited” to the correct keyboard layout depending on language, they have no context, no language associated with them. So often, I want to Undo, and instead I Close the Window.

So what does this have to do with OSX Lion, you may ask? Well, the auto-save feature has, for me, a very nasty side effect. If a document has been modified, OSX Lion no longer asks if you want to close it or save it. That dialog box that used to pop was my saving grace in the old days. If I hit Command-W instead of Command-Z, then the dialog box would pop up, I’d hit ESC and hit Command-Z. No harm done. Nowadays, my window vanishes, and with it, all my undo history. In other words, at the exact time I want to undo something, MacOSX Lion finds a way to erase the entire undo history!

Of course, Apple engineers know better. Their reasoning must have been that the auto-save feature is like a kind of persistent undo to disk. Unfortunately, auto-save and Time Machine are nothing like undo. Undo remembers the actions. Auto-save remembers the result. So Time Machine is way way slower to activate, and it makes it harder to find where a document actually changed.

So a couple of times a day, I close a document by mistake, and I swear. Nothing has been closer to turining my Macbook into some unidentified flying object than this feature. At some point, I’ll find the time to disable that auto-save feature as well, in a way that doesn’t break other things.

Then, there’s the small stuff

OSX Lion’s disregard for users’ taste and preferences permeates throughout. It looks more like a design philosophy than an accident.

There’s the odd reversal of the trackpad scrolling behavior. This one at least can be configured. But either you stick with the default, and you are backwards each time you return to a Windows, Linux, older MacOSX machine. Or you change it, and you are backwards each time you return to a Lion box that is configured with the default.

There’s the new technique for “Save As”. It used to be “Save As”, Command-Shift-S, select the new file name (defaults to the document’s directory). Basically, one keystroke. Now, it is “Duplicate” (no keyboard shortcut), close the old window, Save (which now defaults to the Desktop rather than where the original document was), find the original location, save. So you have replaced one keyboards shortcut with 4 to a good dozen clicks depending on where your original document was. And “Duplicate” seems to use more memory and take more time than Save As (maybe it saves the document somewhere?) The benefits? Hmmm. I don’t see any, it seems like a less intelligent way to do the same thing as before.

Stereoscopy is a minor nuisance to the majority of people. But it turns out Taodyne, my company, produces a 3D presentation software. Something like Flash blending with Avatar. One of the ways we generate stereoscopic images is with the OpenGL Quad buffer support. It was broken in 10.6.1: when our application ran, switching spaces would kill the window server. I reported it to Apple, it was fixed in 10.6.2. It was broken again in Lion (10.7.0). Only this time the crash is a random kernel panic or system freeze, a bit more serious. I reported it three times to Apple. It’s still there.

Overall, Spaces and the Window server are nowhere as good as they used to be. When you switch spaces, it used to be smooth. You used to have a single desktop background. Now, it’s not smooth. Sometimes, windows won’t drag from one space to another. Spaces can be “out of order” (i.e. the number keyboard shortcuts no longer correspond to the logical layout of the spaces). The windows that MacOSX Lion insists on reopening at startup don’t reopen in their original space. And so on.

It’s more than just spaces. For example, using full screen app mode on dual-screen setups makes one of the monitors become unusable (covered with a oh-so-nice Lionesque background). Try watching a DVD full screen on one monitor while you do something on the other. Worked like a charm in Snow Leopard, impossible to do in Lion. Try putting the DVD player full screen on your TV while the menu is on the main screen of your laptop (just because most HD TVs overscan, so putting the menu there means you don’t see it). Nope, Lion knows better, it will bring the full screen picture where the menu is, not when the window is. That also worked in Snow Leopard.

And there’s another one of my favorites, the Screen Saver of Doom. Some screen savers in OSX Lion consume all the memory they can. They evict all the useful stuff away. So when it’s time to log back in, you see your keystrokes show up. one. at. a. time. And by the time you logged back in, you see that 5G of your 8G of RAM are now free. For the next few minutes, every single application you will try to use will page stuff back in and be extremely unresponsive. That too is a nuisance. Let’s not get used to it.

Conclusion

OSX Snow Leopard was a lean and mean operating system, just like its feline counterpart. OSX Lion takes on its role model as well: it’s big, heavy, slow, lazy, and it doesn’t care about you a tiny bit.

Let’s just hope that Apple’s next OSX version, Mountain Lion, will not be smaller, less powerful but more dangerous than its predecessor… Unfortunately, I won’t hold my breath based on what we can gather from Apple’s sneak peek Making it more difficult to download third-party applications in the name of security? A chat application? Twitter support? A features page that has so little to show that it needs to boast on the US web site about stuff designed specifically for China? Seriously?

I still want to believe that Apple will soon focus again on making their OS lean, mean and efficient like it used to be.

Steve Jobs forgot how hard it was to create a company

The following video shows Steve Jobs as an entrepreneur, starting over with NeXT. To me, it’s reassuring to see that the Great Steve Jobs himself sometimes found the task overwhelming, despite having $7M (1990’s dollars) in the bank.

If you only have 10 seconds, look at 13:18 into the video. Steve Jobs says:

I forgot how much work it actually is to create a company. It’s a lot of work. You got to do everything.

This is exactly how I feel right now. Doing everything. Vaporized, atomized. It’s fun, but it’s hard. I had not forgotten, I plain didn’t know.

Steve Jobs was also known for his focus on focus. If you are creating a company, you should probably read this.

When your product is not even built yet, none of this stuff matters.  But your startup, in the pre-product phase, is basically a ticking time bomb.  The only thing that can prevent it from exploding is user delight.  User delight attracts funding, enhances morale, builds determination, earns revenue…Until you get to user delight, you’re always at risk of running out of money or, much more likely, losing a key engineer to something more interesting.  Time is your most precious resource.

This is why building a company is an exercise in humility. It’s a case where you don’t need to assume you are below average: you are. You have less funding than your competitors. Your product has less features. Your have less customers, less engineers, less press coverage. If you do something really innovative, most people will think it’s stupid and explain why you are doing it wrong. And most of the time, they are right, you are doing it wrong.

But here is the difference compared to my past experiences in larger companies. In a startup, when you do it wrong, you fix it, and you fix it so quickly you sometimes don’t even realize it. In my opinion, that’s the single reason why startups sometimes succeed. They fall a lot, but then they learn how to walk, and once they get the gist of it, they run circles around more “adult” companies.