MaisonBisson.com » hack http://maisonbisson.com A bunch of stuff I would have emailed you about. Sat, 14 Nov 2009 20:14:03 +0000 http://wordpress.org/?v=2.8.6 en hourly 1 WordPress Hacks: Nested Paths For WPMU Blogs http://maisonbisson.com/blog/post/14052/wordpress-hacks-nested-paths-for-wpmu-blogs/ http://maisonbisson.com/blog/post/14052/wordpress-hacks-nested-paths-for-wpmu-blogs/#comments Tue, 15 Sep 2009 16:23:10 +0000 Casey Bisson http://maisonbisson.com/?p=14052

Situation: you’ve got WordPress Multi-User setup to host one or more domains in sub-directory mode (as in site.org/blogname), but you want a deeper directory structure than WPMU allows…something like the following examples, perhaps:

  • site.org/blogname1
  • site.org/departments/blogname2
  • site.org/departments/blogname3
  • site.org/services/blogname3

The association between blog IDs and sub-directory paths is determined in wpmu-settings.php, but the code there knows nothing about nested paths. So a person planning to use WordPress MU as a CMS must either flatten his/her information architecture, or do some hacking.

Challenge: hacking WordPress MU to support arbitrary directory paths for each blog

As with my multi-domain hack, the following assumes that you’re using the vhost=no setting, that you have access to and know how to manipulate your MySQL, that you have control over your DNS and know how to use it, and that you know how to configure Apache or similar. You’d also be smart to turn off any object caching you may have running, at least until we’re done doing direct database manipulation. The following also assumes that your wp-config.php sets the DOMAIN_CURRENT_SITE and PATH_CURRENT_SITE constants — if you’ve done a fresh install recently, it probably does, or you can check my domain mapping hack.

Hack The Path Mapping

Right at the top of wpmu-settings.php you can see how it strips all but the base of the URL path, but rather than mod that file, we can take advantage of an obscure MU hack: sunrise.php, which gets executed after some important WordPress components like the database class get loaded and before wpmu-settings.php.

To use sunrise.php, create a PHP file at /wp-content/sunrise.php and set define('SUNRISE', TRUE); in your wp-config.php.

Here’s the sunrise.php code I’m using:

if( defined( 'DOMAIN_CURRENT_SITE' ) && defined( 'PATH_CURRENT_SITE' ) ) {
	$current_site->id = (defined( 'SITE_ID_CURRENT_SITE' ) ? constant('SITE_ID_CURRENT_SITE') : 1);
	$current_site->domain = $domain = DOMAIN_CURRENT_SITE;
	$current_site->path  = $path = PATH_CURRENT_SITE;
	if( defined( 'BLOGID_CURRENT_SITE' ) )
		$current_site->blog_id = BLOGID_CURRENT_SITE;

	$url = parse_url( $_SERVER['REQUEST_URI'], PHP_URL_PATH );

	$patharray = (array) explode( '/', trim( $url, '/' ));
	$blogsearch = '';
	if( count( $patharray )){
		foreach( $patharray as $pathpart ){
			$pathsearch .= '/'. $pathpart;
			$blogsearch .= $wpdb->prepare(" OR (domain = %s AND path = %s) ", $domain, $pathsearch .'/' );
		}
	}

	$current_blog = $wpdb->get_row( $wpdb->prepare("SELECT *, LENGTH( path ) as pathlen FROM $wpdb->blogs WHERE domain = %s AND path = '/'", $domain, $path) . $blogsearch .'ORDER BY pathlen DESC LIMIT 1');

	$blog_id = $current_blog->blog_id;
	$public  = $current_blog->public;
	$site_id = $current_blog->site_id;
	$current_site = sl_get_current_site_name( $current_site );
}

