Adrian Holovaty on Mashups and Microformats

Share this article

At the Web Directions South conference, I sat down with Adrian Holovaty, the creator of chicagocrime.org, the very first Google Maps mashup, and co-creator of the Django framework. I was keen to get his unique perspective on the notion of privacy online, the potential for structured data on the Web, and, of course, his latest venture.

SitePoint: Let me start by quoting you. In your presentation, you said, “Structure is all around us; you don’t need to be a freak like me to find it.” Could you elaborate on that?

Basically I think that, as I said in my talk, we’re beginning to expect more browsability. We’re beginning to expect that, if you look at Random Fact X, which is in a sidebar on a given web page, you’ll be able to click that and find more value.

SP: You seem to record a lot of information about yourself — every flight you’ve taken, all the hotels you’ve stayed in. Should we be documenting our lives for the greater good, so that one day somebody can mash it up?

No, no, I definitely wouldn’t say that. I’m not suggesting that we should go about structuring information that we weren’t already collecting. But we should definitely be analysing the information that we are already collecting, and adding structure to that. Because if we’re not collecting information at this point, chances are it’s not being collected for a good reason. Like my hotel stays — there’s a good reason that people don’t collect this information, and that’s because it’s a waste of time.

But if your organisation publishes a newsletter, or your hospital publishes information, and you’re already publishing it, then you should find the structure in it, and encourage browsability.

SP: I would guess that there are 100 times more sets of data behind closed doors than are open. Do you think we’ll ever reach the point where those numbers are reversed, and there’s information that’s available to be played with and combined? Is the world opening up more?

Definitely. And the best way to realise the answer to that question is to look at Facebook and MySpace, and the younger generation, and see how open they are in sharing everything.

SP: So is privacy out the door? Does it exist anymore?

I don’t think it has completely left, but I think its definition has changed, and people’s comfort with their data — personal data that they give out — is going way up. They’re more comfortable with saying “I’m okay with these pictures of me, drunk, off my rocker, being seen by future employers.” And I think that, down the road, it’ll become a non-issue.

We’ll see that, maybe in 10 or 20 years, the person running for President of the United States might have had a Facebook account in the year 2007 with some incriminating photos, but I think that, as opposed to what we might see today, where you’d get criticised for that, in the future, everyone will say, you know, “I did that too.” It’s those very deep implications of having a permanent record of everything online.

SP: So, tell me a little bit about EveryBlock. Why do we need another news service?

I can’t talk much about it, because we haven’t launched yet, and we’re wanting to launch with a bang. But essentially we’re trying to solve a real problem, a problem that real people have, and that problem is that, with so much information out there, “How do I find the information that only applies to my very specific location?” Specifically, news, and information that is news.

I have a very liberal definition of news in this context — it’s not only the traditional types of things that you might find in a newspaper, but also stuff that’s new. For instance, Flickr photos: if someone posted a photo in your neighbourhood, you’d probably want to see it, because you live around the area and you’re curious. So we aim to answer the question: “How can I easily find out what’s happening around me?” Both what is happening, and what has happened.

SP: Coming from the journalism industry, how do you find working in a small startup?

Oh, man! It is unbelievably fun, and I’m having a blast. There are four of us: we sleep in, we work hard, it’s a ton of fun.

SP: Let’s talk about Django a little bit. Who is the framework targeted at? Do I need to know much Python to use it?

Well, Django’s a framework for rapid web app development. You do need to know Python in order to use it. I guess you could use Django never having used Python … but you’ll have to learn it as you learn Django. It’s just like Ruby on Rails: you really do have to learn Ruby in order to use it. It’s a tool for that language.

SP: You mentioned in your bio that you enjoy reverse engineering things.
What’s next? Are you going to pick your iPhone apart?

I guess I’m motivated by identifying things that people haven’t done yet, and doing those. If things are easy, or if other people have done them, it’s not as interesting to me. In terms of what’s next, I love identifying information that’s out there and is very hard to use — poorly navigable web sites, often government web sites — and then making that open, just like on chicagocrime.org, and some of the stuff that I did on washingtonpost.com. So I love opening the data like that.

