Four months ago I installed OS X on my HP Pavilion. I’ve always enjoyed trying to turning a sow’s ear into a silk purse. When I was a kid I would build telescopes out of cardboard tubes, airplanes out of surplus Air Force fuel tanks, Heathkit amplifiers, Timex-Sinclair computer kits, and the list goes on.
The HP came with Vista installed, and as you know, it is a genuine turd of an O/S. Installing OS X on a so-so PC to create a faux iMac sounded like a good idea.
The installation took about two weeks of my time. I haunted the www.osx86project.org, www.lifehacker.com, www.hackintosh.org, and www.ihackintosh.com web sites. Everyone of these sites had great tutorials that were guaranteed to work—with one explicit caveat: you had to use the right hardware. If you built your PC from scratch, you would have something that works. Unfortunately, my HP had some incompatibilities. My network card wasn’t on the HCL (Hardware Compatibility List), nor was my video card (nVidia 8400 GS 512). And that video card turned out to be the Achilles heel for my Hackintosh.
My first attempts to install OS X were frustrating. It took hours of digging around Google to figure out how to set up the BIOS for OS X. Finding some hacked-up nVidia drivers for Intel OS X took a couple of days. I was able to cannibalize a network card from an old server. And then all of a sudden, it worked. Sort of…
Setting up the sound was the next thrill, and when I finally got that working, I discovered that none of the iWork suite worked. I’m dependent on Keynote for my class presentations, so this was a major downer.
But the problem was more severe than Keynote not working—the entire GUI was gooey and moved in slow motion. After some research, I discovered that I needed to turn on hardware acceleration to Quartz GL to get up to speed. I used osx86tools helped get that working. (osx86tools is no longer under development.
Then one day, after two mind-bending weeks, it all worked! Sort of…
These days my main focus is learning Smalltalk. When I cranked up VisualWorks, this is what I saw:
But, most of my applications worked as they should have. A more serious problem eventually became apparent: the desktop would randomly freeze several times a day, usually when I was in the middle of editing a complex document.
Again, I hit Google for any clues, and found out that some nVidia cards just freeze up now and then on OS X, even on real Apple hardware. In other words, I need to buy a video card on the HCL.
Now, I’m declaring this game over. It was fun at first. It worked, sort of. Now I’m reverting the HP to Vista Hell. I can always use it for PHP development.
As for my Mac needs, I ordered a real iMac and I feel good about it. No more sow’s ears for me.
I got a free San Francisco Chronicle today. It was a slender tabloid, tossed onto my front sidewalk. It was barely recognizable as a newspaper in the litter that blows into my yard from the high school across the street.
I came to S.F. after I graduated from Cal and I loved reading the Chron. It had great columnists. Herb Caen, Gerald Nachman, Terrence O’Flaherty, and Phil Elwood wrote so well that I looked forward to reading them every day. Herb Caen was the most famous of all. He popularized the word “hippy” that we all take for granted these days. And he was from the Sacramento Valley, like me. I admired his three-dot style and I use ellipses quite often, necessary or not…
Today’s Chronicle, thinner than a ham sandwich
I’m proud to say that I was published a few pieces in the Chronicle—a 3-page photo-journalistic piece about the cute girls in the Postal Service (I was a mailman/photographer at the time), and a humorous essay about the demoralizing dating scene I kept encountering in The City. Anyway, I like to think it was humorous.
Now the once mighty Chronicle is going begging for readers. But why read it now? It’s just a few sheets of poorly printed paper, thinner than a ham sandiwich, smaller than my R Crumb Volume 7 Hot ‘n’ Heavy. It won’t be long before the San Francisco Chronicle is just a memory.
Ou sont les neiges d’antan?
This is a list of the 100 most common built-in PHP functions, and the 100 most common Drupal functions in the Drupal source code. Language constructs and reserved words are excluded from the count (foreach, for, while, list, isset, etc).
Total Built-in Functions Used: 239
Total Built-in Function calls in Drupal source code: 1392.
| Rank |
Function |
Occurrences |
Per Cent |
| 1 |
define |
94 |
6.75 |
| 2 |
implode |
79 |
5.68 |
| 3 |
array_merge |
63 |
4.53 |
| 4 |
substr |
58 |
4.17 |
| 5 |
trim |
38 |
2.73 |
| 6 |
str_replace |
38 |
2.73 |
| 7 |
count |
37 |
2.66 |
| 8 |
preg_replace |
35 |
2.51 |
| 9 |
array_pop |
33 |
2.37 |
| 10 |
array_shift |
31 |
2.23 |
| 11 |
explode |
30 |
2.16 |
| 12 |
ini_set |
29 |
2.08 |
| 13 |
header |
27 |
1.94 |
| 14 |
urldecode |
23 |
1.65 |
| 15 |
call_user_func_array |
22 |
1.58 |
| 16 |
func_get_args |
21 |
1.51 |
| 17 |
chr |
17 |
1.22 |
| 18 |
array_keys |
16 |
1.15 |
| 19 |
array_unshift |
15 |
1.08 |
| 20 |
preg_match |
15 |
1.08 |
| 21 |
preg_replace_callback |
15 |
1.08 |
| 22 |
in_array |
15 |
1.08 |
| 23 |
is_array |
14 |
1.01 |
| 24 |
strtr |
14 |
1.01 |
| 25 |
array_filter |
13 |
0.93 |
| 26 |
strpos |
12 |
0.86 |
| 27 |
md5 |
12 |
0.86 |
| 28 |
parse_url |
12 |
0.86 |
| 29 |
dirname |
11 |
0.79 |
| 30 |
unserialize |
11 |
0.79 |
| 31 |
max |
11 |
0.79 |
| 32 |
gmdate |
10 |
0.72 |
| 33 |
strlen |
9 |
0.65 |
| 34 |
printf |
9 |
0.65 |
| 35 |
time |
9 |
0.65 |
| 36 |
pg_query |
9 |
0.65 |
| 37 |
serialize |
8 |
0.57 |
| 38 |
round |
8 |
0.57 |
| 39 |
array_walk |
8 |
0.57 |
| 40 |
array_flip |
8 |
0.57 |
| 41 |
date |
8 |
0.57 |
| 42 |
array_unique |
8 |
0.57 |
| 43 |
ksort |
8 |
0.57 |
| 44 |
str_repeat |
7 |
0.50 |
| 45 |
mysqli_query |
7 |
0.50 |
| 46 |
array_map |
7 |
0.50 |
| 47 |
asort |
7 |
0.50 |
| 48 |
mysql_query |
7 |
0.50 |
| 49 |
file_get_contents |
6 |
0.43 |
| 50 |
function_exists |
6 |
0.43 |
| 51 |
register_shutdown_function |
6 |
0.43 |
| 52 |
array_reverse |
6 |
0.43 |
| 53 |
ceil |
5 |
0.36 |
| 54 |
fclose |
5 |
0.36 |
| 55 |
urlencode |
5 |
0.36 |
| 56 |
xml_parser_create |
5 |
0.36 |
| 57 |
uasort |
5 |
0.36 |
| 58 |
file |
5 |
0.36 |
| 59 |
strstr |
5 |
0.36 |
| 60 |
basename |
5 |
0.36 |
| 61 |
base64_encode |
5 |
0.36 |
| 62 |
bcmod |
5 |
0.36 |
| 63 |
min |
5 |
0.36 |
| 64 |
strtolower |
5 |
0.36 |
| 65 |
floor |
4 |
0.29 |
| 66 |
array_merge_recursive |
4 |
0.29 |
| 67 |
array_slice |
4 |
0.29 |
| 68 |
preg_match_all |
4 |
0.29 |
| 69 |
ob_start |
4 |
0.29 |
| 70 |
mysql_connect |
4 |
0.29 |
| 71 |
abs |
4 |
0.29 |
| 72 |
realpath |
4 |
0.29 |
| 73 |
ltrim |
4 |
0.29 |
| 74 |
mail |
4 |
0.29 |
| 75 |
preg_split |
4 |
0.29 |
| 76 |
base64_decode |
4 |
0.29 |
| 77 |
chmod |
4 |
0.29 |
| 78 |
array_key_exists |
4 |
0.29 |
| 79 |
call_user_func |
4 |
0.29 |
| 80 |
ob_end_clean |
4 |
0.29 |
| 81 |
ord |
4 |
0.29 |
| 82 |
array_values |
3 |
0.22 |
| 83 |
is_numeric |
3 |
0.22 |
| 84 |
xml_parser_free |
3 |
0.22 |
| 85 |
debug_backtrace |
3 |
0.22 |
| 86 |
pg_last_error |
3 |
0.22 |
| 87 |
is_dir |
3 |
0.22 |
| 88 |
intval |
3 |
0.22 |
| 89 |
xml_set_character_data_handler |
3 |
0.22 |
| 90 |
is_string |
3 |
0.22 |
| 91 |
stripslashes |
3 |
0.22 |
| 92 |
sort |
3 |
0.22 |
| 93 |
fopen |
3 |
0.22 |
| 94 |
ini_get |
3 |
0.22 |
| 95 |
xml_set_element_handler |
3 |
0.22 |
| 96 |
trigger_error |
3 |
0.22 |
| 97 |
extract |
3 |
0.22 |
| 98 |
is_object |
3 |
0.22 |
| 99 |
array_diff |
3 |
0.22 |
| 100 |
link |
3 |
0.22 |
Total Drupal Functions Used: 1647
Total Custom Drupal Function calls in Drupal source code: 6819.
| Rank |
Function |
Occurrences |
Per Cent |
| 1 |
t |
1133 |
16.62 |
| 2 |
theme |
273 |
4.00 |
| 3 |
db_query |
230 |
3.37 |
| 4 |
drupal_set_message |
214 |
3.14 |
| 5 |
variable_get |
148 |
2.17 |
| 6 |
drupal_render |
113 |
1.66 |
| 7 |
form_set_error |
89 |
1.31 |
| 8 |
check_plain |
80 |
1.17 |
| 9 |
watchdog |
78 |
1.14 |
| 10 |
l |
73 |
1.07 |
| 11 |
st |
68 |
1.00 |
| 12 |
drupal_set_title |
66 |
0.97 |
| 13 |
drupal_get_form |
59 |
0.87 |
| 14 |
variable_set |
52 |
0.76 |
| 15 |
system_settings_form |
43 |
0.63 |
| 16 |
cache_clear_all |
43 |
0.63 |
| 17 |
update_sql |
40 |
0.59 |
| 18 |
drupal_goto |
39 |
0.57 |
| 19 |
drupal_add_js |
38 |
0.56 |
| 20 |
db_result |
34 |
0.50 |
| 21 |
url |
34 |
0.50 |
| 22 |
theme_get_setting |
33 |
0.48 |
| 23 |
confirm_form |
32 |
0.47 |
| 24 |
base_path |
27 |
0.40 |
| 25 |
pager_query |
27 |
0.40 |
| 26 |
drupal_add_css |
27 |
0.40 |
| 27 |
module_invoke |
27 |
0.40 |
| 28 |
format_date |
26 |
0.38 |
| 29 |
check_url |
26 |
0.38 |
| 30 |
drupal_not_found |
25 |
0.37 |
| 31 |
db_fetch_object |
25 |
0.37 |
| 32 |
module_invoke_all |
22 |
0.32 |
| 33 |
drupal_attributes |
19 |
0.28 |
| 34 |
drupal_alter |
19 |
0.28 |
| 35 |
drupal_map_assoc |
19 |
0.28 |
| 36 |
db_query_range |
18 |
0.26 |
| 37 |
language_list |
17 |
0.25 |
| 38 |
get_t |
17 |
0.25 |
| 39 |
drupal_add_tabledrag |
17 |
0.25 |
| 40 |
xmlrpc_error |
17 |
0.25 |
| 41 |
language_default |
16 |
0.23 |
| 42 |
arg |
16 |
0.23 |
| 43 |
template_preprocess |
16 |
0.23 |
| 44 |
_locale_import_message |
15 |
0.22 |
| 45 |
format_plural |
15 |
0.22 |
| 46 |
stdClass |
15 |
0.22 |
| 47 |
_user_mail_text |
14 |
0.21 |
| 48 |
drupal_bootstrap |
14 |
0.21 |
| 49 |
menu_get_item |
14 |
0.21 |
| 50 |
drupal_set_header |
13 |
0.19 |
| 51 |
menu_rebuild |
13 |
0.19 |
| 52 |
cache_set |
12 |
0.18 |
| 53 |
db_add_field |
12 |
0.18 |
| 54 |
_db_query |
12 |
0.18 |
| 55 |
form_error |
12 |
0.18 |
| 56 |
variable_del |
12 |
0.18 |
| 57 |
db_fetch_array |
12 |
0.18 |
| 58 |
module_list |
12 |
0.18 |
| 59 |
drupal_mail |
11 |
0.16 |
| 60 |
drupal_get_destination |
11 |
0.16 |
| 61 |
drupal_load |
11 |
0.16 |
| 62 |
batch_process |
11 |
0.16 |
| 63 |
batch_get |
11 |
0.16 |
| 64 |
drupal_access_denied |
11 |
0.16 |
| 65 |
hook_schema |
10 |
0.15 |
| 66 |
form_set_value |
10 |
0.15 |
| 67 |
_db_query_callback |
10 |
0.15 |
| 68 |
node_load |
9 |
0.13 |
| 69 |
node_get_types |
9 |
0.13 |
| 70 |
module_rebuild_cache |
9 |
0.13 |
| 71 |
menu_link_save |
9 |
0.13 |
| 72 |
file_directory_path |
9 |
0.13 |
| 73 |
form_clean_id |
9 |
0.13 |
| 74 |
conf_path |
9 |
0.13 |
| 75 |
image_get_info |
9 |
0.13 |
| 76 |
update_get_projects |
9 |
0.13 |
| 77 |
db_change_field |
9 |
0.13 |
| 78 |
drupal_json |
8 |
0.12 |
| 79 |
file_scan_directory |
8 |
0.12 |
| 80 |
batch_set |
8 |
0.12 |
| 81 |
_form_set_class |
8 |
0.12 |
| 82 |
cache_get |
8 |
0.12 |
| 83 |
module_load_include |
8 |
0.12 |
| 84 |
tablesort_sql |
8 |
0.12 |
| 85 |
install_task_list |
8 |
0.12 |
| 86 |
_db_create_key_sql |
8 |
0.12 |
| 87 |
_db_error_page |
8 |
0.12 |
| 88 |
drupal_get_normal_path |
8 |
0.12 |
| 89 |
b |
8 |
0.12 |
| 90 |
hook_forms |
7 |
0.10 |
| 91 |
drupal_maintenance_theme |
7 |
0.10 |
| 92 |
drupal_set_content |
7 |
0.10 |
| 93 |
module_load_install |
7 |
0.10 |
| 94 |
file_create_path |
7 |
0.10 |
| 95 |
drupal_query_string_encode |
7 |
0.10 |
| 96 |
menu_link_delete |
7 |
0.10 |
| 97 |
_db_create_field_sql |
7 |
0.10 |
| 98 |
menu_execute_active_handler |
7 |
0.10 |
| 99 |
module_exists |
7 |
0.10 |
| 100 |
_locale_get_predefined_list |
7 |
0.10 |
This is a list of the 100 most common built-in PHP functions, and the 100 most common Drupal functions in the Drupal source code. Language constructs and reserved words are excluded from the count (foreach, for, while, list, isset, etc).
There were 1350 calls to 235 built-in functions in the source code, and 5483 calls to 1032 DRUPAL functions.
The Top 100 Built-in PHP Functions in Drupal
| Rank |
Function |
Occurrences |
Per Cent |
| 1 |
define |
94 |
6.75 |
| 2 |
implode |
79 |
5.68 |
| 3 |
array_merge |
63 |
4.53 |
| 4 |
substr |
58 |
4.17 |
| 5 |
trim |
38 |
2.73 |
| 6 |
str_replace |
38 |
2.73 |
| 7 |
count |
37 |
2.66 |
| 8 |
preg_replace |
35 |
2.51 |
| 9 |
array_pop |
33 |
2.37 |
| 10 |
array_shift |
31 |
2.23 |
| 11 |
explode |
30 |
2.16 |
| 12 |
ini_set |
29 |
2.08 |
| 13 |
header |
27 |
1.94 |
| 14 |
urldecode |
23 |
1.65 |
| 15 |
call_user_func_array |
22 |
1.58 |
| 16 |
func_get_args |
21 |
1.51 |
| 17 |
chr |
17 |
1.22 |
| 18 |
array_keys |
16 |
1.15 |
| 19 |
array_unshift |
15 |
1.08 |
| 20 |
preg_match |
15 |
1.08 |
| 21 |
preg_replace_callback |
15 |
1.08 |
| 22 |
in_array |
15 |
1.08 |
| 23 |
is_array |
14 |
1.01 |
| 24 |
strtr |
14 |
1.01 |
| 25 |
array_filter |
13 |
0.93 |
| 26 |
strpos |
12 |
0.86 |
| 27 |
md5 |
12 |
0.86 |
| 28 |
parse_url |
12 |
0.86 |
| 29 |
dirname |
11 |
0.79 |
| 30 |
unserialize |
11 |
0.79 |
| 31 |
max |
11 |
0.79 |
| 32 |
gmdate |
10 |
0.72 |
| 33 |
strlen |
9 |
0.65 |
| 34 |
printf |
9 |
0.65 |
| 35 |
time |
9 |
0.65 |
| 36 |
pg_query |
9 |
0.65 |
| 37 |
serialize |
8 |
0.57 |
| 38 |
round |
8 |
0.57 |
| 39 |
array_walk |
8 |
0.57 |
| 40 |
array_flip |
8 |
0.57 |
| 41 |
date |
8 |
0.57 |
| 42 |
array_unique |
8 |
0.57 |
| 43 |
ksort |
8 |
0.57 |
| 44 |
str_repeat |
7 |
0.50 |
| 45 |
mysqli_query |
7 |
0.50 |
| 46 |
array_map |
7 |
0.50 |
| 47 |
asort |
7 |
0.50 |
| 48 |
mysql_query |
7 |
0.50 |
| 49 |
file_get_contents |
6 |
0.43 |
| 50 |
function_exists |
6 |
0.43 |
| 51 |
register_shutdown_function |
6 |
0.43 |
| 52 |
array_reverse |
6 |
0.43 |
| 53 |
ceil |
5 |
0.36 |
| 54 |
fclose |
5 |
0.36 |
| 55 |
urlencode |
5 |
0.36 |
| 56 |
xml_parser_create |
5 |
0.36 |
| 57 |
uasort |
5 |
0.36 |
| 58 |
file |
5 |
0.36 |
| 59 |
strstr |
5 |
0.36 |
| 60 |
basename |
5 |
0.36 |
| 61 |
base64_encode |
5 |
0.36 |
| 62 |
bcmod |
5 |
0.36 |
| 63 |
min |
5 |
0.36 |
| 64 |
strtolower |
5 |
0.36 |
| 65 |
floor |
4 |
0.29 |
| 66 |
array_merge_recursive |
4 |
0.29 |
| 67 |
array_slice |
4 |
0.29 |
| 68 |
preg_match_all |
4 |
0.29 |
| 69 |
ob_start |
4 |
0.29 |
| 70 |
mysql_connect |
4 |
0.29 |
| 71 |
abs |
4 |
0.29 |
| 72 |
realpath |
4 |
0.29 |
| 73 |
ltrim |
4 |
0.29 |
| 74 |
mail |
4 |
0.29 |
| 75 |
preg_split |
4 |
0.29 |
| 76 |
base64_decode |
4 |
0.29 |
| 77 |
chmod |
4 |
0.29 |
| 78 |
array_key_exists |
4 |
0.29 |
| 79 |
call_user_func |
4 |
0.29 |
| 80 |
ob_end_clean |
4 |
0.29 |
| 81 |
ord |
4 |
0.29 |
| 82 |
array_values |
3 |
0.22 |
| 83 |
is_numeric |
3 |
0.22 |
| 84 |
xml_parser_free |
3 |
0.22 |
| 85 |
debug_backtrace |
3 |
0.22 |
| 86 |
pg_last_error |
3 |
0.22 |
| 87 |
is_dir |
3 |
0.22 |
| 88 |
intval |
3 |
0.22 |
| 89 |
xml_set_character_data_handler |
3 |
0.22 |
| 90 |
is_string |
3 |
0.22 |
| 91 |
stripslashes |
3 |
0.22 |
| 92 |
sort |
3 |
0.22 |
| 93 |
fopen |
3 |
0.22 |
| 94 |
ini_get |
3 |
0.22 |
| 95 |
xml_set_element_handler |
3 |
0.22 |
| 96 |
trigger_error |
3 |
0.22 |
| 97 |
extract |
3 |
0.22 |
| 98 |
is_object |
3 |
0.22 |
| 99 |
array_diff |
3 |
0.22 |
| 100 |
link |
3 |
0.22 |
Total Drupal Functions Used: 1647
Total Custom Drupal Function calls in Drupal source code: 6819.
The Top 100 Drupal Native Functions
| Rank |
Function |
Occurrences |
Per Cent |
| 1 |
t |
1133 |
16.62 |
| 2 |
theme |
273 |
4.00 |
| 3 |
db_query |
230 |
3.37 |
| 4 |
drupal_set_message |
214 |
3.14 |
| 5 |
variable_get |
148 |
2.17 |
| 6 |
drupal_render |
113 |
1.66 |
| 7 |
form_set_error |
89 |
1.31 |
| 8 |
check_plain |
80 |
1.17 |
| 9 |
watchdog |
78 |
1.14 |
| 10 |
l |
73 |
1.07 |
| 11 |
st |
68 |
1.00 |
| 12 |
drupal_set_title |
66 |
0.97 |
| 13 |
drupal_get_form |
59 |
0.87 |
| 14 |
variable_set |
52 |
0.76 |
| 15 |
system_settings_form |
43 |
0.63 |
| 16 |
cache_clear_all |
43 |
0.63 |
| 17 |
update_sql |
40 |
0.59 |
| 18 |
drupal_goto |
39 |
0.57 |
| 19 |
drupal_add_js |
38 |
0.56 |
| 20 |
db_result |
34 |
0.50 |
| 21 |
url |
34 |
0.50 |
| 22 |
theme_get_setting |
33 |
0.48 |
| 23 |
confirm_form |
32 |
0.47 |
| 24 |
base_path |
27 |
0.40 |
| 25 |
pager_query |
27 |
0.40 |
| 26 |
drupal_add_css |
27 |
0.40 |
| 27 |
module_invoke |
27 |
0.40 |
| 28 |
format_date |
26 |
0.38 |
| 29 |
check_url |
26 |
0.38 |
| 30 |
drupal_not_found |
25 |
0.37 |
| 31 |
db_fetch_object |
25 |
0.37 |
| 32 |
module_invoke_all |
22 |
0.32 |
| 33 |
drupal_attributes |
19 |
0.28 |
| 34 |
drupal_alter |
19 |
0.28 |
| 35 |
drupal_map_assoc |
19 |
0.28 |
| 36 |
db_query_range |
18 |
0.26 |
| 37 |
language_list |
17 |
0.25 |
| 38 |
get_t |
17 |
0.25 |
| 39 |
drupal_add_tabledrag |
17 |
0.25 |
| 40 |
xmlrpc_error |
17 |
0.25 |
| 41 |
language_default |
16 |
0.23 |
| 42 |
arg |
16 |
0.23 |
| 43 |
template_preprocess |
16 |
0.23 |
| 44 |
_locale_import_message |
15 |
0.22 |
| 45 |
format_plural |
15 |
0.22 |
| 46 |
stdClass |
15 |
0.22 |
| 47 |
_user_mail_text |
14 |
0.21 |
| 48 |
drupal_bootstrap |
14 |
0.21 |
| 49 |
menu_get_item |
14 |
0.21 |
| 50 |
drupal_set_header |
13 |
0.19 |
| 51 |
menu_rebuild |
13 |
0.19 |
| 52 |
cache_set |
12 |
0.18 |
| 53 |
db_add_field |
12 |
0.18 |
| 54 |
_db_query |
12 |
0.18 |
| 55 |
form_error |
12 |
0.18 |
| 56 |
variable_del |
12 |
0.18 |
| 57 |
db_fetch_array |
12 |
0.18 |
| 58 |
module_list |
12 |
0.18 |
| 59 |
drupal_mail |
11 |
0.16 |
| 60 |
drupal_get_destination |
11 |
0.16 |
| 61 |
drupal_load |
11 |
0.16 |
| 62 |
batch_process |
11 |
0.16 |
| 63 |
batch_get |
11 |
0.16 |
| 64 |
drupal_access_denied |
11 |
0.16 |
| 65 |
hook_schema |
10 |
0.15 |
| 66 |
form_set_value |
10 |
0.15 |
| 67 |
_db_query_callback |
10 |
0.15 |
| 68 |
node_load |
9 |
0.13 |
| 69 |
node_get_types |
9 |
0.13 |
| 70 |
module_rebuild_cache |
9 |
0.13 |
| 71 |
menu_link_save |
9 |
0.13 |
| 72 |
file_directory_path |
9 |
0.13 |
| 73 |
form_clean_id |
9 |
0.13 |
| 74 |
conf_path |
9 |
0.13 |
| 75 |
image_get_info |
9 |
0.13 |
| 76 |
update_get_projects |
9 |
0.13 |
| 77 |
db_change_field |
9 |
0.13 |
| 78 |
drupal_json |
8 |
0.12 |
| 79 |
file_scan_directory |
8 |
0.12 |
| 80 |
batch_set |
8 |
0.12 |
| 81 |
_form_set_class |
8 |
0.12 |
| 82 |
cache_get |
8 |
0.12 |
| 83 |
module_load_include |
8 |
0.12 |
| 84 |
tablesort_sql |
8 |
0.12 |
| 85 |
install_task_list |
8 |
0.12 |
| 86 |
_db_create_key_sql |
8 |
0.12 |
| 87 |
_db_error_page |
8 |
0.12 |
| 88 |
drupal_get_normal_path |
8 |
0.12 |
| 89 |
b |
8 |
0.12 |
| 90 |
hook_forms |
7 |
0.10 |
| 91 |
drupal_maintenance_theme |
7 |
0.10 |
| 92 |
drupal_set_content |
7 |
0.10 |
| 93 |
module_load_install |
7 |
0.10 |
| 94 |
file_create_path |
7 |
0.10 |
| 95 |
drupal_query_string_encode |
7 |
0.10 |
| 96 |
menu_link_delete |
7 |
0.10 |
| 97 |
_db_create_field_sql |
7 |
0.10 |
| 98 |
menu_execute_active_handler |
7 |
0.10 |
| 99 |
module_exists |
7 |
0.10 |
| 100 |
_locale_get_predefined_list |
7 |
0.10 |
Every cell in my body wants this. Maybe it’s because I have a birthday coming up next year and I think I deserve a little Sweetness and Light for being such a sweetheart.
I want the iMac with the Quad Core and 8GB and 2TB. I’m sure it will make me smarter and happier. I’m sure that VisualWorks will run great on this, and Squeak, too. I’ll learn Smalltalk faster and become a better person sooner.
Thank you, Steve, for making insanely great products. The other manufacturers, they just don’t get it.
Your humble FanBoy,
Doug
Happy hacking…
DHH and the Ninja Rock Stars at 37Signals have drunk the Tim Ferriss cool-aid and churned out another motivational book called Rework. They’re taking advance orders for their new copy-and-paste collection of NR (Nouveau Riche) fortune cookie wisdom. I hear (from their Twitter droppings) that they are the most awesome pre-ordered/unpublished business/motivational/self-improvement book on Amazon. When I looked today it was ranked #4739, not quite the top of the heap, but almost #1.
An important person named Seth Godin contributed the hyperbolic blurb on the cover: “Ignore this book at your own peril”. This is quite an ominous statement. It sounds like someone from the publisher is going to knock on your door and punch you in the face if you don’t buy this book. I think this is what the encyclopedia and vacuum cleaner salesmen call the “hard sell.” There a few other appropriate words for it: pompous, bombastic, hyperbolic, gassy, windy, Billy-Maysian etc.
This Zig Ziglerish exhortation reminds me of the pitch I heard when I got sandbagged into attending an Amway meeting: This will change your life forever. If you work the Plan, the Plan works for you. K.I.S.S! You’ll have hundreds of people working under you while you sit on the beach in Florida! You’re gonna be working 4 hours a week and driving a Porsche and flying in a private jet with blondes in bikinis!!!
Smarter than Einstein
I think the title Rework is the authors’ (there are quite a few geniuses involved) subtle way of saying they’ve found some important information that has escaped every other human being who has lived on the planet in the last 10,000 years. We are blessed to live in the same era as DHH and his cohort. Newton couldn’t figure it out. Einstein missed this nugget completely. Turing didn’t come close. Goethe, Keats, Heine, Flaubert—all blind. But now the guys who created Backpack and Campfire (don’t know what they are) are going to blow us away with their profound insights. They will rework the way we think about work.
Layers Galore
When I stop to think about it, the title alone is worth $22.00. You get one layer, a literal word — rework, as in redo a job — and a second layer (re (regarding) work). That’s only $11.00 a layer, and if you pre-order now, they’ll throw in another layer for free. This book is a steal.
Don’t Steal. Buy!
Don’t steal it, though: pre-order it right here from my Amazon Associate account so that I can make a few bucks, too, as I climb out of the ranks of work slaves to live on the sunny mountain tops with the NRs.
37Signals Introduces New Color to the World
I should mention that DHH and gang have pulled out all stops with this book. They’ve expanded the primary color palette by adding in a new, heretofore unknown color that they call “black.” They’ve used this new color on the jacket of their book.
Fanboy Ululations
Fanboys across the nation have declared this new color “the bestest color ever.” Here are a few gushings on the 37Signals blog, with names changed to protect the embarrassed:
Swiss Inspired
I think the cover is definitely Swiss inspired! I urge you to buy this book—through my link, or course. With the proceeds I collect, I’ll be able to get a deck chair on that beach in Valhalla. God, it’s going to be swell to rub elbows with the Illuminati and Nouveau Riche Rat Pack. If you want to join us, you get reworked.
Rework is so awesome that I feel reworked already, even without reading the book. Sometimes a good title, a good blurb, and a new color is all you need to “sell” an idea. As that carnival dude says, “Ignore this book at your own peril.”
Happy hacking…
My new masthead shows a Happy Hacking Keyboard Professional 2 keyboard with blank keys (with this blog’s name on it, of course). Only the nerdiest of geeks buy them. It’s a real man’s keyboard. If you can use one of these, you have earned the right to say “Hunt and peckers dig a hole and bury yourselves in shame.”
My HHKB Professional 2
My personal HHKB Professional 2 keyboard looks a lot like a regular keyboard except all of the useless keys are missing. Actually, even those keys (function keys, etc) are available if you press the function key and hit one of the number keys.
The HHKB Professional 2 keyboard has the best touch I’ve ever experienced—better, in my opinion, than the clicky IBM/DasKeyboard keyboards that everyone raves about. I’ve owned both of those and wouldn’t say anything bad about either, but this is the Ninja Rock Star of the keyboard world.*
What seals the deal with the HHKBP2 is that the control key fall nicely under the left little finger, which is perfect for me because I spend endless hours each day coding with Vi. And the escape key is easily accessible as I shift between the edit and command modes. Try one. You’ll like it.
Be warned: this great keyboard is expensive. The Yin/Dollar exchange rate doesn’t help. But, don’t cheap out and get the HHKB Lite version. You’ll be sorry.
You can only buy the HHKB Professional 2 from Japan. I got mine from GeekStuff4u.com. Hey, you might want to get one of their Yakuza Thumb drives, too. They’re made of real thumbs.
* While I’m rambling on about keyboards, I’ll say the Mac keyboards are cute, but not my thing. The best laptop keyboard is the one on my ThinkPad X61.
After two days of using the TypeMatrix 2030 keyboard, I have lost the ability to type on either standard keyboards or the TypeMatrix. All of my typing synapses are in disarray. My motor neurons are flailing as they try to reconnect. I’m back to Stage One, Mrs. Roberts’ Beginning Typing class at Pierce Joint Union High School in Arbuckle California.
Thank you TypeMatrix for luring me into your diabolic Time Machine. My brain is now 13-years old again.
The search never stops. I always have the feeling that the perfect keyboard is just around the corner. This is what I’m typing on now, the TypeMatrix 2030. You’re not seeing the typos because I’m correcting them. My typing speed is about 15 wpm, but the promise is that I’ll be up to speed in a few days/weeks.
Of course, I’m right in the middle of some time sensitive projects, so this is the perfect time to waste time. Is “self sabotage” the correct term?
I learned of this keyboard through an interview with Peepcode founder Geoffrey Grosenbach.
Robert Scoble interviewed Dan Olsen, the founder of Yourversion in this Building 43 interview. I make a cameo appearance as a PHP hacker.
Jxxx Sxxxxxxx 21 Aug 09