<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0"><channel><description>The Tech-Angels’ blog is a collection of tips and tricks, fresh news, technical thoughts. Stay tuned for our latest products updates and news, directly from our developers!</description><title>Tech-Angels Blog</title><generator>Tumblr (3.0; @tech-angels)</generator><link>http://blog.tech-angels.com/</link><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/Tech-angels" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="tech-angels" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://tumblr.superfeedr.com/" /><item><title>Gemnasium, now with 1-click away changelogs</title><description>&lt;p&gt;Tired of spending hours looking for what has changed in your dependencies?&lt;/p&gt;

&lt;h2&gt;Save your time! Gemnasium brings you 1-click changelogs!&lt;/h2&gt;

&lt;p&gt;For each of your project&amp;#8217;s dependencies you can now quickly check what has changed. Just click on the Changelog viewer icon and start reading!&lt;/p&gt;

&lt;p&gt;&lt;img src="http://media.tumblr.com/4d185c84574081ac9c8923eb5988e9e5/tumblr_inline_mmuh6kLlsY1qz4rgp.jpg" alt=""/&gt;&lt;/p&gt;

&lt;p&gt;Gemnasium will automatically aggregate changelog data and scope it to what matters to you: the changes between your current version and the latest stable!&lt;/p&gt;

&lt;p&gt;&lt;img src="http://media.tumblr.com/63435bd7fd01265389d9548dacb7a051/tumblr_inline_mmuh7nC5Tm1qz4rgp.png" alt=""/&gt;&lt;/p&gt;

&lt;h2&gt;No changelog? We can still help you.&lt;/h2&gt;

&lt;p&gt;When package&amp;#8217;s changelog is not available, Gemnasium still try to make it easier for you. It will indeed try to fall back to a nicely displayed list of commit messages.&lt;/p&gt;

&lt;p&gt;&lt;img src="http://media.tumblr.com/aa0bebe01f58152daf3313eef6d3ed7b/tumblr_inline_mmuhp1B8KH1qz4rgp.png" alt=""/&gt;&lt;/p&gt;

&lt;p&gt;At any time you can click on a commit from the list to see it on Github.
You can also check the full compare view following the link provided in the header.&lt;/p&gt;

&lt;h2&gt;Pricing?&lt;/h2&gt;

&lt;p&gt;Our Changelog viewer is already included in all paid plans without any extra cost and is available to free users during their 30 days trial period.&lt;/p&gt;

&lt;p&gt;For all existing free users, you&amp;#8217;ll also be able to try it until june, 15th, enjoy!&lt;/p&gt;

&lt;h2&gt; &lt;/h2&gt;

&lt;p&gt;We hope you&amp;#8217;ll appreciate it and your feedback is welcome!&lt;/p&gt;

&lt;p&gt;Cheers,
Gemnasium Team&lt;/p&gt;</description><link>http://blog.tech-angels.com/post/50517012938</link><guid>http://blog.tech-angels.com/post/50517012938</guid><pubDate>Wed, 15 May 2013 22:28:25 +0200</pubDate><category>gemnasium</category><category>changelog</category><category>changes</category></item><item><title>What's new in Gemnasium?</title><description>&lt;p&gt;We&amp;#8217;ve released a bunch a small fixes and improvements to make Gemnasium better! Let&amp;#8217;s review them.&lt;/p&gt;

&lt;h2&gt;Manual monitoring&lt;/h2&gt;

&lt;p&gt;You now can choose exactly which projects you want to monitor and which one you don&amp;#8217;t care about.&lt;/p&gt;

&lt;p&gt;Gemnasium will still try to automatically add/remove projects when syncing with Github, but as soon as you manually start or stop monitoring a project, it won&amp;#8217;t override your choice anymore.&lt;/p&gt;

&lt;p&gt;So you now can freely choose which projects you want to track, and drop the others.&lt;/p&gt;

&lt;p&gt;To make it more clear, we&amp;#8217;ve also cleaned up the profile view and you&amp;#8217;ll now only see the monitored projects there. This will drastically reduce the signal to noise ratio so that you can focus on what matters to you.&lt;/p&gt;

&lt;p&gt;You can retrieve all your profile&amp;#8217;s projects in the Project&amp;#8217;s management page in your settings. There you&amp;#8217;ll be able to start/stop monitoring and edit projects settings to fine tune them.&lt;/p&gt;

&lt;p&gt;&lt;img src="http://media.tumblr.com/05a4d66496ca3786790d5d7b796770e5/tumblr_inline_mkxrpsJRqZ1qz4rgp.png" alt=""/&gt;&lt;/p&gt;

&lt;h2&gt;Offline projects&lt;/h2&gt;

&lt;p&gt;First introduced with our &lt;a href="http://gemnasium.github.io/gemnasium-gem/"&gt;Gemnasium Gem&lt;/a&gt;, the offline projects can now be totally managed on Gemnasium.&lt;/p&gt;

&lt;p&gt;You can create projects from your profile settings and upload dependency files directly from the UI.&lt;/p&gt;

&lt;p&gt;&lt;img src="http://media.tumblr.com/ba5a2ebe42316b18e5d3c681befacf55/tumblr_inline_mkxt0afDud1qz4rgp.png" alt=""/&gt;&lt;/p&gt;

&lt;h2&gt;New platinum plan!&lt;/h2&gt;

&lt;p&gt;As required by our users who have a lot of private stuff, here comes the Platinum plan.
It allows to track up to 125 private projects for $100/month!&lt;/p&gt;

&lt;h2&gt;Improved settings&lt;/h2&gt;

&lt;p&gt;We&amp;#8217;ve changed a bit the settings to make account management easier.&lt;/p&gt;

&lt;p&gt;The Settings home now displays the list of your Gemnasium profiles. Here you can manage them and add new ones.&lt;/p&gt;

&lt;p&gt;The Github Permissions feature has been improved to give more granularity and now tells you how it affects your Gemnasium account.&lt;/p&gt;

&lt;p&gt;&lt;img src="http://media.tumblr.com/b99b408874845d1577f027b27ec975f1/tumblr_inline_mkxs4eRjG11qz4rgp.png" alt=""/&gt;&lt;/p&gt;

&lt;h2&gt; &lt;/h2&gt;

&lt;p&gt;Thanks for your support and your feedback that help us improving Gemnasium!&lt;/p&gt;

&lt;p&gt;Cheers,
Gemnasium Team&lt;/p&gt;</description><link>http://blog.tech-angels.com/post/47458983042</link><guid>http://blog.tech-angels.com/post/47458983042</guid><pubDate>Mon, 08 Apr 2013 17:00:44 +0200</pubDate><category>gemnasium</category></item><item><title>Should you upgrade Rails from 3.2.12 to 3.2.13 ?</title><description>&lt;p&gt;Rails 3.2.13 was released just a week ago. Since it fixes 4 important security breaches (&lt;a href="https://gemnasium.com/gems/activerecord/versions/3.2.12"&gt;CVE-2013-1854 for activerecord&lt;/a&gt;, &lt;a href="https://gemnasium.com/gems/actionpack/versions/3.2.12"&gt;CVE-2013-1855 for actionpack&lt;/a&gt;, &lt;a href="https://gemnasium.com/gems/activesupport/versions/3.2.12"&gt;CVE-2013-1856 for activesupport&lt;/a&gt; and &lt;a href="https://gemnasium.com/gems/actionpack/versions/3.2.12"&gt;CVE-2013-1857 for actionpack&lt;/a&gt;), you may want to upgrade it asap.&lt;br/&gt;
Yet, &lt;a href="http://blog.bugsnag.com/2013/03/20/rails-3-2-13-performance-regressions-major-bugs/"&gt;performance regressions and major bugs&lt;/a&gt; has been discovered in this new version of Rails.&lt;/p&gt;

