What is ReCAPTCHA?
For those familiar with ReCAPTCHA you know that Google acquired the ingenius tool some time ago. The service provides two features. Spam prevention for site owners, and nearly flawless OCR for Google. OCR is Optical Character Recognition, and is the difficult task of having computers read the words, letters and symbols in scanned text or images. ReCAPTCHA shows 2 words. One word it already knows, which provides the spam prevention. The second word it is trying to figure out. So it will use your input, and the input from thousands of other end users to build a consensus.
Using this technology ReCAPTCHA has already digitized the entire NY Times archive. So what’s next?
What does digitizing books have to do with Google Maps?
Well anyone using Google maps has surely encountered slight issues with addresses on long rural roads, and densely packed city streets. Google relies on some distance algorithms and published city planning guidelines to determine approximately where apartment 221b is on Baker Street.
Google’s latest approach is to eliminate the approximations, and to be able to say with 100% certainty just where an address is, and they are using you and I to collect that info. So when you get directions, Google can walk you right to the door.
Next time you are asked to answer a Re-CAPTCHA you might see numbers instead of words, and just where are those numbers coming from? Street addresses! Addresses captured, but not yet understood by Google’s street View cameras.
Although I love the idea that Google will finally stop sending my out-of-town friends and pizza boy2 miles down the road, I am curious where this technology will continue to go, and at what point privacy becomes a concern.
The amount of users who rely on Google Calendars to organize their personal and professional lives is staggering. Seeing as most clients are comfortable and proficient with the technology, there is little reason to point them elsewhere when they ask for a custom widget to display upcoming events on their site.
In fact, the only trouble is that Google’s provided widget layouts are all – er, well they are all quite lame, and likely won’t match your current theme.
Checking the integrity of a file on a unix node is simple thanks to a confusingly named “checksum” utility. It, oddly enough gives you the checksum of a file.
If your stuck on (or just love) windows, you can give yourself the ability to check any files checksum with the click of a mouse.
1. read more…
Although still very new, and with much to learn I am loving Modx as a tool to quickly build out robust sites.
Recently a client wanted to add Facebook Integration to their MODx site. I’ve used Facebook’s API before, and know it makes authentication pretty easy, but I had to figure out to insert that authorized user into Modx’s web context. And it was actually quite easy as well.
The user becomes a full blown member, and can be treated the same as any user that registered. (you can also treat them differently)
Read on to learn how two simple snippets allow Facebooks users to add themselves to your site in the provided member groups.
The extra also creates a full user profile in modx based on Facebook‘s info, complete with:
I recently implemented JQuery’s Tabs feature into a site I am building for a client. My first though was “wow, that was easy.” And then the usability issues starting making themselves apparent.
I like stateless web. Everything is linkable and bookmarkable, and once you have something the way you want, you should be able to share it with nothing more then the unique and repeatable url.
WHat do I mean by usability issues, let me explain with a few scenarios.
Problem 1: Switching tabs is not reflected by the URL, making the page stateful
Ugh, we hate stateful web sites!
- Your visitor lands on PageA that has 3 tabs: Main content, Dynamic Map, and User comments.
- To see the maps, user clicks on “Tab2″. (URL remains unchanged)
- User wants to share map, and sends link to a friend, but all they see is the welcome content – OOps!
In this case user A would need to supply User B with a link, and instructions to get to the right tab. This violates the principle that the web should be stateless, and repeatable. If content changes, the URL should too.
Problem 2: Elements inside hidden tabs are not reachable by URL alone
- User A is reading the comments tab “Tab3″ and decides she wants to add her own.
- After supplying her info, and the CAPTCHA she submits the form
- Let’s suppose the user forgot to add her actual comment, and the form tries to re-render with the validation message – OOps!
Here User A expected to see the comment form again, and instead sees the page re-rendered, but Tab1, the default tab, is shown. She has no awareness that the form (on Tab3) failed, and assumes her comment was submitted.
But what if she had successfully submitted her comment? The same problem will crop up when the comment widget tries to redirect our user to her submitted comment (mysite.com/pageA#YourNewComment) Because the ID “YourNewComment” is part of the hidden content of Tab3, the page will just load Tab1, and leave our user curious.
Fortunately it only takes a few lines of clever jQuery code to solve these usability issues.
- If the current tab changes, we update the URL with the correct anchor (mysite.com/PageA#Tab2)
- If a URL contains the anchor of a tab, we make that tab active
- <The icing> If the URL contains an anchor for an element that resides inside a tab, we make the parent tab active and scroll to the specified element
I need to thank Mark Yoon for numbers 1&2 that are based on a comment he left somewhere (i;ve been googling this issue alot!)
Number 3 was my own addition, and the most critical to me, because it allows existing widgets to work inside the tabs, and makes the tabs transparent from a URLs perspective.
I was only 6 when Linus shared his first offering to the world, but I do remember the linux superbowl ad by IBM.
Somewhere between CMS and Scaffolding Framework
MODx is a PHP based, mm.. tool, for publishing websites. I don’t want to call it a CMS, though If you read MODx documentation, they’ll call it a Content Management System. But in my experience products labeled CMS tend to be inflexible tools that require lots of effort to place widgets on custom templates. I remember using one tool in which you could not have a publicly accessible page not belong to a menu. We ended up building a hidden menu for all such pages – absurd!
At the other end of the spectrum are highly flexible frameworks. These are much more flexible, and let you run wild, but leave a good chunk of work to setup decent content management, authorization, etc. before you even get to the site at hand.
Well MODx sit nicely between a CMS and a framework in my opinion. You get user management, admin panel, powerful configuration, etc. But you are not forced into any mold. In face the default install (without sample content) is literally an empty page! Uncomfortable at first, but once you spend a few hours with it you begin to love the freedom. It is intended for sites that are heavy content focused, but provides full CRUD application abilities as well.
I am writing this as the release for Gingerbread (2.3) is being slowly released OTA, but the same steps apply regardless of the rom version you are eagerly awaiting.
This is safe and repeatable, and I have done it for 3 updates on 2 devices now, so I am very confident nothing will go wrong. Even so, I waive any responsibility if something goes wrong.
For the details and pictures, read below the fold.
It’s Here ! Google TV powered Revue from Logitech
I’ll admit before I go any further that I am a Google fan, and Android developer. When Google sent me the free Logitech Revue I was eager to dig in!
But honestly, I’ll do my best to stay neutral.
And before I go any further I want to make sure we’re all on the same page about what Google TV actually is or does.
- GoogleTV is not a subscription dependent content provider. (Rather Google TV aggregates existing sources of media into one source)
- You can use your existing TV (HD with HDMI inputs required).
- You should keep your current cable or satellite feed.
We didn’t have room on our pages for individual message boxes, and also had the need to style specific fields on our JSF pages whenever validation failed on the server, with user friendly field names in the message.
Example: ”User Name is Required” , and the field for User Name is highlighted red.
Unfortunately there are times when jsf insists on inserting field ids into the message.
1. Here’s the scenario;
- If any jsf converter validation fails (like a string in an int field) JSF will throw a warning like “jid17:jid34: Values must be type numeric” – The form id and page id prepend any internal messages – gross.
- If any page custom validation fails (like min and max lengths) JSF will throw our custom message
- If custom validators fail(like the format of a zip code based on the province as US or CA) throw a custom message
- If any DB rule issues fail (like name in use by other user) then our Manager throws a custom message (but it is not hooked to any component)
The troubles is that without overriding JSF components or classes we do not have access to the component when every message is thrown, and would be unable to change its style class.
Rather than relying on some tricky JSF or Java code to intercept and update classes I decided to take a simpler approach (or so I think). Using jQuery, the preprendId=”false” attribute, and specific Messages for every field we can do ANY custimaztion we want to ANY failed field, input, checkbox, etc on the page.