Planet CouchDB

July 21, 2016

The Offical CouchDB Blog

CouchDB Weekly News, July 21, 2016

Major Discussions

Starting 2.0 Release Candidates (see thread)

We are now at a point where we can start the CouchDB 2.0 release candidate phase, see the thread for more information on how you can help with testing the tarball.

Releases in the CouchDB Universe

  • beanbag 4.8.0 – Generic CouchDB driver built upon the teepee module
  • cdbcli 0.1.1 (Python) – Interactive command line shell for CouchDB
  • clusterpost-provider 1.2.2 (Hapi) – Transfer job description and data to CouchDB. Submit task to the computing grid.
  • couchdbjs 1.0.1 – A Node client for CouchDB.
  • lazers 0.1.0 (Rust) – laze.rs is a CouchDB toolkit written in Rust
  • logstash-input-couchdb_changes 3.0.2 (Ruby Gem) – This gem is a Logstash plugin required to be installed on top of the Logstash core pipeline using $LS_HOME/bin/logstash-plugin install gemname.
  • poms 2.1.2 (Ruby Gem) – Interface to POMS CouchDB API

PouchDB

Opinions and other News in the CouchDB Universe

… and in the PouchDB Universe

CouchDB Use Cases, Questions and Answers

Use Case:

  • nano-records – A module for interacting with CouchDB through nano with Node.js.

Stack Overflow:

no public answer yet:

PouchDB Use Cases, Questions and Answers

Use Case:

  • pouch-clerk: PouchDB worker reacting to document changes. Each document has a state. A clerk listens to changes in one or more PouchDB databases and react to document state changes.

No public answer on Stack Overflow yet:

For more new questions and answers about CouchDB, see these search results and about PouchDB, see these.

Get involved!

If you want to get into working on CouchDB:

  • We have an infinite number of open contributor positions on CouchDB. Submit a pull request and join the project!
  • Do you want to help us with the work on the new CouchDB website? Get in touch on our new website mailing list and join the website team! – www@couchdb.apache.org
  • The CouchDB advocate marketing programme is just getting started. Join us in CouchDB’s Advocate Hub!
  • CouchDB has a new wiki. Help us move content from the old to the new one!
  • Can you help with Web Design, Development or UX for our Admin Console? No Erlang skills required! – Get in touch with us.
  • Do you want to help moving the CouchDB docs translation forward? We’d love to have you in our L10n team! See our current status and languages we’d like to provide CouchDB docs in on this page. If you’d like to help, don’t hesitate to contact the L10n mailing list on l10n@couchdb.apache.org or ping Andy Wenk (awenkhh on IRC).

We’d be happy to welcome you on board!

Events

Job opportunities for people with CouchDB skills

Time to relax! Once in a “buck moon” edition

  • “A few hundred years ago, naming moons was more about practically tracking the seasons than coming up with a catchy hashtag. For instance, according to the Farmer’s Almanac June’s ‘strawberry moon’ and September’s ‘corn moon’ both correspond with ideal harvesting times.” – Here’s Everything You Need To Know About Tonight’s “Buck Moon”
  • “A baby planet at least as large as New Jersey that smashed into the moon billions of years ago might have created the mysterious grooves that score the lunar surface, a new study suggests.” – Long-Ago Giant Impact May Have Created Moon’s Mysterious Grooves
  • “In the case of the America’s ambition to land on the moon, the backup plan was a little bit bonkers because it relied on a cramped, two-person spacecraft never really intended for use in lunar orbit. It was a plan (well, really, a series of plans) that would have made a lunar landing possible with less of everything—astronauts, fuel, mass, interior volume, launch thrust, and, in one particularly exciting variant, the entire outer body of a lunar lander.” – America’s Crazy Backup Plan To Get To The Moon
  • “A new study says much smaller quakes are happening deep down below the earth’s crust almost on a regular schedule that are tied to the phases of the moon. Just as the moon’s gravitational pull affects the ocean tides, scientists say they now have hard data to show how it has the same effect on hard ground.” – New Study Indicates Link Between Moon Phases And Earthquakes
  • “On Earth, there would be a significant amount of long winters, and ‘a general cooling off,’ of the world at first, he says, perhaps followed by a warming. We’d see ‘wild extremes’ that are more drawn out and last much longer than the planet has previously exhibited. Petro emphasizes that these climatic effects would certainly not be felt immediately — they would occur on a scale of 1,000 to 10,000 years. But there is one other effect that humans would have to find solutions to very quickly if the moon were blown up or hit with some sort of explosive force: debris.” – If Aliens Ever Attack Earth, We Need To Protect The Moon Or Die Trying

… and also in the news


Filed under: News

by renrutnnej at July 21, 2016 01:00 PM

July 14, 2016

The Offical CouchDB Blog

CouchDB Weekly News, July 14, 2016

Major Discussions

Starting 2.0 Release Candidates (see thread)

We are now at a point where we can start the CouchDB 2.0 release candidate phase, see the thread for more information on how you can help with testing the tarball.

2.0 & Windows: status update (see thread)

Joan Touzet provides an update on status of the CouchDB 2.0 port to Microsoft Windows.

Releases in the CouchDB Universe

  • couchdb_download_token 0.1.0 (Python) – Simple web service that allows downloading CouchDB document attachments with a per-document download token.
  • dbdb 1.2.1 – Simple db layer. Supports only Cloudant/CouchDB at the moment.

PouchDB

Opinions and other News in the CouchDB Universe

… and in the PouchDB Universe

CouchDB Use Cases, Questions and Answers

Stack Overflow:

no public answer yet:

PouchDB Use Cases, Questions and Answers

Use Case:

  • SummaDB – A hierarchical database that syncs with PouchDB

Stack Overflow:

no public answer yet:

For more new questions and answers about CouchDB, see these search results and about PouchDB, see these.

Get involved!

If you want to get into working on CouchDB:

  • We have an infinite number of open contributor positions on CouchDB. Submit a pull request and join the project!
  • Do you want to help us with the work on the new CouchDB website? Get in touch on our new website mailing list and join the website team! – www@couchdb.apache.org
  • The CouchDB advocate marketing programme is just getting started. Join us in CouchDB’s Advocate Hub!
  • CouchDB has a new wiki. Help us move content from the old to the new one!
  • Can you help with Web Design, Development or UX for our Admin Console? No Erlang skills required! – Get in touch with us.
  • Do you want to help moving the CouchDB docs translation forward? We’d love to have you in our L10n team! See our current status and languages we’d like to provide CouchDB docs in on this page. If you’d like to help, don’t hesitate to contact the L10n mailing list on l10n@couchdb.apache.org or ping Andy Wenk (awenkhh on IRC).

We’d be happy to welcome you on board!

Events

Job opportunities for people with CouchDB skills

Time to relax!

  • “Harry saw Harry’s glasses. He took handfuls at the foot of the tree, and then walked forward, underneath its glass and beckoned to do something before he changed his wand. Harry had started face-to-face with her late, and then a sudden Death Eaters fed and Madame Maxime, but was left, not sporting red, white. Confused? No, this is not a badly written paragraph from an unreleased book of Harry Potter. Nor has it been taken from any fan theory website. This is an excerpt from a chapter written by a deep learning algorithm developed by Max Deutsch.” – An Algorithm Wrote Five Hilarious Chapters Of Harry Potter
  • After six seasons and 60 episodes, the world of Game of Thrones might seem impenetrable at this point to HBO viewers who aren’t already on board with the series. Thankfully, for those searching for an entry point into Westeros, Game of Thrones has provided a new beginner’s guide to the show narrated by Samuel L. Jackson. The actor doesn’t appear on Game of Thrones but happily lends his trademark expletive enunciation to recap the series up to “Is Jon Snow dead?” – Watch Samuel L. Jackson’s Hilarious ‘Game of Thrones’ Recap
  • “I opened the bottle and took a gentle sniff. Here’s a pro tip: Don’t do that. Not even gently. Lightly waft it just the way you were taught in high school chem, because smelling it even a little is like a dose of sulfur straight to your sinuses, although less brimstone and more menthol, like an adorable family-owned apothecary at the fiery gates of hell.” – I took a weed bath and I kind of freaked out
  • “Nelson says he has a ‘love/hate relationship with those videos. They’re perfect for lighting a spark in people to cook! But, anyone can open a can of biscuits and melt cheese on them … I wanted to try something I didn’t think people really did on the web. So I told myself ‘no music beds.’ I wanted the Natural Sound to help drive the video. Something people can maybe learn a little something from, but, more importantly, something that just looked and sounded good.’” – These Extremely Soothing Cooking Videos Are All About Silence
  • “…one of Europe’s most eminent neuroscientists has devised a simple, four-point plan for channelling stress and turning it to one’s advantage. Professor Ian Robertson’s “four-step brain hack to harness stress” is, he insists, based on scientific research beginning with step one: tell yourself you are excited rather than stressed.” – Forget relaxing – use your stress to become a high achiever

… and also in the news


Filed under: News

by renrutnnej at July 14, 2016 03:59 PM

July 07, 2016

The Offical CouchDB Blog

CouchDB Weekly News, July 7, 2016

Releases

Releases in the CouchDB Universe

PouchDB

Opinions and other News in the CouchDB Universe

… and in the PouchDB Universe

CouchDB Use Cases, Questions and Answers

Use Case:

  • Faraday: Collaborative Penetration Test and Vulnerability Management Platform using CouchDB
  • Sofa King: Sync is a mobile database replication app that allows you to sync datasets from your server to your pocket (i.e., replicating datasets from CouchDB servers to your iOS device)

No public answer on Stack Overflow yet:

PouchDB Use Cases, Questions and Answers

No public answer on Stack Overflow yet:

For more new questions and answers about CouchDB, see these search results and about PouchDB, see these.

Get involved!

If you want to get into working on CouchDB:

  • We have an infinite number of open contributor positions on CouchDB. Submit a pull request and join the project!
  • Do you want to help us with the work on the new CouchDB website? Get in touch on our new website mailing list and join the website team! – www@couchdb.apache.org
  • The CouchDB advocate marketing programme is just getting started. Join us in CouchDB’s Advocate Hub!
  • CouchDB has a new wiki. Help us move content from the old to the new one!
  • Can you help with Web Design, Development or UX for our Admin Console? No Erlang skills required! – Get in touch with us.
  • Do you want to help moving the CouchDB docs translation forward? We’d love to have you in our L10n team! See our current status and languages we’d like to provide CouchDB docs in on this page. If you’d like to help, don’t hesitate to contact the L10n mailing list on l10n@couchdb.apache.org or ping Andy Wenk (awenkhh on IRC).

We’d be happy to welcome you on board!

Events

Job opportunities for people with CouchDB skills

Time to relax!

  • “So what is motivating viewers to seek out and endure content that most would classify as tedium? The phenomenon is called Autonomous Sensory Meridian Response, or ASMR. Colloquially, the sensation felt in the head, neck and spine and the relaxation that follows is referred to as the tingles. Some use the videos to relax. Others find them effective sleep aids.” – A Beginner’s Guide to ASMR, the Most Relaxing Videos on YouTube
  • “Kimmel’s accent is gloriously terrible, as the words ‘not the magician’ somehow become ‘nazi magician,’ a phrase which gets his audition partner more than a little upset. Waltz’s great comedy comes from his utter offense at everything that Kimmel is doing with his terrible accent. The Austrian-born German citizen, of course, could perform the audition in German, so his offense is more than a little understandable.” – Watch Christoph Waltz’s Hysterical Audition For The Siegfried And Roy Movie
  • “It’s so relaxing! I say this as someone who watches several straight hours of How It’s Made to calm myself, but man, that is good stuff. You got some good meltin’ and castin’, some engravin’ and etchin’, some buffin’. There might have even been some smeltin’ in there, who knows? I don’t know what smelting is.” – Here are the 2016 Olympic medals, and an extremely soothing video about how they’re made
  • “‘Kelly!’ My sister screamed at me, her eyebrows cinched together. ‘Are you kidding me?!’ My mom paused from her pacing and looked at me, not knowing if she should laugh or scold me.” – Why it feels so damn good to laugh at a funeral
  • “…until six months ago, I’d never heard of ASMR. All I knew was that I had a fondness for particular sounds and voices. When people spoke to me kindly and softly, it eased some of the symptoms that came with my anxiety disorder. Certain accents and tones made my body feel tingly and calm. I even noticed random noises, like gentle crinkling and paper shuffling, had a tendency to soothe my anxious states.” – How ASMR Videos Help Me Cope with My Anxiety
  • “Trying to calm down during a bout of anxiety is likely futile. Instead, try saying: “I am excited.” Because anxiety and excitement are both arousal emotions and have similar symptoms, it’s easier to get from one to the other than to completely shift gears into calmness.” – How to Turn Anxiety Into Excitement

… and also in the news


Filed under: News

by renrutnnej at July 07, 2016 11:20 AM

June 30, 2016

The Offical CouchDB Blog

CouchDB Weekly News, June 30, 2016

Major Discussions

2.0 & Windows: status update (see thread)

Joan Touzet provides an update on status of the CouchDB 2.0 port to Microsoft Windows.

Releases in the CouchDB Universe

PouchDB

Opinions and other News in the CouchDB Universe

… and in the PouchDB Universe

CouchDB Use Cases, Questions and Answers

Stack Overflow:

no public answer yet:

PouchDB Use Cases, Questions and Answers

Stack Overflow:

no public answer yet:

For more new questions and answers about CouchDB, see these search results and about PouchDB, see these.

Get involved!

If you want to get into working on CouchDB:

  • We have an infinite number of open contributor positions on CouchDB. Submit a pull request and join the project!
  • Do you want to help us with the work on the new CouchDB website? Get in touch on our new website mailing list and join the website team! – www@couchdb.apache.org
  • The CouchDB advocate marketing programme is just getting started. Join us in CouchDB’s Advocate Hub!
  • CouchDB has a new wiki. Help us move content from the old to the new one!
  • Can you help with Web Design, Development or UX for our Admin Console? No Erlang skills required! – Get in touch with us.
  • Do you want to help moving the CouchDB docs translation forward? We’d love to have you in our L10n team! See our current status and languages we’d like to provide CouchDB docs in on this page. If you’d like to help, don’t hesitate to contact the L10n mailing list on l10n@couchdb.apache.org or ping Andy Wenk (awenkhh on IRC).

We’d be happy to welcome you on board!

Events

Job opportunities for people with CouchDB skills

Time to relax!

  • “A great white shark, on the other hand, has an entirely different type of sleep experience, and it’ll likely wake up not knowing where it is. It turns out that the shark sleeps while swimming in a robot like auto-pilot mode. It’s sleep-swimming if you will, but that’s not a medical condition. The whole thing was captured on video for the first time.” – Video catches great white shark sleep-swimming
  • “Relaxation is not all in the mind. It is a full-body experience as this mindfulness exercise will show you. In this guided meditation, Deepak Chopra invites you to lie down in Savasana with eyes closed and arms at your sides.” – A 4-Minute Meditation for Relaxation by Deepak Chopra
  • “Anyone struggling with stress understands that even a little time to relax can help a lot, and Breathe for iPhone is an app that walks you through simple breathing exercises to help you relax, de-stress, and find a little peace.” – Breathe for iPhone Walks You Through Breathing and Relaxation Exercises
  • “Paint: has it ever been so hypnotic?” – Watch Paint Spill into Beautifully Soothing Patterns
  • “We’ll admit it: Being a human is hard. In the GPS Guide below, reader Shakti Rose shares some soothing mantras to help you deal with the complexities of life. Read them when you’re struggling with a problem, feeling low in self-esteem or having any other stressful moments. You’ll be back to a better state of mind in no time.” – These Mantras Will Soothe Your Soul In A Matter Of Minutes
  • “In times of stress or hardship, music can be a portable safe space that provides an escape from whatever is going on in the world. Music lovers everywhere put on headphones and tune out their surroundings, finding that a relaxing melody can sometimes be the best medicine.” – Listen to This: De-stress to a calming playlist for a taxing week

… and also in the news


Filed under: News

by renrutnnej at June 30, 2016 04:04 PM

June 23, 2016

The Offical CouchDB Blog

CouchDB Weekly News, June 23, 2016

Releases

Major Discussions

154 million voter records (see thread)

The good news is CouchDB was in the news. The bad news is hackers breached this particular database.

2.0 & Windows: status update (see thread)

Joan Touzet provides an update on status of the CouchDB 2.0 port to Microsoft Windows.