&lt;h1&gt;What are the risks&amp;#160;?&lt;/h1&gt;

&lt;p&gt;Upgrading your application to Rails 3.2.13 will make bugs and performance issues popping out.&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;action_missing function will be broken&lt;/li&gt;
&lt;li&gt;ActiveRecord chained scopes will cause bugs such as the one &lt;a href="https://github.com/blog/1440-today-s-email-incident"&gt;GitHub experienced lately&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Assets and views loading time will drastically increase&lt;/li&gt;
&lt;/ul&gt;&lt;h1&gt;How to remain safe without upgrading to 3.2.13?&lt;/h1&gt;

&lt;p&gt;We recommend you to not upgrade to Rails 3.2.13 and to wait for 3.2.14 to be released. But how to do so having in mind the 4 security breaches that still exists&amp;#160;?&lt;br/&gt;
Well, that&amp;#8217;s simple, first of all, you might not be impacted by all of those issues and second, some monkey patches have been released to help you keep your application secure without upgrading.&lt;br/&gt;
So keep calm, create a temporary hotfix branch until 3.2.14 is out and apply the patches you need.&lt;/p&gt;

&lt;h2&gt;Fixing Symbol DoS vulnerability in Active Record (CVE-2013-1854)&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Your application does not use params as a find value for a query? You&amp;#8217;re safe!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Impacted code will look like &lt;code&gt;User.where(:name =&amp;gt; params[:name])&lt;/code&gt;. To fix this issue, you should call &lt;code&gt;to_s&lt;/code&gt; method on params used as a find value.
Basically, you&amp;#8217;ll need to change code that looks like&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;User.where(:name =&amp;gt; params[:name]) 
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;to:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;User.where(:name =&amp;gt; params[:name].to_s)
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&lt;a href="https://groups.google.com/forum/#!topic/ruby-security-ann/o0Dsdk2WrQ0"&gt;Patch provided by Rails team&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;Fixing XSS vulnerability in sanitize_css in Action Pack (CVE-2013-1855)&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;You don&amp;#8217;t use sanitize_css method using user input as parameter? You&amp;#8217;re safe!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Impacted code will look like &lt;code&gt;sanitize_css(user_input)&lt;/code&gt;. The following patch will fix the issue:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;module HTML 
  class WhiteListSanitizer 
    # Sanitizes a block of css code. Used by #sanitize when it comes across a style attribute 
    def sanitize_css(style) 
      # disallow urls 
      style = style.to_s.gsub(/url\s*\(\s*[^\s)]+?\s*\)\s*/, ' ') 

      # gauntlet 
      if style !~ /\A([:,;#%.\sa-zA-Z0-9!]|\w-\w|\'[\s\w]+\'|\"[\s\w]+\"|\([\d,\s]+\))*\z/ || style !~ /\A(\s*[-\w]+\s*:\s*[^:;]*(;|$)\s*)*\z/ 
        return '' 
      end 

      clean = [] 
      style.scan(/([-\w]+)\s*:\s*([^:;]*)/) do |prop,val| 
        if allowed_css_properties.include?(prop.downcase) 
          clean &amp;lt;&amp;lt;  prop + ': ' + val + ';' 
        elsif shorthand_css_properties.include?(prop.split('-')[0].downcase) 
          unless val.split().any? do |keyword| 
            !allowed_css_keywords.include?(keyword) &amp;amp;&amp;amp; 
            keyword !~ /\A(#[0-9a-f]+|rgb\(\d+%?,\d*%?,?\d*%?\)?|\d{0,2}\.?\d{0,2}(cm|em|ex|in|mm|pc|pt|px|%|,|\))?)\z/ 
          end 
          clean &amp;lt;&amp;lt; prop + ': ' + val + ';' 
        end 
      end 
    end 
    clean.join(' ') 
  end 
end 
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&lt;a href="https://groups.google.com/forum/?fromgroups=#!topic/rubyonrails-security/4_QHo4BqnN8"&gt;Patch provided by Rails team&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;Fixing XML Parsing Vulnerability affecting JRuby users (CVE-2013-1856)&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Your application does not use JRuby? Your JRuby application does not use the JDOM backend? You&amp;#8217;re safe!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;To fix this issue, place this code in an application initializer:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;ActiveSupport::XmlMini.backend="REXML"
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&lt;a href="https://groups.google.com/forum/?fromgroups=#!topic/rubyonrails-security/KZwsQbYsOiI"&gt;Patch provided by Rails team&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;Fixing XSS Vulnerability in the &lt;code&gt;sanitize&lt;/code&gt; helper (CVE-2013-1857)&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Your app doesn&amp;#8217;t use sanitize method helper with user input? You&amp;#8217;re safe!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;To fix this issue, place the following code into a file in your config/initializers folder.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;module HTML
  class WhiteListSanitizer
    self.protocol_separator = /:|(&amp;amp;#0*58)|(&amp;amp;#x70)|(&amp;amp;#x0*3a)|(%|&amp;amp;#37;)3A/i

    def contains_bad_protocols?(attr_name, value)
      uri_attributes.include?(attr_name) &amp;amp;&amp;amp;
      (value =~ /(^[^\/:]*):|(&amp;amp;#0*58)|(&amp;amp;#x70)|(&amp;amp;#x0*3a)|(%|&amp;amp;#37;)3A/i &amp;amp;&amp;amp;
      !allowed_protocols.include?(value.split(protocol_separator).first.downcase.strip))
    end
  end
end
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&lt;a href="https://groups.google.com/forum/?fromgroups=#!topic/rubyonrails-security/zAAU7vGTPvI"&gt;Patch provided by Rails team&lt;/a&gt;&lt;/p&gt;</description><link>http://blog.tech-angels.com/post/46249485212</link><guid>http://blog.tech-angels.com/post/46249485212</guid><pubDate>Mon, 25 Mar 2013 14:49:00 +0100</pubDate><category>security</category><category>ruby on rails</category></item><item><title>Gemnasium Gem 1.0 is out! Because security matters</title><description>&lt;p&gt;Nothing is more important for us than your data safety, and we’d like to really thank our customers for their trust so far! Anyway, as we are very concerned with security, we find unacceptable to be forced asking you for a full access on your projects. We had a lot of complains regarding this problem, and we fully agree with you:** you should never grant access to your work.**&lt;/p&gt;

&lt;p&gt;That’s why we’re proud to unveil today a new way to keep your projects in shape, without lowering your security requirements.&lt;/p&gt;

&lt;h2&gt;Why did we need a full access to your private repos?&lt;/h2&gt;

&lt;p&gt;Gemnasium is fully integrated with Github: it automatically fetches your repositories and gets notified about code updates (pushes). But for that, you need to authorize Gemnasium to access your code through Oauth.&lt;/p&gt;

&lt;p&gt;Unfortunately, Github only provides a “Read + Write” access for private repos (the “repo” &lt;a href="http://developer.github.com/v3/oauth/#scopes"&gt;scope&lt;/a&gt;), which implies a full trust in the third party service. For freelancers, and agencies, it meant sharing their customer code with us, which is often forbidden by contracts or NDAs (and it’s a good thing!).&lt;/p&gt;

&lt;p&gt;If you don’t trust this gem either, keep calm and relax, the source code is fully available: &lt;a href="https://github.com/gemnasium/gemnasium-gem"&gt;&lt;a href="https://github.com/gemnasium/gemnasium-gem"&gt;https://github.com/gemnasium/gemnasium-gem&lt;/a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;How does it work?&lt;/h2&gt;

&lt;p&gt;Dependencies can be tracked now without authorizing any access to your application code, just by using that tiny gem!&lt;/p&gt;

&lt;p&gt;Drop it in your project (or just install the gem), run install command, fill in the config file and you’re ready to go in a few seconds!&lt;/p&gt;

&lt;p&gt;You can also use the provided &lt;a href="http://git-scm.com/book/en/Customizing-Git-Git-Hooks"&gt;post-commit Git hook&lt;/a&gt; to automatically push updates to Gemnasium when you commit changes on your dependency files.&lt;/p&gt;

&lt;p&gt;Alternatively, you can use the “gemnasium” command, the rake task or even call directly Gemnasium’s gem classes from your code. See &lt;a href="https://github.com/gemnasium/gemnasium-gem#gemnasium-gem"&gt;readme&lt;/a&gt; for more details.&lt;/p&gt;

&lt;p&gt;Finally, using the Rake task, a CI server can be in charge of pushing the changes for you.&lt;/p&gt;

&lt;h2&gt;Behind the scene&lt;/h2&gt;

&lt;p&gt;When executed, Gemnasium gem will calculate SHAs for your dependency files (&lt;a href="http://git-scm.com/book/en/Git-Internals-Git-Objects"&gt;the same way Git does it&lt;/a&gt;) and send them to Gemnasium API to compare with remote ones. If anything changed in the files, SHAs will be different and then Gemnasium gem will upload updated files.&lt;/p&gt;

&lt;p&gt;The after-commit Git hook we provide is even smarter as it will only fire SHAs check if your commit contains changes about your dependency files. It’s even faster than with our Github service hook!&lt;/p&gt;

&lt;p&gt;One great thing with this gem is that you can check dependencies updates without pushing to the repository! Just update the dependency files, run “gemnasium push” and everything gets updated on gemnasium.com.&lt;/p&gt;

&lt;p&gt;Gemnasium Gem is published under the MIT license. It’s compatible with all ruby projects, not only rails app. We’ve made it as light as possible and it doesn’t require any other dependency. Though, it’s only compatible with ruby &amp;gt;=1.9 for now (yes, that mean ruby 2.0 too!).&lt;/p&gt;

&lt;p&gt;For Node.js projects owners, please note that this gem is also able to upload package.json and npm-shrinkwrap.json files, as long as you have a running ruby. For others don&amp;#8217;t worry, a Npm module is coming!&lt;/p&gt;

&lt;p&gt;Please also note that for now the gem only works with existing Gemnasium profiles. So you still need to link your Gemnasium account with Github after registration (with read-only public access at least) and order a plan for one of your Github profiles. You’ll then be able to add your offline projects to the profile of your choice.
Offline private projects are taken into account for your plan’s private slots limit.&lt;/p&gt;

&lt;p&gt;We’re also working on fully offline profiles to allow non-Github setup. This will come a bit later. Stay tuned!&lt;/p&gt;

&lt;h2&gt;How to migrate existing project?&lt;/h2&gt;

&lt;p&gt;If you have already setup your projects to be synchronized automatically with Github, you can switch them to use the gem.
Just follow the readme to complete the setup and use the “gemnasium create &amp;#8212;force” command. The &amp;#8220;&amp;#8212;force&amp;#8221; option will override the existing setup on gemnasium.com, updating your projects origin attribute from “github” to “offline”.
Warning: there is currently no easy way to switch back to Github origin (need to contact support). Use with caution.&lt;/p&gt;

&lt;p&gt;You can then update your Github permissions in your &lt;a href="https://gemnasium.com/settings/github_setup"&gt;settings&lt;/a&gt; to use the read-only public access.&lt;/p&gt;

&lt;p&gt;No more excuses to not track your dependencies and keep your projects in shape with Gemnasium!&lt;/p&gt;

&lt;p&gt;Cheers,
Gemnasium Team&lt;/p&gt;</description><link>http://blog.tech-angels.com/post/44630988143</link><guid>http://blog.tech-angels.com/post/44630988143</guid><pubDate>Tue, 05 Mar 2013 16:37:00 +0100</pubDate><category>gemnasium</category><category>gem</category><category>security</category><category>privacy</category></item><item><title>Gemnasium's Security Coach on steroids!</title><description>&lt;p&gt;As announced last week, we are pleased to release today the new features focusing on security.&lt;/p&gt;

&lt;p&gt;Remember: since &lt;a href="http://blog.tech-angels.com/post/37192207715/gemnasium-2-0"&gt;Gemnasium-2.0&lt;/a&gt; we monitor popular packages, looking for security or critical updates. Once something is detected, all impacted versions are tagged accordingly which ends up to a red color on the projects depending on it.&lt;/p&gt;

&lt;p&gt;It&amp;#8217;s time to put some steroids in this! Let&amp;#8217;s review the new features:&lt;/p&gt;

&lt;h2&gt;Security advisories&lt;/h2&gt;

&lt;p&gt;To bring you more information on these critical and security updates, Gemnasium now displays advisories right on the package’s page.&lt;/p&gt;

&lt;p&gt;Advisories provide useful informations about security issues or critical updates: description, affected versions, fixed versions, available solutions etc…&lt;/p&gt;

&lt;p&gt;&lt;img src="http://media.tumblr.com/e9f92325823a9dbcfc2b3470b91207b6/tumblr_inline_mislj7EmR41qz4rgp.png" alt=""/&gt;&lt;/p&gt;

&lt;p&gt;Advisories are displayed on each affected versions of a package and also on the ones that fix it.&lt;/p&gt;

&lt;h2&gt;Alerts&lt;/h2&gt;

&lt;p&gt;But that’s not enough… Keep calm and let the Security Coach tell you what’s wrong with your projects!&lt;/p&gt;

&lt;p&gt;Right from your project page you now can check the security and critical advisories affecting your dependencies.&lt;/p&gt;

&lt;p&gt;&lt;img src="http://media.tumblr.com/624c5d44130b42319f7428d21f08c0bc/tumblr_inline_misjm3kvNG1qz4rgp.png" alt=""/&gt;&lt;/p&gt;

&lt;p&gt;Open alerts just hang here until your project become safe! They are closed automatically when the dependency is updated to a non-affected version.&lt;/p&gt;

&lt;p&gt;If your app has been fixed with a patch, a workaround or is simply not affected by the advisory, you can tell Gemnasium it’s okay and just close the alert.&lt;/p&gt;

&lt;h2&gt;Notifications and reminder&lt;/h2&gt;

&lt;p&gt;Gemnasium’s Security Coach will warn you immediately when an advisory is created and will remind you every day until the alert is closed (by an update or using the close button). But if you feel bothered by the reminder and still haven’t fixed the issue, you can acknowledge the alert to stop the notifications. This can be done on the project page or directly from your alert email.&lt;/p&gt;

&lt;p&gt;To avoid spamming you when you have a lot of affected projects, notifications are grouped by advisory. Here is a sample alert email:&lt;/p&gt;

&lt;p&gt;&lt;img src="http://media.tumblr.com/335b942b06d278beb078f1d0e7f7a664/tumblr_inline_mismf54z6z1qz4rgp.png" alt=""/&gt;&lt;/p&gt;

&lt;p&gt;The security reminder takes your notifications settings into account. So you only receive security emails for projects and packages that have notifications enabled and you won’t be notified at all if you have totally disabled notifications in your settings.&lt;/p&gt;

&lt;p&gt;Please note that all old alerts have been automatically acknowledged to avoid spamming you. Feel free to reopen them if you want to be reminded.&lt;/p&gt;

&lt;p&gt;The notifications and reminder features are included in all plans starting from Bonzaï (&lt;a href="https://gemnasium.com/pricing"&gt;see pricing&lt;/a&gt;), and also available as trial during the 1st month of registration for Free plans.
As an exceptional offer, the security reminder is also available to all existing Free users until March, 31st!&lt;/p&gt;

&lt;h2&gt;Side notes&lt;/h2&gt;

&lt;p&gt;Gemnasium is still growing its changelogs base and advocates for a common format. Your opinion is welcome and you can contribute on the &lt;a href="https://github.com/tech-angels/vandamme"&gt;Vandamme open source project&lt;/a&gt; to help us defining a convention.&lt;/p&gt;

&lt;p&gt;As always, we hope you&amp;#8217;ll appreciate these new features and your feedback is welcome!&lt;/p&gt;

&lt;p&gt;Cheers,
Gemnasium Team&lt;/p&gt;</description><link>http://blog.tech-angels.com/post/44065496210</link><guid>http://blog.tech-angels.com/post/44065496210</guid><pubDate>Tue, 26 Feb 2013 16:50:48 +0100</pubDate><category>gemnasium</category><category>security</category></item><item><title>Standard Changelogs</title><description>&lt;p&gt;There are thousands of different changelogs (if any) out there, with dozens of different names. It&amp;#8217;s almost impossible to fetch and parse them automatically&amp;#8230; Gemnasium is using Vandamme to keep each changelog specificities (changelog location, version format, file format).&lt;/p&gt;

&lt;p&gt;We really believe in changelogs. Following changes in dependencies is a hard task, and almost impossible by reading commits only.&lt;/p&gt;

&lt;p&gt;The open-source world would be so much nicer with full, readable and comprehensive changelogs. As a solution to this problem, we propose a simple set of rules and requirements to follow in order to have a Standard Changelog. Please see the specs here:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/tech-angels/vandamme/blob/master/README.md#changelogs-convention"&gt;&lt;a href="https://github.com/tech-angels/vandamme/blob/master/README.md#changelogs-convention"&gt;https://github.com/tech-angels/vandamme/blob/master/README.md#changelogs-convention&lt;/a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Feedback is welcome!&lt;/p&gt;</description><link>http://blog.tech-angels.com/post/43143456874</link><guid>http://blog.tech-angels.com/post/43143456874</guid><pubDate>Fri, 15 Feb 2013 13:16:52 +0100</pubDate><category>changelog</category><category>gemnasium</category></item><item><title>Gemnasium V3 aka Gemnasium &lt;3</title><description>&lt;p&gt;&lt;img src="http://media.tumblr.com/401c6da06704413278eb927bb2ec0741/tumblr_inline_mi8awxfqsZ1qz4rgp.png" alt=""/&gt;&lt;/p&gt;

&lt;p&gt;Gemnasium loves you, thank you so much for your support!
We are proud today to announce a new exciting release.&lt;/p&gt;

&lt;p&gt;We have worked hard in the last months to improve the code base and features, it was also time to put in place a fresh and optimized UI. Each page has been lovingly handcrafted into an amazing new design. Here is an quick insight:&lt;/p&gt;

&lt;p&gt;&lt;img src="http://media.tumblr.com/b1c8af60363eb02463970757e1d7a390/tumblr_inline_mi9bj5rgiS1qz4rgp.jpg" alt=""/&gt;&lt;/p&gt;

&lt;p&gt;The new UI also comes with a new Dashboard page with gathered statistics about profiles and some info about a pushed package each week, and live events scoped to your account.&lt;/p&gt;

&lt;p&gt;We also have lots of surprises for you, so let&amp;#8217;s jump right in!&lt;/p&gt;

&lt;h2&gt;NPM Support&lt;/h2&gt;

&lt;p&gt;Gemnasium is now able to read your NPM dependencies and monitor them. 
If your Github profile contains projects with a “package.json” or a “npm-shrinkwrap.json” file, Gemnasium will be able to track the dependencies for you!&lt;/p&gt;

&lt;p&gt;&lt;img src="http://media.tumblr.com/38cbefbc13832f8d9e2be990a6390699/tumblr_inline_mi9c2ebjRw1qz4rgp.png" alt=""/&gt;                 &lt;/p&gt;

&lt;p&gt;This feature is included in all plans (including free plans), with no extra fee! 
And Gemnasium already monitors more than 22.000 node packages.
                  &lt;/p&gt;

&lt;h2&gt;Your personal security coach&lt;/h2&gt;

&lt;p&gt;Need some help to follow important changes and security announcements? Let us introduce you the new “Watchmen” team. Everyday, we’ll be tracking important changelogs and security advisories for you, and will mark as “red” dangerous or broken versions. Don’t spend more time to wonder if your projects are vulnerable because you forgot to update them, let us ping you when we think you should worry about something!&lt;/p&gt;

&lt;p&gt;“Watched” packages and each “Checked”versions are marked with these labels:
        
&lt;img src="http://media.tumblr.com/fd22acbbd7c229464b4485d4fe29f407/tumblr_inline_mi8b7vD0m11qz4rgp.png" alt=""/&gt;&lt;/p&gt;

&lt;p&gt;“Watched” means the project is being manually checked every day. “Checked” is an acknowledge on the package version you are browsing.&lt;/p&gt;

&lt;p&gt;The Watchmen feature will evolve continuously to provide better and smarter security announcements so that you can relax and stay focus on your work. Expect a release dedicated to this topic next week!&lt;/p&gt;

&lt;h2&gt;Packages Improvements&lt;/h2&gt;

&lt;p&gt;Gemnasium now provides tons of metadata for both Rubygems and Npms packages (owners, maintainers, useful links, etc.). You can also find the dependencies of a package and discover the other packages depending on it.&lt;/p&gt;

&lt;p&gt;For those who maintain a changelog, Gemnasium is also able to provide its content for each versions. Though, as there is no standard yet, this feature requires the changelog to be in a supported format. We’ll write more about this soon, stay tuned!&lt;/p&gt;

&lt;p&gt;&lt;img src="http://media.tumblr.com/7f7bdb3cfada294de789b23b3fce5d62/tumblr_inline_mi9bvyN5oM1qz4rgp.jpg" alt=""/&gt;&lt;/p&gt;

&lt;h2&gt;New badges&lt;/h2&gt;

&lt;p&gt;We’re taking part in the new “Shields” project, and provide clean, consistent and more readable badges for your Readmes. Your project badge can be copied/pasted on your github Readme page in seconds. Just click on the badge on your Gemnasium’s project page and follow instructions!&lt;/p&gt;

&lt;p&gt;&lt;img src="http://media.tumblr.com/f224232b80825af847031ef12bf31508/tumblr_inline_mi9bx0qCUt1qz4rgp.png" alt=""/&gt;                     &lt;/p&gt;

&lt;p&gt;We still have a lot of terrific ideas to come, stay tuned!&lt;/p&gt;

&lt;h2&gt;Ho, one more thing&lt;/h2&gt;

&lt;p&gt;We have a lovely gift for you!
As you can see, a lot has changed in the new Gemnasium and the response we&amp;#8217;ve gotten from community has been amazing.
We’d like to welcome new subscribers with a 50% discount for 3 months (with the 1st month 100% free!)&lt;/p&gt;

&lt;p&gt;While creating your subscription on gatekeeper (our account platform), just enter the coupon&amp;#160;: &lt;strong&gt;VALENTINESDEP&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&amp;lt;3&amp;lt;3&amp;lt;3 from the Gemnasium Team&lt;/p&gt;</description><link>http://blog.tech-angels.com/post/43141047457</link><guid>http://blog.tech-angels.com/post/43141047457</guid><pubDate>Fri, 15 Feb 2013 11:45:34 +0100</pubDate><category>gemnasium</category><category>npm</category><category>node</category><category>javascript</category><category>watchmen</category></item><item><title>Announcing a Better, Faster and Smoother Support  Process</title><description>&lt;p&gt;As part of our continuous effort to give you a better experience, we have just migrated 
our customer support processes to &lt;a href="http://www.freshdesk.com"&gt;Freshdesk&lt;/a&gt;. We strive to take 
full advantage of the powerful capabilities and best-practices in Freshdesk, to give you a 
better support experience.&lt;/p&gt;

&lt;h2&gt;How does this make a difference to you&amp;#160;?&lt;/h2&gt;

&lt;p&gt;Not a lot changes in terms of how you get in touch with us. You can shoot us an email to 
support@tech-angels.com, and our support system will automatically create a ticket 
on your behalf. You will also be notiﬁed of our responses and status changes to your 
tickets via email as well, and you can send out your replies directly.&lt;/p&gt;

&lt;p&gt;The ﬁrst time you send us a support query, you will receive an email with activation 
instructions to login to our support portal at &lt;a href="http://support.tech-angels.com"&gt;&lt;a href="http://support.tech-angels.com"&gt;http://support.tech-angels.com&lt;/a&gt;&lt;/a&gt;. Going 
forward, you can check the status or add comments to your support queries here.&lt;/p&gt;

&lt;p&gt;We are actively populating our support portal with FAQs and solutions in our knowledge 
base, so you can help yourself to how-tos and instructions. You can also discuss your 
ideas and share tips in our community forums.&lt;/p&gt;

&lt;h2&gt;Each product has now its own support portal&lt;/h2&gt;

&lt;p&gt;In addition to the top-level support portal &lt;a href="http://support.tech-angels.com"&gt;http://support.tech-angels.com&lt;/a&gt;, each product now features its own support, with online forums and knowledge base:&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;Gemnasium&amp;#160;: &lt;a href="http://support.gemnasium.com"&gt;http://support.gemnasium.com&lt;/a&gt; (support@gemnasium.com)&lt;/li&gt;
&lt;li&gt;Spectorus&amp;#160;: &lt;a href="http://support.spectorus.com"&gt;http://support.spectorus.com&lt;/a&gt; (support@spectorus.com)&lt;/li&gt;
&lt;li&gt;Jagan&amp;#160;: &lt;a href="http://support.jagan.io"&gt;http://support.jagan.io&lt;/a&gt; (support@jagan.io)&lt;/li&gt;
&lt;/ul&gt;&lt;h2&gt;Talk to us on Social too&lt;/h2&gt;

&lt;p&gt;Our support team is now listening to conversations on our Twitter handle 
(@techangels) and Facebook page (&lt;a href="https://www.facebook.com/TechAngels"&gt;facebook.com/TechAngels&lt;/a&gt;). In addition to email and through our website, feel free to reach us here as well.&lt;/p&gt;

&lt;h2&gt;We love hearing from you&lt;/h2&gt;

&lt;p&gt;We strive to give you an awesome support experience with every query, and your 
feedback will help us get there faster. We will be sending out satisfaction surveys for 
you to rate your support experience with us periodically. 
If you have any doubts or queries regarding our new support tools and policies, please 
drop us a line at support@tech-angels.com, and we’ll be glad to assist you. And make 
sure you visit our new support portal at &lt;a href="http://support.tech-angels.com"&gt;&lt;a href="http://support.tech-angels.com"&gt;http://support.tech-angels.com&lt;/a&gt;&lt;/a&gt;.&lt;/p&gt;</description><link>http://blog.tech-angels.com/post/41697700287</link><guid>http://blog.tech-angels.com/post/41697700287</guid><pubDate>Mon, 28 Jan 2013 14:29:42 +0100</pubDate><category>Gatekeeper</category><category>gemnasium</category><category>spectorus</category><category>Jagan</category><category>support</category></item><item><title>"Bienvenue à La Conf"</title><description>&lt;h1&gt;Tech-Angels is a Gold Sponsor @la_conf&lt;/h1&gt;

&lt;p&gt;&lt;img src="http://media.tumblr.com/dfe1d4b0b4c5f885b94e769d12ac2251/tumblr_inline_mfabnfr3hZ1qa44ov.png" alt=""/&gt;&lt;/p&gt;

&lt;p&gt;We&amp;#8217;re very proud and excited to announce today our participation to La-Conf in Paris, France, next 9-10 May 2013!  The conference will be held in the heart of Paris, at the four-star &lt;a href="https://maps.google.fr/maps?q=3+Rue+de+Castiglione,+75001+Paris+&amp;amp;hl=en&amp;amp;ie=UTF8&amp;amp;ll=48.865731,2.327471&amp;amp;spn=0.034696,0.038581&amp;amp;sll=48.865602,2.327369&amp;amp;sspn=0.017348,0.01929&amp;amp;gl=fr&amp;amp;hnear=3+Rue+de+Castiglione,+75001+Paris,+%C3%8Ele-de-France&amp;amp;t=m&amp;amp;z=15"&gt;Westin Paris - Vendôme&lt;/a&gt; (3 Rue de Castiglione, 75001 Paris).&lt;/p&gt;

&lt;p&gt;You will find us easily with our t-shirts / sweatshirts:&lt;/p&gt;

&lt;p&gt;&lt;img src="https://fbcdn-sphotos-e-a.akamaihd.net/hphotos-ak-ash3/575696_281371221951937_1065754945_n.jpg" alt=""/&gt;&lt;/p&gt;

&lt;p&gt;Please come and meet us, we will surely be good advisors regarding the wine and cheese!&lt;/p&gt;

&lt;p&gt;More info: &lt;a href="http://2013.la-conf.org/"&gt;http://2013.la-conf.org/&lt;/a&gt;&lt;/p&gt;</description><link>http://blog.tech-angels.com/post/41209570944</link><guid>http://blog.tech-angels.com/post/41209570944</guid><pubDate>Tue, 22 Jan 2013 20:01:19 +0100</pubDate><category>sponsoring</category></item><item><title>Projects settings: choose your branch!</title><description>&lt;p&gt;As requested, here is a new feature to allow you to choose which branch of your projects you want to monitor.&lt;/p&gt;

&lt;p&gt;This setting can be found on the new &lt;em&gt;Projects&lt;/em&gt; page of your &lt;a href="https://gemnasium.com/settings"&gt;Settings&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src="http://media.tumblr.com/66e4e8d156d0161a94454f65a902edde/tumblr_inline_mgj5elxnqH1qa44ov.png" alt=""/&gt;&lt;/p&gt;

&lt;p&gt;When the branch for a project is changed, Gemnasium automatically syncs with its GitHub’s repository and updates the dependencies as needed.&lt;/p&gt;</description><link>http://blog.tech-angels.com/post/40674344952</link><guid>http://blog.tech-angels.com/post/40674344952</guid><pubDate>Wed, 16 Jan 2013 12:00:10 +0100</pubDate></item><item><title>Prerelease notifications</title><description>&lt;p&gt;Since &lt;a href="http://blog.tech-angels.com/post/37192207715/gemnasium-2-0"&gt;Gemnasium-2.0 has been released&lt;/a&gt;, prerelease versions have been relegated to the background. 
Though it still can be interesting for library maintainers to stay up to date with latest changes and also get notifications when prereleases are published.&lt;/p&gt;

&lt;p&gt;For those who want it, there is now a setting for that (disabled by default):&lt;/p&gt;

&lt;p&gt;&lt;img src="http://media.tumblr.com/a545595382ab55fe45586d2b3a490348/tumblr_inline_mgbuzxc4IE1qa44ov.png" alt=""/&gt;&lt;/p&gt;

&lt;p&gt;For business plans owner, this setting is also available in Hooks.&lt;/p&gt;</description><link>http://blog.tech-angels.com/post/40168120092</link><guid>http://blog.tech-angels.com/post/40168120092</guid><pubDate>Thu, 10 Jan 2013 12:00:00 +0100</pubDate><category>gemnasium</category></item><item><title>New scope for Github authentication</title><description>&lt;p&gt;Github released today some new &lt;a href="http://developer.github.com/changes/2013-01-08-new-user-scopes/"&gt;oauth scopes&lt;/a&gt;, which are perfect for our authentication system (aka: &amp;#8220;&lt;a href="https://gatekeeper.tech-angels.net/"&gt;Gatekeeper&lt;/a&gt;&amp;#8221;).&lt;/p&gt;

&lt;p&gt;From now on, the new and only scope used for authentication will be &lt;code&gt;user:email&lt;/code&gt; (&amp;#8220;gives apps read-only access to a user’s private email addresses&amp;#8221;).
Since the scope changed, you will need to accept again the app, and once done, we will only be able to read your public data + private email:&lt;/p&gt;

&lt;p&gt;&lt;img src="http://media.tumblr.com/613f1680d5636b554207545bced4c23a/tumblr_inline_mgbw6bQItx1qa44ov.png" alt=""/&gt;&lt;/p&gt;

&lt;h2&gt;Reminder /!\&lt;/h2&gt;

&lt;p&gt;For existing accounts, you &lt;strong&gt;must&lt;/strong&gt; link your account after login into gatekeeper, using the link &amp;#8220;Connect Github account&amp;#8221; in your &lt;a href="https://staging-gatekeeper.tech-angels.net/account"&gt;account page&lt;/a&gt;:&lt;/p&gt;

&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_mddbxogA7T1qa44ov.png" alt=""/&gt;&lt;/p&gt;</description><link>http://blog.tech-angels.com/post/40043304661</link><guid>http://blog.tech-angels.com/post/40043304661</guid><pubDate>Tue, 08 Jan 2013 23:54:00 +0100</pubDate><category>gemnasium</category><category>spectorus</category><category>Gatekeeper</category><category>github</category><category>authentication</category><category>jagan</category></item><item><title>Sweat conferencing</title><description>&lt;h1&gt;Tech-Angels is a Glassware-Cleaner Sponsor @railsberry&lt;/h1&gt;

&lt;p&gt;&lt;img src="http://media.tumblr.com/afdb909796f08be985581e92bdea0a7e/tumblr_inline_mfabxssDxT1qa44ov.jpg" alt=""/&gt;&lt;/p&gt;

&lt;p&gt;We were so thrilled by the last year event, we couldn&amp;#8217;t miss this one.&lt;br/&gt;
We&amp;#8217;re very proud and excited to be a (Glassware Cleaner) sponsor this year of the Railsberry conference, on April 22-23&amp;#160;2013 in Krakow, Poland.&lt;/p&gt;

&lt;p&gt;Please join us in the evening, we&amp;#8217;ll be happy to offer drinks!&lt;/p&gt;

&lt;p&gt;&lt;img src="https://fbcdn-sphotos-e-a.akamaihd.net/hphotos-ak-ash4/466889_281370581952001_1010777036_o.jpg" alt=""/&gt;&lt;/p&gt;

&lt;p&gt;More info: &lt;a href="http://railsberry.com/"&gt;http://railsberry.com/&lt;/a&gt;&lt;/p&gt;</description><link>http://blog.tech-angels.com/post/39659731642</link><guid>http://blog.tech-angels.com/post/39659731642</guid><pubDate>Fri, 04 Jan 2013 16:36:00 +0100</pubDate><category>sponsoring</category></item><item><title>Short Gemnasium presentation during Compiegne-rb meetup</title><description>&lt;a href="http://compiegne-rb.github.com/slides/2012-12-20-gemnasium.html#/2"&gt;Short Gemnasium presentation during Compiegne-rb meetup&lt;/a&gt;: &lt;p&gt;By Olivier Gonzalez (&lt;a href="https://twitter.com/gonzoyumo"&gt;@gonzoyumo&lt;/a&gt;).&lt;/p&gt;</description><link>http://blog.tech-angels.com/post/38464115029</link><guid>http://blog.tech-angels.com/post/38464115029</guid><pubDate>Fri, 21 Dec 2012 15:29:11 +0100</pubDate></item><item><title>Gemnasium 2.0</title><description>&lt;p&gt;This release marks the end of a big rewrite that lays the foundation of our vision for Gemnasium.&lt;/p&gt;

&lt;p&gt;We really aim to make it an essential tool that will help developers save time dealing with dependencies so they can stay focused on their work. We keep hearing your feedbacks and will add more and more useful stuff in the future but this rewrite already comes with a bunch of new things and updates that you may take a look at.&lt;/p&gt;

&lt;h2&gt;New colors&lt;/h2&gt;

&lt;p&gt;The colors scheme has been redefined and now follows these rules:&lt;/p&gt;

&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_meijz9CnWl1qa44ov.png" alt=""/&gt; green =&amp;gt; dependency is up to date with latest version available&lt;/p&gt;

&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_meijzhpK8r1qa44ov.png" alt=""/&gt; yellow =&amp;gt; there is at least one newer stable version available&lt;/p&gt;

&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_meijzrXaYu1qa44ov.png" alt=""/&gt; red =&amp;gt; the dependency is behind a security fix or an important update (broken API, deprecation, &amp;#8230;)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;First, as app maintainers we eat our own dog food and after a long time using Gemnasium we ended to this new scheme which better suits our needs. It also answers most of our customers feedback about these status colors.&lt;/p&gt;

&lt;p&gt;Having some outdated gems isn’t always a very bad thing: you may have missed the minor update about that feature you don’t use, so you’re behind latest. Well, yes but your app is still working great and there’s not threat on it. In such cases, the &lt;em&gt;scary&lt;/em&gt; red was a bit too much.&lt;/p&gt;

&lt;p&gt;On the other hand, staying just behind a tiny patch can be a very bad thing&amp;#8230; you know, this little patch which fixes that big security issue! And here, red is a good color to say: “hey, you really should take a look and update me now&amp;#8221;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;While green and yellow status updates will stay entirely automatic, the red one will now go through a manual process. For now, our team will take care of this by watching Rubygems updates and &lt;em&gt;flag&lt;/em&gt; them as security or important update. Of course, this implies that we can&amp;#8217;t do it for every Rubygems and only the most popular ones will be watched at first. But according to the Pareto principle, this should suit most of developers needs. We are also already working on alternative solutions to improve coverage.&lt;/p&gt;

&lt;p&gt;Note: Prerelease versions will still be notified when published but they are no longer considered as a leading factor in dependencies status choice.&lt;/p&gt;

&lt;h2&gt;Locked version awareness&lt;/h2&gt;

&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_me9je1nbHA1qa44ov.png" alt=""/&gt;&lt;/p&gt;

&lt;p&gt;The more you tell to Gemnasium, the more it will show you in return!&lt;/p&gt;

&lt;p&gt;If your repository contains a Gemfile.lock (aka lockfile), Gemnasium will now use it and check your dependencies against the versions that you really use in your application. This is a huge improvement and particularly for developers that heavily rely on  &lt;a href="http://docs.rubygems.org/read/chapter/16"&gt;Optimistic Version Constraint&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Say you have defined the following dependency requirement some times ago&amp;#160;:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;gem 'library', '&amp;gt;= 2.2.0' 
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;And now library 2.5.0 is out. Your requirement is still matching latest and any new install will get the 2.5.0 version.&lt;/p&gt;

&lt;p&gt;But as an app user you certainly use a lockfile to ensure all your environments are using exact same versions of your dependencies. And then, unless you have updated it, you may have something like version 2.3.0 in your lockfile.&lt;/p&gt;

&lt;p&gt;So your app is not using the latest version and this dependency is out-of-date! Now Gemnasium will warn you about this.&lt;/p&gt;

&lt;h2&gt;New badges&lt;/h2&gt;

&lt;p&gt;Ok they didn’t changed that much actually. The Travis-like style is really appreciated and developers are accustomed to it. So after some brush love and updated wording to match new colors meaning, here we go:&lt;/p&gt;

&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_me9hgfmIeK1qa44ov.png" alt=""/&gt;&lt;/p&gt;

&lt;p&gt;As an alternative, you still can use the dots version, available with just adding &lt;code&gt;?dots&lt;/code&gt; at the end of your badge url.&lt;/p&gt;

&lt;h2&gt;Gem versions history&lt;/h2&gt;

&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_mea0c9TvGm1qa44ov.png" alt=""/&gt;&lt;/p&gt;

&lt;p&gt;Gem page now provides versions history so you can get a quick overview. This place will also receive some nice updates soon to provide you more useful information, so stay tuned.&lt;/p&gt;

&lt;h2&gt;New settings for personal notifications&lt;/h2&gt;

&lt;p&gt;The new settings section offers you the ability to choose the email address on which you want to receive personal notifications.&lt;/p&gt;

&lt;p&gt;We also added &amp;#8220;daily&amp;#8221; and &amp;#8220;never&amp;#8221; frequencies in order to manage the notifications more finely or stop them for all your projects.&lt;/p&gt;

&lt;h2&gt;The new Hooks feature (available for business plans)&lt;/h2&gt;

&lt;p&gt;Email or Campfire hooks can now be defined on a per-profile basis that will be fired when a dependency is updated.&lt;/p&gt;

&lt;p&gt;The hooks are totally separated from personal notifications, they have their own target (email address or campfire room) and their own frequency. Hooks are also shared among all users who can access the profile they belong to and all of them can add/update/remove the hooks.&lt;/p&gt;

&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_mdr9hmsJpY1qa44ov.png" alt=""/&gt;&lt;/p&gt;

&lt;p&gt;We currently only provide Email and Campfire hooks, but feel free to suggest other ones if you need them!&lt;/p&gt;

&lt;h2&gt;In short&lt;/h2&gt;

&lt;p&gt;With all these new things combined together, you now have a great tool that will keep an eye on your dependencies 24/7 and warn you the way you want, when it matters to you.&lt;/p&gt;

&lt;p&gt;We hope you&amp;#8217;ll enjoy these changes and as always, your feedback is welcome!&lt;/p&gt;</description><link>http://blog.tech-angels.com/post/37192207715</link><guid>http://blog.tech-angels.com/post/37192207715</guid><pubDate>Tue, 04 Dec 2012 17:30:19 +0100</pubDate><category>gemnasium</category><category>changes</category></item><item><title>Gatekeeper sessions handling change</title><description>&lt;p&gt;Gatekeeper, the central place for your Tech-Angels account, is adopting new session rules.&lt;/p&gt;

&lt;p&gt;Your session will now resist to a browser restart. From now on, you MUST use the logout link if you don&amp;#8217;t want your session to stay open on a (public?) computer. 
To avoid issues with this new behavior, your password will be asked for important changes.
If you signed-up with Github, you can still set a password in your &lt;a href="https://gatekeeper.tech-angels.net/users/edit"&gt;account&lt;/a&gt; page.&lt;/p&gt;</description><link>http://blog.tech-angels.com/post/36583820657</link><guid>http://blog.tech-angels.com/post/36583820657</guid><pubDate>Mon, 26 Nov 2012 10:25:17 +0100</pubDate><category>Gatekeeper</category><category>changes</category></item><item><title>Active Record Identity Map makes it easier to stub Model dependencies</title><description>&lt;h2&gt;Problem&lt;/h2&gt;

&lt;p&gt;You want to write a unit test for this AccountController class. In order to test in isolation, you need to stub all the calls AccountController will make to models.&lt;/p&gt;

&lt;p&gt;Because of the way ActiveRecord works, it&amp;#8217;s tricky to write message expectations or stubs for an Account instance. You end up stubbing find and other AR methods, such as in the following example:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;account = mock_model(Account, :id =&amp;gt; "37")
Account.stub(:find).with("37") { account }
account.should_receive(:close)
post :close, :account_id =&amp;gt; "37"
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;The problem is that approach leads to fragile tests due to the nature of ActiveRecord Query API. There is almost an &amp;#8220;infinite&amp;#8221; way of retrieving models. Whenever you change the way you retrieve the model, you&amp;#8217;ll need to change your stubbing. For more information, I strongly recommend Avdi Grimm book&amp;#8217;s &lt;a href="http://objectsonrails.com/"&gt;Object on Rails&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;IdentityMap to the rescue!&lt;/h2&gt;

&lt;pre&gt;&lt;code&gt;before(:all) { ActiveRecord::IdentityMap.enabled = true }
after(:all) { ActiveRecord::IdentityMap.enabled = false }

account = Factory(:account)
account.should_receive(:close)
post :close, :account_id =&amp;gt; account.id
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&lt;a href="http://api.rubyonrails.org/classes/ActiveRecord/IdentityMap.html"&gt;ActiveRecord::IdentityMap&lt;/a&gt; ensures that each object gets loaded only once by keeping every loaded object in a map.&lt;/p&gt;

&lt;p&gt;When the AccountController retrieves an account, we can be sure it will be exactly the same object as in our test.&lt;/p&gt;

&lt;p&gt;One drawback is a slower test. We are now creating an account in the DB only to benefit from Identity Map. It&amp;#8217;s a trade off, we hope that more robust tests will save some time in the long run.&lt;/p&gt;

&lt;p&gt;An alternative is to use any_instance stubbing, such as:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;Account.any_instance.stub :close
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;But then, we loose the message expectation part and need to test something else. This approach could have side effects. As the name says, any instance of Account is stubbed!&lt;/p&gt;

&lt;p&gt;What do you think?&lt;/p&gt;

&lt;p&gt;Happy specing!&lt;/p&gt;</description><link>http://blog.tech-angels.com/post/36052989982</link><guid>http://blog.tech-angels.com/post/36052989982</guid><pubDate>Mon, 19 Nov 2012 08:00:00 +0100</pubDate><category>rspec</category><category>testing</category><category>IdentityMap</category><category>rails</category></item><item><title>Github authentication available!</title><description>&lt;p&gt;One of the most asked features is being released today: You can now connect to your Tech-Angels account using your Github account! No more password needed, unless you want one.
Please read the following before trying the feature:&lt;/p&gt;

&lt;h2&gt;Existing users&lt;/h2&gt;

&lt;p&gt;If you already have a Tech-Angels account (ie: to use &lt;a href="https://gemnasium.com"&gt;https://gemnasium.com&lt;/a&gt;), you must sign-in first with your current account, and then link it with your Github account:&lt;/p&gt;

&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_mddbxogA7T1qa44ov.png" alt=""/&gt;&lt;/p&gt;

&lt;p&gt;You can unlink your account from the same location.&lt;/p&gt;

&lt;h2&gt;New users&lt;/h2&gt;

&lt;p&gt;New users can simply click on the new &amp;#8220;Connect with Github&amp;#8221; link in the nav bar. If your public data is complete on Github, your account should be created right away, otherwise you will be invited to fill your missing information.&lt;/p&gt;

&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_mddg0n53BJ1qa44ov.png" alt=""/&gt;&lt;/p&gt;

&lt;h2&gt;New password policy&lt;/h2&gt;

&lt;p&gt;This feature introduce a new policy regarding passwords:&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;Users coming from Github directly don&amp;#8217;t have a password, so it won&amp;#8217;t be required to update your account information&lt;/li&gt;
&lt;li&gt;Users who linked their existing account have a password, it will be asked to update your account information.&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_mddg32wvoV1qa44ov.png" alt=""/&gt;&lt;/p&gt;

&lt;p&gt;If you don&amp;#8217;t have a password, and want to increase the security of your account, you can set-up one after sign-up from Github. It will then be asked to protect modifications on your account (including plans subscriptions very soon).&lt;/p&gt;

&lt;h2&gt;Why do I have to allow the application twice on Github when I use Gemnasium?&lt;/h2&gt;

&lt;p&gt;Our account management app (Gatekeeper) is using the smallest scope available on github, it will just fetch your user ID + your public data. While this is enough to create a Tech-Angels account, Gemnasium needs to access to your repositories to check dependencies.&lt;/p&gt;</description><link>http://blog.tech-angels.com/post/35561414206</link><guid>http://blog.tech-angels.com/post/35561414206</guid><pubDate>Mon, 12 Nov 2012 14:49:51 +0100</pubDate><category>gatekeeper</category><category>gemnasium</category><category>github</category><category>oauth</category><category>features</category></item><item><title>Devise tip: authenticate a user with a password</title><description>&lt;p&gt;Have you ever tried to authenticate a user with a password using Devise?&lt;/p&gt;

&lt;p&gt;I am afraid using google won&amp;#8217;t help on this one: been there, done that. Hopefully, this blog post should help google to find the solution next time.&lt;/p&gt;

&lt;p&gt;Devise API is pretty modular, there is actually a #valid_password? method which does exactly what we need:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;class UserAuthenticator

  def authenticate(email, unencrypted_password)
    user = User.where(email: email).first
    return false unless user

    if user.valid_password?(unencrypted_password)
      user
    else
      false
    end
  end

end    
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Link to &lt;a href="http://rubydoc.info/github/plataformatec/devise/master/Devise/Models/DatabaseAuthenticatable#valid_password%3F-instance_method"&gt;Devise rubydoc&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The UserAuthenticator service is heavily inspired by &lt;a href="http://blog.codeclimate.com/blog/2012/10/17/7-ways-to-decompose-fat-activerecord-models/"&gt;this codeclimate blog post&lt;/a&gt;, which I strongly recommend you to read and practice.&lt;/p&gt;

&lt;p&gt;Please give us some feedback about this blog post and any theme you want us to blog about.&lt;/p&gt;</description><link>http://blog.tech-angels.com/post/34289528531</link><guid>http://blog.tech-angels.com/post/34289528531</guid><pubDate>Thu, 25 Oct 2012 12:00:00 +0200</pubDate><category>devise</category><category>ruby on rails</category></item><item><title>Annoucing npmhooks.org</title><description>&lt;p&gt;We&amp;#8217;re pleased to announce today the launch of &lt;a href="https://npmhooks.org"&gt;https://npmhooks.org&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_mb11716aOj1qa44ov.png" alt=""/&gt;&lt;/p&gt;

&lt;p&gt;Npmhooks is similar to &lt;a href="http://rubygems.org"&gt;rubygems&lt;/a&gt; &lt;a href="http://guides.rubygems.org/rubygems-org-api/"&gt;API&lt;/a&gt; and enables webhooks on npm packages updates. Once a webhook is registered, it will be pinged in real-time. It is powered by a CouchDB database at &lt;a href="http://isaacs.iriscouch.com/registry."&gt;http://isaacs.iriscouch.com/registry.&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;Getting started&lt;/h1&gt;

&lt;p&gt;It&amp;#8217;s very easy, the API is a simple HTTP Restful API. First, you need to register a webhook (a listener URL):&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;curl -H 'Authorization:YOUR_API_KEY' \
-F 'url=http://requestb.in/171hq0u1' \
&lt;a href="https://npmhooks.org/api/v1/web_hooks"&gt;https://npmhooks.org/api/v1/web_hooks&lt;/a&gt;

Successfully created webhook to &lt;a href="http://requestb.in/171hq0u1"&gt;http://requestb.in/171hq0u1&lt;/a&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;(&lt;a href="http://request.bin"&gt;Requestb.in&lt;/a&gt; is a good way to test webhooks).&lt;br/&gt;
And all updates will fired on this URL right away. Nothing more.&lt;/p&gt;

&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_mb124lN3WW1qa44ov.png" alt=""/&gt;&lt;/p&gt;

&lt;h1&gt;Credits&lt;/h1&gt;

&lt;p&gt;Npmhooks was developed by &lt;a href="https://github.com/cjoudrey"&gt;Christian Joudrey&lt;/a&gt;, is fully open-sourced, and sponsored by Tech-Angels.&lt;br/&gt;
Special thanks to &lt;a href="https://github.com/isaacs"&gt;Isaacs&lt;/a&gt; for the registery.&lt;/p&gt;</description><link>http://blog.tech-angels.com/post/32414074186</link><guid>http://blog.tech-angels.com/post/32414074186</guid><pubDate>Thu, 27 Sep 2012 23:28:12 +0200</pubDate><category>node.js</category><category>npm</category><category>npmhooks.org</category><category>sponsoring</category><category>opensource</category></item></channel></rss>
