1. How to replace the default Rails 404 page

    If you Google “The page you were looking for doesn’t exist Rails Heroku” you’ll find the StackOverflow questions from beginning developers who expect this message has something to do with the problem they’re facing. What they don’t know is that this is just the default 404 page in Rails, which they wouldn’t have encountered until deploying to Heroku (when your app runs locally, it gives you an actual error message).

    image

    I was convinced that the text and design on this page was due to Heroku and searched all over the site trying to find out how to change it to something more user-friendly. Eventually, I realized that both the HTML and CSS was literally a file in my app’s ‘public’ folder.

    If you want your error pages to look at home on your website, all you have to do is change the code in these three files — 404.html, 422.html and 500.html.

    I opted for a pun relevant to my users, who are book readers. “We seem to have lost our page. Can we start from the beginning?” along with an image of book shelves I found on Imgur.

    image

    What’s on your 404 page?

    Tags: 404 / heroku / rails / programming / learn programming / app /

     


  2. The Making of Coverlist: Part 3

    I’ve been thinking about these posts (read the first two here) and how to make them more useful for others and less of myself rambling. So, I’m going to include more links and lists. 

    That said, I’m at my parents’ house in southern California enjoying an endless supply of perfectly brewed coffee and helping them clean out the fudge supply. Love the holidays!

    Goals For Last Week:

    I wanted to stop coding and start working on user acquisition. But, my imagination got away with me and I solved a few more problems instead. 

    I wanted to track down names and contact info of people in the publishing industry to do Q&As for the coverlist blog and pull together resources for my planned Pinterest programming — both of which I still need to do. 

    What I Accomplished:

    I asked my first-ever question on Stack Overflow — two people answered and a combination of their responses worked!

    Afterward, I came to another epiphany — I didn’t need to create a new controller for each of the voting actions — I could have the top action add 3 points, the second add one point and the third add zero. That way I don’t have to worry about negatives. 

    Now, if I were to A/B test a book cover, I’d be able to keep score. Score :)

    Goals For This Week:

    - Test Assumptions: I’ve had a few new ideas. What if the site behaved like Medium rather than Pinterest — users collaborate to create Collections rather than making their own shelf? I might run a survey with a Facebook ad (targeting book clubs) to gauge interest.

    - Experiment: If I were to A/B test book covers perhaps I can clone Coverlist to a separate Heroku app at party.coverlist.com, where I would stage books (25?) according to a theme. 

    - Fix Olark

    - Put books in order of score, not id

    One Thing I Learned:

    I had the opportunity to show Coverlist to a few relatives over the holiday. I’m lucky in that several people in my family are longtime employees of their local library, and also in book clubs — so I was able to get another perspective. 

    People complain that they prefer physical books because of book ownership — if they bought the book they want to be able to resell, lend or see on a shelf. I think identity and ownership are two separate things. If you check out a book from the library, you don’t get to keep it on a shelf — but you’ve still read it and identify with it. 

    Coverlist can own identity. 

    Maybe I don’t care if I direct people to Amazon or iBooks to buy a book and whether they keep the book forever or it’s lost with a device. If they’ve read it, it is part of them and is on their Coverlist. 

    Perhaps someday Coverlist will create an interactive map of the world with all the libraries plotted out with tips on selection and best times to go and more. Maybe we’ll make an app for finding local bookshops. 

    If someone finds a book to read on Coverlist, perhaps we don’t need affiliate income every single time they decide to buy — there could be a business in not caring how people acquire and read books, just celebrating them.

    Tags: eboos / publishing / digital / app /

     


  3. Letter To My 15-Year-Old Self

    My submission for this month’s Carnival of Journalism

    Dear Self of 15 Years Age,

    I want to start by saying we are not the same person, you and I. You dream about me all the time. You imagine I’ve “made it” somehow, whether it means being rich enough to finally shop at Anthropologie (or better, have married the rich husband), or, empathetic enough to finally move to Africa and spend the rest of your (our) days working at an orphanage. We’d be happy either way. 

    Anyway, people will keep telling you to slow down, to enjoy where you’re at now. Don’t slow down. We’re having so much fun. 

    When you get to 20 you’ll be shocked at how much you’ve accomplished — you’ll mention that you were once shy and someone will actually not have noticed. When you’re 25 you’ll have a master’s degree and your dream job which are both goals you’ve had but you won’t have expected them to come so soon and within a year of each other. 

    But of course, you can’t revel in those moments for too long because even jobs can be fleeting. 

    There will be times when you regret just about everything — leaving San Diego, coming back to San Diego, coming to NYC, not moving there sooner, and not being more _____. “Why can’t you be more _____,” you’ll say to yourself, “it’s what those other people are doing and they’re perfectly happy. When you start to feel that way, all it means is that you should spend the evening with a glass of wine and a novel rather than Facebook (by the way, you like wine). 

    Sometimes when life seems monotonous or you wonder if you’ll just always live with roommates and never have enough space — you’ll tell yourself, “Someday you’ll look back on this as the happiest time in your life.” You’ll make this true, just by acknowledging it, and it’s especially true of that year you lived by the beach, worked at a coffee shop and taught yoga.

    I’m excited for you (me). Because the next five years are absolutely going to be the best. There’s so much that you want to do, now, at age 15, that hasn’t been done yet. But with every new challenge, new city, new job, you’ll shed a layer like a butterfly and become a better version of yourself — and that’s why you wouldn’t recognize me on the street. I’m sorry to say I’m not like you at all. But it’s OK to outgrow your surroundings. As Steven Pressfield says, new friends will present themselves.

    One last spoiler: You haven’t written a book yet.

    - Danielle of 28 Years Age

    Tags: journalism / blog / memoir /

     


  4. The Making of Coverlist: Part 2

    What if you had to design a logo before you could do any other work on a project? It’s funny, because I messed around in Photoshop for a day, and created something that I actually really liked. I kept it on the site for a while. But once I added a huge beautiful background image to the home page, that logo couldn’t stay. It was too cheap and the blue was too bright. 

    That’s why design seems never-ending for me — as soon as one feature is updated, others that were done suddenly need to be improved as well. 

    Plus, I’ve had a long list of changes anyway — to the point that it’s hard to walk away from my laptop to go to bed. 

    Goals for Last Week:

    I wanted to fix the design on the home page. I also wanted to change the content flow so users would see only one book at a time, then hit one of the buttons to reach the next page — and each book would be on its own permalink page (so you can share a specific book url to social media). 

    I wanted to utilize a rotate feature in CSS so the book info could be on the “back” of the books. 

    There were a few broken features around users — you could “like” a book more than once but there was no way to remove it from your library. I also haven’t decided whether to call it Your Library or Books You’ve Read. 

    I got to thinking a lot about the Buy link. Right now I can put it in manually for each book if I want to use an Amazon affiliate link, or I can redirect to an Amazon search of the book title. But I was thinking about how the interaction on Coverlist is really made for mobile — it’s simple — and I wondered if I should actually be redirecting to iBooks or Google Play. I looked it up and those affiliate links are actually quite easy to implement. Of course, I would want to bring the device in use into it — the site would detect that someone was on desktop and send them to Amazon, or iPad and iBooks, etc. 

    I’m also thinking about allowing users to add both a short review and tags to books. That way a user doesn’t need to have multiple “shelves.” I think it would be more attractive to tag a book “sad” “2013” and “beach,” for example — that would turn into better discovery for others as well. 

    What I Accomplished: 

    I actually did a lot! Mostly today. I got the home page redesigned, with the help of a friend I met on Angellist. He sent over CSS/HTML/Javascript. It took me some time to implement it. 

    Coverlist has Twitter Bootstrap on it. That means there’s CSS I don’t need to repeat, but also CSS I need to override. Simply copy/pasting CSS from another project usually doesn’t work. Sometimes I do it just to see what happens, then remove it, go back and add things one by one as they make sense. I actually learned a lot from that exercise, though. 

    I also figured out how to get the vote buttons to scroll through books. I found a StackOverflow question about Previous and Next buttons on individual articles and used the code from the Previous button. Then I had the “Begin” button on the homepage direct to Book.last. It’s not a permanent solution, but a good hack. I have no idea how to set cookies so users don’t see the same books every time they visit — but this way if I add books every week, they should see the new ones first. 

    I also met up with a friend who did YC last summer. I told him a bit about the idea and it was a really helpful conversation. He actually told me to stop writing code. Startups are always asked how they know they’re building something people want. Sure, it would be great to finish making Coverlist look how I want, and then start to get users — but the business model is most likely based on working with publishers. So, I should talk to them. 

    There are so many ideas from building an iPad app for local bookstores to use that would allow visitors to read  and purchase ebooks, giving the bookstore affiliate revenue. Or, providing services to writers who want to self-publish. Or, charging for placement in the book list. Of course, affiliate links to digital stores, or straight from the publishers themselves. But the one I think may be most compelling is A/B testing for book covers. It’s unique to the platform and could serve as a first step to offering publishers other support in digital. 

    Lastly, I removed access to user accounts. They are still there, but you don’t need to be logged in to see the books or vote on them. That saved me from having to fix the related bugs, redesign the Library view and more. 

    Oh! And I discovered a fun hack. So since the Meh, Yes. and Ooh! buttons work like a Previous button, the buttons were disappearing on the first book. I wanted to reward users and tell them they’d reached The End. I realized instead of changing the code, I could just create an image that was book cover shaped and replace the first book with it. I used Canva for that and it worked beautifully. 

    Goals For This Week:

    Surprisingly, my endeavor to stop coding went really well. The site looks decent on mobile (well, at least on my iPhone) and works. The one thing I do need to code is that Heroku is serving a weird error page if someone were to try to navigate to a book that doesn’t exist. I think I can change this inside Heroku. 

    Otherwise, now I’m planning for promotion. I’ve done some blogging on coverlist already but there’s more original content I can do. I want to do some interviews with book cover designers and editors and take book quotes and put text overlays on photos with Studio (iPhone app) — right now I just need to do the prep work. I also want to put at least 100 books on Coverlist. Lastly, I found that the few books I pinned to my personal Pinterest when I was testing the Pin button actually resulted in traffic to the site — not much, but more than from Tumblr, which I was more active with. So I’ll be planning a fun Pinterest promo :)

    One Thing I Learned:

    Coding is fun. Too fun. It’s always a debate for me whether I like programming enough for that to be the primary thing that I do. But in this case, I think fear of success plays a part — I’m not spending all my time learning Rails because I want to always do it — it’s because if I start telling people about Coverlist they might reject it — or I might actually have to follow through with this crazy adventure. 

    Tags: startups / rails / code / ebooks / app /

     


  5. The Making of Coverlist: Part 1

    I’m building an app called Coverlist.

    When I was in high school, my best friend and I would go to the bookstore, not to buy anything — just to hang out. We would slowly round the tables in the front, picking up any book that appealed to us, maybe reading the back or flipping to the first page. If it seemed particularly good, we would hand it off to the other and say, “LOOK.”

    Now I read books on a Kindle and don’t get to wander around bookstores. My favorite books aren’t carefully arranged on a shelf in my room because I don’t buy physical copies anymore.

    That is why I’m making Coverlist. It is a collection of only the best books and a place to judge books by their covers (and, well, maybe the first page).

    In the long term I want it to become a place to discover new authors (and for new authors to be discovered) and a re-imagining of the book publishing process, which in my opinion is too drawn out and peppered with gatekeepers for the digital age. We can do better, for the benefit of both readers and writers.

    So I’ve been learning Ruby on Rails for about a year and getting closer to making my vision a reality. I want potential collaborators to know where I’m going with this and where they might be able to contribute. I’m going to begin logging my work each week, to keep myself on track, and as an example for others who might have a big idea in addition to a full time job.

    My Goals Last Week:

    I went to a networking event for people in tech and showed Coverlist to the guy sitting next to me. He pulled it up on his phone. He didn’t like most of the books (there are only about 10 right now) and didn’t click on a book or give any “kudos.” I had already wanted to switch the “kudos” to three options: Meh, Yes., and Ooh!. This confirmed that plan. I also wanted to switch the default view to show only one book at a time — so instead of scrolling through all the books, you would just see one, and have to click one of three options to see the next book.

    At first I thought I needed to add a model for Meh and Yes. as I already have one for Ooh! (my previous Kudos). I couldn’t remember how to do that but then I realized I could design the buttons and leave them not really doing anything, just to confirm that it was the best design from a user standpoint.

    The last thing I wanted to do was put all the book info in the same place. It is really important to me that the default view shows only the cover plus the buttons, since you are judging the book by its cover. But instead of clicking the book to see more info (author, summary, share buttons, etc.) I wanted this info to show up on hover and the book would rotate, or flip.

    What I Accomplished:

    Changing the default view was surprisingly easy. @books was set to pull in Book.featured, or all the books where “featured” is checked Yes. This is important so I can eventually add thousands of books but turn on/off which ones are shown to users. It turned out all I had to do was change it to Book.featured.sample(1) and it pulls only one random book each time the page is loaded. The downside is that the url the user is on will always be coverlist.com, so they cannot potentially share a specific book to social media.

    I also added Meh and Yes. and turned the happy face into Ooh!, all in line underneath the book cover. All of them refresh the page, to show a new book, and Ooh! still keeps track of how many votes it gets.

    Then I tried to add the flip view using CSS. I found a number of tutorials that do the same thing, with a <div class=”side-a”> and <div class=”side-b”> but the closest I got was with the code in a Treehouse tutorial. The only problem is that the book would rotate and the book info would appear very far out in the side of the browser. I’m not sure why. Perhaps there is something in my existing CSS somewhere causing this. I could not fix it so I pulled the code.

    Goals For This Week:

    I met the founder of Poshmark this week and was really impressed by his approach to the app and how he came up with the idea before mobile technology was pervasive enough to make it work. I also really like the site’s homepage when you’re not signed in. Right now Coverlist looks like this:

    image

    I’d like it to look more like this:

    image


    A fellow developer I met on Angellist recommended I find a splash image on this site.

    Another problem that I believe is key to fix before Coverlist is truly an MVP is the Add to Library action. Right now you can add the same book to your library many times. That doesn’t make much sense but I haven’t figured out to disallow it yet. Another fix would be to enable users to remove a book from their library, which should be added anyway.

    There’s also some debate on whether the action should be Add To Library or I’ve Read This. From a book recommendation algorithm standpoint, it seems more meaningful to track what books someone already read. But from a social standpoint, it’s more meaningful to track what books people actually like. So, adding to your library should evoke the same feeling as Add To Favorites does on a site such as Birchbox. I actually don’t care if you’ve read the book at all; perhaps its something you were recommended and just want to read — that’s fine. I think a user’s library should be aspirational as that’s a better expression of identity anyway.

    That said, the heading on the user page may need to change. How about: “My name is Dani and these are the books I like to read.” What do you think?

    One Thing I’ve Learned:

    I met someone last week who just finished YC over the summer. He said he arrived thinking it would be an intense three months of building the product, but instead, they were told to spend their time building *and* talking to users. Many times I don’t feel like Coverlist is strong enough to show to anyone — there are some obvious design flaws. But I’m beginning to see how early user input is better. I’m lucky in that I am the target user for my own app, but I have a lot of friends that are, too — and if they can confirm one of my doubts about a feature, it allows me to be much more confident in what I am making.

    Tags: making coverlist / writing / reading / coverlist / app /

     

  6. I can’t describe the feeling I get when I hear this song. Suddenly I am back in junior high, walking into the youth group at my friend’s church (who’s pastors had better taste in music than my own).

    Thanks to a reddit thread, I just discovered that not only is Five Iron Frenzy back together and releasing a new album in a few days, but some of the band members have since renounced Christianity. It’s all very fascinating.

    Anyway, back to the goosebumps … repeat.

    Tags: five iron frenzy / christianity / ska / youth group /

     


  7. New York, oct 24, five min til 9pm.

    Get off a train to find the platform crowded. People staring down the tracks. They’re not just waiting for a slow train though. They have their phone cameras out and are taking pictures. Finally I stop to see for myself what obviously is happening. There is a shirtless man on the tracks arms in the air.

    A woman asks me I say there is a man. She says I know but did the train stop. I look again and a train is stopped in the tunnel a few yards away. And the man looks so small.

    Police are pushing their way through the wall of people who are still taking pictures. I begin to walk away.

    I wonder if that man was hoping to end his life tonight and all others cared was that they could prove they were there to see it. So I go down one platform and all is calm nobody knows of the despair on display one track above.

     


  8. The joy of programming.

    Recently I was catching up with a friend and found myself gushing, writing code is so much fun, it’s like a drug!

    It’s that surge of well-being that comes with solving a problem. Other things in my life have felt like a drug — texts from a love interest, going on regular runs, for example. Programming is somewhere in between the two — it’s particularly addicting and completely accessible.

    But I’m also reminded that it wasn’t always this way. Sure, the first time I realized I could change something in code and make a Wordpress sidebar move to the other side of the page, I felt like I had just hacked a bank safe. But for the year and a half I’ve been learning programming — Ruby on Rails — whenever I’ve found a bug in an app, I’ve pretty much set aside multiple hours or weeks to fix it. Because that’s how long it took, and I would spend hours Google searching and reading Stack Exchange and feeling like I would simply never find an answer because I wasn’t putting the problem in the correct terminology. 

    That fear of hitting a wall only went away recently. The last few bugs I’ve had, I solved in fewer than ten minutes — when I had been expecting to spend several hours. So not only am I beginning to build confidence, but I’m losing that fear that used to come with making any change in my app. 

    And it took me a year and a half to get there. 

    Tags: programming / rails / ruby / learn programming /

     


  9. Monday Writing Prompt: Fights and Exes

    coverlist:

    Write a scene showing a man and a woman arguing over the man’s friendship with a former girlfriend. Do not mention the girlfriend, the man, the woman, or the argument.

    There was a tree with leaves falling. A crunch underfoot from a step backwards. 

    "She’s like a boy to me," was said. 

    Thoughts swirled around as the breeze picked up orange leaves and it seemed time to fly, fly away. He could not be trusted. 

    (Source: coverlist)

    Tags: Writing prompts /

     

  10. "Most people start startups because they don’t want jobs"