function sl_get_current_site_name( $current_site ) {
	global $wpdb;
	$current_site->site_name = wp_cache_get( $current_site->id . ':current_site_name', "site-options" );
	if ( !$current_site->site_name ) {
		$current_site->site_name = $wpdb->get_var( $wpdb->prepare( "SELECT meta_value FROM $wpdb->sitemeta WHERE site_id = %d AND meta_key = 'site_name'", $current_site->id ) );
		if( $current_site->site_name == null )
			$current_site->site_name = ucfirst( $current_site->domain );
		wp_cache_set( $current_site->id . ':current_site_name', $current_site->site_name, 'site-options');
	}
	return $current_site;
}

The first few lines of the code do pretty much the same as the start of the wpmu_current_site() function in wpmu-settings.php, but starting with line 8 it takes a big departure.

That’s where it splits the requested URL path like /path/to/blog/and/stuff/ into pieces and constructs an SQL query against the wp_blogs table to identify the correct blog to serve the request. The following example shows how:

SELECT *, LENGTH( path ) as pathlen
	 FROM wp_blogs
	 WHERE domain = 'domain.org' AND path = '/'"
	  	 OR (domain = 'domain.org' AND path = '/path/')
	 	 OR (domain = 'domain.org' AND path = '/path/to/')
	 	 OR (domain = 'domain.org' AND path = '/path/to/blog/')
	 	 OR (domain = 'domain.org' AND path = '/path/to/blog/and/')
	 	 OR (domain = 'domain.org' AND path = '/path/to/blog/and/stuff/')
	 ORDER BY pathlen DESC
	 LIMIT 1

Optimization note

Setting a maximum depth (and array_slice( $patharray, 0, $maxdepth )) would allow the query to be cached up to that depth. Otherwise, the query must be executed for every page load. The $maxdepth could either be set arbitrarily, or could be determined automatically based on the maximum path length of registered blogs.

Setting Up New Blogs

Once you’ve hacked the path mapping (and tested that it didn’t break your current site), you can add a new blog at a nested path.

Create a new blog in the MU blog admin.

Create a new blog in the MU blog admin.

Unfortunately, MU strips the slashes from the URL path you just tried to set.

The new blog you just tried to create, but with a very different path.

The new blog you just tried to create, but with a very different path.

Fortunately, you can set the path correctly in the MU blog editor, and it won’t break the path when you save there.

Set the blog path in the MU blog editor, MU won't break it when you save it this time.

Set the blog path in the MU blog editor, MU won't break it when you save it this time.

Once you create the new blog, try to load it in your browser. You’ll quickly notice the stylesheet is missing, though the blog works and functions properly.

Hack The .htaccess

WPMU uses the following .htaccess rewrite rule to properly direct requests for files on the real filesystem:

RewriteRule  ^([_0-9a-zA-Z-]+/)?(wp-.*) $2 [L]

Obviously, that rule won’t work for deep paths, so I’ve replaced it with this rule:

RewriteRule  ^(.+)?/(wp-.*) /$2 [L]

And with that, you should be done.

]]>
http://maisonbisson.com/blog/post/14052/wordpress-hacks-nested-paths-for-wpmu-blogs/feed/ 6
iPhone 3G Camera Hacks And Deets http://maisonbisson.com/blog/post/13875/iphone-3g-camera-hacks-and-deets/ http://maisonbisson.com/blog/post/13875/iphone-3g-camera-hacks-and-deets/#comments Thu, 14 May 2009 15:57:50 +0000 Casey http://maisonbisson.com/?p=13875

iPhone main backside

Those unwilling to open of their iPhone to adjust the camera focus might take a look at Griffin’s Clarifi, a case with a built-in close-up lens that can slide in our out of place as needed.

Flickr user Meine Ideenecke, meanwhile, has figured out the iPhone camera specifications. He says it’s about 37MM (35MM equivalent), though this source says it’s 27MM.

]]>
http://maisonbisson.com/blog/post/13875/iphone-3g-camera-hacks-and-deets/feed/ 0
iPhone Earbud + Business Card Hacks: Speakers and Cord Winder http://maisonbisson.com/blog/post/13687/iphone-earbud-business-card-hacks-speakers-and-cord-winder/ http://maisonbisson.com/blog/post/13687/iphone-earbud-business-card-hacks-speakers-and-cord-winder/#comments Wed, 08 Apr 2009 19:32:45 +0000 Casey Bisson http://maisonbisson.com/?p=13687

