Chibimagic's Weblog

Author Archive

I’m baffled that I had to resort to this convoluted mess for what seems like a pretty common use case, but it’s working now and I’m going to use it.

The problem: I use OmniOutliner and want to be able to quickly toggle whether a row has a strikethrough or not. For bold/italic/underline there’s the normal keyboard shortcuts, but for some reason OmniOutliner has decided not to have “Strikethrough” as an option in the Format menu, which means I can’t assign a keyboard shortcut to it. There used to be a toolbar item that would toggle bold/italic/underline/strikethrough, but it’s no longer there. I’m not sure if they removed the feature or if I lost it when I went from trial to Pro (which makes ZERO sense… why would paying remove a feature?).

Solution part 1: I finally came across “named styles” in the sidebar. I created one called “Done” that adds strikethrough to the current row. Buuuut… toggling named styles is hard coded to F1-F9 keys, and I’m already using those for other things.

Solution part 2: After a bunch of fiddling around, I’ve got the following AppleScript working:

tell application "OmniOutliner" to tell front document
	set doneStyle to item 2 of named styles
	tell selected row 1 to tell styles
		set isDone to false
		repeat with aStyle in named styles
			if id of aStyle is id of doneStyle then
				set isDone to true
			end if
		end repeat
		if isDone then
			remove doneStyle from named styles
			add doneStyle to named styles
		end if
	end tell
end tell

Note: The style happens to be my second named style, and I don’t intend to move it, so I hard coded it. You could use repeat to find a style by name.

Solution part 3: Hook up that AppleScript to Quicksilver for arbitrary triggers (I set mine to command-F2), et voilà! A super quick, suuuuuper simple 3-program solution to something that should have been built in. 🙄

I wrote this up on because I was so angry about this product, but I know Sephora has a history of removing negative reviews, so I thought I’d also post it here:

Got a mini of this in Latergram in my Sephora Play box. There’s not a single redeeming quality about this lip liner.

It’s a mechanical pencil, but it’s only one-way. So if you extend it too much, you can’t retract it and you’re out of luck.

The color payoff is abysmal. To get any pigment, I had to basically stab myself in the lips. At which point the tip kept breaking off because the product was so dry and brittle.

If you mess up and go outside your lip line even a little (which is easy to do because you have to press so hard), it’s impossible to clean off, so you have to overline the other side of your lips to even it out.

After I wasted half the product and got some color on my lips, it made my lips suuuuper dry and uncomfortable and dead skin flaked off ALL. DAY. LONG. I looked like I’d been dying of thirst in a desert for a month. And of course the color clung to the dead flakey skin so it looked all patchy.

And despite being so hard to wipe off when you mess up, it still didn’t last at all on my lips. Which is actually a good thing because the “mauve” is actually more straight up brown.

Do I even need to mention the stupid shade name that has nothing to do with anything? It just makes Tarte look like the aging mom that is trying WAY too hard to be hip and being completely clueless about it.

Terrible formula, terrible longevity, terrible packaging, terrible color, terrible name: this is a terrible product all around.

0/10, do not recommend

You can put primitives in an NSArray or NSDictionary by packing them with the @() syntax. For example:

typedef enum {
} MyEnum