Extra reference in a commit message (see thread

Ilya Khlopotov inquires as to whether adding a second reference in a commit message could help avoid having multiple tickets opened for the same problem when bug tracking.

Releases in the CouchDB Universe

PouchDB

Opinions and other News in the CouchDB Universe

… and in the PouchDB Universe

CouchDB Use Cases, Questions and Answers

Use Case:

  • Potato: an open sourced Slack clone built on CouchDB!

Stack Overflow:

no public answer yet:

PouchDB Use Cases, Questions and Answers

Stack Overflow:

no public answer yet:

For more new questions and answers about CouchDB, see these search results and about PouchDB, see these.

Get involved!

If you want to get into working on CouchDB:

  • We have an infinite number of open contributor positions on CouchDB. Submit a pull request and join the project!
  • Do you want to help us with the work on the new CouchDB website? Get in touch on our new website mailing list and join the website team! – www@couchdb.apache.org
  • The CouchDB advocate marketing programme is just getting started. Join us in CouchDB’s Advocate Hub!
  • CouchDB has a new wiki. Help us move content from the old to the new one!
  • Can you help with Web Design, Development or UX for our Admin Console? No Erlang skills required! – Get in touch with us.
  • Do you want to help moving the CouchDB docs translation forward? We’d love to have you in our L10n team! See our current status and languages we’d like to provide CouchDB docs in on this page. If you’d like to help, don’t hesitate to contact the L10n mailing list on l10n@couchdb.apache.org or ping Andy Wenk (awenkhh on IRC).

We’d be happy to welcome you on board!

New Committer

  • Nick Vatamaniuc (IRC nick: vatamane, Apache ID: vatamane) has been elected as a CouchDB committer. Welcome to CouchDB, Nick!

Events

Job opportunities for people with CouchDB skills

Time to relax! The “oddly soothing” edition

  • “Need a brief diversion from the workday? Let this drone video of New York City provide a few minutes of pleasant distraction. Set to the soundtrack of Notorious B.I.G.’s ‘Sky’s the Limit,’ the video is rather lovely and calming…” – This Drone Video of New York City Is Oddly Soothing
  • “Ronald Pothier is a potter from Quebec and his soothing teapot tutorial is exactly what you need on a stressful day. Not only is it mesmerizing to watch spinning clay, Pothier’s voice is probably the most calming sound in the world.” – This stoneware pottery tutorial is oddly soothing
  • “I watch these videos every morning. Except for parts 6 and 7–those belong to a brief, experimental phase in the Priwitzer catalog and most hardcore fans agree that they can be ignored by those who are new to his work. Part 13 is straight garbage.” – Watch these oddly soothing Unimog videos
  • “Shepherding is, at its core, moving sheep from one spot to another, so it doesn’t really make for compelling footage. Still, there’s something deeply satisfying about this video showing aerial footage of just that. The music obviously helps, but even if you watch it on mute, it’s pretty relaxing to see this massive blob of sheep sort of hold formation as it’s funneled through a fence. I’m not even high right now!” – Birds eye views of sheep being herded is oddly soothing
  • “The sun, as Space.com explains, is really just like a giant ocean, ebbing and flowing in a normal pattern, only it’s on fire. Unlike the Earth, the sun is not a solid ball, but closer to fluid. When its “magnetic field lines” get too wound up, they snap (much like humans apparently), causing solar flares that send charged particles around space. It may sound like an intense experience, but trust us, watching it in action could double as meditation.” – Watching The Magnetic Activity Of The Sun Is Oddly Soothing
  • “If you’re in the mood for something cute, we recommend turning your attention to this video of a baby tortoise enjoying applesauce for the very first time. This tiny little fella is named Herman and though he seems a bit skeptical at first, he soon realizes how delicious applesauce is, and starts taking huge bites.” – Watching a Baby Tortoise Eat Applesauce Is Oddly Soothing 🍎🐢

… and also in the news


Filed under: News

by renrutnnej at June 23, 2016 02:48 PM

June 16, 2016

The Offical CouchDB Blog

CouchDB Weekly News, June 16, 2016

Releases

  • PouchDB 5.4.4 is out, with bugfixes for custom builds! The site also has a hot new redesign thanks to Nick Colley!

Releases in the CouchDB Universe

  • cbox 0.3.0 (Node) — Maps file directories to CouchDB databases
  • couch-provider 1.0.0 (Node) — Provide the implementation for different request methos to couchdb server. It implements, POST, GET, DELETE, PUT methods for documents and views.
  • couchdb-global-changes-stream 1.0.0 (Node) — Multiplexed persisted global couchdb changes stream across all databases.
  • couchdb-transactions 1.0.0 (Node) — CouchDB all or nothing transactions without deps
  • spicy-action 6.4.0 (Node) – HTTP(S) proxy & Socket.IO relay for CouchDB and others
  • txn 1.2.0 (Node) — Process and update CouchDB data in atomic, all-or-nothing transactions

PouchDB

Opinions and other News in the CouchDB Universe

… and in the PouchDB Universe

CouchDB Use Cases, Questions and Answers

Use Case:

  • safewave.eu — developed in Polymer and hosted by a CouchDB database in Cloudant.

Stack Overflow:

no public answer yet:

PouchDB Use Cases, Questions and Answers

Stack Overflow:

no public answer yet:

For more new questions and answers about CouchDB, see these search results and about PouchDB, see these.

Get involved!

If you want to get into working on CouchDB:

  • We have an infinite number of open contributor positions on CouchDB. Submit a pull request and join the project!
  • Do you want to help us with the work on the new CouchDB website? Get in touch on our new website mailing list and join the website team! – www@couchdb.apache.org
  • The CouchDB advocate marketing programme is just getting started. Join us in CouchDB’s Advocate Hub!
  • CouchDB has a new wiki. Help us move content from the old to the new one!
  • Can you help with Web Design, Development or UX for our Admin Console? No Erlang skills required! – Get in touch with us.
  • Do you want to help moving the CouchDB docs translation forward? We’d love to have you in our L10n team! See our current status and languages we’d like to provide CouchDB docs in on this page. If you’d like to help, don’t hesitate to contact the L10n mailing list on l10n@couchdb.apache.org or ping Andy Wenk (awenkhh on IRC).

We’d be happy to welcome you on board!

Events

Job opportunities for people with CouchDB skills

Time to relax!

  • “You already know that going for a walk and looking at trees are good tools for reducing stress. Ideally, you should be walking underneath those trees to get rid of the most stress. New research out of University of Illinois at Urbana–Champaign and University of Hong Kong confirms that advice – and they didn’t even take people outside.” – Scientists Now Know How Many Trees You Need to See to Relax
  • “According to a February 2016 study in Psychosomatic Medicine: Journal of Biobehavioral Medicine, the cure to stress could be supporting and encouraging our coworkers more. In this study, it’s found that those who verbalize support of their coworkers had decreased levels of stress and increased job satisfaction. It turns out that giving encouragement and support was even more beneficial to individuals than receiving it.” – Want To Decrease Your Stress At Work? Encourage Your Coworkers
  • “People who are high in openness to experience are imaginative, curious, insightful, artistic, clever, and inventive. In my own research, I’ve found that openness to experience is the single best predictor of creative achievement.” – Relaxation Benefits Introverts More Than Extraverts in Boosting Creativity
  • “The Souls games are at their core based on repetition. We explore, we die, and we explore the same area again. Enemies and traps and surprises are all exactly where they were before, nothing changes, so we’ll never be surprised by the same ambush twice unless we forget that it’s there. We’re meant to get complacent, bored even. This is baked into the core of the design.” – The Soothing Terror of ‘Dark Souls’
  • “Conflict wreaks havoc on our brains. We are groomed by evolution to protect ourselves whenever we sense a threat. In our modern context, we don’t fight like a badger with a coyote, or run away like a rabbit from a fox. But our basic impulse to protect ourselves is automatic and unconscious.” – Calming Your Brain During Conflict
  • “…stress causes the brain to secrete a chemical called noradrenaline. The brain doesn’t perform at its best with too little or too much of this chemical. But ‘there’s a sweet spot in the middle where if you have just the right amount, the goldilocks zone of noradrenaline, that acts like the best brain-tuner.’” – There’s a way to train our brains to cope with stress that changes chemistry “as much as any antidepressant”

… and also in the news


Filed under: News

by renrutnnej at June 16, 2016 04:08 PM

June 09, 2016

The Offical CouchDB Blog

CouchDB Weekly News, June 9, 2016

Releases

Releases in the CouchDB Universe

  • couch-update-views 1.0.1 (Node) – Update design views in a CouchDB instance from JSON documents store locally. Update the local JSON document with the design view in CouchDB.
  • ember-couch 1.0.0 (Ember) – An Ember.js adapter for Apache CouchDB
  • flavor-utils 3.1.1 (Node) – Utility functions to manipulate cheminfo flavor system on CouchDB
  • spicy-action 6.3.0 (Node) – HTTP(S) proxy & Socket.IO relay for CouchDB and others

PouchDB

Opinions and other News in the CouchDB Universe

… and in the PouchDB Universe

CouchDB Use Cases, Questions and Answers

Use Case:

  • Nomie, The surprisingly simple way to track all the good and bad in your life, privately. Created by HappyData.

no public answer on Stack Overflow yet:

PouchDB Use Cases, Questions and Answers

Use Case:

Stack Overflow:

no public answer yet:

For more new questions and answers about CouchDB, see these search results and about PouchDB, see these.

Get involved!

If you want to get into working on CouchDB:

  • We have an infinite number of open contributor positions on CouchDB. Submit a pull request and join the project!
  • Do you want to help us with the work on the new CouchDB website? Get in touch on our new website mailing list and join the website team! – www@couchdb.apache.org
  • The CouchDB advocate marketing programme is just getting started. Join us in CouchDB’s Advocate Hub!
  • CouchDB has a new wiki. Help us move content from the old to the new one!
  • Can you help with Web Design, Development or UX for our Admin Console? No Erlang skills required! – Get in touch with us.
  • Do you want to help moving the CouchDB docs translation forward? We’d love to have you in our L10n team! See our current status and languages we’d like to provide CouchDB docs in on this page. If you’d like to help, don’t hesitate to contact the L10n mailing list on l10n@couchdb.apache.org or ping Andy Wenk (awenkhh on IRC).

We’d be happy to welcome you on board!

Events

Job opportunities for people with CouchDB skills

Time to relax!

  • “Throw out your soothing sound machine. Trash all whale sounds CDs. This is the only soundtrack you need to peacefully drift into slumber. This is the deeply relaxing sound of a pizza. A slice of pizza being poked, repeatedly, by someone’s finger.” – Listen to the soothing sounds of a pizza speaking the language of its people
  • “[The] NATO video shows the device in action at an underground testing base in Georgia. The researchers even included a dummy rigged with sensors to study the effects of a blast on the human body. The effect is not to stop, but reduce the overpressure of the incoming shock wave—roughly by half—once it makes contact with the water, according to a 2015 research paper by the scientists. (Caveat: The exact numbers depend on the amount of water released and the size of the blast.) In other words, think of it like a really intense yet calming shower for an explosion.” – This Machine Creates a Relaxing Shower for Violent Tunnel Explosions
  • “This timelapse by JeffHK was taken over the course of two weeks as the ship traveled through the Pacific and into the South China Sea. The trip resulted in some 70,000 images, but only 9,000(!) made it into this video that will look especially great if you happen to have a 4K display that can show it off in all its glory.” – Traveling the World on a Container Ship Looks Surprisingly Soothing
  • “Perhaps you’re in a conference room presenting your project summary to a group when, not even five minutes into your well-rehearsed presentation, a couple of people start fidgeting and seem to be distracted. Or perhaps you’re on a call and an unreceptive client isn’t letting you get a word in edgewise. I have been in these circumstances or similar situations many times. This is the method that has helped me get through high-stress work situations and remind me to reconnect; I call them my Dip Into Bliss tools.” – 3 Quick Tips to De-Stress In a Frustrating Situation
  • “If you’re a little bit of a thrill seeker, you may tend to look above the ground for your needs. Cave diving takes you far below the surface and shows you the quiet, eerie beauty of thousands of years worth of erosion, untouched by anyone or anything other than a few glow worms.” – Cave Diving Is Beautifully Calming – If You Don’t Have Claustrophobia

… and also in the news


Filed under: News

by renrutnnej at June 09, 2016 03:57 PM

June 02, 2016

The Offical CouchDB Blog

CouchDB Weekly News, June 2, 2016

Releases

Releases in the CouchDB Universe

PouchDB

Opinions and other News in the CouchDB Universe

… and in the PouchDB Universe

CouchDB Use Cases, Questions and Answers

Stack Overflow:

no public answer yet:

PouchDB Use Cases, Questions and Answers

Stack Overflow:

no public answer yet:

For more new questions and answers about CouchDB, see these search results and about PouchDB, see these.

Get involved!

If you want to get into working on CouchDB:

  • We have an infinite number of open contributor positions on CouchDB. Submit a pull request and join the project!
  • Do you want to help us with the work on the new CouchDB website? Get in touch on our new website mailing list and join the website team! – www@couchdb.apache.org
  • The CouchDB advocate marketing programme is just getting started. Join us in CouchDB’s Advocate Hub!
  • CouchDB has a new wiki. Help us move content from the old to the new one!
  • Can you help with Web Design, Development or UX for our Admin Console? No Erlang skills required! – Get in touch with us.
  • Do you want to help moving the CouchDB docs translation forward? We’d love to have you in our L10n team! See our current status and languages we’d like to provide CouchDB docs in on this page. If you’d like to help, don’t hesitate to contact the L10n mailing list on l10n@couchdb.apache.org or ping Andy Wenk (awenkhh on IRC).

We’d be happy to welcome you on board!

Events

Job opportunities for people with CouchDB skills

Time to relax!

  • “The background sound of the ships have done almost as much to build their respective worlds as the sets themselves, even if you don’t normally notice them. Since we don’t actually know what a warp drive would sound like, these hums and drones are created by sound effects editors who take tones from a number of sources to create some of the most recognizable spaceship sounds around.” – Exploring the Secrets of Soothing Spaceship Sound
  • “The researchers discovered that neurotic people found “high-anxiety” situations to be more calming for their minds. In another experiment, Newman and Brucks ran a soothing ocean wave soundtrack followed by a tape of honking horns. Surprise: neurotics didn’t find the blare of taxi cab horns annoying. Actually, they found it rather satisfying.” – Why Some People Find Crowded Cities Relaxing—And Others Don’t
  • “Some of the most innovative game designers have been experimenting with games that either offer alternatives to action, or subvert the expected flow of, say, an action game. Here are a list of games that, in some way or another, will put you in a clearer headspace.” – 8 Relaxing Video Games To Help You Decompress After ‘Overwatch’ Binging
  • “No matter how active the resident of northern Thailand’s Elephant Nature Park may be, hearing the lullaby sung by her trainer Lek will instantly lull her into a deep, fitful sleep, as if she were a tiny infant as opposed to gargantuan land mammal.” – This Elephant Is No Match For The Soothing Sounds Of A Lullaby
  • “Had a busy day? Tired of life in general? Netflix has heard the cries of stressed-out people everywhere, and is now streaming Bob Ross’ calming painting videos to accompany your chill-out sofa sessions. That’s right, the full Beauty is Everywhere collection is now available on the streaming service.” – Netflix now streaming calming painter Bob Ross to remind us that it’s totally fine to be friends with a tree

… and also in the news


Filed under: News

by renrutnnej at June 02, 2016 07:46 PM

May 31, 2016

The Offical CouchDB Blog

Testing clustered applications – like CouchDB

There’s days when you want to hug your tests—that’s especially true when your project takes longer to complete or is being refactored. Perhaps it’s that you stay able to move forward without fear. This blog post picks one particular topic in the test space: integration tests for clustered applications.

There’s particular challenges to them because of CAP [1], so this post will cover how to handle those challenges. My recent interest in this stems from adjusting the integration tests of CouchDB [2] to cover the new cluster feature that will be part of version 2.0 offering an API equal (or close) to what the non-clustered version 1.6 could provide. The post is certainly far away from featuring something outstanding (and it should be mentioned the tests existed before, written by some very bright people [5]). Nonetheless, I’ve learned some lessons along the way that maybe you’ll find useful as well.

While unit tests do a stellar job (and should be the first to begin with anyway), there are some aspects they won’t cover; hence the reason you need integration / acceptance tests that look at larger parts or the application as a whole and make sure all parts fit. These tests are far from easy, however, and they’re even harder to create and maintain than unit tests.

They’re hard to get stable and really meaningful in the sense that when they’re red, they’re red for a reason and point out an important spot to check. When they’re never red (despite your application being hopelessly broken), they’re meaningless. When they’re red without real cause (maybe re-running makes them green again), you can bet that no one looks at them after a week.

As CouchDB tries to maintain API compatibility (there is an existing test suite for version 1.6), the logical step for 2.0 is running the same suite against 2.0 (i.e., a cluster) to see what happens. Clustering means there are several nodes working together to serve requests with data being split into shards. For every answer, several nodes / shards have to be queried to produce a combined result.

Long story short—running the tests did not produce much of a result except loads of red—as clusters add some powerful (and quite nasty) specifics to the game.

A good way to explain these specifics is bespoke CAP theorem [1]: basically, it assumes that an application cannot at the same time be

  • Cconsistent (i.e., whichever endpoint you ask, you get the latest and only-valid response)
  • Aavailable (i.e., you can get an answer immediately, even with ongoing work on other endpoints)
  • Ppartition tolerant (i.e., there are several parts / endpoints operating in parallel)

Instead, there is always a tradeoff to be balanced out individually. CouchDB (like many others) decided to make a tradeoff at the C-part, specifically, there is no guarantee that all endpoints will (immediately) produce the same and only-true result (e.g., because the cluster has not fully synced just yet). Furthermore, combining the result has the potential for further surprises (because naturally-ordered results from several machines might be combined). Nothing here is specific to CouchDB, it’s a general tradeoff in the CAP space.

What this consistency issue now means is that many of the assertions which held true in the non-clustered version are no longer always valid. The most nasty thing here is: test might be green one run and red the next and green the next and so on. You could really say that the C stands for Crazyheisenbug [3] / [4] , i.e., absolute truth is replaced with probability.

Shame you can’t test probability. And you shouldn’t try either—rather, a way is to dig a little deeper into how the cluster works to come up with rewritten tests whose assertions will always be true and meaningful, i.e., running the test gives a valuable statement about whether or not the current codebase is sound (as opposed to expect(true).toBeTruthy()😉 ).

It’s up to you to judge whether that attempt succeeded, but here are the lessons learned:

Lesson learned #1: Think long and hard about ordering

Apart from naive balancing (like modulo-ing some ID to decide the one and only system to always handle some data without ever combining several systems’ results), the result in a cluster is computed dynamically from several shards that might reside in several processes or even several nodes.

Combining several (partial) lists coming from several shards into one list breaks some assumption: First, for time-based lists, there is no absolute guarantee of time; second, for sequence-based lists, there are several systems with their own sequence (CouchDB solved this by appending a hash to the numbered sequence); and lastly, for several identical keys there is not necessarily the expected natural order any more (because results are copied together from shards and the order can get scrambled).

When looking at the _changes feed (a nice CouchDB feature for getting immediate feedback on changes in a database): say you insert four documents (1, 2, 3, 4) in order to the cluster and then query the _changes feed. _changes will contain all four—but in ANY order (not necessarily 1, 2, 3, 4— it can also be 3, 2, 1, 4 or 4, 2, 1, 3 or even 4, 3, 2, 1, you simply don’t know).

Implication for re-writing: go away from array[0].id==1 and so on to array.length==4 && array.contains(1) and so on. Likewise, when having several identical keys, get away from accidentally testing some implicit order and checking for array lengths (and contains-checks, when the set is complete).

Lesson learned #2: Make quora work for you

When redundancy is involved, clustering solutions may return "ok" before all copies are written. CouchDB does this as well.

When query-ing immediately after getting the "ok" (e.g., for an assertion), you will run into an unexpected result. Much of this phenomenon is mitigated by a read-quorum, i.e., the system tries to read several sources. When both read and write quorums are a qualified majority, you’re normally safe.

Still, situations can occur when not all quora are adhered to (example, special queries that don’t care about quora). In that case, setting the write quorum equal to the number of nodes will help—as everything is written. It’s a little counter-intuitive (and a little against the idea of a cluster), but for testing it does help.

It’s probably worthwhile to remember that a lack of consistency is worse for testing than for real life. Imagine liking something on Facebook and then checking the activity log. Maybe (hypothetically) the like is not there right away, but a couple of seconds later it is—who cares? For tests, you can hardly wait for a minute after each action before asserting, so helping one’s luck a little bit seems quite legitimate.

Lesson learned #3: Cut down on the number of tests

Okay, that’s not a very cluster-specific one. But with getting a stable result becoming even harder in a cluster, it’s very valid.

It’s per se much better to have few good tests than many bad ones. Not only because of false alarms that render the whole suite useless, but also, at the end of the day, you’d want to have a reliable and meaningful statement on the application.

Integration tests will never cover all (and trying ends you up in a really nasty place), but there’s a few main paths (often those you try manually first) that tell a LOT about what is up (or down). So, you can comment out / ignore tests you don’t have time to fix right away (and that were not one of the few critical paths, at least the way you see things), and looking back, this seems like a good and valid idea.

Lesson learned #4: The API is not the same

It’s not just that clusters are different in terms of how they aggregate (and behave in general). It’s also the case that some corner cases just have not been cluster-ized (or in fact cannot be cluster-ized ever).

So the API will be different. Sometimes the test becomes obsolete, sometimes it’s important for meaningful tests to think up an alternative.

Lesson learned #5: Debug deeply

Some error messages are not what they seem to be. Like a "invalid character in HTTP".

When re-checking the test’s call with curl --raw, however, it turned out to be a grossly wrong answer with an HTTP 500 factored in after the initial header because of too little timeouts.

Long story short: not only will tests be more stable and meaningful, you’ll also discover important shortcomings along the way. So don’t settle until you really have a good answer. It’s tedious and you might not follow through every time, but it’s a helpful reminder that stability is vital and these root cause analyses pay off.

Sometimes, race conditions just mean that a tiny time later the response is correct and trying three times with brute force would do the trick. It shouldn’t.

Lesson learned #6: Start with one node and work up (to three)

One node still exclude lots of issues faced in clustering—so starting with one node feels like cheating. And it is.

But: things that don’t work on one node will never run on three.

They’re even harder to fix with three. After fixing one, there’s lots of work left to have it work on three, but at least you can work on a halfway stable basis.

Lesson learned #7: Continue the test flow

Maybe you’re lucky and your test is split up in tiny little routines, and the next one (successfully) runs even when its predecessor fails.

If you’re not that lucky (or the scenario requires steps to build upon one another) and you discover a bug in the application that prevents huge parts from the remaining test from running: put in // TODO: after fix of Tick-123 and make sure the rest of the test runs.

You’ll certainly find many other issues along the way—and get the good feeling of knowing how far you actually are (and how far the software is, too).

Lesson learned #8: Start w/ new and empty DBs

It’s hard to undo all actions performed in a test DB—at least fully and reliably. It’s far better to always start of a new and empty one.

One thing to try is deleting the test DB immediately before executing a test re-creating it. It gets tricky though when cleaning up DB resources takes some time.

CouchDB is fortunate to be able to create new databases with a single PUT so Jan Lehnardt (@janl on Twitter) came up with the idea of dicing the database names every time. That way, every test starts off a reliable and blank new DB with a unique name (and another source of Heisenbugs is gone).

As good citizens, tests still clean DBs after running. But a crashing tests or a forgotten delete doesn’t hurt.

Lesson learned #9: Use throttling (and use re-try as very last resort only)

Your laptop has computing power in abundance—the CI infrastructure might not (or at least not predictably). So an idea I found useful is throttling CPU (e.g., reduce # of cores—a VM helps here) and re-running the tests.

In fact, running them several times over. Lots of additional issues will pop up for sure. Some are bound to a not-yet-sufficiently-synced state.

Try to apply one of the points above first to remedy, but sometimes, there’s just no way but re-trying the call and assertion as the 2nd / 3rd attempt gave the system enough time to complete background work.

Over-using produces arbitrarily red tests, but not using at all provides them even more often. Still—when opting for three re-tries, the fourth might have done the trick. It’s no good and possibly will never be, but it’s a last resort when there’s no other way of reliably asserting.

Lesson learned #10: Always (always!) keep a backed-up VM

I should have known better and was sloppy. It’s SO hard to re-setup everything (all Erlang RPMs, etc.) after doing one stupid mistake. The second time round, you, too, will really make sure to have the VM disk file backed up and you can go back without the hassle.

Summary

Clusters are very different from single instances. And that cannot be hidden from anyone—clustering is not (fully) transparent. A better (and less painful) way is to understand a little bit about how they work and how you can work with them. Even with less deterministic outcomes, you can assert!

Sometimes the process is tedious and nerve-wracking, but eventually, you’ll come to a better, more meaningful, and ultimately more valuable test suite. None of the above is very elaborate or CouchDB-specific. If you like, take it as recipe for testing your own clustered applications. Hopefully you find it useful and feedback is appreciated if you do. [Contact info here]

About the author

Sebastian Rothbucher (@sebredhh on Twitter) is a Web developer and CouchDB contributor. Coming from VB/Java, he now enjoys the JavaScript side of life (and spends some rainy Hamburg Saturdays hacking productivity tools and Web apps using CouchDB).

References


Filed under: News, Reports

by andywenk at May 31, 2016 08:16 AM

May 26, 2016

The Offical CouchDB Blog

CouchDB Weekly News, May 26, 2016

Major Discussions

The state of filtered replication (see thread)

Stefan du Fresne is looking for a way to increase replication performance, or a way to safeguard against many replicators unacceptably degrading couchdb performance.

Post on Trigger (see thread)

This email discussion comes from new contributor Reddy, proposing the use of triggers to post arbitrary JSON to arbitrary endpoints.

Releases in the CouchDB Universe

  • changemachine 1.0.0 (Node) – Handle CouchDB change notifications using Neuron
  • changemate 1.0.0 (Node) – Change Notification for CouchDB
  • couchdb-wedge 0.0.1 (Node) – CLI and node modules for doing bulk operations like deleting all databases on a server or replicating all databases from one server to another.
  • iobroker.sql 1.0.0 (Node) – Log state sql in a two-stages process (first to Redis, then to CouchDB)
  • nano-records 1.1.0 (Node) – Utility returns objects for interacting with CouchDB.
  • poms 2.0.0 (Ruby Gem) – Interface to POMS CouchDB API
  • replimate 1.0.0 (Node) – CouchDB (using _replicator db) replication helpers
  • simple-couchdb-view-processor 1.0.1 (Node) – Process documents in a CouchDB view with the goal to remove them from the view

PouchDB

Opinions and other News in the CouchDB Universe

CouchDB Use Cases, Questions and Answers

Use Case:

Stack Overflow:

no public answer yet:

PouchDB Use Cases, Questions and Answers

Use Case:

no public answer on Stack Overflow yet:

For more new questions and answers about CouchDB, see these search results and about PouchDB, see these.

Get involved!

If you want to get into working on CouchDB:

  • We have an infinite number of open contributor positions on CouchDB. Submit a pull request and join the project!
  • Do you want to help us with the work on the new CouchDB website? Get in touch on our new website mailing list and join the website team! – www@couchdb.apache.org
  • The CouchDB advocate marketing programme is just getting started. Join us in CouchDB’s Advocate Hub!
  • CouchDB has a new wiki. Help us move content from the old to the new one!
  • Can you help with Web Design, Development or UX for our Admin Console? No Erlang skills required! – Get in touch with us.
  • Do you want to help moving the CouchDB docs translation forward? We’d love to have you in our L10n team! See our current status and languages we’d like to provide CouchDB docs in on this page. If you’d like to help, don’t hesitate to contact the L10n mailing list on l10n@couchdb.apache.org or ping Andy Wenk (awenkhh on IRC).

We’d be happy to welcome you on board!

Events

Job opportunities for people with CouchDB skills

Time to relax!

  • “While a competition may seem like a strange way to de-stress, participants seemed enthused. ‘This event is highly recommended for those who have migraines or complicated thoughts,’ said the winner, Shin Hyo-Seob, aka Crush, a popular rapper who entered the contest to unwind after recording an album.” – This Relaxation Competition Finds Out Who Can Chill the Best
  • “The visible impacts of depression and stress that can be seen in a person’s face — and contribute to shorter lives — can also be found in alterations in genetic activity, according to newly published research.” –Genes linked to effects of mood and stress on longevity identified
  • “In an American accent, she describes her routine, switching out a few details from the original. Instead of an ice pack over her eyes, she uses two cold spoons, a big jar of Vegemite is featured in the fridge (seemingly a shout-out to all Australians), and the Les Misérables poster is replaced, naturally, by Hamilton. ‘There is an idea of Margot Robbie, some kind of abstraction. But there is no real me. Only an entity, something illusory,’ she says as she peels the iconic clear, rubbery face mask off. ‘Maybe you can even sense our lifestyles are probably comparable. I simply am not there.’” – Watch Margot Robbie in a Strange, Oddly Soothing American Psycho Spoof
  • “‘Books are places we can lose ourselves and at the same time find the answers to whatever we might be searching for, even if we don’t quite know what that is,’ said the festival’s artistic director Jemma Birrell.” – Ask a bibliotherapist: how books can help soothe troubled minds
  • “Whether you enjoy making your own miniature fake foods or not, we think it’s safe to say watching someone craft them is spellbinding. The tiny details, the silent patience, and the absurd proportions all combine to create a relaxing stew of motion — almost like meditation but with more craft resin!” – This video of someone making ramen miniatures is the most relaxing thing on YouTube
  • “The researchers showed that programmers’ stress levels were a better predictor of the quality (and thus the maintainability) of their code than the more costly process of code-review, where another programmer checks a colleague’s work before it is put into production, in order to ensure that it will be clear to future maintainers of the system.” – Programmers’ stress levels can accurately predict the quality of their code

… and also in the news


Filed under: News

by renrutnnej at May 26, 2016 10:05 AM

May 19, 2016

The Offical CouchDB Blog

CouchDB Weekly News, May 19, 2016

Board Report

Jan Lehnardt shared the May 2016 Board Report with the mailing list this week.

Styleguide for Fauxton

Courtesy of Justin McDavid and the Cloudant development team at IBM Cloudant, there is now a working style guide for Fauxton!

Major Discussions

Post on Trigger (see thread)

This email discussion comes from new contributor Reddy, proposing the use of triggers to post arbitrary JSON to arbitrary endpoints.

Releases in the CouchDB Universe

  • blue-cot 2.0.2 (Node) – bluebird promise-based CouchDB library with no surprises (in a good way)
  • couchdb_connector 0.3.0 (Erlang) – A connector for CouchDB with support for views and authentication.
  • couchdb-client 1.0.8 (Node) – A simple CouchDB client
  • couchdb-wedge 0.0.0 (Node) – CLI and node modules for doing bulk operations like deleting all databases on a server or replicating all databases from one server to another.
  • md-to-couch 0.3.1 (Node) – Converts list of markdown files with front matter into a CouchDB compatible JSON object, one document per file
  • poms 1.2.2 (Ruby Gem) – Interface to POMS CouchDB API
  • well-groomed-feast 9.2.5 (Node) – Voicemail Application for FreeSwitch with CouchDB back-end

PouchDB

Opinions and other News in the CouchDB Universe

… and in the PouchDB Universe

CouchDB Use Cases, Questions and Answers

Use Case:

  • StackEdit – Online Markdown Editor that syncs withCouchDB, Dropbox, Google Drive, etc.

Stack Overflow:

no public answer yet:

PouchDB Use Cases, Questions and Answers

no public answer on Stack Overflow yet:

For more new questions and answers about CouchDB, see these search results and about PouchDB, see these.

Get involved!

If you want to get into working on CouchDB:

  • We have an infinite number of open contributor positions on CouchDB. Submit a pull request and join the project!
  • Do you want to help us with the work on the new CouchDB website? Get in touch on our new website mailing list and join the website team! – www@couchdb.apache.org
  • The CouchDB advocate marketing programme is just getting started. Join us in CouchDB’s Advocate Hub!
  • CouchDB has a new wiki. Help us move content from the old to the new one!
  • Can you help with Web Design, Development or UX for our Admin Console? No Erlang skills required! – Get in touch with us.
  • Do you want to help moving the CouchDB docs translation forward? We’d love to have you in our L10n team! See our current status and languages we’d like to provide CouchDB docs in on this page. If you’d like to help, don’t hesitate to contact the L10n mailing list on l10n@couchdb.apache.org or ping Andy Wenk (awenkhh on IRC).

We’d be happy to welcome you on board!

Events

Job opportunities for people with CouchDB skills

Time to relax!

… and also in the news


Filed under: News

by renrutnnej at May 19, 2016 05:55 PM

May 12, 2016

The Offical CouchDB Blog

CouchDB Weekly News, May 12, 2016

Releases in the CouchDB Universe

  • couch-init2 2.1.0 (Node) – Opiniated CouchDB databases initializer
  • couchdb-builder 0.1.0 (Node) – A tool for building CouchDB documents from flat files.
  • hub.docker.com/couchdb 1.6.1 (Docker image) – Dockerfile was updated
  • logstash-input-couchdb_changes 3.0.1 (Ruby Gem) – This gem is a Logstash plugin required to be installed on top of the Logstash core pipeline using $LS_HOME/bin/logstash-plugin install gemname.
  • md-to-couch 0.2.0 (Node) – Convert list of markdown files with front matter into a CouchDB compatible JSON object, one document per file
  • node-couch 1.0.0 (Node) – CouchDB library for Node.js
  • poms 1.2.2 (Ruby Gem) – Interface to POMS CouchDB API
  • relaxo 0.4.7 (Ruby Gem) – Relaxo provides a set of tools and interfaces for interacting with CouchDB.
  • relaxo-model 0.4.11 (Ruby Gem) – Relaxo Model provides a framework for business logic on top of Relaxo/CouchDB.
  • rx-couch 1.7.0 (Node) – RxJS-flavored APIs for CouchDB

PouchDB

Opinions and other News in the CouchDB Universe

… and in the PouchDB Universe

CouchDB Use Cases, Questions and Answers

Use Case:

Stack Overflow:

no public answer yet:

PouchDB Use Cases, Questions and Answers

Stack Overflow:

no public answer yet:

For more new questions and answers about CouchDB, see these search results and about PouchDB, see these.

Get involved!

If you want to get into working on CouchDB:

  • We have an infinite number of open contributor positions on CouchDB. Submit a pull request and join the project!
  • Do you want to help us with the work on the new CouchDB website? Get in touch on our new website mailing list and join the website team! – www@couchdb.apache.org
  • The CouchDB advocate marketing programme is just getting started. Join us in CouchDB’s Advocate Hub!
  • CouchDB has a new wiki. Help us move content from the old to the new one!
  • Can you help with Web Design, Development or UX for our Admin Console? No Erlang skills required! – Get in touch with us.
  • Do you want to help moving the CouchDB docs translation forward? We’d love to have you in our L10n team! See our current status and languages we’d like to provide CouchDB docs in on this page. If you’d like to help, don’t hesitate to contact the L10n mailing list on l10n@couchdb.apache.org or ping Andy Wenk (awenkhh on IRC).

We’d be happy to welcome you on board!

Events

Job opportunities for people with CouchDB skills

Time to relax!

  • “The GIF is mesmerizing. It starts out as a flat line that turns into a triangle, which is then enveloped by a square. New shapes continue to build on the old ones, eventually turning into an octagon before it all collapses in on itself to start the routine over again. The idea is to breathe in as the shapes expand, then out as they fold down (or vice-versa), for about five seconds each.” –  This Calming GIF Can Help You Handle Stress
  • “Living in a neighborhood where you have lots of opportunity to gaze at blue spaces — bodies of water like the sea — is associated with lower levels of stress, researchers found.” – Blue spaces beat green spaces when it comes to mental health, study finds
  • “No, not all classical music is relaxing. Former Secretary of State Condoleezza Rice, an excellent pianist, once explained that to Vogue magazine. Vogue congratulated her on her musical pursuits and said it must be relaxing. Rice’s wry reply: ‘Playing Beethoven and Brahms is not relaxing.’” – Classical music pieces that can soothe your soul
  • “If mornings are dominated by the commute and school-run and email—all the rough-and-tumble of modern life, especially in cities—they’re something to get through, rather than to celebrate. But mornings are also special. They come before everything else in the day, so what you do with them matters.” – To be more productive, try angling your morning toward what brings you joy
  • “We just came across one of the greatest videos we’ve ever seen – one that has successfully lulled our brains into a state of relaxation. It’s called ‘Memories of Paintings’ and it beautifully features dancing paint.” – This soothing video of dancing paint will help you fall asleep
  • “It might comfort you to know, though, that there are a lot of us currently enjoying a solo act. More than 25 percent of American homes today only have on person in it, a number that has tripled since 1970. And we’re having fun.” – 8 Surprisingly Calming Things To Do Alone

… and also in the news


Filed under: News

by renrutnnej at May 12, 2016 05:21 PM

May 05, 2016

The Offical CouchDB Blog

CouchDB Weekly News, May 5, 2016

Major Discussions

CouchDB and Kubernetes (see thread)

Adam Kocoloski is looking into how we might best deploy a CouchDB 2.0 cluster in a container environment, and has proposed putting together a proof of concept to use the Kubernetes project design.

npm fauxton (see thread)

Michelle Phung has updated the npm fauxton release to version 1.1.3! The rest is just conversational troubleshooting.

Releases in the CouchDB Universe

PouchDB

Opinions and other News in the CouchDB Universe

… and in the PouchDB Universe

CouchDB Use Cases, Questions and Answers

Use Case:

  • alwaysdata, Shared servers: three new developments

no public answer on Stack Overflow yet:

PouchDB Use Cases, Questions and Answers

Stack Overflow:

no public answer yet:

For more new questions and answers about CouchDB, see these search results and about PouchDB, see these.

Get involved!

If you want to get into working on CouchDB:

  • We have an infinite number of open contributor positions on CouchDB. Submit a pull request and join the project!
  • Do you want to help us with the work on the new CouchDB website? Get in touch on our new website mailing list and join the website team! – www@couchdb.apache.org
  • The CouchDB advocate marketing programme is just getting started. Join us in CouchDB’s Advocate Hub!
  • CouchDB has a new wiki. Help us move content from the old to the new one!
  • Can you help with Web Design, Development or UX for our Admin Console? No Erlang skills required! – Get in touch with us.
  • Do you want to help moving the CouchDB docs translation forward? We’d love to have you in our L10n team! See our current status and languages we’d like to provide CouchDB docs in on this page. If you’d like to help, don’t hesitate to contact the L10n mailing list on l10n@couchdb.apache.org or ping Andy Wenk (awenkhh on IRC).

We’d be happy to welcome you on board!

Events

Job opportunities for people with CouchDB skills

Time to relax!

  • “Pop on some headphones and soak in the sounds of the Force-rich planet’s flora and fauna. Jubba bird calls mix with the steady trickle of flowing water and croaking amphibians. Recede into the fog with the echoes of chirps and splashes. You can practically smell the smoke from the small fire inside Yoda’s hut.” – 94 Minutes on Dagobah Is Basically a Relaxation Tape for Star Wars Nerds
  • “If there’s one thing that can be said of buzzwords, it’s that they almost always fall by the wayside in the end. Yet in the field of mental health, one buzzword has survived the best efforts of critics and naysayers – ‘mindfulness.’” – Relax – there’s new evidence that mindfulness actually works
  • “Plunging over a mile deeper than the 29,029 feet high peak of Mount Everest, the trench is home to some of the weirdest creatures we’ve ever seen. Right nearby, on a ridge called the Enigma Seamount, is where researchers found this beautiful, spider-like jellyfish 2.3 miles below the surface.” – Watch This Soothing Deep Sea Jellyfish Swim
  • “Owen Harris and Niki Smit’s Deep VR experience requires some set-up, beyond just strapping on a virtual reality headset. Participants also wear a device around their diaphragm that tracks their breathing; this device serves as the “controller,” because only the use of deep breathing techniques will allow them to progress forward in Deep.” – Deep, a Meditative Virtual Reality Experience, Teaches Breathing Techniques & Relaxation
  • “No matter how digitally interconnected the world gets, cargo ships will always be necessary. The ocean will always separate the continents, so ships will always be needed to move physical goods, and the University of London’s Energy Institute has created a gorgeous visualization of their movements and carbon footprint.” – Soothing Visualization Shows How Many Thousands of Cargo Ships Travel the Sea
  • “Well, after a 17-year incubation period spent underground, cicada’s in 2016 are set to emerge and greet the world for the first time. And not wanting any cicada to feel out of the loop or likely to make some embarrassing social faux-pas at a party, Oliver took it upon himself to let these hibernating cicada’s know what life is like in the present day.” – John Oliver recaps 17 years of pop culture history in hilarious new video

… and also in the news


Filed under: News

by renrutnnej at May 05, 2016 02:45 PM

April 21, 2016

The Offical CouchDB Blog

CouchDB Weekly News, April 21, 2016

Releases

PouchDB 5.3.2 is released, with some bugfixes for replication, ajax, and integration with Cordova SQLite. See the CHANGELOG for more.

Major Discussions

Nolan Lawson elected as CouchDB committer (see thread)

As you will see below, the CouchDB Project Management Committee has elected Nolan Lawson as a CouchDB committer. Welcome and congrats Nolan!

On dependency management and CI issues associated with it (see thread)

In this discussion Ilya Khlopotov has suggested some potential changes to the workflow to account for CI failures and other issues with outdated dependencies. Other folks have chimed in with responses so it’s a thread worth reviewing.

Admin party considered harmful (see thread)

Here’s a whole discussion posed by Paul Hammant on whether admin party is “considered harmful” or not.

Closing in on 2.0 (see thread)

Only two issues remain in the way of CouchDB 2.0 being released and we need your help to solve them. The plan is to release a CouchDB 2.0.0 RC1 when the two issues above are resolved and do the blocking docs issues, Windows and Mac builds etc. during the RC timeframe.

Adam Kocoloski is now an IBM Fellow (see thread)

Adam made IBM Fellow! He’s now one of only 267-ish individuals who’ve been awarded this honour for their contributions to IBM and computing in general. Be sure to congratulate him when you get the chance.

Releases in the CouchDB Universe

  • couchmagick 2.3.0 (Node) – Couchmagick runs ImageMagicks convert on CouchDB documents.
  • jsonobject-couchdbkit 0.7.4.0 (Python) – a fork of couchdbkit that replaces couchdbkit.schema with a thin wrapper around jsonobject (which was, incidentally, written as a way faster replacement for couchdbkit.schema.)
  • node-couchdb 1.1.0 (Node) – ES2015-compatible package to interact with CouchDB
  • spicy-action 6.2.0 (Node) – Web proxy for CouchDB and others, plus Socket.IO relay

PouchDB

Opinions and other News in the CouchDB Universe

… and in the PouchDB Universe

CouchDB Use Cases, Questions and Answers

Stack Overflow:

no public answer yet:

PouchDB Use Cases, Questions and Answers

Stack Overflow:

For more new questions and answers about CouchDB, see these search results and about PouchDB, see these.

Get involved!

If you want to get into working on CouchDB:

  • We have an infinite number of open contributor positions on CouchDB. Submit a pull request and join the project!
  • Do you want to help us with the work on the new CouchDB website? Get in touch on our new website mailing list and join the website team! – www@couchdb.apache.org
  • The CouchDB advocate marketing programme is just getting started. Join us in CouchDB’s Advocate Hub!
  • CouchDB has a new wiki. Help us move content from the old to the new one!
  • Can you help with Web Design, Development or UX for our Admin Console? No Erlang skills required! – Get in touch with us.
  • Do you want to help moving the CouchDB docs translation forward? We’d love to have you in our L10n team! See our current status and languages we’d like to provide CouchDB docs in on this page. If you’d like to help, don’t hesitate to contact the L10n mailing list on l10n@couchdb.apache.org or ping Andy Wenk (awenkhh on IRC).

We’d be happy to welcome you on board!

New Committer

  • Nolan Lawson (IRC nick: nolanlawson, Twitter: nolanlawson) has been elected as a CouchDB committer. Welcome to CouchDB, Nolan!

Events

Job opportunities for people with CouchDB skills

Time to relax!

  • “Look at this baby polar bear. Look at her and have your heart melt at the sight of her. Look at how excited she is to meet a traffic cone in her playground. Her name is Nora, and she made her public debut at the Columbus Zoo on Friday.” – Sit back, relax and watch this baby polar bear play with a traffic cone
  • “‘There is a saying about wine that I really like and it’s something like this, ‘The first glass of wine is all about the food, the second glass is about love and the third glass is about mayhem.’ I really wanted to see it for myself if that affirmation was in fact true.’” – Viral photos capture how people relax after 1, 2 and 3 glasses of wine
  • “At 4:00am this morning, Adult Swim aired a brand new piece of delightful weirdness from comedian Joe Pera called Joe Pera Talks You to Sleep, and if you’re looking for 11 minutes of relaxing, stress-free reflections on Stephen Hawking, fireworks, pretzels, The Snack Belt, barns, how insignificant we all are in this vast universe, and getting turned down by women, Pera is here to chat about ‘anything that will help relax you into sleep and keep your mind off of the day-to-day worries that make you anxious, like remembering to refill the ice cube trays and race relations.’” – Calm Down to the Soothing Sounds of ‘Joe Pera Talks You to Sleep’
  • “You know what a bicycle looks like… right? Two wheels, handlebars, pedals, some crossbars. But get a piece of paper and try to draw one exactly, you might be surprised at the results. Even for people who ride bikes regularly, it can be very hard to remember exactly how all of the parts fit together. (Not convinced? Go ahead and try drawing one from memory now — no googling.)” – The strange, hilarious pictures you get when you ask random people to draw a bicycle
  • “The result is more failed chicken dance than Saturday Night Fever (1977), though, as it quickly becomes apparent that trying to get Wobble Man’s Jell-O-like body to match whatever pose you’re assigned is somewhat like trying to herd cats. His body parts just do not want to listen, and he moves like a dancer that’s half-forgotten his choreography and is trying to figure it out on the fly by copying his neighbors. Also, if you lift him up by his feet, he apparently has anti-gravity powers ¯\_(ツ)_/¯” – Hilarious new game gives yoga the QWOP treatment
  • “Mental blocks and creative ruts are the WORST, and sadly inevitable. There are countless apps that promise to help you get your productivity back on track, but nondigital activities can work just as well for giving your brain a break and restoring your mental acuity. As a fierce quartet of philosophers once said: ‘Free your mind and the rest will follow.’” – 5 Non-Apps To Boost Your Productivity

… and also in the news


Filed under: News

by renrutnnej at April 21, 2016 04:30 PM

March 31, 2016

The Offical CouchDB Blog

Drupal ♥ CouchDB

For most web sites and software there are three pillars, code, configuration, and content. Code is always the easy one, stick it in git, then deploy it anywhere with full revisions and accountability. Historically Drupal has struggled with the other two aspects, until Drupal 8, which was launched in late 2015. This added configuration management, stored in yaml files the configuration could now be version controlled alongside the code. Now all that’s left to be solved is content.

Previously in Drupal there have been two main options. Add content in production, or use the Deploy module, which implemented a custom REST API to copy content to another Drupal site. Since it was a custom REST API it wasn’t very well documented, issues were often found and it was difficult to integrate with. The most common suggestion was to just add content in production, this worked for many, however if there were many legal or editorial steps then this was not an option.

During the development of Drupal 8, Dick Olsson, the maintainer of the Deploy module, started to look for a better solution. After a lot of research it seemed all of the content storage and replication problems had already been solved, in CouchDB. Along with Andrei Jechiu and Tim Millwood, Dick developed a suite of contributed modules for Drupal that follow the CouchDB Replication protocol.

Data storage
Drupal doesn’t store revisions for all content, and for the content that is revisionable this is not enforced. Therefore the first step was altering the schema for all content to allow us to store revisions for all content. There were also a bunch of other things we needed to store to be compatible with CouchDB, such as, a revision hash, a sequence ID, and a revision tree. Another issue we had is Drupal has many types of content, and modules can define new types of content, so without looping through all content types, then all content, we had no way of knowing which UUID related to which content. To solve this we created a UUID index in a simple key value store. Many of these features were developed into the Multiversion module.

API endpoints
Drupal 8 core ships with a REST module, which provides a bunch of API end points, we expanded on these to provide all endpoints compatible with the CouchDB protocol. This provided all the needed headers and document attributes required by the protocol. The Drupal content was then normalized (and denormalized) to provide valid JSON-LD documents. The Replication and RELAXed Web Services modules provide all the functionality to expose the CouchDB compatible API endpoints.

Replication
Initially the native CouchDB replicator was used to replicate from Drupal to CouchDB, CouchDB to Drupal, and Drupal to Drupal. Tests were then setup to work with PouchDB allowing Drupal to be used as a backend for decoupled web apps.

As part of Google Summer of Code 2015 a student worked on a PHP version of the CouchDB replicator, this was worked into the Drupal modules to allow for replication between CouchDB compatible endpoints via the Drupal UI without using CouchDB.

Conclusion
Drupal now has an awesome content staging solution allowing users to stage content on one site then replicate all content to a live site. It also allows for backing up, or storing content, within a CouchDB database. Then users can also decouple their front-end by replicating content to PouchDB.

Further reading
Drupal Deploy – The team behind this work.
Multiversion – Used for Drupal storage updates.
RELAXed Web Services – Provides the API endpoints.
Deploy – The UI for replicating between sites.
PHP CouchDB Replicator – Replicate using PHP.
Improving Drupal’s content workflow


Filed under: News

by timmillwood at March 31, 2016 09:00 AM

March 24, 2016

The Offical CouchDB Blog

CouchDB Weekly News, March 24, 2016

Cloudant❤ Apache CouchDB™ 2.0: Sandbox Cluster Now Available

Last week IBM announced that the most awaited release of Cloudant is almost here — a release that realigns Cloudant with the CouchDB 2.0 code base. Read about it on the IBM dev blog here.

The CouchDB 2.0 Release Testing Plan

Interested in helping out with testing the upcoming Apache CouchDB 2.0 release and making sure it is as bug-free as possible? We’re still looking for reviewers for The CouchDB 2.0 Testing Release Plan.

Releases

Major Discussions

Calculating Revision IDs outside erlang… (see thread)

In this discussion Michael Fair recommends changing the term_to_binary computation to use the {minor_version, 1} option in the rev_id calculation, to assist with replicating the md5 for the revision id of documents with floats – which currently is causing a headache.

Candidates for built-in filter functions? (see thread)

Robert Newsome is gathering suggestions for part of a new effort to improve replicator performance, as he is planning to add new built-in filter functions, which will run in the Erlang vm.

Multiple database backup strategy (see thread

Don’t miss this discussion, based on using /_db_updates to detect active source databases of a replication job and using /_db_updates to hear about new/updated/deleted _replicator documents, with some unexpected twists.

Releases in the CouchDB Universe

PouchDB

Opinions and other News in the CouchDB Universe

… and in the PouchDB Universe

CouchDB Use Cases, Questions and Answers

Use Case:

Stack Overflow:

no public answer yet:

PouchDB Use Cases, Questions and Answers

Use Case:

Stack Overflow:

no public answer yet:

For more new questions and answers about CouchDB, see these search results and about PouchDB, see these.

Get involved!

If you want to get into working on CouchDB:

  • We have an infinite number of open contributor positions on CouchDB. Submit a pull request and join the project!
  • Do you want to help us with the work on the new CouchDB website? Get in touch on our new website mailing list and join the website team! – www@couchdb.apache.org
  • The CouchDB advocate marketing programme is just getting started. Join us in CouchDB’s Advocate Hub!
  • CouchDB has a new wiki. Help us move content from the old to the new one!
  • Can you help with Web Design, Development or UX for our Admin Console? No Erlang skills required! – Get in touch with us.
  • Do you want to help moving the CouchDB docs translation forward? We’d love to have you in our L10n team! See our current status and languages we’d like to provide CouchDB docs in on this page. If you’d like to help, don’t hesitate to contact the L10n mailing list on l10n@couchdb.apache.org or ping Andy Wenk (awenkhh on IRC).

We’d be happy to welcome you on board!

Events

Job opportunities for people with CouchDB skills

Time to relax!

  • “All day, you eagerly anticipate finding just 30 minutes to chill out, catch up with your significant other, and relax into sleep. But the problem is…though your body is ready to plop down on the sofa and decompress, your brain is still going a mile a minute.” – 3 Simple Ways to Relax Your Brain After a Funky Day
  • “Who would’ve thought that this slim plastic box can become such an attractive resting place for a cat.” – Flexible Cat Finds an Odd Spot to Relax
  • “We pushed an update to our single-signon system for Basecamp, which had me working until 1:30 AM. That wouldn’t have been so bad if it wasn’t because I got woken up at 5 AM to help deal with an issue that arose. But the costs the following day were typical, numerable, and high…” Sleep deprivation is not a badge of honor
  • “Psychologists have long noticed what’s sometimes been called the “labor illusion:” when it comes to judging other people’s work, we might say we’re focused only on whether they did the job quickly and well—but really we want to feel they wore themselves out for us.” – Nobody Cares How Hard You Work
  • “Don’t tell your friends about your strange calming habits. They will tease you. Definitely don’t write a Medium post about it. They’ll see it.” – My Arsenal of Calm

… and also in the news

 


Filed under: News

by renrutnnej at March 24, 2016 03:00 PM

January 11, 2016

Kanso

Punycode

If you enjoy reading RFCs, or you've been overly strict validating URLs in the past, you might know that domain names support unicode. Except they don't. Not really. In fine internet tradition, it's all a bit of a hack.

The Domain Name System (DNS) is restricted in practice to a subset of ASCII. Any internationalized domain names (IDNs) must be transcribed to ASCII before being stored in DNS. This method of representing unicode in plain ASCII is called Punycode. Your browser will use this encoding to convert "bücher.ch" to it's ASCII representation ("xn--bcher-kva.ch") when you make a request.

Punycode tries to be human-readable and easy to implement, but these goals must yield to the reality of space constraints. Domain labels are limited to only 63 characters (RFC 1034), so the ratio of original string length to encoded ASCII length must be small. The algorithm takes an interesting approach to this problem, and while I wouldn't call it elegant, it makes a useful case study in space efficiency.

The encoding takes advantage of the fact that unicode characters are grouped into related blocks. Since an IDN will often include characters from only one other script system, the extended code points are usually close together.

To encode an extended string, the algorithm first copies all the basic ASCII characters from the IDN (eg, "bücher" => "bcher"). It then iterates through the extended characters, checking each position to see if it should be inserted. Each time, a counter is incremented. When an insertion is made, the value of the counter is appended to the output (eg, "bcher-kva", where "kva" is the counter value). Then, the counter is reset to zero and the iteration continues until all the extended characters have been inserted.

The resulting counter values define the number of iterations the decoder will have to go through to insert the next extended character. These deltas will usually start fairly large (to reach the appropriate code block) then be relatively small for subsequent characters. By using a variable-width integer encoding, Punycode requires fewer characters for small deltas than it does for large ones. For example, to encode "büücher" (with two "üü") we'd only require one more iteration of the decoder, which translates to just one extra character in the output: "bcher-kvaa" (where the deltas are now "kva" and "a", or 745 and 0 respectively).

The code is a little fiddly in practice, so if you'd like a clear description of the algorithm ignore my ramblings above and take a look at RFC 3492.

Why am I writing about Punycode? Because I've been working on a scheme implementation of course! The API looks something like this...

(use punycode)

(punycode-encode "Bücher")
;; => "Bcher-kva"

(punycode-decode "Bcher-kva")
;; => "Bücher"

(domain->ascii "www.bücher.de")
;; => "www.xn--bcher-kva.de"

(domain->unicode "www.xn--bcher-kva.de")
;; => "www.bücher.de"

Hopefully this is useful to people who need to display internationalized domains, or accept them as input. For myself, part of the appeal with CHICKEN has been exploring things I take for granted in more popular languages. I wouldn't normally find an excuse to read RFC 3492.

January 11, 2016 11:50 AM

December 31, 2015

Kanso

Resolutions 2016

Well, it's the last day of 2015 and that means round-ups, predictions, and resolutions. I don't normally participate, but this year I have two resolutions I'd like to share. In 2016, I resolve to:

Finish more stuff. This sounds like "focus and work harder", but that's not a meaningful plan. When I release software, I intend to define what 'feature complete' means. The code doesn't have to be complete, but the idea should be fully formed. If I don't know what complete means, then I'm still in exploration mode and not ready to release. While exploring ideas I'll still share code, but I won't release it (public GitHub repositories are a red flag, Gists and blog posts are more appropriate).

Where I've lacked this discipline in the past, software has quickly become bloated and complex. If I feel a project can't be defined up-front then I should split it into smaller, understandable parts, and the rest should be a discussion not a release. The major risk I foresee, particularly in the JavaScript community, is that a finished project is often mistaken for a dead project. This leads to my second resolution...

Build communities, but not around individual software artefacts. Communities are essential to useful software development. Unfortunately, when communities congregate around an individual code base, the project can never be completed or retired. Finishing a project would kill it's community too. These zombie projects keep growing and growing. With social status tied to commits, the pressure to add features is significant. Much better then to build a community around shared interests and congregate around collections of software instead.

The inspiration for these resolutions came directly from two blog posts by Martin Sústrik (creator ZeroMQ, nanomsg, libmill and ribosome): "Finish your stuff" and "Software Totemism". His blog contains plenty of other food for thought - I suggest you give it a read.

Happy new year, I'm looking forward to 2016 already :)

December 31, 2015 03:57 PM

November 27, 2015

Kanso

Laser-cut wood keyboard

Here's a little project I did a while ago, but haven't shared yet. Last year, I found a Lenovo Tablet folio case on eBay, it had a built-in keyboard and was going dirt cheap --- the case had a regular USB connector for the tablet, so looked easy to repurpose. Here's the board freed from it's case, with a micro-usb breakout soldered onto the cut wire:

Keyboard 1

I laser-cut a new outer shell from layers of 3mm MDF at Access Space, Sheffield:

Keyboard 2

Then put it all together with a braided micro USB cable, and glued two little rubber feet on the back:

Keyboard 3 Keyboard 4 Keyboard 5

It worked pretty much out of the box with Linux (Rasbian) including the optical track point for the mouse. I did have to remap some keys to get Ctrl to work, and I added a custom mapping for the Function keys across the top. The result ended up being surprisingly thin, thanks to the very low profile of the keyboard from the folio case.

Q: Can I get the designs?

A: No. I have no idea where they are, and this was a very much a one-off project. Hopefully it gives you some ideas though ;)

November 27, 2015 09:17 AM

November 23, 2015

Kanso

Bencoding

Recently, while writing an internal protocol, I found myself prospecting for data formats. I'd usually opt for JSON as a great all rounder, being reasonably concise, human-readable, and widely supported, but this time I could afford to dig around for alternatives. After all, JSON makes passable config files, but I'd rather use TOML (which I also wrote a Scheme module for) given the right environment. The same can be true with data, and one of the alternative formats I uncovered, Bencode (pronounced B-Encode), turns out to be pretty neat.

Bencoding is used to format structured data in torrent files. It uses ASCII characters as delimiters and digits, making it easy to debug, and being unaffected by endianness it's easy to support cross-platform. Unlike the more space efficient Protocol Buffers, Bencode does not require a schema definition to parse, a restriction that makes incremental updates painful, it includes all the relevant keys in the message itself. Bencode can safely include binary data too, and as you'll see, is incredibly easy to serialize and parse.

Encoding rules

In Bencode, strings are almost identical to Netstrings, a delightfully simple format for bytestrings, where the value is prefixed by it's length in bytes:

12:hello world!  =>  "hello world!"

This means no character escaping is necessary (eg, NULL characters), and when parsing, the memory required is known in advance. In addition to bytestrings, Bencode provides integers, lists and dictionaries.

Integers use ASCII digits delimited by i and e:

i123e  =>  123

Lists are just multiple bencoded values surrounded by l and e:

l5:jelly4:cake7:custarde  =>  ["jelly", "cake", "custard"]

Similarly, dictionaries use d and e to wrap a sequence of keys and values:

d4:name5:cream5:pricei100ee  =>  {"name": "cream", "price": 100}

Dictionary keys must be sorted in lexicographical order, meaning there is only one valid bencoding for a given (possibly complex) value. So bencoded values can be compared or hashed directly without the need to decode.

Bencode module

The simplicity of this system means it's easy to produce correct bencoded messages with minimal effort, even using printf() and friends, a very handy property in embedded environments. It also means a new parser can be added quickly when required, which is exactly what I did for CHICKEN Scheme, implementing a bencode module in very little time:

(use bencode)

(bencode->string '(123 456))
;; => "li123ei456ee"

(string->bencode "12:hello world!")
;; => "hello world!"

Parsing speed

One advantage to Bencode's simple rules, apart from being easy to implement, is that it's easy to process. Parsing and serializing bencoded data is generally faster than the alternatives I've tried, not because of my great parser code, just as a result of a well considered encoding.

I made a quick test, decoding and then encoding some example data 100,000 times.

Example data

This is not chosen to reflect any common usage or benefit any particular parser, I'm just bashing on the keyboard here...

{
    "foo": 123,
    "bar": {
        "baz": [1, 2, 3, 4, "hello"]
    }
    "qux": "This is a much longer string containing\nnew\nlines\netc.",
    "wibble": [123123, "foo", "bar", "baz", 123124, [1 "a"], ["b" 4], ["cd"]]
}

Encoded data length

bencode           171 bytes
json              176 bytes
tagged netstring  205 bytes
msgpack           129 bytes

Parsing time

bencode             2.274s 
json               16.886s
tagged netstring    4.986s
msgpack             7.98s

Serialization time

bencode             2.513s
json                5.444s
tagged netstring    4.903s
msgpack             4.254s

Alternatives

So, that's Bencode, a neat little format I hadn't noticed before. Other JSON alternatives you might consider are: MessagePack, a more complex binary format with better size efficiency though not human-readable, and Tagged Netstrings a backwards compatible extension to Netstrings developed by Zed Shaw as part of the Mongrel2 webserver project. Tagged Netstrings support more data types than Bencode but may not work well for streams since type information is located at the end of each value, not the start. Of course, most of the time I'll still be using JSON, and there's nothing wrong with that!

November 23, 2015 11:19 AM

August 30, 2015

Kanso

LDAP bind

Beginning last Friday with CommonMark, I'm now working through my CHICKEN Scheme backlog and attempting to release an egg each week. Today, it's a fairly minimal binding to OpenLDAP.

Implementation

I had originally started this from scratch but fortuitously discovered that Moritz Heidkamp had begun a similar project several years ago. I think originally planned as a complete binding to OpenLDAP, it was never released. I was able to take this well implemented base and update it to the latest APIs. Rather than support all the features of LDAP, this module lets you authenticate a user, and not much else.

Installation

The ldap-bind egg is available via the CHICKEN egg index:

chicken-install ldap-bind

You must also install OpenLDAP for the libldap and liblber libraries.

Usage

(use ldap-bind)

(define conn
  (ldap-initialize "ldaps://example.com"))

(if (ldap-bind conn "uid=testuser,cn=users,dc=example,dc=com" "password")
  (print "Welcome, authenticated user!")
  (print "Invalid Credentials"))

;; or, using list syntax for a base dn:

(define base-dn
  '((cn "users") (dc "example") (dc "com")))

(if (ldap-bind conn (cons '(uid "testuser") base-dn) "password")
  (print "Welcome, authenticated user!")
  (print "Invalid Credentials"))

(ldap-unbind conn)

August 30, 2015 09:30 PM

August 21, 2015

Kanso

CommonMark for CHICKEN

I've recently been 'incubating' lots of CHICKEN eggs and it's about time they hatched. I'll try to publish one each week until the backlog is cleared. We're going to start easy and work towards the interesting. This week, CommonMark.

If you've ever worked with Markdown parsers, you'll know they often have different interpretations of the format. This can be a problem if you want to render both on the server, and on the client. For improved compatibility, I prefer CommonMark; a highly specified variant of Markdown, which includes most of the niceties found in modern Markdown parsers.

Implementation

I originally planned to write this in pure Scheme using comparse - a library of parser combinators similar to Haskell's Parsec - having previously enjoyed writing a TOML parser with it. Unfortunately, CommonMark is a more complicated format than TOML, and would take a while to implement. Since CHICKEN already has good Markdown parsers, I considered updating one to suit my needs - in the end, it was much quicker and easier to write a binding for the cmark C library, so that's what I did.

Installation

The cmark egg is available via the CHICKEN egg index:

chicken-install cmark

You must also install cmark, since the egg uses the libcmark.so shared library - If your package manager doesn't provide a cmark package, you can install from source using the usual make && make install dance.

Usage

(use cmark)

(commonmark->html "# Hello world!")

;; for embedded HTML support, turn off safe mode:
(commonmark->html "<script>alert('hello');</script>" safe: #f)

Speaking of use, it currently powers this blog!

Improvements

This is a very simple Scheme binding which provides CommonMark string to HTML string conversion. It would be nice to support SXML output too, so we could use the SXML tooling to query, transform and render the result. The cmark C library provides iterators for it's parsed node tree, which might help with this - pull requests welcome!

August 21, 2015 08:04 AM

November 21, 2014

Kanso

Focus mode

I'm currently reading The Shallows by Nicholas Carr. It's been enjoyable so far, even if it's mostly nostalgia for the physical book as a medium. I'll reserve judgement on the text as a whole until I've finished it, but I wanted to make a small digression first (which you might consider ironic after reading the book).

One point that resonated with me regarded the cognitive load of hyperlinks. Rather than simply annotating text to add meaning, links can distract us from digesting the information. Anyone who's lost themselves in a Wikipedia rabbit-hole will probably find that familiar. In web development we're constantly fussing over the call to action or otherwise encouraging interactivity. So, for a bit of fun, I've thrown together a tiny bookmarklet to remove all links on a document and replace them with text. Who knows, perhaps it'll help you get through that extra long blog post you've only been scanning up until now. So, without further ado, I present that last link you'll ever click (on this page): Focus Mode.

What's more, it fits into a tweet, too. If you like it, drag it up to your bookmarks bar and use it as a bookmarklet on other sites. Though, if you've just clicked it you might have to reload the page first! Oh, and well done, you've just successfully avoided the gauntlet of links on this post (or at least came back afterwards).

November 21, 2014 03:52 PM

June 10, 2014

The Old Official CouchDB Blog

Apache CouchDB 1.6.0 Released

Apache CouchDB 1.6.0 has been released and is available for download.

CouchDB is a database that completely embraces the web. Store your data with JSON documents. Access your documents with your web browser, via HTTP. Query, combine, and transform your documents with JavaScript. CouchDB works well with modern web and mobile apps. You can even serve web apps directly out of CouchDB. And you can distribute your data, or your apps, efficiently using CouchDB’s incremental replication. CouchDB supports master-master setups with automatic conflict detection.

Grab your copy here:

http://couchdb.apache.org/

Pre-built packages for Windows and OS X are available.

CouchDB 1.6.0 is a feature release, and was originally published on 2014-06-10.

These release notes are based on the changelog.

Upgrade Notes

The Proxy Authentication handler was renamed to proxy_authentication_handler to follow the *_authentication_handler form of all other handlers. The old proxy_authentification_handler name is marked as deprecated and will be removed in future releases. It’s strongly recommended to update the httpd/authentication_handlers option with the new value if you have this handler configured.

What's New

  • COUCHDB-2200: support Erlang/OTP 17.0 #35e16032
  • Fauxton: many improvements in our experimental new user interface, including switching the code editor from CodeMirror to Ace as well as better support for various browsers.
  • Add the max_count option (UUIDs Configuration) to allow rate-limiting the amount of UUIDs that can be requested from the /_uuids handler in a single request (CVE 2014-2668).
  • COUCHDB-1986: increase socket buffer size to improve replication speed for large documents and attachments, and fix tests on BSD-like systems. #9a0e561b
  • COUCHDB-1953: improve performance of multipart/related requests. #ce3e89dc
  • COUCHDB-2221: verify that authentication-related configuration settings are well-formed. #dbe769c6
  • COUCHDB-1922: fix CORS exposed headers. #4f619833
  • Rename proxy_authentification_handler to proxy_authentication_handler. #c66ac4a8
  • COUCHDB-1795: ensure the startup script clears the pid file on termination. #818ef4f9
  • COUCHDB-1962: replication can now be performed without having write access to the source database (#1d5fe2aa), the replication checkpoint interval is now configurable (#0693f98e).
  • COUCHDB-2025: add support for SOCKS5 proxies for replication. #fcd76c9
  • COUCHDB-1930: redirect to the correct page after submitting a new document with a different ID than the one suggested by Futon. #4906b591
  • COUCHDB-1923: add support for attachments and att_encoding_info options (formerly only available on the documents API) to the view API. #ca41964b
  • COUCHDB-1647: for failed replications originating from a document in the _replicator database, store the failure reason in the document. #08cac68b
  • A number of improvements for the documentation.

by djc at June 10, 2014 05:17 PM

June 06, 2014

The Old Official CouchDB Blog

CouchDB Weekly News, June 06

Weekly CouchDB meeting – summary

  • 1.6.0 release status: the vote had passed last week, binaries for Mac and Windows are ready for testing. The release will be very soon, stay tuned!
  • BigCouch merge: significant process has been made; testing is highly important now. We want to encourage everyone to help with testing COUCHDB-1843 branch, especially :5984 API iface. Info: to run the bigcouch from merge branch: clone couchdb.git, checkout 1843-feature-bigcouch, ./configure && make && dev/run. Please report any errors you find during testing on dev@ Mailing list or on IRC #couchdb-dev.
  • Bylaws, Code of Conduct and Diversity Statement: all PMC members are asked for reviewing and commenting the Bylaws and the Code of Conduct and Diversity Statement. A thread about approval models and vetoes will be started on the mailing list.

Releases in the CouchDB Universe

Opinions

Use Cases, Questions and Answers

no public answer yet:
For more new questions about CouchDB, see these search results.

Get involved!

If you want to get into working on CouchDB:
  • We have an infinite number of open contributor positions on CouchDB. Submit a pull request and join the project!
  • Here's a list of beginner tickets around our currently ongoing Fauxton-implementation. If you have any questions or need help, don't hesitate to contact us in the couchdb-dev IRC room (#couchdb-dev) – Garren (garren) and Sue (deathbear) are happy to help.
We'd be happy to have you!

Events

Job opportunities for people with CouchDB skills

… and also in the news

Posted on behalf of Lena Reinhard.

by Noah Slater at June 06, 2014 04:04 PM

May 30, 2014

The Old Official CouchDB Blog

CouchDB Weekly News, May 30

Major Discussions

Vote on release of Apache CouchDB 1.6.0 rc.5 (will be released as Apache CouchDB 1.6.0 — see thread)

The vote passed.

Limiting view access (see thread)

Use case: sharing docs between users with different roles and according access. Goal is to make sure via adding according CouchDB settings that no user can see who the other users of the doc are.

Answer: Natively, CouchDB doesn’t provide this functionality. Thus, the canonical answer is to use a proxy in front of CouchDB that can limit access to certain URLs, or to deploy a middleware layer written in your favourite language that can broker the access.

CouchDB minimum revs_limit and Compaction (see thread)

Use case: limiting the number of revisions stored for a specific document in a database. Setup: setting the revs_limit to a specific number and then running the compaction. This did not work, the number of revisions could not be limited this way, and the enquirer asked why.

Answer: _revs_limit does not do what one may think it does, – CouchDB is not a revision control system. After completion only the latest revision of each document is preserved. _revs_limit refers only to how many old _rev values are retained. Lowering this value will save some storage but can also make replication less efficient as a failure to find a common ancestor will cause CouchDB to copy the document afresh.

Releases in the CouchDB Universe

Special topic: Content Management Systems based on CouchDB

  • Kleks – a pure CouchDB based CMS written as a CouchApp using Kanso, Spine.js, CoffeeScript and Stylus. Supports multi-site setup and Markdown authoring
  • Couchpress – a super lightweight and modular CMS built on NodeJS, Express and CouchDB
  • CMS – a Content Management System written with Ruby on Rails and CouchDB
  • Cmtool – a rails 3.2+ CMS as engine for a CouchDB backend
  • CCMS – a Backend-free, client-side JavaScript and CouchDB based CMS
  • Falkland CMS (Website) – a Curation Management System written in Clojure, ClojureScript and CouchDB

Opinions

Use Cases, Questions and Answers

Get involved!

If you want to get into working on CouchDB:
  • We have an infinite number of open contributor positions on CouchDB. Submit a pull request and join the project!
  • Here's a list of beginner tickets around our currently ongoing Fauxton-implementation. If you have any questions or need help, don't hesitate to contact us in the couchdb-dev IRC room (#couchdb-dev) – Garren (garren) and Sue (deathbear) are happy to help.
We'd be happy to have you!

Events

Job opportunities for people with CouchDB skills

… and also in the news

Posted on behalf of Lena Reinhard.

by Noah Slater at May 30, 2014 04:17 PM

May 22, 2014

The Old Official CouchDB Blog

CouchDB Weekly News, May 22

Weekly CouchDB meeting – summary

  • 1.6.0 release: no new issues were found during voting on CouchDB 1.6.0 rc5
  • BigCouch merge: significant progress has been made. Everyone is still encouraged to continue helping with building and testing COUCHDB-1843 branch. Further items for discussions will be sent to the mailing list.
  • CouchDB Meetup Hamburg: the CouchDB user group in Hamburg has its own Google Plus Community and will have their next meetup will be on June 10, 2014.

Major Discussions

Running views return nothing with CouchDB 1.5.1 (ongoing discussion; see thread)
Setup: code that creates database, documents and design documents with views and lists. When views are run, nothing is returned under CouchDB 1.5.1. When the same code is run against another CouchDB server (CouchDB 1.5.0), all views return the right responses and results. Approach: the problem described here could be an error from a library not found while running an external process (CouchJS in this case). It turned out libmozjs.so was either not installed or not in a path searched by the dynamic linker. Once it is added, it should be ensured that CouchJS can be run, afterwards, CouchDB should be able to build the views without restarting CouchDB.
Discussion: Project by-laws (ongoing discussion; see thread)
The discussion about the by-laws is still ongoing, more updates have been made. They can be found here, your feedback is still very welcome.
Release Apache CouchDB 1.6.0 rc5 (see thread)
The testing and voting for all systems is still in progress.

Releases in the CouchDB Universe

Opinions

Use Cases, Questions and Answers

Get involved!

If you want to get into working on CouchDB:
  • Here's a list of beginner tickets around our currently ongoing Fauxton-implementation. If you have any questions or need help, don't hesitate to contact us in the couchdb-dev IRC room (#couchdb-dev) – Garren (garren) and Sue (deathbear) are happy to help.
We'd be happy to have you!

Events

Job opportunities for people with CouchDB skills

… and also in the news

Posted on behalf of Lena Reinhard.

by Noah Slater at May 22, 2014 04:06 PM

May 16, 2014

The Old Official CouchDB Blog

CouchDB Weekly News, May 16

Blog Posts

Weekly CouchDB meeting – summary

  • BigCouch merge: significant process has been made. We want to encourage everyone to check out the COUCHDB-1843 branch and help with testing. Info: to run the bigcouch from merge branch: clone couchdb.git, checkout 1843-feature-bigcouch, ./configure && make && dev/run. Please report any errors you find during testing on dev@ Mailing list or on IRC #couchdb-dev.
  • 1.6.0 release: 1.6.0 rc5 is still open vor testing and voting. There are now Windows binaries against Erlang 17.0, – Windows users out there, feel free to test them. On the issues with Erlang 17.0, please also see this post on what it takes to use it in production. There'll be a follow-up item on this which will be sent to the mailing list this week.
  • CouchDB Meetups: there have been two CouchDB Meetups in Hamburg and Berlin, Germany, in the last week, and both were amazing. The recap for Hamburg can be found here.

Major Discussions

Discussion: Project by-laws (ongoing discussion; see thread)

The by-laws have been discussed and updated according to the community's comments. They can be found here, your feedback is very welcome.

Release Apache CouchDB 1.6.0 rc5 (see thread)

The testing and voting for all systems is still in progress.

Releases in the CouchDB Universe

  • couch-daemon – helps you write CouchDB workers efficiently that can be implemented and managed by CouchDB as os_daemons; with a Highland streaming interface
  • couchdb2s3 (0.3.0) – export CouchDB databases to line-oriented json files on s3
  • sails-couchdb-orm (0.9.0) – CouchDB adapter for Sails.js and Waterline ORM
  • dimensionist – CouchDB daemon to extract dimensions from image attachments

Opinions

Use Cases, Questions and Answers

Get involved!

If you want to get into working on CouchDB:
  • Help us testing Apache CouchDB 1.6.0 rc5! You'll find all important information on release artefacts and test procedure here.
  • Here's a list of beginner tickets around our currently ongoing Fauxton-implementation. If you have any questions or need help, don't hesitate to contact us in the couchdb-dev IRC room (#couchdb-dev) – Garren (garren) and Sue (deathbear) are happy to help.
We'd be happy to have you!

Job opportunities for people with CouchDB skills

… and also in the news

Posted on behalf of Lena Reinhard.

by dch at May 16, 2014 12:30 PM

May 15, 2014

The Old Official CouchDB Blog

Recap CouchDB Meetup Hamburg No. 1

This is the recap from our first CouchDB User Group Hamburg Meeting at May 13th 2014.

First of all thanks to everyone for attending. Also a big thank you to Ubilabs for hosting the meetup at their awesome office in Hamburg "Schanzenviertel".

Six people have been attending at this first meeting. Although it was a quite small meeting, we have discussed many things. At the beginning, everybody introduced themselves and dropped some info about what they are doing - especially with CouchDB. Andy spoke about the CouchDB history, the Apache Software Foundation and the ASF CouchDB project. After that, Klaus was giving some insights about coding in CouchDB's core and explained various internals. And Robert showed the new awesome Fauxton webinterface for CouchDB.

Julius attended accidentally, because he originally was thinking about founding a "Hamburg Beamers" - an Erlang user group. He got in touch with Dave Cottlehuber, who is a member from the "Vienna Beamers", pointing Julius to our first meetup (thanks Dave :) ). When digging a bit deeper into CouchDB, Julius was excited about what CouchDB offers.

We were also thinking about putting the Beamers and Couchers together in one user group because we thought that one of the main topics will be Erlang. This is not decided though. We did also look into Elixir and Klaus and Julius gave some basic insights. Elixir looks really cool and promising.

After nearly three hours, we finished our beers (thanks to Ubilabs for sponsering the drinks). Everybody was happy with the first meeting and we are looking forward to the next one. We plan to have the meeting every month. So the next meeting will be in mid June. Klaus will give the first talk where he is introducing a web service he is creating for measuring software complexity with Elixir and CouchDB.

We have now created a G+ Community called CouchDB Meetup Hamburg. We will use this community to announce upcoming events. This is the easiest way at the moment.

Finally, we decided to meet again at June, 10th and again at Ubilabs. Thanks a lot in advance.

Looking forward to see also new interested folks. So please spread the word.

by andywenk at May 15, 2014 07:26 AM

May 14, 2014

The Old Official CouchDB Blog

Board Report (May 2014)

Apache CouchDB is a database that uses JSON for documents, JavaScript for MapReduce queries, and regular HTTP for an API.

Releases

1.5.1 (2014-04-08) http://www.apache.org/dist/couchdb/notes/1.5.1/apache-couchdb-1.5.1.html

Recent Activity

  • Started with weekly news with great success. Also available at https://blogs.apache.org/couchdb/
  • The community is in the process of creating a CoC and bylaws
  • Ongoing work on the release 1.6.0. Actually voting on Apache CouchDB 1.6.0-rc.4
  • Working on the BigCouch merge from Cloudant
  • Good progress in reviewing the rcouch merge
  • Community work on migrating content to the new wiki started
  • Translation work going well

Community

Including the following additions, CouchDB has 35 committers and 12 PMC members.

New committers:

  • Robert Kowalski

New PMC members:

  • Joan Touzet

Mailing list stats:

announce

  • 175 subscribers (+24)
  • 1 message since February (1)

user

  • 1386 subscribers (-19)
  • 750 messages since February (-336)

erlang

  • 167 subscribers (+13)
  • 1 messages since February (-13)

dev

  • 599 subscribers (-3)
  • 2630 messages since February (+1306)

commits

  • 104 subscribers (0)
  • 2655 messages since February (-80)

marketing

  • 31 subscribers
  • 312 messages since February

l10n

  • 36 subscribers (+5)
  • 16 messages since May (-191)

replication

  • 54 subscribers (+7)
  • 53 messages since February (+28)

Issues: None.

by Jan at May 14, 2014 11:32 AM

May 08, 2014

The Old Official CouchDB Blog

CouchDB Weekly News, May 08

Weekly CouchDB meeting – summary

  • 1.6.0 release: 1.6.0-rc.5 is out for testing, so for all systems go. 1.6.x CI is all green, a formal vote will be coming this week
  • rcouch merge status: testing up to now showed it's functional, it will be suggested for integration branch merge
  • BigCouch merge status: a massive progress has been made this week. Soon branches will be rewritten to clean up the history, afterwards the community will be asked for help with testing.
  • Fauxton: agreement that Fauxton replaces Futon in CouchDB 2.0 (post merge) and that resolution of COUCHDB-1954 prior to that is critical. There'll be a thread on dev@ mailing list about this and release preparation.
  • Bylaws, Code of Conduct, Diversity Statement: everyone in the community is still invited to read the by-laws draft and join the discussion on dev@ mailing list (see thread); an initial Code of Conduct and Diversity draft will be posted next week
  • Project release artefacts: the current state of what the project release artefacts are will be documented and publicized

Major Discussions

Discussion: Project by-laws (ongoing discussion; see thread)

The first draft of the by-laws has been modified and is still being discussed. It can be found here, your comments are very welcome.

How to get results in descending order by date and without ID field (see thread)

The docs for result orders can be found here. To remove the ID field, users can use a list function.

Release Apache CouchDB 1.6.0 rc5 (ongoing testing and discussion; see thread)

The testing for all systems is still in progress. If you want to test, please follow this test procedure. The changes since last vote round can be found here.

Releases in the CouchDB Universe

  • PouchDB 2.2.0 – including persistent mapreduce, eventemitter api, replication works for huge datasets
  • highland-couchr 1.0.0 – streaming style API to CouchDB, using couchr under the hood
  • massage-couch 0.1.0 – massage CouchDB documents with an OS daemon worker.

Opinions

Use Cases, Questions and Answers

Get involved!

If you want to get into working on CouchDB:
  • Help us testing Apache CouchDB 1.6.0 rc5! You'll find all important information on release artefacts and test procedure here.
  • Here's a list of beginner tickets around our currently ongoing Fauxton-implementation. If you have any questions or need help, don't hesitate to contact us in the couchdb-dev IRC room (#couchdb-dev) – Garren (garren) and Sue (deathbear) are happy to help.
We'd be happy to have you!

Events

Job opportunities for people with CouchDB skills

  • DevOps Engineer, New York, USA
  • Work for any of JS, UI/UX, Node, CouchDB experience (see tweet), can work remote

… and also in the news

Posted on behalf of Lena Reinhard.

by Noah Slater at May 08, 2014 06:52 PM

May 02, 2014

The Old Official CouchDB Blog

CouchDB Weekly News, May 1

Weekly CouchDB meeting – summary

  • 1.6.0 release: we are making progress, next is checking if all bugs have been fixed
  • BigCouch merge status: Cloudant will now focus on the BigCouch merge, visible progress should happen in the next couple of weeks
  • rcouch merge status: the testing is still in progress, feedback will be provided to the mailing list; merge to the new integration branch can be done after that feedback
  • Code of Conduct: the first version will now be drafted based on the discussion on the mailing list (for details, see "Major Discussions" section below)
  • By-laws: everyone in the community is invited to read the draft and join the discussion (see thread); please note that the bylaws now include a new idea about PMC chair rotation
  • Translation update: German translation is making good progress (see status here)

Major Discussions

Apache CouchDB Diversity Statement (see thread)

This discussion was initiated with the suggestion to establish a project-wide Diversity Statement. First, the idea was brought up to turn this document into a PMC charter, a document that sets out what the PMC values, their commitment to diversity, and their pledge to the project. The second idea was about how merit is being recognised and it was brought up to broaden this around the four areas community, project, documentation and code. "This is what we value. This is what we will recognise. Our promise to the community." (Noah Slater) It was agreed on creating two documents, one for the PMC charter, a second one for diversity.

Discussion: Project by-laws (ongoing discussion; see thread)

Proposal to vote in set of project by-laws that define the specific roles in this community and the decision making procedures that are used. The first draft of the by-laws has been discussed and modified accordingly and can be found here. Comments are very welcome.

Apache CouchDB Developer Code of Conduct (ongoing discussion; see thread)

The PMC initiated a thread on moving forwards establishing an Apache CouchDB Developer Code of Conduct (CoC for short). Example Codes of Conduct from Debian, Python, Django , Bantik, Node.JS and the Node.JS IRC channel policy were as well considered and discussed as transparency, the consequences of infractions and the differentiation between minor offences and major offences, how to deal with profanity and how this applies to IRC and the moderation policy there.

HIPAA (Health Insurance Portability and Accountability Act) / HIPAA 5010 / PIPEDA compliance (see thread)

Question on building applications using CouchDB while having to follow HIPAA compliance. As for the legal topic this is, the community strongly recommended the user get in touch with a lawyer and getting proper compliancy and regulatory guidance.

CouchDB load spike (see thread, see also the same question on StackOverflow)

Setup: CouchDB 1.5.0, database with < 10 GB of data in it and continuous replication. Every few hours (3-4 times per day) they recognise a huge spike that floors the load to around 1.5 and memory usage to close to 100%. It turned out there was a similar issue that was already discussed (link to gist). The user filed issue COUCHDB-2231.

Tips for general CouchDB monitoring and graphs drawing tools to check what's causing huge spikes (from Alexander Shorin, see this reply):

  • Munin plugin for CouchDB monitoring – It doesn’t handle system metrics for the CouchDB process yet, but that will be added soon; users should make sure they have a similar plugin for their monitoring system.
  • Skyline, a detector for spikes and other anomalies
  • Oculus, a metrics correlation tool that makes it very easy to compare multiple graphs for an anomaly period with it.
Release Apache CouchDB 1.6.0 rc3 (ongoing testing and discussion; see thread)

Some issues have already been fixed, the testing is still ongoing. Find all release artefacts we are voting on in this list. If you want to test, please follow this test procedure. The changes since last vote round can be found here.

Releases in the CouchDB Universe

  • yama – mail app, work in progress; syncs CouchDB instance with an email inbox for RESTful email
  • tornado-couchdb 0.2.3 – Blocking and non-blocking (asynchronous) clients for CouchDB using Tornado's httpclient
  • loveseat 0.0.11 – very limited CouchDB interface
  • follow-db-updates 0.0.2 – easy CouchDB _db_changes follower, with older couch pollyfill
  • seneca-couchdb-changes 0.1.0 – emit seneca.js events for all events in a couchdb _changes feed
  • changes-stream 1.0.3 – simple module that handles getting changes from couchdb
  • neuropil 3.0.2 – a lighter and faster registry client for CouchDB based npm server
  • nano 5.8.0 – minimalistic CouchDB driver for node.js
  • couch_tap 0.0.2 – providing a DSL that allows complex CouchDB documents to be converted into rows in a RDBMS' table

Opinions

Use Cases, Questions and Answers

Get involved!

If you want to get into working on CouchDB:
  • rcouch Merge: Erlang hackers and CouchDB users, we need your help with testing and review of the rcouch merge. It's easy! Find the how-to in this post.
  • Here's a list of beginner tickets around our currently ongoing Fauxton-implementation. If you have any questions or need help, don't hesitate to contact us in the couchdb-dev IRC room (#couchdb-dev) – Garren (garren) and Sue (deathbear) are happy to help.
  • You want join us for the updates of CouchDB-Python for Python 3? Take a look at issue 231.
We'd be happy to have you!

Events

Job opportunities for people with CouchDB skills

… and also in the news

Posted on behalf of Lena Reinhard.

by Noah Slater at May 02, 2014 04:06 PM

April 24, 2014

The Old Official CouchDB Blog

CouchDB Weekly News, April 24

Weekly CouchDB meeting – summary

  • 1.6.0 release: voting for 1.6 rc3 is open; Erlang R15 and R16 are fine, but several unexpected issues for testing with Erlang R14BX were reported; any help with testing and diagnosing the issue is welcome
  • rcouch merge status: the recent call for testing led to progress on COUCHDB-1994.The Windows build and some other little bugs could be fixed. Still, help with testing is very welcome!
  • BigCouch merge status: large progress was made last week, next steps will be code review and testing
  • BigCouch branch and the new multirepo design: how to edit individual repos and split big CouchDB.git into single and finally run the merge

Major Discussions

Error when installing CouchDB on Windows 7 (see thread)

Installation of CouchDB 1.5.1_R16B02 binary on Windows 7 lead to an issue caused by a problem with the Windows R16B02 installation file. This file has been replaced quickly, everything works now. The installation file can be downloaded here.

Compaction of a database with the same number of documents is getting slower over time (see thread)

A database containing a relatively stable number of documents (in CouchDB: "doc_count"), the documents themselves change frequently (including many insertions and deletions (CouchDB: "doc_del_count")). The person asking expected the compaction time to stay the same, but numbers showed that it took longer to compact the database over time, thus they asked why this was the case, and how it could overcome.

The reply is that compaction time in CouchDB scales with the sum of "doc_count" and "doc_del_count". As explained by Adam Kocoloski, this can currently be controlled by "1) [Purging] the deleted docs (lots of caveats about replication, potential for view index resets, etc.); 2) [Rotating] over to a new database, either by querying both or by replicating non-deleted docs to the new one. Neither one is particularly palatable. CouchDB currently keeps the tombstones around forever so that replication can always work. Making changes on that front is a pretty subtle thing but maybe not completely impossible. Also, there's a new compactor in the works that is faster and generates smaller files."

Data replication: replicating only non-deleted documents (same discussion as above; see thread)

The approach could be to either run a filtered replication or block deleted documents with a validate_doc_update function on the target database (see example function here).

How to handle terabyte databases (see thread)

This was a request about improving performance, insert time, compaction and replication for terabyte databases with billions of documents (setup: CouchDB 1.2 and CouchDB 1.4). Some approaches to handle a write-heavy workload:

  • Replication: Supply parameters to allocate more resources to a given job (code example here).
  • Insert time: Ensure that e.g. compaction only runs in the background and does not impact the throughput of interactive operations; this is work in process at the moment.
  • Compaction: A new, significantly faster compactor that also generates smaller post-compaction files that also eliminates the exponential falloff in throughput observed by the inquirer is in the works. – This problem can be solved by BigCouch as it tries to partition databases.
  • Ensure to not exceed the write capacity of the RAID (this effect is amplified for partitioned databases).
Vote: Release Apache CouchDB 1.6.0 rc3 (ongoing testing and discussion; see thread)

We encourage the whole community to download and test these release artefacts so that any critical issues can be resolved before the release is made. Everyone is free to vote on this release, so get stuck in on our dev@couchdb.apache.org mailing list! Find all release artefacts we are voting on in this list. If you want to test, please follow this test procedure. The changes since last vote round can be found here.

Releases in the CouchDB Universe

Opinions

Use Cases, Questions and Answers

Get involved!

If you want to get into working on CouchDB:
  • rcouch Merge: Erlang hackers and CouchDB users, e need your help with testing and review of the rcouch merge. It's easy! Find the how-to in this post.
  • Here's a list of beginner tickets around our currently ongoing Fauxton-implementation. If you have any questions or need help, don't hesitate to contact us in the couchdb-dev IRC room (#couchdb-dev) – Garren (garren) and Sue (deathbear) are happy to help.
  • You want join us for the updates of CouchDB-Python for Python 3? Take a look at issue 231.
We'd be happy to have you!

Events

  • April 26, Delhi, India: CouchDB meetup - Understanding how design documents work
  • June 16, 17, San Francisco, CA: CloudantCON

Job opportunities for people with CouchDB skills

… and also in the news

Posted on behalf of Lena Reinhard.

by Noah Slater at April 24, 2014 07:14 PM

April 17, 2014

Joan Touzet

Understanding race-induced conflicts in BigCouch

Distributed databases with a near-real-time multi-master configuration – such as BigCouch, coming soon to Apache CouchDB – must deal with the potential of simultaneous modifications of a single resource. While the approach taken by multiple single-machine Apache CouchDB servers using regular HTTP replication is well understood, the situation changes a little bit when dealing with BigCouch-style internal replication inside a cluster.

I think it’s time to have a better understanding of what this means, and what impact this has on you as an application developer. Most of the time, there’s no change – to your app, a BigCouch-style cluster looks and feels like a single Apache CouchDB node. But when making near-simultaneous writes to the same document from different clients, you may experience document conflicts that you wouldn’t have with an Apache CouchDB 1.x single server.

How does this happen? Bear with me – this gets a bit complex. Hopefully this diagram will help.

The sequence diagram below depicts a scenario where two very closely spaced writes to the same document in a 3-node BigCouch cluster will lead to a document conflict.

Sequence diagram showing Sequence diagram illustrating a document conflict introduced by near-simultaneous writes to a 3-node cluster.

Sequence diagram illustrating a document conflict introduced by near-simultaneous writes to a 3-node cluster.

In this example, the database cluster is a 3-node cluster, with default settings of n=3, r=2 and w=2. (This means that a successful write to a document must write 2 copies to disk before an HTTP 201 status code is returned.) Client 1 and Client 2, both external client processes talking to the cluster, are both trying to update /db/doc, which is currently at revision 3. Client 1 is trying to write rev 4-1, and Client 2 is trying to write rev 4-2.

For the purposes of this example, we are going to state a specific ordering for document writes, and treat the write as being processed serially in a specific order. In reality, writes are issued in parallel with no coordination of writes. The scenario as shown is simply one of the possible event sequences you may run into, in the wild.

Client 1’s write is being mediated by Node A. For this example, Node A issues writes to nodes A, B and C, in that order. Client 2’s write is being mediated by Node C. For this example, Node C issues writes to nodes C, B and A, in that order. Both Clients’ first writes succeed (Client 1/Node A and Client 2/Node C) and return the internal equivalent of an HTTP 201 status code.

Arbitrarily, we say Client 1’s request to Node B arrives prior to Client 2’s request to Node B. (One will always be processed before the other; it doesn’t matter which one gets there first.)  Node B makes the write of revision 4-1, and returns a 201 equivalent to Node A.

At this point, Node A has 2 successful write responses back. Since the cluster is configured with w=2, a 201 is returned to Client 1 and the client disconnects; its work finished. The third write, already issued by Node A to Node C, will eventually be handled, the conflict recorded to disk and a 409 sent back to Node A. Note that both copies of the document are kept, capturing the document conflict on Node C when this write occurs. Node A’s work is now done.

Just after completing its write of revision 4-1, Node B then processes Node C’s write attempt of rev 4-2 from Client 2. This results in the conflict being written to disk, and returns the 409 equivalent to Node C. The same happens when Node C’s write to Node A is processed. Node C now has a non-conflict 201 response from itself, and the 409 responses from Node B and Node A, so it sends the client a 202 status.

At the end of the process, all 3 nodes have both versions of the document recorded, fulfilling CouchDB’s promise of eventual consistency.

Still with me? Good.

So which document “wins”? By design, the document with the higher hash value (the second part of the _rev token, i.e. _rev=##-hash) will win. If 4-1 and 4-2 were the actual _rev values, 4-2 would win. As such, there is no guarantee that the write with a 201 response will be the ‘winner.’ [1]

The closer together writes to the same document occur, the more likely it is that the cluster may still be processing a previous write when the subsequent write comes in. Even with resolution and DELETEs of the losing conflicts, document “tombstones” will be left behind on these leaf nodes to ensure replication results in eventual consistency (CouchDB’s guarantee! [2])

The best approach is to avoid these kinds of document conflicts via an access pattern where simultaneous writes are as unlikely to occur as possible. There are a number of resources out there on how to design apps this way, but one of my favourites is to never re-write a document, store all operations as new documents, and use a view or _all_docs and the startkey/endkey parameters to retrieve the latest state of a given resource.

Barring an application redesign, your CouchDB client should look for 202s and conflicts in documents consistently, and provide evidence of this result to the application layer. [3] You can also create a conflicts view to review all conflicts in a given database.

Resist the temptation to try and resolve the conflict in the CouchDB library! Only at the application layer can you best decide how to deal with a document conflict. You might initially choose to ignore conflicts, but probably it’s in your best interest to perform some sort of manual resolution and write a new, merged version based on data in all the conflicted versions.

If you’re still lost, post in the comments or on the couchdb-user mailing list and I’ll do my best to explain.


[1] https://cloudant.com/for-developers/faq/data/, “My write returned a 201, and yet I have a conflicted document -  what gives?”

[2] Doing better is a provably difficult problem. For reference, start with  L. Lamport’s Time, Clocks and the Ordering of Events in a Distributed System, Communications of the ACM 21, 7 (July 1978), 558-565.

[3] Take note: some CouchDB libraries, such as python-couchdb, do not differentiate between a 201 and a 202 response!

by Wohali at April 17, 2014 05:01 PM

The Old Official CouchDB Blog

CouchDB Weekly News, April 17

Blog Posts

Weekly CouchDB meeting – summary

  • Bigcouch Merge: work on branches has started again and will make good progress
  • rcouch Merge: code reviews have been restarted; more help with testing is needed; discussion around Windows support, will be continued on Dev-Mailing list
  • Advocate Hub: onboarding at the moment, next steps will be sent to marketing mailing list soon
  • 1.6.0 release: release candidate 3 (rc3) is being prepared now
  • COUCHDB-1986: the issue is being investigated, will be updated soon if its status changes

Major Discussions

1.6.0 changelog review (see thread)

A discussion around what exactly should be included in 1.6.0 (see changelog and documentation for details).

Handling the Welcome Request (see thread)

How to handle the welcome message that appears from a root request and direct the "/" request to another URL (setup: version 1.5 on a Windows machine).

authentication_redirect is not working (see thread)

How to handle the redirection of users after login to other databases that service page requests (and avoid errors; setup: public application with CouchDB-based authentication).

Vote: Release Apache CouchDB 1.6.0 rc2 (see thread)

The vote was aborted because of an issue brought up by the test suite.

Modeling Relationships and providing Transactional Integrity (see thread; ongoing discussion)

… and the question if _bulk_docs is transactional (hint: it's not)

Releases in the CouchDB Universe

Opinions

Use Cases, Questions and Answers

Get involved!

If you want to get into working on CouchDB:
  • rcouch Merge: Erlang hackers and CouchDB users, we need your help with testing and review of the rcouch merge. It's easy! Find the how-to in this post.
  • Here's a list of beginner tickets around our currently ongoing Fauxton-implementation. If you have any questions or need help, don't hesitate to contact us in the couchdb-dev IRC room (#couchdb-dev) – Garren (garren) and Sue (deathbear) are happy to help.
  • You want join us for the updates of CouchDB-Python for Python 3? Take a look at issue 231.
We'd be happy to have you!

Events

Job opportunities for people with CouchDB skills

… and also in the news

Posted on behalf of Lena Reinhard.

by Noah Slater at April 17, 2014 10:03 AM

April 16, 2014

The Old Official CouchDB Blog

Merging rcouch

rcouch is a variant of CouchDB that is derived from the main Apache CouchDB code base. One way to look at it is as a “future port” of CouchDB, that is for two reasons:

  1. The internals are greatly improved. In simple terms, if CouchDB would be started to day, it would look a lot like rcouch.
  2. It comes with a number of nice new features.

So whether you are a CouchDB user or a CouchDB Erlang developer, rcouch is good news for you!

Since CouchDB has been around for a while, the internal codebase is a little crufty. We are constantly working on improving that, but one of the larger efforts have been done within the rcouch project by Apache CouchDB committer Benoit Chesneau.

At the same time, Benoit added a number of nice little features that benefit CouchDB users, just to name a few:

  • _changes for views.
  • Replication from views.
  • Write-only “Drop-Box” databases.
  • Request validation on-read.
  • _db_changes (actually, we nicked that one for Apache CouchDB 1.4 already :).

For more information, see the rcouch website.

Benoit has generously donated the rcouch project back to Apache CouchDB and has worked on merging the rcouch and the CouchDB codebases. Now it is time to review the merged code and get it into Apache CouchDB proper and put it into a new release.

With that, we need your help.

How you can help, you ask? Easy!

If you are a CouchDB user, and are not afraid to build CouchDB yourself, give the rcouch merge branch a spin:

git clone https://github.com/apache/couchdb.git
cd couchdb
git checkout -b 1994-merge-rcouch origin/1994-merge-rcouch

# Read the DEVELOPERS file to install all dependencies

# test regular build:
make

# test build with static icu library
make icu=static

# test build with shared libraries
make libs=shared

# run test suite
make check

# make a release
make rel

# run:
./rel/apache-couchdb/bin/couchdb start

# now CouchDB is running at http://127.0.0.1:5984/_utils/, as usual, you just won’t see any output.


If you are an Erlang developer, we could use your help with code reviews. Any small chunks will help!

Please see the associated JIRA ticket for more information.

Thanks so much!


FaQ: how does this relate to BigCouch?

It doesn’t really, the BigCouch merge is ongoing and we will announce updates and requests for review when the time is right. Well, actually, if we can convince you to help with the review of the rcouch merge, we can put even more resources on the BigCouch merge :)

by Jan at April 16, 2014 08:50 PM

April 10, 2014

The Old Official CouchDB Blog

CouchDB Weekly News, 10 April

Releases

Apache CouchDB 1.5.1 released
This is a security release. Download link | Release notes

Blog Posts

Major Discussions

Writing many docs at once: bench marking a 10k write to a CouchDB server (see thread here)
A discussion around handling and measurements of bulk input in CouchDB.
Question about "complex" range queries (see thread here)
Requirements for sort orders of data views.
Is the revision field deterministic? (see thread here)
Quoting Robert Samuel Newson's reply: "Yes, it’s deterministic. The same document with the same history will have the same _rev value. This is an optimization over the previous algorithm where _rev was a random UUID. […] The advantage is that two servers receiving the same update can more optimally replicate. They still have to check that the target has all _id/_rev pairs but will usually be able to skip actually transmitting document and attachment content."

CouchDB Universe

  • Apache Con has taken place from April 7-9. You can find the slides of the talks given here

Releases in the CouchDB Universe

  • New Erlang Version is out
  • mbtiles2couchdb, for using CouchDB as a simple tiles server
  • RCouch has a new home: announcement | the new home
  • PPnet, a minimal social network to drop into websites based on PouchDB
  • sabisu, a sensu web UI, got open sourced by Cloudant last week
  • Janus, an online storage for offline Web Apps built using PouchDB
  • couche 0.0.2, a couchdb client for node, with specific apis
  • mock-couch, an http server pretending to be couchdb, for unit testing
  • couchdb-sync 0.1.1 - a generic couchdb replicator which is basically an eventemitter
  • hackoregon-couch 0.0.2 which exports database information from PostgreSQL and imports into CouchDB
  • overwatch 0.2.7, a deterministic couchdb replication watcher

Opinions

Use Cases, Questions and Answers

Get Involved!

If you want to get into working on CouchDB:
  • here's a list of beginner tickets around our currently ongoing Fauxton-implementation. If you have any questions or need help, don't hesitate to contact us in the couchdb-dev IRC room (#couchdb-dev) – Garren (garren) and Sue (deathbear) are happy to help.
  • Your help on updating CouchDB-Python for Python 3. Wanna join? Please participate here.
We'd be happy to have you!

New PMC Member

  • Joan Touzet joins the Apache CouchDB Project Management Committee today. Joan has made outstanding, sustained contributions to the project. Welcome to the Couch, Joan!

Events

Job opportunities

… and also in the news

Posted on behalf of Lena Reinhard.

by Noah Slater at April 10, 2014 10:59 AM

April 09, 2014

The Old Official CouchDB Blog

Apache CouchDB 1.5.1 Released

Apache CouchDB 1.5.1 has been released and is available for download.

CouchDB is a database that completely embraces the web. Store your data with JSON documents. Access your documents with your web browser, via HTTP. Query, combine, and transform your documents with JavaScript. CouchDB works well with modern web and mobile apps. You can even serve web apps directly out of CouchDB. And you can distribute your data, or your apps, efficiently using CouchDB’s incremental replication. CouchDB supports master-master setups with automatic conflict detection.

Grab your copy here:

http://couchdb.apache.org/

Pre-built packages for Windows and OS X are available.

CouchDB 1.5.1 is a security release, and was originally published on 2014-04-09.

These release notes are based on the changelog.

Changes

  • Add the max_count option (UUIDs Configuration) to allow rate-limiting the amount of UUIDs that can be requested from the /_uuids handler in a single request.

by djc at April 09, 2014 05:39 PM

Apache CouchDB 1.5.0 Released

Apache CouchDB 1.5.0 has been released and is available for download.

CouchDB is a database that completely embraces the web. Store your data with JSON documents. Access your documents with your web browser, via HTTP. Query, combine, and transform your documents with JavaScript. CouchDB works well with modern web and mobile apps. You can even serve web apps directly out of CouchDB. And you can distribute your data, or your apps, efficiently using CouchDB’s incremental replication. CouchDB supports master-master setups with automatic conflict detection.

Grab your copy here:

http://couchdb.apache.org/

Pre-built packages for Windows and OS X are available.

CouchDB 1.5.0 is a feature release, and was originally published on 2013-11-05.

These release notes are based on the changelog.

Changes

  • COUCHDB-1781: The official documentation has been overhauled. A lot of content from other sources have been merged, and the index page has been rebuilt to make the docs much more accessible. #54813a7
  • A new administration UI, codenamed Fauxton, has been included as an experimental preview. It can be accessed at /_utils/fauxton/. There are too many improvements here to list them all. We are looking for feedback from the community on this preview release.
  • COUCHDB-1888: Fixed an issue where admin users would be restricted by the public_fields feature.
  • Fixed an issue with the JavaScript CLI test runner. #be76882, #54813a7
  • COUCHDB-1867: An experimental plugin feature has been added. See src/couch_plugin/README.md for details. We invite the community to test and report any findings.
  • COUCHDB-1894: An experimental Node.js-based query server runtime has been added. See Experimental Features for details. We invite the community to test and report any findings.
  • COUCHDB-1901: Better retry mechanism for transferring attachments during replication. #4ca2cec

by djc at April 09, 2014 05:37 PM

April 08, 2014

The Old Official CouchDB Blog

CouchDB and the Heartbleed SSL/TLS Vulnerability

You may or may not have heard about the Heartbleed SSL/TLS vulnerability yet. Without much exaggeration, this is a big one.

What does this mean for CouchDB?

1. If you are using CouchDB with the built-in SSL support, you are at the whim of Erlang/OTP’s handling of SSL. Lucky for you, while they do use OpenSSL for the heavy lifting, they do the TLS/SSL handshake logic in Erlang (Source). That means you are not affected by this issue.

2. If you are using CouchDB behind a third-party proxy server you are at the whim of the SSL library it uses. For the big three Apache, nginx and HAProxy it’s all OpenSSL. So if they are using OpenSSL 1.0.1-1.0.1f with heartbeat support (RFC6520) enabled (the default), you need to take action. As far as I can tell now:

  • 0. Check if you are vulnerable
  • 1. Stop your service.
  • 2. Upgrade to OpenSSL 1.0.1g or recompile OpenSSL without heartbeat support.
  • 3. Request new cert from your SSL cert vendor.
  • 4. Revoke your old cert.
  • 5. Invalidate all existing sessions by changing the CouchDB couchdb_httpd_auth/secret configuration value to a new UUID.
  • 6. Restart your service.
  • 7. Invalidate all your user’s passwords and/or OAuth tokens.
  • 8. Notify your users that any of their data and passwords are potentially compromised.

by Jan at April 08, 2014 03:53 PM

The Little Things(1): Do Not Delete

CouchDB takes data storage extremely seriously. This usually means we work hard to make sure that the CouchDB storage modules are as robust as we can make them. Sometimes though, we go all the way to the HTTP API to secure against accidental data loss, saving users from their mistakes, rather than dealing with hard drives and kernel caches that usually stand in the way of safe data storage.

The scenario:

To delete a document in CouchDB, you issue the following HTTP request:

DELETE /database/docid?rev=12345 HTTP/1.1

A common way to program this looks like this:

http.request('DELETE', db + '/' + docId + '?rev=' + docRev);

So far so innocent. Sometimes though, users came to us and complained that their whole database was deleted by that code.

Turns out the above code creates a request that deletes the whole database, if the docId variable isn’t set correctly. The request then looks like:

DELETE /database/?rev=12345 HTTP/1.1

It looks like an honest mistake, once you check the CouchDB log file, but good old CouchDB would just go ahead and delete the database, ignoring the ?rev= value.

We thought this is a good opportunity to help users not accidentally losing their data. So since late 2009 (yes, this is an oldie, but it came up in a recent discussion and we thought it is worth writing about :), CouchDB will not delete a database, if it sees that a ?rev= parameter is present and it looks like that this is just a malformed request, as database deletions have no business requiring a ?rev=.

One can make an easy argument that the code sample is fairly shoddy and we’d agree. But we are not here to argue how our users use our database beyond complying with the API and recommended use-cases. And if we can help them keep their data, that’s a win in our book

Continuing down this thought, we thought we could do one better. You know that to delete a document, you must pass the current rev value, like you see above. This is to ensure that we don’t delete the document accidentally without knowing that someone else may have added an update to it that we don’t actually want to delete. It’s CouchDB’s standard multi version currency control (MVCC) mechanism at work.

Databases don’t have revisions like documents, and deleting a database is a simple HTTP DELETE /database away. Databases, however, do have a sequence id, it’s the ID you get from the changes feed, it’s an number that starts at 0 when the database is created and increments by 1 each time a document is added, updated or deleted. Each state of the database has a single sequence ID associated with it.

Similar to a rev, we could require the latest sequence ID to delete a database, as in:

DELETE /database?seq_id=6789

And deny database deletes that don’t carry the latest seq_id. We think this is a decent idea, but unfortunately, this would break backwards compatibility with older versions of CouchDB and it would break a good amount of code in the field, so we are hesitant to add this feature. In addition, sequence IDs change a little when BigCouch finally gets merged, so we’d have to look at this again then.

In the meantime, we have the protection against simple coding errors and we are happy that our users keep their hard earned data more often now.

by Jan at April 08, 2014 01:59 PM

April 03, 2014

The Old Official CouchDB Blog

CouchDB Weekly News, April 3

Major Discussions

Vote on release of Apache CouchDB 1.5.1-rc.1 (will be released as Apache CouchDB 1.5.1 — see thread)

The vote passed.

Importing CSV data into a CouchDB document using Python-Cloudant module (discussion still open — see thread)

Approaches brought up: (1) Transforming a CSV file into a JSON file with Python; (2) rc_scv, a direct rcouch extension; (3) using Google Refine and Max Ogden's refine uploader (see visual example here); (4) CSV2Couch. Further information can also be found in this blog post on "Using Python with Cloudant" and the newer Cloudant-Python interface

CouchDB 1.6.0 proposals (see thread)

Discussion around the open blocker plus how to deal with it and around re-cutting 1.6.x from master. Releasing 1.5.1 will take precedence.

Poll around Erlang whitespace standards (see thread; the poll is still open)

Joan Touzet: "I know many of you are fed up with not being able to auto format in your favourite editor and match the CouchDB Erlang coding standards, or receiving pull requests that are formatted poorly. I'd like to fix that with an appropriate whitespace standard, and supplementary plugins for vi and Emacs that will just Do The Right Thing and let us all stop worrying about whitespace corrections in pull requests."

There's currently a poll around this topic which is still open.

Multiple Concurrent Instances of CouchDB on Mac OS X 10.7.5 (see thread)

Approaches: (1) for a powerful enough machine Vagrant could be used to spin up a few CouchDB VMs, e.g. with CouchDB-Vagrant. Other options could be: (2) using Docker, (3) Node-Multicouch (used in Hoodie) or (4) this script to configure isolated instances, it should be possible to point couchdb to the CouchDB commands inside the .app.

CouchDB Universe

Releases in the CouchDB Universe

  • Wilt 3.0.0 – a browser/server based CouchDB API library based on the SAG CouchDB library for PHP
  • contentful-2-couchdb – a proof of concept for easy data export to CouchDB and replication use
  • Availability of MariaDB 10 announced
  • PouchDB released a new website
  • PouchDB 2.1.0 release includes e.g. (all release notes here):
    • Support optional leveldown builds
    • Replication performance improvements
    • Fix for localStorage detection in Chrome Apps
    • Improved error reporting from replicator et al.

Opinions

Use Cases, Questions and Answers

Getting involved into CouchDB

If you want to get into working on CouchDB: here's a list of beginner tickets you can get started with. These are issues around our currently ongoing Fauxton-implementation. If you have any questions or need help, don't hesitate to contact us in the couchdb-dev IRC room (#couchdb-dev) – Garren (garren) and Sue (deathbear) are happy to help. We'd appreciate having you!

New Committers and PMC Members

… and also in the news

Posted on behalf of Lena Reinhard.

by Noah Slater at April 03, 2014 10:19 AM

March 27, 2014

The Old Official CouchDB Blog

CouchDB Weekly News, March 27

Welcome to the Apache CouchDB weekly news! From today on, we’ll bring you the highlights of what happened in the CouchDB Universe each thursday.

Major Discussions

BigCouch vs. Couchbase
A comparison between the two, around conflict solving, revision docs, nodes, replicas and hashing. Find the thread here.
Healthcare projects running on CouchDB
Albin Stigö asked for healthcare companies / projects using CouchDB. In the thread, a collection of examples and reasons why this is a good fit was discussed. CouchDB works well in healthcare due to its relative ease of configuration and deployment, easy synchronization, backups, attachment-handling and notifications and mobile-readiness. Some examples of projects / companies using CouchDB: CommCare HQ, Mobius, Neurofoundation. Find his summary and the entire thread here.

Weekly CouchDB meeting – summary

  • 1.6.rc-2: discussion around blocker; will be collated and sent to the mailing list
  • Marketing: there'll be a weekly CouchDB news (which you are currently reading)
  • Fauxton - status: Futon will be removed as soon as Fauxton-implementation is done; following release will be marked as beta
  • Merges: discussion around BigCouch and rcouch merges will also be collated and sent to the mailing list

CouchDB Universe

Opinions

… and also in the news

Posted on behalf of Lena Reinhard.

by Noah Slater at March 27, 2014 03:29 PM

March 24, 2014

Joan Touzet

Hello world!

This is a test post for integration with Planet CouchDB, the aggregator for all things bloggy and CouchDB-related. I’m excited to be a part of the group!

by Wohali at March 24, 2014 01:02 PM

March 13, 2014

The Old Official CouchDB Blog

On The CouchDB Community

Jan Lehnardt sent a link to the CouchDB marketing@couchdb.apache.org mailing list where Ari Najarian used CouchDB in a five part course to teach beginners how to program. It’s a great read and I invite you to visit the page.

I would like to slice out one quote from the article where Ari described the CouchDB community:

“The personalities and voices in the CouchDB community are, hands down, the most helpful, generous, welcoming, insightful, ethical, principled, future-minded group of developers I’ve ever encountered in one place. As far as online communities go, you can’t find a safer, more encouraging group of advocates. These people are role models that will help beginners to understand what “open-source” can really be about: social justice, diversity, inclusion, and collaboration.”

This is the reason why I became a part of the Apache CouchDB project - because the community is so awesome.

by andywenk at March 13, 2014 04:49 PM

February 24, 2014

The Old Official CouchDB Blog

The State of CouchDB

This is a rough transcript of the CouchDB Conf, Vancouver Keynote.

Welcome

Good morning everyone. I thank you all for coming on this fine day in Vancouver. I’m very happy to be here. My name is Jan Lehnardt and I am the Vice President of Apache CouchDB at the Apache Software Foundation, but that’s just a fancy title that means I have to do a bunch of extra work behind the scenes. I’m also a core contributor to Apache CouchDB and I am the longest active committer to the project at this point.

I started helping out with CouchDB in 2006 and that feels like a lifetime ago. We’ve come a long way, we’ve shaped the database industry in a big way, we went though a phoenix from the ashes time and came out still inspiring future generations of developers to do great things.

So it is with great honour that I get to be here on stage before you to take a look at the state of CouchDB.

Numbers

I’d like to start with some numbers:

  • In 2013 we added 15 committers to the project, up to a total of 30. Thats 2x the number of people regularly contributing to CouchDB!
  • The year isn’t yet over, but these committers already created 3x the commits of 2012. And they have committed more than in any other year in CouchDB’s history.
  • We have shipped eight releases: 1.0.4 1.1.2, 1.2.1, 1.2.2, 1.3.0, 1.3.1, 1,4.0 and 1.5.0 just this year, that is up from one(!) last year.
    • thanks to our new release schedule we are getting more features to more people faster by focusing on small iterative changes forward.
  • 20% more JIRA tickets and 50% more GitHub issues

We have made a lot of changes in 2012 to make 2013 a great year for CouchDB and it sure looks like we succeeded and that 2014 is only going to trump that.

I’d like to thank everyone on the team for their hard work.

Currently

We’ve just shipped CouchDB 1.5.0 last week and it comes with a few exciting new things as previews, for you to try out and play with and report any issues with back to us. And that is on top of all the regular bug fixing and other improvements.

  1. A completely new developed admin UI, nicknamed Fauxton, that is poised to replace the much-loved, but increasingly dated Futon. I’d like to personally thank the Fauxton team: Sue “Deathbear” Lockwood, Russell “Chewbranca” Branca, Garren Smith and many more volunteers for their work as well as the company Cloudant for sponsoring a good chunk of that work. Great job everyone! Fauxton is going to be replacing Futon in one of the next few releases and will give us the foundation for the next stage of CouchDB’s life.

  2. Plugins. While it was always possible to write plugins for CouchDB, you kind of had to be an expert in CouchDB to get started. We believe that writing plugins is a great gateway drug to getting more people to hack on CouchDB proper, so we made it simpler to build plugins and to install plugins into a running instance of CouchDB. It is still very early days, we don’t even have a plugin registry yet, but we are surely excited about the prospects of installing GeoCouch with a single click of a button in Futon or Fauxton. We also included a template plugin that you can easily extend and make your own, along with a guide to get you started.  

    The plugins effort also supports a larger trend we are starting to follow with the CouchDB core codebase: decide on a well-defined core set of functionality and delegate more esoteric things to a rich plugin system That means we no longer have to decline the inclusion of useful code like we’ve done in the past, because it wasn’t applicable to the majority of CouchDB users. Now we can support fringe features and plugins that are only useful to a few of our users, but who really need them.

  3. A Node.JS query server. CouchDB relies on JavaScript for a number of core features and we want to continue to do so. In order to keep up with the rapid improvements made to the JavaScript ecosystem we have tentative plans to switch from a Spidermonkey-driven query server to a V8-driven one. In addition, the Node.js project has a really good installation story, something that we had trouble with in the past, and includes a few utilities that make it very easy for us to switch the query server over.

    All this however is not to blindly follow the latest trends, but to encourage the community to take on the query server and introduce much needed improvements. The current view server is a tricky mix of JS, Erlang and C and we are not seeing many people daring to jump into that. In a second step we expect these improvements to trickle down to the other query server implementations like Python or PHP and make things better for everyone. For now this is also a developer preview and we are inviting all Node.js developers to join us and build a a better query server.

  4. Docs landed in 1.4.0, but 1.5.0 is seeing a major update to the now built-in documentation system. With major thanks to Alexander Shorin, Dirkjan Ochtmann and Dave Cottlehuber who were instrumental in that effort, CouchDB now has “really good docs” instead of a “really crappy wiki”, that are shipped with every release and are integrated with Futon and Fauxton.

Beyond

The immediate next area of focus for the CouchDB project is the merging of two forks: BigCouch and rcouch.

BigCouch is a Dynamo implementation on top of CouchDB that manages a cluster of machines and makes them look as a single one, adding performance improvements and fault tolerance to a CouchDB installation. This is a major step in CouchDB’s evolution as it was designed for such a system from the start, but the core project never included a way to use and manage a cluster. Cloudant have donated their BigCouch codebase to the Apache project already and we are working on an integration.

rcouch is a what I would call a “future port” of CouchDB by longtime committer and contributor Benoit Chesneau. rcouch looks like CouchDB would, if we started fresh today with a modern architecture. Together with BigCouch’s improvements, this will thoroughly modernise CouchDB’s codebase to the latest state of the art of Erlang projects. rcouch also includes a good number of nifty features that make a great addition to CouchDB’s core feature set and some great plugins.

Finally, we’ve just started an effort to set up infrastructure and called for volunteers to translate the CouchDB documentation and admin interface into all major languages. Driven by Andy Wenk from Hamburg, we already have a handful of people signed up to help with translations for a number of different languages.

This is going to keep us busy for a bit and we are looking forward to ship some great releases with these features.

tl;dr

2013 was a phenomenal year for Apache CouchDB. 2014 is poised to be even greater, there are more people than ever pushing CouchDB forward and there is plenty of stuff to do and hopefully, we get to shape some more of the future of computing.

Thank you!

by Jan at February 24, 2014 05:53 PM

Cloudant and IBM: Our Commitment to Apache CouchDB

IBM have announced that they are acquiring Cloudant.

Adam Kocoloski is co-founder and CTO of Cloudant as well as serving on CouchDB's Project Management Committee. And with his permission, I am re-posting an email he sent to the CouchDB developer list a few hours ago.

In his words:

"Apache CouchDB means a great deal to me, and to Cloudant as a company. Cloudant and CouchDB have grown alongside each other over the past several years in one of the more authentic vendor/community collaborations I can think of in Apache history. Today marks the next step in Cloudant’s growth as we enter into a definitive agreement to become part of IBM.

"What does this mean for CouchDB? I would not have agreed to this transaction if I had any concerns about Cloudant’s ability to continue its contributions and collaboration with Apache CouchDB. IBM has a strong track record in open source software and a productive relationship with Apache; in fact, IBM was instrumental in bringing CouchDB to the ASF many years ago. IBM is fully supportive of our efforts here, and I’m looking forward to bringing increased resources to bear in support of the project.

"CouchDB has the potential to shape the future of distributed data management and computing. 2013 was a year of tremendous progress, as we doubled our committer base and shipped no fewer than eight releases. Already in 2014 we’ve seen amazing progress on long-standing initiatives to enhance the core of the system. The timing is right — in the market and for the community — to take the next big step forward. With your help, that is exactly what we will do.

"Truly, the future of CouchDB is CouchDB."

Thanks Adam!

I'd like to extend my hearty congratulations to everyone at Cloudant.

The future for CouchDB looks very interesting...

by Noah Slater at February 24, 2014 05:47 PM

February 14, 2014

The Old Official CouchDB Blog

Board Report (Februrary 2014)

Description

CouchDB submits a board report every quarter. Here's a copy of our February board report.

Releases

No releases in this time period.

Release has been blocked on a number of issues, but is actively being worked on.

Recent Activity

  • Number of the core devs met in Vienna to discuss the pending merges.
  • Finalising the merge of Benoit Chesneau’s rcouch fork.
  • Working on the BigCouch merge from Cloudant.
  • Created a replication list to discuss specific replication topics.
  • New marketing list about to be created for new marketing team.
  • Confluence wiki set up, and migration being planned.
  • Review Board instance set up, and discussion about review ongoing.
  • Translation work going well.
  • Community-provided packages added for Ubuntu Precise and upcoming Trusty release.

Community

Including the following additions, CouchDB has 31 committers and 9 PMC members.

New committers:

  • Nick North

No new PMC members. Most recent PMC addition Nov 9th, 2012.

Mailing list stats:

  • announce
    • 151 subscribers (+20)
    • 1 message since May (-1)
  • user
    • 1405 subscribers (-26)
    • 1086 messages since May (+280)
  • erlang
    • 154 subscribers (+8)
    • 14 messages since May (-8)
  • dev
    • 602 subscribers (-4)
    • 1977 messages since May (+1097)
  • commits
    • 104 subscribers (-1)
    • 2735 messages since May (+1694)
  • l10n
    • 31 subscribers (+10)
    • 207 messages since May (+104)
  • replication
    • 47 subscribers
    • 35 messages since May

Issues

None.

by Noah Slater at February 14, 2014 05:24 PM

Board Report (November 2013)

CouchDB submits a board report every quarter. Here's a copy of our November board report.

Description

Apache CouchDB is a database that uses JSON for documents, JavaScript for MapReduce queries, and regular HTTP for an API.

Releases

Recent Activity

  • Finalising the merge of Benoit Chesneau’s rcouch fork.
  • Preparation of CouchCamp Vienna, a community run weekend hackathon.
  • Successful run of CouchDB Conf Vancouver with ~80 attendees, 13 speakers. Videos will be available.
  • Created an I18N list and translation team to drive translation efforts.
  • Passed a proposal on using Influitive to boost our community engagement.

Community

Including the following additions, CouchDB has 29 committers and 9 PMC members.

New committers:

No new PMC members. Most recent PMC addition Nov 9th, 2012.

Mailing list stats:

  • announce
    • 131 subscribers (+37)
    • 2 message since August (+1)
  • user
    • 1431 subscribers (-10)
    • 806 messages since August (+310)
  • erlang
    • 146 subscribers (+25)
    • 22 messages since August (15)
  • dev
    • 606 subscribers (+7)
    • 880 messages since August (-130)
  • commits
    • 105 subscribers (-2)
    • 1041 messages since August (+344)
  • l10n
    • 21 subscribers (+21)
    • 103 messages since August (+103)

Issues

None.

by Noah Slater at February 14, 2014 05:20 PM

Kanso

How I want to write node: stream all the things!

I wrote the async library back when Node first removed Promises from core (yes, that really was the case). Back then, I preferred to do with plain callbacks what was usually done by including third-party Promise, Future or Continuable libraries instead.

I find a certain elegance in describing complex patterns using simple parts, particularly when the parts are made composable through a common interface. In Node, and JavaScript in general, you're likely to use a combination of Promises, callbacks, Streams, Event Emitters and even ES6 Generators. To me, however, these all represent values in the future. What if we could reduce entire programs to transformations over a Stream, and have just one API to rule them all? Well, here is my proposal, for your consideration and feedback: Highland, a high-level streams library

var _ = require('highland');

// Mapping over a stream
var doubled = _([1, 2, 3, 4]).map(function (x) {
    return x * 2;
});

// Reading files in parallel (4 at once)
var data = filenames.map(readFile).parallel(4);

// Handling errors
data.errors(function (err, rethrow) {
    // handle or rethrow error
});

// Piping to a Node stream
data.pipe(output);

// Pipe in data from a Node stream
var output = fs.createWriteStream('output');
var docs = db.createReadStream();

// wrap a node stream and pipe to file
_(docs).filter(isBlogpost).pipe(output);

// or, pipe in a node stream directly:
docs.pipe(_().filter(isBlogpost)).pipe(output);

// Handle events as a stream
var clicks = _('click', btn).map(1);
var counter = clicks.scan(0, _.add);

counter.each(function (n) {
    $('#count').text(n);
});

This is not a new idea, but I believe it is a new combination of features, which is important. Those of you that work with Streams in Node may be aware of the excellent modules by Dominic Tarr, similarly if you're from the browser you might use FRP libraries such as RxJS. These are all great, but they hint at a deeper abstraction, one which would allow us to write entire programs using Streams. In an attempt to achieve this, Highland implements:

  • Back-pressure support - Data sources are regulated so that slow consumers are not overwhelmed
  • Laziness - So we can use the reading of Streams to sequence the execution of code - this means we can choose to read from files in parallel or series, or stop reading after an error, for example
  • Asynchronous operations - So we're able to handle async data sources and async transformations
  • Error and data channels - So we can manage error propagation from sync and async code
  • Compatible with Node Streams - So we can pipe Node Streams to and from Highland Streams and play nicely with the Node ecosystem

If you find this idea intriguing and want to explore it further, then check out the Highland website. I'd love to hear your experiences. Source code on GitHub.

February 14, 2014 04:33 PM

February 13, 2014

The Old Official CouchDB Blog

Packages for Ubuntu 12.04 Precise

I’m delighted to announce the availability of Apache CouchDB Ubuntu Precise (12.04) packages, with integrated upstart support.

These have been contributed with support from Mobius Medical Systems, LP, who use Apache CouchDB in their product Mobius3D/FX for oncology and radiology, and funded the development of this work through the Couch Firm.

This would not have been possible without the assistance of Jason DeRose (who has lead the 1.5.0 package going into the next Ubuntu Trusty release), and Noah Slater, who was surprised on reviewing the package to find so much of his original work there!

Installation should be straightforward, usual caveats around making backup before upgrading precautions apply, noting that between 1.0.1 and 1.5.0 there are a number of key changes, including the on-disk data format used by the .couch files was upgraded. Although it should keep your dbs intact and do the right thing for your local.ini files, always have a backup - or two!

sudo apt-get install python-software-properties -y
sudo add-apt-repository ppa:couchdb/stable -y
sudo apt-get update -y
# remove any existing couchdb
sudo apt-get remove couchdb couchdb-bin couchdb-common -yf
# see my shiny 1.5.0 goodness
sudo apt-get install -V couchdb
    Reading package lists... Done
    Building dependency tree
    Reading state information... Done
    The following extra packages will be installed:
       couchdb-bin (1.5.0-0ubuntu2)
       couchdb-common (1.5.0-0ubuntu2)
       couchdb (1.5.0-0ubuntu2)
     … Y …

# manage via upstart
sudo stop couchdb
    couchdb stop/waiting
sudo start couchdb
    couchdb start/running, process 3541
…

You can of course modify or duplicate the /etc/init/couchdb.conf script, to support running multiple CouchDB instances or users on the same box.

Note there's also a couchdb/dev PPA which will be used for testing and updating the next release, e.g. the upcoming 1.6.0, before switching it over to the stable branch once it's had enough eyes on it.

by dch at February 13, 2014 12:19 PM

December 11, 2013

The Old Official CouchDB Blog

CouchDB Conf Videos

Videos from CouchDB Conf are now available.

CouchDB everywhere with PouchDB
Dale Harvey, Mozilla
PouchDB is CouchDB written in JavaScript, that means it runs everywhere, I mean everywhere. Find out about why this changes everything for CouchDB and app developers, as well as the latest updates and status of the project.

CouchDB Writ Large
Mike Miller, Cloudant
In this talk, Mike Miller describes how CouchDB fits into Cloudant's software stack as one of many open source projects the company uses to run distributed database clusters around the world.

Replication, FTW!
Benjamin Young, Cloudant
Jan's "call to arms" earlier this year made replication the central focus of Apache CouchDB. Replication is the feature that makes CouchDB so distinctive in any marketplace (open or otherwise) and sets it apart from the NoSQL pack. We'll take a look at the various replicating databases, how we can extend the reach of replication, and how we can help others find their way into this world of JSON juggling.

10 Common Misconceptions about CouchDB
Joan Touzet, Atypical
I've consulted with hundreds of people who use CouchDB, and the same sorts of questions keep coming up. Come to this talk if you want to know more about the kinds of mistakes many users make when thinking about how to use the database in their application. I'll talk a bit about the "rough edges" of CouchDB, and how to work them to your advantage.

Experiences using CouchDB inside Microsoft's Windows Azure team
Will Perry and Brian Benz
Will Perry, a developer on the Windows Azure team, is part of a small team at Microsoft that has been using CouchDB extensively on an internal project. In this talk, he'll share motivation for using CouchDB, experiences using and running CouchDB in Azure, design and architectural patterns the team used and a quick run-down of some of the things they love and struggle with on a team more used to relational SQL DBs.

Deep Dive into a Shallow Write Pool
Jason Johnson, IBM SoftLayer
When storing data safely, disk I/O is almost always a major bottleneck. In this talk, we'll examine some of CouchDB's write patterns and explore how we can tune underlying storage media to complement those patterns.

Say Hello to Fauxton, the New Web Dashboard for CouchDB
Russell Branca, Cloudant
In this talk, Cloudant Engineer Russell Branca discusses the new Web dashboard that will soon be released for Apache CouchDB.

Making CouchDB Plugins
Jason Smith, Nodejitsu
CouchDB now has plugin support! This talk explains the design of the plugin system and demonstrates extending CouchDB by building example plugins. From "my first Erlang project" to major CouchDB changes, plugins have something for everybody.

Personal Web Apps
Nathan Vander Wilt, freelance product developer
CouchDB is great at keeping track of all sorts of personal data — everything from notes and contacts, to sharing a live stream of photos from a balloon 250 feet above a construction site. I'll demo of some of the more interesting apps I've been building for my "personal cloud" and talk about the CouchDB features which make them easy. We'll also explore what CouchDB *doesn't* do and how to get those things done anyway.

How CouchDB is powering the next-generation cloud storage
Sascha Reuter, doctape / tape.io GmbH
This talk will give you an overview on how we leverage CouchDB to be the heart of our cloud-storage service. It will cover a whole bunch of fascinating real-life experiences, as well as some nifty tricks on how to unleash CouchDB's full potential in production. I'll show off how the mighty changes-stream helps us interconnecting different components of our service, as well as pushing realtime UI updates & notifications to our users. I'll also tell you about things to avoid, to guarantee full performance, data consistency and high availability in production. To the end, I'll show off how we use CouchDB even as our global queue for processing & conversion jobs and why this is actually a pretty good idea.

Open Data with Couch, Pouch, and Cloudant: Liberating the Laws of Massachusetts
Calvin Metcalf
As a member of Code for Boston, the Boston Code for America Brigade I scrapped the complete laws of Massachusetts to JSON, put them into a CouchDB database on Cloudant, and then used Cloudant to implement full-text search and PouchDB to make a demo app for people to browse the laws. Learn how couch can help distribute open data when that data is too big to just dump into github.

War stories from npmjs.org
Charlie Robbins & Jason Smith, Nodejitsu
Q&A with Nodejitsu and npmjs.org, the package manager for the Node.js server-side JavaScript platform — running CouchDB on the back end.

Check out the full playlist on YouTube.

Thank you to Cloudant for recording and making these videos available.

by Noah Slater at December 11, 2013 03:53 PM

November 09, 2013

The Old Official CouchDB Blog

CouchDB will go multilingual - looking for contributors!

The Apache CouchDB project is pleased to announce the creation of a localization team. The l10n@couchdb.apache.org mailing list has been set up to cover everything l10n- and i18n-related in Apache CouchDB.

The first steps will be to set up some tools to enable easy translation of the documentation and (at a later point) the administration interface (Futon/Fauxton). We are looking for people who want to help out. Would you like to read the CouchDB documentation in another language, and have some time to spare? Please help out! Bonus points if you have experience with translation or localization-related tools and best practices.

We’re just getting started: we have some ideas on how to get started, but we need more help. If you’re interested, please subscribe to l10n@couchdb.apache.org and let us know!

Cheers from the Apache CouchDB I10n team

by andywenk at November 09, 2013 10:09 PM

November 05, 2013

The Old Official CouchDB Blog

CouchDB Conf is Next Week

It’s almost time for CouchDB Conf, held in Vancouver on November the 13th. That’s the day before Cascadia JS. If you don’t have your ticket to CouchDB Conf yet, there’s still time secure a place. Come meet the community, and learn about the future of CouchDB. The ticket includes a reception at Cascadia JS, which starts the day after CouchDB Conf.

Purchase your ticket for CouchDB Conf now

The conference will include sessions that span Apache CouchDB and related technologies — covering everything from getting started to advanced features as well as CouchDB internals, application development, and best practices. Attendees will also get updates on other projects in the community such as PouchDB, a Web browser-based database capable of replicating data with Apache CouchDB and other compatible databases. Featured speakers include Jan Lehnardt, Hoodie; Joan Touzet, Atypical; Brian Benz, Microsoft; and Dale Harvey, Mozilla.

Featured Discussions:

  • Apache CouchDB is the database that replicates. CouchDB-style replication is now supported in a wide range of databases that live in browsers (PouchDB), mobile (TouchDB), and the cloud. Many of the talks will cover various aspects of using replication and modeling your data to work with it.
  • Fauxton is the new Futon, CouchDB's Web-based administration console. Fauxton brings a fresh, modular approach to UI for Apache CouchDB. It is available at /_fauxton in Apache CouchDB 1.5, and will eventually become the new /_utils UI.

Apache CouchDB Conf is the event to attend to expand knowledge, meet project committers and contributors, and find out where Apache CouchDB is headed.

Visit the conference website for more information.

We hope to see you there!

by Noah Slater at November 05, 2013 05:04 PM

October 10, 2013

The Old Official CouchDB Blog

Registration Is Open for CouchDB Conf, Nov 13th

CouchDB Conf is a one-day conference in Vancouver, Canada on November 13, 2013. I am excited to let you know that registration is now open! Early bird tickets are $150, and are available until October 13th. (So get yours quick!)

Purchase your ticket for CouchDB Conf now

CouchDB Conf will convene 200 developers and technology evangelists. They will come together to learn about CouchDB, related technologies, and new projects in the community. The agenda will cover everything from getting started to advanced features and internals, app development, and best practices.

View the confirmed speakers

We expect the conference to sell out quickly, so register today to avoid disappointment!

by Noah Slater at October 10, 2013 05:41 PM

Apache CouchDB 1.4.0 Released

Apache CouchDB 1.4.0 has been released and is available for download.

CouchDB is a database that completely embraces the web. Store your data with JSON documents. Access your documents with your web browser, via HTTP. Query, combine, and transform your documents with JavaScript. CouchDB works well with modern web and mobile apps. You can even serve web apps directly out of CouchDB. And you can distribute your data, or your apps, efficiently using CouchDB’s incremental replication. CouchDB supports master-master setups with automatic conflict detection.

Grab your copy here:

http://couchdb.apache.org/

Pre-built packages for Windows and OS X are available.

CouchDB 1.4.0 is a feature release, and was originally published on 2013-09-03.

These release notes are based on the changelog.

Upgrade Notes

  • We now support Erlang/OTP R16B and R16B01; the minimum required version is R14B.
  • User document role values must now be strings. Other types of values will be refused when saving the user document.

Changes

  • COUCHDB-1684: Support for server-wide changes feed reporting on creation, updates and deletion of databases. #917d8988
  • COUCHDB-1139: it’s possible to apply list functions to _all_docs view. #54fd258e
  • Automatic loading of CouchDB plugins. #3fab6bb5
  • Allow storing pre-hashed admin passwords via _config API. #c98ba561
  • COUCHDB-1772: Prevent invalid JSON output when using all_or_nothing _bulk_docs API. #dfd39d57
  • Add a configurable whitelist of user document properties. #8d7ab8b1
  • COUCHDB-1852: Support Last-Event-ID header in EventSource changes feeds. #dfd2199a
  • Much improved documentation, including an expanded description of validate_doc_update functions (commit:ef9ac469) and a description of how CouchDB handles JSON number values (#bbd93f77).
  • COUCHDB-1632: Ignore epilogues in multipart/related MIME attachments. #2b4ab67a
  • Split up replicator_db tests into multiple independent tests.

by djc at October 10, 2013 12:07 PM

October 04, 2013

Till Klampäckel

SQL MAX() and GROUP BY for CouchDB

While re-writing a couple SQL statements into CouchDB we got stuck when we wanted to do a SELECT MAX(...), id ... GROUP BY id in CouchDB.

MySQL

Imagine the following SQL table with data:

mysql> SHOW FIELDS FROM deploys;
+-------------+-------------+------+-----+---------+-------+
| Field       | Type        | Null | Key | Default | Extra |
+-------------+-------------+------+-----+---------+-------+
| project     | varchar(10) | NO   |     | NULL    |       |
| deploy_time | datetime    | NO   |     | NULL    |       |
+-------------+-------------+------+-----+---------+-------+
2 rows in set (0.01 sec)

In order to get the latest deploy for each project, I'd issue:

mysql> SELECT MAX(deploy_time), project FROM deploys GROUP BY project;
+---------------------+----------+
| MAX(deploy_time)    | project  |
+---------------------+----------+
| 2013-10-04 22:01:26 | project1 |
| 2013-10-04 22:02:17 | project2 |
| 2013-10-04 22:02:20 | project3 |
+---------------------+----------+
3 rows in set (0.00 sec)

Simple. But what do you do in CouchDB?

CouchDB

My documents look like this:

{
  "_id": "hash",
  "project": "github-user/repo/branch",
  "deploy_time": {
     "date": "2013-10-04 22:02:20",
     /* ... */
  },
  /* ... */
}

So, after more than a couple hours trying to wrap our heads around map-reduce in CouchDB, it's working.

Here's the view's map function:

function (doc) {
  if (doc.project) {
    emit(doc.project, doc.deploy_time.date);
  }
}

This produces nice key value pairs — in fact, multiple — for each project.

And because the map-function returns multiple, we need to reduce our set.

So here is the reduce:

function (doc, values, rereduce) {
  var max_time = 0, max_value, time_parsed;
  values.forEach(function(deploy_date) {
    time_parsed = Date.parse(deploy_date.replace(/ /gi,'T'));
    if (max_time < time_parsed) {
      max_time = time_parsed;
      max_value = deploy_date;
    }
  });
  return max_value;
}

The little .replace(/ /gi,'T') took especially long to figure out. Special thanks to Cloudant's seńor JS-date-engineer Adam Kocoloski for helping out. ;-)

Step by step

  • iterate over values
  • fix each value (add the "T") to make Spidermonkey comply
  • parse, and compare
  • return the "latest" in the end

A note of advice: To save yourself some trouble, install a local copy of Spidermonkey and test your view code in there and not in your browser.

Open the view in your browser: http://localhost/db/_design/deploys/_view/last_deploys?group=true

{
  "rows":[
    {
      "key":"testowner/testname/testbranch",
      "value":"2013-09-13 11:41:03"
    },
    {
      "key":"testowner/testname/testbranch2",
      "value":"2013-09-12 16:48:39"
    }
  ]
}

Yay, works!

FIN

That's all for today.

by Till Klampaeckel (till@php.net) at October 04, 2013 08:40 PM

February 19, 2013

EasyBib

Cloudant's NYC meet-up & webinar!

Cloudant’s NYC meet-up will take place at our office this Wednesday (tomorrow)! Please RSVP using the following link:

http://cloudantimagineeasy.eventbrite.com/

The office’ address is 12 West 31 St:

<iframe frameborder="0" height="350" marginheight="0" marginwidth="0" scrolling="no" src="https://maps.google.com/maps?f=q&amp;source=s_q&amp;hl=en&amp;geocode=&amp;q=12+East+31+Street,+NY,+United+States&amp;aq=0&amp;oq=12+West+31+St,+NY&amp;sll=37.0625,-95.677068&amp;sspn=38.826758,78.662109&amp;t=h&amp;ie=UTF8&amp;hq=&amp;hnear=12+E+31st+St,+New+York,+10016&amp;z=14&amp;ll=40.745971,-73.985233&amp;output=embed" width="425"></iframe>
View Larger Map

If you can’t make the meet-up, make sure to check out the webinar on Thursday:

https://www1.gotomeeting.com/register/648768041

by tillinside at February 19, 2013 07:23 PM

February 12, 2013

EasyBib

EasyBib and Cloudant

Slides from a talk I gave at the CouchDB conference in Berlin last month. As always, the slides are on speakerdeck:

https://speakerdeck.com/till/easybib-and-cloudant

— Till

by tillinside at February 12, 2013 02:44 PM

February 06, 2013

IrisCouch

Announcing Premium Server

We’re excited to announce our latest product—a Premium Server option for Iris Couch users. Premium Server gives serious users an option to increase the stability and response time of their couches. It costs $75/month (in addition to the regular, metered fees), and buys you oh-so-much-more peace of mind... and performance.

A Premium server is more responsive and reliable than a standard CouchDB server. Premium servers run on isolated, dedicated clusters.

Interested? Log in and enable Premium Server in our billing page.

Once you have a credit card on file, you will see a Premium Server option. If for any reason you’re dissatisfied with the service, you can cancel at any time.

More Details

What, exactly, is a Premium server?

Premium servers run permanently in specialized clusters, with dedicated CPU and memory. Premium servers run on a common physical server, with dedicated CPU, memory, and i/o resources. Nothing is “oversold.”

Premium servers never pause when idle. Typically, if a couch goes unused for too long, we pause it, freeing resources to share with others. Unfortunately, infrequent usage suffers high latency. Premium servers do not have this issue.

Premium servers are monitored. Our automated tools monitor everything. But people watch every premium server 24/7. If we see any server issues, we respond immediately.

Premium servers are isolated. Each cluster runs in a dedicated DNS zone and uses dedicated HTTP infrastructure. Issues in one cluster do not affect another.

Premium servers work. Thanks to many of our users for months of beta testing. Premium service already supports many couches, such as the Node.js npm registry, a mission-critical CouchDB service, processing over 100 million monthly requests.

by Jeff (jeff@iriscouch.com) at February 06, 2013 02:08 PM