iPhone Earbud + Business Card Hacks

Two interesting submissions to the Core77 Business Card Hacks Challenge: earbud speakers and a cord winder.

]]>
http://maisonbisson.com/blog/post/13687/iphone-earbud-business-card-hacks-speakers-and-cord-winder/feed/ 0
Hacking Cellphones For Public Health http://maisonbisson.com/blog/post/13298/hacking-cellphones-for-public-health/ http://maisonbisson.com/blog/post/13298/hacking-cellphones-for-public-health/#comments Mon, 22 Dec 2008 20:36:12 +0000 Casey Bisson http://maisonbisson.com/?p=13298

Using only an LED, plastic light filter and some wires, scientists at UCLA have modded a cellphone into a portable blood tester capable of detecting HIV, malaria and other illnesses.

via Wired.

]]>
http://maisonbisson.com/blog/post/13298/hacking-cellphones-for-public-health/feed/ 0
Yet Another Encryption Crack http://maisonbisson.com/blog/post/12373/yet-another-encryption-crack/ http://maisonbisson.com/blog/post/12373/yet-another-encryption-crack/#comments Wed, 17 Sep 2008 02:10:07 +0000 Casey Bisson http://maisonbisson.com/?p=12373

Those kwazy kids will quack anything now. Stream ciphers may never have been expected to be that secure, but Adi Shamir’s cube attack breaks them like so many, um, bits of data.

]]>
http://maisonbisson.com/blog/post/12373/yet-another-encryption-crack/feed/ 0
Google Minus Google http://maisonbisson.com/blog/post/12368/google-minus-google/ http://maisonbisson.com/blog/post/12368/google-minus-google/#comments Mon, 15 Sep 2008 18:06:46 +0000 Casey Bisson http://maisonbisson.com/?p=12368

Google minus Google

From The Register:

Inspired by a recent New York Times piece that questioned whether the Mountain View search monopoly is morphing into a media company — which it is — Finnish blogger Timo Paloheimo promptly unveiled Google minus Google. Key in the word “YouTube,” and the first result is Wikipedia.

]]>
http://maisonbisson.com/blog/post/12368/google-minus-google/feed/ 1
Axiotron modbook: Cool, but bad timing? http://maisonbisson.com/blog/post/12417/axiotron-modbook-cool-but-bad-timing/ http://maisonbisson.com/blog/post/12417/axiotron-modbook-cool-but-bad-timing/#comments Fri, 05 Sep 2008 17:14:18 +0000 Casey Bisson http://maisonbisson.com/?p=12417

the Axiotron modbook

The Axiotron modbook is cool, I gotta admit, but with so many rumors of a MacBook Touch due this fall, I suspect that potential buyers might be holding their breath. But, on the other hand, those people have been waiting for a Mac tablet since Jobs killed the Newton, and rumors of a tablet are hardly unusual — see 2002, 2003, 2004, 2005, 2006, 2007, 2008. Still, the whispers of an over-grown iPhone device are getting a lot of echos lately.

]]>
http://maisonbisson.com/blog/post/12417/axiotron-modbook-cool-but-bad-timing/feed/ 1
Wiimote (Wii Remote) + Projector + Computer = Homebrew Multitouch Display http://maisonbisson.com/blog/post/12018/wiimote-wii-remote-projector-computer-homebrew-multitouch-display/ http://maisonbisson.com/blog/post/12018/wiimote-wii-remote-projector-computer-homebrew-multitouch-display/#comments Wed, 02 Jan 2008 10:11:57 +0000 Casey Bisson http://maisonbisson.com/blog/post/12018/wiimote-wii-remote-projector-computer-homebrew-multitouch-display

