ezrabg
ezrabg
Ezra Gildesgame
23 posts
Product Manager in Brooklyn, NY
Don't wanna be here? Send us removal request.
ezrabg · 10 years ago
Text
Reflections on Drupal, GVS and Acquia
After an incredible three years, eight months and 23 days with Acquia, I’m  starting a new role next week as a Product Manager at SeatGeek. The SeatGeek apps and website make it easy to find and compare great deals on great seats for concerts, sporting events, Broadway and more. I’m extremely excited about joining SeatGeek but wanted first to take some time to reflect on my time with Acquia and Drupal.
GVS
I joined Acquia when we sold our five-person company, Growing Venture Solutions to Acquia in the summer of 2011. Despite the fanfare that sometimes accompanies acquisitions, selling GVS was not a primary goal for us. I suspect that if you’d asked us in 2009 about the prospect of GVS being acquired, we might have laughed off the idea. We were happy, our own bosses, funded entirely by work on a diverse and exciting range of clients including the Economist, Intel and a range of smaller organizations, and above all we were a small team of close friends.
2011 was an inflection point for GVS. In our earlier years, we offered a broad range of consulting, software development and training services around the open source Drupal project. This approach worked well enough, keeping us busy with a steady stream of work from past client referrals and new customers who found us through our open source work. Eventually though, we began to narrow our focus to two main areas: software powering interactive conference and event websites, and security review services for Drupal-based websites. We continued our strategy of focusing on overlap between customer needs and sponsored enhancement to open source projects, only now we channeled an increasing percentage of our overall work towards projects within our focus areas.
Months after starting conference and security review work and publicly declaring these focus areas, our stream of incoming work grew and we raised our rates. We launched the Drupal Scout security review service, and adoption of COD (the Conference Organizing Distribution of Drupal) continued to gain traction outside of the Drupal world, bringing in new clients as well as a diverse range of conferences in the United States and internationally. Attendee counts on conferences using COD ranged from 100-10,000 people and spanned causes such as political action and grassroots radio in the United States, oncology in the UK, entrepreneurship in Australia, and of course, the majority of Drupal-focused conferences whose websites launched when Drupal 6 was in its prime.
So, why sell a company we loved? A big part of the decision was scale: at 120 people, Acquia was one of the larger organizations with expertise in Drupal and had plans to expand further.  Struck by that scale and the uniqueness of the opportunity to join relatively early and help shape the company, we joined Acquia in 2011. Indeed, we found scale.
Acquia: From 120 to 600+ People in < Four Years
Acquia has grown rapidly by many metrics. When I joined Acquia, we were approximately 120 employees. Less than four years later, we’re over 600 people. Acquia was the fastest growing private software company in the Inc. 500’s list of companies in 2012 with three-year revenue growth of 10,461%, making it the eighth fastest growing company in any category on the list, and was the eighth fastest growing private software company in 2013. And while revenue is not the only way to measure success, it is a reasonable proxy for growth. Earlier this year we disclosed that we hit the $100 million/year revenue mark. All of this growth is for a business that is based around enabling organizations to succeed with free software and would not have been possible without Acquia’s team of many smart, talented and hard working individuals.
Drupal Commons
I spent most of my time at Acquia working on Drupal Commons, another distribution of Drupal. Commons is a “fully featured collaboration website in a box.” In my first year at Acquia, I led a redesign and relaunch of Commons, and despite our relatively small product team size (we scaled from two to roughly eight people depending on how you count), we were directly competitive with proprietary vendors like Jive and Yammer - Companies with millions of dollars and a strong focus in what industry analysts call the “social collaboration” space.
Because Commons is free and 100% open source, only a subset of the roughly 2,000 individual Commons websites across the web are Acquia customers. This puts Acquia in the position of truly having to prove its value in order to make money, since anyone is free to run Drupal Commons on any web host without paying Acquia a single cent. I’m proud that the Grammy awards is an Acquia customer and uses Commons to power their community of Grammy voters and submitters, but I particularly enjoy seeing when organizations without large budgets used Commons. For example, the Well Project is, to quote their website, a non-profit organization whose mission is to change the course of the HIV/AIDS pandemic through a unique and comprehensive focus on women and girls. You can read more about the Well Project on their website, their “a girl like me” blog series, and on their Facebook page.
On Drupal
According to my Drupal.org profile page, I’m a few months away from my ninth Drupal birthday. Drupal, and specifically the people who make up the Drupal Community, has been an extremely powerful positive force in my life, fueling my career growth and introducing me to an international group of diverse contributors to the project. I’ve met some extremely smart and kind people through Drupal. My experience has been that every bit of effort that I’ve put towards learning more and participating more actively in Drupal has been repaid many times fold. I started out nine years ago asking dumb questions and through a mix of great mentors and a lot of effort, I eventually became a module maintainer, and had the privilege of sharing what I learned at dozens of conferences.
Tumblr media
If you’re considering participating more actively in Drupal, do it! If you’re not sure how to get started, ask me and I’d be happy to point you in the right direction.
If you’re an organization considering getting more involved in Drupal, you should do it. Drupal’s value comes from a thriving ecosystem of providers with diverse areas of expertise. Scratch your own niche and prosper.
In sharing the news about departing Acquia and joining a company that doesn’t use Drupal, folks have asked me whether I’m “leaving Drupal.” Not exactly. I have stepped down as the primary maintainer for Drupal Commons, and next week’s DrupalCon LA will be the first North American DrupalCon that I’ve missed since I started attending in 2007. And while I’ll likely be less active as a day-to-day maintainer of my contrib projects, I plan to stay involved where I can. I hope to continue to present at Drupal events and to provide advisory input where my historical knowledge can be useful.
SeatGeek
So, why the move towards a company that’s not involved with Drupal? I’ve always been excited about technology, but even more excited about the people using technology. Who are they? Why are they using a given product? How does it fit into their day?
Thinking about my future as a product manager, it seemed clear to me that there are a wide range of exciting product challenges to tackle and that many successful consumer product companies are built on technologies other than Drupal. That’s not a knock against Drupal - Qualified Drupalists will readily admit that Drupal isn’t the right tool for every job.
Technology varies from product to product, but there’s a bit of a constant in many of the other skills associated with product management (eg, design, user research, solid understanding of engineering concepts etc). For me, Drupal was a powerful way to build my skill set as a software engineer, and offered me an early taste of product management as a project maintainer for software powering tens of thousands of individual websites, and on client projects at scale.I’m ready to work on an a new challenge, and as a frequent concert goer, SeatGeek is an extremely appealing opportunity.
I was already a user of the SeatGeek app before I joined the company. I was even more impressed when I spoke to members of the SeatGeek team. It’s immediately apparent that the SeatGeek folks are smart. Really smart. The company is nimble, and SeatGeek has a culture where where  “Red tape, office politics and buzzword-driven development are not allowed” and where “product is king.” This is not just lip service: When you use the SeatGeek iOS or Android apps or visit SeatGeek’s website, you’ll see that it’s extremely easy to find and compare deals on tickets to your favorite events.
This focus on product quality for end users has been rewarded in the company’s growth. SeatGeek did $115 million in ticket sales in 2014 and has raised $103 million in funding overall, with $97 million coming in through the last 12 months alone in B and C funding rounds. SeatGeek has also partnered with Telecharge to sell first-hand tickets to hundreds of Broadway and off-Broadway events.
Product quality comes from a skilled team making continuous improvements to their product and that’s clearly what’s going on at SeatGeek. I can’t wait to collaborate with and learn tons from the SeatGeek team as we make the product even better for end users.
1 note · View note
ezrabg · 10 years ago
Text
Misinterpreting Signage: Year in Review
Last year I took on a new hobby: Misinterpreting signage and sharing those misinterpretations on Instagram. For example:
Tumblr media
Use caution while breakdancing.
Tumblr media
Do not drink mustaches.
The Fun in Misinterpreting
Misinterpreting signage is a game that’s always in play at the periphery of my attention and allows me to inject a bit of wonder into everyday life. It’s particularly exciting when I’m traveling and unfamiliar signs are plentiful. Some signs, such as “Caution: Wet floor,” are ubiquitous even internationally and give me a reason to smile on a regular basis after misconstruing them.
 I enjoy the constraint of the project: It would be difficult to look for funny things in the environment when there’s no limit on what I’m looking for. By becoming more attuned specifically to signage, it’s become more automatic and amusing signs and interpretations often jump out at me when I'm not actively looking for them. This post contains a selection of my favorite signs from last year.
