- Cool Apple Software list
Need to read…
(categories: toread tools software osx mac apple ) - Paul Kedrosky’s Infectious Greed: Realtime Parking Data in Santa Monica
Quote: “As I have written here (too) many times, the theme for 2007 remains realtime. Trust me on that one.”
(categories: realtime 2007 )
Monthly Archives: November 2006
Mac modifier keys
Posting this here for my own use:
⌘/Apple/Command:
This is known as the “Command” key, as in “press Command-q to quit.” This can be used to access most major menu items by pressing the key combination listed next to those items in the menu.
There are several standard commands which are consistent across nearly all Mac applications, such as ⌘Q (Quit), ⌘W (Close), ⌘C (Copy), ⌘V (Paste), ⌘X (Cut), ⌘O (Open), ⌘A (Select All), ⌘N (New), and ⌘-? for Help. ⌘-Tab quickly switches between applications. Learning these shortcuts can save you a lot of time.
Command-clicking can also be used to select multiple items at once.⇧/Shift:
There aren’t enough letters to match every menu item, so shift is generally used in combination with ⌘ for less-commonly accessed menu items.
Shift-clicking can also be used to select a range of items.⌥/Option/Alt:
This is known as the “Option” key. This is used in combination with ⌘ and ⇧ for even lower-priority menu items, or for variations on standard items. (For instance ⌘⌥W will close all of an application’s windows, instead of just one.) If you pull down a menu and then press option, the menu items will change to their variant options in real time.
In the menus, option is represented by “⌥”, presumably because there weren’t any other symbols left. (The key has “alt” printed on it for compatibility with Windows applications.)
When ⌥ is used as a modifier without ⌘, it accesses alternate characters. For instance, ⌥-2 gives you ™, and pressing ⌥ in conjunction with vowels lets you place accents over international characters.
Option-dragging items will copy them instead of moving them.
You can also use option with the arrow & delete keys to work with entire words at a time.^/Ctrl/Control:
The control key exists primarily for compatibility with Windows and Unix applications. You won’t generally use it in Mac applications. If an application does include a control-key shortcut, it will be abbreviated as “^”.
Control-clicking is equivalent to a right-click.Fn/Function:
The function key is unique to notebook computers, and exists solely to access secondary functions on the keyboard. Use this to access Home, End, Page Up, Page Down, the F1-F7 keys, and the number keypad.
source: ask.metafilter.com:
Links: 11-27-2006
- Techcrunch » Blog Archive » The Six Biggest New Ideas In Chat
Not sure that many of these ideas are ‘new’, but worth a read anyway.
(categories: IM chat social innovation collaboration location ) - USB Laser Guided Missile Launcher
Seriously. No really, I’m serious. (editors note: ICBM = inter-cubicle ballistic missile?)
(categories: usb laser-guided munitions missiles icbm ) - THE WORLD’S BEST LOGOS – NOT 🙂
Cool logo work.
(categories: design logos creative ) - I don’t understand my Mac. | Ask MetaFilter
Lots of good stuff in here for switchers.
(categories: mac osx switcher switch ) - Mouse wheel programming in JavaScript
Who knew?
(categories: javascript mouse events ui scrollwheel )
Links: 11-20-2006
- Google Video – Video Search [techtalks]
Techtalks feed.
(categories: techtalks google video presentations )
Links: 11-19-2006
Links: 11-16-2006
- Boston slang – Wikipedia, the free encyclopedia
I worked in the Leather district (near Southie) for a couple years. I only got pulled over by a statie twice, once for banging an illegal left turn and once for speeding on the Pike.
(categories: boston is wickedpissah ) - WriteRoom | Hog Bay Software
WriteRoom is a full screen, distraction free, writing environment.
(categories: mac writing osx editor freeware gtd tools ) - Jettison – Home
… “transparent enablement of JSON based web services”
(categories: json stax opensource xml java javascript )
Using Lucene and MoreLikeThis to show Related Content
If you read this blog, you probably paid a smidgen of attention to the Web 2.0 Conference held last week in San Francisco. Sphere was one of the companies that presented and they launched a product called the “Sphere It Contextual Widget for blogs“, which is JavaScript widget you can add to your blog or content focused site that displays contextually similar blogs and blog posts for the reader. I’ve always wanted to try to do something similar (no pun intended) using Lucene, so I spent a couple hours this weekend banging around on it.
The first step was to get my WordPress content (which is stored in MySQL) into Lucene. A couple lines of code later I had a Lucene index full of all 857 (as of 11/14/2006) posts including the blog post ID, subject, body, date and permalink. Next, I checked out and compiled the Lucene similarity contrib, whose most important asset is the MoreLikeThis class (written in part by co-worker Bruce Ritchie). You provide an instance of MoreLikeThis a document to parse, an index to search and the fields in the index you want to compare against the given document and then execute a Lucene search just like you normally would:
Reader reader = ...; IndexReader index = IndexReader.open(indexfile); IndexSearcher searcher = new IndexSearcher(index); MoreLikeThis mlt = new MoreLikeThis(index); mlt.setFieldNames(new String[] {"subject", "body"}); Query query = mlt.like(reader); Hits hits = is.search(query);
I’ll skip all the glue and say that I wired all this up into a servlet that spits out JSON:
Map entries = getRelatedEntries(postID, body); JSONObject json = JSONObject.fromObject( entries ); response.setContentType("text/javascript"); response.getWriter().write("Related = {}; Related.posts = " + json.toString());
and then used client side JavaScript and some PHP to put it all together:
<h5>Related Content</h5> <script type="text/javascript" src="http://cephas.net/blog/related.js?post=<?php the_ID(); ?>"> </script> <script type="text/javascript"> for (post in Related.posts) { document.write('<li><a href="' + Related.posts[post] + '">' + post + '</a></li>'); } </script>
I’ve been cruising around the blog and so far, I think that MoreLikeThis works really well. For the most part, the posts that I would expect to be related, are related. There are a couple posts which seem to pop to the top of the ‘related content’ feed that I’ll have to fix and I would like to boost the terms in the subject of the original document, but other than that, I’m happy with it.
Back to sphere, and specifically to Brady’s post about it on the Radar blog:
Top-Left Corner: Recent, similar blog posts from other blogs.
Bottom-Left Corner: Recommended blogs that are selected by the site-owner. This is very handy for blog networks.
Top-Right Corner: Similar posts from that blog
Bottom-Right Corner: Ad, currently served by FM Pub.
Given a week, I’m guessing that you could use the Google API to do the top-left corner, hardcode the content in the bottom left, use MoreLikeThis in the top right and the bottom right you’d want to do yourself anyway. So if you were a publisher looking for more page views, why would you even consider the Sphere widget?
ROME, custom modules, publishdate and RSS
At work, I’ve taken on the work of migrating our RSS feeds currently being produced using JSP to ROME. Since we’ve added a few custom elements to the feeds available in Jive Forums (things like message and thread counts), I’m taking advantage of the feature in ROME that gives you the ability to programtically define namespaces in your RSS 2.0, Atom 0.3 and Atom 1.0 feeds (examples: the iTunes module and the OpenSearch module). Anyway, the code I wrote to add an item to the list of available items in a feed looked something like this:
... entry = new SyndEntryImpl(); entry.setTitle(thread.getSubject()); entry.setLink("http://mysite.com/community/threads.jspa?id=" + thread.getID()); entry.setUpdatedDate(thread.getModificationDate()); entry.setPublishedDate(thread.getCreationDate()); ... JiveForumsModule module = new JiveForumsModuleImpl(); module.setReplyCount(thread.getReplyCount()); Listmodules = new ArrayList (); modules.add(module); entry.setModules(modules); ...
This code works, but if you view the feed, you don’t get a publish date on the item. I dug into the ROME source code a bit and found that the publish date is stored as part of the Dublin Core module, which I came to find out is a ‘special’ module that always exists on a SyndEntryImpl object. Take a look at the implementation of the getModules() method on the SyndEntryImpl class:
public List getModules() { if (_modules==null) { _modules=new ArrayList(); } if (ModuleUtils.getModule(_modules,DCModule.URI)==null) { _modules.add(new DCModuleImpl()); } return _modules; }
See how the method automatically injects a DCModuleImpl into the _modules property if the DCModule doesn’t exist? Long story short, the code I wrote blew away the _modules
property on the SyndEntryImpl instance which contained a single DCModule which itself contained the publishedDate date instance. So by the time the feed was produced, the publish date I set on each SyndEntry was long gone. I should have written my code like this:
JiveForumsModule module = new JiveForumsModuleImpl(); module.setReplyCount(thread.getReplyCount()); entry.getModules().add(module);
Better yet, the ROME team could have done two things:
- Added documentation to the setModules(List modules) method that pointed out that any information in the existing DCModule instance will be lost if the provided list doesn’t contain the existing DCModule instance.
- Added a method to the SyndEntry interface called addModule(Module module).
Open source: I’m lovin it.
Links: 11-4-2006
- Optimizing Page Load Time – die.net
An in-depth look at HTTP connections, pipelining, caching and optimization.
(categories: http pipelining caching cache optimization performance browser tuning network javascript css images ) - Scott Rosenberg’s Wordyard » Blog Archive » Crash in Iraq; Grove’s “shift left”
Quote: “Just like the early personal computer, it will be far from ideal, but it will be a start, and it can get better over time. The alternative, he says, is to wait endlessly for a perfect technology.”
(categories: simplicity gtd )
Guys Weekend
I flew down to Los Angeles last weekend to be with my dad and my brother as part of our first annual guys weekend. My brother picked me up at LAX on Friday night and we drove to Mojave to meet my dad who drove down from Mammoth. Saturday morning we got up and had a leisurely breakfast and then drove 17 miles to the north entrance of Edwards Air Force Base for the 2006 Open House (I was a plane nerd when I was a kid). Unfortunately, I didn’t have a camera with me (Flickr has some great pictures if you’re interested) but I learned all kinds of interesting things on this visit:
- Edwards Air Force Base is the home of NASA’s Dryden Flight Research Center, which is the birthplace of a number of fascinating aeronautical research projects. Dryden houses the 747 that the Space Shuttle hitches a ride on back to Florida if it lands at Edwards. Said 747 was on display at the show.
- The speed of sound at sea level is approximately 760 MPH.
- Edwards AFB is most likely the place that originated “Murphy’s Law“.
- Because we talked about it while at the show, I poked around Google Maps to see how high the resolution was on the satelliate imagery around Edwards. It’s actually really good. Edwards AFB appears to be the home of three B-1B’s and a couple B-52’s from this satellite image provided by Google. You can see the squadron of F-22’s at Tyndall AFB in Florida, the hangars for the fourteen B-2’s at Whitehall AFB in Missouri, and the hangars for the F-117 squadron at Holloman AFB in New Mexico.
- A B-1 streaking across the sky at 600mph with full afterburner is really amazing to watch. Pictures don’t do it justice.
- Finally, if you ever get a chance to watch the Thunderbirds perform, know that a certain point during the show, you’ll be intently watching a couple F-16’s fly by wondering where the that ‘other’ one went. He (and there’s now even a she!) is right behind you. Don’t say I didn’t warn you.