So I recently wrote a response of our findings with Parse over at YCombinator News. Here it is, since it might be handy and will rapidly cease being available as the thread drops off. So here it is: Read the rest of this entry »
Archive for category Web 2.x
Mirror (Working Title)
Sep 21
Crowd-sourced online media responsibility, whether they like it or not
This is the project write-up for a little something I’m working on. I’d like to hear your feedback.
Executive Summary
There exists online many sources of information. Modern search engines do little to actually validate the information, they merely rank on the popularity of the information. This has given rise to a large number of articles consisting of nothing more than repetition and guesses.
Mirror gives users a way to quantify individual stories for their originality, accuracy, and value. When a user visits an article that others have rated, that rating shows up on the article, prominently displaying things like “Reprinted from elsewhere”, “Copy + Pasted Press Release”, or “Author Doesn’t Understand Subject”. This immediately alerts readers to the nature of the article, and they can then elect to continue reading, or go elsewhere.
Mirror runs as a browser plugin, laying a ranking on top of the page, and offering the user a chance to contribute. A “bookmarklet” function will also exist.
Mirror ranks users and weighs their opinion accordingly. Users who often agree with the general community consensus are rated higher, and their rankings count for more.
Hello one and all. Today’s bit of code: an updated and enhanced version of the popular JavaScript library TableKit, created by Andrew Tetlaw at Millstream. TableKit gives you the ability to turn any HTML table into a dynamic object, capable of being intelligently sorted by any column, resizable columns, and even in-place editing, by simply adding “sortable”, “resizable”, and “editable” to the table’s class tag.
I won’t go into extensive detail on why this is awesome. Here’s a little demo to play with though, to get the point. Click on column headers (in-line editing is not included for this, but you can find more about that at the link above):
| First Name | Last Name | Age | Teacher |
|---|---|---|---|
| Bill | Smith | 12 | Thompson |
| Joe | Cool | 11 | Wright |
| Amy | Rogers | 12 | Wright |
| Susan | Thompson | 13 | Greggs |
After including prototype.js and tablekit.js, all I had to do was define the table like this:
<table class="sortable resizable" width="500">
At this point, the table should be sortable, and you should be able to resize the columns by dragging the barrier between the column headers. You’ll notice alternating row colors remain alternating. All the formatting (including sort color, the up/down arrows, alternating rows) are all defined as CSS properties, so you can modify them easily. We’ll get to the CSS later on.
While that’s cool (and it IS damn cool, admit it), it isn’t why I’m bothering to stay up late and write a post. I extended this library to give it a new property – “linkable”. It combines the “ConvertTableRowtoHyperlink” (CTRtH) script published a few years back and rolls it into the function of TableKit. The script will also scan all rows of a given table for the first link it comes across. It then creates a function which highlights the row on mouseOver, returns to previous state on mouseOut (preserving the pretty alternating colors created by TableKit). Clicking anywhere on the row will take you to the link. If it finds more than one link, it takes the one furthest to the left. Personally, I think lots of links in a single table isn’t the best plan, but if you want it to give up on rows with more than one link rather than picking the furthest left, there’s instructions on line 90 of the script on how to do this.
Added benefit! In the old CTRtH, you had to explicitly give the ID of each table, invoke separately, and ask the script to do the row conversion. This broke with a number of things, including AJAX updates (ended up including the JS in a partial on one project). Mostly though, it meant I couldn’t have a nice, clean table with TableKit and CTRtH running in tandem. So, I spent a flight from DC to Denver figuring out what was conflicting where, and getting the two to play nicely. Now you have an extended TableKit, which will also happily convert table rows to links when given the property “linkable”, like this:
<table class="sortable resizable linkable" width="600">
| First Name | Last Name | Age | Search Engine |
|---|---|---|---|
| Bill | Smith | 12 | |
| Joe | Cool | 11 | Yahoo |
| Amy | Rogers | 12 | Bing |
| Susan | Thompson | 13 |
Usage
Alright, down to business.
1) Download prototype.js and my new tablekit.js file. Include these in your header, ideally.
2) Make sure you add sortable, resizable, or linkable to the CSS class of any table you want to behave this way. You can give it an ID, but you don’t have to. However, like with many JS functions, if you have multiple elements with the same ID, you’ll only affect the first one. If you don’t give it an ID, one will be assigned in sequential order.
3) Here’s what you’ll need to add to your CSS to make it look like mine and behave as you’d expect. You’ll almost certainly want to change the colors, but other than that you should be good, I’ve tried to keep the CSS as minimal as possible so as not to interfere with your other stuff.. Notice the up and down arrows are also just background elements, so point them at your own up.png/down.png location.
/**********Table Sorting Stuff****************/
tr.rowodd {
}
tr.roweven {
background-color: #F2F2F2;
}
tr.highlight {
background-color: #F2F29F;
cursor: pointer;
}
tr a{
text-decoration: none;
}
.sortcol {
cursor: pointer;
padding-right: 20px;
background-repeat: no-repeat;
background-position: right center;
}
.sortasc {
background-color: #DDFFAC;
background-image: url(images/up.png);
}
.sortdesc {
background-color: #B9DDFF;
background-image: url(images/down.png);
}
.nosort {
cursor: default;
}
th.resize-handle-active {
cursor: e-resize;
}
div.resize-handle {
cursor: e-resize;
width: 2px;
border-right: 1px dashed #1E90FF;
position:absolute;
top:0;
left:0;
}
/********* END Table Sorting Stuff *********/
There have been quite a number of complaints over the last few weeks that Youtube isn’t paying artists enough for showing their content. The argument from the music industry is that Youtube owes much of its success to the music industry. This seems like a far-fetched idea at best, but it is something that Google/Youtube have tacitly admitted in agreeing to pay ANYTHING for allowing music videos to be put on Youtube.
What’s the purpose of a music video? Is it to be an artistic expression in-and-of itself? I can’t honestly think that it is. No, a music video (much like a radio spot) is an advertisement – for the band, the song, and the album. It is quite frankly absurd to me that artists believe that they should be paid – beyond the amount they already get through the ads they place on their own pages – because Google is providing them a platform to transmit their commercials to millions of people around the world – FREE.
So when the Performance Rights Society (PRS – UK’s RIAA) could not reach an agreement, Youtube pulled all the music videos down in the UK, signaling that, in fact, it doesn’t need them nearly as much as they need Youtube. The best part? Numerous artists, even ones who had been complaining about how Google was “stealing their money” and “not paying for music” suddenly found that their own, personal websites didn’t work. The videos on their own sites had been embedded versions of Youtube videos. That’s right, in addition to providing free advertising and free distribution, they were also shouldering the largest, most expensive part of a band’s website – the streaming media content – FREE. The cost to artists to host and stream their own videos, thousands or millions of times, would be far higher than anything they could hope to re-coupe from licensing fees.
It appears that the PRS is doing everything it can to actively torpedo its artists’ futures online. Their actions have already driven Myspace Music and Pandora to simply cut off UK service. Does it appear to be hurting either of them? Not in the slightest. You know who it is hurting though? I made a list:
- The Fans
- No longer able to find their favorite band’s music online
- Can’t introduce friends to the music in an engaging way
- The Musicians
- Less exposure means fewer ticket sales
- Fewer new fans because of lack of sharing
- Music Video Makers
- If a music video can ONLY be played on MTV, it has less value
- Less value means people pay less to make music videos
- Fewer bands (especially UK bands) will even bother making music videos
I hope this is helpful to the people at the PRS, and that they carefully consider who they are ultimately trying to serve. Clearly, artists and fans are both hurt by their actions, and value is generated for no one. It is yet another example of an outdated, monolithic group trying desperately to stay relevant.
So here’s my proposal: If artists want Google to pay them for every view, they can pay Google for every single embedded version of the video. Every time someone embeds it anywhere and Google isn’t getting any advertising revenue, the band can go ahead and get billed for that bandwidth. Then, at the end of the month, they can get together and see which bill is bigger – bandwidth or licensing.
Here’s a Radiohead (one of the bands that complained) video. Just for you to enjoy on Radiohead’s theoretical dime.
Rise of the Home Server
Feb 24
So there’s this interesting pattern I’ve observed in the distribution of technology – things generally trickle down to consumers. What used to be expensive and elite will, over time, become inexpensive and commonplace. Cellphones, computers, digital sound systems, etc. I know that’s not much of a surprise to most of you, so here’s what I think is going to happen.
Media storage is getting cheaper and easier all the time: the rise of the home server. Over the next few years (certainly by the end of 2020) most homes will have some kind of centralized storage. Just like 10 years ago people didn’t have routers and switches in their homes, now almost everyone does. With a home network comes multiple comptuers. Multiple computers leads to all kinds of problems – syncing files between machines, duplication of data, ease of access, usage location, etc. All of this adds up to a solution early adopters are starting to notice. Why put music on every computer when you could just store it on some low-powered, high-storage computer? Why set up complex mechanisms for downloading, transferring, and storing content on a laptop when you could just as easily store it on some server you own?
The obvious solution is to store it on a remote server someplace, up in the “cloud” for easy access anytime. The problem is that people don’t trust the cloud yet – data gets lost, privacy and security aren’t well explained, and retreival times are limited. Sure, you’ll keep things you explicitly want to share with others, but not most things. You’ll never keep your collection of tax records, illegal mp3s, adult entertainment and pirated movies up on a server someplace. No, you want it in a little box, tucked away in your house.
Ideally, it’ll be the size and shape of a router. It’ll plug in and have a bunch of storage for local use, and you’ll be able to expand it anytime. Why not?
Routers with extensible RAID file systems: the next big thing in home networks.
I have a less-than-simple financial package. At the moment of this writing, I have two checking and savings accounts with two banks (in mid-transition). I have three credit cards for various rewards programs, a mortgage and an equity line. And a paypal account.
With all this in tow, it is extremely difficult to get a unified vision of what exactly I’m spending my money on, and how to build towards a specific target (say, paying off my equity line by 2013).
Enter mint.com – a powerful online financial tool that integrates with banks, credit cards, even investment accounts, and puts it all in one place. It is read-only, so you can’t truly manage your accounts from it, but that’s just fine by me. I like being able to see all my accounts in one place. I like having a master ledger that spans 5 systems. It is bad ass. I like seeing where my expenses go. I like setting a budget and getting a text message when it is coming up. I like getting an email saying “Your credit card bill is due in 5 days” since the credit card company doesn’t seem to want to send those emails.
One feature I’m sure will improve over time, but that I don’t get a lot of use out of now, is the “savings” section. Since this is their main (probably only) source of revenue, I imagine as the service gains popularity there will many more useful “ways to save”. Right now, I get told that if I switched my United Visa card to a no-rewards Discover I could save $600 on interest, except that I don’t ever carry a balance or pay interest. I want something to look at my mortgage, value of my house, and assorted investments, and say “yakno, you could save some cash if you consolidated your line of equity with a 5yr fixed, low-APR loan from these guys”. That’s something I could get behind.
In the mean time, it is still extremely useful. Seeing how I spend my money is very handy. Everything being in one place is awesome. And oh yeah, did I mention? It’s FREE.
Check it out. They probably have your bank in their system, so it is really easy.
I am a big fan of Amazon. Be it free two-day shipping, solving my girlfriend’s shoe shopping needs, or selling DRM-free music cheaper than iTunes’ locked-down stuff.
About a week ago, I was discussing with my roommates one of the things I really enjoy with Amazon – wish lists. I realize I am notoriously hard to shop for, and so having a place where I can list things I like as I come across them, as well as little descriptions like “any olive oil sprayer will do” is fantastic. I can share the list with friends and family, and remove things as I receive them or buy them for myself. It also helps give people an idea of price, since on many things where you get it can be a huge difference. I mentioned recently how cool it would be to be able to add products from anywhere to my Amazon wish list.
Well, welcome to the future people. Amazon recently launched just such a feature: universal wishlists. I recall seeing sites that did ONLY this in the past. With Christmas coming fast upon us, the ability to send family to a single, non-threatening location like Amazon and say “Here’s some ideas” is great. Also, since I’m a little distance from my family these days (between 500 and 10,000 miles away) they don’t really know what I’ve got, and this helps with the awkward “this is wonderful, but I already have it” problem.
Anyhow, the thing is stupid-easy. It isn’t even a browser plugin, just a bookmark. You add a shortcut up along the top of your browser and whenever you’re on a site, just click “Add to wishlist”. Stores price, image, description, and some notes. Fan-freakin-tastic.
Here, check it out:
http://www.amazon.com/gp/wishlist/get-button/ref=cm_wl_uwl
That’s all for now.