Strategies for Misinterpretation
There are several strategies for misinterpreting signage and trying different strategies on a particular sign helps to keep the game engaging in situations where something amusing about a given sign hasn't already made itself apparent. For example:
Misinterpreting context
Tumblr media
It is dangerous to ride a bicycle on top of a truck on top of a motorcycle.
Misinterpreting symbols
Tumblr media
Designated Human-Whale makeout zone.
Tumblr media
Use of cat toys with non-felines is prohibited.
Misinterpreting text
Tumblr media
IM GOING TO WIN SO MUCH CANDY
Tumblr media
Sorry that I made things awkward. Can we still be friends?
I try to acknowledge every element of a sign in my misinterpretations. Sometimes this leads to elaborate captions:
Tumblr media
The hand of God will strike down your dog and give life to a snail
Tumblr media
Do not perform the Macarena in front of the crouton bird.
Tumblr media
Even as a robot I am aware that your breath is terrible. It is cruel of you to mock the objection I am expressing through my displeasure indication light.
And sometimes they're much simpler:
Tumblr media
Refuse magic.
Tumblr media
Push to dispense eyes.
Tumblr media
Sound of one hand clapping.
Signs in foreign languages are ripe for misinterpretation:
Tumblr media
Ring bell for omelettes.
Tumblr media
It's just having its coffee.
Speaking of language, I've found that people don't always agree on the meaning of words they use in their signs. For example, I thought everybody agreed on what a sandwich is:
Tumblr media
Finally, those days of painful ambiguity are behind me.
But it turns out that people don't always agree!
Tumblr media
Nope.
Of course, where there's transportation, there is probably signage to misinterpret:
Tumblr media
Your checked bags are probably f@#%^ed.
Tumblr media
I'd like to read you a poem I wrote about this seatbelt.
Tumblr media
Levitating luggage is forbidden from following passengers.
Tumblr media
Caution: Submarines surface below road.
Tumblr media
Mortality contemplation area
Tumblr media
Please cleanup after your giant dog.
Tumblr media
We will key your car.
Tumblr media
Disrespect the letter 'C' over there.
Tumblr media
This is where babies are made.
Sometimes it’s fun to hone in on subtleties in the postures of people depicted in a sign:
Tumblr media
Zombies, please exit to the left.
Tumblr media
It is rude to tell people to "talk to the hand."
My friend Brant Wynn posted a great misinterpretation of this NYC subway sign - one which millions of people see on a daily basis. I hadn’t been able to come up with a  caption for this one.
No James Dean impersonators
Nice job, Brant!
Some signs are ambiguous.
Tumblr media
Let's not be friends.
While others are overbearing:
Tumblr media
OK, but what I *really* want is a sale.
Some signs just scream hypocrisy:
Tumblr media
HI IM CALLING TO REPORT THIS SIGN
Tumblr media
Except this sign.
Tumblr media
Inspired by Ze Frank:
I became interested in misinterpreting signage after watching “The Show with Ze Frank,” a daily video blog that ran from 2006-2007 (spanning Google’s acquisition of Youtube and before both Youtube and Vimeo were the de-facto places to post video online). The original videos from the series are offline, but Ze Frank rereposted some of his videos inconspicuously on YouTube. Three episodes in particular stand out to me as including some great (and possibly NSFW) sign misinterpretations.
Let's Misinterpret Together!
This misinterpreting signage game would be a whole lot more fun if more people could share their own unique interpretations. Going forward, I plan to tag my Instagram signage posts with the hashtag #SignageFun and I invite you to do the same. I hope to misinterpret with you soon.
For more signage fun, you can check out my Instagram.
1 note · View note
ezrabg · 14 years ago
Text
Snapsort Simplifies Digital Camera Research
If you’ve been in the market for a digital camera, you know that choosing one camera from all the competing brands and models can be a challenge. Many people like to research before they make a major investment, and there are some great resources to help guide you with your purchase. This blog post is mostly about a tool called Snapsort, but to more fully appreciate that tool, it’s worth briefly mentioning a few other resources that are available.
Flickr Camera Finder
A camera’s specifications are important, but so are the photographs that it can produce. The Flickr Camera Finder is a great tool for looking at photographs taken by a specific model of camera. Flickr makes it easy to filter by the content of the photograph (such as portraits, landscapes and night shots), as well as photographs that other Flickr users found interesting. Flickr also lets users post their photos into groups that are specific to a camera or even a camera and lens combination, and these groups are another way of finding sample photos for a particular camera.
Of course, product reviews are important, and while there are many camera great review sites, two in particular stand out as my personal favorites: DPreview.com and DCResource.com.
DPReview
DPReview.com is well known for their extensive laboratory testing of cameras. Their highly technical reviews may seem intimidating if you’re less familiar with the technical aspects of photography, but you’d be hard pressed to find a site that performs more comprehensive, consistent and knowledgeable reviews. Their RAW image and lens sharpness comparison tools are commonly used as benchmarks and points of comparison across the web. Their user forums are extensive -- It’s likely that any question you have has been addressed by knowledgeable users, making this forum a top resource, despite the somewhat clunky search tools and the bitter arguing that sometimes occurs with less mature members of the forum. Still, that doesn’t detract from the overall value provided, and let’s face it: there are some immature folks on the Internet. Still DPReview, which while independenry operated, was recently purchased by Amazon, and the ability to vote up and down comments (and hide ones marked as unhelpful) would be welcome additions to this excellent site.
DCResrouce
DCResource.com is a site where Jeff Keller performs detailed camera reviews that are more approachable for less savvy users, and he also tends to review a wider range of cameras (more entry level point and shoots) than DPReview does. I have high regard for his opinion, and he is one of my favorite camera reviewers.
Information Overload
Often, after hours of online research, consumers end up with a shortlist of two or three cameras to focus on for more extensive research. Of course Flickr, DPreview,DCResource are just a few of the multitude of resources for researching cameras. Making sense of the virtually unlimited amount of information available can be a daunting task, especially if you’re not a seasoned photography expert, and can’t make camera research your full-time job.
Luckily, there is an amazing online tool that provides you with expert guidance through this sea of information.
Snapsort: It’s the bomb diggity
Yes, I said "bomb diggity."
Snapsort.com is an automated tool that provides a detailed, itemized comparison between specific camera models, and can even recommend the best model within your budget. Snapsort covers virtually every model of camera from entry-evel point and shoots to professional level DSLRs.
At the heart of Snapsort is an automated and highly comprehensive scoring system that evaluates cameras uniformly, assigning points for many different aspects of a camera, such as the size of its imaging sensor (the part of the camera analogous to film), how quickly it focuses, how many shots it can take on a single battery charge, the camera’s size and weight, along with many other factors.
Snapsort uses this overall score, and a camera’s score in some of the individual areas it measures, to provide several amazing tools for consumers looking for the right camera.
While its within-category and within brand ranking tools are highly valuable, it’s the automated camera comparison that I find most useful.
Automated camera comparison
If you’ve narrowed your shortlist down to a few models of camera, you’re ready to do a comparison. If you need help narrowing down your short list, don’t worry, Snapsort has plenty of other tools to help you hone in on a recommendation.
To perform a comparison, browse to the compare page and enter the model of each camera you’d like to compare. Snapsort instantly pulls up a picture of each camera along with an itemized list of benefits that each camera has over the other along with the cameras’ common strengths, followed by an overall score and recommendation of one camera (unless it’s too close to call).
The list of advantages for each camera are very detailed and comprehensive. For example, if you compare the Nikon D7000 vs that Canon 7D, you’ll see that while the D7000 has a greater number of focus points, the 7D has a greater number of cross type focus points.
So, what the heck does that mean, and why should you care? Just click on the “i” icon next to any part of the comparison, and Snapsort provides you with a helpful explanation of why that particular aspect of the camera is important. These explanations are a key part of what makes Snapsort such a great resrouce.
Snapsort doesn’t just make a recommendation, it explains every aspect of each camera, so that once you’ve read a comparison, you’ll have the knowledge you need to understand the recommendation and to better understand cameras in general.
In fact, if you read a Snapsort comparison, odds are that you’ll be more knowledgeable than many salespeople you’ll encounter, and less susceptible to camera hype or pushy sales tactics.
In addition to some aspects of a camera that you might normally consider, such as its size or the resolution of its sensor, the camera comparison also points out details that can be easily overlooked, like the viewfinder magnification level and coverage level. (Some cameras only show a portion of the image that will be captured while others show 100% of the image.) Some more expensive cameras have pentaprism viewfinders which are typically brighter than less expensive pentamirror ones. Snapsort’s “true resolution” rating takes into account a camera’s actual resolution, rather than just the number of megapixels it has. These are just a few of the many handy pointers you can get from reading a Snapsort comparison.
If you’re less interested in the specifics and just want a recommendation, Snapsort’s “just tell me” feature allows you to enter your budget and receive a recommendation on what to buy.
The service that Snapsort offers is unique and valuable enough that they could probably get away with obnoxious, in-your-face advertisements to raise revenue. However, the ads on Snapsort are very unobtrusive and highly relevant to the content you’re viewing (like purchase links with the best prices for a particular camera), so they’re actually useful, rather than like a necessary evil.
There’s so much to love about Snapsort. Is there any room for improvement? I’ve got a few suggestions for making this excellent resource even better.
Improving Snapsort
Given the relative complexity of the task, it’s ridiculous how easy Snapsort makes it to read (and understand) a thorough review of cameras. Of course, this automated system wouldn’t be very valuable if the scoring system wasn’t very accurate. Luckily, the Snapsort scoring system is impressively accurate - their recommendations generally make a ton of sense. As a result, it’s hard to find much to complain about.
Still, there are few ways that Snapsort could be even more awesome. Some of those improvements have to do with the look and feel of the site, but many have to do with the scoring algorithm. Since the algorithm is at the core of everything Snapsort does, I’ll start with some suggestions for improving this part of the site.
Weight of DxOMark Scores
For some of its data points, Snapsort uses ratings from DxOMark.com, a site that performs rigorous laboratory testing of camera imaging sensors and lenses, and assigns scores in several different areas of the sensor’s performance. While Snapsort mentions the aggregate results when comparing two cameras, it uses the low light performance, color depth and dynamic range ratings from DxOMark to calculate scores. This makes sense, because weighing both the aggregate DxOMark score along with the specific scores seems like it would be double weighting.
Dynamic range
A camera’s dynamic range, measured in EV or stops, refers to its ability to capture areas with varying amounts of light and shadows in a single shot. Snapsort correctly weighs the dynamic range abilities of a camera’s sensor heavily. However, the DxOMark dynamic range rating doesn’t provide enough information here. Take for example, the sensor in the Nikon D7000, a sensor made by Sony and used in other cameras like the Pentax K-5. The DxOMark scores gives cameras with this sensor a roughly 2 EV advantage over the 18 megapixel sensor used across Canon’s APS-C format DSLR line. However, upon closer examination of DxOMark’s dynamic range chart, we can see that extent of this advantage is maintained at lower ISO values, with the gap narrowing significantly at ISO 800 and above. Snapsort could provide a more complete sense of a camera’s dynamic range capabilities by providing a score for dynamic range as reported by DxOMark at a low ISO level like, ISO 100 and a higher one, like ISO 800.
Score additional elements from the camera comparison
If you look at the score explanation that Snapsort provides with each camera comparison, you’ll see that not all items that were mentioned in the comparison are taken into account in a camera’s score. While the scoring system is still useful, it misses these valuable data points. Number of cross-type imaging sensors, pixel pitch, lens availability, and weight all seem like key aspects of the camera comparisons that would be valuable if weighted as part of the score.
Improved popularity metrics
While popularity isn’t the only indicator of quality, it certainly is important to consider, and Snapsort assigns points for a camera's popularity with a weight of 50 -- twice the weight of screen resolution viewfinder size, and in-body image stabilization, and equal to the individual DxOMark ratings. So, how does Snapsort evaluate popularity?According to the site, they measure, “popularity of a cameras based on how often users at Snapsort.com interact with them.” Page views definitely indicate interest in and excitement about a camera, but I come to Snapsort to cut through the hype surrounding camera models, not to add to it!
It would be more valuable to know how many people actually own and are using a camera, than how many people are looking it up on Snapsort’s website. There are a few different ways that Snapsort could get data about a camera’s level of real-world usage and ownership.
Flickr ranking
As part of its Camera Finder, Flickr exposes the number of items posted, average daily users, an “Activity factor” and overall rank of a camera’s popularity within Flickr. What’s useful about this data is that it’s based on real-world usage. As more people shoot with a camera and post their photos to Flickr -- Flickr surpassed 5 billion photos uploaded as of late 2010 -- we can use this data to get a sense of a camera’s popularity with confidence in a large sample size and real-world validity.
Amazon ranking
Snapsort wants to retain its sense of independence and lack of bias towards any camera manufacturer or merchant, but it’s hard to deny that Amazon is one of the largest retailers, and their category specific sales ranking would be another valuable measure of a camera’s popularity.
Similarly, Amazon and other large retailers like B&H provide average customer ratings of products. I definitely consider this data when researching a purchase, and while I realize the potential conflict of interest of using data from a particular retailer, I’d love to see this integrated as well.
As an alternative that may seem more independent, there are market share reports by camera model for different international markets, though parsing and combining these reports may be more trouble than it’s worth.
Regardless of the specific method chosen, improving the real-world vaildity of Snapsort’s popularity ranking would be a welcome addition to the algoritm, and would cetainly justify this score’s relatively heavy weight of 50 within the Snapsort scoring system.
Consider camera buffer size
One area that Snapsort seems to ignore is camera buffer size. After images are captured, they are stored in the camera’s buffer memory before being saved to the memory card. The camera can write to its internal buffer much faster than the memory card, and having a larger buffer means the camera can shoot continuously for a longer period of time before having to slow down and empty its buffer. It would be great if Snapsort could weigh continuous shooting speed and camera buffer size (measured in both RAW and JPEG format) in its camera scores.
Rank video functionality
While video isn’t my personal priority in a camera, it is for some folks. Cameras that shoot at 1080p resolution at 24 frames per second should receive a lower score than those that can shoot 1080p at 30 fps.
Color bit depth
Comparing the Canon 7D DSLR to the Nikon D7000, we can see that the Canon has a color bit depth rating of 22, while the Nikon has 23.5. Because this is a logarithmic scale, the Nikon can distinguish 3 times as many colors, and thus gets a weighted 22.5 points, compared to the Canon’s 7.5 points -- a significant difference that could tip Snapsort’s overall recommendation between the two models. Being able to discern color is definitely an important aspect of camera quality, but beyond a certain degree of color accuracy, it seems like additional accuracy has diminishing returns for many users. Depending on which source you find, the human eye can see somewhere between 7 and 17 million colors, and many screens and printers don't exceed 16 million colors. Snapsort could differences in weigh color bit depth above 22 bits less heavily than than those below that level of depth. One way of doing this would be to assign ranges of bit depth that all receive a certain score, though this would sacrifice some precision.
Improvements to look and feel
Overall, Snapsort has a very sensible information architecture and pleasant user experience. I love how the key areas where cameras’ scores differ is highlighted on the score explanation page. I love how easy it is to go from a list of cameras in a category to an overview of a specific model, and from there to comparison against another model.
Still, for me, the comparison feature is the meat and potatoes of Snapsort.com, and I’d love to be able to have camera comparison text fields on the top of every page of the site, so I don’t have to click “Compare”.
Better yet, I’d love it if there were a browser plugin I could install that would detect camera models in the page content I'm viewing (on a list of approved websites), and offer me a direct link to a comparison of the cameras being discussed. That way, I could go straight from a forum discussing two cameras and see the Snapsort comparison.
One last request
My final feature request for Snapsort is that they expand into other areas beyond photography. If Snapsort could help be decide what to eat for lunch, I’d save hours of excruciating scrutiny a week. A burger has so much protein, but also so much cholestoral. Should I really get a salad (probably not)?
Either way, I look forward to taking a picture of my lunch with whatever DSLr I end up buying, and I’ll be able to rest assured that I’ve made an educated, thoroughly reviewed purchase.
Disclosure: I wrote this blog post out of pure love for Snapsort.com, and also to participate in their community feedback contest, where I stand to win some awesome prizes.
0 notes
ezrabg · 16 years ago
Text
Vote for Flat World Knowledge in Huffington Post's 7 Startups that will Change the World
Update: You can vote for Flat World Knowledge here.
From Spring 2008 through the Winter of 2009, I consulted independently for a budding startup called Flat World Knowledge.
FWK is a website/web application that pays authors to write textbooks and makes those books available online for free for anyone to read. FWK also makes it possible to copy and then modify the textbooks, allowing people to create their own distinct, personalized version of a book. Books and study aids are produced via print on demand and can be purchased for a fraction of the cost of a typical textbook.
The end result is that textbooks are more financially and technically accessible to students, more personalized to specific classes, and the typical textbook market is disrupted.
It's been exciting to see FWK develop both in terms of the recognition they've been getting -- $8 million in new venture capitol this past fall -- and the many schools who are now using FWK for their classes.
I played several different roles throughout the project, doing module development, architecture, performance tuning, implementing wireframes in a Drupal-friendly way, and providing some education about different approaches with Drupal.
It was truly a pleasure working with Brad Felix, Flat World's CTO, and I was also very fortunate to work with well-known experts and contributors in the Drupal community including Ryan Szrama (Ubercart), Zivtech and FunnyMonkey.
Flat World is open-source friendly not only in their product, but also in they way the went about building it. Several Drupal modules were created as part of the project, including Vocabulary per-book, Ubercart Node Access, Ubercart Restrict Quantity, Book bridge and Vocabulary per-book.
I participated in building the site from concept to public Beta to their first official release, before transitioning from working independently to joining the Growing Venture Solutions team. It's been exciting to watch Zivtech run with the project since then.
I'm so thrilled to be able to play a part in disrupting the textbook and education market, and to see FWK taking off!
Related: - Vote for FWK in the Huffington Post - FWK in Wired - FWK in NyTimes - Other press coverage
1 note · View note
ezrabg · 16 years ago
Text
Submitting Protected Forms Programatically with Safe User Impersonation
Note: This article was originally published on the Growing Venture Solutions website.
When a form protected by spam prevention measures such as captcha or Mollom is submitted with drupal_execute, validation can fail unless the spam protection is properly suppressed.
This blog post describes the background and solution to a bug that previously existed in the Signup Integration for Ubercart module (uc_signup), and explains the techniques used to fix the bug. It is written with developers and aspiring developers in mind, though other people interested in how Drupal works might also find it interesting.
The Context: How uc_signup Uses drupal_execute
In the Signup integration for Ubercart module, we sometimes create a new user account and populate the user's profile with data that was submitted on a form separate from the core user profile form. In earlier versions of uc_signup, we created the new account with user_save, however this allowed crafty users to leave required fields blank by skipping the form and proceeding to checkout, so we switched to drupal_execute which ensures that the form's validation gets executed.
The Problem
The drupal_execute function is relatively easy to use -- just pass in the form_id and form values you'd like to submit to the form.
However, we soon got a bug report with one user reporting a validation error at the time that the new user account is saved, with the captcha module enabled for the user registration form.
Captchas often take the shape of "those squiggly letters" used to determine whether you are a human being or a computer program that submits spam to websites.
Uc_signup can collect profile information for multiple users on a single "attendee contact information" form that is integrated into the Ubercart checkout process.
Uc_signup's Attendee Contact Information" form.
By design, this form has a unique form_id, so it isn't protected by captchas that protect the user registration form. The required fields on the attendee information form correspond to those on the user registration form -- except that on the attendee information form, there is no captcha. When uc_signup takes user-entered data from this form and submits it into the user registration form, validation on the user registration form fails because this form has a captcha, which was never presented to the user and is therefore not filled in.
Finding a Solution
So, we needed a way to bypass the captcha protection. Should we unset the form validation function from the captcha element? Should we remove the captcha element from the form altogether?
The simplest and least error-prone solution turns out to be to prevent the captcha from ever being added to the user registration form for this specific situation.
Both internal spam prevention services (such as captcha and spam.module) and external ones (such as Mollom and Akismet) use Drupal's user permissions system to allow certain users to bypass the protection that they add to forms.
drupal_execute submits forms with the permissions of whichever user is logged in (or an anonymous user). In most cases, people who are using the attendee information form will not have permission to bypass spam protection site-wide. The solution to our captcha validation problem is to have our module submit the form as if it were a privileged user. That way, the captcha will never be added to the form.
User Impersonation: Not just for Halloween.
User impersonation is a technique that developers can use to allow a particular section of code to be run as a particular user. In Drupal, the user with UID 1 has all permissions available on a site. In uc_signup, we impersonate User 1 before performing the drupal_execute so that captcha waves protection for the form.
Practicing Safe Impersonation
It's important to follow best practices when performing user impersonation. Not doing so can allow users on your site to gain control over the account being used for the impersonation, resulting in a serious security vulnerability.
After calling global $user;, setting the $user variable equal to a different user account will cause the currently logged in user to switch to that account. That is why it is a best practice to use another variable, such as $account, when working with user accounts without the intention of impersonating users.
You must set session_save_session(FALSE); before switching to the impersonated user. The reason for this is that if your action fails or interrupts the request with adrupal_goto and session saving is enabled, the user will then be logged in as user 1, with all privileges on your site. By setting this value to FALSE and then back to TRUE, we make sure that the impersonation only exists when we're performing the required action, and does not persist if the action fails.
The code snippet below is a more heavily commented version of the code used in uc_signup. This code snippet impersonates User 1, submits the user registration form with the previously entered values, and then switches the session back to the user who was previously logged in. Note that we have three variables that refer to user accounts:
global $user - The account of the currently logged in user. $temp_user - The variable used to store the current user's account while we temporarily switch the session to the privileged user. $account - The account created as a result of submitting the user registration form.
This code actually appears inside of a foreach loop and some conditional logic, so that it if the attendee contact information form collects information for multiple new users, the user registration form is submitted once for each new account.
To get the full context of this snippet, you may wish to view the full contents of uc_signup.module.
//Load the global $user object that contains the account of the currently logged in user. global $user; //Preserve this account in the $temp_user variable so that we can switch back to it after impersonating the privileged user. $temp_user = $user; //We must set this to FALSE in case the operation on the following lines fails. session_save_session(FALSE); //Switch the currently logged in user to user 1. $user = user_load(1); //Submit the user registration form. drupal_execute('user_register', $form_state); //Switch back to the account we saved in the $temp_user variable. $user = $temp_user; //Restore session saving. session_save_session(TRUE); //Populate the $account variable with the account created as a result of submitting the user_register form. We later go on to sign up this user to one or more events that are being purchased. $account = $form_state['user']; ?>
0 notes
ezrabg · 16 years ago
Text
Kansas City Star
Gabe "Gabbers" Witcher and the rest of the Punch Brothers did a fantastic job on this Roger Miller song at last night's concert at the Living Room.
[Updated to a Spotify embed after the video was removed from YouTube.]
0 notes
ezrabg · 16 years ago
Text
Béla Fleck Brings the Banjo Back to Africa in New Film and Album
Fleck to Answer Questions at Select Screenings (Heck yes)
Banjo virtuoso Béla Fleck recently released an album and companion film containing highlights from his six week trip around Africa where he played with musicians from Mali, Uganda, Tanzania, the Gambia, Madagascar, South Africa, Senegal, and Cameroon. The album, Throw Down your Heart: Africa Sessions contains 18 of the 40 tracks recorded on this trip, which had been an idea of Fleck's for years.
“I developed the suspicion that some of the greatest acoustic music on earth is hidden in the small villages in Africa. Somehow it didn't seem to be making it out into my world, and even when amazing field recordings were made, how could I find out about them?”
The CD liner notes contain additional information about the project as well as each track, and make the album well worth purchasing in hard copy rather than as an Mp3 download. In the liner notes, Fleck tells how he was skeptical of a proposal that the trip be about him teaching the banjo. Instead, displaying genuine curiosity, Fleck responded that,
“..[I]f I finally got over there, I would be all about playing with and learning from the local musicians, not necessarily teaching.”
The project features musicians who are well known as well as many who are obscure or relatively unknown on the wold stage. Fleck and crew held auditions for the project in several of the countries visited.
Toumani Diabaté, the virtuoso world-class badass powerhouse Kora player from Mali, plays on one track. Known for exploring beyond the caste restrictions of Malian griot music, Diabate has collaborated with musicians from various “world music” traditions. He partnered with blues guitarist Taj Mahal in the 1999 album Kulanjan, which also highlighted connections between blues and folk and their roots in African musical traditions.
As if out of some weird musical fantasy of mine, Diabaté and Fleck are scheduled to perform at this year's Telluride Bluegrass Festival. (Perhaps more of my musical fantasies will come true, like Henry Butler and Derek Trucks playing together.)
The project also calls attention to the fact that despite the strong association between the banjo and bluegrass music, the banjo is widely thought to have originated from West Africa instruments such as the akonting and the ngoni.
Thanks in large part to Nashville sound engineer Dave Sinko and documentary sound man Wellington Bowler, the sound quality on Throw Down your Heart is excellent, despite the fact that some of the tracks were recorded in somewhat remote locations.
It's hard to chose a favorite track, but here are three that stand out to me:
Throw Down Your Heart was released on March 3, 2009 and the film can be seen on different dates around the Country. Fleck and filmmaker Sacha Paladino (Fleck's brother) will be present at select screenings to answer questions. The New York City screenings run April 24-30th at the IFC Center and the movie's website indicates that both Fleck and Paladino will be present at select screenings to answer questions. The film comes to the Denver Film Society from June 18-25, overlapping somewhat with the Telluride Bluegrass Festival. Check the film's website for show times in your town!
PS: One track on the album was taken from a live duo with Vusi Mahasela at the Boulder Theatre on the E-town radio show. Colorado, represent!
Update: 4/21/2009 - Fleck and Paladino will be present at the following New York Showtimes this weekend: Fri-Sat at 7:20 & 9:45pm, Sun at 2:40pm. Tickets available here.
0 notes
ezrabg · 16 years ago
Text
Track of the Day: Let Me Ride - Staple Singers (1959)
From the 1959 album "Uncloudy Day" which was re-released with "Will the Circle Be Unbroken" as one album in 1991. This is actually more like the "track of last Monday."
[Updated to a Spotify embed after the YouTube video was taken down.]
0 notes
ezrabg · 16 years ago
Text
Drupalcamp NYC 6 Video
Last Saturday, over 130 people gathered in Brooklyn for DrupalCampNYC6, and the event received a bit of coverage in the New York Times. This was great precursor to the 1,400 person DrupalCon this week in Washington, DC. Make sure your sound is on for this video!
Drupalcamp NYC 6 - ezra-g and greggles remix from Greg Knaddison on Vimeo.
1 note · View note
ezrabg · 16 years ago
Text
Track of the Day: Two Sisters - Shakti (1977)
0 notes
ezrabg · 17 years ago
Text
January Drupal Training in Denver: Turn your Site Up to 11!
This January I'm headed out to scenic Denver, Colorado to co-teach two of three sessions of an Intro to Drupal 6.x class with Growing Venture Solutions. The course is targeted towards people who are new to Drupal and covers several levels of site administration as well as using essential Drupal modules such as Views and CCK (Content Construction Kit), image handling with Imagecache, and creating sophisticated landing pages using Panels. Then we'll cover theming/templating and finally module development, performance and security best practices. The course happens over three Saturdays, so students can go home (or back to work), tinker around and return brimming with questions and enthusiasm about turning their Drupal sites up to eleven. If you're thinking of attending, it's best to secure a spot at the pre-2009 discounted rate. You can read more about the course on the GVS website.
Hope to see you there!
1 note · View note
ezrabg · 17 years ago
Text
Your Questions Wanted: Open Source CMS Panel Discussion
Ultra Light Startups, a New York-based tech entrepreneur's group, is hosting a panel discussion on Open Source content management systems on Thursday, December 4.
I'll be speaking about Drupal along with experts from Joomla (Donna Vincent) and WordPress (Steve Bruner). People often ask for comparisons between these projects but it's uncommon to find people who have a depth of familiarity in all three systems together in one place, so this promises to be a unique discussion. The panel will be videotaped and made available online.
In order to facilitate a valuable discussion, I've started a list of suggested discussion questions. I'd like to ask you, fellow Drupalers (and any non-Drupalers), to suggest questions that you think will help highlight the differences between these systems and add value to the discussion. Below is my list of suggested questions, starting with ones that seek introductory information to the platforms:
What kinds of websites/web applications have been built on your platform?
How large is your development community? Approximatley how many installations are there? How many modules/plugins and themes are available?
What license covers the code in your project?
What is your project's greatest asset?
Is your platform aimed towards developers, casual site builders, or both?
Making your site's content externally available via an API adds value to your product/service and is important to staying competitive. How does your platform facilitate - exposing this data?
What major companies have invested directly in the development of your platform?
Are there many service providers for your platform?
What has your platform done to improve scalability/performance since its last release? In general?
What are the key features that your project provides to improve the efficiency of developing advanced websites/web applications?
How does your project stay up to date on security of the platform?
In an open source project, it's important to carefully vet code changes. How does your project make sure that code is well maintained?
What organizational steps has your project taken to ensure that it is around two years from now?
Participants at Ultra Light Startups events are tech entrepreneurs (including service providers) and investors, and Drupal community members are invited to attend. Space is limited, so for more information and tickets, visit the event page. I'll also be handing out a limited number of vouchers for a free copy of the upcoming Drupal in Action.
0 notes
ezrabg · 17 years ago
Text
Asking Questions (featuring Cookie Monster)
0 notes
ezrabg · 17 years ago
Text
Chipotle Parterns wtih Salatin Family's Polyface Farms
I tend to be skeptical when I see food that's advertised with phrases such as  "100% natural" or "exactly the way nature intended." That's because the word "natural" is often abused and overextended to include methods of producing (and distributing) food that are anything but natural.  Examples that come to mind include produce that is grown with industrial fertilizer and products from animals who live in inhumane conditions at factory farms where they are mutilated (their tails and beaks removed) and forced to eat foods that cause them digestive problems while they live literally in their own waste -- which becomes a major pollutant instead of being used as a natural fertilizer.
  When I think about an “ultimate standard” for natural agriculture, I usually think of Polyface Farms. Polyface was discussed extensively in Michael Pollan's The Omnivore's Dilemma,  a book that inspired major changes in the way I think about food. 
   I learned via Greg Knaddison's post on Chipotlog (see file photo) that burrito chain Chipotle is partnering with Polyface Farms to exclusively use Polyface pork at the Chipotle store in Charlottesville, Virginia.
   Chipotle seeks to provide "food with integrity" and their approach involves incrementally increasing the amount of organic or natural foods that they purchase. As the Chipotle chain grows, the market for natural food increases along with Chipotle's ability to stock the chain with a greater percentage of natural ingredients.
  Partnering with Polyface is great step in that direction. It reflects considerable thought on the part of Chipotle and is likely to promote brand awareness of Chipotle as a “natural” food supporter.
Congratulations to the Salatin family and Chipotle. 
And no, Chipotle is not owned by McDonalds!
1 note · View note
ezrabg · 17 years ago
Text
Benchmarking Authenticated Drupal Users with ApacheBench
The sections of this tutorial are as follows:
Brief background on ApacheBench and performance of Drupal Anonymous vs Authenticated Users
Accessing the cookie containing the Drupal session ID
Passing the session cookie to ApacheBench
Verifying that the Drupal installation being benchmarked recognizes the cookie and is serving authenticated Pages
    ApacheBench, also known as 'ab', is a command line program bundled with the Apache Web Server that measures the performance of web servers by making HTTP requests to a user-specified URL. ApacheBench displays statistical information, such as the number of requests served per second and the amount of time taken to serve those requests, that is useful for evaluating (benchmarking) and tuning the performance of a webserver. ApacheBench does a decent job of simulating different types and levels of load on a sever.
   By default, ApacheBench requests pages as one or multiple concurrent anonymous users. Benchmarks of performance for anonymous users can be useful for a website that most users will access anonymously, but these data do not accurately describe the performance of websites that serve a significant percentage of their total pages served to authenticated users (as most community sites tend to do). By providing the Drupal session cookie information, ApacheBench can perform benchmarking tests as an authenticated Drupal user.
Accessing the cookie containing the session ID:
Note: These instructions are for the Mozilla Firefox browser.
1)Log into your Drupal installation using the account that you'd like ApacheBench to use when conducting its tests.
2)Open the Firefox preferences menu and browse to the 'Privacy' Tab
3)Click the 'Show Cookies' button
  4)Browse the list of sites to find the site that you have just logged into.