You’ve got the hardware, you’ve got the skills, go build a multi-touch electronic whiteboard with your Wiimote and a data projector.

]]>
http://maisonbisson.com/blog/post/12018/wiimote-wii-remote-projector-computer-homebrew-multitouch-display/feed/ 1
WordPress Strips Classnames, And How To Fix It http://maisonbisson.com/blog/post/11674/wordpress-strips-classnames-and-how-to-fix-it/ http://maisonbisson.com/blog/post/11674/wordpress-strips-classnames-and-how-to-fix-it/#comments Tue, 15 May 2007 16:29:29 +0000 Casey Bisson http://maisonbisson.com/blog/post/11674/#wordpress-strips-classnames-and-how-to-fix-it

WordPress 2.0 introduced some sophisticated HTML inspecting and de-linting courtesy of kses.

kses is an HTML/XHTML filter written in PHP. It removes all unwanted HTML elements and attributes, and it also does several checks on attribute values. kses can be used to avoid Cross-Site Scripting (XSS), Buffer Overflows and Denial of Service attacks.

It’s a good addition, but it was also removing the class names from some of the elements of my posts. The result is that the following structured XHTML was coming through without any structure.

<ul class=“fullrecord”>
<li class=“title”><h3>Title</h3>
<ul>
<li>The Effects Of A Modified Ball In Developing The Volleyball Pass And Set For High School Students</li>
</ul>
</li>
<li class=“attribution”>...

Without the semantic value of the classnames, the XHTML loses all the microformatting, making it not only less re-usable/remixable but also harder to style.

<ul>
<li><h3>Title</h3>
<ul>
<li>The Effects Of A Modified Ball In Developing The Volleyball Pass And Set For High School Students</li>
</ul>
</li>
<li>...

A WordPress form post pointed me to the includes/kses.php file, where the $allowedposttags array set the standards for the acceptable tags and attributes. It begins like this:

$allowedposttags = array ('address' => array (), 'a' => array ('href' => array (), 'title' => array (), 'rel' => array ()...

It’s a hack, but changing the entries for some of the tags got me through.

'ul' => array ('class' => array())

WordPress, strip tags, kses, code, fix, hack, class names, semantic markup

]]>
http://maisonbisson.com/blog/post/11674/wordpress-strips-classnames-and-how-to-fix-it/feed/ 6
WordPress Baseline Changes To Support WPopac http://maisonbisson.com/blog/post/11264/wordpress-baseline-changes-to-support-wpopac/ http://maisonbisson.com/blog/post/11264/wordpress-baseline-changes-to-support-wpopac/#comments Mon, 17 Apr 2006 13:01:57 +0000 Casey Bisson http://maisonbisson.com/blog/post/11264/

I’ve whittled things down to the point where the only baseline change from WordPress 2.0.2 is in the next_posts_link function of the wp-includes/template-functions-links.php file. The change is necessary because WPopac rewrites the SQL search queries in a way that’s incompatible with a piece of this function, but necessary for performance reasons.

Here’s how my version reads:

function next_posts_link($label='Next Page »', $max_page=0) {
	global $paged, $result, $request, $posts_per_page, $wpdb, $max_num_pages;
	if ( !$max_page ) {
			if ( isset($max_num_pages) ) {
				$max_page = $max_num_pages;
			} else {
				preg_match('#FROM\s(.*)\sGROUP BY#siU', $request, $matches);

				// added April 5 2006 by Casey Bisson to support WPopac
				// necessary because the preg_match above fails with some queries
				if(!$fromwhere)
					$fromwhere = $wpdb->posts;

				// changed April 5 2006 by Casey Bisson to speed the query by eliminating
				// the slow DISTINCT clause
				//$numposts = $wpdb->get_var(“SELECT COUNT(DISTINCT ID) FROM $fromwhere”);
				$numposts = $wpdb->get_var(“SELECT COUNT(*) FROM $fromwhere”);
				$max_page = $max_num_pages = ceil($numposts / $posts_per_page);
			}
	}
	if ( !$paged )
		$paged = 1;
	$nextpage = intval($paged) + 1;
	if ( (! is_single()) && (empty($paged) || $nextpage < = $max_page) ) {
		echo '<a href=“';
		next_posts($max_page);
		echo '”>'. preg_replace('/&([^#])(?![a-z]{1,8};)/', '&$1', $label) .'</a>';
	}
}

