Behdad Esfahbod's daily notes on GNOME, Pango, Fedora, Persian Computing, Bob Dylan, and Dan Bern!

My Photo
Name:
Location: Toronto, Ontario, Canada

Ask Google.

Contact info
Google
Hacker Emblem Become a Friend of GNOME I Power Blogger
follow me on Twitter
Archives
July 2003
August 2003
October 2003
November 2003
December 2003
March 2004
April 2004
May 2004
July 2004
August 2004
September 2004
November 2004
March 2005
April 2005
May 2005
June 2005
July 2005
August 2005
September 2005
October 2005
November 2005
December 2005
January 2006
February 2006
March 2006
April 2006
May 2006
June 2006
July 2006
August 2006
September 2006
October 2006
November 2006
December 2006
January 2007
February 2007
March 2007
April 2007
May 2007
June 2007
July 2007
August 2007
September 2007
October 2007
November 2007
December 2007
January 2008
February 2008
March 2008
April 2008
May 2008
June 2008
July 2008
August 2008
October 2008
November 2008
December 2008
January 2009
March 2009
April 2009
May 2009
June 2009
July 2009
August 2009
November 2009
December 2009
March 2010
April 2010
May 2010
June 2010
July 2010
October 2010
November 2010
April 2011
May 2011
August 2011
September 2011
October 2011
November 2011
November 2012
June 2013
January 2014
May 2015
Current Posts
McEs, A Hacker Life
Wednesday, April 23, 2008
 UTF-8 Bit Manipulation

Roozbeh:

My reasoning was that the current code is not worth changing without strong profiling data showing measurable gain in real-world use cases. That's all.

Now to your solution and questions. You approach has two and a half major issues that make it unusable in real code:So while it theoretically works, using nine integer operations, in practice it's unusable. Oh, your function produces the exact same values as in the glib table BTW. That's good.

Here is my solution that can be written as valid C code using 13 simple 32-bit operations:
def behdad_utf8_skipper(c):
v = c ^ 0xff
r = (v > 0xF) << 2
v >>= r
s = (v > 0x3) << 1
v >>= s
r |= s
r |= (v >> 1)
return (0x11234561 >> (r << 2)) & 7
It's basically a negation followed by a log2 straight from bithacks, followed by a table lookup. I particularly like the beautiful final constant.

I leave it to others to measure if this is faster than the lookup-table in glib. Enjoyed working this out though. Everyone, go crazy, shove a few ops off!

Labels: , ,

Tuesday, April 22, 2008
 In the News

[I didn't see enough buzz made about these, hence posting.]

Couple inspiring moves by FSF and Red Hat to end software patents:


While at that, also check out What’s Going On With Red Hat Desktop Systems? An Update.

The list in there just doesn't do justice on how important a role Red Hat's Desktop team plays in advancement of the Free Software desktop and laptop experience. With recent hires like Matthew Garrett, Richard Hughes, and William Jon McCann, you know how serious we are about doing the Right Thing. I feel so privileged to be part of that.

Labels: ,

Thursday, April 17, 2008
 Help save the world and enjoy!

cntower
[While people are in the fundraising/donation mood...]

On Saturday I will climb the tallest free-standing structure on land in the world as part of the 18th Annual Canada Life CN Tower Climb for WWF-Canada.

I will be climbing 1776 step in my TEAM GNOME tshirt, aiming for 25 minutes, and with a goal of raising $250 by tomorrow (Friday 18th) night, to help stop global warming.

So here is your chance to help save the world and enjoy while I'm suffering. Sponsor me now!

Labels: ,

 Aaron is Luis

You guys are all certainly wrong.

Aaron is the real Luis, and he loves Vincent:

Aaron is Luis

Labels: , , , ,

Wednesday, April 16, 2008
 History meme

Liked this one enough to bother.
[behdad:0 ~]$ uname -a
Linux behdad.behdad.org 2.6.24.4-64.fc8 #1 SMP Sat Mar 29 09:54:46 EDT 2008 i686 i686 i386 GNU/Linux
[behdad:0 ~]$ history | awk '{a[$2]++}END{for(i in a){print a[i] " " i}}' | sort -rn | head
1429 cd
685 vim
576 ls
377 ll
369 make
349 makenull
192 git
166 grep
120 python
107 evince

Where ll is the Red Hat / Fedora alias for ls -l, and makenull is my alias for make >/dev/null.

Labels: , ,