5)Highlight the cookie associated with your site that has a 'Cookie Name' value beginning with 'SESS'. There should be only one of these cookies. If you have two cookies with names beginning with 'SESS' for the same Drupal website, you should clear both of these cookies (which will log you out of your Drupal site) and log back in to ensure that you are specifying the correct cookie in ApacheBench.
6)You'll see that your site's SESS cookie has both 'Name' and 'Content' values. You're going to copy each of these values individually and pass them inside of a command line parameter to ab. Note: Do not log out of your Drupal site before testing with ab, as doing so will invalidate the cookie information you have just copied!
  Passing the session cookie to ApacheBench
   The 'C' parameter is used with ApacheBench to specify a cookie. This parameter is case sensitive, and should not be confused with 'c' (lowercase) which specifies the number of concurrent requests ApacheBench will make. You'll describe your site's cookie using the following format:
-C 'NAME=CONTENT'
  There is no space between the equals sign. Below is a completed example specifying that 400 requests will be made (-n 400) with 10 simultaneous requests (-c 10):
ab -n 400 -c 10 -C 'SESS5a2cb35dfce80bc682796cc451440ac0=d45b85c5be4c651ea2ad520947082e04' http://example.com/
  Verifying that Drupal accepts the cookie and is serving pages to an authenticated user
      It's important to verify that Drupal recognizes and accepts the cookie that corresponds to your session. Once, while performing a set of ab authenticated Drupal user benchmarks, I adjusted a Drupal cache setting that increased the number of requests served per second for authenticated users from 5 to 60. I thought, “Wow! I've made an enormous improvement!” What I had actually done was switched from Drupal core session handling to Memcahe's session handling, which caused Drupal to not recognize my cookie. Drupal was actually serving anonymous pages, which accounted for the dramatic “performance improvement.” To avoid misunderstandings like this one, we'll use ApacheBench's verbose mode to confirm that Drupal is serving authenticated pages.
   In our theme directory, we'll add a PHP snippet to page.tpl.php below the HEAD tag, that will print, inside an HTML comment tag, the username and uid (user id) of the user currently viewing the page.