baseline modification, hack, mysql query optimization, wordpress, wordpress hacking, wpopac

]]>
http://maisonbisson.com/blog/post/11264/wordpress-baseline-changes-to-support-wpopac/feed/ 0
FrontRow For Everybody http://maisonbisson.com/blog/post/11009/frontrow/ http://maisonbisson.com/blog/post/11009/frontrow/#comments Fri, 09 Dec 2005 03:22:01 +0000 Casey Bisson http://maisonbisson.com/blog/?p=11009

Via an IM from Ryan Eby: a pointer to Andrew Escobar’s directions on how to install Apple’s Front Row.

apple, front row, hack, install, media, media pc, media player, jukebox, mac, computer

]]>
http://maisonbisson.com/blog/post/11009/frontrow/feed/ 4
More NEASIS&T Buy Hack or Build Followup http://maisonbisson.com/blog/post/10967/more-neasist-buy-hack-or-build-followup/ http://maisonbisson.com/blog/post/10967/more-neasist-buy-hack-or-build-followup/#comments Fri, 18 Nov 2005 22:20:01 +0000 Casey Bisson http://maisonbisson.com/blog/?p=10967

First, Josh Porter, the first speaker of the day has a blog where he’s posted his presentation notes and some key points. Josh spoke about Web 2.0, and ended with the conclusion that successful online technologies are those that best model user behavior. “I think Web 2.0 is about modeling something that already exists in our offline worlds, mostly in the spoken words and minds of humankind.”
Interestingly, in findability terms, it was Josh’s post that clued me in that the event podcast was online because he linked to my blog in his post. Lesson: links make things findable.

Like Josh, I found my voice a little unfamiliar, but you can listen here (51MB) if that’s your thing.

Also, I demoed some features I’d like to see in a future OPAC, but to help people visualize them, I finally put together a graphical mockup of them here.

tags: , , , , , , , , , , , , , ,

]]>
http://maisonbisson.com/blog/post/10967/more-neasist-buy-hack-or-build-followup/feed/ 0
NEASIS&T Buy, Hack or Build Followup http://maisonbisson.com/blog/post/10965/neasist-buy-hack-or-build-followup/ http://maisonbisson.com/blog/post/10965/neasist-buy-hack-or-build-followup/#comments Wed, 16 Nov 2005 22:06:45 +0000 Casey Bisson http://maisonbisson.com/blog/?p=10965

I was tempted to speak without slides yesterday, and I must offer my apologies to anybody trying to read them now, as I’m not sure how the slides make sense without the context of my speech. On that point, it’s worth knowing that Lichen did an outstanding job liveblogging the event, despite struggling with a blown tire earlier that morning.

It’s probably well understood by anybody reading this that most library services are at the web 1.0 stage. My slides show a number of screenshots of our current library catalog, but my speech went something like “I’m not here to tell you how we re-painted, re-wallpapered our catalog….” So, skip past those slides, and read here for context.

My following points were about some of the hacks I’d put into production to bring our library services up to about web 1.5 status. They include an awareness that library services include not only the OPAC, but also our website and a number of databases. We’ve all encountered difficulty trying to describe the different reasons to use each of these resources, but our patrons have less and less patience for it. Among the barriers to use is access. Even when our databases are freely available on campus, off-campus use often requires a special password for one stage or another of the process.

The slides demonstrate our current solution. By integrating our resources into the university portal and leveraging the authentication service it provided, I was able to hack single sign-on access to our databases and patron self-service module. This lowered the barriers to access, and we saw our usage of those resources increase dramatically.

