Tuesday, November 20, 2012

Continuous integration for a Rails-based project. Why we moved away from TravisCI in favour of CircleCI.

We've faced an issue recently with TravisCI on a Rails project, that would better be avoided next time.

Initially we've chosen TravisCI due to an easy/simple project start based on it. Although it didn't support private repos, the project was in a public repo, so that wasn't a problem. It was a real good CI solution actually.
But our app specifics made its unit tests to be rather time-consuming at that stage (http requests making and their responses usage in the tests), so TravisCI in its turn was just interrupting the tests after 25 minutes, leading to build failures of course. As it turned out, this 25 min limit was NOT configurable in Travis (it becomes important in some cases, so it's looking rather dully to have such a limitation, isn't it?), so we had to look around a bit.

CircleCI became a good replacement. Allowing the tests without that limitation - it became the solution at that stage. A very simple quick setup, a clean nice list of revisions with build statuses, and (compared to Travis) while in its beta, for now, allows private repositories for free.

By the way, later we've "eased" the tests when running on the side of CI, in the sense of time consumption - a VCR-based optimizing solution (records your test suite's HTTP interactions and replays them during future test runs for fast, deterministic, accurate tests) allowed to greatly speed them up there - by reusing the HTTP responses VCR cache generated locally and then pushed to Amazon S3 storage for sharing among the environments. So that "25min limit issue" has lost its actuality in our case. But still, CircleCI has "occupied" the status of problem solver since the previous case :)

P.S. Thanks to Paul Biggar @ CircleCI for being so attentive and quick with his help when needed.

Wednesday, November 7, 2012

GPU-accelerated video decoding for Chrome enabled

Google Chrome Blog: Longer battery life and easier website permissions...: A wise person once said, “Modern life is a constant search... for a power outlet.” With today’s new Chrome Stable release , we hope you can ...

Tuesday, November 6, 2012

Leaving MongoDB in favour of {Riak & PostgreSQL}. A real feedback from Kiip.

MongoDB is definitely a great NoSQL solution, very popular, but its mission is also clearly defined, where it's the choice and where it's not. Kiip has shared their opinion and the whole story about why they moved to {Riak & PostgreSQL partly} after a year running MongoDB in production (A Year with MongoDB). So, it's not that it was a kind of a total failure, no. The basic factors've been listed, let's summarize them briefly - both cons and pros about Mongo, based on the actual experience.

The Good

  • Schemaless 
  • Simple replication
  • Query Language
  • Full-featured Drivers for Many Languages

The Bad

  • Non-counting B-Trees
  • Poor Memory Management
  • Uncompressed field names
  • Global write lock
  • Safe off by default
  • Offline table compaction
  • Secondaries do not keep hot data in RAM

Thanks Kiip, valuable details to be considered for decisions making yet on the early stages.

Friday, July 27, 2012

Adobe Flash hangs up (freezes) the Google Chrome and Skype in Windows 7

Environment:

  • OS Version: 6.1.7601.2.1.0.256.1 (Windows 7 Ultimate x86 Eng)
  • Google Chrome 20.0.1132.57 m
  • Adobe Flash 11.3.300.265
  • Skype 5.10.0.116

One would say that's a kind of mysticism, and this is how it looked like, but only at a glance, though.

A few regular updates of (a) Adobe Flash , (b) Google Chrome, with its Flash player included by the way, and (c) Skype during June-July, 2012 - brought some unexpected and unwanted behavior to this bunch of software pieces, they started hanging, just at the most inconvenient situations:
  • you start playing a Flash video in Chrome - it hangs up, freezes partly (only the current tab) or sometimes totally;
  • sometimes (rather often during a day indeed), during most active hours, Skype hangs up, freezes, as it's been noticed - after an attempt to play a "new message" sound, so that you can see the messages arrived being left unread regardless that you stare at them on and on, and your own messages you start typing and sending - can't be sent out just showing that progress animation against each your message. When it happens, you can even notice the sound "tick" as the failed attempt to play that.
It's been noticed as well, as a temporary workaround, that when it happens (e.g. both Skype and Chrome have hung up, frozen that way, or when one of them has) you just go and open another Chrome tab, open any flash video, it's "trying to start" during a few to ten seconds - and yahoo! - it helps, looking like it's making a kind of break-through - both Skype and Chrome are getting back live and you get some relax... until the next freeze :)

Found out that although the Flash version included into the Chrome distribution was the latest one (Chrome updates handle that), there was still the stand-alone Flash version used by IE, Skype and others - that was not the latest one. So, it's been updated to the latest non-debug one 11.3.300.265.

Some other suspects made me check a list of ideas, incl. the video hardware acceleration used by Flash, and thus some possible incompatibility with the video drivers, etc. But the system/apps logs contained nothing related, and disabling that Flash "hardware acceleration" didn't help either.


Decided to force the Chrome to use only the stand-alone Flash instance, not the one included into the Chrome distribution:

Managed to get the Chrome.exe crash report, just having tried to close it during such a freeze:


Description:
  A problem caused this program to stop interacting with Windows.
Problem signature:
  Problem Event Name: AppHangXProcB1
  Application Name: chrome.exe
  Application Version: 20.0.1132.57
  Application Timestamp: 4ffb8830
  Hang Signature: 2eb7
  Hang Type: 160
  Waiting on Application Name: svchost.exe:AudioClientRpc
  Waiting on Application Version: 0.0.0.0
  OS Version: 6.1.7601.2.1.0.256.1
  Locale ID: 1058
  Additional Hang Signature 1: 2eb7a648a00def5e39335df086248eb6
  Additional Hang Signature 2: 34d2
  Additional Hang Signature 3: 34d2997c9a2e6209300a7c0c69298b8a
  Additional Hang Signature 4: 2eb7
  Additional Hang Signature 5: 2eb7a648a00def5e39335df086248eb6
  Additional Hang Signature 6: 34d2
  Additional Hang Signature 7: 34d2997c9a2e6209300a7c0c69298b8a
...

Oh, that "svchost.exe:AudioClientRpc" has brought some piece of hope indeed. Has checked whether the sound drivers are the latest, went into its advanced properties with the suspect of some sound drivers incompatibilities, trying to simplify the sound device usage, turning off various effects one by one - finally faced the reason and the solution. It was the system-wide "Equalizer" on-the-fly enhancement provided by the sound drivers, it turned to be the reason why various applications were hanging trying to communicate with the audio device.


SOLUTION:

  • PlayBack Devices -> Speakers -> Properties -> Enhancements -> "Disable all sound effects" checkbox should be turned ON, that solves this problem in this specific case.
Considering the wide variety of Flash-related crashes, issues, feezes in various OSs like Windows, Linux (specifically Ubuntu), OS X reported recently, the updates from Adobe would be highly appreciated.

In the mean time, looking forward and thanks in advance,
Regards