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.

I awake to his chest hairs tickling my nostrils. No matter which way I turn my head, they seem determined to crawl up my nose. I give up and inhale his scent, slowly. He smells of powder as always. I caught whiffs of it in the car last week as he drove, stirring up old memories. He shifts again, arms wrapped around me, which I note with surprise. He always had trouble sleeping while touching someone. His cold must be hitting him hard.

I run my finger down his side. His skin feels feverish, and damp from sweat. But here, away from cat fur and dander, at least his breathing is no longer wheezy or strained.

Last night he placed his hand on my hip and pulled me against him as we waited to get him a drink. I rested my head on his shoulder, nestled against his neck. I noticed a friend across the room I hadn’t seen in a while, and made a move to head over. “Don’t abandon me,” he teased, intertwining his fingers with mine. Same sneaky shyness. I had managed to drag him to this party where I was the only person he knew by promising to entertain him all evening. It was towards the end of the night and I had barely noticed any of the other attendees.

I grinned at him and stayed, absent-mindedly playing with his shirt instead. “Your shirt’s blue,” I commented after undoing a couple buttons.

“Is it?” he asked. “The outer one is blue too.”

“It’s gray,” I replied, remembering. His color blindness.

Later, as I bounced on his knee in time to the karaoke song that other people were singing, he grasped me by the shoulder and drew me backwards until my back laid against his chest. With my head next to his, we mostly stayed like that until midnight.

After the countdown and cheering he kissed me with a kiss that was at once old and new. A few minutes later we slipped away from the chaos and noise to hide out in an used room. In the darkness we giggled like schoolchildren.

His alarm goes off. He’s supposed to pick up his friends for a ski trip today. He sits up, groaning, and reaches for his thermometer. As he sits there with it in his mouth, waiting, I trace my fingers around each abdominal muscle. I poke him, imploring him to flex. He pulls his stomach taut and I take in the six well defined rectangles.

“Crap,” he mutters, looking down at the thermometer. “Okay, you’re not going to like it, but I need to put some clothes on.”

I make whining noises and pout at him as he clambers out of bed. As he wanders the room looking for a shirt, I sit up on my elbows to leer at him, admiring the V of his hips. When he gets back in bed, clad in shirt and pajama pants, I crawl on top of him, and slide his shirt off again.

I close my eyes and let the piece of lamb rest on my tongue, savoring its juices as they seep through my mouth. When I open my eyes again, he is doing his thing: flicking the meat, impaled on a fork, back and forth in front of his nose. Almost clinical—the chemistry lab waft we’re taught in high school. Then he stuffs it into his mouth with a sound effect: “Nomnomnom,” he actually says outloud. “I love being rich.”

I smirk at him. He’s full of himself, but in an adorable way. And this meal is delicious. Gloved hands sweep away crumbs and bring fresh utensils with each course. I can taste each listed ingredient on the menu, recited again as they place each dish in front of us. The flavors meld together yet stand distinct as instruments at a symphony. A dinner so good it sparked an obsession with Michelin starred restaurants.

When the lamb is reduced to a small smear of dark brown sauce, they clear away our plates. He holds out his hand on the table for mine and I oblige him. Everything is Very Romantic. At 25, I feel like this is my first Real Date—and I’m a little lost.

He reaches into his pocket and pulls out a small velveteen black box. “Happy birthday,” he grins as he places it on the table between us.


My heart pounds as the panic starts to rise. Shit. We’ve only been dating for two months. It’s too soon for serious jewelry. Oh my god what kind is it. I’m pretty sure ring boxes are smaller than this but I can’t think straight right now. It can’t be a ring. He’s not insane. Is this what people do when they’re 30?

“Open it,” he encourages me.

I reach out slowly, hoping my calm smile is convincing, and steeling myself to express a reasonable reaction to what’s inside. I flip open the top of the box. When my eyes manage to focus on the contents, I find an aluminum pendant staring back at me: a computer power symbol engraved on its surface and embedded in subtle circular grooves.

“And!” he announces, pulling another package from his pocket. “It glows with batteries.” He hands me two sets of button cells. “And you can program it to pulse in whatever pattern you want.”

I can’t stop myself from beaming as I trace the pendant with my finger. Cute, nerdy, and just the right amount of girly. It’s perfect. Panic fades away, replaced by appreciativeness and adoration with only the slightest hint of irrational disappointment. I pull the pendant from the box, insert the batteries, and put it on just as dessert arrives. It pulses at us from between my collarbones for the duration of the last course. It, like the others, is flawless.

I like D’s music better, I think to myself.

Balancing the half-melted container of ice cream on my knees, I catch myself. Is it wrong to be comparing them like this?

They call me

The Lonely Island blasts from M’s speakers. Just as Cobra Starship blasted from D’s speakers four weeks ago. M put on their penultimate album as he started driving tonight, then asked me to buy their latest album with his phone and play that instead.

That he uses the same music app as D only further highlights their juxtaposition. D has the career that M dreams of, and I’m pretty sure D would trade a chunk of his soul for M’s personal life.

But it feels wrong to draw these direct comparisons. It feels like objectification: reducing them to a pro and con list of qualities that are attractive or convenient to me.

A message from D pops up on my phone. I read it without launching the app, then proceed to ignore him until four hours later when M steps into the bathroom.

I probe my feelings. I empty my mind, then throw them up one by one against a stark white background: S? No reaction. No emotions there. M? None. D? I hestitate. I am beginning to remember.

Two and a half years ago, sitting at dinner with J: I am complaining once again about D. “Why are you dating him then?” J asks me. “Because—” and I stop. I can think of no good explanation to follow. I realize this is the third person I’ve complained to about him and the third time I’ve had to justify myself. But I have no justification. I make up my mind: I’m going over there tonight.

Somehow in the intervening years I’d forgotten.

“I think you are very cautious because you’ve had your fair share of being hurt, so you hide away your feelings so you don’t have to make yourself vulnerable,” S said me earlier that day. Cheap five cent psychoanalysis bullshit.

“I think I search out emotionally stunted software engineers so that I can be in control,” I reply.

S laughs. “There it is again,” he says. “Control issues.”

Later that night M kisses me, and I do not turn away. New experiences today.

  • 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.