All this was good, but it still wasn’t web 2.0, and it revealed a larger problem looming ahead: identity management. The more we try to provide individualized, customized, targeted services, the more we’ll bump into that issue of how we identify our patrons.

Moving forward to our web 2.0 future, I wanted to posit the idea that one of the most useful recent developments is the way we can now separate the tools that store and manage our data from the tools that display and manipulate our data. Yes, I’m talking about APIs, Webservices, XML, RSS, REST, SOAP, et all.

As examples, I offered a personal vacation map (using Google Maps), the Colr Pickr (using Flickr), our reviews and bookjacket pages (using Amazon), and this silly home made search engine (using Yahoo, Technorati, Amazon, Flickr, and Wikipedia).

Even more specific to libraries, I offered my OPAC suggest, A9.com integration and this functional (but not pretty) prototype of how I’d like to make subject headings a more prominent part of the search process.

So, you’re free to go through my slides, but you might do better to read around here and at LibDev. If you do go through the slides, be sure to follow the links out to websites. I didn’t visit even half of them during my talk, but I put them there to offer some redeeming value on review.

tags: , , , , , , , , , , , , , , ,

]]>
http://maisonbisson.com/blog/post/10965/neasist-buy-hack-or-build-followup/feed/ 5
NEASIS&T Buy, Hack or Build http://maisonbisson.com/blog/post/10964/neasist-buy-hack-or-build/ http://maisonbisson.com/blog/post/10964/neasist-buy-hack-or-build/#comments Tue, 15 Nov 2005 17:28:25 +0000 Casey Bisson http://maisonbisson.com/blog/?p=10964

I’m here at the NEASIS&T Buy, Hack or Build event today at MIT’s Media Lab. On the list are Joshua Porter, Director of Web Development for User Interface Engineering, Pete Bell [corrected], co-founder of Endeca Solutions, and me.

I’m posting my slides here now, but I’m told we’ll see a podcast of the proceedings soon after the conclusion. Be aware that the slides are full of links. I won’t be able to explore them all during the presentation, but they might add value later.

tags: , , , , , , , ,

]]>
http://maisonbisson.com/blog/post/10964/neasist-buy-hack-or-build/feed/ 6
bsuite_innerindex WordPress Plugin http://maisonbisson.com/blog/post/10852/bsuite_innerindex-wordpress-plugin/ http://maisonbisson.com/blog/post/10852/bsuite_innerindex-wordpress-plugin/#comments Thu, 29 Sep 2005 11:10:39 +0000 Casey Bisson http://maisonbisson.com/blog/?p=10852

[[pageindex]]

About

“Blogging” typically connotes short-form writing that needs little internal structure, but that’s no reason to cramp your style. As people start to explore WordPress’s Pages feature, it seems likely that we’ll need a way to structure content within posts or pages sooner or later. That’s why I’m working on bsuite_innerindex.

It’s a WordPress Plugin that puts named anchors on all of the <h1>, <h2>, <h*>-tagged content, and builds a list of links to those anchors that can be inserted anywhere on the page. An example can be seen in this post, and in the old bstat Beta 4 announcement.

Usage

Step 1
Write a post or page as usual, inserting <h*> tags where you normally would.

Step 2
Add this token somewhere in your page or post: [[pageindex]] That token will be replaced with the generated index. Why not just insert the index at the top of the page? Because it’s your document and you might want to put it elsewhere, like after the introduction or executive summary. But just remember to insert the token, because it won’t put the index anywhere if you don’t.

Installation

Step 1
Download: bsuite_innerindex.zip

Step 2
place unzipped “ bsuite_innerindex.php” file in your wp-content/plugins folder and activate it via the WP control panel. See the WordPress Codex for more detail.

Notes & Caveats

This is the first beta release of this plugin. I don’t see how it could break anything, but what do I know. Don’t blame me for loss, damage, or bad presidents. Please report bugs and/or suggestions in the comments.

