Archive for July, 2009

Ripoff of the day

only in Brooklyn… a *teenie* bottle of pepto bismol runs $5.49

Ripoff of the day
Ripoff of the day, originally uploaded by naterkane.

cputhrottle lets you limit cpu consumption on osx

I’ve been having some issues with a particular App consuming a serious amount of processing lately, and it’s really been driving me nuts. having 7/8th of your total processing on a macbookpro (2.6 GHz Intel Core 2 Duo w/ 3 GB ram) will make it run really hot. After seeing that my cpu temp was hovering at around 170 degrees, and the cpu fans maxed out at 6000 rpm, I opened Activity Monitor and saw this: (note: the App that’s eating so much CPU is not shown to protect the guilty)
Activity Monitor

So I posted a message on twitter to see if there’s anyone who follows me who might be able to suggest a solution.

if anyone can tell me how to limit the % of cpu a process can be allowed to use on osx, please let me know, and i'll be your best friend.

Then just a short 2 minutes later, Ryan Barr (@ryanbarr) came through and pointed me in the right direction.

cputhrottle is a small OS X command-line utility designed to limit the CPU usage of a process to which it attaches.

I found that even though I have a utility installed to increase the fan speed when CPU temperature increases, sometimes I would run jobs that maxed out the CPU for long periods — and this caused my MacBook to get extremely hot. Within the space of a couple minutes, the temperature displayed had jumped by over 40 degrees Fahrenheit.

The utility takes a process ID (pid) and a percentage amount to limit. For example:

sudo ./cputhrottle 328 25

Running this command would limit process 328 to a maximum of 25% CPU usage.

Note that cputhrottle needs to be run with root privileges to be able to attach to the process to control. I recommend doing this via the sudo command.

Source code is below, as well as a pre-compiled binary (OS X 10.5.1, Intel). If there is any interest in a PPC version I would be willing to cross-compile one. The program requires that Boost 1.33.1 be installed to compile. Run make all to build cputhrottle and a test program.

The source hopefully will be interesting to those looking into how to manipulate processes in Mac OS via mach system calls. The code is a subset of code I was working on to create a simple debugger as an alternative to gdb. Obviously, this project was much simpler and ultimately more useful.

cputhrottle makes use of the task_info, task_suspend, and task_resume calls. task_info and task_threads are used to collect CPU usage statistics on the process, and the program then suspends/resumes the attached process appropriately until the CPU usage has stabilized. Any errors occurring are assumed to be a result of the attached process exiting, and result in cputhrottle also exiting. Control-C is intercepted, and the attached process allowed to resume gracefully before cputhrottle exits.

Source: cputhrottle.tar.gz

Binary: cputhrottle.gz

Note: Thanks to Nikolaj Schumacher for pointing out a race condition whereby a thread being sampled could have ceased to exist after having been enumerated as existing within the process. Specifically, he noticed this while throttling Handbrake, which creates/kills threads in rapid succession. I have applied his patch and the new sources and binary reflect his changes. I tested the fix and cputhrottle behaved as before (for my test case).

Contact email: nolanw, followed by an underbar and then the word “commerce” at willnolan dot com

http://www.willnolan.com/cputhrottle/cputhrottle.html.

Aptana and Lighthouse for easy ticket tracking

Aptana and Lighthouse can finally come together thanks to Aptana 1.5 and the Mylyn Web Template connector.

I've been a fan of Aptana for quite awhile, through all of it's ups and down as it's development I've generally still managed to prefer it over other more common 'bare-bones' editors like TextMate. Admittedly, a lot of this has to do with Aptana's ease of install and support for Subclipse.

Public/stable builds of Aptana have been running on Eclipse 3.2 for what seems like forever, and one feature that I've always had want for, is bugtracking integration. Mylyn is a great Eclipse plugin that does just that, well, sort of. The versions of Mylyn that run on Eclipse 3.2 haven't seen an update in ages, and support little more than Mantis, Jira and Trak. When I had a decent number of projects that were using Trak or Mantis, I was in heaven; NOM's migration to relying on 3rd party SaaS tools has made administration of our ticketing software and repositories a snap, but I haven't had any way to integrate our preferred ticketing software (Lighthouse) into my personal workflow until now.

Since last november (at least) Lighthouse has now been able to be integrated with Eclipse with the Mylyn's Web Templates connector. The only catch... it's still requires at least Eclipse 3.3+. Fortunately, the next version of Aptana, currently called Apana Andretti Alpha is built on Eclipse 3.4, and though it seems to have some memory consumption issues (it is an alpha remember!), I was able to find a copy of it here and get everything sorted and working together nicely. And let me just say, my life has became a little bit easier.

Simen Brekekn was generous enough to post about his setup over on Lighthouse's support site here. Below is his info, with some added/updated information.

  1. Make sure you're running Eclipse 3.4 or above (or grab a copy of Aptana's Andretti Alpha #3 here http://www.aptana.com/node/577Aptana 1.5 here)\
  2. In Eclipse/Aptana install Mylyn from the Mylyn update site
    http://download.eclipse.org/tools/mylyn/update/e3.4 (Eclipse 3.4, 3.5, Galileo Packages)
    http://download.eclipse.org/tools/mylyn/update/e3.4 (Eclipse 3.3)
  3. In Eclipse/Aptana install the "Mylyn Connector: Web Templates" form the Mylyn incubation update site ( http://download.eclipse.org/tools/mylyn/update/incubator )

Then add a new Task Repository and enter the following information:

Please note that the query pattern in this screenshot is incorrect.

Please note that the query pattern in this screenshot is incorrect.

  • Enter the full url of your project, ie. http://foo.lighthouseapp.com/projects/123
  • Give the task repository a Label
  • Enter your authentication info (if it's a private project)
  • Then add the following settings under "Advanced Configuration":

  • Task URL: ${serverUrl}/tickets/
  • New Task URL: ${serverUrl}/tickets/new
  • Query Request URL: ${serverUrl}/tickets.xml?q=${query}
  • Query Pattern (make sure you enter it in one line):
XML:
  1. <ticket>.*?<assigned -user-id type="integer">({Owner}.+?)</assigned>.*?<number type="integer">({Id}.+?)</number>.*?<state>({Status}.+?)</state>.*?<title>({Description}.+?)</title></ticket>

Next enable HTTP Authentication, enter your login (again), click Finish and you're all set!

Similar Posts

Categories

Archives

About

Nater Kane is freelance developer and user experience & technology consultant based in Brooklyn, NY.

Nater's focus is on creating a semantic and accessible web, and having delighted clients with happy customers.

He likes to spend time playing with his cats, playing drums, working on his diesel vw rabbit and his motorcycle, and enjoying a decent espresso.

RSS

Twitter » What I'm Up To

How I'm Social

Basecamp

Meta


Nater Kane naterkane personal http://www.naterkane.com LinkedIn Profile Web Technologist personal nater@naterkane.com 1978-09-12 voice 845.234.6698 | fax 707.922.0593
964 Flushing Ave. Brooklyn, NY 11206