On a couple of occasions now I've wanted to read from
STDIN into an Objective-C command line tool, and both times I've had to hunt quite a bit to find the answer because nothing shows up in google for the search terms I used. "Objective-c read from stdin" and "objc read stdin" both turn up results ranging from using
NSInputStream to dropping some C++ in there.
The answer is quite simple really, just use
NSFileHandle. More specifically
+[NSFileHandle fileHandleWithStandardInput]. You can then read all data currently in
STDIN, monitor it for new data and anything else you can do with a normal
And here's some example code, reads all data from
STDIN and stores it into an NSString:
NSFileHandle *input = [NSFileHandle fileHandleWithStandardInput];
NSData *inputData = [NSData dataWithData:[input readDataToEndOfFile]];
NSString *inputString = [[NSString alloc]
I'm using this in GarbageCollected apps, memory management without GC is left as an exercise to the user.
This is a something that occasionally makes the rounds again, I've not seen it for a while and I've added some new items since I last remember documenting it. Thus, @macarne asking what the app was that gives me stats prompted me to document my current menubar items.
- SMCFanControl - Lets me adjust the minimum speed of my fans.
- iScrobbler - Scrobbles tunes iTunes plays
- LittleSnapper (Or more accurately the menubar icon is NanoSnapper, LittleSnapper is the full app.) Mainly used for screen grabs.
- SlimBatteryMonitor - Takes up less horizontal space than Apple's menu item.
- Expresscard menu item - Lets me power off my Expresscard/34 SSD
- MenuMeters - An old friend I've been using for as long as I can remember running OS X. Set to show (left to right)
- Ram - Used and Free totals.
- Network - Graph + values.
- CPU - Graph per core. Probably the most useful out of the three.
- Time Machine
- Modem - To dial on my Huawei E220 3G stick.
- Fast User Switching - Not sure why I keep this in the menubar, only have one user and I lock my screen with a password protected screensaver.
- Viscosity - VPN software. Pretty useful.
- Spotlight! - Occasionally this vanishes when spotlight decides to be a dick and eat ram/cpu reindexing my disk every few hours. Touch wood it hasn't done it since 10.6.1.
I use a wonderful service for saving text to be read later, instapaper.com. It's gotten more wonderful as time has gone on and other applications/service's have gained the ability to save links/articles/webpages there for me to pick up later.
For instance, I'm out and about checking twitter on my iPhone using tweetie and someone tweets a link. Rather than wait for it to load and having to read it then and there I can just hit "Read Later" and it's saved in my instapaper account for me to read as and when I choose to. Recently the legendary mac feed reader NetNewsWire gained this ability too.
There's a few ways to send a feed item to instapaper from within NNW. Firstly you can right-click and click "Send to Instapaper".
View Original on Flickr
Secondly there's a menu item for it in the News menu, which also provides my chosen way of instapapering an item—the keyboard shortcut! ⌃P (control-P).
View Original on Flickr
So, in NNW I'm happily sending stuff to instapaper with the handy ⌃P shortcut, but that doesn't exist in the third place I mark things to read later–Safari! Up until now I've been using the standard "Read Later" bookmarklet that instapaper.com provides, and it's got a spot on my Bookmarks Bar so I can easily click it.
That doesn't really help with the fact I'm hitting ⌃P in NNW, and it doesn't work in Safari. Quite often I noticed myself hitting the key combination in Safari and wondering for a split second why it wasn't sending the item to instapaper. Then the solution hit me!
In OS X you can setup (and/or override) menu items with custom key combinations! Why hadn't I remembered this before. Because the "Read Later" bookmark(let) is nested under the Bookmarks menu, it is a menu item! A quick trip into the Keyboards Prefpane in System Preferences and a new binding later and voilâ, "Read Later" in Safari is bound to ⌃P and I can use it in both Safari and NNW.
View Original on Flickr
I recently came across the
at(1) command, and wondered why it wasn't executing jobs I gave it on my machine. Had a poke around the man pages, and discovered in
atrun(8) that by default
launchd(8) has the
atrun entry disabled.
To enable it (and have
at jobs fire) you simply need to run the following command once:
sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.atrun.plist
Personally I've taken to using this to sleep my machine after a custom amount of time, mainly because my alarm clock/sleep timer of choice (Awaken) can't handle playing Spotify for x minutes and then sleeping the machine. The following command puts the machine to sleep, which (quite effectively) silences spotify.
echo "osascript -e 'tell app \"Finder\" to sleep'" | at 1:00am
at(1) manpage for how to specify the time, but as I'm only ever scheduling it on the same day (usually 20 minutes or so in advance), just passing the time works fine.