anchors, blogging, bsuite, bsuite plugins, bsuite_innerindex, document structure, hack, innerindex, named anchor, page anchor, plugin, structured content, wordpress, wordpress plugin, wp, wp plugin

]]>
http://maisonbisson.com/blog/post/10852/bsuite_innerindex-wordpress-plugin/feed/ 10
Editing WordPress “Pages” Via XML-RPC http://maisonbisson.com/blog/post/10834/editing-wordpress-pages-via-xml-rpc/ http://maisonbisson.com/blog/post/10834/editing-wordpress-pages-via-xml-rpc/#comments Thu, 22 Sep 2005 15:51:44 +0000 Casey Bisson http://maisonbisson.com/blog/?p=10834

WordPress’s Pages open the door to using WP as a content management system. Unfortunately, Pages can’t be edited via XML-RPC blogging apps like Ecto. This might be a good thing, but I’m foolhardy enough to try working around it.

Here’s how:

Find a text editor you like and open up the wp-includes/functions-post.php file.

in the wp_get_recent_posts() function, change this:

$sql = “SELECT * FROM $wpdb->posts WHERE post_status IN ('publish', 'draft', 'private') ORDER BY post_date DESC $limit”;

to this:

$sql = “SELECT * FROM $wpdb->posts WHERE post_status IN ('publish', 'draft', 'private', 'static') ORDER BY post_date DESC $limit”;

Now, in the wp_update_post() function, look for this block of code:

// Escape data pulled from DB.
$post = add_magic_quotes($post);
extract($post);

and insert this block underneath it:

// XML-RPCs apps can't return “static” post status,
// so we have to work around it
$page_status = NULL;
if($post_status == “static”)
$page_status = “static”;

And follow that up by looking for this block:

// Now overwrite any changed values being passed in. These are
// already escaped.
extract($postarr);

and insert this block underneath it:

// set post_status static if this is a page
if($page_status)
$post_status = $page_status;

Fair warning: this works in my limited testing, but don’t blame me if you try it and it breaks something. You’d be a fool to mess with this on a live install, so don’t.

tags: , , , , , , , , , , , , , , , ,

]]>
http://maisonbisson.com/blog/post/10834/editing-wordpress-pages-via-xml-rpc/feed/ 24
What’s a MIRT? http://maisonbisson.com/blog/post/10687/whats-a-mirt/ http://maisonbisson.com/blog/post/10687/whats-a-mirt/#comments Fri, 22 Jul 2005 07:01:13 +0000 Casey Bisson http://www.maisonbisson.com/blog/?p=10687

MIRTs turn red lights green, but merely having one will probably get you in a pile of trouble. More info at i-hacked.com.

tags: , , , , , , , , ,

]]>
http://maisonbisson.com/blog/post/10687/whats-a-mirt/feed/ 0
Google Maps Rock, Hacking Them Rocks More http://maisonbisson.com/blog/post/10462/google-maps-rock-hacking-them-rocks-more/ http://maisonbisson.com/blog/post/10462/google-maps-rock-hacking-them-rocks-more/#comments Tue, 15 Feb 2005 04:38:56 +0000 Casey Bisson /?p=10462

Google Maps Screenshot.People are going wild over Google Maps, but I honestly didn’t get too excited about it until I saw Glen Murphy’s Movin Gmap project. It’s a Python script that reads location data from a connected GPS and pans the Gmap to follow. Upon seeing this hack of Gmaps, I went looking for more. Hack a Day shows us how to get maps for a set of decimal coordinates from both Terraserver and Gmap (Terrabrowser will do some of this for MacOS X).The folks over at libgmail found themselves enamored of Gmaps too, and posted a page of hacks. And, before I knew it, I stumbled across a Keyhole BBS discussion of how to find the latitude and longitude of a ‘place’ without a GPS handy. The answer comes from Lat-Long.com, a browsable and searchable database of locations of many types across the US.

Update: The Maps API is out.

tags: , , , , ,

]]>
http://maisonbisson.com/blog/post/10462/google-maps-rock-hacking-them-rocks-more/feed/ 814