NSDictionary *dictionary = @{
                             @(MyEnumOne) : @"one",
                             @(MyEnumTwo) : @"two"

But how do you then use this with fast enumeration? Turns out, the @() syntax creates a boxed NSNumber. Therefore, when enumerating, access it as an NSNumber. To cast it back to an enum, first extract the integer value, then cast:

for (NSNumber *number in dictionary) {
    MyEnum myEnum = (MyEnum)[number intValue];

“The thing about Batman is, he needs a hard line because he doesn’t think he can stop.”

I nod and listen to him continue.

“Because The Joker is bad because he killed 10,000 people. But what about this guy, he killed 100 people. That’s pretty bad. I guess we should kill him too. But what about THIS guy, he killed 5 people. And that’s pretty bad too…”

This dinner started out pretty lame. I was hungry and thirsty from running, and in the distraction I defaulted to the usual small talk: TV shows, music, life whatevers.

“Music is pretty much the kiss of death,” A had said earlier that day at brunch.

“Yeah,” M agreed. “I only ask about music if I’ve exhausted all other avenues of conversation and can think of absolutely nothing else to talk about.”

A snickered and stared off awkwardly into space as if she were on a bad date. “Soooo…” she asked the empty chair across from her. “Do you.. enjoy.. music…?”


“And at the end, his girlfriend says to him, ‘How fucking selfish are you, that you would place your own honor above the fate of the world?'”

Idealism vs pragmatism. Utilitarianism. The nature of reality. Zero disagreement. Zero bullshit. All night he has been nothing but upfront and earnest. I gulp it down like the ice water they’ve been refilling all evening. It’s my only criteria. I went into this not caring, but he’s surprising me.

Things have taken a turn for a better since we steered the conversation into taboo territory. We talk about politics. Religion. Children. Again, zero disagreement. Not that that’s unusual for these topics, considering the valley. But I’m feeling adventurous—or perhaps I’m looking for an excuse to sabotage this—so I bring up money. Who’s paying for dinner? (Because what better way to diffuse an awkward situation than to talk about it?) In my head he’s already racking up points for making me comfortable enough that I can ask about it in the first place. He describes his strategy to me: he would reach for the check when it was offered but give me a chance to object. Prepared to pay for dinner, prepared to split, prepared to let me pay.

This is not a boy that will keep me awake at night writing sad stories, I think to myself. I was looking for some fundamental disagreement. Something to scare him off so that I wouldn’t have to begin the slow hard process of opening up again. But I haven’t found it yet.

Two years ago, in an effort to impress a boy, I bought a new dress, dragged my full length mirror into the other room, leaned it against the door, and took a picture. Within the hour, I promptly forgot about the mirror and opened the door again, sending it crashing to the ground. Though I picked up all the pieces I could find, tiny slivers continued to elude me for months.

One day, fresh out of the shower, I found some of those slivers with my foot. Cursing, I cleaned up the blood and pulled out the pieces I could see, but walking continued to be painful. Try as I might, I couldn’t locate the source of the pain. J offered me his eyes, his tweezers, his magnifying hobby light, but the only thing we found buried in there was flesh and blood.

I figured it was my imagination; or just the pain of an open wound. But two more times the wound opened up in the ball of my foot. I resorted to limping; to thickly cushioned socks and shoes. I feared this was the beginning of Being Old.

Six weeks later, in a fit of rage, or possibly boredom, I plopped down on J’s couch again: tweezers and his sharpest kitchen knife clutched in one hand, a bottle of rubbing alcohol in the other. Again, as I peered through the magnifying light at the slit in my foot, I saw nothing. But I poked. And I prodded. And I felt the hard nub of something that was not organic. I wrestled with my skin, pulling it this way and that. And something began to emerge. With a final nudge, the last piece of glass splinter popped from my foot.

While I had been living my life, my body had been hard at work. Slowly it had repaired itself and worked the foreign object to the surface. My efforts to accelerate the process had only led to more suffering.

I think of this story now, as I sit. Waiting for my heart to work out that last pointy shard. For it to rise far enough to the surface that I can pluck it from my body and free myself.

Was it real? It seemed so insignificant and dull, sitting there on the table. I set my foot down and eased my weight onto it. Slowly. Testing. Not trusting that it was over. Waiting for the sharp stab of pain. But there was none. I hobbled over to the hardwood floor of his kitchen and tested my weight there too. Still none. Step—wait—step. No pain; no blood. It was over.

Early morning, the bike ride up C street is quiet and quick. No lights to stop for or pedestrians to dodge. It’s a jarring contrast from its normal bustle in the evenings, as she’s only seen it before. Other than the odd lone priorietor outside his shop, everything now stands stark and too-bright in the morning light. It’s beautiful and breathtaking in a post-apocalyptic sort of way.

It’s her first time leaving for work from his place. Everything is still fresh and new. Now come the routines that become the rhythm of a relationship. In these moments of diminished light, magical and fleeting, everything is established and enshrined. And full of possibility.

As I descend the stairs, I catch him at the edge of my vision—and freeze. It takes a second to realize that it’s not actually him. Same hard beard line along his jaw, same angular face, same close cropped hair. But it’s not him. He is 350 miles away, working. Or 2000 miles away in graduate school. I haven’t kept up. I continue towards my destination, shaken.

It was like this last time, too. Visiting down south, exploring the new buildings and paths on campus, when suddenly—but of course he would be there. It was his senior year, and he would be scrambling around trying to get everything wrapped up for graduation. And with only 2000 students—900 counting undergrads only—it’s easy to run into people. Especially back at the House where we were both members. Which I hadn’t visited.

I was too shocked to be anything but cordial. I was prepared to feel rage, at how things ended, at how he’d treated me. I wasn’t sure what to expect from him. If he even thought of it anymore. But the chance meeting was so abrupt that I didn’t have time to react. We exchanged minimal pleasantries and continued on our ways.

Our courtship had been sudden and accelerated. Within 4 weeks we went from not having spoken a word to each other, to moving in together for the summer. The first time we spoke it lasted all night. By the end of the first week he had effectively moved in to my room.

But that was a quarter-lifetime ago. And I had not thought of him in years. Strange that he should still have such power over me. And worrying. My vision blurs. I shove him back into his box inside my mind and hastily wrap it up. Back into the closet of dusty memories with you: this scab still seeps blood when picked.

  • None
  • Marketing Consultant: You're an great writer. You have brought up some really interesting insights. Just wanted to say fantastic blogs! I know tons of people see your write
  • optical franchise opportunities: Right now it looks like Wordpress is the preferred blogging platform out there right now. (from what I've read) Is that what you are using on your blo
  • startup speaker: Interesting content. A magnificent article. It is very informative and you are obviously very knowledgeable in this area.