I also love reverse engineering on a technical level. Like when Google Maps came out, I was in the group of people that was hacking that, and figured out how to put maps on other pages before the API came out, so … I guess it’s a little naughty, but what the heck?

SP: Is that part of the allure?

Yeah, I have to say it is.

SP: Your first mashup, chicagocrime.org, mapped the crimes that were occurring in Chicago. Then in your presentation you mentioned some stuff you were doing with data about soldier fatalities in Iraq … the data you’re mashing up seems to be getting more and more violent. Do you seek out violent data on purpose?

Ha ha! No, no. That’s purely coincidental — I’m not a violent person, or someone who likes violence in movies or anything. That’s just coincidental.

SP: The concept of “structured blogging” was popular a while back. Where do microformats, structured blogging and other structured data fit in?

There’s all sorts of great structure with blogs that people don’t take advantage of, like where you’re posting from. But it depends on the blog. For example, three or four years ago on my own blog I did site reviews of newspaper web sites, where I sort of bashed what they were doing poorly in terms of accessibility and usability and how their markup was really bad.

So a couple of times a week I would post an entry about a particular news web site from across the world — and it would always have the same
structure: it would always be about a particular site, the rating, what they did good, what they did poorly … And I think that bloggers tend to have those little recurring features, and the problem with adding structure to blogs is that it’s just a big box — with any of the blogging software out there, you have a headline, and then a big blob, and that’s where you put your entry.

I’d like to see more people take advantage of adding more meta-data, rather than there just being a big blob. It’s great that the tools have come to a point where people can easily post to blogs, like Blogspot (Blogger), and anyone can post without having to know code or have FTP access or whatever. That’s one step, but we need to go to the next step and have more content-specific publishing systems.

SP: Do you think that it’s the role of HTML to evolve so that it contains more tags and expresses more semantic meaning?

Hmm, no, I think that the structure needs to exist at a lower level.
It needs to be in a database or some custom XML language, and then HTML can be used as the delivery mechanism. But I do like microformats a lot … then again I do have my reservations about microformats.

SP: What are they?

Well, take a look at a format that’s used all over the Web, like hReview or hCalendar. If you want to do something in aggregate, with all of that data, you essentially have to re-implement Googlebot in order to do that. If you want to say “Oh, I’m going to make the definitive site for events, and I’m going to do that by scraping people’s event microformat data”, you have to manually go out to all these places and scrape it yourself. So while it’s cool that it’s decentralised, it’s also prohibitive to people who want to do stuff with it.

On the other hand, if you have an isolated domain, like you just wanted to scrape upcoming.org or one particular site, obviously that’s a lot easier. But if you want to do stuff on a large level, you essentially have to be Technorati or Google.

SP: Thanks very much for your time, I appreciate it. Enjoy the rest of your time in Australia!

Sure, thanks Matthew!

Matthew MagainMatthew Magain
View Author

Matthew Magain is a UX designer with over 15 years of experience creating exceptional digital experiences for companies such as IBM, Australia Post, and sitepoint.com. He is currently the Chief Doodler at Sketch Group, Co-founder of UX Mastery, and recently co-authored Everyday UX, an inspiring collection of interviews with some of the best UX Designers in the world. Matthew is also the creator of Charlie Weatherburn and the Flying Machine.