name .' : UID:'. $user->uid; ?>
Then, we'll run ApacheBench with a verbosity level of 4 (parameter -v4), allowing us to view the HTTP response code and html that the server is sending to ab.
        Viewing the content of pages served to ab is also useful in determining the nature of failed responses and investigating suspiciously high numbers of requests served per second. Apache identifies certain types of failed requests by serving them with an unsuccessful (non-200) HTTP response code. (For more about HTTP response codes\status codes, see the W3's "Status Code Definitions" .) ApacheBench recognizes HTTP response codes and reports the number of responses that are marked as successful and unsuccessful by Apache. A reportedly high number of requests successfully served per second can indicate good server performance, but it's important to distinguish pages served with a 200 response code from those that are truly served successfully. In some situations, Apache is unaware of serious problems that occur in other parts of the server stack and will serve pages with an HTTP response code of 200 (successful) despite the fact these pages contain only a PHP fatal error. In these cases, Apache is “successfully” serving the PHP fatal error message.
    Drupal correctly specifies non-200 HTTP response codes when it is unable to connect to the database. Viewing the content of the benchmarked page allows the person performing the testing to view the specific error message that the site is displaying. This is useful in identifying that the problem is, for example, that the MySQL max_user_connections value has been reached, as opposed to other database connection errors, such as an Access Denied error.
  It's worth noting that while ab provides useful information about a server's performance, that it does not predict exactly how a server will perform under load from actual users.
  Questions? Comments? Corrections? I'm happy to hear from you.
0 notes
ezrabg · 18 years ago
Text
No More Coffee
It's over. I am breaking up with coffee. [Queue idiomatic Country music breakup song backing.]
1 note · View note
ezrabg · 18 years ago
Text
Edgar Meyer has a problem!
Sam Bush, Bela Fleck, Mark O'Connor, Edgar Meyer and Jerry Douglas. Apparently they formed a group called "Strength in Numbers." This is from Austin City Limits and captures Jerry in the pre-goatee phase.
Damn! Edgar Meyer (bass) has a problem! I also really like the parts where Jerry Douglas and Mark O'Connor play the harmonized melody.
0 notes