Share this article
Read Next
How to Deploy Apache Airflow on Vultr Using Anaconda
How to Deploy Apache Airflow on Vultr Using Anaconda
Vultr
Cloud Native: How Ampere Is Improving Nightly Arm64 Builds
Cloud Native: How Ampere Is Improving Nightly Arm64 Builds
Dave NearyAaron Williams
How to Create Content in WordPress with AI
How to Create Content in WordPress with AI
Çağdaş Dağ
A Beginner’s Guide to Setting Up a Project in Laravel
A Beginner’s Guide to Setting Up a Project in Laravel
Claudio Ribeiro
Enhancing DevSecOps Workflows with Generative AI: A Comprehensive Guide
Enhancing DevSecOps Workflows with Generative AI: A Comprehensive Guide
Gitlab
Creating Fluid Typography with the CSS clamp() Function
Creating Fluid Typography with the CSS clamp() Function
Daine Mawer
Comparing Full Stack and Headless CMS Platforms
Comparing Full Stack and Headless CMS Platforms
Vultr
7 Easy Ways to Make a Magento 2 Website Faster
7 Easy Ways to Make a Magento 2 Website Faster
Konstantin Gerasimov
Powerful React Form Builders to Consider in 2024
Powerful React Form Builders to Consider in 2024
Femi Akinyemi
Quick Tip: How to Animate Text Gradients and Patterns in CSS
Quick Tip: How to Animate Text Gradients and Patterns in CSS
Ralph Mason
Sending Email Using Node.js
Sending Email Using Node.js
Craig Buckler
Creating a Navbar in React
Creating a Navbar in React
Vidura Senevirathne
A Complete Guide to CSS Logical Properties, with Cheat Sheet
A Complete Guide to CSS Logical Properties, with Cheat Sheet
Ralph Mason
Using JSON Web Tokens with Node.js
Using JSON Web Tokens with Node.js
Lakindu Hewawasam
How to Build a Simple Web Server with Node.js
How to Build a Simple Web Server with Node.js
Chameera Dulanga
Building a Digital Fortress: How to Strengthen DNS Against DDoS Attacks?
Building a Digital Fortress: How to Strengthen DNS Against DDoS Attacks?
Beloslava Petrova
Crafting Interactive Scatter Plots with Plotly
Crafting Interactive Scatter Plots with Plotly
Binara Prabhanga
GenAI: How to Reduce Cost with Prompt Compression Techniques
GenAI: How to Reduce Cost with Prompt Compression Techniques
Suvoraj Biswas
How to Use jQuery’s ajax() Function for Asynchronous HTTP Requests
How to Use jQuery’s ajax() Function for Asynchronous HTTP Requests
Aurelio De RosaMaria Antonietta Perna
Quick Tip: How to Align Column Rows with CSS Subgrid
Quick Tip: How to Align Column Rows with CSS Subgrid
Ralph Mason
15 Top Web Design Tools & Resources To Try in 2024
15 Top Web Design Tools & Resources To Try in 2024
SitePoint Sponsors
7 Simple Rules for Better Data Visualization
7 Simple Rules for Better Data Visualization
Mariia Merkulova
Cloudways Autonomous: Fully-Managed Scalable WordPress Hosting
Cloudways Autonomous: Fully-Managed Scalable WordPress Hosting
SitePoint Team
Best Programming Language for AI
Best Programming Language for AI
Lucero del Alba
Quick Tip: How to Add Gradient Effects and Patterns to Text
Quick Tip: How to Add Gradient Effects and Patterns to Text
Ralph Mason
Logging Made Easy: A Beginner’s Guide to Winston in Node.js
Logging Made Easy: A Beginner’s Guide to Winston in Node.js
Vultr
How to Optimize Website Content for Featured Snippets
How to Optimize Website Content for Featured Snippets
Dipen Visavadiya
Psychology and UX: Decoding the Science Behind User Clicks
Psychology and UX: Decoding the Science Behind User Clicks
Tanya Kumari
Build a Full-stack App with Node.js and htmx
Build a Full-stack App with Node.js and htmx
James Hibbard
Digital Transformation with AI: The Benefits and Challenges
Digital Transformation with AI: The Benefits and Challenges
Priyanka Prajapat
Quick Tip: Creating a Date Picker in React
Quick Tip: Creating a Date Picker in React
Dianne Pena
How to Create Interactive Animations Using React Spring
How to Create Interactive Animations Using React Spring
Yemi Ojedapo
10 Reasons to Love Google Docs
10 Reasons to Love Google Docs
Joshua KrausZain Zaidi
How to Use Magento 2 for International Ecommerce Success
How to Use Magento 2 for International Ecommerce Success
Mitul Patel
5 Exciting New JavaScript Features in 2024
5 Exciting New JavaScript Features in 2024
Olivia GibsonDarren Jones
Tools and Strategies for Efficient Web Project Management
Tools and Strategies for Efficient Web Project Management
Juliet Ofoegbu
Choosing the Best WordPress CRM Plugin for Your Business
Choosing the Best WordPress CRM Plugin for Your Business
Neve Wilkinson
ChatGPT Plugins for Marketing Success
ChatGPT Plugins for Marketing Success
Neil Jordan
Managing Static Files in Django: A Comprehensive Guide
Managing Static Files in Django: A Comprehensive Guide
Kabaki Antony
The Ultimate Guide to Choosing the Best React Website Builder
The Ultimate Guide to Choosing the Best React Website Builder
Dianne Pena
Exploring the Creative Power of CSS Filters and Blending
Exploring the Creative Power of CSS Filters and Blending
Joan Ayebola
How to Use WebSockets in Node.js to Create Real-time Apps
How to Use WebSockets in Node.js to Create Real-time Apps
Craig Buckler
Best Node.js Framework Choices for Modern App Development
Best Node.js Framework Choices for Modern App Development
Dianne Pena
SaaS Boilerplates: What They Are, And 10 of the Best
SaaS Boilerplates: What They Are, And 10 of the Best
Zain Zaidi
Understanding Cookies and Sessions in React
Understanding Cookies and Sessions in React
Blessing Ene Anyebe
Enhanced Internationalization (i18n) in Next.js 14
Enhanced Internationalization (i18n) in Next.js 14
Emmanuel Onyeyaforo
Essential React Native Performance Tips and Tricks
Essential React Native Performance Tips and Tricks
Shaik Mukthahar
How to Use Server-sent Events in Node.js
How to Use Server-sent Events in Node.js
Craig Buckler
Five Simple Ways to Boost a WooCommerce Site’s Performance
Five Simple Ways to Boost a WooCommerce Site’s Performance
Palash Ghosh
Elevate Your Online Store with Top WooCommerce Plugins
Elevate Your Online Store with Top WooCommerce Plugins
Dianne Pena
Unleash Your Website’s Potential: Top 5 SEO Tools of 2024
Unleash Your Website’s Potential: Top 5 SEO Tools of 2024
Dianne Pena
How to Build a Chat Interface using Gradio & Vultr Cloud GPU
How to Build a Chat Interface using Gradio & Vultr Cloud GPU
Vultr
Enhance Your React Apps with ShadCn Utilities and Components
Enhance Your React Apps with ShadCn Utilities and Components
David Jaja
10 Best Create React App Alternatives for Different Use Cases
10 Best Create React App Alternatives for Different Use Cases
Zain Zaidi
Control Lazy Load, Infinite Scroll and Animations in React
Control Lazy Load, Infinite Scroll and Animations in React
Blessing Ene Anyebe
Building a Research Assistant Tool with AI and JavaScript
Building a Research Assistant Tool with AI and JavaScript
Mahmud Adeleye
Understanding React useEffect
Understanding React useEffect
Dianne Pena
Web Design Trends to Watch in 2024
Web Design Trends to Watch in 2024
Juliet Ofoegbu
Building a 3D Card Flip Animation with CSS Houdini
Building a 3D Card Flip Animation with CSS Houdini
Fred Zugs
How to Use ChatGPT in an Unavailable Country
How to Use ChatGPT in an Unavailable Country
Dianne Pena
An Introduction to Node.js Multithreading
An Introduction to Node.js Multithreading
Craig Buckler
How to Boost WordPress Security and Protect Your SEO Ranking
How to Boost WordPress Security and Protect Your SEO Ranking
Jaya Iyer
Understanding How ChatGPT Maintains Context
Understanding How ChatGPT Maintains Context
Dianne Pena
Building Interactive Data Visualizations with D3.js and React
Building Interactive Data Visualizations with D3.js and React
Oluwabusayo Jacobs
JavaScript vs Python: Which One Should You Learn First?
JavaScript vs Python: Which One Should You Learn First?
Olivia GibsonDarren Jones
13 Best Books, Courses and Communities for Learning React
13 Best Books, Courses and Communities for Learning React
Zain Zaidi
5 jQuery.each() Function Examples
5 jQuery.each() Function Examples
Florian RapplJames Hibbard
Implementing User Authentication in React Apps with Appwrite
Implementing User Authentication in React Apps with Appwrite
Yemi Ojedapo
AI-Powered Search Engine With Milvus Vector Database on Vultr
AI-Powered Search Engine With Milvus Vector Database on Vultr
Vultr
Understanding Signals in Django
Understanding Signals in Django
Kabaki Antony
Why React Icons May Be the Only Icon Library You Need
Why React Icons May Be the Only Icon Library You Need
Zain Zaidi
View Transitions in Astro
View Transitions in Astro
Tamas Piros
Getting Started with Content Collections in Astro
Getting Started with Content Collections in Astro
Tamas Piros
What Does the Java Virtual Machine Do All Day?
What Does the Java Virtual Machine Do All Day?
Peter Kessler
Become a Freelance Web Developer on Fiverr: Ultimate Guide
Become a Freelance Web Developer on Fiverr: Ultimate Guide
Mayank Singh
Layouts in Astro
Layouts in Astro
Tamas Piros
.NET 8: Blazor Render Modes Explained
.NET 8: Blazor Render Modes Explained
Peter De Tender
Mastering Node CSV
Mastering Node CSV
Dianne Pena
A Beginner’s Guide to SvelteKit
A Beginner’s Guide to SvelteKit
Erik KückelheimSimon Holthausen
Brighten Up Your Astro Site with KwesForms and Rive
Brighten Up Your Astro Site with KwesForms and Rive
Paul Scanlon
Which Programming Language Should I Learn First in 2024?
Which Programming Language Should I Learn First in 2024?
Joel Falconer
Managing PHP Versions with Laravel Herd
Managing PHP Versions with Laravel Herd
Dianne Pena
Accelerating the Cloud: The Final Steps
Accelerating the Cloud: The Final Steps
Dave Neary
An Alphebetized List of MIME Types
An Alphebetized List of MIME Types
Dianne Pena
The Best PHP Frameworks for 2024
The Best PHP Frameworks for 2024
Claudio Ribeiro
11 Best WordPress Themes for Developers & Designers in 2024
11 Best WordPress Themes for Developers & Designers in 2024
SitePoint Sponsors
Top 10 Best WordPress AI Plugins of 2024
Top 10 Best WordPress AI Plugins of 2024
Dianne Pena
20+ Tools for Node.js Development in 2024
20+ Tools for Node.js Development in 2024
Dianne Pena
The Best Figma Plugins to Enhance Your Design Workflow in 2024
The Best Figma Plugins to Enhance Your Design Workflow in 2024
Dianne Pena
Harnessing the Power of Zenserp for Advanced Search Engine Parsing
Harnessing the Power of Zenserp for Advanced Search Engine Parsing
Christopher Collins
Build Your Own AI Tools in Python Using the OpenAI API
Build Your Own AI Tools in Python Using the OpenAI API
Zain Zaidi
The Best React Chart Libraries for Data Visualization in 2024
The Best React Chart Libraries for Data Visualization in 2024
Dianne Pena
7 Free AI Logo Generators to Get Started
7 Free AI Logo Generators to Get Started
Zain Zaidi
Turn Your Vue App into an Offline-ready Progressive Web App
Turn Your Vue App into an Offline-ready Progressive Web App
Imran Alam
Clean Architecture: Theming with Tailwind and CSS Variables
Clean Architecture: Theming with Tailwind and CSS Variables
Emmanuel Onyeyaforo
How to Analyze Large Text Datasets with LangChain and Python
How to Analyze Large Text Datasets with LangChain and Python
Matt Nikonorov
6 Techniques for Conditional Rendering in React, with Examples
6 Techniques for Conditional Rendering in React, with Examples
Yemi Ojedapo
Introducing STRICH: Barcode Scanning for Web Apps
Introducing STRICH: Barcode Scanning for Web Apps
Alex Suzuki
Using Nodemon and Watch in Node.js for Live Restarts
Using Nodemon and Watch in Node.js for Live Restarts
Craig Buckler
Task Automation and Debugging with AI-Powered Tools
Task Automation and Debugging with AI-Powered Tools
Timi Omoyeni
Get the freshest news and resources for developers, designers and digital creators in your inbox each week